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)