Home > Software engineering >  I need help calling a user defined function in a while loop in python
I need help calling a user defined function in a while loop in python

Time:06-07

I defined this function:

def formatted_name(firstName, lastName, middleName=''):
    if middleName:
        full_name = f"{firstName} {lastName} {middleName}"
    else:
        full_name = f"{firstName} {lastName}"
    return full_name.title()

and then tried to use it like so:

prompt = 'Please enter your first and last name below'
prompt  = '\nEnter stop to quit'
quit = 'stop'
while not quit:
    print(prompt)
    firstname = input('Enter your first name: ')
    lastname = input('Enter your last name: ')
    if firstname == quit:
        break
fullName = formatted_name(firstname,lastname)
print(fullName)

When I try this, I get a NameError. What is wrong with the code, and how do I fix it?

CodePudding user response:

The problem is that firstname and lastname are not defined. It never executes the code inside your while loop because when you convert a string that is not empty to a bool which in this case is "stop" you get True, since you have "not quit" in your while loop then it Will never execute because not quit is False. A while loop with False in it never executes the code inside

>>> bool("stop")
True
>>> not bool("stop")
False

CodePudding user response:

In python, every string except empty string ('' and "") are considered True. The codition not quit, evaluates to not True, evaluates to False. So the while loop, does not runs.

You are getting NameError, because, firstName are lastName are not declared, till running the statement fullName = formatted_name(firstname,lastname).

The correct version of the above code is:

def formatted_name(firstName, lastName, middleName=''):
    if middleName:
         full_name = f"{firstName} {lastName} {middleName}"
    else:
         full_name = f"{firstName} {lastName}"
    return full_name.title()


prompt = 'Please enter your first and last name below'
prompt  = '\nEnter stop to quit'
quit = 'stop'
while True:
    print(prompt)
    firstname = input('Enter your first name: ')
    if firstname == quit:
        break
    lastname = input('Enter your last name: ')
    fullName = formatted_name(firstname,lastname)
    print(fullName)
  • Related