python程序设计(第二版)第十四章上机实验

2.编写程序,打印2018年1-12月份的日历

import calendar

import locale

textcal=calendar.TextCalendar()

textcal.pryear(2018)

3.编写程序,定义一个返回指定年月的天数的函数ndays(y,m),并编写测试代码

from calendar import *
def ndays(y,m):
    monthDay=[31,28,31,30,31,30,31,31,30,31,30,31]
    days = monthDay[ m-1 ]
    if(m==2 and isleap(y)):
        days+=1
    return(days)
#测试代码
y=int(input("请输入年份(>=1),否则为1:"))
m=int(input("请输入月份(1--12),否则<1为1,>12为12:"))
if y<1:y=1
if m<1:m=1
if m>12:m=12
print(ndays(y,m))

4.编写程序,定义一个返回从公元1年1月1日(含)到y年m月d日(含)的天数的函数caldays(y,m,d),并编写测试代码。
提示:
计算从公元1年1月1日到y年m月d日的天数,可以分为3个部分计算。
(1)计算从公元1年到y-1年的天数,每年是365天或366天(闰年)。
(2)对于第y年,先计算1~m-1月整月的天数,可利用上一题返回指定年月的天数的函数ndays(y,m)。
(3)最后加上零头(第m月的d天)。

from calendar import *

def ndays(y,m):

    monthDays=[31,28,31,30,31,30,31,31,30,31,30,31]

    days = monthDays[ m-1 ]

    if(m==2 and isleap(y)):

        days+=1

    return(days)

def caldays(y,m,d):

    nleaps = 0

    nonleaps = 0

    monthDay = 0

    for i in range(1,y):

        if isleap(i):

            nleaps +=1

        else:

            nonleaps+=1

    yearDay=nonleaps*365+nleaps*366

    for i in range(1,m):

        monthDay += ndays(y,i)

    dayDay = d

    return yearDay +monthDay +dayDay     

#测试代码

y=int(input("请输入年份(>=1),否则为1:"))

m=int(input("请输入月份(1--12),否则<1为1,>12为12:"))

d=int(input("请输入天数(1--31),否则<1为1,>31为31:"))

if y<1:y=1

if m<1:m=1

if m>12:m=12

if d<1:d=1

if d>31:d=31

print("从1 年 1 月 1日到 {0} 年 {1} 月 {2} 日共 {3} 天".format(y,m,d,caldays(y,m,d)))

5.编写程序,定义一个返回指定年月日的星期的函数weekday(y,m,d)。结果为星期一.......星期日并编写测试代码。

from calendar import *

def ndays(y,m):

    monthDays=[31,28,31,30,31,30,31,31,30,31,30,31]

    days = monthDays[ m-1 ]

    if(m==2 and isleap(y)):

        days+=1

    return(days)

def caldays(y,m,d):

    nleaps = 0

    nonleaps = 0

    monthDay = 0

    for i in range(1,y):

        if isleap(i):

            nleaps +=1

        else:

            nonleaps +=1

    yearDay=nonleaps*365+nleaps*366

    for i in range(1,m):

        monthDay += ndays(y,i)

    dayDay = d

    return yearDay +monthDay +dayDay

def weekday(y,m,d):

    num=caldays(y,m,d)%7

    if(num==0):

        num=7

    numbers={

        0:"星期日",

        1:"星期一",

        2:"星期二",

        3:"星期三",

        4:"星期四",

        5:"星期五",

        6:"星期六"

        }

    return numbers.get(num)

#测试代码

y=int(input("请输入年份(>=1),否则为1:"))

m=int(input("请输入月份(1--12),否则<1为1,>12为12:"))

d=int(input("请输入天数(1--31),否则<1为1,>ndays(y,m)为ndays(y,m):"))

if y<1:y=1

if m<1:m=1

if m>12:m=12

if d<1:m=1

if d>ndays(y,m):d=ndays(y,m)

print("{0} 年 {1} 月 {2} 日是 {3}".format(y,m,d,weekday(y,m,d)))

  • 5
    点赞
  • 57
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值