为什么我的程序不能一直运行到最后一次打印调用?(Python)

2024-09-27 07:27:53 发布

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

我是一个编程新手,仍在学习,可能错过了一些容易犯的错误。代码运行得非常好,直到它被假定为"print the last print" (printf"\nHello, {formatted_name}!")),不幸的是它没有这样做。。。正如我所说,我可能错过了一些明显的东西,我会感谢你的帮助。我试过def…():和def…(f_name,l_name)似乎都没有按我希望的方式工作

def get_formatted_name(f_name, l_name): / def get_formatted_name():

    while True:
        print("\nPlease tell me your name:")
        print("(enter 'q' at any time to quit)")
        
        f_name = input("First name: ")
        if f_name == 'q':
            break
        l_name = input("Last name: ")
        if l_name == 'q':
            break

        formatted_name = get_formatted_name(f_name, l_name)
        print(f"\nHello, {formatted_name}!")

Tags: thenameinputgetifdef编程错误
2条回答

当您运行formatted_name = get_formatted_name(f_name, l_name)时,实际上是在从函数本身调用您所在的函数。这就是所谓的recursion。要解决您的问题,我相信您希望将线路替换为:

formatted_name = f_name + " " + l_name

或者使用format的另一种方式:

formatted_name = "{} {}".format(f_name, l_name)

使用fstring

formatted_name = f"{f_name} {l_name}"

你可能想读一下recursion以便更好地理解它

我不是Python方面的专家,但这是我的两分钱:

  1. formatted_name = get_formatted_name(f_name, l_name)再次启动整个过程,这意味着它永远不会到达最后一个print语句。 它反复循环相同的函数,直到用户输入“q”作为他们的名字或姓氏,在这种情况下,它在任何可能的情况下都不会到达print。 请注意,请求用户的input的函数和试图print输出用户名的函数是相同的-递归
  2. while True:对我来说似乎毫无意义,除非你在练习和学习Python。代码不断询问用户的名字和姓氏,即使他们同时给出了这两个名字。从while循环中退出break的唯一方法是输入“q”作为任一名称

我的解决方案,如果你可以这么说:

使用while循环:

def get_formatted_name():
    f_name = ""
    l_name = ""

    while not f_name and not l_name:
        print("\nPlease tell me your name:")
        print("(enter 'q' at any time to quit)")
    
        f_name = input("First name: ")
        if f_name == 'q':
            break
        l_name = input("Last name: ")
        if l_name == 'q':
            break

    print(f"\nHello, {f_name} {l_name}!")

没有while,学习和实践的基础是:

def get_formatted_name():
    print("\nPlease tell me your name:")
    print("(enter 'q' at any time to quit)")
    
    f_name = input("First name: ")
    l_name = input("Last name: ")

    print(f"\nHello, {f_name} {l_name}!")

使用while版本可能更好,因为您可以确保用户同时输入两个名称,或者可以选择不输入其中一个

相关问题 更多 >

    热门问题