首页 > 代码库 > 购物车程序

购物车程序

在做购物程序作业中。用到的重点是字典的运用、还有对文件的读、写、改的操作。

字典是无序的,没有下标。字典是通过key来查找的。

字典是一种Key-value的数据类型,key是键,value是值。

 

eval(a) # 将变量a的字符串转成字典。

 

info ={
    ‘stu001‘:"li lian jie",
    ‘stu002‘:"zen zi dang",
    ‘stu003‘:"chen long",
    }

print(info[‘stu001‘])   # 查询
print(info.get(‘stu006‘)) # 尽量使用这种查询,如果没有不会报错,只是隐式返回none值
info[‘stu004‘]=‘李连杰‘ # 修改,如果字典里没有就会创建。
del info[‘stu002‘] # 删除
info.pop (‘stu002‘) # 删除
info.popitem() # 随机删除
print(‘stu001‘ in info) # 判断字典里是否存在‘stu001‘ 
在python 2.X  info.has_key("001" )  # print(info) 
print(actor.values())   # 打印值,不打印KEY
print(actor.keys()) # 打印KEY

actor={
    ‘韩国‘:{
        ‘安在旭‘:[‘韩国小生‘,‘作品‘]
    },
    ‘美国‘:{
        ‘施瓦辛格‘:[‘美国硬汉第二人‘,‘代表作:‘,‘未来战士‘]
    }
}
print(actor.values()) # 打印值,不打印KEY
print(actor.keys()) # 打印KEY,不打印值
actor.setdefault(‘英国‘,{‘www.google.com‘:[‘a‘,‘b‘,‘c‘]}) # 先查找字典里的key,如果字典里没有则创建,如果有则返回字典里的key
info.update(actor) # 合并字典,有重叠的覆盖,没有的创建
print(info.items()) # 将字典转换为列表
c = dict.fromkeys([1,2,3],‘test‘) # for i in actor: # 循环打印字典
  print (i,actor[i])
for k,v in actor.items(): # 把字典转换成列表
  print(k,v)

集合的操作:

集合的特性,一,去重  关系测试。

分为:子集,交集,并集,对称差集。

技术分享

 

 

文件操作

默认打开的编码是系统默认编码,windows系统默认编码是GBK,所以需要指定用UTF-8编码打开。

f = open(‘yesterday‘,‘r‘,encoding=‘utf-8‘)  # 赋值给变量,指定编码为UTF-8,默认是使用系统编码,windows默认的编码是GBK。
‘r‘ 为读模式; ‘W ‘为写模式,创建覆盖写入;‘a‘ =append 追加,不会覆盖以前的内容,但也不可读;

‘r+‘可读可写模式,读取文件,修改追加; ‘w+‘写读模式,先创建文件,再读取;‘a+‘追加读模式;
‘rb‘以二进制的形式去读文件,网络传输会用到。‘wb‘以二进制编码写入;
-------------------------------------------------------------------------------------------
f = open(‘yesterday‘,‘r‘,encoding=‘utf-8‘)
data = http://www.mamicode.com/f.read() # 读文件
f.write(‘我爱北京天安门,\n‘) # 写入内容
f.readlines() # 转换成一行列表读取
f.readline() # 每次只读取一行
f.read() # 读取整个文件
f.close() # 关闭文件
f.seek() # 查找
f.flush() # 强制刷新
f.tell() # 查找文件句柄位置,按字符个数计数。
f.truncate() #截断,不加参数会清空所有内容。truncate(10)将10个字符后的内容截断。
replace()  # 方法把字符串中的 old(旧字符串)替换成 new(新字符串)
for index,line in enumerate(f.readlines()):  # 将文件转换成列表,全部读到内存,只有小文件才适用,大文件不适合。

f = open(‘yesterday‘,‘r‘,encoding=‘utf-8‘)
  for line in f: # 读一行,删除一行,效率高。不是将文件转换成列表而是变成迭代器,无法获取下标。

使用JSON 全名 JavaScript Object Notation,是一种轻量级的数据交换格式
Encode过程,是把python对象转换成json对象的一个过程,常用的两个函数是dumps和dump函数。
两个函数的唯一区别就是dump把python对象转换成json对象生成一个fp的文件流,而dumps则是生成了一个字符串;

python列表或字典写入json文件

import json

product_list=[
    (‘iphone‘,5800),
    (‘Mac pro‘,9800),
    (‘Wacth‘,10600),
    (‘coffee‘,60),
    (‘alex python‘,120),   ]
f = open(‘cart‘,‘w‘,encoding=‘utf-8‘) f.write(json.dumps(product_list)) f.close()
读取json文件内容转换为python对象
import json
f = open(‘district.json‘,‘r‘,encoding=‘utf-8‘)
data =http://www.mamicode.com/json.loads(f.read())

 

json.dumpjson.dumps很不同,json.dump主要用来json文件读写,和json.load函数配合使用。

json.dump(x,f),x是对象,f是一个文件对象,这个方法可以将json字符串写入到文本文件中。

import  json

data = http://www.mamicode.com/{"a":"aaa","b":"bbb","c":[1,2,3,(4,5,6)]}
data2 = json.dumps(data)
print(data2)
f = open(‘tt.txt‘,‘a‘)
json.dump(data2,f)

这样就生成了一个tt.txt文件,保存了json格式的数据。dumps还提供pritty print,格式化的输出。

json.load加载json格式文件   下面是从txt文件中读取了json数据。

f = open(‘tt.txt‘,‘r‘)
hehe = json.load(f)
print(hehe)

购物车程序代码:

 

# Author:HT
# -*- coding: utf-8 -*-
import json,os
_cart = ‘user_cart‘
_info = ‘user_password‘
_shoppinglist = ‘shoppinglist‘
# 判断文件是否存在,如果存在读取文件里的内容赋值给变量。
if os.path.exists(_cart):
cart_ = open(_cart,‘r‘,encoding = ‘utf-8‘)
cart = json.loads(cart_.read())
else:
print(‘user_cart文件读取失败‘)
cart_.close()
if os.path.exists(_info):
info_ = open(_info,‘r‘,encoding = ‘utf-8‘)
_info = info_.read()
info = (_info.split(‘;‘))
else:
print(‘user_password文件读取失败‘)

info_.close()

if os.path.exists(_shoppinglist):
    list_ = open(_shoppinglist,‘r‘,encoding=‘utf-8‘)
shoppinglist = json.loads(list_.read())
else:
print(‘shoppinglist文件读取失败‘)
list_.close()
user_list = [] # 存放用户选购的商品信息
list2 = {} # 存放用户的历史购物记录
while True:
user = input(‘请输入用户>>>>>>‘).strip()
if user == ‘q‘:
print(‘您己退出‘)
exit()
if user not in info:
print(‘你输入的用户不存在请重新输入或按q退出>>>>>>‘)
if user in info and user not in cart.keys(): # 第一次购买的用户
place_ = info.index(user) # 找用户名的位置
place = place_ + 1 # 找到密码的位置
password = info[place] # 获取到密码
_password = input(‘请输入密码>>>>>>‘)
if _password == password:
print(‘欢迎选购商品‘)
while True:
money = input(‘请输入你的购物预算>>>>>>‘)
if money == ‘q‘:
print(‘你己退出‘)
exit()
if money.isdigit():
money = int(money)
while True:
for index,list in enumerate(shoppinglist): # 打印商品列表
print(index,list)
choice = input(‘请选择你要购买的商品,如需退出请输入q>>>>>>‘)
if choice.isdigit():
choice = int(choice)
if choice < len(shoppinglist) and choice >= 0: # 判断输入的商品是否存在
p_item = shoppinglist[choice]
if p_item[1] < money: # 判断是否买得起
user_list.append(p_item) # 将选购的商品加入购物车
money -= p_item[1] # 扣钱
print(‘你己选购>>> %s 你的余额为>>> \033[31;1m%s\033[0m‘ % (p_item, money))
else:
print(‘\033[41;1m余额不足,你的余额只剩[%s]\033[0m‘ % money) # 余额不足,提示余额。
else:
print(‘你输入的商品不存在‘)

elif choice == ‘q‘:

list2.setdefault(user, {‘money‘: [], ‘list‘: []})
list2[user][‘money‘] = money
list2[user][‘list‘] = user_list
f = open(_cart, ‘w‘, encoding=‘utf-8‘)
f.write(json.dumps(list2))
f.close()
# 存放购物记录
print(‘------------------------你己选购的商品列表------------------------‘)
for p in user_list:
print(p)
print(‘欢迎下次光临!你的余额为>>> \033[31;1m%s\033[0m‘ % (money))
exit()
else:
print(‘你输入的商品不存在‘)
else:
print(‘你输入的不是数字 ,请重新输入,输入q退出>>>>>>‘)
else:
print(‘密码输入错误,请核对后再输入,按Q退出>>>‘)
elif user in info and user in cart.keys(): # 如果之前有购买记录的
print(‘\033[41;1m欢迎再次光临\033[0m‘)
place_ = info.index(user) # 找用户名的位置
place = place_ + 1 # 找到密码的位置
password = info[place] # 获取到密码
money = cart[user][‘money‘]
_password = input(‘请输入密码>>>>>>‘)
if _password == password:
print(‘--------------------登陆成功-----------------\n查询上次购物记录输入---1\n查询余额输入----2\n继续购物输入---3\n退出输入---4‘)
while True:
user_impot = input(‘请选择你要进行的操作>>>‘).strip()
if user_impot.isdigit():
user_impot = int(user_impot)
if user_impot == 1:
print(‘你上次的购物列表 %s‘ % cart[user][‘list‘])
elif user_impot == 2:
print(‘你的余额是>>>>>> \033[31;1m%s\033[0m‘ % money)
elif user_impot == 3:
while True:
for index, list in enumerate(shoppinglist):
print(index, list)
choice = input(‘请选择你要购买的商品,如需退出请输入q>>>>>>‘)
if choice.isdigit():
choice = int(choice)
if choice < len(shoppinglist) and choice >= 0:
p_item = shoppinglist[choice]
if p_item[1] < money:
user_list.append(p_item)
money -= p_item[1]
print(‘你己选购>>> %s 你的余额为>>> \033[31;1m%s\033[0m‘ % (p_item, money))
else:
print(‘\033[41;1m余额不足,你的余额只剩[%s]\033[0m‘ % money) # 余额不足,提余额。
else:
print(‘你输入的商品不存在‘)

elif choice == ‘q‘:
list2.setdefault(user, {‘money‘: [], ‘list‘: []})
list2[user][‘money‘] = money
list2[user][‘list‘] = user_list
list3 = list2
f = open(_cart, ‘a‘, encoding=‘utf-8‘)
f.write(json.dumps(list3))
f.close()
print(‘------------------------你己选购的商品列表------------------------‘)
for p in user_list:
print(p)
print(‘欢迎下次光临!你的余额为>>> \033[31;1m%s\033[0m‘ % (money))
exit()
else:
print(‘你输入的商品不存在‘)
else:
print(‘你己退出‘)
exit()

 

购物车程序