Python无限while循环问题

2024-04-24 23:36:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用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循环中出现错误,就像没有给出姓氏时的wise一样

还有更好的方法吗?使用2 while循环似乎是错误的


Tags: tonameloopforinputif名字fname
3条回答

问题在于无限循环,您可以简化函数,如:

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}')

我觉得你在这方面是新手:

而循环通常如下所示:

while <condition>
...
<check_condition>
...

这意味着在大多数情况下,每次执行循环时,while都会重新计算和检查条件

在您的情况下,这将变成:

while (len(fname) == 0)
<show_error_message>
<get fname again>

您在这里编写的案例(while true)也存在,并且经常使用,但在非常不同的情况下,例如在基于多线程事件的程序中:

while true
<get_event>

这意味着程序的一部分(所谓的线程)正在等待捕获事件(如按钮点击),然后发生了一些事情。然而,这主要是在多线程应用程序中完成的,这意味着“主”程序正在做一些事情,而子程序正在处理即将到来的事件

不要重复你自己。如果复制并粘贴一段代码,请停下来思考。它应该是一个函数,或者是一个循环

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)

另外,不要使用注释重复代码所说的内容

相关问题 更多 >