Python 基础 - Day 2 Assignment - ShoppingCart 购物车程序
生活随笔
收集整理的這篇文章主要介紹了
Python 基础 - Day 2 Assignment - ShoppingCart 购物车程序
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
作業(yè)要求
1、啟動程序后,輸入用戶名密碼后,如果是第一次登錄,讓用戶輸入工資,然后打印商品列表
2、允許用戶根據(jù)商品編號購買商品
3、用戶選擇商品后,檢測余額是否夠,夠就直接扣款,不夠就提醒
4、可隨時退出,退出時,打印已購買商品和余額
5、在用戶使用過程中, 關(guān)鍵輸出,如余額,商品已加入購物車等消息,需高亮顯示
6、用戶下一次登錄后,輸入用戶名密碼,直接回到上次的狀態(tài),即上次消費的余額什么的還是那些,再次登錄可繼續(xù)購買
7、允許查詢之前的消費記錄
?
知識點解析
- 函數(shù)式編程的邏輯和過程: 將項目的要求步驟化,并賦予不同的函數(shù)名。主程序調(diào)用這些函數(shù)。
def init(): # 系統(tǒng)初始化(讀取所有商品并保存為全局變量)return Truedef login(): # 登錄認(rèn)證passdef register(): # 新用戶注冊,第一次登錄,輸入salarypassdef show_products(): # 展示所有商品的序號/名稱/單價passdef user_choice(): # 讓用戶輸入選擇的商品序號或者'q', 'q'返回就調(diào)用shwo_current_shopping_logpassdef show_current_shopping_log(): # 顯示本次購物日志passdef balance_enough(): # 檢驗余額是否足夠passdef add_cart(): # 放入購物車,高亮顯示,扣費。并調(diào)用日志信息shopping_log()和 show_user_balance()passdef shopping_log(): # 添加到本次消費日志和用戶信息的日志中passdef save_user(): # 將用戶信息存入文件中去passdef show_user_balance(): # 顯示當(dāng)前用戶的歷史購物日志passdef show_shopping_log(): # 顯示用戶所有歷史的消費記錄passView Code
- 函數(shù)的返回值 return True: 用來檢驗函數(shù)執(zhí)行是否成功
- 函數(shù)嵌套函數(shù):常用于裝飾器。我們知道,函數(shù)內(nèi)定義的變量是局部變量。但是,如果函數(shù)內(nèi)有函數(shù),函數(shù)參數(shù)值在函數(shù)內(nèi)的有效的。
- 盡量詳細(xì)的拆分
- 調(diào)用文件全路徑的方法: - OS 模塊見筆記:?http://www.cnblogs.com/lg100lg100/p/7158222.html?
import osBASE_DIR = os.path.dirname(__file__) DB_DIR = os.path.join(BASE_DIR,'db') # print(BASE_DIR) # print(DB_DIR) os.path.exist()
- JSON 模塊見筆記: http://www.cnblogs.com/lg100lg100/p/7160951.html?
- 作業(yè)中出現(xiàn)的錯誤:字段名的命名還是用英語比較好,中文出現(xiàn)錯別字,就無法執(zhí)行程序。
作業(yè)代碼:
#!usr/bin/env python # -*- coding:utf-8 -*- # Author: Jane Yueimport sys import jsonopen_line = '''有機生鮮 多*快*好*省 ---------------------------------- a鍵: 新用戶注冊 b鍵:登陸賬戶 q鍵:退出 ---------------------------------- '''user_menu = ['退出', '購物', '充值', '查詢']def save_into_file(db_dict, filename='user_data.json'):# 輔助函數(shù):將信息存入文件,默認(rèn)文件為 user_status.jsonwith open(filename, "w", encoding="utf-8") as f:json.dump(db_dict, f)def load_from_file(filename='user_data.json'):# 輔助函數(shù):讀取文件信息,默認(rèn)文件為 user_status.jsonwith open(filename, 'r', encoding="utf-8") as f:db_dict = json.load(f)return db_dictdef openline():# 程序開始while True:print(open_line)open_choice = input('請根據(jù)菜單選擇:').strip()if open_choice == "a":username = input("用戶名:")register(username)elif open_choice == "b":login()elif open_choice == "q":sys.exit()else:print("錯誤信息,重新輸入")continuedef login():# 登錄認(rèn)證db_dict = load_from_file() # python字典格式:{"username":{"密碼": "password","歷史記錄":["商品"], "余額": 000}}count = 0while count < 3:username = input('用戶名: ')if username in db_dict:password = input('密碼: ')if password == db_dict[username]["密碼"]:print("小主,歡迎回來買買買!")core_menu(username)else:count += 1print("密碼錯誤,您還有%d機會。" % (3 - count))continueelse:print("用戶名不存在,請注冊新賬戶")register(username)return Truedef register(username):# 注冊新賬戶并存入文件db_dict = load_from_file()while True:print("用戶名:%s" % username)password = input("密碼:")if len(password.strip()) > 0:db_dict[username] = {"密碼": "password","歷史紀(jì)錄": ["商品"],"余額": 000}ini_balance = int(input("首次充值額:"))db_dict[username]["余額"] = ini_balancesave_into_file(db_dict)print("歡迎第一次登陸,%s" % username)core_menu(username)else:print("請輸入密碼")continuedef core_menu(username):# 用戶登陸后,顯示選項及菜單print('用戶菜單'.center(25, "="))for i in user_menu:print(user_menu.index(i), i)while True:choice = input('親,請選擇 >>> ')if choice == "1":shopping(username)elif choice == "2":topup(username)elif choice == "3":show_user_balance(username)elif choice == "q":print('88,親')sys.exit()else:print('錯誤信息,請重新選擇')continuedef shopping(username):# 購物menu_dict = load_from_file("menu.json")db_dict = load_from_file()while True:for i in sorted(menu_dict):print(i)option1 = input('請選擇\033[001m產(chǎn)品分類\033[0m 【b】返回 【任意鍵】退出').strip() # 001加粗if option1 in menu_dict:print('{}清單如下:'.format(option1).rjust(25, '-'))for k in menu_dict[option1]:print(k, menu_dict[option1][k])while True:option2 = input('請選擇 \033[001m商品\033[0m 加入購物車【b】返回 【q鍵】退出 ').strip()if option2 in menu_dict[option1]:option3_num = input('請輸入購買數(shù)量').strip()if option3_num.isdigit() and int(option3_num) <= menu_dict[option1][option2]['數(shù)量']:num = int(option3_num)price = menu_dict[option1][option2]['單價']cost = num*pricebalance = db_dict[username]['余額']if cost<=balance:db_dict[username]['余額'] -= costdb_dict[username]['歷史記錄'].append(option2) # 添加字典value值數(shù)據(jù)??? save_into_file(db_dict)menu_dict[option1][option2]['數(shù)量'] -= numsave_into_file(menu_dict, "menu.json")print("商品已購,您的最新余額為\033[34m%d\033[0m" % (db_dict[username]['余額']))breakelse:print('賬戶余額不足,請充值')core_menu(username)else:print("抱歉,商品數(shù)目不足")continueelif option2 == 'b':breakelif option2 == 'q':sys.exit()else:print('錯誤信息,請重新選擇')continueelif option1 == 'b':core_menu(username)else:sys.exit()def topup(username):# 充值db_dict = load_from_file()top_up = input('請?zhí)顚懗渲到痤~')if top_up.isdigit():db_dict[username]["余額"] += int(top_up)save_into_file(db_dict)show_user_balance(username)else:print('錯誤信息,請重新選擇')core_menu(username)def show_user_balance(username):# 顯示用戶余額db_dict = load_from_file()print('{},您的當(dāng)前余額為\033[34m{}\033[0m'.format(username,db_dict[username]['余額']))show_shopping_log(username)def show_shopping_log(username):# 顯示用戶所有歷史的消費記錄db_dict = load_from_file()shopping_log = db_dict[username]['歷史記錄']if shopping_log == '':print("您在本小店沒有消費記錄")core_menu(username)else:print('歷史消費如下:',shopping_log)choice = input('【b鍵】返回主菜單 【q鍵】退出')if choice == 'q':sys.exit()else:core_menu(username)if __name__ == '__main__':openline()View Code
?
轉(zhuǎn)載于:https://www.cnblogs.com/lg100lg100/p/7123722.html
總結(jié)
以上是生活随笔為你收集整理的Python 基础 - Day 2 Assignment - ShoppingCart 购物车程序的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 有在上海为学区房或者孩子就学问题发愁的妈
- 下一篇: 速度与激情特别行动里的出现是兰博基尼啥