zoukankan      html  css  js  c++  java
  • 零基础学python-3.6 根据模块结构 改进我们的游戏

    回顾一下我们的游戏:

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

    改进的地方:

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

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

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

    'GuessNum.py--猜数字游戏'
    
    import random
    import 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);
    
    


     




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

  • 相关阅读:
    Oracle TRCA 工具 说明
    Oracle TTS ORA39322: Cannot use transportable tablespace with different timezone version 说明
    Oracle 传输表空间(Transportable Tablespaces) 示例(二) 跨操作系统迁移表空间(endianness格式不同)
    易于在各手机平台移植的设计(转)
    Symbian 学习资源
    项目经理修炼手册
    ZIP 算法详解 (转!)
    google Android OS 学习资源、资料和笔记汇总(要看的)
    小白兔的求职遭遇
    数据结构和算法学习笔记(1)
  • 原文地址:https://www.cnblogs.com/raylee2007/p/4774512.html
Copyright © 2011-2022 走看看