象棋爱好者 发表于 2023-1-7 22:27:39

什么情况?

year = input('请输入一个年份:')

while not year.isdigit():
    year = input("抱歉,您的输入有误,请输入一个整数:")

year = int(year)
if year % 400 == 0:
    print(year,"是闰年")
else:
    if year % 4 and year % 100 != 0:
      print(year,"是闰年")
    else:
      print(year,"不是闰年")
运行起来却是
请输入一个年份:2021
2021 是闰年
?????什么鬼?

qq1151985918 发表于 2023-1-7 22:30:58

if year % 4 and year % 100 != 0:

改成 if year % 4 ==0 and year % 100 != 0:

tommyyu 发表于 2023-1-7 22:31:05

在python中,非0的数的布尔值都是True,因此第10行中的if year%4 and year%100!=0就相当于if year%4!=0 and year%100!=0,而这显然是不对的。可以改成if year%4==0 and year%100!=0

isdkz 发表于 2023-1-7 22:35:36

year 可以被 4 整除的话,year % 4 的值为 0,0 会被判定为 False,

反之,year 不可以被 4 整除,year % 4 的值不为 0,会被判定为 True,

所以 year % 4 应该替换为 not (year % 4) 或者 year % 4 == 0

year = input('请输入一个年份:')

while not year.isdigit():
    year = input("抱歉,您的输入有误,请输入一个整数:")

year = int(year)
if year % 400 == 0:
    print(year,"是闰年")
else:
    if not (year % 4) and year % 100 != 0:               # 改了这里
      print(year,"是闰年")
    else:
      print(year,"不是闰年")

象棋爱好者 发表于 2023-1-7 22:45:17

tommyyu 发表于 2023-1-7 22:31
在python中,非0的数的布尔值都是True,因此第10行中的if year%4 and year%100!=0就相当于if year%4!=0 and ...

!=优先级不是比and高吗,那不是应该先算and前后两个

tommyyu 发表于 2023-1-7 22:47:53

象棋爱好者 发表于 2023-1-7 22:45
!=优先级不是比and高吗,那不是应该先算and前后两个

确实,可是year%4相当于year%4!=0,而这显然是不对的,因为闰年需要年份是四的倍数,也就是year%4==0

象棋爱好者 发表于 2023-1-7 22:49:54

tommyyu 发表于 2023-1-7 22:47
确实,可是year%4相当于year%4!=0,而这显然是不对的,因为闰年需要年份是四的倍数,也就是year%4==0

啊,year % 4 相当于 year % 4 != 0 吗,为什么

tommyyu 发表于 2023-1-7 22:53:08

象棋爱好者 发表于 2023-1-7 22:49
啊,year % 4 相当于 year % 4 != 0 吗,为什么

因为非0的数的布尔值是True,因此,如果year%4是True的话,它就是非0的。非0相当于不等于0,也就是year%4!=0

象棋爱好者 发表于 2023-1-7 22:55:54

tommyyu 发表于 2023-1-7 22:53
因为非0的数的布尔值是True,因此,如果year%4是True的话,它就是非0的。非0相当于不等于0,也就是year%4 ...

ou! 懂了,谢谢{:10_297:}
页: [1]
查看完整版本: 什么情况?