python使用pickle和json模拟一个购物车

这是本人在学习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()    # 关闭文件
# print '初始化pkl文件成功'


# 反序列化pkl文件,转换为Python的可操作数据对象
pkfile_read = open('data.pkl', 'rb')    # 以只读方式打开文件
money = pickle.load(pkfile_read)
goods = pickle.load(pkfile_read)
pkfile_read.close()         # 关闭文件
# print '账户金额:', money['money']
login_user = ''     # 登录用户
shopping_budget = ''    # 购物预算资金


def login():
    # 登录验证
    global login_user
    username = ['admin', 'junxi', 'tangyan']        # 账户表
    password = {'junxi': 'junxi2017', 'admin': 'admin2017', 'tangyan': 'tangyan2017'}   # 密码字典
    err_num = 0
    while True:
        # 内容盒子
        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 '输入账户或密码连续错误三次,请稍后再试'
            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()   # 进入购物预算判定
        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


# 购物预算
def shop_budget():
    global shopping_budget
    shopping_budget = int(raw_input('请问您带了多少钱? >'))
    # 把购物预算金额写入pkl文件
    pkfile_write = open('data.pkl', 'wb')  # 以可写方式打开文件
    money['money'] = shopping_budget
    pickle.dump(money, pkfile_write)
    print '购物预算金额:', shopping_budget
    pkfile_write.close()

    if shopping_budget < 10:
        print 'Sorry,您的购物预算太低,无法在此消费,请携带充足金钱再来!'
        sys.exit(0)
    else:
        store_info()    # 资金符合要求,进入商品详情页


# 商品详情页
def store_info():
    while True:
        try:
            if money['money'] < 10:     # 判断余额
                print '您的余额已不足,请离开,欢迎下次光临。'
                break
            elif money['money'] >= 10 and money['money'] < 20:
                print '您的余额已不足20元,您还可以嚼个口香糖'
            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)退出
            请选择您想要购买的商品(输入数字即可)
            ---------------------------------------------

            您的可用余额为:%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的数量:' % (choice_list[choice_input][0])))   # 商品数量
            print '    加入购物车成功,总价:%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)  # 花费金额
                    current_money = money['money'] - cost_money  # 账户余额 - 花费余额 = 当前余额
                    money['money'] = current_money
                    pickle.dump(money, pkfile_write)    # 更新金钱余额
                    pickle.dump(goods, pkfile_write)  # 更新已买物品栏
                    pkfile_write.close()
                    print '    付款成功,商品已购买'
                    print '    当前余额:', 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输入错误,请重新输入\033[0m'


def main():
    login()


if __name__ == '__main__':
    main()

运行:

+___________________________________________________________+
|                                                           |
|           尊敬的客户,欢迎您来到仙灵购物                  |
|                                                           |
+___________________________________________________________+

请输入用户名:admin
请输入密码:admin2017
登录成功,welcome
请问您带了多少钱? >100000
购物预算金额: 100000
admin,您好,欢迎来到仙灵大商城,您可选择的商品信息如下,
            (0)咖啡                      50元
            (1)iphone7 plus             8888元
            (2)未来人类笔记本           28888元
            (3)绿箭口香糖               10元
            (4)大天朝浮夸香烟           688元
            (5)海南爽口椰子果           588元
            (6)疯狂烤翅                 20元
            (7)巨无霸汉堡               25元
            (8)女神陪游泳卡片           6666元
            (9)退出
            请选择您想要购买的商品(输入数字即可)
            ---------------------------------------------

            您的可用余额为:100000元

            ---------------------------------------------
            input>2
    您选择购买未来人类笔记本
    请输入购买未来人类笔记本的数量:2
    加入购物车成功,总价:57776
    你的资金充足,请付款
    请输入1付款,0取消 >1
    付款成功,商品已购买
    当前余额: 42224
恭喜您,买了这么多好东西: [["未来人类笔记本", 2]]
admin,您好,欢迎来到仙灵大商城,您可选择的商品信息如下,
            (0)咖啡                      50元
            (1)iphone7 plus             8888元
            (2)未来人类笔记本           28888元
            (3)绿箭口香糖               10元
            (4)大天朝浮夸香烟           688元
            (5)海南爽口椰子果           588元
            (6)疯狂烤翅                 20元
            (7)巨无霸汉堡               25元
            (8)女神陪游泳卡片           6666元
            (9)退出
            请选择您想要购买的商品(输入数字即可)
            ---------------------------------------------

            您的可用余额为:42224元

            ---------------------------------------------
            input>8
    您选择购买女神陪游泳卡片
    请输入购买女神陪游泳卡片的数量:5
    加入购物车成功,总价:33330
    你的资金充足,请付款
    请输入1付款,0取消 >1
    付款成功,商品已购买
    当前余额: 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)退出
            请选择您想要购买的商品(输入数字即可)
            ---------------------------------------------

            您的可用余额为:8894元

            ---------------------------------------------
            input>1
    您选择购买iphone7 plus
    请输入购买iphone7 plus的数量:1
    加入购物车成功,总价:8888
    你的资金充足,请付款
    请输入1付款,0取消 >1
    付款成功,商品已购买
    当前余额: 6
恭喜您,买了这么多好东西: [["未来人类笔记本", 2], ["女神陪游泳卡片", 5], ["iphone7 plus", 1]]
您的余额已不足,请离开,欢迎下次光临。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,012评论 4 359
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,589评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 106,819评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,652评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 51,954评论 3 285
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,381评论 1 210
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,687评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,404评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,082评论 1 238
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,355评论 2 241
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,880评论 1 255
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,249评论 2 250
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,864评论 3 232
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,007评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,760评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,394评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,281评论 2 259

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 170,544评论 25 707
  • 延续昨日观点,主趋势上黄金相对最近的支撑级别,仍有下行空间。最近支撑点为1238.16,下方次级支撑区间为1223...
    雅典娜_2358阅读 430评论 0 1
  • 老话说:“人过四十不学艺”。 我已四十有五,按老话来说,我是不是该休息一下了。收收心,养养花,种种草。但是不行,总...
    郭倍贝贝阅读 1,639评论 0 0
  • Binary Tree Level Order Traversal 今天是一道有关二叉树的题目,来自LeetCod...
    ab409阅读 510评论 0 0