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

Python日历练习代码:循环内if-elif条件失效问题求助

问题原因及修复方案

核心问题:条件判断逻辑写错了

你的第二个elif永远触发不了,根源是第一个elif的条件写法完全错误:

elif valuen == 0 or 2 or 4 or 6 or 7 or 9 or 11 :

Python会把这个表达式解析成(valuen == 0) or 2 or 4 or ...,而非0的数值在布尔判断里都会被当成True。也就是说不管valuen是什么值,这个条件永远为真,后面的elif自然没机会执行。

正确的条件写法

要判断valuen是否属于某个数值集合,有两种规范写法:

  1. 每个判断都完整写valuen == x,用or连接:
elif valuen == 2 or valuen == 4 or valuen == 6 or valuen == 7 or valuen == 9 or valuen == 11 :
  1. 更简洁的方式,用in判断是否在元组/列表里:
elif valuen in (2, 4, 6, 7, 9, 11):

同理,第二个elif的条件也要改成:

elif valuen in (3, 5, 8, 10):

顺带修复其他问题

除了条件判断,代码还有两个明显bug:

  • range(13)会生成0到12的整数,但month_Name只有12个元素(索引0-11),当month=12时会触发IndexError,要改成range(12)。
  • 缩进错误:if valuen == 1:这一行的缩进比上面的print多了,会直接报语法错误,得和print保持同一缩进级别。

修复后的完整代码示例

month_status = 1
month_Name = ["Januari", "Februari", "Maret", "April", "Mei", "Juni", "Juli", "Agustus", "September", "Oktober", "November", "Desember"]

for month in range(12):
    valuen = month + 1
    print("Now is", valuen , "that is ", month_Name[month])
    if valuen == 1:
        if month_status == 1:
            for f in range(1,29):
                print(f)
            month_status = 2
        else:
            for f in range(1,30):
                print(f)
            month_status = 1
    elif valuen in (2, 4, 6, 7, 9, 11):
        for i in range(1,32):
            print(i)
    elif valuen in (3, 5, 8, 10):
        for i in range(1,31):
            print(i)
    else:
        print("error")

注:原代码里的valuen == 0是多余的,因为valuen = month + 1,month从0开始,所以valuen最小是1,不需要判断0。

内容的提问来源于stack exchange,提问作者Miftakhul Huda

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 16:00:27