python基础练习题
Posted 一只小小寄居蟹
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python基础练习题相关的知识,希望对你有一定的参考价值。
购物车程序
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2018/3/6 21:01 # @Author : hyang # @Site : # @File : shop_cart.py # @Software: PyCharm """ 购物车程序 数据结构: goods = [ {"name": "电脑", "price": 1999}, {"name": "鼠标", "price": 10}, {"name": "游艇", "price": 20}, {"name": "美女", "price": 998}, ...... ] 功能要求: 基础要求: 1、启动程序后,输入用户名密码后,让用户输入工资,然后打印商品列表 2、允许用户根据商品编号购买商品 3、用户选择商品后,检测余额是否够,够就直接扣款,不够就提醒 4、可随时退出,退出时,打印已购买商品和余额 5、在用户使用过程中, 关键输出,如余额,商品已加入购物车等消息,需高亮显示 扩展需求: 1、用户下一次登录后,输入用户名密码,直接回到上次的状态,即上次消费的余额什么的还是那些,再次登录可继续购买 2、允许查询之前的消费记录 """ import os # 商品列表 goods = [ {"name": "电脑", "price": 1999}, {"name": "鼠标", "price": 10}, {"name": "游艇", "price": 20}, {"name": "IPAD", "price": 1998}, {"name": "手机", "price": 998}, {"name": "玩具", "price": 50}, {"name": "教科书", "price": 100} ] last_shop = [] # 上次购买数据 last_bal = [] # 得到每次购买余额 def is_shop(user): """ 判断该用户是否已消费数据 :param user: :return: """ flg = False if os.path.exists(r"user_shop.txt"): # 查询用户有购买记录 with open(r"user_shop.txt", "r", encoding=\'utf-8\') as f: for line in f: if line.find(user) != -1: flg = True break else: # 创建空文件 with open(r"user_shop.txt", "w", encoding=\'utf-8\') as f: f.write("") return flg def login(): """ 用户登录 :return: """ err_cnt = 0 suc_user = \'\' # 返回成功登录用户 # 判断锁标志 while err_cnt < 3: user = input(\'输入用户名: \') pwd = input(\'输入密码: \') if user == \'alex\' and pwd == \'123\': print(\'登录成功\') suc_user = user break else: print(\'登录失败\') err_cnt += 1 else: print(\'您登录失败已超过3次\') return suc_user def check_salary(): """ 检查收入 :return: """ while True: salary = input(\'输入工资: \') if salary.isdigit(): break else: print(\'工资输入错误,请重新输入!\') return int(salary) def shop(user, salary): """ 用户购物 """ shop_cart = [] # 购物车 while True: print(\'-------商品列表--------\') for index, value in enumerate(goods): print(\'商品编号:%s 商品名称:%s 商品价格:%s\' % (index, value[\'name\'], value[\'price\'])) choice = input(\'输入商品编号:---输入q退出购买 \') if choice.isdigit(): choice = int(choice) if 0 <= choice < len(goods): price = goods[choice][\'price\'] if (salary - price) > 0: salary = salary - price shop_cart.append(goods[choice]) print(\'\\033[1;32;40m购买商品编号:%s 购买商品名称:%s 购买商品价格:%s\\033[0m\' % (choice, goods[choice][\'name\'], goods[choice][\'price\'])) print(\'\\033[1;32;40m工资余额=%s\\033[0m\' % salary) else: print(\'余额不足\') continue else: print(\'商品编号不存在!\') elif choice == \'q\': print(\'\\033[1;31;40m-------本次购物退出--------\\033[0m\') if len(shop_cart) > 0: print(\'-------本次购买商品列表--------\') with open(r"user_shop.txt", "a+", encoding=\'utf-8\') as f: f.write("user:%s\\n" % user) for value in shop_cart: shop_info = \'购买商品名称:%s|购买商品价格:%s\' % (value[\'name\'], value[\'price\']) print(\'\\033[1;32;40m%s\\033[0m\' % shop_info) f.write(shop_info + "\\n") bal_info = \'工资余额:%s\' % salary print(\'\\033[1;32;40m%s\\033[0m\'% bal_info) f.write(bal_info + "\\n") break def get_shop(user): """ 读取文件得到用户已消费数据 :param user: :return: """ flg = False resume_goods = [] # 消费商品 with open(r"user_shop.txt", "r", encoding=\'utf-8\') as f: for line in f: if line.find("购买") != -1: shop_li = line.split("|") resume_goods.append([shop_li[0].split(":")[1].strip(), shop_li[1].split(":")[1].strip()]) elif line.find("余额") != -1: last_bal.append(line.split(":")[1].strip()) print("\\033[1;32;40m历史购物:%s\\033[0m" % resume_goods) # 带绿色输出 print(\'\\033[1;32;40m还剩下余额:%s\\033[0m\' % last_bal[-1]) # 带绿色输出 if __name__ == \'__main__\': user = login() if user != \'\': print(\'{}登录成功\'.format(user)) while True: action = input(\'输入c查询消费记录,输入b购买商品,输入q退出:\') if action == \'q\': print(\'\\033[1;31;40m---退出程序------\\033[0m\') # 带红色输出 get_shop(user) break elif action == \'c\': if is_shop(user): print("---查询之前的消费记录---") get_shop(user) else: print("---查询之前无消费记录---") elif action == \'b\': if not is_shop(user): salary = check_salary() else: salary = int(last_bal[-1]) print(\'您工资现有:\', salary) shop(user, salary)
输出结果
三级菜单程序
#!/usr/bin/env python3 # -*- coding: utf-8 -*- # @Time : 2018/3/1 9:38 # @Author : hyang # @File : three_menu.py # @Software: PyCharm """ 可依次选择进入各子菜单 可从任意一层往回退到上一层 可从任意一层退出程序 """ menu = { \'北京\':{ \'海淀\':{ \'五道口\':{ \'soho\':{}, \'网易\':{}, \'google\':{} }, \'中关村\':{ \'爱奇艺\':{}, \'汽车之家\':{}, \'youku\':{}, }, \'上地\':{ \'百度\':{}, }, }, \'昌平\':{ \'沙河\':{ \'老男孩\':{}, \'北航\':{}, }, \'天通苑\':{}, \'回龙观\':{}, }, \'朝阳\':{}, \'东城\':{}, }, \'上海\':{ \'闵行\':{ "人民广场":{ \'炸鸡店\':{} } }, \'闸北\':{ \'火车站\':{ \'携程\':{} } }, \'浦东\':{}, }, \'山东\':{}, } current_menu = menu # 当前菜单 last_menu = [] # 上层菜单 prompt = "输入菜单名,进入子菜单\\n 输入\'b\',返回上层菜单\\n 输入\'q\',退出程序\\n" while True: if len(current_menu) == 0: print(\'已经到最底层,该菜单下无节点\') else: for k in current_menu: print(\'菜单->\', k) input_str = input(prompt).strip() if input_str == \'q\': print(\'退出程序\') break elif input_str in current_menu: last_menu.append(current_menu) # 保存上一层菜单 current_menu = current_menu[input_str] # 保存当前层 elif input_str == \'b\': if len(last_menu) != 0: current_menu = last_menu.pop() # 弹出上一层菜单 else: print(\'已经是顶层菜单\') else: print(\'该节点菜单不存在\') continue
以上是关于python基础练习题的主要内容,如果未能解决你的问题,请参考以下文章