零基础学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);

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

时间: 2024-11-29 03:38:02

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

[零基础学python]啰嗦的除法

除法啰嗦的,不仅是python. 整数除以整数 看官请在启动idle之后,练习下面的运算: >>> 2/5 0 >>> 2.0/5 0.4 >>> 2/5.0 0.4 >>> 2.0/5.0 0.4 看到没有?麻烦出来了,如果从小学数学知识除法,以上四个运算结果都应该是0.4.但我们看到的后三个符合,第一个居然结果是0.why? 因为,在python里面有一个规定,像2/5中的除法这样,是要取整.2除以5,商是0(整数),余数是5(整

[零基础学python]一些关于Python的事情

如同学习任何一种自然语言比如英语.或者其它编程语言比如汇编(这个我喜欢,可惜多年之后,已经好久没有用过了)一样,总要说一说有关这种语言的事情,有的可能就是八卦,越八卦的越容易传播.当然,以下的所有说法中,难免充满了自恋,因为你看不到说Python的坏话.这也好理解,如果要挑缺点是比较容易的事情,但是找优点,不管是对人还是对其它事务,都是困难的.这也许是人的劣根之所在吧,喜欢挑别人的刺儿,从而彰显自己在那方面高于对方.特别是在我们这个麻将文化充斥的神奇地方,更多了. 废话少说点(已经不少了),进入

[零基础学python]为什么要开设本栏目

这个栏目的名称叫做"零基础学Python". 现在网上已经有不少学习python的课程,其中也不乏精品.按理说,不缺少我这个基础类型的课程了.但是,我注意到一个问题,不管是课程还是出版的书,大多数是面向已经有一定编程经验的人写的或者讲的,也就是对这些朋友来讲,python已经不是他们的第一门高级编程语言.据我所知,目前国内很多大学都是将C之类的做为学生的第一门语言. 然而,在我看来,python是非常适合做为学习高级语言编程的第一门语言的.有一本书,名字叫<与孩子一起学编程>

[零基础学python]玩转字符串(1)

如果对自然语言分类,有很多中分法,比如英语.法语.汉语等,这种分法是最常见的.在语言学里面,也有对语言的分类方法,比如什么什么语系之类的.我这里提出一种分法,这种分法尚未得到广大人民群众和研究者的广泛认同,但是,我相信那句"真理是掌握在少数人的手里",至少在这里可以用来给自己壮壮胆. 我的分法:一种是语言中的两个元素(比如两个字)和在一起,出来一个新的元素(比如新的字):另外一种是两个元素和在一起,知识两个元素并列.比如"好"和"人",两个元素和

[零基础学python]玩转字符串(2)

上一章中已经讲到连接两个字符串的一种方法.复习一下: >>> a= 'py' >>> b= 'thon' >>> a+b 'python' 既然这是一种方法,言外之意,还有另外一种方法. 连接字符串的方法2 在说方法2之前,先说明一下什么是占位符,此前在讲解变量(参数)的时候,提到了占位符,这里对占位符做一个比较严格的定义: 来自百度百科的定义: 顾名思义,占位符就是先占住一个固定的位置,等着你再往里面添加内容的符号. 根据这个定义,在python里面

[零基础学python]集成开发环境(IDE)

当安装好python之后,其实就已经可以进行开发了.下面我们开始写第一行python代码. 值得纪念的时刻:Hello world 如果是用windows,请打开CMD,并执行python. 如果是UNIX类的,就运行shell,并执行python. 都会出现如下内容: Python 2.7.6 (default, Nov 13 2013, 19:24:16) [GCC 4.6.3] on linux2 Type "help", "copyright", "

[零基础学python]python中的四则运算

一提到计算机,当然现在更多人把她叫做电脑,这两个词都是指computer.不管什么,只要提到她,普遍都会想到她能够比较快地做加减乘除,甚至乘方开方等.乃至于,有的人在口语中区分不开计算机和计算器. 那么,做为零基础学习这,也就从计算小学数学题目开始吧.因为从这里开始,数学的基础知识列为肯定过关了. 复习 还是先来重温一下伟大时刻,打印hello world. 打开电脑,让python idle运行起来,然后输入: >>> print 'Hello, World' Hello, World

[零基础学python]开始真正编程

通过对四则运算的学习,已经初步接触了Python中内容,如果看官是零基础的学习者,可能有点迷惑了.难道在IDE里面敲几个命令,然后看到结果,就算编程了?这也不是那些能够自动运行的程序呀? 的确.到目前位置,还不能算编程,只能算会用一些指令(或者叫做命令)来做点简单的工作.并且看官所在的那个IDE界面,也是输入指令用的. 列位稍安勿躁,下面我们就学习如何编写一个真正的程序.工具还是那个IDLE,但是,请大家谨记,对于一个真正的程序来讲,用什么工具是无所谓的,只要能够把指令写进去,比如用记事本也可以

零基础学python》(第二版)

---恢复内容开始--- 零基础学python>(第二版) python学习手册 可以离线下载,  .chn格式, 插入小幽默笑话,在学习累的时候看看笑话 放松一下 欢迎下载转载,请注明出处,谢谢 下载地址          http://files.cnblogs.com/files/xuchunlin/%E3%80%8A%E9%9B%B6%E5%9F%BA%E7%A1%80%E5%AD%A6python%E3%80%8B%EF%BC%88%E7%AC%AC%E4%BA%8C%E7%89%88

[零基础学python]初识永远强大的函数

函数,对于人类来讲,能够发展到这个数学思维层次,是一个飞跃.可以说,它的提出,直接加快了现代科技和社会的发展,不论是现代的任何科技门类,乃至于经济学.政治学.社会学等,都已经普遍使用函数. 下面一段来自维基百科(在本教程中,大量的定义来自维基百科,因为它真的很百科):函数词条 [函数这个数学名词是莱布尼兹在1694年开始使用的,以描述曲线的一个相关量,如曲线的斜率或者曲线上的某一点.莱布尼兹所指的函数现在被称作可导函数,数学家之外的普通人一般接触到的函数即属此类.对于可导函数可以讨论它的极限和导