python3.6.1建立模块_零基础学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

if minNum

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

if minNum

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);

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

分享到:

18e900b8666ce6f233d25ec02f95ee59.png

72dd548719f0ace4d5f9bca64e1d7715.png

2015-08-16 00:22

浏览 243

评论

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值