python编程题练习

题目:

编写一个程序,
用来计算今年:一共有多少天,已经过了多少天,还剩多少天。
同时计算出从1990年1月1日开始,以为x天打鱼,y天晒网,先打鱼和后打鱼的情况,到今年的,今天应该是打鱼还是晒网?

解答:

'''编写一个程序,
用来计算今年:一共有多少天,已经过了多少天,还剩多少天。
同时计算出从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)


  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值