最近加入了一个Python学习小组来督促自己学习,一起从基础的Python知识学习,组长提出了让大家写一个猜数字的小练习,由于最近年底比较忙,于是到现在才有空做了一个这个。

小游戏已经实现的功能:
1.有菜单(开始游戏,退出游戏)
2.每次猜数后有猜数范围提示
3.允许小数输入
4.目标值随机生成
5.程序可循环执行
6.对非数字字符输入有处理(例如:提示输入非法,请重新输入)
7.对游戏开始到结束的过程计时
下部打算完善的内容
制作成图形化界面而非控制台程序

目前基本的功能要求已经实现,验证部分采用的是正则表达式,但是界面化这个功能还没有实现,初步想尝试使用Tkinter,等学习完界面相关知识之后,会再次完善这个小游戏,下面是代码:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import time
import random
import re

class GuessNum():
    '''
    猜数字游戏,主要由选择是否游戏、输入判断、游戏过程这几部分组成
    '''
    def __int__(self, chose, n, gNum, aNum, star):
        '''
        初始化所有的值
        '''
        self.chose = ''
        self.n = ''
        self.aNum = ''
        self.gNum = ''
        self.star = ''

    def enter(self):
        self.chose = str(input('是否进入猜数字的游戏呢?[Y/N]:')).upper()
        if self.chose == 'N':
            exit('太遗憾了,希望你下次能来挑战一下。')
        elif self.chose == 'Y':
            pass
            self.star = time.time()
        else:
            print('你输入的字符有误!')
            self.enter()

    def checkNum(self):
        self.n = input('请输入一个0到10之间的数(至多一位小数):')
        if not re.findall('^[0-9]?\.?[0-9]?$' ,self.n):
                print('你输入的内容不符合要求!请重新输入数字.')
                self.checkNum()
        else:
            self.gNum = round(float(self.n), 1)

    def play(self):
        self.aNum = round(random.random() * 10, 1)
        while self.gNum != self.aNum:
            if self.gNum > self.aNum:
                print('偏大了。')
                self.checkNum()
            else:
                print('偏小了。')
                self.checkNum()
            break
        end = time.time()
        timeG = end - self.star
        print('你竟然花了 %.2f 秒就答对了,正确答案就是 %.1f 。' % (timeG, self.aNum))
        chose2 = self.chose
        return chose2

def main():
    run = GuessNum()
    run.enter()
    run.checkNum()
    run.play()
    if run.play() == 'Y':
        main()
    else:
        exit('期待你下次再来挑战!')

if __name__ == '__main__':
    try:
        main()
    except EOFError:
        pass