1
resposta

[Dúvida] Erro no codigo atividade 1

Estou fazendo a primeira atividade de fazer a lista de 1 a 10, lista de 4 nomes e a lista do ano de nascimento e do ano atual. Tentei usar o que eu sabia, porém a lista de números e dos anos está dando algum erro que não encontrei, somente a dos nomes está funcionando... Meu código:

import os

numeros = ['1, 2, 3, 4, 5, 6, 7, 8, 9, 10']
nomes = []
ano = []

def titulo():
    print ('Menu Exercícios da alura.\n')

def lista_numeros():
    comeco_programa('Lista de números de 1 a 10:')
    print(numeros)
    voltar_menu()

def lista_nomes():
    comeco_programa('Lista de 4 nomes: ')
    nomes_escolha = input('\nDigite 4 nomes de sua escolha: ')
    nomes.append(nomes_escolha)
    print('Os nomes escolhidos foram: ')
    for nome in nomes:
        print(f'{nome}')
    voltar_menu()

def lista_anos():
    comeco_programa('Lista do seu ano de nascimento e o ano atual.')
    anonasc = input('Digite o seu ano de nascimento: ')
    anoatual = input('Digite o ano atual em que estamos: ')
    ano.append(anonasc, anoatual)
    print(f'O ano que voce nasceu e o ano atual, sao: {ano}')
    voltar_menu()
    
def mostrar_opcoes():
    print ('1. Lista de números de 1 a 10')
    print ('2. Lista de 4 nomes')
    print ('3. Lista do seu ano de nascimento e o ano atual')
    input ('Escolha uma opção: ')

def escolher_opcoes():
    try:
        opcao_escolhida = int(input('Escolha uma opcao'))

        if opcao_escolhida == 1:
            lista_numeros()
        elif opcao_escolhida == 2:
            lista_nomes()
        elif opcao_escolhida == 3:
            lista_anos()
    except:
        opcao_invalida()

def comeco_programa(texto):
    os.system('cls')
    print(texto)


def opcao_invalida():
    print('Opção inválida!')
    voltar_menu()

def voltar_menu():
    input ('\nDigite uma tecla para voltar para o menu principal')
    main()

def main():
    os.system('cls')
    titulo()
    mostrar_opcoes()
    escolher_opcoes()


if __name__ == '__main__':
    main()
1 resposta

Oi Pedro, tudo bem?

Analisando seu código, identifiquei alguns problemas que podem estar causando erros:

Erro na lista de números: A lista de números está definida como uma lista com um único elemento, que é uma string '1, 2, 3, 4, 5, 6, 7, 8, 9, 10'. Isso deve ser uma lista de números inteiros, não uma string.

Erro ao adicionar anos à lista: Quando você tenta adicionar elementos à lista ano, você está usando o método append de forma incorreta. O método append aceita apenas um argumento por vez.

Você pode fazer uns ajustes:

import os

numeros = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]  # Lista corrigida para números inteiros
nomes = []
ano = []

def titulo():
    print('Menu Exercícios da alura.\n')

def lista_numeros():
    comeco_programa('Lista de números de 1 a 10:')
    print(numeros)
    voltar_menu()

def lista_nomes():
    comeco_programa('Lista de 4 nomes: ')
    for _ in range(4):
        nome_escolha = input(f'Digite o nome {_ + 1}: ')
        nomes.append(nome_escolha)
    print('Os nomes escolhidos foram: ')
    for nome in nomes:
        print(f'{nome}')
    voltar_menu()

def lista_anos():
    comeco_programa('Lista do seu ano de nascimento e o ano atual.')
    anonasc = input('Digite o seu ano de nascimento: ')
    anoatual = input('Digite o ano atual em que estamos: ')
    ano.extend([anonasc, anoatual])  # Adicionando ambos os anos à lista
    print(f'O ano que você nasceu e o ano atual, são: {ano}')
    voltar_menu()

def mostrar_opcoes():
    print('1. Lista de números de 1 a 10')
    print('2. Lista de 4 nomes')
    print('3. Lista do seu ano de nascimento e o ano atual')
    return input('Escolha uma opção: ')

def escolher_opcoes():
    try:
        opcao_escolhida = int(mostrar_opcoes())
        if opcao_escolhida == 1:
            lista_numeros()
        elif opcao_escolhida == 2:
            lista_nomes()
        elif opcao_escolhida == 3:
            lista_anos()
        else:
            opcao_invalida()
    except ValueError:
        opcao_invalida()

def comeco_programa(texto):
    os.system('cls')
    print(texto)

def opcao_invalida():
    print('Opção inválida!')
    voltar_menu()

def voltar_menu():
    input('\nDigite uma tecla para voltar para o menu principal')
    main()

def main():
    os.system('cls')
    titulo()
    escolher_opcoes()

if __name__ == '__main__':
    main()

Vamos recapitular o que aconteceu:

  1. Lista de Números Corrigida:

    • A lista numeros foi corrigida para conter números inteiros, e não uma string. Agora, ela é definida como:
      numeros = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
      
  2. Lista de Nomes:

    • No método lista_nomes(), ajustamos o loop para que o usuário insira 4 nomes individualmente e, em seguida, adicionamos cada nome à lista nomes.
  3. Lista de Anos:

    • No método lista_anos(), modificamos a forma como os anos são adicionados à lista ano. Agora, utilizamos o método extend() para adicionar ambos os anos (de nascimento e atual) à lista ano.
  4. Seleção de Opções:

    • A função mostrar_opcoes() foi modificada para imprimir as opções e, em seguida, retornar a opção escolhida pelo usuário através da função input().
    • A função escolher_opcoes() foi ajustada para capturar diretamente o valor retornado pela função mostrar_opcoes(), convertendo-o em um inteiro e executando a função correspondente com base na escolha do usuário.
  5. Tratamento de Erros:

    • Dentro da função escolher_opcoes(), implementamos um bloco try-except para capturar possíveis erros de ValueError (quando o usuário insere algo que não é um número inteiro). Caso esse erro ocorra, a função opcao_invalida() é chamada, informando ao usuário que uma opção inválida foi selecionada.

Ao fazer essas correções, o código agora funciona corretamente, permitindo que você selecione uma opção apenas uma vez e evitando os erros mencionados anteriormente.

Um abraço e bons estudos.