我试图用Python制作一个要求用户输入的脚本,它应该是以 "请输入名字 "的方式出错,然后将用户返回到最初的输入问题提示。
但这并不奏效,相反,在要求输入名字和姓氏后,如果没有给出名字,我就会被扔进第一个错误的无限循环中。
# User input for first name
first_name = input('Enter FIRST name here: ')
# User input for last name
last_name = input('Enter LAST name here: ')
def print_name():
# store user input in separate variable
fname = first_name
lname= last_name
while True:
# throw error if user enters no first name
if len(fname) == 0:
# error msg
print('No FIRST name entered...')
# loop back to prompt asking for first name
continue
else:
# if first name given move on to prompting for last name
# break loop
break
# loop into prompting user for last name
while True:
# throw error if user enters no last name
if len(lname) == 0:
print('No LAST name entered...')
# loop back to prompt asking for last name
continue
else:
# if last name given move on to running print command
# break loop
break
return fname, lname
print(f'your name is {fname} {lname}')
print_name()
请谁能帮我理解一下这里到底出了什么问题?它应该只在什么都没有给出的时候才会循环到询问名字(或姓氏),否则它应该把用户的名字打印到控制台。两个名字都应该给出,如果第一个名字没有给出,那么我希望在第一个while循环中出现错误,就像没有给出姓氏一样。
还有没有更好的方法,使用2个while循环似乎是错误的?
别重复了。如果你复制粘贴了一段代码,请停下来思考。它应该是一个函数,或者是一个循环。
def wait_for_input(prompt):
data = ""
while data == "":
data = input(prompt).strip()
return data
def print_name(fname, lname):
print(f'your name is {fname} {lname}')
first_name = wait_for_input('Enter FIRST name: ')
last_name = wait_for_input('Enter LAST name: ')
print_name(first_name, last_name)
另外,不要用注释来重复代码的内容。
问题是你的无限循环,你可以简化你的函数一样。
def print_name():
first_name = ""
last_name = ""
# User input for first name
while first_name == "":
first_name = input('Enter FIRST name here: ')
# User input for last name
while last_name == "":
last_name = input('Enter LAST name here: ')
print(f'your name is {first_name} {last_name}')
我觉得你是个新手。 I have the impression you are new at this:
While循环一般是这样的
while <condition>
...
<check_condition>
...
这意味着,在大多数情况下,每次循环执行时,条件都会被重新计算,并再次被检查。while
.
在你的情况下,会变成这样。
while (len(fname) == 0)
<show_error_message>
<get fname again>
你在这里写的案例while true
)也是存在的,并且经常被使用,但在非常不同的情况下,比如在基于多线程事件的程序中。
while true
<get_event>
这意味着程序的一部分(所谓的线程)在等待一个事件(比如一个按钮的点击)被捕获,然后发生一些事情。然而,这主要是在多线程应用程序中完成的,这意味着 "主 "程序在做一些事情,而一个子程序在处理事件,这些事件正在到来。
我不太明白为什么你需要这么多循环。像这样的程序就可以了。
def print_name():
fname = input('Enter FIRST name here: ')
if len(fname) == 0:
raise Exception('No FIRST name entered...')
lname= input('Enter LAST name here: ')
if len(lname) == 0:
raise Exception('No LAST name entered...')
print(f"your name is {fname} {lname}")
如果你只想重复这个循环 你只需要把print_name()函数嵌套在一个循环中就可以了
EDIT: 现在我看到了其他的答案,我相信@Tomalak的答案更好,是没有得到你真正想要的东西。
试试这段代码。
def print_name():
# store user input in separate variable
first_name = input('Enter FIRST name here: ')
fname = first_name
while True:
fname = first_name
# throw error if user enters no first name
if len(fname) == 0:
# error msg
print('No FIRST name entered...')
first_name = input('Enter FIRST name here: ')
# loop back to prompt asking for first name
continue
else:
# if first name given move on to prompting for last name
# break loop
break
# loop into prompting user for last name
while True:
last_name = input('Enter LAST name here: ')
lname= last_name
# throw error if user enters no last name
if len(lname) == 0:
print('No LAST name entered...')
# loop back to prompt asking for last name
continue
else:
# if last name given move on to running print command
# break loop
break
return fname, lname
print(f'your name is {fname} {lname}')
print_name()