Python小练习更改版(更改一部分代码,与错误)
之前上传的发现有部分代码错误,重新上传;
更改了第一次的代码与错误,增加了注释与商店部分功能;
没有每天坚持更新博客,与初衷相差甚远,坚持!每天进步一点点!
user_list.txt 部分代码:
{'test1': 'test1', 'test3': 'test3', 'test2': 'test2'}
lock_list.txt 部分代码:
['test1']
money_list.txt 部分代码:
{'test1': 2000, 'test3': 3000, 'test2': 500 }
1 #!/usr/bin/env python
2 #coding:utf-8
3 import sys
4 class Shop(object):
5 def __init__(self):
6 self.Red = "\033[1;31m"
7 self.Gre = "\033[1;32m"
8 self.Res = "\033[0m"
9 self.shop_list = [{"1:phone": 2000}, {"2:ipad": 1500}, {"3:ice_box": 500}]
10 self.cars = []
11 self.customer_expense = 0
12 with open('user_file.txt','r') as fp:
13 user_list = eval(fp.readline()) # 用户的名字与密码转换成字典
14 with open('lock_name.txt','r') as fp2:
15 lock_name = eval(fp2.readline()) # 锁定的用户为列表
16 with open('money_list.txt','r') as fp3:
17 money_list = eval(fp3.readline())
18
19 def nameCheck(self,a): #########名字检测状态函数
20 if a in self.user_list and a not in self.lock_name:
21 return 0 #如果名字在user_file里面,且没在锁定文件里面的话,返回0
22 elif a in self.user_list and a in self.lock_name:
23 return 1 #名字在user_file里面,且被锁定,返回1
24 else:
25 return 2 #否则返回2
26
27 def passwdCheck(self,a,b): ##########密码检测函数
28 count = 3
29 while count > 1:
30 try:
31 if b == self.user_list[a]:
32 return 0
33 else:
34 count -= 1
35 print self.Red,"密码错误,剩余%d次" % count,self.Res
36 b = raw_input("请再次输入你的密码: ") ######更改部分给用户机会输入密码
37 except KeyError :
38 return 2
39 else:
40 return 1
41
42
43 def checkAfter(self,b,c,dd): ##########状态检测完成后的动作
44 if b == 0 and c == 0 :
45 print self.Gre,"恭喜你(%s),登陆成功!!!,欢迎你来到我们的商店!"%dd,self.Res #成功后动作进到商店
46 self.shopCounts()
47 return self.money_list[dd]
48
49 elif b == 1 :
50 print self.Red,"对不起,你(%s)的账号被锁定,请联系客服!!!"%dd,self.Res #不成功则动作回到初始位置
51 return 'error'
52 elif c == 1 :
53 print self.Red,"密码错误,账号将被锁定",self.Res
54 self.nameLock(dd)
55 return 'right'
56 else:
57 prompts = self.Red+"账号(%s)不存在,是否创建用户(q|Q退出): "%dd+self.Res#不存在则动作到注册位置
58 confirm = raw_input(prompts)
59 if confirm.upper() == "Q": #######增加退出接口
60 return 'error'
61 else:
62 self.signName()
63 return 'right'
64
65
66 def signName(self): #########注册账号函数
67 while True:
68 sign_name = raw_input("请输入你要注册的账号(q|Q退出!):")
69 value = self.nameCheck(sign_name)
70 if sign_name.upper() == "Q": #####增加退出接口
71 break
72 passwd = raw_input("输入你的密码: ")
73 if value == 2:
74 print self.Gre,"congratulations,账号可用",self.Res
75 money = raw_input("输入账号资金: ")
76 if money.isdigit():
77 print self.Red,"""name: %s
78 passwd: %s
79 money: %d""" %(sign_name,passwd,int(money)),self.Res
80 confirm = raw_input("是否确认以上信息(y|Y确认,其它返回重来): ")
81 if confirm.upper() == "Y":
82 self.user_list.setdefault(sign_name, passwd) #######更改部分,用户不确认也会将信息存入文件
83 self.money_list.setdefault(sign_name, int(money)) #######
84 with open('user_file.txt','r+') as fp:
85 fp.write(str(self.user_list))
86 with open('money_list.txt','r+') as fp3:
87 fp3.write(str(self.money_list))
88 break
89
90 else:
91 print self.Red,"重新来过",self.Res
92 continue
93 else:
94 print self.Red,"资金错误,返回重来",self.Res
95 continue
96 else:
97 print self.Red,"账号不可用",self.Res
98 continue
99 def nameLock(self,a): ##########锁定账号函数
100 self.lock_name.append(a)
101 with open('lock_name.txt','r+') as fp2:
102 fp2.write(str(self.lock_name))
103
104 def shopCounts(self): #########商店部分函数
105 # for key,value in shop_list.items():
106 # print key," : ",value #打印商店内容
107 for i in range(3):
108 for key,value in self.shop_list[i].items():
109 print key,value
110
111
112 def shoping(self,b): ##########购买函数
113 while True:
114 prompts = self.Gre+"请选择你要的商品编号(q|Q,退出结算): "+self.Res
115 index = raw_input(prompts)
116 if index.upper() == "Q":
117 print self.Red,"购物结束,去结算!",self.Res
118 print b
119 self.money_list[name] = b #####结算部分
120 print self.money_list
121 with open('money_list.txt','w') as fp3: ########此处若是r+ 模式则会出现编码,暂时没弄明白!!!
122 fp3.writelines(str(self.money_list))
123 print "#"*20
124 # print fp3.read()
125 break
126 if index.isdigit():
127 index = int(index)
128 b = self.shopcar(index,b)
129 else:
130 print self.Red,"你选择的商品不存在,请确认你的选择!!!",self.Res
131 self.shopCounts()
132
133 def shopcar(self,a,b): ####购物车函数
134 try:
135 shop_money = self.shop_list[(a-1)].values()[0]
136 # print b
137 if b >= shop_money:
138 print self.Gre, "congratulations!,商品已加入购物车", self.Res
139 self.cars.append(shop_money)
140 b -= shop_money
141 self.customer_expense += shop_money
142 print self.cars
143 return b
144 else:
145 print self.Red, "账户余额可能不足哦,还剩%d" % b, self.Res
146 return b
147 except Exception,e:
148 print self.Red,"你选择的商品不存在!",self.Res
149 return b
150
151
152
153
154
155 maomao = Shop()
156
157 if __name__ == "__main__":
158 while True:
159 name = raw_input("请输入你的账号(q|Q退出):")
160
161 if name.upper() == "Q":
162 sys.exit()
163 else:
164 passwd = raw_input("请输入你的密码:")
165 b = maomao.nameCheck(name) ######接收用户检测状态值
166 c = maomao.passwdCheck(name,passwd) #####接收用户密码检测状态值
167 d = maomao.checkAfter(b,c,name) ########接收用户的moneye值
168 if str(d).isdigit() :
169 maomao.shoping(d) ####处理用户购物动作
Python小练习更改版(更改一部分代码,与错误)的更多相关文章
- Python小练习-购物商城(一部分代码,基于python2.7.5)
新手写作,用来练习与提高python编写.思考能力,有错误的地方请指正,谢谢! 第一次写博客,课题是一位大神的博客,本着练习的目的,就自己重写了一遍,有很多不足的地方,希望借博客记录下自己的成长: ...
- python之实现ftp上传下载代码(含错误处理)
# -*- coding: utf-8 -*- #python 27 #xiaodeng #python之实现ftp上传下载代码(含错误处理) #http://www.cnblogs.com/kait ...
- 谈谈Python中的decorator装饰器,如何更优雅的重用代码
众所周知,Python本身有很多优雅的语法,让你能用一行代码写出其他语言很多行代码才能做的事情,比如: 最常用的迭代(eg: for i in range(1,10)), 列表生成式(eg: [ x* ...
- Python小代码_2_格式化输出
Python小代码_2_格式化输出 name = input("name:") age = input("age:") job = input("jo ...
- Python小代码_1_九九乘法表
Python小代码_1_九九乘法表 max_num = 9 row = 1 while row <= max_num: col = 1 while col <= row: print(st ...
- Python小数据池,代码块
今日内容一些小的干货 一. id is == 二. 代码块 三. 小数据池 四. 总结 python小数据池,代码块的最详细.深入剖析 一. id is == 二. 代码块 三. 小数据池 四. ...
- python小数据池,代码块知识
一.什么是代码块? 根据官网提示我们可以获知: A Python program is constructed from code blocks. A block is a piece of Pyth ...
- 神探Python程序员,带你千里捉小三!(附详情代码)
前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: 王翔 清风Python PS:如有需要Python学习资料的小伙伴 ...
- python 小数据池,代码块, is == 深入剖析
python小数据池,代码块的最详细.深入剖析 一. id is == 二. 代码块 三. 小数据池 四. 总结 一,id,is,== 在Python中,id是什么?id是内存地址,那就有人问了, ...
随机推荐
- 给初学者的STM32(Cortex-M3)中断原理及编程方法介绍 [原创www.cnblogs.com/helesheng]
本人编著的<基于STM32的嵌入式系统原理及应用>(ISBN:9787030697974)刚刚在科学出版社出版.这本书花费了半年以上的时间,凝聚了笔者作为高校教师和嵌入式工程师的一些经验, ...
- java源码——对文件内容的查找和替换(开始写界面咯)
问题是:"键盘输入文件的路径.查找内容和替换内容,对指定路径的文件的内容进行查找和替换." 好久没写界面了,今天熟悉一下界面的书写和监听器操作. 这个问题的本身不是很难,重点应该是 ...
- 【LeetCode】415. Add Strings 解题报告(Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 日期 [LeetCode] 题目地址:https:/ ...
- D. Substring
D. Substring 题意: 给你一个有向图,然后给你一串字符串第i个点的值为第i个字符,然后给你m条有向边,从中找一条路径然后这条路径中点的值相同的个数的最大值,如果图有环输出-1. 思路: 拓 ...
- 【LeetCode】807. Max Increase to Keep City Skyline 解题报告(Python &C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 日期 题目地址:https://leetcode.c ...
- 精通 MySQL 索引
索引概念: 概念:索引是提高mysql查询效率的数据结构.总的一句话概括就是索引是一种提高查询效率的数据结构. 数据库查询是数据库的最主要功能之一.设计者们都希望查询数据的速度能尽可能的快,因此数据库 ...
- CNN、RNN
卷积神经网络有三个结构上的特性:局部连接,权重共享以及空间或时间上的次采样.这些特性使得卷积神经网络具有一定程度上的平移.缩放和扭曲不变性. CNN由可学习权重和偏置的神经元组成.每个神经元接收多个输 ...
- API 网关功能
反向代理和路由 - 大多数项目采用网关的解决方案的最主要的原因.给出了访问后端 API 的所有客户端的单一入口,并隐藏内部服务部署的细节. 负载均衡 - 网关可以将单个传入的请求路由到多个后端目的地. ...
- 第十六个知识点:描述DSA,Schnorr,RSA-FDH的密钥生成,签名和验证
第十六个知识点:描述DSA,Schnorr,RSA-FDH的密钥生成,签名和验证 这是密码学52件事系列中第16篇,这周我们描述关于DSA,Schnorr和RSA-FDH的密钥生成,签名和验证. 1. ...
- 浅谈JVM内存分配与垃圾回收
大家好,我是微尘,最近又去翻了周志明老师的<深入理解Java虚拟机>这本书.已经看了很多遍了,每次都感觉似乎看懂了,但没过多久就忘了.这次翻了第三章的垃圾收集器与内存分配策略,感觉有了新的 ...