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是内存地址,那就有人问了, ...
随机推荐
- MyBatis学习(四)MyBatis一对一关联查询
一对一关联查询即.两张表通过外键进行关联.从而达到查询外键直接获得两张表的信息.本文基于业务拓展类的方式实现. 项目骨架 配置文件conf.xml和db.properties前几节讲过.这里就不细说了 ...
- springboot整合阿里云视频点播接口
官方SDK文档地址: https://help.aliyun.com/document_detail/57756.html?spm=a2c4g.11186623.6.904.4e0d3bd9VbkIC ...
- LeetCode Top 100 Liked 点赞最高的 100 道算法题
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 公众号:负雪明烛 本文关键词:刷题顺序,刷题路径,好题,top100,怎么刷题,Leet ...
- 【LeetCode】138. Copy List with Random Pointer 复制带随机指针的链表 解题报告(Python)
作者: 负雪明烛 id: fuxuemingzhu 个人公众号:负雪明烛 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 日期 题目地址:https:/ ...
- 「Codeforces 468C」Hack it!
Description 定义 \(f(x)\) 表示 \(x\) 的各个数位之和.现在要求 \(\sum_{i=l}^rf(i)\bmod a\). 显然 ans=solve(l,r)%a; if(a ...
- 使用pypy3加速python运行
从这里下载对应OS版本的安装包 解压: tar xf pypy-x.y.z.tar.bz2 然后通过./pypy-x.y.z/bin/pypy可以直接进入console 可以使用pip安装包: ./p ...
- Hadoop问题解决记录
# 1.解决Unable to load native-hadoop library for your platform告警 安装Hadoop启动之后总有警告:Unable to load nativ ...
- EFCore:关于DDD中值对象(Owns)无法更新数值
最近使用DDD+EFCore时,使用EFCore提供的OwnsOne或者OwnsMany关联值对象保存数据,没想到遇到一个很奇怪的问题:值对象中的值竟然无法被EFCore保存!也没有抛出任何异常!我瞬 ...
- 初识python 之 爬虫:爬取双色球中奖号码信息
人生还是要有梦想的,毕竟还有python.比如,通过python来搞一搞彩票(双色球).注:此文仅用于python学习,结果仅作参考.用到知识点:1.爬取网页基础数据2.将数据写入excel文件3.将 ...
- 日志收集系统系列(三)之LogAgent
一.什么是LogAhent 类似于在linux下通过tail的方法读日志文件,将读取的内容发给kafka,这里的tailf是可以动态变化的,当配置文件发生变化时,可以通知我们程序自动增加需要增加的配置 ...