发布时间:2018-02-23 15:12:44编辑:admin阅读(4013)
需求:
1.启动程序后,让用户输入工资,然后打印商品列表
2.允许用户根据商品编号购买商品
3.用户选择商品后,检测余额是否够,够就直接扣款,不够就提醒
4.可随时退出,退出时,打印已购买商品和余额
首先分析第1条,输入工资,只需要执行一次即可,所以它是在循环外层的。
另外得判断,输入的是否是数字,需要用到isdigit()方法
salary = input("请输入你的工资:") #isdigit() 判断是否是数字 if salary.isdigit(): #用户输入的转换为数字 salary = int(salary) else: print("输入错误,请输入数字!")
执行程序,当输入的不是数字时,就会有提示
请输入你的工资:wrwr 输入错误,请输入数字!
第2条,需要循环商品的编号、名称、价格
可以用2个列表,来分别存放商品名称和价格
product = ['Iphone','Mac Pro','Bike'] price = [5800,9800,800]
不推荐这么做,如果一旦商品顺序更换了,那么价格就不对了。
可以用列表加元组的方式来完成
product_list = [ ('Iphone',5800), ('Mac Pro',9800), ('Bike',800), ('Watch',10600), ('Coffee',31), ('Python',120), ]
那么问题来了,商品编号,怎么办呢?
列表的元素都是有索引的,用索引来代替商品编号
enumerate()是python的内置函数
enumerate将其组成一个索引序列,利用它可以同时获得索引和值
product_list = [ ('Iphone',5800), ('Mac Pro',9800), ('Bike',800), ('Watch',10600), ('Coffee',31), ('Python',120), ] for index, item in enumerate(product_list): print(index, item)
index和item 分别对应索引和值
执行输出
0 ('Iphone', 5800)
1 ('Mac Pro', 9800)
2 ('Bike', 800)
3 ('Watch', 10600)
4 ('Coffee', 31)
5 ('Python', 120)
购买商品是一个持续过程,可以连续购买,这个时候,需要用到while循环
#商品列表 product_list = [ ('Iphone',5800), ('Mac Pro',9800), ('Bike',800), ('Watch',10600), ('Coffee',31), ('Python',120), ] salary = input("请输入你的工资:") #isdigit() 判断是否是数字 if salary.isdigit(): #用户输入的转换为数字 salary = int(salary) while True: # 打印商品列表 for index, item in enumerate(product_list): print(index, item) break else: print("输入错误,请输入数字!")
执行程序,效果如下:
用户输入完工资之后,需要打印商品列表,输入指定的商品编号
#商品列表 product_list = [ ('Iphone',5800), ('Mac Pro',9800), ('Bike',800), ('Watch',10600), ('Coffee',31), ('Python',120), ] salary = input("请输入你的工资:") #isdigit() 判断是否是数字 if salary.isdigit(): #用户输入的转换为数字 salary = int(salary) while True: # 打印商品列表 for index, item in enumerate(product_list): print(index, item) user_choice = input("请输入购买的商品编号:") # 判断商品编号是否是数字 if user_choice.isdigit(): user_choice = int(user_choice) # 判断编号是否小于商品列表的长度以及大于等于0 if user_choice < len(product_list) and user_choice >= 0: # 用户选择的商品信息 p_item = product_list[user_choice] else: print("商品编号不存在!") else: print("编号错误,请输入数字!") else: print("输入错误,请输入数字!")
执行程序,效果如下:
第3点要求: 用户选择商品后,检测余额是否够,够就直接扣款,不够就提醒
在循环外层,需要加一个购车车列表,存放购买的商品
#购物车列表,默认是空的 shopping_list = []
下面开始扣款
#商品列表 product_list = [ ('Iphone',5800), ('Mac Pro',9800), ('Bike',800), ('Watch',10600), ('Coffee',31), ('Python',120), ] #购物车列表,默认是空的 shopping_list = [] salary = input("请输入你的工资:") #isdigit() 判断是否是数字 if salary.isdigit(): #用户输入的转换为数字 salary = int(salary) while True: # 打印商品列表 for index, item in enumerate(product_list): print(index, item) user_choice = input("请输入购买的商品编号:") # 判断商品编号是否是数字 if user_choice.isdigit(): user_choice = int(user_choice) # 判断编号是否小于商品列表的长度以及大于等于0 if user_choice < len(product_list) and user_choice >= 0: # 用户选择的商品信息 p_item = product_list[user_choice] # p_item[1] 商品价格,判断是否小于等于工资,代表买的起 if p_item[1] <= salary: # 扣钱,等同于salary = salary - p_item[1] salary -= p_item[1] # 将商品信息(元组)写入列表 shopping_list.append(p_item) print("商品%s已加入到购车,您的余额还剩 %s" % (p_item, salary)) else: print("你的余额为 %s ,无法购买此商品!" %(salary)) else: print("商品编号不存在!") else: print("编号错误,请输入数字!") else: print("输入错误,请输入数字!")
执行程序,效果如下:
显示余额的时候,可以显示为红色
把print()里面的%s 替换为下面的代码即可
31表示红色,32表示绿色
41表示红色背景,42表示绿色背景
\033[31;1m%s\033[0m
可以余额不足时,用红色背景文字提示
完整代码如下:
#商品列表 product_list = [ ('Iphone',5800), ('Mac Pro',9800), ('Bike',800), ('Watch',10600), ('Coffee',31), ('Python',120), ] #购物车列表,默认是空的 shopping_list = [] salary = input("请输入你的工资:") #isdigit() 判断是否是数字 if salary.isdigit(): #用户输入的转换为数字 salary = int(salary) while True: # 打印商品列表 for index, item in enumerate(product_list): print(index, item) user_choice = input("请输入购买的商品编号:") # 判断商品编号是否是数字 if user_choice.isdigit(): user_choice = int(user_choice) # 判断编号是否小于商品列表的长度以及大于等于0 if user_choice < len(product_list) and user_choice >= 0: # 用户选择的商品信息 p_item = product_list[user_choice] # p_item[1] 商品价格,判断是否小于等于工资,代表买的起 if p_item[1] <= salary: # 扣钱,等同于salary = salary - p_item[1] salary -= p_item[1] # 将商品信息(元组)写入列表 shopping_list.append(p_item) print("商品%s已加入到购车,您的余额还剩 \033[31;1m%s\033[0m" % (p_item, salary)) else: print("\033[41;1m你的余额为 %s ,无法购买此商品!\033[0m" %(salary)) else: print("商品编号不存在!") else: print("编号错误,请输入数字!") else: print("输入错误,请输入数字!")
执行效果如下:
第4点要求: 可随时退出,退出时,打印已购买商品和余额
退出直接用exit()即可
为了减少图片的长度,我只留了3个商品
完整代码如下:
#!/usr/bin/env python # coding: utf-8 __author__ = 'www.py3study.com' #商品列表 product_list = [ ('Iphone',5800), ('Mac Pro',9800), ('Bike',800), ] #购物车列表,默认是空的 shopping_list = [] salary = input("请输入你的工资:") #isdigit() 判断是否是数字 if salary.isdigit(): #用户输入的转换为数字 salary = int(salary) while True: # 打印商品列表 for index, item in enumerate(product_list): print(index, item) user_choice = input("请输入购买的商品编号:") # 判断商品编号是否是数字 if user_choice.isdigit(): user_choice = int(user_choice) # 判断编号是否小于商品列表的长度以及大于等于0 if user_choice < len(product_list) and user_choice >= 0: # 用户选择的商品信息 p_item = product_list[user_choice] # p_item[1] 商品价格,判断是否小于等于工资,代表买的起 if p_item[1] <= salary: # 扣钱,等同于salary = salary - p_item[1] salary -= p_item[1] # 将商品信息(元组)写入列表 shopping_list.append(p_item) print("商品%s已加入到购车,您的余额还剩 \033[31;1m%s\033[0m" % (p_item, salary)) else: print("\033[41;1m你的余额为 %s ,无法购买此商品!\033[0m" %(salary)) else: print("商品编号不存在!") #当输入q的时候 elif user_choice == 'q': #打印商品列表 print("---已购买的商品列表---") for p in shopping_list: print(p) #打印余额 print("您的余额还剩 \033[31;1m%s\033[0m" % salary) #程序退出 exit() else: print("编号错误,请输入数字!") else: print("输入错误,请输入数字!")
执行效果如下:
上一篇: python 元组
下一篇: python 字符串常用操作
47605
45985
36909
34469
29080
25713
24566
19714
19245
17756
5565°
6155°
5691°
5737°
6705°
5483°
5484°
5988°
5965°
7295°