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

