文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Python的十二道编程题,码住战胜一切

2023-09-04 13:57

关注

一、计算文件大小

import osdef get_size(path):    size = 0    l = [path]    while l:        path = l.pop()        lst = os.listdir(path)        for name in lst:            son_path = os.path.join(path,name)            if os.path.isfile(son_path):                size += os.path.getsize(son_path)            else:                l.append(son_path)    return sizesize = get_size(r'D:\s14\算法')print(size)

二、三级菜单

l = [menu]while l:    for k in l[-1]:        print(k)    key = input('>>>')    if key.upper() == 'B':        l.pop()    elif key.upper() == 'Q':        l.clear()    elif l[-1].get(key):        l.append(l[-1][key])

三、文件监听

def func():    with open('test.txt', 'r+', encoding='utf-8') as f:        while 1:            lens = f.readline()            if lens:                yield lenst = func()for j in t:    print(j)

四、发红包

import randomdef rea_pac(money,num):    ret = random.sample(range(1,money*100),num-1)    print(ret)    ret.sort()    ret.insert(0,0)    ret.append(money*100)    for i in range(len(ret)-1):        value = ret[i+1] - ret[i]        yield value/100g = rea_pac(200,10)for i in g:    print(i)

五、递归问路

lis = ['alex','wusir','yuanhao','linhaifeng','henry']def inner(name):    if len(name) == 0:        return '没有找到路'    res = lis.pop(0)    if res == 'henry':        return '%s说:我知道老男孩就在沙河地铁站附近'%res    print('hi美男%s敢问路在何方'%res)    print('%s回答道,我也不知道,我帮你问问%s'%(res,lis))    f = inner(lis)    return fprint(inner(lis))

找到路后会把结果返回给上一个调用者’linhaifeng’
‘linhaifeng’会把结果返回给上一个调用者’yuanhao’…
最终会把结果返回给最开始的调用者inner

六、人狗大战

import randomimport time

定义一个人的类

class Person:    # 定义人的静态属性    def __init__(self,name,hp,ad,sex):        self.name = name        self.ad = ad        self.hp = hp        self.sex = sex    # 定义人的方法    def da(self,dog):        yy = random.randint(1,self.ad)        dog.hp -= yy        print('%s使用%s,打了%s,%s掉了%s点血'%(self.name,arms.name,dog.name,dog.name,yy))        if dog.hp < 50:            print("{}使用终极必杀技{}".format(dog.name,arms.skill()))

定义一个狗的类

class Dog:    # 定义狗的静态属性    def __init__(self,name,hp,ad,kind):        self.name = name        self.hp = hp        self.ad = ad        self.kind = kind    # 定义狗的方法    def yao(self,person):        uu = random.randint(1,self.ad)        person.hp -= uu        print('%s咬了%s,%s掉了%s点血' % (self.name, person.name, person.name,uu))        if person.hp < 50:            print("{}使用终极必杀技{}".format(person.name,arms.skill()))

定义一个武器类

class Arms:    def __init__(self,name,hp,ad):        self.name = name        self.hp = hp        self.ad = ad    # 定义一个武器的技能    def skill(self):        li = ['飞龙在天','乾坤大挪移','九阳神功']        f = random.choice(li)        return farms = Arms('铁锹',3000,2000)henry = Person('henry',500,30,'男')dog = Dog('大黄',300,30,'哈士奇')c = 1while dog.hp > 0:    print('第{}回合'.format(c))    dog.yao(henry)    henry.da(dog)    time.sleep(1)    c +=1

七、计算器

import reexpress = '1-2*((60-30+(9-2*5/3+7/3*99/4*2998+10*568/14)*(-40/5))-(-4*3)/(16-3*2))'express = express.replace(' ','')

计算

def cout(exp):    if '*' in exp:        a,b = exp.split('*')        return str(float(a) * float(b))    else:        a, b = exp.split('/')        return str(float(a) / float(b))

表达式的符号管理把++变成+,–变成-,±变成-,-+变成-

def format_exp(exp):    exp = exp.replace('++','+')    exp = exp.replace('+-','-')    exp = exp.replace('--','+')    exp = exp.replace('-+','-')    return exp

计算所有的乘除法

def cal_no(res):    while True:        chengshu = re.search('\d+\.?\d*[*/]-?\d+\.?\d*', res)  # (9-2*5/3+7/3*99/4*2998+10*568/14)        if chengshu:            ret = chengshu.group()  # 2*5            resut = cout(ret)  # 得到乘除法的计算结果 10.0            # 将2*5替换成10.0            res = res.replace(ret, resut)  # (9-10.0/3+7/3*99/4*2998+10*568/14)        else:break    print(res)  # (9-3.3333333333333335+173134.50000000003+405.7142857142857)    # 表达式的符号管理把++变成+,--变成-,+-变成-,-+变成-    res1 = format_exp(res) # 将替换后的结果从新赋值给res    # 将括号内的加减法都匹配出来    res_lis = re.findall('[-+]?\d+(?:\.\d+)?',res1)    print(res_lis)  # ['9', '-3.3333333333333335', '+173134.50000000003', '+405.7142857142857']    sum_n = 0    for i in res_lis:        sum_n += float(i)    return sum_ndef remove_bracket(express):    while True:

提取表达式最里层的括号

        exp = re.search('\([^()]+\)',express)        if exp:            res = exp.group()  # (9-2*5/3+7/3*99/4*2998+10*568/14)            rep = cal_no(res)  # 173545.88095238098            print(rep)            express = express.replace(res,str(rep)) # 因为rep的结果是一个数字            print(express) # 1-2*((60-30+173545.88095238098*(-40/5))-(-4*3)/(16-3*2))        else:break    return express  # 括号内的表达式全部计算完成1-2*-1388338.2476190478ret = remove_bracket(express)print(cal_no(re

八、校验文件的一致性

# import os# import hashlib# def file_md5(path):#     filesize = os.path.getsize(path)#     md5 = hashlib.md5()#     with open(path,'rb') as f:#         while filesize >= 4096:#             content = f.read(4096)#             md5.update(content)#             filesize -= 4096#         else:#             content = f.read(filesize)#             if content:#                 md5.update(content)#     return md5.hexdigest()## def cmp_file(path1,path2):#     return file_md5(path1) == file_md5(path2)# path1 = r'D:\s20\day18\视频\4.面向对象整理.mp4'# path2 = r'D:\s20\day18\视频\tmp.mp4'# ret = cmp_file(path1,path2)# print(ret)

九、打印九九乘法表

for i in range(1,10):    for j in range(1,i+1):        print("%s*%s=%s"%(i,j,i*j),end=' ')    print()for i in range(1,10):    for j in range(i,10):        print("%s*%s=%s"%(i,j,i*j),end=' ')    print()

十、购物车作业

创建一个名为‘购买账单的txt文件

goods = []money = input('请充值充值金额').strip()with open('商品信息',encoding='utf-8')as f:    for i in f:       xinxi = i.strip().split(' ')       if xinxi[0] == 'name':           continue       else:           dic = dict([('name',xinxi[0]),('price',xinxi[1])])           goods.append(dic)print(goods)"""页面显示 序号 + 商品名称 + 商品价格"""a = 1for v in goods:    print(a,v['name'],v['price'])    a += 1print('n 购物车结算')print('q 或 Q 退出')shop_dic = {}sum = 0a = 1dic = {}balance = 0while 1:    shuru = input('请输入序号').strip()    if shuru.isdigit() and (0 < int(shuru) <= len(goods)):        print(goods[int(shuru)-1]['name'],goods[int(shuru)-1]['price'])

购物车添加商品名称和价格和数量

        shop_dic.setdefault(goods[int(shuru)-1]['name'],{'price':goods[int(shuru)-1]['price'],'amount':0})

增加商品数量

        shop_dic[goods[int(shuru)-1]['name']]['amount'] += 1    elif shuru == 'n':        for k,j in shop_dic.items():            # python学习交流群:309488165            # 展示购物车商品名称价格数量            print(a,k,j['price'],j['amount'])

带序号和商品名称的字典

            dic[a] = k            a += 1            sum += int(j['price'])*int(j['amount'])        if int(money) >= sum:            print('结算成功')            balance = int(money)-sum            for s, b in shop_dic.items():                print(s, b['price'], b['amount'])            print('共计消费{}元,剩余金额{}元'.format(sum, balance))            break        while int(money) < sum:            print('余额不足')            shanchu = input('请输入要删除的商品序号')

用户选择删除购物车里的商品则在购物车里将数量减一

            shop_dic[dic[int(shanchu)]]['amount'] -= 1            sum = sum - int(shop_dic[dic[int(shanchu)]]['price'])        else:            print('结算成功')            balance = int(money) - sum            for s, b in shop_dic.items():                print(s, b['price'], b['amount'])            print('共计消费{}元,剩余金额{}元'.format(sum, balance))            break    elif shuru.upper() == 'Q':            print('程序退出')            break    else:        print('输入有误请重新输入')with open('购买账单',encoding='utf-8',mode='w') as f1:    for s, b in shop_dic.items():        f1.write('商品名称:{} '.format(s))        f1.write('单价:{} '.format(b['price']))        f1.write('数量:{}\n'.format(str(b['amount'])))    f1.write('共计消费{}元\n'.format(sum))    f1.write('剩余金额%s元'%(balance))

十一、博客园登录

创建一个log和register文件

import timedic = {    1: '请登录',    2: '请注册',    3: '文章页面',    4: '日记页面',    5: '评论页面',    6: '收藏页面',    7: '退出程序',}def Home_display():    """

首页展示

    :return:    """    print('欢迎来到博客园首页!!!')    for i in dic:        print(i,dic[i])Home_display()def ster():    """

用户注册函数,将用户名,密码写入文件

    :return:    """    user_name = input('请填写注册名称').strip()    pass_word = input('请填写注册密码').strip()    with open('register','a+',encoding='utf-8') as f1:        f1.write('{},{}'.format(user_name,pass_word)+'\n')        print('注册成功,请登录!!!')def login_system():    """

登录函数

    :return:    """    user_name = []    time = 3    with open('register', 'r+', encoding='utf-8') as f:        for i in f:            user_name.append(i.strip())        while time >= 1:            name = input('请输入用户名')            wd = input('请输入密码')            l = name + ',' + wd            if l in user_name:                print('登录成功')                chioce(name)            else:                time -= 1                if time == 0:                    print('登录次数超出限制,请您注册后登录!')                    break                print('用户名或密码错误,剩余{}次机会'.format(time))def eixt_procedure():    """

退出程序

    :return:    """    print('程序退出,欢迎下次光临')    exit()def log(n,func):    with open('log','a+',encoding='utf-8') as f2:        current_time = time.strftime("%Y-%m-%d-%X",time.localtime())        f2.write('{}:{}调用了{}函数'.format(n,current_time,func) + '\n')def diary(n):    """

日记页面

    :return:    """    print('欢迎{}访问日记页面'.format(n))    log(n, 'diary')def comment(n):    """

评论页面

    :return:    """    print('欢迎{}访问评论页面'.format(n))    log(n, 'comment')def Collection(n):    """

收藏页面

    :return:    """    print('欢迎{}访问收藏页面'.format(n))    log(n, 'Collection')def Article(n):    """

文章页面

    :return:    """    print('欢迎{}访问文章页面'.format(n))    log(n, 'Article')lis = [login_system,ster,Article,diary,comment,Collection,eixt_procedure,log]def chioce(a):    """

用户选择函数

    :return:    """    while 1:        number = input('请选择页面:').strip()        if number.isdigit() and 3 <= int(number) <= 6:            lis[int(number)-1](a)        # 不可以输入字母        elif number.isdigit() and (int(number) ==1 or int(number)==7):            if int(number)==7:                eixt_procedure()            lis[int(number) - 1]()        else:            print('请输入正确页面选项:')def chioce1():    while 1:        number = input('请选择登录或注册或退出').strip()        if number.isdigit() and (1 == int(number) or int(number) == 7 or int(number) == 2) :            if int(number) == 7:                eixt_procedure()            else:                lis[int(number)-1]()        else:            print('输入有误请重新输入')chioce1()

十二、学生选课系统

创建course_file,test.log,vip_admin 文件

import hashlibimport pickleimport osimport logginglogger = logging.getLogger()

创建一个handler,用于写入日志文件

fh = logging.FileHandler('test.log',encoding='utf-8')

再创建一个handler,用于输出到控制台

# ch = logging.StreamHandler()formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')fh.setFormatter(formatter)# ch.setFormatter(formatter)logger.addHandler(fh) #logger对象可以添加多个fh和ch对象# logger.addHandler(ch)logger.setLevel(logging.DEBUG)# python学习交流群:309488165# 密码加密def md5_user(username,password):    md5 = hashlib.md5(username.encode('utf-8'))    md5.update(password.encode('utf-8'))    return md5.hexdigest()

读取文件

def read_file_name(file_name):    with open(file_name,'rb') as f:        while True:            try:                res = pickle.load(f)                if res:                    yield res            except EOFError:                break

写文件

def add_file(file_name,content):    with open(file_name,'ab') as f:        pickle.dump(content,f)

创建课程类

class Course:    def __init__(self,name,price,period,teacher):        self.name = name        self.price = price        self.period = period        self.teacher = teacher    def __str__(self):        return format('\t课程:' + self.name,'<13') + format('价钱:' + self.price,'<13') + format('周期:' + self.period,'<13') + format('老师:' + self.teacher,'<13')class Admin:    msg = [('创建课程', 'course'),            ('创建学生和学生账号', 'account_num'),            ('查看所有课程', 'view_courses'),            ('查看所有学生', 'look_all_student'),            ('查看所有学生的选课情况', 'look_all_courses'),            ('退出程序', 'quit')]

实例化出一个管理员

    def __init__(self,username,password,identify='Admin'):        self.username = username        self.password = password        self.identify = identify

创建课程

    def course(self):        student_name = input('请输入课程名称')        student_pricce = input('请输入课程价钱')        student_period = input('请输入课程周期')        student_teacher = input('请输入授课老师')        Course1 = Course(student_name,student_pricce,student_period,student_teacher)        add_file('course_file', Course1)        return True

创建学生和学生账号

    def account_num(self):        username = input('请输入要创建的姓名')        password = input('请输入要创建的密码')        student1 = Student(username,md5_user(username,password))        add_file('vip_admin', student1)        return True

查看所有课程

    def view_courses(self):        ret = read_file_name('course_file')        for index,i in enumerate(ret,1):            print(index,i)   # 因为用__str__所以直接打印对象名直接可以打印他的returnreturn True

查看所有学生

    def look_all_student(self):        ret = read_file_name('vip_admin')        for i in ret:            if i.identify == 'Student':                print(i.username,i.password)        return True

查看所有学生的选课情况

    def look_all_courses(self):        ret = read_file_name('vip_admin')        for i in ret:            if i.identify == 'Student':                print(i.username)                for j in i.course:                    print(j)        return True

退出程序

    def quit(self):        print('程序退出')        logger.info(self.username + '——' + self.msg[-1][0])        exit()

实例化一个alex密码123的管理员

# alex = Admin('alex',md5_user('alex','123'))# def write_file_name():#     with open('vip_admin','wb') as f:#         pickle.dump(alex,f)# write_file_name()class Student:    msg = [('查看所有课程', 'look_all_course'),            ('选择课程', 'choice_course'),            ('查看所选课程', 'look_choice_course'),            ('退出程序', 'quit')]    def __init__(self,username,password,identify = 'Student'):        self.username = username        self.password = password        self.identify = identify        self.course = []    def look_all_course(self):        ret = read_file_name('course_file')        for index, i in enumerate(ret, 1):            print(index, i)        return True    def choice_course(self):        ret = list(read_file_name('course_file'))        # print(ret)        for index, i in enumerate(ret, 1):            print(index, i)        while True:            choice = input('请选择课程>>>:').strip()            if choice.isdigit() and int(choice) in range(1,len(ret) +1 ):                print(ret[int(choice)-1].name)                print([i.name for i in self.course])                if ret[int(choice)-1].name not in [i.name for i in self.course]:                    self.course.append(ret[int(choice)-1])                    with open('vip_admin','rb') as f1,open('vip_admin2','wb') as f2:                        while True:try:    res1 = pickle.load(f1)    if res1.username == self.username:        res1.course.append(ret[int(choice)-1])        pickle.dump(res1,f2)    else:        pickle.dump(res1, f2)except EOFError:break                    os.remove('vip_admin')                    os.rename('vip_admin2','vip_admin')                    logger.info(self.username + '——' + self.msg[1][0]+ str(ret[int(choice)-1])) # ?????                    break                else:                    print('该课程您已选择')                    break            else:                print('输入有误重新输入')    def look_choice_course(self):        ret = read_file_name('vip_admin')        for i in ret:            if i.username == self.username:                for j in i.course:                    print(j)        return True    def quit(self):        logger.info(self.username + '——' + self.msg[-1][0])        exit()

登录验证

def login(username,password):    ret = read_file_name('vip_admin')    for i in ret:        # print(i.username)        if i.username == username and i.password == md5_user(username,password):            return i    else:return Falsedef auth():    lis = ['登录','退出']    while True:        for index,opt in enumerate(lis,1):            print(index,opt)        num = input('请输入你要操作的内容')        if num.isdigit() and int(num) in range(1,len(lis)+1):            if num == '1':                username = input('请输入用户名')                password = input('请输入密码')                ret = login(username,password)                if ret:                    print('登录成功')                    logger.info(username + '——' + '登录成功')                    return ret                else:                    print('登录失败')            elif num == '2':                exit()        else:            print('您输入的序号有误请重新输入')

主函数

def main():    ret = auth()    # if hasattr(sys.modules[__name__],ret['identify']):    #     cls = getattr(sys.modules[__name__],ret['identify']) # ???????    #     # print(sys.modules[__name__]) # <module '__main__' from 'D:/PycharmProjects/s20/大作业/Thursday/学生选课系统升级版/选课系统升级版.py'>    #     obj = cls(ret['username'],ret['password'])    if ret:        # print(ret)        obj = ret        # print(obj)        while True:            for index,i in  enumerate(obj.msg,1):                print(index,i[0])            choice = input('请选择序号')            if choice.isdigit() and int(choice) in range(1,len(obj.msg) + 1):                if hasattr(obj,obj.msg[int(choice) - 1][1]):                    if callable(getattr(obj,obj.msg[int(choice) - 1][1])):                        ret = getattr(obj, obj.msg[int(choice) - 1][1])()                        if ret:logger.info(obj.username+'——'+obj.msg[int(choice) - 1][0])            else:                print('您输入的序号有误,请重新输入')main()

最后

文章提供的十二道编程题,大家都可以自己研究研究,有不理解的地方也是可以点击文章末尾名片 进行交流学习的哦

刚开始学习python的朋友,或者对python感兴趣还没开始学习的宝子,也可以点击名片领取大量的学习资料以及部分案例的源码哦

希望我们可以一起学习,一起进步~

来源地址:https://blog.csdn.net/yxczsz/article/details/128885930

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯