题目:
要求程序可以自动获取,当前的时间。
然后,询问是打几天鱼晒今天网,先打鱼还是先晒网。
知道后,最后要输出,现在时间,今年一共有的天数,已经过的天数。
从1990年开始,计算今天是打鱼还是晒网?将结果输出。
程序代码:
'''编写一个程序,
用来计算今年:一共有多少天,已经过了多少天,还剩多少天。
同时计算出从1990年1月1日开始,以为x天打鱼,y天晒网,先打鱼和后打鱼的情况,到今年的,今天应该是打鱼还是晒网?
'''
# 导入datetime模块,用来获取时间
import datetime
# 获取当前日期时间,不显示秒
yuan_now = datetime.datetime.now().replace(microsecond=0)
# yuan_now = datetime.datetime.strptime(datetime.now().strftime('%Y-%m-%d %H:%M:%S'), '%Y-%m-%d %H:%M:%S')
# 获取当前年月日
year = yuan_now.year
month = yuan_now.month
day = yuan_now.day
months = (0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334) # 定义一个 months 列表,存储已经结束的月的总天数
if 0 <= month <= 12:
sum = months[month - 1]
else:
print('月份错误!')
sum += day # 对变量的值进行更新
leap = 0 # 定义新的变量的初始值为0.
all_days = 365
# 判断是否满足闰年的条件
if (year % 400 == 0) or ((year % 4 == 0) and (year % 100 != 0)):
leap = 1
all_days += 1 # 因为闰年的总天数多一天
if (leap == 1) and (month > 2):
sum += 1
left_days = 365 - sum
# 如果是闰年,并且月份已经是二月份后来,则需要对现在的总天数加一。
if (leap == 1) and (month > 2): # 两个条件同时成立。
left_days += 1
# 输入其他的变量,打鱼的天数,嗮网的天数,都是整型。
a = int(input("打几天鱼?请输入天数:"))
b = int(input("嗮几天网?请输入天数:"))
# 知道使用者是想要先打鱼,还是先嗮网。
c = int(input("先打鱼输入1,反之输入其他的数"))
# 求出打鱼、嗮网的一个周期,为T。
T = a + b
print('现在时间是:',yuan_now)
print("%d 年共有 %d 天!" % (year, all_days))
print("经过了 %d 天!还剩 %d 天!" % (sum, left_days))
# 根据输入的日期,求出年份,月份,以及日。
# year = Date // 10000
# month = Date % 10000 // 100
# day = Date % 100
# 因为是从1990年1月1日开始的,所以,输入数后,锁的的年份,不能小于1990。
# 通过if进行判断
if year < 1990:
print("您输入的日期小于1990年,输入错误:")
# 输入的数中年份小于1990时,屏幕上提出出错。
# 所输入的书中表示年份的,要么小于1990,要么就满足条件,使用if-else。
else:
# 判断是不是闰年。
def runYear(year):
# 定义一个函数,runYear。判断是不是闰年。
# 一个年份,只有两种情况来,即:是闰年和不是如年。使用:if-else,对年份进行判断。
if year % 4 == 0 and year % 100 != 0 or year % 400 == 0:
# 是闰年的时候,返回的是True。
return True
else:
# 不是闰年的时候,返回的是False。
return False
# 判断每月有多少天。
def getDays(year,month):
# 再次定义一个函数,勇于求每个月的天数。因为有特殊的二月,所以与年份有关,因此变量需为有year和month。
days = 0 #将初始days的值定为0。
# 通过多分支循环,判断出这个月有多少天。使用:if-elif-else。
if month in (1,3,5,7,8,10,12):
days = 31
elif month in (2,4,6,9,11):
days = 30
# 除了上述的两种情况之外,就是二月
elif month == 2:
# 这时闰年与不是闰年的天数是不一样的。首先要判断是不是闰年。调佣上面自定义的函数“runYear(year)。”
if runYear(year):
days = 29
else:
days = 28
# 是如年二月为29天,不是闰年则为28天。
return days # 返还days的值。
# 以下都有累加的计算方法。
# 计算该日期本年已完的总天数。
def thisYeardays(year,month,day):
# 自定义第三个函数thisYeardays,这函数的变量为year、month、day,三个变量。
sum = 0 # 将总天数的初始值定义为0.
i = 1 # 用i表示现在这一年的月份。
# 当i 比输入的数中的月份“month”的值小时,则每一次循环加一,直到i= month,停止。使用“while”循环。
while i < month:
# 每个月的天数monthDay,通过上面自定义的函数”getDays“得出。
monthDay = getDays(year,month)
# 本年本月前面的所有天数sum,等于各个月的天数相加。
sum += monthDay
i += 1
# 返还一个值,本年的所有天数为,前面每月所有天数和,加上本月已过的天数day
return sum + day
# 计算距离输入日期的总天数。
def allDays(year,month,day):
# 前面每年的天数,今年本月前每月的天数,本月已经过的天数。通过sum函数求和。
sum = 0 # 将总天数的初始值sum定义为零。
i = 1990 # 年份是从1990奶奶开始的。
while i < year:
if runYear(i):
sum += 366 # 那一年为闰年在已知的sum上在加上366。
else:
sum += 365 # 不是闰年,就是再加上365.
i += 1 #从1990年开始每一次加1.
s = thisYeardays(year,month,day) # 调用上面自定义的函数。
sum += s # sum最后的结果还要加上今年的天数,调用函数thisYeardays。
return sum # 返还最后锁的的sum的值。
# 判断是打鱼还是嗮网。
def judge(days):
# 自定义一个函数,判断是打鱼还是嗮网。
if c == 1: # 判断是先打鱼还是先嗮网,双分支结构,用if-slse,进行判断。
x = days % T # 计算余数。
if 1 <= x <= a: # 余数为1、2、3、……、a,打鱼,反之则为嗮网。
print("{}年{}月{}日,是打鱼!".format(year,month,day))
else:
print("{}年{}月{}日,是嗮网!".format(year,month,day))
else:
x = days % T
if 1 <= x <= b: # 余数为1、2、3、……、a,嗮网,反之则为打鱼。
print("{}年{}月{}日,是嗮网!".format(year,month,day))
else:
print("{}年{}月{}日,是打鱼!".format(year,month,day))
# 打印出结果。
sum = allDays(year,month,day)
# 调用自定义函数judge。
judge(sum)