Python条件语句逻辑异常求助:新手遇if/elif判断结果颠倒问题
解决你的Python条件语句逻辑反转问题
嘿,我一眼就看出问题出在哪啦!你的条件判断逻辑刚好搞反了,根源是你误解了str.find()方法的返回值在布尔判断里的表现。
问题原因详解
str.find(substring)这个方法的规则是:
- 如果找到子串,返回它在字符串中的起始索引位置(比如输入"good"时,
mood.find("good")返回0) - 如果没找到,返回
-1
但在Python的布尔判断里:
0会被视为False- 任何非零的数字(包括
-1)都会被视为True
这就导致了你的逻辑完全反转:
- 当你输入"good"时,
if mood.find("good")等价于if 0,条件不成立,直接跳到elif分支;而mood.find("bad")返回-1,被视为True,所以执行bad对应的逻辑。 - 当你输入"bad"时,
mood.find("good")返回-1,被视为True,直接执行good的分支。
修正方案
有两种简单的修正方式,更推荐第二种(Python风格更明显,也更易懂):
方式1:修正find()的判断逻辑
检查find()的返回值是否不等于-1:
import time name = input("Hello! Whats your name: ") mood = input("Hello, " + name + " how are you feeling today? ") if mood.find("good") != -1: time.sleep(0.3) print("Thats awesome!") elif mood.find("bad") != -1: time.sleep(0.3) input("Oh, whats made you feel so down? ") print("Aww, thats ok.") time.sleep(1) activity = input("What are you doing today? ")
方式2:用in关键字判断(更推荐)
在Python里,判断子串是否存在,直接用substring in string的写法更直观,新手也更容易理解:
import time name = input("Hello! Whats your name: ") mood = input("Hello, " + name + " how are you feeling today? ") if "good" in mood: time.sleep(0.3) print("Thats awesome!") elif "bad" in mood: time.sleep(0.3) input("Oh, whats made you feel so down? ") print("Aww, thats ok.") time.sleep(1) activity = input("What are you doing today? ")
这样修改后,输入"good"就会执行对应的夸赞逻辑,输入"bad"就会触发安慰的流程啦!
内容的提问来源于stack exchange,提问作者djofox
相关产品推荐
相关产品推荐

