python作業:購物車(第二周)


一.作業需求:

1、啟動程序后,輸入用戶名密碼后,如果是第一次登錄,讓用戶輸入工資,然后打印商品列表

2、允許用戶根據商品編號購買商品

3、用戶選擇商品后,檢測余額是否夠,夠就直接扣款,不夠就提醒

4、可隨時退出,退出時,打印已購買商品和余額

5、在用戶使用過程中, 關鍵輸出,如余額,商品已加入購物車等消息,需高亮顯示

6、用戶下一次登錄后,輸入用戶名密碼,直接回到上次的狀態,即上次消費的余額什么的還是那些,再次登錄可繼續購買

7、允許查詢之前的消費記錄

 

二.購物車用戶信息:

{'name': {'password': '10000'}, 'cx': {'123': '725.0'}, 'even': {'qw': '1560'}, 'cv1': {'1': 100.5}}
以字典形式存儲用戶名,密碼,余額

三.歷史購物信息:

{'name': [['iphone', 5800], ['bike', 800]], 'cx': [['iphone', 5800], ['apple', 5],  ['apple', 5], ['book', 75]]}
以字典形式,對應用戶名和歷史購物記錄

四.流程圖:

 

五.代碼:(python3.6,mac環境):

 1 #!/usr/bin/env python
 2 # -*- coding:utf-8 -*-
 3 # Author: Even
 4 
 5 set = False    # 設置set 當輸入為q就可以退出
 6 file = open('購物車用戶信息存檔','r+',encoding='utf-8')    # 讀取購物車用戶信息文件
 7 f = str(file.read())    # 將文件內容轉化成字符串
 8 for line in f:    # 逐行讀取
 9     file_str = str(f)
10 data= eval(file_str)    # 將字符串轉換為字典data
11 name = input("請輸入姓名:")    # 提示輸入用戶名
12 password = input("請輸入密碼:")    # 提示輸入密碼
13 while True:
14     if name in data:    # 用戶名在字典data
15         if password in data[name]:    # 密碼如果能對應用戶名,就歡迎登錄
16             salay = float(data[name][password])
17             print('''\033[32;1m歡迎登錄,當前余額為%s\033[0m'''%salay)
18             break
19         else:    # 否則密碼輸入錯誤,提示重新輸入
20             password = input("密碼輸入錯誤,請重新輸入:")
21             continue
22     else:    # 否則判斷為首次登錄,將用戶名,密碼,工資存到用戶信息文件中
23         password_salay = {}
24         salay_str = input("歡迎首次登錄,請輸入你的工資:")    # 輸入工資數
25         salay = float(salay_str)    # 將輸入的字符串轉換為數字
26         password_salay[password] = salay    # 將工資對應到密碼
27         data[name] = password_salay    # 將密碼-工資對對應到用戶名
28         file.seek(0)    # 文件的讀取移到開頭
29         file.write(str(data))    # 寫入新的字典信息
30         file.tell()    # 返回當前位置
31         break
32 
33 
34 list = [    # 購物清單
35     ["iphone",5800],
36     ["bike",800],
37     ["macbook",17500],
38     ["book",75],
39     ["apple",5]
40 ]
41 
42 file_list_r = open('歷史購買記錄','r+',encoding='utf-8')    # 讀取歷史購買記錄文件
43 f_list_r = str(file_list_r.read())
44 shoppinglist_dict = eval(f_list_r)    # 將歷史記錄信息轉換為字典
45 if name not in shoppinglist_dict:    # 如果首次登錄,會沒有歷史記錄
46     shoppinglist_dict[name] = []    # 首次登錄歷史記錄留空
47 shoppinglist = shoppinglist_dict[name]    # 不是首次登錄,將之前歷史記錄賦值到變量
48 shoppinglist_now = []    # 本次購物記錄留空
49 choose = input("\n是否需要查詢歷史購物記錄(y/n):")    # 詢問是否需要查詢歷史記錄
50 if choose == 'y':    # 選y,輸出歷史購物記錄
51     print("\n\n-----------歷史購物記錄------------")
52     print(shoppinglist)
53     print("--------------結束---------------\n\n")
54 
55 while not set:    # 購物車開始
56     print('-----------商品清單------------')    # 輸出商品清單
57     for index,item in enumerate(list,1):
58         print(index,item)
59     print("-------------結束--------------")
60     number = input("請輸入想購買的商品編號:")    # 輸入商品編號
61     if number == "q":    # 當輸入為q,退出,打印本次購物清單
62         set = True
63         data[name][password] = str(salay)    # 將字符串的工資給到對應用戶名下的密碼-工資對中
64         file.seek(0)
65         file.write(str(data))    # 將用戶信息寫入購物車用戶信息存檔中
66         file.tell()
67         print("------------購物清單------------")    # 打印購物清單,提示余額
68         print(shoppinglist_now)
69         print("您的余額為:",salay)
70         print("-------------結束--------------")
71         shoppinglist.extend(shoppinglist_now)    # 將本次購物記錄追加到購物記錄列表中
72         shoppinglist_dict[name] = shoppinglist    # 購物列表與用戶名做對應
73         file_list_r.seek(0)
74         file_list_r.write(str(shoppinglist_dict))    # 寫入字符串的購物歷史記錄
75         file_list_r.tell()
76     elif number.isdigit() == False:    # 校驗輸入是否為整數
77         print("\033[31;1m輸入不是編號內容,請重新輸入\033[0m")
78     elif int(number)>int(len(list)) or int(number)<= 0:    # 如果輸入值不在清單中,提示報錯
79         print("\033[31;1m您所購買的商品不在清單中\033[0m")
80     else:
81         number_buy = int(number)-1
82         if list[number_buy][1]<(salay):    # 如果余額夠,提示成功購買,顯示余額
83             salay = salay - int(list[number_buy][1])
84             msg = '''
85                             \033[32;1m您已將%s加入購物車中
86                             余額為%d\033[0m
87                             ''' % (list[number_buy][0],salay)
88             print(msg)
89             shoppinglist_now.append(list[number_buy])    # 本次購物信息加到本次購買記錄中
90         else:
91             print("\033[31;1m您已沒有余額可以購買\033[0m")    # 否則提示余額不足
View Code

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM