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是否属于某个数值集合,有两种规范写法:
- 每个判断都完整写
valuen == x,用or连接:
elif valuen == 2 or valuen == 4 or valuen == 6 or valuen == 7 or valuen == 9 or valuen == 11 :
- 更简洁的方式,用
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
相关产品推荐
相关产品推荐

