鱼C论坛

 找回密码
 立即注册
查看: 1844|回复: 4

[已解决]简单python代码问题

[复制链接]
发表于 2023-7-18 10:15:56 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
我是想做一个输入年份和月份后自动输入天数的代码,但是不知道为什么3-12月的不能输出?

代码如下:

year = input("请输入年份数字:")
year = int(year)
month = input("请输入月份数字:")
month = int(month)

if month == (1 or 3 or 5 or 7 or 8 or 10 or 12):
    print("这个月有31天")
elif month == (4 or 6 or 9 or 11):
    print("这个月有30天")
elif month == 2 and (year % 4 == 0):
    print("这个月有29天")
elif month == 2 and (year % 4 != 0):
    print("这个月有28天")
最佳答案
2023-7-18 10:16:29
问题的原因在于你如何检查月份是否在某个特定的集合中。在 Python 中,语句如  if month == (1 or 3 or 5 or 7 or 8 or 10 or 12)  实际上并不会按照你想要的方式工作。 or  运算符在 Python 中返回第一个非“假”值。因此  (1 or 3 or 5 or 7 or 8 or 10 or 12)  实际上只会返回  1 ,原因是在 Python 中,所有非零整数都被视为真值。所以,该语句只有当  month  为  1  时才会返回真,这就是为什么你的代码在处理 3-12 月份时会失效。

如果你希望检查  month  是否在一组特定的值中,可以使用  in  运算符和一个元组或列表。以下是一个修改过的版本:
year = input("请输入年份数字:")year = int(year)month = input("请输入月份数字:")month = int(month)if month in {1, 3, 5, 7, 8, 10, 12}:    print("这个月有31天")elif month in {4, 6, 9, 11}:    print("这个月有30天")elif month == 2:    if year % 4 == 0 and (year % 100 != 0 or year % 400 == 0):        print("这个月有29天")    else:        print("这个月有28天")
这里,我们使用  {}  创建了一组月份,并使用  in  运算符检查  month  是否在这些月份中。我们还修复了计算闰年的代码,原代码只考虑了能被4整除的年份为闰年,但实际上还需要考虑不能被100整除,或者能被400整除的年份才是闰年。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-7-18 10:16:20 | 显示全部楼层
你的代码中有一个语法错误和一个逻辑错误。

首先,语法错误是在读取输入年份和月份后,两行代码之间缺少了换行符。你需要在这两行代码之间添加一个换行符或分号。

其次,在判断月份的部分,你使用了错误的逻辑。在 Python 中,不能直接通过 b[/b] 来实现多个值的判断。这个语法会始终返回第一个非零、非空的值。因此,你需要对每个值进行单独的判断。

下面是修正后的代码:
year = input("请输入年份数字:")year = int(year)month = input("请输入月份数字:")month = int(month)if month in [1, 3, 5, 7, 8, 10, 12]:    print("这个月有31天")elif month in [4, 6, 9, 11]:    print("这个月有30天")elif month == 2 and year % 4 == 0:    print("这个月有29天")elif month == 2 and year % 4 != 0:    print("这个月有28天")else:    print("无效的输入")
修改后的代码使用 in 运算符来检查月份是否在指定的列表中。同时,为了处理其他错误情况,添加了一个 else 分支。

请注意,这段代码只包含了简单的年份和月份判断逻辑,没有处理更精确的日期计算,比如闰年规则。如果需要更复杂的日期操作,建议使用 Python 的内置库 datetime
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-18 10:16:29 | 显示全部楼层    本楼为最佳答案   
问题的原因在于你如何检查月份是否在某个特定的集合中。在 Python 中,语句如  if month == (1 or 3 or 5 or 7 or 8 or 10 or 12)  实际上并不会按照你想要的方式工作。 or  运算符在 Python 中返回第一个非“假”值。因此  (1 or 3 or 5 or 7 or 8 or 10 or 12)  实际上只会返回  1 ,原因是在 Python 中,所有非零整数都被视为真值。所以,该语句只有当  month  为  1  时才会返回真,这就是为什么你的代码在处理 3-12 月份时会失效。

如果你希望检查  month  是否在一组特定的值中,可以使用  in  运算符和一个元组或列表。以下是一个修改过的版本:
year = input("请输入年份数字:")year = int(year)month = input("请输入月份数字:")month = int(month)if month in {1, 3, 5, 7, 8, 10, 12}:    print("这个月有31天")elif month in {4, 6, 9, 11}:    print("这个月有30天")elif month == 2:    if year % 4 == 0 and (year % 100 != 0 or year % 400 == 0):        print("这个月有29天")    else:        print("这个月有28天")
这里,我们使用  {}  创建了一组月份,并使用  in  运算符检查  month  是否在这些月份中。我们还修复了计算闰年的代码,原代码只考虑了能被4整除的年份为闰年,但实际上还需要考虑不能被100整除,或者能被400整除的年份才是闰年。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-18 13:20:47 | 显示全部楼层
代码写成这样是可以正常运行的,我试过了
i=20
while i>=0:
    year = int(input("输入年份:"))
    month=int(input("输入月份:"))
    if year%400==0 or year%100!=0 and year%4==0:
        if month in [1,3,5,7,8,10,12]:
            print("31天")
        elif month in [4,6,9,11]:
            print("30天")
        elif month==2:
            print("29天")
        else:
            print("无效输入")
        
    elif year%400!=0 and year%100==0 or year%4!=0:
        if month in [1,3,5,7,8,10,12]:
            print("31天")
        elif month in [4,6,9,11]:
            print("30天")
        elif month==2:
            print("28天")
        else:
            print("无效输入")
    i-=1[/code]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-18 19:04:00 | 显示全部楼层
问题出在 if 语句的条件判断上。在 Python 中,(1 or 3 or 5 or 7 or 8 or 10 or 12) 不会得到预期的结果。正确的写法应该是将多个值放在列表中,然后使用 in 运算符进行判断。

以下是修改后的代码示例:
year = input("请输入年份数字:")
year = int(year)
month = input("请输入月份数字:")
month = int(month)

if month in [1, 3, 5, 7, 8, 10, 12]:
    print("这个月有31天")
elif month in [4, 6, 9, 11]:
    print("这个月有30天")
elif month == 2 and (year % 4 == 0):
    print("这个月有29天")
else:
    print("这个月有28天")
请注意,以上代码仅处理了闰年情况下2月的天数判断。如果要考虑更加复杂的情况,例如能被100整除但不能被400整除的年份不是闰年,则需要进一步完善。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-26 09:14

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表