You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python代码问题:输入Bland时仍执行非预期print语句

零食推荐代码执行异常问题

我写了下面这段Python零食推荐代码,现在遇到个问题:当用户输入“Bland”时,那些本该跳过的问题(比如print(input("Do you want a sweeter or saltier snack? ")))还是会弹出来让用户回答。我以为已经把每个问题的输入存进变量里了,而且字符串判断(比如q1 == "Bland")也没毛病,但作为新手实在找不到问题出在哪。

原代码:

salt = "Salt and Vinegar"
bland = "Saltenes"
sweet = "Chocolate"
spicy = "Takis"
sour = "Sour Patch Kids"
q1 = print(input("Do you want a bland or flavorful snack? "))
q2 = print(input("Do you want a sweeter or saltier snack? "))
q3 = print(input("Would you like a sour snack or not? "))
q4 = print(input("Would you like a spicy snack or not? "))
rec = ""

print(input("Do you want a bland or flavorful snack? "))
if q1 == "Bland":
   rec = bland
elif q1 == "Flavorful":
    print(input("Do you want a sweeter or saltier snack? "))
    if q2 == "Sweeter":
        print(input("Would you like a sour snack or not? "))
        if q3 == "Sour":
            rec = sour
        elif q3 == "Not":
            rec = sweet
    elif q2 == "Saltier":
        print(input("Would you like a spicy snack or not? "))
        if q4 == "Spicy":
            rec = spicy
        elif q4 =="Not":
            rec = salt

print("We recommend " + rec + " as your snack!")

问题原因

  1. 变量赋值错误:你用print(input(...))给变量赋值,但print()函数的返回值是None,不是用户输入的内容。这导致后续的q1 == "Bland"这类判断永远不成立,因为q1实际是None。
  2. 提前执行所有输入语句:代码开头就直接执行了四个问题的输入语句,不管后续的条件判断,所以不管用户选什么,这些问题都会先弹一遍。
  3. 重复执行输入语句:原代码里重复执行了第一个问题的输入,造成冗余。

修正后的代码

salt = "Salt and Vinegar"
bland = "Saltenes"
sweet = "Chocolate"
spicy = "Takis"
sour = "Sour Patch Kids"
rec = ""

# 第一个问题,仅执行一次并保存输入
q1 = input("Do you want a bland or flavorful snack? ")
if q1 == "Bland":
    rec = bland
elif q1 == "Flavorful":
    # 第二个问题,仅在选Flavorful时触发
    q2 = input("Do you want a sweeter or saltier snack? ")
    if q2 == "Sweeter":
        # 第三个问题,仅在选Sweeter时触发
        q3 = input("Would you like a sour snack or not? ")
        if q3 == "Sour":
            rec = sour
        elif q3 == "Not":
            rec = sweet
    elif q2 == "Saltier":
        # 第四个问题,仅在选Saltier时触发
        q4 = input("Would you like a spicy snack or not? ")
        if q4 == "Spicy":
            rec = spicy
        elif q4 == "Not":
            rec = salt

print("We recommend " + rec + " as your snack!")

修正说明

  • 去掉print()包裹,直接用input()获取用户输入并赋值给变量,input()本身会在控制台显示问题文本。
  • 将每个后续问题的输入语句移到对应条件分支内,只有满足前置条件时才会触发下一个问题,避免提前执行。
  • 删除重复的输入语句,确保每个问题仅在需要时出现。

内容的提问来源于stack exchange,提问作者William Waldrop

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 08:20:20