Python语言基础-2.5函数基础(理)
第5关:函数综合实训-打印日历
本关任务:利用函数的知识完成如下习题:
1、编写判断信用卡号是否合法的判断程序。
2、编写函数模块,打印日历程序
第1题
信用卡号是否合法的判断规则为: a) 对给定的8位信用卡号码,如43589795 ,从最右边数字开始,隔一位取一个数相加,如5+7+8+3=23 。 b) 将卡号中未出现在第一步中的每个数字乘2 ,然后将相乘的结果的每位数字相加。例如,对上述例子,未出现在第一步中的数字乘2 后分别为(从右至左)18 、18 、10 、8 ,则将所有数字相加为1+8+1+8+1+0+8=27 。 c) 将上述两步得到的数字相加,如果得数个位为0 ,则输入的信用卡号是有效的。
请在指定位置完成函数的编写,判断用户输入的8 位信用卡号码是否合法。
第2题
在指定位置完成函数编写,根据年和月,打印该月的日历。(计算y年m月d日是星期几的公式为:
试题中已定义了三个函数,请完成这三个函数, 函数day 用于计算并返回某年某月某日是星期几; 函数isLeapYear 用于判断某年是否是闰年; 函数calendar 打印所给年月的日历,注意输出格式要求和空格的对齐,如下图所示,具体的空格数请参见本题代码。
?
代码如下:
# -*- coding: utf-8 -*-
"""
Created on Fri Apr 9 12:40:28 2021
@author: hzh
"""
#1题 :信用卡的验证程序
def validCreditCard(num):
#请在下面编写代码
# ********** Begin ********** #
numb=str(num)
s=[]
for k in numb:
s+=[int(k)]
s1=sum(s[::-2])
s2=s[-2::-2]
ss=0
for i in s2:
j=i*2
if j-10>=0:
ss+=j//10+j-10
else:
ss+=j
jud=s1+ss
if str(jud)[-1]=='0':
valid=True
else:
valid=False
# ********** End ********** #
return valid
#请不要修改下面的代码
for num in [1234567, 43589795, 87539319, 123456789]:
valid = validCreditCard(num)
print(valid)
print('*'*20)
#2题:打印日历
def day(y, m, d):#计算y年m月d日是星期几
# 请在下面编写代码
# ********** Begin ********** #
y0=y-(14-m)//12
x=y0+y0//4-y0//100+y0//400
m0=m+12*((14-m)//12)-2
d0=(d+x+(31*m0)//12)%7
# ********** End ********** #
# 请不要修改下面的代码
return d0
def isLeapYear(year): #判断year年是否闰年
# 请在下面编写代码
# ********** Begin ********** #
if (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0):
isLeapYear=1
else:
isLeapYear=0
# ********** End ********** #
# 请不要修改下面的代码
return isLeapYear
def calendar(y, m): #打印y年m月日历
print(' {}年{}月'.format(y,m))
print('Su\tM\tTu\tW\tTh\tF\tSa')
# 请在下面编写代码调用函数计算y年m月1日是星期几保存在变量date中
# ********** Begin ********** #
date=day(y,m,1)
# ********** End ********** #
days = 0 #初始化y年m月的天数为0
# 请在下面编写代码计算y年m月的天数
# ********** Begin ********** #
if m in [1,3,5,7,8,10,12]:
days=31
elif m in [4,6,9,11]:
days=30
elif m==2:
if isLeapYear(y):
days=29
else:
days=28
else:
pass
# ********** End ********** #
count = date # y年m月1日是星期几
for i in range(date):
print('\t', end='')
for d in range(1, days + 1):
print(str(d) + '\t', end="")
count = (count + 1) % 7
if count == 0:
print()
print()
# 请不要修改下面的代码
for (y,m) in [(2017,8), (2017,10),(2015,8), (2017,2), (2016,2)]:
calendar(y, m)
print('-'*27)
|