[原创] “这是个坑”+ 泽勒一致性

strong161   2016-9-23 10:40 楼主
前段时间一直跟着D大开始学习python,新接触语言,感觉挺简单的,写一个一简单的计算泽勒一致性,程序但是怎么运行都不对,请各位帮看看,实在搞不清楚问题在哪里。
  1. # 找星期程序,使用泽勒算法,
  2. #公式 h= (q + [26*(m+1)/10]+k+[k/4]+[j/4]+5j)%7#
  3. #已知bug 输入年月日不能输入为小数,报错。
  4. month = 0 #"""3-12月份为3-12,1,2 月份使用前一年的13,14月"""
  5. cent = 0 #'''世纪数'''
  6. year = 0 #'''世纪内年份'''
  7. Q = 0 #'''哪一天'''
  8. H = 0
  9. #年月日标志位用于判断输入数据合法性
  10. yearFlug = 1
  11. monthFlug = 1
  12. dayFlug = 1
  13. #接收用户输入年月日,并判断是否合法
  14. while(yearFlug):
  15. yearTemp = int(input("Please Enter Year :(eg:2008):"))
  16. if yearTemp > 0 :
  17. yearFlug = 0
  18. else:
  19. print("Sorry, Enter Wrong Year,try again Please")
  20. cent = yearTemp //100
  21. year = yearTemp % 100
  22. while(monthFlug):
  23. monthTemp = int(input("Please Enter month:(eg:10):"))
  24. if monthTemp > 0 and monthTemp <= 12:
  25. monthFlug = 0
  26. else:
  27. print("Sorry, Enter Wrong month ,Try again Please")
  28. if monthTemp ==1 or monthTemp ==2:
  29. year -= 1
  30. month = monthTemp + 12
  31. while(dayFlug):
  32. dayTemp = int(input("Please Enter day:(eg:21):"))
  33. if dayTemp > 0 and dayTemp <= 28:
  34. dayFlug = 0
  35. #如果为大月 31天
  36. elif (monthTemp == 1 or monthTemp == 3 or monthTemp == 5 \
  37. or monthTemp == 7 or monthTemp == 8 or monthTemp == 10 \
  38. or monthTemp == 12) \
  39. and (dayTemp >28 and dayTemp <= 31):
  40. dayFlug = 0
  41. #如果为小月 30天
  42. elif (monthTemp == 4 or monthTemp == 6 or monthTemp == 9 or monthTemp == 11)\
  43. and (dayTemp >28 and dayTemp <= 30):
  44. dayFlug = 0
  45. #如果如果闰年2月为29天
  46. elif (monthTemp == 2) and (yearTemp %4 ==0 and yearTemp%100 != 0) and(dayTemp == 29):
  47. dayFlug = 0
  48. else:
  49. print("Sorry ,Enter Wrong day,Try again Please")
  50. Q = dayTemp
  51. #H = (Q + int(2.6*( month +1 )) \
  52. # + int(0.25 * year) +year \
  53. # + int(0.25 * cent) +5 *cent)\
  54. # % 7
  55. H = (Q + ((26 * ( month + 1 ) / 10 ) // 1 ) \
  56. + (( year / 4 ) // 1) + year \
  57. + (( cent / 4 ) // 1) \
  58. + ( 5 * cent) )\
  59. % 7
  60. #H =int(( Q +26*(month+1)/10+year+year/4+cent/4+5*cent)%7)
  61. if H == 0:
  62. weekDay = "Sat"
  63. elif H == 1:
  64. weekDay = "Sun"
  65. elif H == 2:
  66. weekDay = "Mon"
  67. elif H == 3:
  68. weekDay = "Tue"
  69. elif H == 4:
  70. weekDay = "Wed"
  71. elif H == 5:
  72. weekDay = "Thu"
  73. elif H == 6:
  74. weekDay = "Fri"
  75. print("The day you want check is ",yearTemp,".",monthTemp,".",dayTemp)
  76. print("Day of week is ",weekDay)
计算结果一直不正确。 比如计算今天怎么算都是周一 2.png 重新改一下发现好了!程序自己写错了……改了几句就好了!已经解决,小坑一个! 前面一直以为是自己算法公式错了,改来改去,刚才才发现,month没有值!
  1. if monthTemp ==1 or monthTemp ==2:
  2. year -= 1
  3. month = monthTemp + 12
  4. else:month = monthTemp
本帖最后由 strong161 于 2016-9-23 11:02 编辑

回复评论 (6)

没有人理我,无论是葛优躺还是比要坐,俺们总得自己来一下……
点赞  2016-9-23 13:53
什么是泽勒一致性,求科普!!!!!!!!!!!!!
点赞  2016-9-23 15:40
引用: lijinqiu1 发表于 2016-9-23 15:40
什么是泽勒一致性,求科普!!!!!!!!!!!!!

就是一个公式用来计算每天为星期几的算法!
点赞  2016-9-23 16:01
W = [C/4] - 2C + y + [y/4] + [13 * (M+1) / 5] + d - 1  

C 是世纪数减一,y 是年份后两位,M 是月份,d 是日数。1 月和 2 月要按上一年的 13 月和
14 月来算,这时 C和 y均按上一年取值。
欢迎各位电子发烧友http://shop.paipai.com/296015908
点赞  2016-9-24 14:10
引用: aishuang 发表于 2016-9-24 14:10
W = [C/4] - 2C + y + [y/4] + [13 * (M+1) / 5] + d - 1  

C 是世纪数减一,y 是年份后两位,M 是月份 ...

谢谢,不是公式问题,是前面赋值的时候没有注意到,把月漏掉了,计算的时候月值总为零,所以一直结果不正确。真是一个坑呀,我也一直怕是公式写错了。
点赞  2016-9-24 15:06
  这个感性趣的人不多!
点赞  2016-9-28 18:05
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复