Oldboy Day3 HW by 徐杰炀
#作业一:for循环嵌套
https://www.cnblogs.com/linhaifeng/articles/7133167.html#_label14
打印99乘法表
for i in range(1, 10): for j in range(1, i+1): print("{}*{}={}\t".format(j, i, i*j), end='') print()
打印金字塔
size = 10 for i in range(size): num = 2*i + 1 text = '*'*num print(text.center(size*2, ' '))
#作业二: 三级菜单
#要求:
打印省、市、县三级菜单
可返回上一级
可随时退出程序
menu = { '北京':{ '海淀':{ '五道口':{ 'soho':{}, '网易':{}, 'google':{} }, '中关村':{ '爱奇艺':{}, '汽车之家':{}, 'youku':{}, }, '上地':{ '百度':{}, }, }, '昌平':{ '沙河':{ '老男孩':{}, '北航':{}, }, '天通苑':{}, '回龙观':{}, }, '朝阳':{}, '东城':{}, }, '上海':{ '闵行':{ "人民广场":{ '炸鸡店':{} } }, '闸北':{ '火车战':{ '携程':{} } }, '浦东':{}, }, '山东':{}, } ended = False while not ended: province_list = [] for i, province in enumerate(menu, 1): province_list.append(province) print(i, province) print('q 退出') ans1 = input('在以上选项中选择省份,请输入相应的编码>>>:') if ans1.isdigit(): ans1 = int(ans1) if ans1 > len(province_list) or ans1 < 1: print('输入超过选项数目,请重新输入') else: level2_menu = menu.get(province_list[ans1-1]) if level2_menu: while not ended: district_list = [] for i, district in enumerate(level2_menu, 1): district_list.append(district) print(i, district) print('b 返回上一级') print('q 退出') ans2 = input('在以上选项中选择区,请输入相应的编码>>>:') if ans2.isdigit(): ans2 = int(ans2) if ans2 > len(district_list) or ans2 < 1: print('输入超过选项数目,请重新输入') else: level3_menu = level2_menu.get(district_list[ans2-1]) if level3_menu: while not ended: area_list = [] for i, area in enumerate(level3_menu, 1): area_list.append(area) print(i, area) print('b 返回上一级') print('q 退出') ans3 = input('在以上选项中选择区域,请输入相应的编码>>>:') if ans3.isdigit(): ans3 = int(ans3) if ans3 > len(area_list) or ans3 < 1: print('输入超过选项数目,请重新输入') else: level4_menu = level3_menu.get(area_list[ans3 - 1]) if level4_menu: for i, building in enumerate(level4_menu, 1): print(i, building) print('已到菜单底部'.center(20, '-')) print('b 返回上一级') print('q 退出') while True: f_answer = input(':>>>') if f_answer == 'q' or f_answer == 'b': break print('请输入正确的选项,q/b') if f_answer == 'q': ended = True print('菜单退出') elif f_answer == 'b': continue elif ans3 == 'q': ended = True print('菜单退出') elif ans3 == 'b': break else: print('请输入正确编码') else: print('已到菜单底部'.center(20, '-')) print('b 返回上一级') print('q 退出') while True: f_answer = input(':>>>') if f_answer == 'q' or f_answer == 'b': break print('请输入正确的选项,q/b') if f_answer == 'q': ended = True print('菜单退出') elif f_answer == 'b': continue elif ans2 == 'q': ended = True print('菜单退出') elif ans2 == 'b': break else: print('请输入正确编码') else: print('已到菜单底部'.center(20, '-')) print('b 返回上一级') print('q 退出') while True: f_answer = input(':>>>') if f_answer == 'q' or f_answer == 'b': break print('请输入正确的选项,q/b') if f_answer == 'q': ended = True print('菜单退出') elif f_answer == 'b': continue elif ans1 == 'q': ended = True print('菜单退出') else: print('请输入正确编码')
emmm。。很繁琐,重复代码很多
用递归函数可以很有效得缩减代码长度,也更简单直接。还没学到,所以暂时不改进了
#作业三:请闭眼写出购物车程序
#需求:
用户名和密码存放于文件中,格式为:egon|egon123
启动程序后,先登录,登录成功则让用户输入工资,然后打印商品列表,失败则重新登录,超过三次则退出程序
允许用户根据商品编号购买商品
用户选择商品后,检测余额是否够,够就直接扣款,不够就提醒
可随时退出,退出时,打印已购买商品和余额
import os # 设置文件路径 BASE_PATH = os.path.dirname(__file__) # 商品预设 items_list = [ {'product_name': '第一个商品', 'price': 100}, {'product_name': '第二个商品', 'price': 200}, {'product_name': '第三个商品', 'price': 500}, {'product_name': '第四个商品', 'price': 700}, {'product_name': '第五个商品', 'price': 1000}, {'product_name': '第六个商品', 'price': 5000}, ] # 读取账号数据 with open(os.path.join(BASE_PATH, 'account.txt'), 'r') as f: accounts = f.readlines() account_list = [] for account in accounts: account_comb = account.split('|') account_dict = {'user_name': account_comb[0], 'pwd': account_comb[1].strip('\n')} account_list.append(account_dict) # 程序主体逻辑入口 failure_time = 0 ended = False while failure_time < 4 and not ended: user_name = input('请输入登录用户名:>>>') pwd = input('请输入密码:>>>') login_dict = {'user_name': user_name, 'pwd': pwd} if login_dict in account_list: print('登陆成功') # 登录后操作 while True: salary = input('请输入工资总额:>>>') if salary.isdigit(): salary = int(salary) break else: print('输入错误,请输入正确工资数目') print('工资总额为{}'.format(salary)) item_bought = [] while not ended: for index, item in enumerate(items_list, 1): print('{}\t{}\t价格: {}元'.format(index, item.get('product_name'), item.get('price'))) item['func_id'] = index print('按q退出') choice1 = '' while not ended: choice1 = input('请输入商品编码购买:>>>') if choice1.isdigit(): choice1 = int(choice1) if not (0 < choice1 <= len(items_list)): print('输入错误,请重新输入有效编码') else: break elif choice1 == 'q': ended = True else: print('输入错误,请重新输入有效编码') for item in items_list: if item.get('func_id') == choice1: item_price = item.get('price') if salary >= item_price: salary = salary - item_price item_bought.append(item.get('product_name')) print('<{}>已购买成功,花费{}元,工资还剩{}元'.format(item.get('product_name'), item_price, salary)) else: print('工资不够,{}没有购买成功'.format(item.get('product_name'))) else: print('已购买物品: ', end='') if item_bought: for item in item_bought: print('{}, '.format(item), end='') print() print('工资还剩{}元'.format(salary)) print('谢谢惠顾') else: print('没有购买任何东西,谢谢惠顾') else: failure_time += 1 print('登录失败,请重试') if failure_time > 3: print('失败超过三次,退出')
浙公网安备 33010602011771号