Olá, Vinicius, como vai?
O comportamento de “opção inválida” não está diretamente ligado à mudança do nome da variável para nome_restaurantes, mas sim à lógica dentro da função ativar_restaurante. Existem alguns pontos ali que impedem o funcionamento correto e podem acabar quebrando o fluxo do programa.
O principal problema está neste trecho:
for nome_restauranteS in nome_restaurante:
Aqui você está fazendo um for sobre a variável nome_restaurante, que é uma string digitada pelo usuário. Quando você faz um for em uma string, o Python percorre letra por letra. Por exemplo, se o usuário digitar "ifood", o laço vai percorrer "i", depois "f", depois "o" e assim por diante. O que você realmente precisa é percorrer a lista nome_restaurantes, que é onde estão os dicionários com os dados dos restaurantes.
Outro ponto é esta comparação:
if nome_restaurante == nome_restaurantes['nome']:
nome_restaurantes é uma lista, e listas não podem ser acessadas com chave como se fossem dicionários. Quem tem a chave 'nome' é cada item dentro da lista. Por isso, você precisa iterar assim:
for restaurante in nome_restaurantes:
if nome_restaurante == restaurante['nome']:
Além disso, você escreveu:
restaurante_encontrado == True
Aqui você usou operador de comparação (==) em vez de atribuição (=). Dessa forma, o valor não alterado. O correto é:
restaurante_encontrado = True
E também a inversão do ativo deve ser feita no restaurante específico dentro do loop:
restaurante['ativo'] = not restaurante['ativo']
Juntando tudo, sua função ativar_restaurante deveria ficar assim, mantendo o nome nome_restaurantes como você escolheu:
def ativar_restaurante():
exibir_subtitulo('Ativar restaurante')
nome_restaurante = input('Digite o nome do restaurante que deseja ativar: ')
restaurante_encontrado = False
for restaurante in nome_restaurantes:
if nome_restaurante == restaurante['nome']:
restaurante_encontrado = True
restaurante['ativo'] = not restaurante['ativo']
mensagem = f'O restaurante {nome_restaurante} foi ativado com sucesso' if restaurante['ativo'] else f'O restaurante {nome_restaurante} foi desativado com sucesso'
print(mensagem)
if not restaurante_encontrado:
print(f'Restaurante {nome_restaurante} não encontrado.\n')
voltar_menu_principal()
Com essa estrutura, você percorre corretamente a lista de dicionários, compara o nome digitado com a chave 'nome' de cada restaurante e alterna o valor booleano de 'ativo'.
Se continuar apresentando comportamento inesperado, compartilhe o novo erro que analisamos juntos. O fórum está à disposição para te ajudar.
Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!