Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Duvida em como imprimir valores de uma lista.

Estava tentando resolver alguns exercícios e me deparei com um, onde eu não estou conseguindo imprimir os valores corretos de uma lista.

O exercício pede para receber alguns parâmetros, Nome, idade, Cidade e Telefone e imprimir esses valores no formato :

"Olá Nome, você tem idade, e mora em Cidade e seu telefone é Telefone" Eu até consegui fazer imprimir desta forma, mas só se fosse uma unica entrada.

Pois bem, cheguei ao código abaixo :

cadastro = list()

while True :
   nome = (str(input('Informe o nome: ')))
   idade = (int(input('Informe o idade: ')))
   cidade = (str(input('Informe o cidade: ')))
   telefone = (str(input('Informe o telefone: ')))
   cadastro.append([nome,idade,cidade,telefone])
   resp = str(input('Deseja continuar? [S/N]) '))

   if resp in 'Nn':
              break

for i in range (0, len(cadastro)):
    print(f'Olá,{cadastro[i]} , você tem {cadastro[i]} anos, mora em {cadastro[i]} e seu telefone é {cadastro[i]}')

Dessa forma esta mostrando todos os campos ao invés de um só. De outra forma que eu fiz a saída ficou ainda pior, pois estava mostrando a mesma variável em todos os campos e repetindo inúmeras vezes.

Poderiam me explicar, como imprimir toda a lista, de uma forma que a variável correta apareço no print ?

3 respostas
solução!

Olá Jobson! Como vai?

O código não funciona por que i se refere a posição dentro da lista , e não dentro do array. Sendo assim, ele sempre retornará o array como um todo que está guardado naquela posição da lista.

Você precisa adicionar mais uma referencia para a posição dentro do array. Como seu array tem um número fixo de posições, isso pode ser feito dessa forma.

for i in range (0, len(cadastro)):
    print(f'Olá,{cadastro[i][0]} , você tem {cadastro[i][1]} anos, mora em {cadastro[i][2]} e seu telefone é {cadastro[i][3]}')

Testei e funciona, me parece ser do modo que você espera, nesse curso que você está fazendo na aula 4 e 5 tem mais informações sobre manipulação de strings, o append parece adicionar apenas uma variável de cada vez, por isso usei extend. Espero ter ajudado!

cadastro = []

while True :
   nome = (str(input('Informe o nome: ')))
   idade = (int(input('Informe o idade: ')))
   cidade = (str(input('Informe o cidade: ')))
   telefone = (str(input('Informe o telefone: ')))
   cadastro.extend([nome,idade,cidade,telefone])
   resp = str(input('Deseja continuar? [S/N]) '))

   if resp in 'Nn':
              break

print('Olá,{} , você tem {} anos, mora em {} e seu telefone é {}'.format(cadastro[0],cadastro[1],cadastro[2],cadastro[3]))

Obrigado por responderem. A explicação da Mariana Prevot, foi excelente, e resolveu o problema e esclareceu minha duvida.

A resposta do André Victor, eu havia algo parecido da outra vez, e só imprime a primeira linha do cadastro, se eu colocar mais dados só imprime a primeira.

Obrigado a ambos por responderem.