Orig 发表于 2023-7-18 10:15:56

简单python代码问题

我是想做一个输入年份和月份后自动输入天数的代码,但是不知道为什么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:20

你的代码中有一个语法错误和一个逻辑错误。

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

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

下面是修正后的代码:

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

if month in :
    print("这个月有31天")
elif month in :
    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。

isdkz 发表于 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整除的年份才是闰年。

woshizhangpengp 发表于 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 :
            print("31天")
      elif month in :
            print("30天")
      elif month==2:
            print("29天")
      else:
            print("无效输入")
      
    elif year%400!=0 and year%100==0 or year%4!=0:
      if month in :
            print("31天")
      elif month in :
            print("30天")
      elif month==2:
            print("28天")
      else:
            print("无效输入")
    i-=1

叼辣条闯世界 发表于 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 :
    print("这个月有31天")
elif month in :
    print("这个月有30天")
elif month == 2 and (year % 4 == 0):
    print("这个月有29天")
else:
    print("这个月有28天")
请注意,以上代码仅处理了闰年情况下2月的天数判断。如果要考虑更加复杂的情况,例如能被100整除但不能被400整除的年份不是闰年,则需要进一步完善。
页: [1]
查看完整版本: 简单python代码问题