4
respostas

erro na função ativar restaurante ou altenar restaurante

entao galera, estou criando certinho a função, mas quando eu aplico o for e if para a pesquisa do restaurante salvo na área de cadastrar restaurante. ele não ativa e não busca o restaurante selecionado. ele simplesmente cai na opção e função "voltar_ao_menu_principal" e imprime a mensagem "Digite uma tecla pra voltar ao menu principal". Gostaria de entender o que estou fazendo de errado por que parei e estacionei nessa parte. ficaria muito grato se alguem pudesse me dar uma força

def altenar_estado_restaurante():
    exibir_subtitulos('Ativando Restaurante')
    nome_restaurante = input("Digite o Nome do Restaurante que deseja Ativar: ")
    restaurante_encontrado = False

    for restaurante in 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 foi desativado com sucesso'
            print(mensagem)
        
if not restaurante_encontrado:
    print('restaurante não foi encontrado')

voltar_ao_menu_principal()
4 respostas

Olá boa tarde Lucas, vamos tentar entender o que esta acontecendo!

1: Na linha restaurante_encontrado == True, você usou o operador de comparação (==) em vez do operador de atribuição (=). Deve ser restaurante_encontrado = True.

2: A variável restaurantes não foi definida dentro da função. Certifique-se de que ela exista no escopo adequado ou passe-a como um argumento para a função.

3: A mensagem de desativação não inclui o nome do restaurante. Você pode querer alterar para f'O restaurante {nome_restaurante} foi desativado com sucesso'.

Exemplo que talvez resolva

def alternar_estado_restaurante(restaurantes):
    exibir_subtitulos('Ativando Restaurante')
    nome_restaurante = input("Digite o Nome do Restaurante que deseja Ativar: ")
    restaurante_encontrado = False

    for restaurante in restaurantes:
        if nome_restaurante == restaurante['nome']:
            restaurante_encontrado = True
            restaurante['ativo'] = not restaurante['ativo']
            mensagem = f'O restaurante {nome_restaurante} foi {"ativado" if restaurante["ativo"] else "desativado"} com sucesso'
            # na fstring acima usei uma condicional para verificar se o restaurante está ativo, se estiver ativo escrever ativado, senão desativado.
            print(mensagem)
            break  # Interrompe o loop se o restaurante for encontrado

    if not restaurante_encontrado:
        print('Restaurante não foi encontrado')

    voltar_ao_menu_principal()

Oi, Lucas? Sabe quando você quer dizer "sim" mas acidentalmente diz "não"? Foi mais ou menos isso que aconteceu no seu código. Na linha onde você queria dizer que encontrou o restaurante e mudar o restaurante_encontrado para True, você acabou não mudando nada porque usou "==" que é para comparar, e não para atribuir um valor. Muda essa linha para restaurante_encontrado = True. Outra coisa, a função voltar_ao_menu_principal() está sendo chamada direto, não importa o que aconteça. Se você só quer chamar ela quando o restaurante não for encontrado, coloca ela dentro do if que verifica isso. Pode ser assim:

if not restaurante_encontrado:
    print('Restaurante não foi encontrado')
    voltar_ao_menu_principal()

Espero que tenha ajudado!

oii Beatriz. Arrumei sobre o sinal de "==" para "=" mas mesmo assim ainda esta dando opção invalida e imprime pra eu teclar uma tecla pra voltar ao menu principal.

to ficando doido ja kkkk, oq pode ta errado nesse codigo?

def alternar_estado_restaurante(): exibir_subtitulos('ALterando estado do restaurante') nome_restaurante = input('Digite o nome do restaurante que deseja alterar o estado: ') restaurante_encontrado = False

for restaurante in 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('O restaurante não foi encontrado')
    voltar_ao_menu_principal()

Verifique se a função está conseguindo acessar corretamente a lista de restaurantes, provavelmente você definiu a lista como uma variavel global, mas pra garantir que a função tenha acesso a ela Você pode passar como argumento.

def alternar_estado_restaurante(restaurantes): # a função alternar_estado_restaurante recebe uma lista de restaurantes como argumento 
    exibir_subtitulos('Ativando Restaurante')
    nome_restaurante = input("Digite o Nome do Restaurante que deseja Ativar: ")
    restaurante_encontrado = False

    for restaurante in restaurantes: # usa a lista que recebeu como argumento para o loop.
        if nome_restaurante == restaurante['nome']:
            restaurante_encontrado = True
            restaurante['ativo'] = not restaurante['ativo']
            mensagem = f'O restaurante {nome_restaurante} foi {"ativado" if restaurante["ativo"] else "desativado"} com sucesso'
            # na fstring acima usei uma condicional para verificar se o restaurante está ativo, se estiver ativo escrever ativado, senão desativado.
            print(mensagem)
            break  # Interrompe o loop se o restaurante for encontrado

Assim deve garantir que a variavel com a lista de restaurantes está visivel no escopo da função.