文档章节

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

raylee2015
 raylee2015
发布于 2015/08/24 14:38
字数 1527
阅读 7
收藏 0

回顾一下我们的游戏:

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


 




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

© 著作权归作者所有

共有 人打赏支持
raylee2015
粉丝 6
博文 265
码字总数 44224
作品 0
江门
私信 提问
一套来自年薪40W的Python大神分享的学习体系

不论你是对Python初出茅庐,还是如指诸掌,这篇文章对你的收获总归还是有的啦,可能只是程度的问题。好了不扯远了,来说正题,下面在分享这套体系前还是要让Python做一下“自我介绍”。 1.Py...

Python共读
2018/08/27
0
0
Python爬虫解析html:lxml的HtmlElement对象获取和设置inner html

我在我的个人博客“猿人学网站”和公众号“猿人学Python”上写Python教程,有兴趣的可以关注公众号和网站。 Python的lxml是一个相当强悍的解析html、XML的模块,最新版本支持的python版本从2...

呆木木人儿
03/20
0
0
菜鸟学Python,上半年文章大汇总

一晃大半年过去了,时间过的真快啊!上半年我一共发表了原创的文章有近45篇,其中有一些是粉丝投稿的!后台总有人留言说查找历史文章不方便,怎么办?为了方便大家阅读,我把上半年的原创文章...

菜鸟学python
2018/06/24
0
0
十问Python,所有关于Python的疑问,由十年pythoner给你作答!

为什么要学习Python编程语言?哪些人适合学习Python? 先回答第一个被初学编程的朋友问到最多的问题,为什么要学习Python编程语言? 答:现在信息更新的非常快速,又迎来了大数据的时代, 各...

Python新世界
2018/07/20
0
0
荐书丨确认过眼神,这份Python书单一定是你的菜

点击上方“程序人生”,选择“置顶公众号” 第一时间关注程序猿(媛)身边的故事 Python 是军刀型的开源工具,被广泛应用于Web 开发、爬虫、数据清洗、自然语言处理、机器学习和人工智能等方...

csdnsevenn
2018/05/05
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Go Timer实现原理剖析

简介 快速使用 操作介绍

恋恋美食
21分钟前
2
0
记录一个奇怪的问题

环境:jdk1.8虚拟机参数:-verbose:gc -XX:+PrintGCDetails -Xmx20m -Xms20m -Xmn10m -XX:SurvivorRatio=8  -XX:+HeapDumpOnOutOfMemoryError 可以看出,eden占8M却放不下6M数据,发生了......

暗中观察
49分钟前
2
0
【git搭建】创建多个git账号

实习开发中我们可能一个机子上配置多个git账号,如github.com,oschina.com 或者工作账号,私人账号,这时候就2个账号用一个key,肯定会冲突,有一个会提示没权限(账号和密码对应不上) ssh ...

echojson
52分钟前
2
0
rabbitmq安装教程

RabbitMQ有Windows与Linux版本的,这里先写Windows版本的安装。 以前安装软件总是在百度上找某某安装教程,结果能按照教程安装好的软件真的不多。想起先前以为大牛说的一句话,去官网按照官网...

em_aaron
今天
7
0
Android 贝塞尔曲线实践——波浪式运动

一、波浪效果如下 贝塞尔曲线自定义波浪效果的案例很多,同样方法也很简单,大多数和本案例一样使用二次贝塞尔曲线实现,同样还有一种是PathMeasure的方式,这里我们后续补充,先来看贝塞尔曲...

IamOkay
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部