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)   ####处理用户购物动作
				
时间: 2024-08-14 19:28:03

Python小练习更改版(更改一部分代码,与错误)的相关文章

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

# -*- coding: utf-8 -*- #python 27 #xiaodeng #python之实现ftp上传下载代码(含错误处理) #http://www.cnblogs.com/kaituorensheng/p/4480512.html#_label2 import ftplib import socket import os def ftpconnect(ftp_info): try: ftp = ftplib.FTP(ftp_info[0]) except (socket.er

C#小常识集锦(一)--《更锋利的CSharp代码》读书笔记

?.采用类似匈牙利命名法为控件命令,对于其他变量申明则不需要了 e.g. Button btnAdd; e.g. TextBox txtUsername; e.g. ListBox lstFileNames; e.g. Panel panelInfo; ?.对于函数参数.局部变量.私有及受保护字段的命名采用Camel规则(首字母小写),其他的情况如命名空间.结构.类.接口.枚举.枚举项.属性.方法.事件.委托及公开的字段等都采用Pascal规则(首字母大写) ?.多使用XML文档注释,它与VS开

Python小数据池,代码块解析

一.id,is,== 在Python中,id是什么?id是内存地址,比如你利用id()内置函数查询一个数据的内存地址: name = '太白' print(id(name)) # 1585831283968 那么is又是什么?==又是什么? == 是比较两边的数值是否相等,而is是比较两边的内存地址是否相等.如果内存地址相等,那么这两边其实是指向同一个内存地址. 可以说如果内存地址相同,那么值肯定相同,但是如果值相同,内存地址不一定相同. 二.代码块 根据官网提示我们可以获知: 根据提示我们从官

Python 小数据池、代码块以及代码块缓存机制

按照惯例,吟诗一首:苏轼<江城子·乙卯正月二十日夜记梦> 十年生死两茫茫,不思量,自难忘.千里孤坟,无处话凄凉. 纵使相逢应不识,尘满面,鬓如霜. 夜来幽梦忽还乡,小轩窗,正梳妆.相顾无言,惟有泪千行. 料得年年肠断处,明月夜,短松冈. 1. is 和 == 之间的区别 在讲解代码块及其缓存机制之前有必要搞清楚is和==之间的区别 开门见山直接说:==是比较两边变量的值是否相同,is是比较两边变量的内存地址是否相同,在python中内存地址如何获取,当然是使用id(item)函数获取了 举两个

python字符串格式化输出及相关操作代码举例

字符串的格式化 Python 支持格式化字符串的输出 .尽管这样可能会用到非常复杂的表达式,但最基本的用法是将一个值插入到一个有字符串格式符 %s 的字符串中.在   Python 中,字符串格式化使用与 C 中 sprintf 函数一样的语法. 在python中格式化输出字符串通用的形式为: 格式标记字符串 % 要输出的值组 其中,左边部分的"格式标记字符串"可以完全和c中的一致.右边的"值组"如果有两个及以上的值则需要用小括号括起来,中间用逗号隔开. 重点来看左

python 小技巧

英文出处:sahandsaba.欢迎加入翻译组. 从我开始学习python的时候,我就开始自己总结一个python小技巧的集合.后来当我什么时候在Stack Overflow或者在某个开源软件里看到一段很酷代码的时候,我就很惊讶:原来还能这么做!,当时我会努力的自己尝试一下这段代码,直到我懂了它的整体思路以后,我就把这段代码加到我的集合里.这篇博客其实就是这个集合整理后一部分的公开亮相.如果你已经是个python大牛,那么基本上你应该知道这里面的大多数用法了,但我想你应该也能发现一些你不知道的新

让Python跑得更快

点击关注 异步图书,置顶公众号 每天与你分享 IT好书 技术干货 职场知识 Tips 参与文末话题讨论,即有机会获得异步图书一本. Python很容易学.你之所以阅读本文可能是因为你的代码现在能够正确运行,而你希望它能跑得更快.你可以很轻松地修改代码,反复地实现你的想法,你对这一点很满意.但能够轻松实现和代码跑得够快之间的取舍却是一个世人皆知且令人惋惜的现象.而这个问题其实是可以解决的. 有些人想要让顺序执行的过程跑得更快.有些人需要利用多核架构.集群,或者图形处理单元的优势来解决他们的问题.有

几个Python小案例,爱上Python编程!

Python是一种面向对象的解释型编程语言,源代码与解释器CPython遵守GPL协议,Python语法简洁清晰. 语法简洁清晰,那么我们用少量的Python代码能做哪些有趣的东西?温馨提示:文末必看. 一.画爱心表白 1.图形都是由一系列的点(X,Y)构成的曲线,由于X,Y满足一定的关系,所以我们就可以建立模型,建立表达式expression,当满足时,两个for循环(for X in range:for Y in range)就会每行每列的打印. 2.Python代码与注释: 理清思路一行代

《深度学习入门基于Python的理论与实现》PDF代码学习指导

入门神经网络深度学习,推荐学习<深度学习入门:基于Python的理论与实现>,这本书不来虚的,一上来就是手把手教你一步步搭建出一个神经网络,还能把每一步的出处讲明白.理解神经网络,很容易就能入门. 深度学习真正意义上的入门书,深入浅出地剖析了深度学习的原理和相关技术.书中使用Python3,尽量不依赖外部库或工具,从基本的数学知识出发,带领读者从零创建一个经典的深度学习网络,使读者在此过程中逐步理解深度学习. <深度学习入门:基于Python的理论与实现>中文版PDF,314页,带