Python条件判断代码中第二个elif分支未触发执行问题排查
问题原因
你的代码中第二个elif分支永远无法触发,核心错误是直接将range对象作为布尔判断条件,没有做成员归属校验:
- Python中所有非空内置对象在布尔上下文里都会被判定为
True,你写的range(6,21)、range(2,6)都是非空范围,本身作为判断条件时恒为真。 - 拆解第一个
if的判断逻辑:(n %2 != 0) or (n %2 ==0 and range(6,21)),只要输入的n是偶数,n%2 ==0为真,and后面的range对象恒为真,因此整个if条件永远成立——无论输入的偶数是2-5区间、还是大于20,都会直接进入第一个分支打印Weird,根本不会走到后续的elif判断。
举个实际运行的例子,输入n=4(属于2-5的偶数,按规则应该输出Not Weird):
- 第一个子条件
n%2 !=0结果为False - 第二个子条件
n%2 ==0 and range(6,21):n%2==0为True,range(6,21)是非空对象判定为True,因此整个子条件结果为True - 两个子条件做
or运算最终结果为True,直接进入第一个分支输出错误结果,跳过后续elif。
修正方案
判断整数是否在指定区间内,需要用in运算符做成员校验,修正后的代码如下:
import math import os import random import re import sys if __name__ == '__main__': n = int(input().strip()) if (n % 2 != 0) or (n % 2 == 0 and n in range(6,21)): print('Weird') elif (n % 2 == 0 and n in range(2,6)) or (n % 2 == 0 and n > 20): print('Not Weird')
注:你选取的range范围本身是正确的:
range(2,6)左闭右开刚好覆盖2-5的整数,range(6,21)刚好覆盖6-20的整数,只需要补充n in的成员判断即可符合题目要求。
内容的提问来源于stack exchange,提问作者Fustavo Gringe
相关产品推荐
相关产品推荐

