鱼C论坛

 找回密码
 立即注册
查看: 2497|回复: 8

[已解决]判断闰年问题,判断公元前的年份是否是闰年

[复制链接]
发表于 2019-7-30 16:31:02 | 显示全部楼层 |阅读模式

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

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

x
课后题5中的一个作业:

1. 写一个程序,判断给定年份是否为闰年。

这样定义闰年的:能被4整除但不能被100整除,或者能被400整除都是闰年。

我已经写出了判断公元后年份的程序
  1. year = input('请输入一个年份:')
  2. if year.isdigit():
  3.     y = int(year)
  4.     if y%400 == 0:
  5.         print(year+'是闰年')
  6.     else:
  7.         if y%4 == 0 and y%100 != 0:
  8.             print(year+'是闰年')
  9.         else:
  10.             print(year+'是平年')
  11. else:
  12.     print('输入不合法,请重新输入:')

  13. '''
  14. 这个脚本只能计算公元后的年份,公元前的就不可以了.公元前的都会判断成不合法
  15. '''
复制代码

这个脚本只能计算公元后的年份,公元前的就不可以了.公元前的都会判断成不合法
请输入一个年份:-2016
输入不合法,请重新输入:

为了解决这个问题我又写了一个:
  1. year = input('请输入一个年份:')
  2. y = int(year)
  3. y = abs(y)
  4. if type(y) == type(1):#input输入的都是字符串,怎么办。。。
  5.     if y%400 == 0:
  6.         print(year+'是闰年')
  7.     else:
  8.         if y%4 == 0 and y%100 != 0:
  9.             print(year+'是闰年')
  10.         else:
  11.             print(year+'是平年')

  12. '''
  13. 这个程序中,能判断公元前的年份,但是对不合法输入就不会提醒
复制代码

这个程序中,能判断公元前的年份,但是对不合法输入就不会提醒
请输入一个年份:aaa
Traceback (most recent call last):
  File "Z:\教育\python files\[External]year - gongyuanqian.py", line 6, in <module>
    y = int(year)
ValueError: invalid literal for int() with base 10: 'aaa'


因为input输入的是字符串,就不能直接使用abs()取绝对值,需要先使用int,但这样一来就无法进行非法输入的判断.如果非法输入,就不会有提示.

问: 怎样才能既可以判断公元前年份的闰年与否,还能在输入不合法的情况下进行提示.  (答案里的程序也不能判断公元前的)
最佳答案
2019-7-30 16:47:53
  1. year = input('请输入一个年份:')
  2. while True:
  3.     try:
  4.         y = int(year)
  5.     except ValueError:
  6.         year = input("输入错误!请重新输入一个年份:")
  7.     else:
  8.         break
  9. y = abs(y)
  10. if type(y) == type(1):#input输入的都是字符串,怎么办。。。
  11.     if y%400 == 0:
  12.         print(year+'是闰年')
  13.     else:
  14.         if y%4 == 0 and y%100 != 0:
  15.             print(year+'是闰年')
  16.         else:
  17.             print(year+'是平年')
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-7-30 16:36:55 From FishC Mobile | 显示全部楼层
这东西就是练习一下条件语句
考虑那么多没啥意义
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-7-30 16:38:22 From FishC Mobile | 显示全部楼层
我感觉闰年应该是近代提出来的一个概念
也就是说远古时代没有闰年这个概念
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-7-30 16:45:05 | 显示全部楼层
wp231957 发表于 2019-7-30 16:36
这东西就是练习一下条件语句
考虑那么多没啥意义

其实公元前当成公元后也一样.
但是碰到像这样输入格式和用来判断的函数的条件发生矛盾的时候应该有解决的方案.
我才刚开始学,可能有别的适合的判断方式我不知道. 所以发出来看看有谁知道的指导一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-7-30 16:47:53 | 显示全部楼层    本楼为最佳答案   
  1. year = input('请输入一个年份:')
  2. while True:
  3.     try:
  4.         y = int(year)
  5.     except ValueError:
  6.         year = input("输入错误!请重新输入一个年份:")
  7.     else:
  8.         break
  9. y = abs(y)
  10. if type(y) == type(1):#input输入的都是字符串,怎么办。。。
  11.     if y%400 == 0:
  12.         print(year+'是闰年')
  13.     else:
  14.         if y%4 == 0 and y%100 != 0:
  15.             print(year+'是闰年')
  16.         else:
  17.             print(year+'是平年')
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-7-30 16:55:18 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-7-30 17:18:47 | 显示全部楼层
本帖最后由 jackz007 于 2019-7-30 17:42 编辑

        楼主,如果用你当前理解的算法计算从公元1年1月1日到今天经历的总天数,你会发现,怎么算都不对,其实原因很简单,就是我们今天所采用的历法并不能逆推到公元1年1月1日。

        科普一下,我们现在使用的四年一闰,一百年不闰,四百年闰,每四百年九十七闰的历法叫格里历,这个历法始于1582年10月15日,之前采用的是儒略历,儒略历严格遵守每四年一闰,每四百年一百闰的算法,这个历法的终止日期是 1582 年10月4日,这一天的次日,格里历正式启用,没错,就是 1582年10月15日!你也许会问,那 1582年10月5~14日这10天哪里去了,问对了,历史上这 10 天根本就没有存在过,被用来消除之前采用儒略历带来的累积误差了。

        怎么样,现在你真的会计算闰年了?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-7-31 11:40:13 | 显示全部楼层

老哥算法错了,公元前的应该要
  1. abs(y)-1
复制代码
才对,因为没有公元零年

点评

谢谢纠正  发表于 2019-7-31 11:43
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-3 08:50

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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