from datetime import datetime
# 对文字进行变色显示
def color(string, c='red'):
"""
:param string: 需要添加颜色的字符串
:param c: 颜色取值范围 'black','red','green','yellow','blue','purple','blueness','white'
:return:' 33[{color_num[c]}m + string + ' 33[0m'
"""
color_num = {'black': 30,
'red': 31,
'green': 32,
'yellow': 33,
'blue': 34,
'purple': 35,
'blueness': 36,
'white': 37}
if c in color_num:
start = f' 33[{color_num[c]}m'
else:
start = ' 33[31m'
end = ' 33[0m'
return start + string + end
def get_menu():
"""
读取menu.txt
:return: menu_list (菜单列表)
"""
f = open("menu.txt", encoding="utf-8")
data = f.readlines()
f.close()
menu_list = []
for row in data:
# append 将元素添加列表的末尾
menu_list.append(row.split())
return menu_list
def menu():
"""
显示菜单
:return: None
"""
menu_list = get_menu()
print(color("#", 'yellow') * 30)
print("XXX超市为您服务",datetime.now())
print(" 编号 商品名 单价 ")
for m in menu_list[1:]:
print(f" {m[0]:^4}{m[1]:^10}{m[2]:^8}")
print(color("#", 'yellow') * 30)
def shopping_cart():
carts = {}
while True:
no = input("请输入要买的商品编号,按M显示菜单 ,按q退出:")
if no == 'q':
break
elif no == 'M':
menu()
continue
elif not no.isdigit():
print("输入有误")
continue
no = int(no)
menu_list = get_menu()
if 0 < no < len(menu_list):
count = input("要买的数量:")
if count.isdigit():
count = int(count)
else:
print("输入有误")
continue
goods_name = menu_list[no][1]
goods_price = float(menu_list[no][2])
print(f"您选购了{color(goods_name)},单价{color(str(goods_price), 'green')}元,数量{count},共{goods_price * count}元")
if no in carts:
carts[no][2] += count
else:
carts[no] = [goods_name, goods_price, count]
else:
print(color("没有此商品! "))
return carts
def check(carts):
goods_sum = 0
print("编号 商品名 单价 数量")
for k in carts:
goods = carts[k]
goods_sum += goods[1] * goods[2]
print('-' * 25)
print(f"{k} {goods[0]} {goods[1]} {goods[2]}")
print(f"账单:{color(str(goods_sum), 'yellow')}元")
return goods_sum
def pay(price):
while True:
money = input(f"请支付{price}元,Q退出: ")
if money == 'Q':
return False
try:
money = float(money)
except Exception as e:
print(e, "请输入一个数字")
else:
break
if money >= price:
print(f"支付成功,找零{money - price}元")
return True
else:
return pay(price - money)
def main():
while True:
id = input("请输入账号:")
password = input("请输入密码:")
if id == 'admin' and password == '12315':
menu()
if pay(check(shopping_cart())):
print(color("购物成功,欢迎下次光临!", 'blue'))
else:
print(color("取消成功!"))
else:
print("账号或密码不对,请重新输入:")
# 只有运行当前py文件才会执行
if __name__ == '__main__':
main()