python,面向对象,此题何解

根据描述设计Game类:设计一个猜数游戏,游戏规则:先预设一个整数x,让用户通过键盘输入所猜的数,如果大于x,显示“遗憾,太大了”;小于预设的数,显示“遗憾,太小了”,如此循环,直至猜中该数,显示“尝试N次后,你猜对了”,其中N是用户输入数字的次数。

要求:

  1. 类的属性包括:N(记录用户输入数字的次数),x(预设的整数)
  2. 对象方法包括:guess(self)
  3. 使用循环让程序一直跑下去,除非用户猜对了

 

# -*- coding: utf-8 -*-

import random

class GuessNumber:
    """猜数游戏
    
    游戏开始前,电脑会在[low,up]闭区间内随机选中一个整数x作为猜测目标。
    游戏开始后,游戏玩家给出一个猜测值,并根据电脑的反馈给出下一个猜测值,直至猜中为止。
    以猜测次数N作为游戏考核指标。
    """
    
    def __init__(self, low=1, up=256):
        """构造函数
        
        low     - 猜测目标下限,默认值为1
        up      - 猜测目标上限,默认值为256
        """
        
        self.low = low
        self.up = up
        self.x = random.randint(self.low, self.up)
        self.N = 0
    
    def guess(self):
        """读取游戏玩家猜测的数字"""
        
        while True:
            y_str = input('请输入你猜测的数字,该数字应在闭区间[%d,%d]范围内,按回车键确认:'%(self.low, self.up))
            try:
                y = int(y_str)
            except:
                print('%s不是一个合乎规则的整数,请重新输入!'%y_str)
                continue
            
            if y < self.low or y > self.up:
                print('该数字超出了闭区间[%d,%d]的范围,请重新输入!'%(self.low, self.up))
            else:
                self.N += 1
                break
                
        return y
    
    def start(self):
        """开始游戏"""
        
        while True:
            y = self.guess()
            if y > self.x:
                print('遗憾,太大了')
            elif y < self.x:
                print('遗憾,太小了')
            else:
                print('尝试%d次后,你猜对了'%self.N)
                break
        
        print('游戏结束!')

if __name__ == '__main__':
    game = GuessNumber()
    game.start()

下面是一次测试的记录:

请输入你猜测的数字,该数字应在闭区间[1,256]范围内,按回车键确认:ty
ty不是一个合乎规则的整数,请重新输入!
请输入你猜测的数字,该数字应在闭区间[1,256]范围内,按回车键确认:300
该数字超出了闭区间[1,256]的范围,请重新输入!
请输入你猜测的数字,该数字应在闭区间[1,256]范围内,按回车键确认:128
遗憾,太大了
请输入你猜测的数字,该数字应在闭区间[1,256]范围内,按回车键确认:64
遗憾,太大了
请输入你猜测的数字,该数字应在闭区间[1,256]范围内,按回车键确认:32
遗憾,太大了
请输入你猜测的数字,该数字应在闭区间[1,256]范围内,按回车键确认:16
遗憾,太大了
请输入你猜测的数字,该数字应在闭区间[1,256]范围内,按回车键确认:8
遗憾,太大了
请输入你猜测的数字,该数字应在闭区间[1,256]范围内,按回车键确认:4
尝试6次后,你猜对了
游戏结束!