需求:
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("输入错误,请输入数字!")
执行效果如下: