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

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

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

user_list.txt 部分代码:

  1. {'test1': 'test1', 'test3': 'test3', 'test2': 'test2'}
    lock_list.txt 部分代码:
  1. ['test1']
    money_list.txt 部分代码:
  1. {'test1': 2000, 'test3': 3000, 'test2': 500 }
  1. 1 #!/usr/bin/env python
  2. 2 #coding:utf-8
  3. 3 import sys
  4. 4 class Shop(object):
  5. 5 def __init__(self):
  6. 6 self.Red = "\033[1;31m"
  7. 7 self.Gre = "\033[1;32m"
  8. 8 self.Res = "\033[0m"
  9. 9 self.shop_list = [{"1:phone": 2000}, {"2:ipad": 1500}, {"3:ice_box": 500}]
  10. 10 self.cars = []
  11. 11 self.customer_expense = 0
  12. 12 with open('user_file.txt','r') as fp:
  13. 13 user_list = eval(fp.readline()) # 用户的名字与密码转换成字典
  14. 14 with open('lock_name.txt','r') as fp2:
  15. 15 lock_name = eval(fp2.readline()) # 锁定的用户为列表
  16. 16 with open('money_list.txt','r') as fp3:
  17. 17 money_list = eval(fp3.readline())
  18. 18
  19. 19 def nameCheck(self,a): #########名字检测状态函数
  20. 20 if a in self.user_list and a not in self.lock_name:
  21. 21 return 0 #如果名字在user_file里面,且没在锁定文件里面的话,返回0
  22. 22 elif a in self.user_list and a in self.lock_name:
  23. 23 return 1 #名字在user_file里面,且被锁定,返回1
  24. 24 else:
  25. 25 return 2 #否则返回2
  26. 26
  27. 27 def passwdCheck(self,a,b): ##########密码检测函数
  28. 28 count = 3
  29. 29 while count > 1:
  30. 30 try:
  31. 31 if b == self.user_list[a]:
  32. 32 return 0
  33. 33 else:
  34. 34 count -= 1
  35. 35 print self.Red,"密码错误,剩余%d次" % count,self.Res
  36. 36 b = raw_input("请再次输入你的密码: ") ######更改部分给用户机会输入密码
  37. 37 except KeyError :
  38. 38 return 2
  39. 39 else:
  40. 40 return 1
  41. 41
  42. 42
  43. 43 def checkAfter(self,b,c,dd): ##########状态检测完成后的动作
  44. 44 if b == 0 and c == 0 :
  45. 45 print self.Gre,"恭喜你(%s),登陆成功!!!,欢迎你来到我们的商店!"%dd,self.Res #成功后动作进到商店
  46. 46 self.shopCounts()
  47. 47 return self.money_list[dd]
  48. 48
  49. 49 elif b == 1 :
  50. 50 print self.Red,"对不起,你(%s)的账号被锁定,请联系客服!!!"%dd,self.Res #不成功则动作回到初始位置
  51. 51 return 'error'
  52. 52 elif c == 1 :
  53. 53 print self.Red,"密码错误,账号将被锁定",self.Res
  54. 54 self.nameLock(dd)
  55. 55 return 'right'
  56. 56 else:
  57. 57 prompts = self.Red+"账号(%s)不存在,是否创建用户(q|Q退出): "%dd+self.Res#不存在则动作到注册位置
  58. 58 confirm = raw_input(prompts)
  59. 59 if confirm.upper() == "Q": #######增加退出接口
  60. 60 return 'error'
  61. 61 else:
  62. 62 self.signName()
  63. 63 return 'right'
  64. 64
  65. 65
  66. 66 def signName(self): #########注册账号函数
  67. 67 while True:
  68. 68 sign_name = raw_input("请输入你要注册的账号(q|Q退出!):")
  69. 69 value = self.nameCheck(sign_name)
  70. 70 if sign_name.upper() == "Q": #####增加退出接口
  71. 71 break
  72. 72 passwd = raw_input("输入你的密码: ")
  73. 73 if value == 2:
  74. 74 print self.Gre,"congratulations,账号可用",self.Res
  75. 75 money = raw_input("输入账号资金: ")
  76. 76 if money.isdigit():
  77. 77 print self.Red,"""name: %s
  78. 78 passwd: %s
  79. 79 money: %d""" %(sign_name,passwd,int(money)),self.Res
  80. 80 confirm = raw_input("是否确认以上信息(y|Y确认,其它返回重来): ")
  81. 81 if confirm.upper() == "Y":
  82. 82 self.user_list.setdefault(sign_name, passwd) #######更改部分,用户不确认也会将信息存入文件
  83. 83 self.money_list.setdefault(sign_name, int(money)) #######
  84. 84 with open('user_file.txt','r+') as fp:
  85. 85 fp.write(str(self.user_list))
  86. 86 with open('money_list.txt','r+') as fp3:
  87. 87 fp3.write(str(self.money_list))
  88. 88 break
  89. 89
  90. 90 else:
  91. 91 print self.Red,"重新来过",self.Res
  92. 92 continue
  93. 93 else:
  94. 94 print self.Red,"资金错误,返回重来",self.Res
  95. 95 continue
  96. 96 else:
  97. 97 print self.Red,"账号不可用",self.Res
  98. 98 continue
  99. 99 def nameLock(self,a): ##########锁定账号函数
  100. 100 self.lock_name.append(a)
  101. 101 with open('lock_name.txt','r+') as fp2:
  102. 102 fp2.write(str(self.lock_name))
  103. 103
  104. 104 def shopCounts(self): #########商店部分函数
  105. 105 # for key,value in shop_list.items():
  106. 106 # print key," : ",value #打印商店内容
  107. 107 for i in range(3):
  108. 108 for key,value in self.shop_list[i].items():
  109. 109 print key,value
  110. 110
  111. 111
  112. 112 def shoping(self,b): ##########购买函数
  113. 113 while True:
  114. 114 prompts = self.Gre+"请选择你要的商品编号(q|Q,退出结算): "+self.Res
  115. 115 index = raw_input(prompts)
  116. 116 if index.upper() == "Q":
  117. 117 print self.Red,"购物结束,去结算!",self.Res
  118. 118 print b
  119. 119 self.money_list[name] = b #####结算部分
  120. 120 print self.money_list
  121. 121 with open('money_list.txt','w') as fp3: ########此处若是r+ 模式则会出现编码,暂时没弄明白!!!
  122. 122 fp3.writelines(str(self.money_list))
  123. 123 print "#"*20
  124. 124 # print fp3.read()
  125. 125 break
  126. 126 if index.isdigit():
  127. 127 index = int(index)
  128. 128 b = self.shopcar(index,b)
  129. 129 else:
  130. 130 print self.Red,"你选择的商品不存在,请确认你的选择!!!",self.Res
  131. 131 self.shopCounts()
  132. 132
  133. 133 def shopcar(self,a,b): ####购物车函数
  134. 134 try:
  135. 135 shop_money = self.shop_list[(a-1)].values()[0]
  136. 136 # print b
  137. 137 if b >= shop_money:
  138. 138 print self.Gre, "congratulations!,商品已加入购物车", self.Res
  139. 139 self.cars.append(shop_money)
  140. 140 b -= shop_money
  141. 141 self.customer_expense += shop_money
  142. 142 print self.cars
  143. 143 return b
  144. 144 else:
  145. 145 print self.Red, "账户余额可能不足哦,还剩%d" % b, self.Res
  146. 146 return b
  147. 147 except Exception,e:
  148. 148 print self.Red,"你选择的商品不存在!",self.Res
  149. 149 return b
  150. 150
  151. 151
  152. 152
  153. 153
  154. 154
  155. 155 maomao = Shop()
  156. 156
  157. 157 if __name__ == "__main__":
  158. 158 while True:
  159. 159 name = raw_input("请输入你的账号(q|Q退出):")
  160. 160
  161. 161 if name.upper() == "Q":
  162. 162 sys.exit()
  163. 163 else:
  164. 164 passwd = raw_input("请输入你的密码:")
  165. 165 b = maomao.nameCheck(name) ######接收用户检测状态值
  166. 166 c = maomao.passwdCheck(name,passwd) #####接收用户密码检测状态值
  167. 167 d = maomao.checkAfter(b,c,name) ########接收用户的moneye值
  168. 168 if str(d).isdigit() :
  169. 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. MyBatis学习(四)MyBatis一对一关联查询

    一对一关联查询即.两张表通过外键进行关联.从而达到查询外键直接获得两张表的信息.本文基于业务拓展类的方式实现. 项目骨架 配置文件conf.xml和db.properties前几节讲过.这里就不细说了 ...

  2. springboot整合阿里云视频点播接口

    官方SDK文档地址: https://help.aliyun.com/document_detail/57756.html?spm=a2c4g.11186623.6.904.4e0d3bd9VbkIC ...

  3. LeetCode Top 100 Liked 点赞最高的 100 道算法题

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 公众号:负雪明烛 本文关键词:刷题顺序,刷题路径,好题,top100,怎么刷题,Leet ...

  4. 【LeetCode】138. Copy List with Random Pointer 复制带随机指针的链表 解题报告(Python)

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

  5. 「Codeforces 468C」Hack it!

    Description 定义 \(f(x)\) 表示 \(x\) 的各个数位之和.现在要求 \(\sum_{i=l}^rf(i)\bmod a\). 显然 ans=solve(l,r)%a; if(a ...

  6. 使用pypy3加速python运行

    从这里下载对应OS版本的安装包 解压: tar xf pypy-x.y.z.tar.bz2 然后通过./pypy-x.y.z/bin/pypy可以直接进入console 可以使用pip安装包: ./p ...

  7. Hadoop问题解决记录

    # 1.解决Unable to load native-hadoop library for your platform告警 安装Hadoop启动之后总有警告:Unable to load nativ ...

  8. EFCore:关于DDD中值对象(Owns)无法更新数值

    最近使用DDD+EFCore时,使用EFCore提供的OwnsOne或者OwnsMany关联值对象保存数据,没想到遇到一个很奇怪的问题:值对象中的值竟然无法被EFCore保存!也没有抛出任何异常!我瞬 ...

  9. 初识python 之 爬虫:爬取双色球中奖号码信息

    人生还是要有梦想的,毕竟还有python.比如,通过python来搞一搞彩票(双色球).注:此文仅用于python学习,结果仅作参考.用到知识点:1.爬取网页基础数据2.将数据写入excel文件3.将 ...

  10. 日志收集系统系列(三)之LogAgent

    一.什么是LogAhent 类似于在linux下通过tail的方法读日志文件,将读取的内容发给kafka,这里的tailf是可以动态变化的,当配置文件发生变化时,可以通知我们程序自动增加需要增加的配置 ...