zoukankan      html  css  js  c++  java
  • 零基础学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-目录


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

  • 相关阅读:
    (二)建筑物多边形化简系列——多边形点数化简
    (一)建筑物多边形化简系列——去除噪点环
    (三)建筑物多边形化简系列——去除冗余点
    (五)建筑物多边形化简系列——最小外接矩形的获取
    vue笔记
    学习react基础知识(五)
    学习react基础知识(四)
    学习react基础知识(三)
    学习react基础知识(二)
    学习react基础知识(一)
  • 原文地址:https://www.cnblogs.com/raylee2007/p/4774520.html
Copyright © 2011-2022 走看看