零基础学python-3.6 根据模块结构 改进我们的游戏

来源:互联网 发布:淘宝双11不能付款 编辑:程序博客网 时间:2024/05/16 06:20

回顾一下我们的游戏:

#建立游戏的核心玩法类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 randomimport datetimeexitAllTag=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)

改进的地方:

1. 把打印成绩封装成函数

2.把持久化成绩封装成函数

3.在类与函数的地方加上文档字符串,使得更加清晰

 

'GuessNum.py--猜数字游戏'import randomimport time#建立游戏的核心玩法类class core(object):    'core -- 核心类'    version=1.0    def guessNum(self):        'guessNum -- 猜数字核心方法'        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(e)            print("你输入有误,成绩作废")            return 'exit'        except ValueError as e:            print(e)            print("你输入有误,成绩作废")            return 'exit'            class User(object):    'User -- 记录用户数据'    userName=""#用户名    resultDict={}#结果列表    playTime=1#玩的次数    def setUserName(self,name='ray'):        self.userName=name    def setResultDict(self,guessTime):        self.resultDict[self.playTime]=guessTime        self.playTime+=1    def printResults(userDict):    'printResults --输出所有人的成绩'    for name in userDict:        print("用户的名字:"+name)        for e in userDict[name]:            print(e,userDict[name][e])def persistResults(fileName,userDict):    '持久化成绩'    try:        handler=open(fileName,'w')        for name in userDict:            now = time.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)if __name__=='__main__':        '下面是主程序'    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("游戏结束")    #输出所有人的成绩    printResults(userDict);    #持久化成绩    persistResults("results.txt",userDict);


 




0 0