python使用pickle和json模擬一個(gè)購物車

這是本人在學(xué)習(xí)python過程中寫的小程序,記錄下來凡资。

代碼如下:

hon
# _*_ coding:utf-8 _*_
__author__ = 'junxi'

import pickle
import json
import sys



# 初始序列化pkl文件谬运,用來存儲余額和已購商品
money = {
    'money': 0,     # 初始金錢
}
goods = []      # 初始已買物品欄,商品為空梆暖。
pkfile_write = open('data.pkl', 'wb')   # 以寫的方式打開文件
pickle.dump(money, pkfile_write)
pickle.dump(goods, pkfile_write)
pkfile_write.close()    # 關(guān)閉文件
# print '初始化pkl文件成功'


# 反序列化pkl文件伞访,轉(zhuǎn)換為Python的可操作數(shù)據(jù)對象
pkfile_read = open('data.pkl', 'rb')    # 以只讀方式打開文件
money = pickle.load(pkfile_read)
goods = pickle.load(pkfile_read)
pkfile_read.close()         # 關(guān)閉文件
# print '賬戶金額:', money['money']
login_user = ''     # 登錄用戶
shopping_budget = ''    # 購物預(yù)算資金


def login():
    # 登錄驗(yàn)證
    global login_user
    username = ['admin', 'junxi', 'tangyan']        # 賬戶表
    password = {'junxi': 'junxi2017', 'admin': 'admin2017', 'tangyan': 'tangyan2017'}   # 密碼字典
    err_num = 0
    while True:
        # 內(nèi)容盒子
        welcomes = '          尊敬的客戶式廷,歡迎您來到仙靈購物'
        screen_width = 80
        text_width = len(welcomes)
        box_width = text_width + 6
        left_margin = (screen_width - box_width) // 2
        print
        print '' * left_margin + '+' + '_' * (box_width - 2) + '+'
        print '' * left_margin + '| ' + ' ' * text_width + '   |'
        print '' * left_margin + '| ' + welcomes + '                  |'
        print '' * left_margin + '| ' + ' ' * text_width + '   |'
        print '' * left_margin + '+' + '_' * (box_width - 2) + '+'
        print

        if err_num == 3:
            print '輸入賬戶或密碼連續(xù)錯(cuò)誤三次芭挽,請稍后再試'
            break
        user_input = raw_input('請輸入用戶名:')
        pass_input = raw_input('請輸入密碼:')
        login_user = user_input
        if user_input in username and pass_input == password[user_input]:
            print '登錄成功,welcome'
            # break
            shop_budget()   # 進(jìn)入購物預(yù)算判定
        elif user_input not in username:
            print '賬戶不存在蠕趁,請重新輸入'
            err_num += 1
        elif pass_input != password[user_input]:
            print '密碼不正確辛馆,請重新輸入'
            err_num += 1
        else:
            print '用戶名或密碼不正確,請重新輸入'
            err_num += 1


# 購物預(yù)算
def shop_budget():
    global shopping_budget
    shopping_budget = int(raw_input('請問您帶了多少錢腊状? >'))
    # 把購物預(yù)算金額寫入pkl文件
    pkfile_write = open('data.pkl', 'wb')  # 以可寫方式打開文件
    money['money'] = shopping_budget
    pickle.dump(money, pkfile_write)
    print '購物預(yù)算金額:', shopping_budget
    pkfile_write.close()

    if shopping_budget < 10:
        print 'Sorry苔可,您的購物預(yù)算太低,無法在此消費(fèi)映屋,請攜帶充足金錢再來同蜻!'
        sys.exit(0)
    else:
        store_info()    # 資金符合要求,進(jìn)入商品詳情頁


# 商品詳情頁
def store_info():
    while True:
        try:
            if money['money'] < 10:     # 判斷余額
                print '您的余額已不足瘫析,請離開,歡迎下次光臨颁股。'
                break
            elif money['money'] >= 10 and money['money'] < 20:
                print '您的余額已不足20元,您還可以嚼個(gè)口香糖'
            else:
                pass
            choice_list = [('咖啡', 50), ('iphone7 plus', 8888), ('未來人類筆記本', 28888), ('綠箭口香糖', 10), ('大天朝浮夸香煙', 688), ('海南爽口椰子果', 588),
                 ('瘋狂烤翅', 20), ('巨無霸漢堡', 25), ('女神陪游泳卡片', 6666)]
            # print json.dumps(choice_list, encoding='UTF-8', ensure_ascii=False)  # 解決中文亂碼問題
            prompt = '''%s诉儒,您好亏掀,歡迎來到仙靈大商城,您可選擇的商品信息如下,
            (0)咖啡                      50元
            (1)iphone7 plus             8888元
            (2)未來人類筆記本           28888元
            (3)綠箭口香糖               10元
            (4)大天朝浮夸香煙           688元
            (5)海南爽口椰子果           588元
            (6)瘋狂烤翅                 20元
            (7)巨無霸漢堡               25元
            (8)女神陪游泳卡片           6666元
            (9)退出
            請選擇您想要購買的商品(輸入數(shù)字即可)
            ---------------------------------------------

            您的可用余額為:%s元

            ---------------------------------------------
            input>''' % (login_user, money['money'])    # 登錄賬戶温算, 余額

            choice_input = int(raw_input(prompt))   # 用戶輸入的商品ID
            if choice_input == 9:
                print '已退出商城注竿,歡迎下次光臨'
                break
            print '    您選擇購買%s' % (choice_list[choice_input][0])    # 購買的商品
            shopping_num = int(raw_input('    請輸入購買%s的數(shù)量:' % (choice_list[choice_input][0])))   # 商品數(shù)量
            print '    加入購物車成功魂贬,總價(jià):%s' % (choice_list[choice_input][1] * shopping_num)
            if (choice_list[choice_input][1] * shopping_num) <= money['money']:
                print '    你的資金充足,請付款'
                payment = int(raw_input('    請輸入1付款宣谈,0取消 >'))
                if payment == 1:
                    # 付款扣錢
                    pkfile_write = open('data.pkl', 'wb')  # 以可寫方式打開文件
                    buy_goods = (choice_list[choice_input][0], shopping_num)
                    goods.append(buy_goods)
                    cost_money = (choice_list[choice_input][1] * shopping_num)  # 花費(fèi)金額
                    current_money = money['money'] - cost_money  # 賬戶余額 - 花費(fèi)余額 = 當(dāng)前余額
                    money['money'] = current_money
                    pickle.dump(money, pkfile_write)    # 更新金錢余額
                    pickle.dump(goods, pkfile_write)  # 更新已買物品欄
                    pkfile_write.close()
                    print '    付款成功键科,商品已購買'
                    print '    當(dāng)前余額:', current_money
                else:
                    print '    訂單已取消,請重新選擇商品嗦嗡。'
            else:
                print '商品購買失敗饭玲,您的余額不足'

            if len(goods) > 0:
                print '恭喜您,買了這么多好東西:', json.dumps(goods, encoding='UTF-8', ensure_ascii=False)
        except:
            print '\033[1;31;0m輸入錯(cuò)誤咱枉,請重新輸入\033[0m'


def main():
    login()


if __name__ == '__main__':
    main()

運(yùn)行:

+___________________________________________________________+
|                                                           |
|           尊敬的客戶蚕断,歡迎您來到仙靈購物                  |
|                                                           |
+___________________________________________________________+

請輸入用戶名:admin
請輸入密碼:admin2017
登錄成功,welcome
請問您帶了多少錢亿乳? >100000
購物預(yù)算金額: 100000
admin径筏,您好滋恬,歡迎來到仙靈大商城抱究,您可選擇的商品信息如下,
            (0)咖啡                      50元
            (1)iphone7 plus             8888元
            (2)未來人類筆記本           28888元
            (3)綠箭口香糖               10元
            (4)大天朝浮夸香煙           688元
            (5)海南爽口椰子果           588元
            (6)瘋狂烤翅                 20元
            (7)巨無霸漢堡               25元
            (8)女神陪游泳卡片           6666元
            (9)退出
            請選擇您想要購買的商品(輸入數(shù)字即可)
            ---------------------------------------------

            您的可用余額為:100000元

            ---------------------------------------------
            input>2
    您選擇購買未來人類筆記本
    請輸入購買未來人類筆記本的數(shù)量:2
    加入購物車成功,總價(jià):57776
    你的資金充足勋拟,請付款
    請輸入1付款妈候,0取消 >1
    付款成功,商品已購買
    當(dāng)前余額: 42224
恭喜您苦银,買了這么多好東西: [["未來人類筆記本", 2]]
admin幔虏,您好纺念,歡迎來到仙靈大商城所计,您可選擇的商品信息如下,
            (0)咖啡                      50元
            (1)iphone7 plus             8888元
            (2)未來人類筆記本           28888元
            (3)綠箭口香糖               10元
            (4)大天朝浮夸香煙           688元
            (5)海南爽口椰子果           588元
            (6)瘋狂烤翅                 20元
            (7)巨無霸漢堡               25元
            (8)女神陪游泳卡片           6666元
            (9)退出
            請選擇您想要購買的商品(輸入數(shù)字即可)
            ---------------------------------------------

            您的可用余額為:42224元

            ---------------------------------------------
            input>8
    您選擇購買女神陪游泳卡片
    請輸入購買女神陪游泳卡片的數(shù)量:5
    加入購物車成功主胧,總價(jià):33330
    你的資金充足习勤,請付款
    請輸入1付款,0取消 >1
    付款成功夷都,商品已購買
    當(dāng)前余額: 8894
恭喜您予颤,買了這么多好東西: [["未來人類筆記本", 2], ["女神陪游泳卡片", 5]]
admin,您好蛤虐,歡迎來到仙靈大商城,您可選擇的商品信息如下,
            (0)咖啡                      50元
            (1)iphone7 plus             8888元
            (2)未來人類筆記本           28888元
            (3)綠箭口香糖               10元
            (4)大天朝浮夸香煙           688元
            (5)海南爽口椰子果           588元
            (6)瘋狂烤翅                 20元
            (7)巨無霸漢堡               25元
            (8)女神陪游泳卡片           6666元
            (9)退出
            請選擇您想要購買的商品(輸入數(shù)字即可)
            ---------------------------------------------

            您的可用余額為:8894元

            ---------------------------------------------
            input>1
    您選擇購買iphone7 plus
    請輸入購買iphone7 plus的數(shù)量:1
    加入購物車成功刑顺,總價(jià):8888
    你的資金充足,請付款
    請輸入1付款狼讨,0取消 >1
    付款成功柒竞,商品已購買
    當(dāng)前余額: 6
恭喜您,買了這么多好東西: [["未來人類筆記本", 2], ["女神陪游泳卡片", 5], ["iphone7 plus", 1]]
您的余額已不足鲫骗,請離開踩晶,歡迎下次光臨。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末术吝,一起剝皮案震驚了整個(gè)濱河市茸苇,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌学密,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,454評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件彤守,死亡現(xiàn)場離奇詭異哭靖,居然都是意外死亡试幽,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評論 3 385
  • 文/潘曉璐 我一進(jìn)店門起宽,熙熙樓的掌柜王于貴愁眉苦臉地迎上來济榨,“玉大人,你說我怎么就攤上這事腿短』婷危” “怎么了赴魁?”我有些...
    開封第一講書人閱讀 157,921評論 0 348
  • 文/不壞的土叔 我叫張陵颖御,是天一觀的道長。 經(jīng)常有香客問我潘拱,道長,這世上最難降的妖魔是什么瘪弓? 我笑而不...
    開封第一講書人閱讀 56,648評論 1 284
  • 正文 為了忘掉前任禽最,我火速辦了婚禮,結(jié)果婚禮上呛占,老公的妹妹穿的比我還像新娘懦趋。我一直安慰自己,他們只是感情好仅叫,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,770評論 6 386
  • 文/花漫 我一把揭開白布惑芭。 她就那樣靜靜地躺著继找,像睡著了一般。 火紅的嫁衣襯著肌膚如雪婴渡。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,950評論 1 291
  • 那天哄尔,我揣著相機(jī)與錄音柠并,去河邊找鬼富拗。 笑死鸣戴,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的创千。 我是一名探鬼主播入偷,決...
    沈念sama閱讀 39,090評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼疏之,長吁一口氣:“原來是場噩夢啊……” “哼殿雪!你這毒婦竟也來了锋爪?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,817評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎年栓,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體纸兔,經(jīng)...
    沈念sama閱讀 44,275評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡否副,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,592評論 2 327
  • 正文 我和宋清朗相戀三年备禀,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片曲尸。...
    茶點(diǎn)故事閱讀 38,724評論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡另患,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出昆箕,到底是詐尸還是另有隱情租冠,我是刑警寧澤薯嗤,帶...
    沈念sama閱讀 34,409評論 4 333
  • 正文 年R本政府宣布应民,位于F島的核電站话原,受9級特大地震影響诲锹,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜黄虱,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,052評論 3 316
  • 文/蒙蒙 一庸诱、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧朱灿,春花似錦钠四、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至咏雌,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間处嫌,已是汗流浹背斟湃。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評論 1 266
  • 我被黑心中介騙來泰國打工凝赛, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留坛缕,地道東北人捆昏。 一個(gè)月前我還...
    沈念sama閱讀 46,503評論 2 361
  • 正文 我出身青樓,卻偏偏與公主長得像宠页,于是被迫代替她去往敵國和親寇仓。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,627評論 2 350

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,846評論 25 707
  • 延續(xù)昨日觀點(diǎn)俭嘁,主趨勢上黃金相對最近的支撐級別服猪,仍有下行空間。最近支撐點(diǎn)為1238.16近她,下方次級支撐區(qū)間為1223...
    雅典娜_2358閱讀 446評論 0 1
  • 老話說:“人過四十不學(xué)藝”晌端。 我已四十有五,按老話來說咧纠,我是不是該休息一下了泻骤。收收心,養(yǎng)養(yǎng)花狱掂,種種草。但是不行鸟顺,總...
    郭倍貝貝閱讀 1,703評論 0 0
  • Binary Tree Level Order Traversal 今天是一道有關(guān)二叉樹的題目,來自LeetCod...
    ab409閱讀 523評論 0 0