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()
index.py
1 lanten,17658.58
2 xiaoming,28128.60
3 xiaohong,107492.49
4 zhangsan,89843.08
5 lisi,23289.17
6 huangwu,95389
user_balances.txt
1 lanten,abc12345
2 xiaoming,xm123
3 xiaohong,fei23dew
4 zhangsan,dfix43
5 lisi,qweasd123
6 huangwu,!QAZ2wsx
users.txt
 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
shops.txt

 

代码实现效果:

 

posted @ 2020-07-08 15:42  Zombie☠️  阅读(266)  评论(0)    收藏  举报