零基础学python-2.22 回到我们的游戏 加入文件和异常

在上一节当中,我们引入了类与函数,这一节我们来处理一些异常和增加把成绩记录在硬盘里面的功能

先回顾一下上节的代码:

#建立游戏的核心玩法类
class core(object):
    version=1.0
    def guessNum(self):
        secret=random.randint(1,100)#生成随机数
        #print (secret)
        time=6#猜数字的次数
        guess=0#输入的数字
        minNum=0#最小随机数
        maxNum=100#最大随机数
        print("---------欢迎来到猜数字的地方,请开始---------")
        print("提示:输入-1可以随时退出游戏")
        while guess!=secret and time>=0:#条件
            guess=int(input("*数字区间0-100,请输入你猜的数字:"))
            print("你输入数字是:",guess)
            if guess==secret:
                return (7-time)#为什么是7,因为我们上面的条件是0-6,所以是7次
                print("猜对了,真厉害")
            elif guess==-1:
                print("提示:你强行退出,这一次不记录成绩")
                return 'exit'
            else:
                #当不等于的时候,还需要打印出相应的区间,让用户更容易使用
                if guess<secret:
                    if minNum<guess:
                        minNum=guess
                    print("提示:你的猜数小于正确答案")            
                    print("提示:正确的数字区间是:",minNum,"-",maxNum)
                else:
                    if maxNum>guess:
                        maxNum=guess
                    print("提示:你的猜数大于正确答案")
                    print("提示:正确的数字区间是:",minNum,"-",maxNum)
                print("太遗憾,你猜错了,你还有",time,"次机会")
            guess=0
            time-=1

class User(object):
    userName=""#用户名
    resultDict={}#结果列表
    playTime=1#玩的次数
    def setUserName(self,name='ray'):
        self.userName=name
    def setResultDict(self,guessTime):
        self.resultDict[self.playTime]=guessTime
        self.playTime+=1
    
#下面是运行代码,类似于java的main函数
import random
exitAllTag=0#记录是否全部退出游戏,1:退出
exitGameTag=0#记录是否退出个人游戏部分,1:退出
userDict={}#记录用户组数据
result=''#猜数字游戏返回的结果
#处理逻辑:
#1.先输入名称,如果不是退出,可以直接进入游戏
#2.进行游戏的过程中,可以一直玩,也可以强退,强退没成绩
#3.當用戶進行完遊戲,記錄用戶的成績
#4.噹所有的用戶都退出後,打印所有的成績
while exitAllTag!=1:   
    userName=input("请输入你的名字:")
    #设置用户的名字
    user=User()
    user.setUserName(userName)
    exitGameTag=0
    if userName=='exit':
            exitAllTag=1
            break;
    else:
        #进行游戏
        while exitGameTag!=1:            
            result=core().guessNum()#这里存在性能问题,最好使用单例模式
            if result=='exit':
                exitGameTag=1
                #当用户退出时,把成绩记录下来
                userDict[userName]=user.resultDict;
                break
            else:
                #设置用户的结果
                user.setResultDict(result)
                for e in user.resultDict:
                    print(e,user.resultDict[e])
print("游戏结束")
#输出所有人的成绩
for name in userDict:
    print("用户的名字:"+name)
    for e in userDict[name]:
        print(e,userDict[name][e])

我们现在分两步改进

1.在核心代码部分加上异常处理

2.在最后部分加上把成绩记录在硬盘里面的功能

我们改进后的代码:


#建立游戏的核心玩法类
class core(object):
    version=1.0
    def guessNum(self):
        try:
            secret=random.randint(1,100)#生成随机数
            #print (secret)
            time=6#猜数字的次数
            guess=0#输入的数字
            minNum=0#最小随机数
            maxNum=100#最大随机数
            print("---------欢迎来到猜数字的地方,请开始---------")
            print("提示:输入-1可以随时退出游戏")
            while guess!=secret and time>=0:#条件
                guess=int(input("*数字区间0-100,请输入你猜的数字:"))
                print("你输入数字是:",guess)
                if guess==secret:
                    return (7-time)#为什么是7,因为我们上面的条件是0-6,所以是7次
                    print("猜对了,真厉害")
                elif guess==-1:
                    print("提示:你强行退出,这一次不记录成绩")
                    return 'exit'
                else:
                    #当不等于的时候,还需要打印出相应的区间,让用户更容易使用
                    if guess<secret:
                        if minNum<guess:
                            minNum=guess
                        print("提示:你的猜数小于正确答案")            
                        print("提示:正确的数字区间是:",minNum,"-",maxNum)
                    else:
                        if maxNum>guess:
                            maxNum=guess
                        print("提示:你的猜数大于正确答案")
                        print("提示:正确的数字区间是:",minNum,"-",maxNum)
                    print("太遗憾,你猜错了,你还有",time,"次机会")
                guess=0
                time-=1
        except TypeError as e:
            print("你输入有误,成绩作废")
            return 'exit'
        except ValueError as e:
            print("你输入有误,成绩作废")
            return 'exit'
            

class User(object):
    userName=""#用户名
    resultDict={}#结果列表
    playTime=1#玩的次数
    def setUserName(self,name='ray'):
        self.userName=name
    def setResultDict(self,guessTime):
        self.resultDict[self.playTime]=guessTime
        self.playTime+=1
    
#下面是运行代码,类似于java的main函数
import random
import datetime

exitAllTag=0#记录是否全部退出游戏,1:退出
exitGameTag=0#记录是否退出个人游戏部分,1:退出
userDict={}#记录用户组数据
result=''#猜数字游戏返回的结果
#处理逻辑:
#1.先输入名称,如果不是退出,可以直接进入游戏
#2.进行游戏的过程中,可以一直玩,也可以强退,强退没成绩
#3.當用戶進行完遊戲,記錄用戶的成績
#4.噹所有的用戶都退出後,打印所有的成績
while exitAllTag!=1:   
    userName=input("请输入你的名字:")
    #设置用户的名字
    user=User()
    user.setUserName(userName)
    exitGameTag=0
    if userName=='exit':
            exitAllTag=1
            break;
    else:
        #进行游戏
        while exitGameTag!=1:            
            result=core().guessNum()#这里存在性能问题,最好使用单例模式
            if result=='exit':
                exitGameTag=1
                #当用户退出时,把成绩记录下来
                userDict[userName]=user.resultDict;
                break
            else:
                #设置用户的结果
                user.setResultDict(result)
                for e in user.resultDict:
                    print(e,user.resultDict[e])
print("游戏结束")
#输出所有人的成绩
for name in userDict:
    print("用户的名字:"+name)
    for e in userDict[name]:
        print(e,userDict[name][e])
try:
    handler=open("results.txt",'w')
    for name in userDict:
        now = now.strftime("%Y-%m-%d %H:%M:%S")
        handler.write("记录的时间:"+now)
        handler.write("用户的名字:"+name)
        for e in userDict[name]:
            handler.write(e)
            handler.write(userDict[name][e])
    handler.close()
except IOError as e:
    print(e)

就说到这里,谢谢大家

------------------------------------------------------------------

点击跳转零基础学python-目录


版权声明:本文为博主原创文章,未经博主允许不得转载。

posted on 2015-08-14 15:19  李灵晖  阅读(118)  评论(0编辑  收藏  举报