老僧& 2021-04-07 22:12 采纳率: 50%
浏览 51
已结题

python,面向对象,此题何解

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

要求:

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

 

  • 写回答

1条回答 默认 最新

  • 天元浪子 Python领域优质创作者 2021-04-08 10:57
    关注
    # -*- 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次后,你猜对了
    游戏结束!
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 11月18日

悬赏问题

  • ¥15 求解答,怎么数码管中这么加入闹钟或者传感器,这应该怎么加入相应的代码
  • ¥15 scottplot5
  • ¥30 想问问这个建模怎么编程没有思路
  • ¥15 关于imageENview(ImageEN)中新建图层并根据鼠标位置添加图标
  • ¥100 用两台电脑局域联网进行MT5的EA参数优化,但是连接不上
  • ¥15 FastAPI报错: AsyncSession不是有效Pydantic类型
  • ¥50 这Mac系统提示虚拟内存不足,怎么解决
  • ¥15 Rs232电路无法收发数据,求帮助
  • ¥15 百度cookie扫码登录器
  • ¥15 微机原理汇编语言debug调试实验