2 -15 购物车程序
1.需求
数据结构:
goods = [
{"name": "电脑", "price": 1999},
{"name": "鼠标", "price": 10},
{"name": "游艇", "price": 20},
{"name": "美女", "price": 998},
......
]
功能要求:
基础要求:
1、启动程序后,输入用户名密码后,让用户输入工资,然后打印商品列表
2、允许用户根据商品编号购买商品
3、用户选择商品后,检测余额是否够,够就直接扣款,不够就提醒
4、可随时退出,退出时,打印已购买商品和余额
5、在用户使用过程中, 关键输出,如余额,商品已加入购物车等消息,需高亮显示
扩展需求:
1、用户下一次登录后,输入用户名密码,直接回到上次的状态,即上次消费的余额什么的还是那些,再次登录可继续购买
2、允许查询之前的消费记录
2.普通流程图
# -*- coding:utf-8 -*-
product = [['Iphone8', 6888], ['MacPro', 14800], ['小米6', 2499], ['Coffee', 31], ['Book', 80], ['Nike Shoes', 799]]
shopping_cart = []
flag = False # 标志位
while not flag:
print("----------商品列表 --------")
for index, item in enumerate(product):
msg = "%s. %s %s" % (index, item[0], item[-1])
print(msg)
choice = input("输入你要买的商品编号|退出q :")
if choice.isdigit():
choice = int(choice)
if choice < len(product):
shopping_cart.append(product[choice])
print('-----你购买了',product[choice])
else:
print('你输入的商品不存在')
elif choice == 'q':
if len(shopping_cart) > 0:
print("------你的购物车---------")
for index, item in enumerate(shopping_cart):
msg = "%s. %s %s" % (index, item[0], item[-1])
print(msg)
flag = True
# break
else:
print('你输入的有误,请重新输入')
3.流程图
4.基本需求版本
#-*- coding:utf-8 -*-
goods = [
{"name": "电脑", "price": 1999},
{"name": "鼠标", "price": 10},
{"name": "游艇", "price": 20},
{"name": "美女", "price": 998}
]
shopping_cart = []
_username = 'alex'
_password = '123'
while True: # 用户名密码循环1
username = input("请您输入用户名:").strip()
password = input("请您输入密码:").strip()
if username == _username and password == _password:
print("\033[1;34m-----登录成功,欢迎%s\033[0m"%username)
while True: # 工资循环2
salary = input("请输入你的工资:").strip()
if not salary:
continue
if salary.isdigit():
salary = int(salary)
while True: # 商品列表循环3
print("----------商品列表 --------")
for index, item in enumerate(goods):
print("%s %s %s" % (index, item['name'], item['price']))
choice = input("输入你要买的商品编号|退出q :").strip()
if not choice:
continue
if choice.isdigit():
choice = int(choice)
if choice < len(goods):
if salary >= goods[choice]['price']:
shopping_cart.append([goods[choice]['name'], goods[choice]['price']]) # 加入商品名,price
print('\033[1;32m>你购买了%s\033[0m'%goods[choice]['name'])
salary -= goods[choice]['price']
print('\033[1;31m>余额剩余%s\033[0m'%salary)
else:
print("\033[1;31m余额不足,请重新选择\033[0m")
else:
print('\033[1;31;47m你输入的商品不存在\033[0m')
elif choice == 'q':
if len(shopping_cart) > 0:
print("\033[1;34m------你的购物车---------")
for index, item in enumerate(shopping_cart):
print(index, item[0], item[-1])
print("------------------------")
print("你的余额:%s\033[0m"%salary)
exit()
else:
print("\033[1;34;47m你的购物车为空,你的余额:%s\033[0m"%salary)
exit()
else:
print('\033[1;31;47m你输入的有误,请重新输入\033[0m')
else:
print('\033[1;31m你输入的有误,请重新输入\033[0m')
else:
print("\033[1;31;47m用户名或密码错误\033[0m")
5.高亮显示
我们可以通过对有用的信息设置不同颜色来达到醒目的效果,因为我平时都是在linux下开发,
而linux终端中的颜色是用转义序列控制的,转义序列是以ESC开头,可以用\033完成相同的工作(ESC的ASCII码用十进制表示就是27,等于用八进制表示的33)。
显示颜色格式:\033[显示方式;字体色;背景色m......[\033[0m
print('This is a \033[1;35m test \033[0m!')
print('This is a \033[1;32;43m test \033[0m!')
print('\033[1;33;44mThis is a test !\033[0m')
-------------------------------
显示方式 | 效果
-------------------------------
0 | 终端默认设置
1 | 高亮显示
4 | 使用下划线
5 | 闪烁
7 | 反白显示
8 | 不可见
-------------------------------
-------------------------------------------
-------------------------------------------
字体色 | 背景色 | 颜色描述
-------------------------------------------
30 | 40 | 黑色
31 | 41 | 红色
32 | 42 | 绿色
33 | 43 | 黃色
34 | 44 | 蓝色
35 | 45 | 紫红色
36 | 46 | 青蓝色
37 | 47 | 白色
-------------------------------------------
6.扩展需求
# -*- coding:utf-8 -*-
import time
goods = [
{"name": "电脑", "price": 1999},
{"name": "鼠标", "price": 10},
{"name": "游艇", "price": 20},
{"name": "美女", "price": 998}
]
shopping_cart = []
_username = 'alex'
_password = '123'
while True: # 用户名密码循环1
username = input("\033[1;32m请您输入用户名:\033[0m").strip()
password = input("\033[1;32m请您输入密码:\033[0m").strip()
if username == _username and password == _password:
print("\033[1;34m-----登录成功,欢迎%s\033[0m"%username)
while True: # 工资循环2
with open('salary', 'r') as f1:
salary = f1.read()
if salary:
print('\033[1;31m你的余额还有:%s\033[0m' % salary)
else:
salary = input("\033[1;32m请输入你的工资:\033[0m").strip()
if not salary:
continue
if salary.isdigit():
salary = int(salary)
with open('salary', 'w') as f2:
f2.write(str(salary))
while True: # 商品列表循环3
print("----------商品列表 --------")
for index, item in enumerate(goods):
print("%s %s %s" % (index, item['name'], item['price']))
choice = input("\033[1;34m输入你要买的商品编号|查看消费记录b|退出q:\033[0m").strip()
if not choice:
continue
if choice.isdigit():
choice = int(choice)
if choice < len(goods):
if salary >= goods[choice]['price']:
shopping_cart.append([goods[choice]['name'], goods[choice]['price']])
# 消费记录加入文件
with open('shopping_records', 'a') as f:
now_time = time.ctime()
goods_choice = [goods[choice]['name'], goods[choice]['price']]
record = str(now_time) + '\t' + str(goods_choice) + '\n'
f.write(record)
print('\033[1;32m>你购买了%s\033[0m'%goods[choice]['name'])
salary -= goods[choice]['price']
print('\033[1;31m>余额剩余%s\033[0m'%salary)
else:
print("\033[1;31m余额不足,请重新选择\033[0m")
else:
print('\033[1;31m你输入的商品不存在\033[0m')
elif choice == 'b':
with open('shopping_records', 'r') as f:
records = f.read()
if len(records):
print('-------消费记录------')
print(records)
else:
print('\033[1;31m>>你还没有买过东西\033[0m')
elif choice == 'q':
if len(shopping_cart) > 0:
print("\033[1;32m------你的购物车---------")
for index, item in enumerate(shopping_cart):
print(index, item[0], item[-1])
print("------------------------")
print("你的余额:%s\033[0m"%salary)
with open('salary', 'w') as f2:
f2.write(str(salary))
exit()
else:
print("\033[1;31m你的购物车为空,你的余额:%s\033[0m"%salary)
exit()
else:
print('\033[1;31;47m你输入的有误,请重新输入\033[0m')
else:
print('\033[1;31m你输入的有误,请重新输入\033[0m')
else:
print("\033[1;31;47m用户名或密码错误\033[0m")
8.修改后
# -*- coding:utf-8 -*-
import time
goods = [
{"name": "电脑", "price": 1999},
{"name": "鼠标", "price": 10},
{"name": "游艇", "price": 20},
{"name": "美女", "price": 998}
]
shopping_cart = []
_username = 'alex'
_password = '123'
count = 0
while count<3 : # 用户名密码循环1
username = input("\033[1;32m请您输入用户名:\033[0m").strip()
password = input("\033[1;32m请您输入密码:\033[0m").strip()
if username == _username and password == _password:
print("\033[1;34m-----登录成功,欢迎%s\033[0m"%username)
# 得到工资
with open('salary', 'r') as f1:
data = f1.read()
if data:
salary = float(data)
print('\033[1;31m你的余额还有:%s\033[0m' % salary)
else:
while True: # 工资循环2
salary = input("\033[1;32m请输入你的工资:\033[0m").strip()
if salary.isdigit(): # 只能够把 3456转换,不能转换 3456.444,
salary = float(salary)
break
else:
print('你输入的有误,请重新输入')
while True: # 商品列表循环3
print("----------商品列表 --------")
for index, item in enumerate(goods):
print("%s %s %s" % (index, item['name'], item['price']))
choice = input("\033[1;34m输入你要买的商品编号|查看消费记录b|退出q:\033[0m").strip()
if choice.isdigit():
choice = int(choice)
if choice < len(goods):
if salary >= float(goods[choice]['price']):
shopping_cart.append([goods[choice]['name'], goods[choice]['price']])
# 消费记录加入文件
with open('shopping_records', 'a') as f:
now_time = time.ctime()
goods_choice = [goods[choice]['name'], goods[choice]['price']]
record = str(now_time) + '\t' + str(goods_choice) + '\n'
f.write(record)
print('\033[1;32m>你购买了%s\033[0m'%goods[choice]['name'])
salary -= float(goods[choice]['price'])
print('\033[1;31m>余额剩余%s\033[0m'%salary)
else:
print("\033[1;31m余额不足,请重新选择\033[0m")
else:
print('\033[1;31m你输入的商品不存在\033[0m')
elif choice == 'b':
with open('shopping_records', 'r') as f:
records = f.read()
if len(records):
print('-------消费记录------')
print(records)
else:
print('\033[1;31m>>你还没有买过东西\033[0m')
elif choice == 'q':
if len(shopping_cart) > 0:
print("\033[1;32m------你的购物车---------")
for index, item in enumerate(shopping_cart):
print(index, item[0], item[-1])
print("------------------------")
print("你的余额:%s\033[0m"%salary)
with open('salary', 'w') as f2:
f2.write(str(salary))
exit()
else:
print("\033[1;31m你的购物车为空,你的余额:%s\033[0m"%salary)
with open('salary', 'w') as f2:
f2.write(str(salary))
exit()
else:
print('\033[1;31;47m你输入的有误,请重新输入\033[0m')
else:
print("\033[1;31;47m用户名或密码错误\033[0m")
count += 1
print("you have try more times")
当你再想我能不能完成的时候,你就已经输了。