Python中if语句内range第二次判断不生效的原因及解决方法
问题成因
你的代码中list(range(2, 6))、list(range(6, 21))仅生成了对应区间的整数列表,没有和变量n做任何归属判断。根据Python的布尔判定规则,非空列表的布尔值永远为True,因此第一个elif的条件等价于「n是偶数」,所有偶数输入都会直接命中第一个分支,后续的判断永远不会触发,所以看起来第二个范围判断不生效。
修复方法
只需在判断中加入归属运算符in,直接判断n是否在对应区间的range对象中即可(不需要转list,range原生支持in判断,性能更高)。
修复后的代码如下:
#!/bin/python3 import math import os import random import re import sys if __name__ == '__main__': n = int(input().strip()) if n % 2 == 1: print("Weird") elif n % 2 == 0 and n in range(2, 6): print("Not Weird") elif n % 2 == 0 and n in range(6, 21): print("Weird") elif n % 2 == 0 and n > 20: print("Not Weird")
替代范围判断的内置实现
对于整数范围判断,最常用的替代方案是直接使用大小比较运算符,可读性更高,也不需要额外生成对象:
- 对应
range(2,6)的判断可以写成2 <= n < 6 - 对应
range(6,21)的判断可以写成6 <= n <= 20
这种写法和in range的判断逻辑完全一致,是Python中范围判断的首选写法。
内容的提问来源于stack exchange,提问作者Jonathan-mdl
相关产品推荐
相关产品推荐

