Python-Every-Day:0001——优惠券(coupon)

第 0001 题

作为 Apple Store App 独立开发者,你要搞限时促销,为你的应用生成激活码(或者优惠券),使用 Python 如何生成 200 个激活码(或者优惠券)?

优惠券

优惠券通常由一些字母和数字构成,此处我构想将优惠券设定为10位,前面9位随机产生,最后一位由前9位产生,即第10位的值等于前9位的ASCII码值的和对10的膜值,在生成最后一位的同时也可以用第十位来检验前9位的输入
例如:

tJWF1h12D7

源码

# -*- coding: utf-8 -*-
"""
Spyder Editor

第 0001 题:作为 Apple Store App 独立开发者,你要搞限时促销,为你的应用生成激活码(或者优惠券),使用 Python 如何生成 200 个激活码(或者优惠券)?
"""
import random

def Generate_Coupon(n):
    """
    生成200个10位激活码
    前9位为随机的数字或字母
    第10位为前面9位的ASCII码对10的膜
    数字0~9的ASCII码范围为48~57
    字母A~Z的ASCII码范围为65~90
    字母a~z的ASCII码范围为97~122
    """
    codes = []
    for j in range(n):
        code = []
        tail=0
        for i in range(9):
            j=random.randint(0,2)
            if j==0:
                a,b=48,57
            elif j==1:
                a,b=65,90
            elif j==2:
                a,b=97,122
            #chr(a) 将ASCII码/整数a转为一个字符
            code.append(chr(random.randint(a,b)))
            #ord(a) 将a转换为其ASCII码/整数
            tail += ord(code[i])
            #str(a) 将整数a转换为字符串
            #此处因为tail的范围为0到9,而0的ASCII码为48
            #亦可:tail = chr(tail%10 + 48)
        tail = str(tail%10)
        code.append(tail)
        #调用join方法连接一个列表里的所有元素
        #用""里的内容来连接,如果""里为空,就连成一个字符串
        code_ = "".join(code)
        codes.append(code_)
    f = open('codes.txt','w')
    j=0
    for i in range(len(codes)):
        j += 1
        f.write(codes[i]+"\t")
        if j%10==0:
            f.write("\n")
    return codes

def Check_Coupon(codes):
    """
    由code原理来检验code是否合格
    即最后一位数字(非ASCII码)等于前9位ASCII码和对10的膜
    """
    for i in range(len(codes)):
        code = codes[i]
        tail = 0
        for j in range(len(code)-1):
            tail += ord(code[j])
        tail = tail%10
        if int(code[len(code)-1]) == tail:
            print('Permission through')
        else:
            print('Permission denied')

if __name__ == "__main__":
    result = Generate_Coupon(200)
    Check_Coupon(result)
    for i in range(len(result)):
        print(result[i])

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值