You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 02:27:01