You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

While True循环未持续执行,输入hello后程序直接退出,求定位问题行

我仔细看了你的代码,发现这段代码本身不会导致while True循环中断——当你输入"hello"时,程序打印响应后应该会回到输入提示符>,继续等待下一次输入。

不过你遇到的“循环直接退出”的情况,大概率是因为输入过程中触发了EOFError(比如在终端按下Ctrl+D/Ctrl+Z),或者运行环境的输入机制有问题,而非代码里某一行直接导致循环中断。

你的代码里有几个可以优化的点,同时也有一个容易混淆的问题:

  • 参数名误用selfmake_response是普通函数,不是类的方法,用self作为参数名会造成混淆(self在Python里通常用于类实例方法),建议改成query
  • 未处理未匹配的输入:如果输入的内容不在database的关键词里,当前代码没有任何反馈,可能会让你误以为程序退出了,可以添加默认提示。
  • 避免不必要的循环遍历:当前代码在匹配到关键词后,还会继续遍历database里的其他key,添加break可以优化性能。

优化后的代码示例:

def make_response(query):
    recognised = False
    database = {
        "hello": "Nice to meet you. What can I do for you?",
        "hi": "Nice to meet you. What can I do for you?",
        "hey": "Nice to meet you. What can I do for you?",
        "goodbye": "Bye. See you next time!"
    }
    query = query.lower()
    for i in database:
        if i in query:
            recognised = True
            value = database.get(i)
            print(value)
            break  # 匹配到后退出循环,无需继续遍历
    if not recognised:
        print("Sorry, I don't understand that.")

def robot():
    print('Welcome to robot.py')
    print('What can I do for you?')
    while True:
        query = input('>')
        make_response(query)

robot()

总结一下:你的原始代码里没有哪一行会直接导致while True循环中断,退出更可能是输入操作触发了EOF,或者运行环境的问题。优化上述点后,程序的交互会更清晰,也能避免误解。

内容的提问来源于stack exchange,提问作者J Muzhen

火山引擎 最新活动