Python代码中标记的if语句不生效,所有情况均触发else分支如何解决
Python if语句不触发问题原因及修复方案
问题原因
- 核心原因是类型不匹配:
input()函数返回值默认是字符串类型,你给guess加的int类型注解仅做标记作用,不会自动执行类型转换,实际运行时guess还是字符串类型。而random.randint(1,2)返回的是整数类型,整数和字符串做==比较永远返回False,所以标记的if分支永远不会触发。 - 同时存在额外逻辑错误:
guess <= "2"是字符串比较规则,不符合数值判断需求,else分支的输入错误提示内容和要求输入1-2的逻辑也不匹配。
修复方案
在获取用户输入时主动把输入值转为整数即可,同时修正关联逻辑错误,修改后的完整代码如下:
import time name = input("Enter your name:") currentTime = int(time.strftime('%H')) if currentTime < 12 : print('Good morning,'+name) elif currentTime > 12 : print('Good afternoon,'+name) else : print('Good evening,'+name) def main(): import random # 输入时主动转换为int类型 guess = int(input('Enter a number between 1 and 2 :')) # 改为数值范围判断,符合输入1-2的要求 if 1 <= guess <= 2: num = random.randint(1, 2) print("the number is ", num) # 现在两侧都是int类型,比较可以正常触发 if num == guess: print('you won your promote to level 2') else: print("You lost, Lets try again") repeat = input('Do you want to try again:') if repeat == "yes": main() else: print("Good bye") exit() else: # 修正错误的提示内容 print("the number you entered is not in range, Please enter a number between 1 and 2") main() main()
可选优化(输入合法性校验)
如果要避免用户输入非数字内容导致程序崩溃,可以在转换整数时增加异常捕获逻辑:
try: guess = int(input('Enter a number between 1 and 2 :')) except ValueError: print("Please enter a valid integer") main()
内容的提问来源于stack exchange,提问作者Yasindu Gamage
相关产品推荐
相关产品推荐

