Lista: estrutura sequencial indexada

Problema 1:

Dados n > 0 e uma sequência com n números reais, imprimí-los na ordem inversa a da leitura.

Dica: Criar uma lista vazia (seq = []) e usar append.

Solução 1:

Vamos fazer do modo tradicional, imprimindo dentro de um while.

n = int(input("Digite n: "))

seq = []
i = 0
while i < n:
    num = int(input("Digite num: "))
    seq.append(num)
    i += 1

i = n-1
while i >= 0:
    print(seq[i])
    i -= 1
  

Solução 2:

Solução alternativa usando o comando for.

n = int(input("Digite n: "))

seq = []
for i in range(n):
    num = int(input("Digite num: "))
    seq.append(num)

for i in range(n-1, -1, -1):
    print(seq[i])
  

Solução 3:

Outra solução alternativa usando o comando for com índices negativos.

n = int(input("Digite n: "))

seq = []
for i in range(n):
    num = int(input("Digite num: "))
    seq.append(num)

for i in range(-1, -n-1, -1):
    print(seq[i])
  

Solução 4:

No Python, é possível fazer: print(seq.reverse()).

n = int(input("Digite n: "))

seq = []
for i in range(n):
    num = int(input("Digite num: "))
    seq.append(num)

seq.reverse()
for x in seq:
    print(x)
  

Problema 2:

Dados n > 0 lançamentos de uma roleta (números entre 0 e 36), calcular a frequência de cada número.

Dicas:

n = int(input("Digite n: "))

freq = [0]*37

for i in range(n):
    num = int(input("roleta: "))
    freq[num] += 1

i = 0
for x in freq:
    print("freq.rel.(%d): %f"%(i,x/n))
    i += 1    
  

Problema 3:

Dada uma sequência de n > 0 números reais, imprimi-los eliminando as repetições.

Solução 1:

Solução usando while.

n = int(input("Digite n: "))

seq = []
for i in range(n):
    num = int(input("num%02d: "%(i)))
    rep = False
    j = 0
    while j < len(seq) and rep == False:
        if seq[j] == num:
            rep = True
        j += 1
    if rep == False: # if not rep:
        seq.append(num)

print(seq)
  

Solução 2:

Solução usando for.

n = int(input("Digite n: "))

seq = []
for i in range(n):
    num = int(input("num%02d: "%(i)))
    rep = False
    for x in seq:
        if x == num:
            rep = True
    if rep == False: # if not rep:
        seq.append(num)

print(seq)
  

Solução 3:

Solução compacta, aproveitando o fato de que o Python permite testar diretamente se um elemento não faz parte de uma lista, através do comando if num not in seq:

n = int(input("Digite n: "))

seq = []
for i in range(n):
    num = int(input("num%02d: "%(i)))
    if num not in seq:
        seq.append(num)

print(seq)
  

Problema 4:

Dados dois números naturais n e m e duas sequências ordenadas com n > 0 e m > 0 números inteiros, criar uma nova lista contendo a sequência ordenada com todos os elementos das sequências originais sem repetição.

Sugestão: Imagine uma situação real, por exemplo, dois fichários de uma biblioteca.

n = int(input("Digite n: "))
seq1 = []
for i in range(n):
    num = int(input("Digite o num%02d:"%(i)))
    seq1.append(num)    

m = int(input("Digite m: "))
seq2 = []
for i in range(m):
    num = int(input("Digite o num%02d:"%(i)))
    seq2.append(num)    

seq3 = []
i,j = 0,0
while i < len(seq1) and j < len(seq2):
    if seq1[i] < seq2[j]:
        seq3.append(seq1[i])
        i += 1
    elif seq2[j] < seq1[i]:
        seq3.append(seq2[j])
        j += 1
    else:
        seq3.append(seq1[i])
        i += 1
        j += 1

while i < len(seq1):
    seq3.append(seq1[i])
    i += 1

while j < len(seq2):
    seq3.append(seq2[j])
    j += 1

print(seq3)