用python写了一个购物车程序,主要是练习,代码如下

主入口文件:main.py

 #!/usr/bin/env python
# -*- coding:utf-8 -*- #先调用用户登录函数,在进行逻辑模块的循环
#入口程序 import enter,operate
if __name__ == '__main__':
print("\033[35m----------------------------请输入用户名密码----------------------------\033[0m")
enter.user()
while True:
operate.welcome()

入口

逻辑处理文件operate.py

#!/usr/bin/env python
# -*- coding:utf-8 -*- #逻辑结构
#主要判断用户的输入,根据输入的关键字,来调用不同功能的函数 #初始化商品
huowu = {
"iphone6splus" : 6000,
"huaweimate8" :3700,
"asus" :4299,
"alienware" :21999,
"strix-gtx970" :3649,
}
#初始化个空的购物车
huo = {
}
#初始化话空的列表,保存当前登录用户
name = []
#功能判断函数
def welcome():
import enter,os,lists
s_1 = raw_input("请输入操作:")#捕获用户操作
if s_1 == 'car':
enter.catg()
elif s_1 == 'help':
print('''\033[31m
car___________________商品
help__________________帮助
buy___________________添加至购物车
shop__________________购物车结算
und___________________购物车移除商品
top___________________充值
bal___________________余额
enr___________________注册用户
exit__________________返回
\033[0m''')
elif s_1 == 'buy':
enter.mone()
elif s_1 == 'shop':
print ("\033[35m-------------------------------已进入购物车-------------------------------\033[0m")
enter.shopp()
elif s_1 == 'und':
enter.dele()
elif s_1 == 'top':
enter.topup()
elif s_1 == 'bal':
b_1 = "\033[36m---------------------当前用户:{b_2},余额为:{b_3}----------------------\033[0m"
print b_1.format(b_2 = name[0],b_3 = lists.die[2])
elif s_1 == 'enr':
enter.login()
elif s_1 == 'exit':
os._exit(0)

逻辑处理

函数模块enter.py

 #!/usr/bin/env python
# -*- coding:utf-8 -*-
#读出当前存在的用户名和密码,并生成字典
with open('users','rU')as u_1 :
ss = u_1.readlines()
dic = dict()
for lind in ss:
lind = lind.strip().split(':')
dic[lind[0]] = lind[1]
#用户登录欢迎模块
def welcome(wel):
sent = "!\033[31m{users}\033[0m!Welcome to the shopping mall"#设置欢迎信息
aa = (sent.format(users=wel)) #欢迎信息
scr = 80 #设置一个长度
text = len(aa)-9 #读出语言的长度,并减去9
box = text #设置变量
left = (scr - box) // 2 #设置前方空格的空隙
#下方输出的内容可以根据输入字符串的长度进行变化
print #输出空
print ' ' * left + '+'+ '-'*(box) + '+'
print ' ' * left + '|'+ ' '*text + '|'
print ' ' * left + '|'+aa + '|'
print ' ' * left + '|'+ ' '*text + '|'
print ' ' * left + '+'+ '-'*(box) + '+' #用户登录验证模块
def user():
import operate #加载operate文件
while True: #设置循环
user_1 = raw_input("请输入你要登录的用户名:") #获取用户名密码
user_2 = raw_input("请输入你要登录的密码:")
operate.name.append(user_1) #将用户名写入operate.name,方便以后调用
if user_1 in dic.keys(): #判断当前用户是否存在,根据前面生成的所有用户名密码的列表
passw = dic[user_1] #如果用户存在则,根据字典的值传入变量
if user_2 == passw: #判断字典中密码和用户输入是否一致
welcome(user_1) #一致则调用用户欢迎模块
break #登录成功退出循环
else:
print("\033[35m您输入的账号或密码错误\033[0m")#不匹配则重新输出
print("")
else:
print("\033[35m您输入的账号或密码错误\033[0m")#不匹配则重新输出
print("") #购买模块
def shopp():
import operate #加载operate
if not operate.huo: #判断huo是否为空,huo是设置为空的字典,存放当前用户所添加的东西,
print("\033[35m-------------------------------购物车没货物-------------------------------\033[0m")#如果是空这输出
else: #不为空则结算
cart() #加载显示购物车物品的函数
shop_1 = raw_input("是否进行结算(y/n):") #是否结算
if shop_1 == "y" :#判断用户输入
deal() #调用结算模块
elif shop_1 == "n" :#判断用户输入
print ("\033[35m-------------------------------已退出购物车-------------------------------\033[0m")
#显示购物车内容
def cart():
import operate #加载operate
shop_1 = 1 #为物品编号设置
for sho_1 in operate.huo.keys(): #从用户的存放货物的字典逐个读取货物名称
if sho_1 in operate.huowu.keys(): ##分别读取货物的键值对,这里的逻辑不太好没时间更改,后续更改
#设置中间的下划线长度
sh_2 = len(sho_1) #计算长度
sh_3 = 50-sh_2 #设置下划线长度
ca_4 = ("[{s_1}]商品名称:{s_2}"+"_"*sh_3+"{s_3}元")#设置提示信息
print ca_4.format(s_1=shop_1,s_2=sho_1,s_3=operate.huo[sho_1])#设置提示信息
shop_1 += 1#将货物编号加一 #支付模块
def deal():
import operate,lists #加载operate,lists #支付过程
aas = int(lists.die[2]) #将lists的2索引(金额),转换成int类型
for sa in operate.huo.keys(): #sa从字典huo取key
sa_1 = int(operate.huo[sa]) #sa_1等于转换类型后的huo[sa]的值(购物车商品金额)
if aas >= sa_1: #判断文件中的当前用户金额是否大于等于huo[sa]的值
aas = aas - sa_1 #如果大于则进行运算用已存金额减去商品金额
lists.die[2] = aas #并将列表爹die[2](也就是用户的资金)更新成买完商品的钱
del operate.huo[sa] #然后删除该商品
ss_1 = '支付商品\033[35m{n}\033[0m成功,实付金额为:\033[31m{n_1}\033[0m元!' #设置提示信息
print ss_1.format(n=sa,n_1=sa_1) #设置提示信息
else:#当金钱不足的时候进行
ss_2 = '支付商品\033[35m{n}\033[0m失败,应付金额为:\033[31m{n_1}\033[0m元!请充值!'#设置提示信息
print ss_2.format(n=sa,n_1=sa_1)#设置提示信息
#写入文件过程,创建一个当前所有存在用户的列表,这样就可以判断当前用户在文件的第几行
clo = lists.dia.index(lists.aaa) #判断当前用户所在列表的位置
f=open('users','r+') #打开文件
flist=f.readlines() #按行读取
aa = '{a_1}:{a_2}:{a_3}\n' #设置文件内容
flist[clo]= aa.format(a_1=lists.die[0],a_2=lists.die[1],a_3=lists.die[2])#clo就是当前用户所在的文件行数,后面加上内容,a_1 当前用户 a_2 当前用户密码 a_3 当前用户余额
f=open('users','w') #以w的方式打开文件
f.writelines(flist) #写入
f.close()#关闭
print ("\033[35m-------------------------------已退出购物车-------------------------------\033[0m") #从购物车删除模块
def dele():
import operate #加载模块
if not operate.huo: #如果为空则输出没有货物
print("购物车没有物品")
else:
cart() #否则调用显示购物车模块
while True:#循环
saa = raw_input("请输入删除商品的名称:")#删除的物品名称
if saa == 'exit':#判断输入exit为退出
break
elif saa in operate.huo.keys():#判断用户输入名称是否正确
del operate.huo[saa] #正确则删除
print('\033[35m-------------------------------删除商品成功!!--------------------------------\033[0m')
#退出删除判断
saa_1 = raw_input("是否退出(y/n):")
if saa_1 == 'y':
break
else:
print "\033[31m您输入有误请重新输入\033[0m" #充值模块这里还可以写只有admin可以充值,或者验证充值用户的密码
def topup():
import lists#加载模块主要加载当前用户名
clb = lists.dia.index(lists.aaa) #判断当前用户所在列表的位置
while True:
q_1 = raw_input("请输入充值金额以整数为单位(元):") #输入充值金额
q_2 = str.isdigit(q_1) #判断是否是数字
if q_1 == 'exit' : #exit退出充值
break
if q_2 == True: #是数字则进行充值
q_1 = int(q_1) #转换类型
q_3 = type(q_1) #判断类型,主要通过长整形限制充值金额
if q_3 == int: #判断类型
lists.die[2] = int(lists.die[2]) #调用lists(当前用户的信息,账号,密码,余额),转换类型
lists.die[2] = lists.die[2] + q_1 #进行余额和充值金额相加
f=open('users','r+') #打开文件
flist=f.readlines() #按行读取
aa = '{a_1}:{a_2}:{a_3}\n' #设置文件内容
flist[clb]= aa.format(a_1=lists.die[0],a_2=lists.die[1],a_3=lists.die[2])#clo就是当前用户所在的文件行数,后面加上内容,a_1 当前用户 a_2 当前用户密码 a_3 当前用户金额
f=open('users','w') #以w的方式打开文件
f.writelines(flist) #写入
f.close() #关闭文件
vv_1 = ('充值成功,充值金额为\033[31m{vv}\033[0m,当前余额为\033[31m{v_1}\033[0m')
print(vv_1.format(vv=q_1,v_1=lists.die[2]))
break
else:#如果不是整形数字,是长整形数字则金额过大
print("\033[31m您输入的金额过大\033[0m")
else:#输入不是数字则输入有误
print("\033[31m---------------------------------输入有误---------------------------------\033[0m") #商品模块
def catg():
import operate#读取模块
print("\033[35m---------------------------------购物商品---------------------------------\033[0m")#输出
car = 1#设置商品编号
for ca_1 in operate.huowu:#分别读取货物的键值对
ca_2 = len(ca_1) #读出键值对的长度
ca_3 = 50-ca_2 #中间下划线长度
ca_4 = ("[{s_1}]商品名称:{s_2}"+"_"*ca_3+"{s_3}元")#输出信息
print ca_4.format(s_1=car,s_2=ca_1,s_3=operate.huowu[ca_1])#输出信息
car += 1
print("\033[35m---------------------------------购物商品---------------------------------\033[0m") #添加模块
def mone():
import operate
while True:#添加购物车模块
mon = raw_input("请输入加入购物车产品的名称:")#输入物品名称
if mon in operate.huo.keys(): #判断货物是否存在
print("\033[31m------------------------商品已经添加请先到购物车结算----------------------------\033[0m")
elif mon in operate.huowu.keys():#如果货物存在
print("\033[35m---------------------------添加成功请到购物车结算-------------------------------\033[0m")
operate.huo[mon] = operate.huowu[mon] #则添加至购物车的字典中
elif mon == "exit":#exit退出
print("\033[35m---------------------------------退出购物---------------------------------\033[0m")
break
else:#名称不对添加失败
print("\033[31m添加失败请核对产品名称\033[0m") #注册用户模块,这里还可以写只有admin可以创建用户
def login():
import lists
#为了防止在运行中能够创建多个相同名称的用户
while True:
with open('users','rU')as u_3: #过程如上
ads = u_3.readlines()
diz = []
for lin in ads:
lin = lin.strip().split(':')
diz.append(lin[0])
w_1 = raw_input("请输入创建的用户名:")#创建的用户名称
if w_1 in diz:#判断用户是否存在
print('\033[31m----------------------------用户已存在请重新输入------------------------------\033[0m')
elif w_1 == "exit":
break
else:
w_2 = raw_input("请输入用户密码(大于5位数)")#设置的密码这里可以做更安全的双向认证,因为PYcharm对隐身的密码模块支持不好所以没使用
w_3 = len(w_2)#计算密码长度
if w_3 > 5 :#密码长度大于5
output = open('users', 'a') #打开文件以a的方式
aa = '{a_1}:{a_2}:{a_3}\n' #设置文件内容
flist= aa.format(a_1=w_1,a_2=w_2,a_3=10000)#clo就是当前用户所在的文件行数,后面加上内容,a_1 当前用户 a_2 当前用户密码 a_3 当前用户余额
output.write(flist) #写入
output.close()#关闭文件
ll = "\033[31m--------------------------成功创建用户:{l_1}------------------------------\033[0m"
print ll.format(l_1=w_1)
break
else:
print("\033[31m----------------------------密码长度过短------------------------------\033[0m") #密码过短从新设置

函数模块

全局调用模块lists.py

 #!/usr/bin/env python
# -*- coding:utf-8 -*- import operate
aaa = operate.name[0] #生成当前用户,信息的列表
with open('users','rU')as u_2 : #打开文件users
ss = u_2.readlines() #设置变量ss等于按行读取的u_2
die = [] #设置空列表,保存登录用户的信息
for line in ss: #for循环从ss按行拿区内容
if aaa in line: #判断登录用户是否在line中,当line包含用户的时候则进行一下处理
line = line.strip().split(':') #分割字符串
die.append(line[0]) #在列表中添加元素 0索引代表用户
die.append(line[1]) #在列表中添加元素 1索引代表密码
die.append(line[2]) #在列表中添加元素 2索引代表金额
#生成
with open('users','rU')as u_3: #过程如上
ads = u_3.readlines()
dia = []
for lin in ads:
lin = lin.strip().split(':')
dia.append(lin[0])

全局调用

用户数据保存文件:users

文件格式为:

admin:123.com:10000

主要实现思路:

(1)所有的用户数据存在users上,默认admin,123.com user,123.com
(2)实现思路在程序中捕获用户输入的关键字,借鉴linux,根据命令不同调用不同的
  函数。
  ①商品展示功能,通过一个字典为商品,然后for循环,进行格式的输出前面的编
  号利用计数器原理
  ②添加至购物车,主要当用户登录的时候生成一个空的字典,然后根据用户输入名称
  与商品字典进行匹配,成功匹配后就加入空的字典,这里没使用序号加入
  ③购物车结算,在登录函数中将验证成功的用户名传入一个空的列表,通过将users
  文件的数据读取出来,然后以:进行分割,转换成字典,这样就可以匹配当前登录
  用户的余额,然后进行减的操作,并在购物车字典中删除此商品在写入的时候,
  没学awk,所以采用指定的方法,为了获取用户在文件的行数,我先将所有用户
  生成一个列表,然后进行匹配读出下标这样就可以正常的执行了
  ④删除商品,将匹配的用户输入,跟用户的购物车的字典匹配,然后删除
  ⑤充值,根据保存的用户列表,匹配文件中的用户余额,然后根据用户输入的金额进
  行相加,写入文件,这里可以做只有admin才可以充值,限定单词充值金额啥的
  ⑥余额,根据前面生成的当前登录用户的信息列表进行输出
  ⑦注册用户,因为数据结构users就是,用户名,密码,金额,所以只需捕获用户名
  密码就可,这里加入用户验证,不能生成相同名称,密码最短6位,为了防止重
  副生成相同用户,在这里吧读取电当前用户名加入while循环,生成一次,下次
  生成用户就加载一次。
(3)使用help可以输出帮助



python练习_购物车(2)的更多相关文章

  1. python练习_购物车(简版)

    python练习_购物车(简版) 需求: 写一个python购物车可以输入用户初始化金额 可以打印商品,且用户输入编号,即可购买商品 购物时计算用户余额,是否可以购买物品 退出结算时打印购物小票 以下 ...

  2. Python练习_购物车_day6

    第一次代码 (1) 输出商品列表,用户输入序号,显示用户选中的商品. 页面显示 序号 + 商品名称,如: 1 手机 2 电脑 (2): 用户输入选择的商品序号,然后打印商品名称 (3):如果用户输入的 ...

  3. python开发_++i,i += 1的区分

    python开发_++i,i += 1的区分 在很多编程语言(C/C++,Java等)中我们都会碰到这样的语法: 1 int i = 0; 2 ++ i; // -- i; 这样的语法在上述编程语言中 ...

  4. python学习_数据处理编程实例(二)

    在上一节python学习_数据处理编程实例(二)的基础上数据发生了变化,文件中除了学生的成绩外,新增了学生姓名和出生年月的信息,因此将要成变成:分别根据姓名输出每个学生的无重复的前三个最好成绩和出生年 ...

  5. Python递归_打印节点信息

    Python递归_打印节点信息 递归特性:1.必须由一个明确的结束条件2.每次进入更深一层递归时,问题规模相比上一次递归都应该有所减少3.递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用时 ...

  6. python人工智能爬虫系列:怎么查看python版本_电脑计算机编程入门教程自学

    首发于:python人工智能爬虫系列:怎么查看python版本_电脑计算机编程入门教程自学 http://jianma123.com/viewthread.aardio?threadid=431 本文 ...

  7. python练习_三级菜单

    python练习_三级菜单 需求: 做一个地区查询三级菜单,输入一级能够打印下一级 在第三级个第二级输入e可以返回上一级 在任意一级输入q则退出程序 以下代码实现的功能与思路: 功能: (1)通过In ...

  8. (转)Python作业day2购物车

    Python作业day2购物车 原文:https://www.cnblogs.com/spykids/p/5163108.html 流程图: 实现情况: 可自主注册, 登陆系统可购物,充值(暂未实现) ...

  9. python练习_简单登录

    python练习_简单登录 需求: 做一个登录的小程序,验证用户与密码 要求登录三次错误后锁定 以下代码实现的功能与思路: 功能: 1.除admin以外的用户累计登录失败次数超过三次则锁定,此时需要管 ...

随机推荐

  1. 【搜索引擎Jediael开发笔记1】搜索引擎初步介绍及网络爬虫

    详细可参考 (1)书箱:<这就是搜索引擎><自己动手写网络爬虫><解密搜索引擎打桩实践> (2)[搜索引擎基础知识1]搜索引擎的技术架构 (3)[搜索引擎基础知识2 ...

  2. css3渐变详解

    今天总结渐变的问题,渐变分为线性渐变.径向渐变.呼呼,废话少说, 线性渐变:background:linear-gradient(设置渐变形式,第一个颜色起点,中间颜色点 中间颜色的位置,结束点颜色) ...

  3. 简便数据库——ORMLite框架

    一.创建DataBase //使用 Singleton 避免產生多個實例(instance),要注意 thread safe 這邊使用雙重鎖定(Double-checked locking) 使用 T ...

  4. Swift笔记4

    字符 var str = " hello world " var kong = "" 或者 var  kong  = string()   //定义一个空的字符 ...

  5. struts2_20140720

    有这样的感觉:前面学的东西弄会了,过了一段时间又感觉陌生了,还要重新开始.这次想个好办法,把写的程序用博客记录下来,把自己的学历历程用博客的形式呈现出来,一来可以方便复习,而来可以以后开发程序可以快速 ...

  6. Linux下chkconfig命令详解(转)

    Linux下chkconfig命令详解 chkconfig命令主要用来更新(启动或停止)和查询系统服务的运行级信息.谨记chkconfig不是立即自动禁止或激活一个服务,它只是简单的改变了符号连接. ...

  7. webshell 匿名用户(入侵者)

    “web”的含义是显然需要服务器开放web服务,“shell”的含义是取得对服务器某种程度上操作权限.webshell常常被称为匿名用户(入侵者)通过网站端口对网站服务器的某种程度上操作的权限.由于w ...

  8. linux命令之mount

    熟悉linux的同学都应该知道mount命令.在linux中,一切皆文件.硬盘分区都是以文件目录的方式存在. 如果我们想访问移动硬盘,U盘等我们必须将这些设备mount到我们linux文件系统中某个目 ...

  9. poj 1083 Moving Tables_dp

    题意:给你n个凳子,接着告诉你一个凳子从a房间到b房间,运输时间为10分钟,走廊很窄能通过一张凳子,当然不堵塞的话能同时扮凳子,问最小花费多少时间 因为数据很小就直接用数组统计了,a,b如果是奇数的话 ...

  10. C errors recods

    error: unterminated #ifndef 1,权限问题 2,少了#endif