How to not execute lines of code when the name is not in the list

Asked

Viewed 67 times

-2

Good evening! I’m starting Python programming. I have this exercise (book) that I changed to have more user interaction. When we insert a string that is not in the list, it presents the 'menu'. How do I execute only the message "Sorry, your name..." and not present the 'menu' for that string that is off the list.

 lista_convidados = ['arthur', 'maria', 'roberto', 'naime', 'letícia']

cardapio = ['lasanha', 'hamburguer', 'fritas', 'picanha', 'feijoada', 'bisteca']

pergunta = input('Boa noite SR(a), informe seu nome: ')

resposta = pergunta.lower()

for nome in lista_convidados:
    if resposta == nome:
        print(f'Seja bem-vindo {resposta.title()}, entre e faça seu pedido.\n ')
        break

else:
    print(f'Desculpe {resposta.title()}, seu nome não está na lista.\n'
        f'Obrigado pela a preferência, VOLTE SEMPRE!\n')



# Cliente pode escolher o prato desejado.

print("********** C A R D Á P I O **********\n")

for menu in cardapio:
    if menu in cardapio:
        print(f'{menu.title()}: ')

print("\n*************************************")

pedido_menu = input('\nDigite o prato desejado: ')

resposta_menu = pedido_menu.lower()

for escolha in cardapio:

    if resposta_menu == escolha:
        print(f'Ótima escolha, a {resposta_menu.title()} está deliciosa!')
        break

else:
    print(f'Desculpe {resposta.title()}, não estamos servindo esse prato hoje.\n'
          f'OBRIGADO PELA PREFERÊNCIA, VOLTE SEMPRE!')

3 answers

3

Tip to improve the code: ( Operator "in" )

First of all, you can check if the name is on the guest list using the operator in, there is no need to check item by item with the for loop. Example:

lista_convidados = ['arthur', 'maria', 'roberto', 'naime', 'letícia']
cardapio = ['lasanha', 'hamburguer', 'fritas', 'picanha', 'feijoada', 'bisteca']

nome = input('Boa noite SR(a), informe seu nome: ').lower()

if nome in lista_convidados:
    print(f'Seja bem-vindo {nome.title()}, entre e faça seu pedido.\n ')

else:
    print(f'Desculpe {nome.title()}, seu nome não está na lista.\n'
        f'Obrigado pela a preferência, VOLTE SEMPRE!\n')

Terminating the program if the user is not in the list: ( Quit and sys.Exit functions )

Now regarding not presenting the menu for those who are not invited, you can use the function quit(). This function will terminate the execution of your program and can be used if you want your program to end for the user who is not in the list. Example:

for nome in lista_convidados:
    if resposta == nome:
        print(f'Seja bem-vindo {resposta.title()}, entre e faça seu pedido.\n ')
        break

else:
    print(f'Desculpe {resposta.title()}, seu nome não está na lista.\n'
        f'Obrigado pela a preferência, VOLTE SEMPRE!\n')
    quit()

Another function you can use is the sys.exit(status). He does the same thing quit() but it returns a code when closing the program. Example:

import sys

# ...

for nome in lista_convidados:
        if resposta == nome:
            print(f'Seja bem-vindo {resposta.title()}, entre e faça seu pedido.\n ')
            break

else:
    print(f'Desculpe {resposta.title()}, seu nome não está na lista.\n'
        f'Obrigado pela a preferência, VOLTE SEMPRE!\n')
    sys.exit(17) # Código de exemplo: 17 significa que o cliente não está na lista.

Presenting the menu only to the client who is in the list: ( Creating functions )

If you want to proceed with your program without the user having access to the menu, you can isolate your menu code within the block if or create a function to show the menu only to those on the guest list. Example:

def mostraCardapio(cardapio):
    """
    Função para mostrar o cardápio e obter pedido do cliente.
    """

    print("********** C A R D Á P I O **********\n")

    for menu in cardapio:
        print(f'{menu.title()}: ')

    print("\n" + "*" * 37)  # Imprime o asterisco 37 vezes.

    resposta = input('\nDigite o prato desejado: ').lower()

    if resposta in cardapio:
        print(f'Ótima escolha, a {resposta.title()} está deliciosa!')

    else:
        print(f'Desculpe {resposta.title()}, não estamos servindo esse prato hoje.\n'
              f'OBRIGADO PELA PREFERÊNCIA, VOLTE SEMPRE!')



lista_convidados = ['arthur', 'maria', 'roberto', 'naime', 'letícia']
cardapio = ['lasanha', 'hamburguer', 'fritas', 'picanha', 'feijoada', 'bisteca']

nome = input('Boa noite SR(a), informe seu nome: ').lower()

if nome in lista_convidados:
    print(f'Seja bem-vindo {nome.title()}, entre e faça seu pedido.\n ')
    mostraCardapio(cardapio)

else:
    print(f'Desculpe {nome.title()}, seu nome não está na lista.\n'
        f'Obrigado pela a preferência, VOLTE SEMPRE!\n')

Like I said, you can isolate the code to show the menu inside the block if without creating a function, but its code would not be very well organized. Another advantage of creating a function to show the menu, is that you can call it several times so that the user can place an order as many times as he wishes.

You can learn more about Python functions by clicking here on this website and to learn more about creating a well-organized code, I suggest you take a look at the subject "Clean Code".

  • It is better to have a function to show the menu and another to ask about the desired dish.

  • Thank you very much! Using the form you explained I managed to apply in the code. And other improvements that I didn’t know were possible to make the code cleaner and readable.

  • @Lucasmaraal In fact, following good practices, this code should be created functions such as verificaCliente, mostraCardapio and realizaPedido, But I didn’t do it because I didn’t want to extend the answer as much as I did to stay focused. Not to mention @echaves is still a beginner, so for now, he needs to study about functions and others to then think about keeping the code well organized.

0

I believe that your material has not yet presented functions, so for you to solve this exercise following the textbook, you must work with the concept of nesting. It’s not the best approach, but in a learning curve it makes sense that you do it this way a few times. Note that I used sys.exit() so that the program ends, if we don’t pass any arguments to this function it will end the program with exit status zero, which means the program has successfully ended.

import sys 

lista_convidados = ['arthur', 'maria', 'roberto', 'naime', 'letícia']

cardapio = ['lasanha', 'hamburguer', 'fritas', 'picanha', 'feijoada', 'bisteca']

pergunta = input('Boa noite SR(a), informe seu nome: ')

resposta = pergunta.lower()

for nome in lista_convidados:
    if resposta == nome:
        print(f'Seja bem-vindo {resposta.title()}, entre e faça seu pedido.\n ')

        # Cliente pode escolher o prato desejado.

        print("********** C A R D Á P I O **********\n")

        for menu in cardapio:
            if menu in cardapio:
                print(f'{menu.title()}: ')

        print("\n*************************************")

        pedido_menu = input('\nDigite o prato desejado: ')

        resposta_menu = pedido_menu.lower()

        for escolha in cardapio:

            if resposta_menu == escolha:
                print(f'Ótima escolha, a {resposta_menu.title()} está deliciosa!')
                sys.exit() 
            else:
                print(f'Desculpe {resposta.title()}, não estamos servindo esse prato hoje.\n'
                    f'OBRIGADO PELA PREFERÊNCIA, VOLTE SEMPRE!')
                sys.exit() 

print(f'Desculpe {resposta.title()}, seu nome não está na lista.\n'
      f'Obrigado pela a preferência, VOLTE SEMPRE!\n')

0

You might try to do something like:

def verifica_cliente(resposta):
    lista_convidados = ['arthur', 'maria', 'roberto', 'naime', 'letícia']

    if resposta in lista_convidados:
        print(f'Seja bem-vindo {resposta.title()}, entre e faça seu pedido.\n ')
        verifica_cardapio(resposta)
    else:
        print(f'\nDesculpe {resposta.title()}, seu nome não está na lista.')
        print(f'Obrigado pela a preferência, VOLTE SEMPRE!\n')


def verifica_cardapio(resposta):
    cardapio = ['lasanha', 'hamburguer', 'fritas', 'picanha', 'feijoada', 'bisteca']
    # Cliente pode escolher o prato desejado.

    print("********** C A R D Á P I O **********\n")
    for menu in cardapio:
        print(f'{menu.title()}: ')

    print("\n*************************************")

    resposta_menu = input('\nDigite o prato desejado: ').lower()

    for escolha in cardapio:
        if resposta_menu == escolha:
            print(f'Ótima escolha {resposta.title()}, a {resposta_menu.title()} está deliciosa!')
            break

        else:
            print(f'Desculpe {resposta.title()}, não estamos servindo esse prato hoje.\n'
                  f'OBRIGADO PELA PREFERÊNCIA, VOLTE SEMPRE!')

resposta = input('Boa noite SR(a), informe seu nome: ').lower()
verifica_cliente(resposta)

Browser other questions tagged

You are not signed in. Login or sign up in order to post.