python初级之路-购物商城
前言:
1、判断用户登陆。
2、用户登陆成功后,显示商品名称及商品价格。
3、让用户选择需要购买的商品。
4、用户选择完商品进行付款,如果用户账户的余额不足,则提示用户余额不足。
思路:
1、首先将定义三个文件:shops.txt(存储商品信息文件),user_balances.txt(存储账户余额文件),users.txt(存储用户信息文件)。
2、定义一个主函数main(),用于获取用户信息,并将用户信息作为user_login()函数的参数,再调用user_login()函数。
3、验证用户登陆成功后调用shopping()函数,shopping()函数首先会去调用query_balance()函数,获取用户账户下的余额,然后获取shops.txt文件中所有商品的信息,并将商品信息输出到屏幕供用户进行选择,用户可以根据输入商品的ID将选择需要购买的商品添加至购物车中。
4、当用户输入'd'或者'D'时,则让用户输入一个已选商品的ID,然后将其从购物车中移除;当用户输入'y'或者'Y'时,则对用户已选的商品进行购买,并调用支付函数pay();当用户输入'q'或者'Q'时,则直接退出整个购物程序。
5、函数pay()用于商品支付,如果用户账户余额不足提示用户,否则进行商品购买,将用户剩余余额打印出来。
实现代码:

1 #!/usr/bin/env python3 2 # -*- coding: utf-8 -*- 3 4 # 用户登陆 5 def user_login(user_dict): 6 user_list = user_dict.keys() 7 print(list(user_list)) 8 flag = True 9 while flag: 10 print() 11 user_name = input("请输入您的用户名: ").strip() 12 for user in user_list: 13 if user_name == user: 14 while flag: 15 print() 16 user_passwd = input("请输入用户名密码: ").strip() 17 if user_passwd == user_dict[user_name]: # 判断用户输入的密码是否与保存的相等 18 print("登陆成功。\n") 19 shopping(user_name) # 调用shopping()函数 20 flag = False # 将flag标签赋值False,用于退出while循环 21 break 22 else: 23 print("您输入的用户名密码错误,请重新输入。") 24 break 25 else: 26 print("您输入的用户名不存在,请重新输入。") 27 28 # 查询账户余额 29 def query_balance(user_name): 30 balance_dict = {} 31 with open("user_balances.txt", 'r', encoding='utf-8') as f: # 获取用户账户余额 32 for line in f.readlines(): 33 line = line.strip('\n').split(',') 34 balance_dict[line[0]] = line[1] 35 return balance_dict[user_name] # 返回账户余额 36 37 # 购物环节 38 def shopping(user_name): 39 balance = query_balance(user_name) 40 print("您账户的余额为: ¥%s\n" % balance) 41 # 将商品列表打印出来供用户选择 42 shops_dict = {} # 定义一个用于存储shops.txt文件中所有商品的字典变量 43 print("商品列表: ") 44 with open('shops.txt', 'r', encoding='utf-8') as f: # 获取商品列表信息 45 shops_count = 1 # 统计商品数量 46 for line in f.readlines(): 47 line = line.strip('\n').split(',') 48 shops_dict[str(shops_count)] = line 49 print("ID: %d SHOP: %s" % (shops_count, line)) 50 shops_count += 1 51 shop_car = [] # 用于保存用户选择的商品 52 while True: 53 print() 54 shop_id = input('请输入商品ID, ("q&Q": 退出, "y&Y": 提交, "d&D": 移除): ').strip() # 让用户输入商品ID 55 if shop_id in shops_dict.keys(): # 如果用户输入的ID存在商品列表中时, 则将商品保存到购物车变量shop_car中 56 print("您选择了商品: %s" % shops_dict[shop_id]) 57 shop_car.append(shops_dict[shop_id]) 58 elif shop_id == 'q' or shop_id == 'Q': # 当用户输入'q'或者'Q'时, 退出购物程序。 59 print("欢迎下次光临。") 60 quit() 61 elif shop_id == 'y' or shop_id == 'Y': # 当用户输入'y'或者'Y'时, 进行商品购买。 62 print() 63 print("您想购买的商品: %s" % shop_car) 64 pay(float(balance), shop_car) # 调用pay()支付函数。 65 break 66 elif shop_id == 'd' or shop_id == 'D': # 当用户输入'd'或者'D'时, 对用户已选的商品进行移除。 67 if len(shop_car) == 0: # 如果购物车为空,则退出此次循环,继续让用户选择商品 68 print("您还未选择商品。") 69 continue 70 else: 71 print("您已经选择的商品有: %s" % shop_car) 72 del_shop = input("请输入您需要移除已选商品的ID: ") # 让用户输入已选商品的ID 73 print("已为你移除商品: %s" % shops_dict[del_shop]) 74 shop_car.remove(shops_dict[del_shop]) # 移除不需要的商品 75 continue 76 else: 77 print("您输入的商品ID不存在,请重新输入。") 78 # print("您想购买的商品: %s" % shops_dict[shop_id]) 79 80 # 支付函数 81 def pay(balance, shop_car): 82 shop_money = 0 83 for i in shop_car: 84 num = float(i[1].strip('¥')) # 对商品价格转换成浮点类型 85 shop_money += num # 累加所选商品的价格 86 print("您所选商品的总价格为: %s" % shop_money) 87 if balance < shop_money: # 判断用户账户余额是否不足 88 print("非常抱歉,您账户的余额不足,请进行充值。") # 此次可以进行扩展让用户进行充值操作。 89 else: 90 print() 91 surplus = float("%.2f" % (balance - shop_money)) # 计算用户购买商品之后账户中所剩余额,此处可以再进行扩展将余额更新到user_balances.txt文件中。 92 print("支付成功, 您账户所剩余额为: %s, 欢迎下次使用。" % surplus) 93 94 # 主函数 95 def main(): 96 user_dict = {} # 定义一个user_dict字典变量, 用来保存用户信息 97 with open("users.txt", "r", encoding='utf-8') as f: # 获取用户信息 98 for line in f.readlines(): 99 line = line.strip('\n').split(',') 100 user_dict[line[0]] = line[1] 101 # print(user_dict) 102 user_login(user_dict) # 调用用户登陆函数 103 104 if __name__ == "__main__": 105 main()

1 lanten,17658.58 2 xiaoming,28128.60 3 xiaohong,107492.49 4 zhangsan,89843.08 5 lisi,23289.17 6 huangwu,95389

1 lanten,abc12345 2 xiaoming,xm123 3 xiaohong,fei23dew 4 zhangsan,dfix43 5 lisi,qweasd123 6 huangwu,!QAZ2wsx

1 HUAWEI P40 Pro,¥5988.00 2 HUAWEI P40,¥4489.00 3 HUAWEI P30 Pro,¥3988.00 4 HUAWEI Mate 30,¥3599 5 iPhone 11,¥5589.00 6 iPhone XR,¥4899.00 7 iPhone XS,¥5499.00 8 iPhone 8 Plus,¥3599.00 9 OPPO Ace2,¥3499.00 10 OPPO Find X2,¥4999.00 11 OPPO Find X2 Pro,¥6999.00 12 OPPO Reno4 Pro,¥4299.00 13 小米 10 Pro,¥4928.00 14 小米 10,¥3999.00 15 小米 红米K20 Pro,¥3058.00 16 Redmi K30 Pro,¥3399.00
代码实现效果: