之前上传的发现有部分代码错误,重新上传;

更改了第一次的代码与错误,增加了注释与商店部分功能;

没有每天坚持更新博客,与初衷相差甚远,坚持!每天进步一点点!

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小练习更改版(更改一部分代码,与错误)的更多相关文章

  1. Python小练习-购物商城(一部分代码,基于python2.7.5)

    新手写作,用来练习与提高python编写.思考能力,有错误的地方请指正,谢谢! 第一次写博客,课题是一位大神的博客,本着练习的目的,就自己重写了一遍,有很多不足的地方,希望借博客记录下自己的成长:  ...

  2. python之实现ftp上传下载代码(含错误处理)

    # -*- coding: utf-8 -*- #python 27 #xiaodeng #python之实现ftp上传下载代码(含错误处理) #http://www.cnblogs.com/kait ...

  3. 谈谈Python中的decorator装饰器,如何更优雅的重用代码

    众所周知,Python本身有很多优雅的语法,让你能用一行代码写出其他语言很多行代码才能做的事情,比如: 最常用的迭代(eg: for i in range(1,10)), 列表生成式(eg: [ x* ...

  4. Python小代码_2_格式化输出

    Python小代码_2_格式化输出 name = input("name:") age = input("age:") job = input("jo ...

  5. Python小代码_1_九九乘法表

    Python小代码_1_九九乘法表 max_num = 9 row = 1 while row <= max_num: col = 1 while col <= row: print(st ...

  6. Python小数据池,代码块

    今日内容一些小的干货 一. id is == 二. 代码块 三. 小数据池 四. 总结 python小数据池,代码块的最详细.深入剖析   一. id is == 二. 代码块 三. 小数据池 四. ...

  7. python小数据池,代码块知识

    一.什么是代码块? 根据官网提示我们可以获知: A Python program is constructed from code blocks. A block is a piece of Pyth ...

  8. 神探Python程序员,带你千里捉小三!(附详情代码)

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: 王翔 清风Python PS:如有需要Python学习资料的小伙伴 ...

  9. python 小数据池,代码块, is == 深入剖析

    python小数据池,代码块的最详细.深入剖析   一. id is == 二. 代码块 三. 小数据池 四. 总结 一,id,is,== 在Python中,id是什么?id是内存地址,那就有人问了, ...

随机推荐

  1. Linux使用docker安装MinIO

    官方地址:http://docs.minio.org.cn/docs/master/minio-docker-quickstart-guide 拉取镜像 docker pull minio/minio ...

  2. Linux执行脚本报错:-bash: ./xx.sh: /bin/bash^M: bad interpreter: No such file or directory

    1.用vim打开文本 输入 : set ff 这里要先按":"号 显示文件为dos格式 2.强制装换格式为unix 先按冒号":" set ff=unix 然后 ...

  3. Linux(Centos) 设置显示vim行号

    1.修改vimrc文件 vim /etc/vimrc 2.在最后添加 set nu 如下图片所示 然后wq! 保存退出

  4. JAVA整合Redis使用redisTemplate清除库中的所有键值对数据

    JAVA整合Redis使用redisTemplate清除库中的所有键值对数据,清除所有缓存数据 Set<String> keys = redisTemplate.keys("*& ...

  5. qt5之设置无边窗口移动

    Note qt version: 5.12 qt creator: 4.13 本文将介绍 设置无边窗口和设置窗口的移动 你要知道: QDialog 和 QMainWindow都是 QWidget的派生 ...

  6. 【LeetCode】645. Set Mismatch 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 Hash方法 直接计算 日期 题目地址: https ...

  7. 【LeetCode】688. Knight Probability in Chessboard 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 题目地址:https://leetcode.com/problems/knight-pr ...

  8. P1629八

    P1629八 Accepted 标签:[显示标签]     描述 八是个很有趣的数字啊.八=发,八八=爸爸,88=拜拜.当然最有趣的还是8用二进制表示是1000.怎么样,有趣吧.当然题目和这些都没有关 ...

  9. 5G的到来

    通信改变未来,从古至今信息的传输和获取从来就没有缺少过,之所以谁能取得胜利就是谁掌握的资源多,其中信息资源尤为重要,只要获取到更多的信息你就能提前做出应对策略.因此未来一定是信息的未来,作为信息传输的 ...

  10. 「Codeforces 79D」Password

    Description 有一个 01 序列 \(a_1,a_2,\cdots,a_n\),初始时全为 \(0\). 给定 \(m\) 个长度,分别为 \(l_1\sim l_m\). 每次可以选择一个 ...