2.22 回到我们的游戏 加入文件和异常

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

先回顾一下上节的代码:

#建立游戏的核心玩法类class core(object):version=1.0def 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=guessprint("提示:你的猜数小于正确答案")print("提示:正确的数字区间是:",minNum,"-",maxNum)else:if maxNum>guess:maxNum=guessprint("提示:你的猜数大于正确答案")print("提示:正确的数字区间是:",minNum,"-",maxNum)print("太遗憾,你猜错了,你还有",time,"次机会")guess=0time-=1class User(object):userName=""#用户名resultDict={}#结果列表playTime=1#玩的次数def setUserName(self,name='ray'):self.userName=namedef setResultDict(self,guessTime):self.resultDict[self.playTime]=guessTimeself.playTime+=1#下面是运行代码,类似于java的main函数import randomexitAllTag=0#记录是否全部退出游戏,1:退出exitGameTag=0#记录是否退出个人游戏部分,1:退出userDict={}#记录用户组数据result=''#猜数字游戏返回的结果#处理逻辑:#1.先输入名称,如果不是退出,可以直接进入游戏#2.进行游戏的过程中,可以一直玩,也可以强退,强退没成绩#3.當用戶進行完遊戲,記錄用戶的成績#4.噹所有的用戶都退出後,打印所有的成績while exitAllTag!=1:userName=input("请输入你的名字:")#设置用户的名字user=User()user.setUserName(userName)exitGameTag=0if userName=='exit':exitAllTag=1break;else:#进行游戏while exitGameTag!=1:result=core().guessNum()#这里存在性能问题,最好使用单例模式if result=='exit':exitGameTag=1#当用户退出时,把成绩记录下来userDict[userName]=user.resultDict;breakelse:#设置用户的结果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.0def 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=guessprint("提示:你的猜数小于正确答案")print("提示:正确的数字区间是:",minNum,"-",maxNum)else:if maxNum>guess:maxNum=guessprint("提示:你的猜数大于正确答案")print("提示:正确的数字区间是:",minNum,"-",maxNum)print("太遗憾,你猜错了,你还有",time,"次机会")guess=0time-=1except 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=namedef setResultDict(self,guessTime):self.resultDict[self.playTime]=guessTimeself.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=0if userName=='exit':exitAllTag=1break;else:#进行游戏while exitGameTag!=1:result=core().guessNum()#这里存在性能问题,最好使用单例模式if result=='exit':exitGameTag=1#当用户退出时,把成绩记录下来userDict[userName]=user.resultDict;breakelse:#设置用户的结果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-目录

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

奢侈地享受旅不问人,行随己意的潇洒。

2.22 回到我们的游戏 加入文件和异常

相关文章:

你感兴趣的文章:

标签云: