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

前端之家收集整理的这篇文章主要介绍了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:
    # <a href="https://www.jb51.cc/tag/neirong/" target="_blank" class="keywords">内容</a>盒子
    welcomes = '          尊敬的客户,欢迎您来到仙灵购物'
    screen_width = 80
    text_width = len(welcomes)
    <a href="https://www.jb51.cc/tag/Box/" target="_blank" class="keywords">Box</a>_width = text_width + 6
    left_margin = (screen_width - <a href="https://www.jb51.cc/tag/Box/" target="_blank" class="keywords">Box</a>_width) // 2
    print
    print '' * left_margin + '+' + '_' * (<a href="https://www.jb51.cc/tag/Box/" target="_blank" class="keywords">Box</a>_width - 2) + '+'
    print '' * left_margin + '| ' + ' ' * text_width + '   |'
    print '' * left_margin + '| ' + welcomes + '                  |'
    print '' * left_margin + '| ' + ' ' * text_width + '   |'
    print '' * left_margin + '+' + '_' * (<a href="https://www.jb51.cc/tag/Box/" target="_blank" class="keywords">Box</a>_width - 2) + '+'
    print

    if err_num == 3:
        print '输入账户或密码连续<a href="https://www.jb51.cc/tag/cuowu/" target="_blank" class="keywords">错误</a>三次,请稍后再试'
        break
    user_input = raw_input('请输入<a href="https://www.jb51.cc/tag/yonghuming/" target="_blank" class="keywords">用户名</a>:')
    pass_input = raw_input('请输入密码:')
    login_user = user_input
    if user_input in username and pass_input == password[user_input]:
        print '<a href="https://www.jb51.cc/tag/denglu/" target="_blank" class="keywords">登录</a>成功,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 '<a href="https://www.jb51.cc/tag/yonghuming/" target="_blank" class="keywords">用户名</a>或密码不正确,请重新输入'
        err_num += 1

购物预算

def shop_budget():
global shopping_budget
shopping_budget = int(raw_input('请问您带了多少钱? >'))

把购物预算金额写入pkl文件

pkfile_write = open('data.pkl','wb')  # 以可写方式打开<a href="https://www.jb51.cc/tag/wenjian/" target="_blank" class="keywords">文件</a>
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'])    # <a href="https://www.jb51.cc/tag/denglu/" target="_blank" class="keywords">登录</a>账户, 余额

        choice_input = int(raw_input(prompt))   # <a href="https://www.jb51.cc/tag/yonghu/" target="_blank" class="keywords">用户</a>输入的商品ID
        if choice_input == 9:
            print '已<a href="https://www.jb51.cc/tag/tuichu/" target="_blank" class="keywords">退出</a>商城,欢迎下次光临'
            break
        print '    您选择购买%s' % (choice_list[choice_input][0])    # 购买的商品
        shopping_num = int(raw_input('    请输入购买%s的<a href="https://www.jb51.cc/tag/shuliang/" target="_blank" class="keywords">数量</a>:' % (choice_list[choice_input][0])))   # 商品<a href="https://www.jb51.cc/tag/shuliang/" target="_blank" class="keywords">数量</a>
        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')  # 以可写方式打开<a href="https://www.jb51.cc/tag/wenjian/" target="_blank" class="keywords">文件</a>
                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,ensure_ascii=False)
    except:
        print '\033[1;31;0m输入<a href="https://www.jb51.cc/tag/cuowu/" target="_blank" class="keywords">错误</a>,请重新输入\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
您选择购买未来人类笔记本
请输入购买未来人类笔记本的<a href="https://www.jb51.cc/tag/shuliang/" target="_blank" class="keywords">数量</a>: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
您选择购买女神陪游泳卡片
请输入购买女神陪游泳卡片的<a href="https://www.jb51.cc/tag/shuliang/" target="_blank" class="keywords">数量</a>: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的<a href="https://www.jb51.cc/tag/shuliang/" target="_blank" class="keywords">数量</a>:1
加入购物车成功,总价:8888
你的资金充足,请付款
请输入1付款,0取消 >1
付款成功,商品已购买
当前余额: 6

恭喜您,买了这么多好东西: [["未来人类笔记本",5],["iphone7 plus",1]]
您的余额已不足,请离开,欢迎下次光临。

原文链接:https://www.f2er.com/json/415422.html

猜你在找的Json相关文章