鱼C论坛

 找回密码
 立即注册
查看: 2299|回复: 5

[已解决]关于课后作业闰年计算

[复制链接]
发表于 2020-3-21 17:13:50 | 显示全部楼层 |阅读模式

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

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

x
我有个逻辑问题, 用year/400 == int(year/400): 表达闰年的话, 因为int()是整形,那比400少的年份,全部会取0,就满足这个条件了, 然而并不是,例如:50.返回是闰年,但明显不是.   那结果是不是应该把后面的逻辑先提上来才对.

  1. year=0
  2. temp = input('请输入一个年份:')
  3. while not temp.isdigit():
  4.     temp = input("抱歉,您的输入有误,请输入一个整数:")

  5. year = int(temp)
  6. if year/400 == int(year/400):
  7.     print(temp + ' 是世纪闰年!')
  8. else:
  9.     if (year/4 == int(year/4)) and (year/100 != int(year/100)):
  10.         print(temp + ' 是闰年!')
  11.     else:
  12.         print(temp + ' 不是闰年!')
复制代码
最佳答案
2020-3-21 17:18:02
darrenkwan 发表于 2020-3-21 17:15
代码用这段吧. 上面的复制错了, 但做法是一样的

这样试试:

  1. t = 3
  2. year = 0
  3. print('***u got', t, 'chance***')
  4. print('pls type in a year: ', end=' ')
  5. while t > 0:
  6.     tmp = input()
  7.     print('\n***u got', t - 1, 'chance left***')
  8.     while not tmp.isdigit():
  9.         tmp = input('error, pls type in a number: ')
  10.     year = int(tmp)
  11.     if year / 400 == int(year / 400):
  12.         print('''这是世纪闰年.\ntry again: ''', end=' ')
  13.     else:
  14.         if year / 4 == int(year / 4) and year / 100 != int(year / 100):
  15.             print('''这是普通闰年.\ntry again: ''', end=' ')
  16.         else:
  17.             print('''这不是闰年.\ntry again: ''', end=' ')
  18.     t = t - 1
  19. print('\ngame over')
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-3-21 17:15:40 | 显示全部楼层
代码用这段吧. 上面的复制错了, 但做法是一样的
  1. t=3
  2. year=0
  3. print('***u got', t, 'chance***')
  4. print('pls type in a year: ',end=' ')
  5. while t>0:
  6.     tmp=input()
  7.     print('\n***u got', t-1, 'chance left***')
  8.     while not tmp.isdigit():
  9.         tmp=input('error, pls type in a number: ')
  10.         year=int(tmp)
  11.     if year/400==int(year/400):
  12.         print('''这是世纪闰年.\ntry again: ''', end=' ')
  13.     else:
  14.         if year/4==int(year/4) and year/100!=int(year/100):
  15.             print('''这是普通闰年.\ntry again: ''', end=' ')
  16.         else:
  17.             print('''这不是闰年.\ntry again: ''', end=' ')
  18.     t=t-1   
  19. print('\ngame over')
  20.         
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-21 17:18:02 | 显示全部楼层    本楼为最佳答案   
darrenkwan 发表于 2020-3-21 17:15
代码用这段吧. 上面的复制错了, 但做法是一样的

这样试试:

  1. t = 3
  2. year = 0
  3. print('***u got', t, 'chance***')
  4. print('pls type in a year: ', end=' ')
  5. while t > 0:
  6.     tmp = input()
  7.     print('\n***u got', t - 1, 'chance left***')
  8.     while not tmp.isdigit():
  9.         tmp = input('error, pls type in a number: ')
  10.     year = int(tmp)
  11.     if year / 400 == int(year / 400):
  12.         print('''这是世纪闰年.\ntry again: ''', end=' ')
  13.     else:
  14.         if year / 4 == int(year / 4) and year / 100 != int(year / 100):
  15.             print('''这是普通闰年.\ntry again: ''', end=' ')
  16.         else:
  17.             print('''这不是闰年.\ntry again: ''', end=' ')
  18.     t = t - 1
  19. print('\ngame over')
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-21 17:26:50 | 显示全部楼层

我的执行也没有问题, 不是格式问题. 只是因为int()的返回的机制使他们都取了0这个结果.算是一个bug吧
400以下的年份会与实际不符, 例如我输入50, 他显示是实际闰年, 实际上根本就不是闰年.
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-21 17:37:41 | 显示全部楼层
darrenkwan 发表于 2020-3-21 17:26
我的执行也没有问题, 不是格式问题. 只是因为int()的返回的机制使他们都取了0这个结果.算是一个bug吧
40 ...

你为什么要判断除法的商呢?难道不应该判断求余的结果吗?
第十行的缩进写错了。导致year一直是0
  1. t=3
  2. year=0
  3. print('***u got', t, 'chance***')
  4. print('pls type in a year: ',end=' ')
  5. while t>0:
  6.     tmp=input()
  7.     print('\n***u got', t-1, 'chance left***')
  8.     while not tmp.isdigit():
  9.         tmp=input('error, pls type in a number: ')
  10.     year=int(tmp)#这里缩进写错了。
  11.     if year%400==0:
  12.         print('''这是世纪闰年.\ntry again: ''', end=' ')
  13.     else:
  14.         if year%4==0 and year%100 !=0:
  15.             print('''这是普通闰年.\ntry again: ''', end=' ')
  16.         else:
  17.             print('''这不是闰年.\ntry again: ''', end=' ')
  18.     t=t-1   
  19. print('\ngame over')
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-21 18:05:34 | 显示全部楼层
sunrise085 发表于 2020-3-21 17:37
你为什么要判断除法的商呢?难道不应该判断求余的结果吗?
第十行的缩进写错了。导致year一直是0

厉害呀, 找到错处了. 可惜最佳答案我给出去了.
开始怕自己写的代码找不出问题...
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-28 00:17

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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