1.需求
程序:购物车程序
需求:
启动程序后,让用户输入工资,然后打印商品列表
允许用户根据商品编号购买商品
用户选择商品后,检测余额是否够,够就直接扣款,不够就提醒
可随时退出,退出时,打印已购买商品和余额
2.个人思路
定义商品列表database 用户输入工资 (str 如何转化int) 循环 打印商品列表 (index,items循环打印) 选择商品 if choice in (0,1,2,3): if price <= salary: add 购物车 salary -= price else 余额不足 if choice is q: break 退出 打印购物车,余额
实现代码
# coding=utf-8 shopping_cart = [] sala = input("your salary is :").strip() if sala.isdigit(): salary = int(sala) goods = [['apple',5000],['air paid',3400], ['mi',2400],['coffee',35],['cake',12] ] while True: for index,items in enumerate(goods): print(index,items) choice = input(">>>enter your choice :" ) if choice in ('0','1','2','3','4'): print('>>>your choice good is ',goods[int(choice)]) price = goods[int(choice)][-1:][0] if price <= salary: salary -= price shopping_cart.append(goods[int(choice)]) else: print(" 33[1m余额不足,your salary is %s 33[0m"%salary) elif choice == 'q': break else: print(" 33[1menter error!!! 33[0m") print('-----the shopping_cart ----') for i in shopping_cart: print(i) print('--------------------------- your salary:',salary) else:print(" 33[1menter error!!! 33[0m")
3.个人心得
3.1 定义一个空 字符串,列表,元组,字典
# a_str = "" # a_list = [] # a_tuple= () # a_dict = {}
3.2 复合列表。复合字典
复合字典需要key:value 一一对应,goods1 没有key 所以显示错误
最外面为[ ] 就是list
最外面为{ } 就是dict
下图分别为,复合list,复合list,错误演示
三维字典正确演示
data_base = { 'shaanxi':{ "xi'an":{ 'yantaqu':['dongyilu','dianzierlu','taibailu'], 'weiyangqu':['ziwulu','dahualu'], 'changanqu':['changanlu','jinhualu'] }, 'xianyang':{}, 'weinan':{} }, 'jiangsu':{}, 'nanjing':{} }
复合列表正确演示
goods = [{'apple':5000},{'air paid':3400}, {'mi':2400},{'coffee':35},{'cake':12} ]
3.3 循环获取index,items
emumerate 是python中的内建函数,可以共同获取index,和items
goods = [{'apple':5000},{'air paid':3400}, {'mi':2400},{'coffee':35},{'cake':12} ] for index,items in enumerate(goods): print(index,items)
3.5 只获取index (或items)
比如:获取商品清单的全部序号,判断choice是否在index中,使用 len判断list的长度
如果goods为字典,获取price 只能用key,不能打印全部的
错误演示
if choice in ('0','1','2','3','4'): print('>>>your choice good is ',goods[int(choice)])
正确演示
if choice <len(goods) and choice >= 0: print('>>>your choice good is ',goods[int(choice)])
3.6 list内,string类型和int类型转换
['air paid',3400] 和 ['air paid',’3400‘] 区别
取出商品价格
['air paid',3400] 在list 中3400类型默认为int,取出商品价格 data[1] 即可,不能用 join
['air paid',’3400‘] 在list中“3400”,为字符串,取出商品价格 price = "".join(data[1])
# join() 方法用于将序列中的元素以指定的字符连接生成一个新的字符串。
# coding=utf-8 goods = [['apple','5000'],['air paid',3400],] print(goods) #[['apple', '5000'], ['air paid', 3400]] print(type(goods)) #<class 'list'> print(goods[1][1]+2) #3402 print(type(goods[1][1])) #<class 'int'> print(goods[1][-1:]) # [3400] print(type(goods[1][-1:])) #<class 'list'> g0 = ''.join(goods[1][-1:]) #TypeError: sequence item 0: expected str instance, int found # print(g0) # print(type(g0)) print(goods[0][1]) #5000 print(type(goods[0][1])) #<class 'str'> g = ''.join(goods[0][1]) #5000 print(g) print(type(g)) #<class 'str'> print(goods[0][-1:]) #['5000'] print(type(goods[0][-1:])) #<class 'list'>
# join() 方法用于将序列中的元素以指定的字符连接生成一个新的字符串。 #字符串 g1 = ''.join(goods[0][-1:]) #5000 print(g1) print(type(g1)) #<class 'str'>
3.4 用户输入 str ---》 int
用户输入为str(python默认为string),转换成int
sala = input("your salary is :").strip() if sala.isdigit(): #是否为数字 salary = int(sala)
4.完整代码
个人修正代码完整版
# coding=utf-8 shopping_cart = [] sala = input("your salary is :").strip() if sala.isdigit(): salary = int(sala) goods = [['apple',5000],['air paid',3400], ['mi',2400],['coffee',35],['cake',12] ] print(len(goods)) while True: for index,items in enumerate(goods): print(index,items) choice1 = input(">>>enter your choice :" ) if choice1.isdigit(): choice = int(choice1) if choice < len(goods) and choice >= 0: print('>>>your choice good is ',goods[choice]) price = goods[choice][1] #print(' it is price is ',price) if price <= salary: salary -= price shopping_cart.append(goods[choice]) else: print(" 33[1m余额不足,your salary is %s 33[0m"%salary) else: print(" 33[1menter error!!! 33[0m") elif choice1 == 'q': break else: print(" 33[1menter error!!! 33[0m") print('-----the shopping_cart ----') for i in shopping_cart: print(i) print('--------------------------- your salary:',salary) else:print(" 33[1menter error!!! 33[0m")
alex答案完整版
# coding=utf-8 product_list = [ ("Iphone",5800), ("Mac pro",1200), ("Bike",100), ("watch",1000), ("Coffee",12), ("Alex Python",120) ] shopping_list = [] salary = input("Input your salary: ") if salary.isdigit(): salary = int(salary) while True: for index,item in enumerate(product_list): #print(product_list.index(item),item) print(index,item) user_choic = input("选择要买的?》》》:") if user_choic.isdigit(): user_choic = int(user_choic) if user_choic < len(product_list) and user_choic >= 0: p_item = product_list[user_choic] if p_item[1] <= salary: #买的起 shopping_list.append(p_item) salary -= p_item[1] print("Added %s into your shopping cart,your current balance is 33[31;1m%s 33[0m" %(p_item,salary) ) else: print(" 33[32;1m你的余额不足,只有[%s] 33[0m"%(salary)) else: print("product code [%s] is not exist",user_choic) elif user_choic == "q": print("--------shopping list-------") for p in shopping_list: print(p) print("----------------------------") print("Your current balance:",salary) exit() else: print("invalid option") else: print("please enter number,try again...")