码迷,mamicode.com
首页 > 编程语言 > 详细

Python小练习更改版(更改一部分代码,与错误)

时间:2017-05-20 23:37:02      阅读:331      评论:0      收藏:0      [点我收藏+]

标签:联系   部分   custom   sdi   money   ping   customer   except   break   

  很佩服那些大神们,每天都能抽出时间来写博客,在我的计划里每天都能写写新学习的东西,但是做起来来好难,每每都会懒惰,导致学习进度一拖再拖; 

  上传完第一篇练习后才发现跟预期想的不一样,解题的思路还是一片混乱,在写一个程序之前,还是应该有一个需求流程图,这样在码代码的时候,才不会抓耳挠腮; 

  加油!

   此次,更改了一部分代码,将第一次的错误与未完成的部分完成,增加了注释,使读者能够有所参考; 

#!/usr/bin/env python
#coding:utf-8
import sys
class Shop(object):
    def __init__(self):
        self.Red = "\033[1;31m"
        self.Gre = "\033[1;32m"
        self.Res = "\033[0m"
        self.shop_list = [{"1:phone": 2000}, {"2:ipad": 1500}, {"3:ice_box": 500}]
        self.cars = []
        self.customer_expense = 0
    with open(user_file.txt,r) as fp:
            user_list = eval(fp.readline())  # 用户的名字与密码转换成字典
    with open(lock_name.txt,r) as fp2:
            lock_name = eval(fp2.readline())  # 锁定的用户为列表
    with open(money_list.txt,r) as fp3:
            money_list = eval(fp3.readline())

    def nameCheck(self,a):                            #########名字检测状态函数
        if a in self.user_list and a not in self.lock_name:
            return 0 #如果名字在user_file里面,且没在锁定文件里面的话,返回0
        elif a in self.user_list and a in self.lock_name:
            return 1 #名字在user_file里面,且被锁定,返回1
        else:
            return 2 #否则返回2

    def passwdCheck(self,a,b):                       ##########密码检测函数
        count = 3
        while count > 1:
            try:
                if b == self.user_list[a]:
                    return 0
                else:
                    count -= 1
                    print self.Red,"密码错误,剩余%d次" % count,self.Res
                    b = raw_input("请再次输入你的密码: ")   ######更改部分给用户机会输入密码
            except KeyError :
                 return 2
        else:
            return 1


    def checkAfter(self,b,c,dd):                         ##########状态检测完成后的动作
        if b == 0 and c == 0  :
            print self.Gre,"恭喜你(%s),登陆成功!!!,欢迎你来到我们的商店!"%dd,self.Res #成功后动作进到商店
            self.shopCounts()
            return self.money_list[dd]

        elif b == 1 :
            print self.Red,"对不起,你(%s)的账号被锁定,请联系客服!!!"%dd,self.Res  #不成功则动作回到初始位置
            pass
        elif c == 1 :
            print self.Red,"密码错误,账号将被锁定",self.Res
            self.nameLock(dd)
        else:
            prompts = self.Red+"账号(%s)不存在,是否创建用户(q|Q退出): "%dd+self.Res#不存在则动作到注册位置
            confirm = raw_input(prompts)
            if confirm.upper() == "Q":        #######增加退出接口
                pass
            else:
                self.signName()


    def signName(self):                         #########注册账号函数
        while True:
            sign_name = raw_input("请输入你要注册的账号(q|Q退出!):")
            value = self.nameCheck(sign_name)
            if sign_name.upper() == "Q":       #####增加退出接口
                break
            passwd = raw_input("输入你的密码: ")
            if value == 2:
                print self.Gre,"congratulations,账号可用",self.Res
                money = raw_input("输入账号资金: ")
                if money.isdigit():
                    print self.Red,"""name:    %s
passwd:    %s
money:    %d""" %(sign_name,passwd,int(money)),self.Res
                    confirm = raw_input("是否确认以上信息(y|Y确认,其它返回重来): ")
                    if confirm.upper() == "Y":
                        self.user_list.setdefault(sign_name, passwd)   #######更改部分,用户不确认也会将信息存入文件
                        self.money_list.setdefault(sign_name, money)   #######
                        with open(user_file.txt,r+) as fp:
                            fp.write(str(self.user_list))
                        with open(money_list.txt,r+) as fp2:
                            fp2.write(str(self.money_list))
                        break

                    else:
                        print self.Red,"重新来过",self.Res
                        continue
                else:
                    print self.Red,"资金错误,返回重来",self.Res
                    continue
            else:
                print self.Red,"账号不可用",self.Res
                continue
    def nameLock(self,a):                  ##########锁定账号函数
        self.lock_name.append(a)
        with open(lock_name.txt,r+) as fp:
            fp.write(str(self.lock_name))

    def shopCounts(self):               #########商店部分函数
        # for key,value in shop_list.items():
        #     print key," : ",value #打印商店内容
        for i in range(3):
            for key,value in self.shop_list[i].items():
                print key,value


    def shoping(self,b):          ##########购买函数
        while True:
            prompts = self.Gre+"请选择你要的商品编号(q|Q,退出结算): "+self.Res
            index = raw_input(prompts)
            if index.upper() == "Q":
                print self.Red,"购物结束,去结算!",self.Res
                self.money_list[name]=str(b)   #####结算部分
                with open(money_list.txt,r+) as fp5:
                    fp5.write(str(self.money_list))
                break
            if index.isdigit():
                index = int(index)
                b = self.shopcar(index,b)
            else:
                print self.Red,"你选择的商品不存在,请确认你的选择!!!",self.Res
                self.shopCounts()

    def shopcar(self,a,b):        ####购物车函数
        shop_money = self.shop_list[(a-1)].values()[0]
        # print b
        if b >= shop_money:
            print self.Gre,"congratulations!,商品已加入购物车",self.Res
            self.cars.append(shop_money)
            b -= shop_money
            self.customer_expense += shop_money
            print self.cars
            return b
        else :
            print self.Red,"账户余额可能不足哦,还剩%d"%b,self.Res
            return b



maomao = Shop()

if __name__  == "__main__":
    while True:
        name = raw_input("请输入你的账号(q|Q退出):")

        if name.upper() == "Q":
            sys.exit()
        else:
            passwd = raw_input("请输入你的密码:")
            b = maomao.nameCheck(name) ######接收用户检测状态值
            c = maomao.passwdCheck(name,passwd)   #####接收用户密码检测状态值
            d = maomao.checkAfter(b,c,name)  ########接收用户的moneye值
            maomao.shoping(int(d))   ####处理用户购物动作

加油,每天进步一点点,都是不一样的自己; 

  

Python小练习更改版(更改一部分代码,与错误)

标签:联系   部分   custom   sdi   money   ping   customer   except   break   

原文地址:http://www.cnblogs.com/Mail-maomao/p/6883506.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!