Error in python print

Asked

Viewed 202 times

1

Hello, I have a little problem, I think it’s simple and I’ll get help here. I have a code that gets a name, check if it is 'Elves', if it’s printa 'welcome', if it’s not printa 'unauthorized'. The problem is that when I hit the first name it prints the 'welcome', but when I’m wrong a few times and only then I get it right, it doesn’t print the 'welcome', simply closes.

name=str(input('Write your name: ')) #Recebe o nome

def check(name): #Função para checar se o nome é elvis
    while(name!='elvis'): #Loop que fica pedindo o nome até ser digitado o correto
        print('You are not allowed!') #Mensagem avisando que não tem permissão
        name=str(input('Write your name: ')) #Recebe o nome novamente

def sucess(name): #Função que mostra a mensagem 'bem vindo'
    if(name=='elvis'): #Verifica se o nome que foi digitado é elvis
        print('Welcome {}!'.format(name)) #Mensagem de boas vindas
    else: #Caso não seja a função acima é chamada
        check(name)

sucess(name) #Função acima
  • I edited the answer suggesting a new version for your code where the 2 functions are joined in one. Check it out.

  • @Max I did as you suggested and really the code got much more interesting. Thanks!

  • Oops. Show @Uondaime I’m happy. Don’t forget to accept the answer by clicking on the green check icon below the dot counter. So you help the community. Hugs

1 answer

2


This happens because after the name is wrong, you ask for it to be inserted again, but within the function check. So, as long as the name is entered correctly in this second attempt, it is "stuck" within the check function, and will never be passed to the function sucess, which is the one that gives the welcome.

Like you said, it was small. I just needed to add a call to the function sucess after leaving the while namespace.

name=str(input('Write your name: ')) #Recebe o nome

def check(name): #Função para checar se o nome é elvis
    while(name!='elvis'): #Loop que fica pedindo o nome até ser digitado o correto
        print('You are not allowed!') #Mensagem avisando que não tem permissão
        name=str(input('Write your name: ')) #Recebe o nome novamente
    sucess(name)     #faltou chamar esta verificação aqui

def sucess(name): #Função que mostra a mensagem 'bem vindo'
    if(name=='elvis'): #Verifica se o nome que foi digitado é elvis
        print('Welcome {}!'.format(name)) #Mensagem de boas vindas
    else: #Caso não seja a função acima é chamada
        check(name)

sucess(name) #Função acima

If I may suggest, I think your code will be more elegant and easy to understand if your 2 functions become one. So:

name=str(input('Write your name: ')) #Recebe o nome

def check(name): #Função para checar se o nome é elvis
    while(name!='elvis'): #Loop que fica pedindo o nome até ser digitado o correto
        print('You are not allowed!') #Mensagem avisando que não tem permissão
        name=str(input('Write your name: ')) #Recebe o nome novamente
    print('Welcome {}!'.format(name)) #Mensagem de boas vindas

check(name) #Função acima
  • That really was it. But I didn’t know I could call a function above it in python. I even thought something was missing after leaving while. And thank you for the suggestion.

Browser other questions tagged

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