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

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

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

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. centos使用shell脚本定时备份docker中的mysql数据库

    shell脚本 #!/bin/bash #容器ID container_id="6b1faea2b4d7" #登录用户名 mysql_user="root" # ...

  2. JAVA实现查询栏目、类别(菜单)返回树结构(递归)

    其中Channel.java是栏目结构,ChannelDto是我自己封装的返回给前端的数据,可以根据自己的来 这个的逻辑就是双重循环遍历每个类别,然后判断如果当前类别是其他类别的父级,那么就把其他类别 ...

  3. 【九度OJ】题目1153:括号匹配问题 解题报告

    [九度OJ]题目1153:括号匹配问题 解题报告 标签(空格分隔): 九度OJ http://ac.jobdu.com/problem.php?pid=1153 题目描述: 在某个字符串(长度不超过1 ...

  4. 【LeetCode】393. UTF-8 Validation 解题报告(Python)

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

  5. 【LeetCode】877. Stone Game 解题报告(Python & C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 数学 双函数 单函数 + 记忆化递归 动态规划 日期 ...

  6. 1371 - Energetic Pandas

    1371 - Energetic Pandas   PDF (English) Statistics Forum Time Limit: 2 second(s) Memory Limit: 32 MB ...

  7. Docker 与 K8S学习笔记(八)—— 自定义容器网络

    我们在上一篇中介绍了Docker中三种网络,none.host和bridge,除了这三种网络,Docker还允许我们创建自定义网络,当我们要创建自定义网络时,Docker提供了三种网络驱动供我们选择: ...

  8. 小白自制Linux开发板(第二季 V3s篇) 一. 换个核心再来一次

    1.前言 大家心心念念(个人认为)的小白自制开发板全新系列正式来了,之前我们使用全志的F1C200s芯片制作了一个小电脑,众所周知,调试很艰难,坑也很多,以至于墨云到现在还是没找到对应的补救方案,为了 ...

  9. html+css+JavaScript实现爱恩斯坦棋游戏

    title: "html+css+JavaScript实现爱恩斯坦棋游戏" author: Sun-Wind date: December 30, 2021 背景:本贴将基于前端的 ...

  10. 论文翻译:2020_Generative Adversarial Network based Acoustic Echo Cancellation

    论文地址:http://www.interspeech2020.org/uploadfile/pdf/Thu-1-10-5.pdf 基于GAN的回声消除 摘要 生成对抗网络(GANs)已成为语音增强( ...