Python:打印日历,验证信用卡号是否合法

17 篇文章 17 订阅

Python语言基础-2.5函数基础(理)

第5关:函数综合实训-打印日历

本关任务:利用函数的知识完成如下习题:

1、编写判断信用卡号是否合法的判断程序。

2、编写函数模块,打印日历程序

第1题

信用卡号是否合法的判断规则为: a) 对给定的8位信用卡号码,如43589795,从最右边数字开始,隔一位取一个数相加,如5+7+8+3=23。 b) 将卡号中未出现在第一步中的每个数字乘2,然后将相乘的结果的每位数字相加。例如,对上述例子,未出现在第一步中的数字乘2后分别为(从右至左)1818108,则将所有数字相加为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)

  • 8
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值