技术韭菜 2024-06-04 20:27 采纳率: 58.7%
浏览 6
已结题

Python类的实例化

下列代码中,在Game类中有一句代码player = Player().gesture() ,这句代码的意思是首选用player = Player()创建对象player再调用实例方法gesture() ,还是首先访问Player类的实例方法,然后再把实例方法赋给player 。所以这里player到底是一个对象还是一个函数?


"""
猜拳游戏一般包含三种手势:石头、剪刀、布,判定规则为石头胜剪刀,
剪刀胜布,布胜石头。本实例要求编写代码,实现基于面向对象思想的人机猜拳游戏。
"""
import random

class Player:
    def __init__(self):
        self.dict = {0: '剪刀', 1: '石头', 2: '布'}
    # 手势
    def gesture(self):
        player_input = int(input("请输入(0剪刀、1石头、2布:)"))
        return self.dict[player_input]
class AIPlayer(Player):
    play_data = []
    def ai_gesture(self):
        while True:
            computer = random.randint(0, 2)
            if len(self.play_data) >= 4:
                # 获取玩家出拳的最大概率
                max_prob = max(self.play_data, key=self.play_data.count)
                if max_prob == '剪刀':
                    return '石头'
                elif max_prob == '石头':
                    return '布'
                else:
                    return '剪刀'
            else:
                return self.dict[computer]

class Game:

    def game_judge(self):
        player = Player().gesture()
        AIPlayer().play_data.append(player)
        aiplayer = AIPlayer().ai_gesture()
        if (player == '剪刀' and aiplayer == '布') or \
                (player == '石头' and aiplayer == '剪刀') \
                or (player == '布' and aiplayer == '石头'):
            print(f"电脑出的手势是{aiplayer},恭喜,你赢了!")
        elif (player == '剪刀' and aiplayer == '剪刀') or \
                (player == '石头' and aiplayer == '石头') \
                or (player == '布' and aiplayer == '布'):
            print(f"电脑出的手势是{aiplayer},打成平局了!")
        else:
            print(f"电脑出的手势是{aiplayer},你输了,再接再厉!")
    def game_start(self):
        self.game_judge()
        while True:
            option = input("是否继续:y/n\n")
            if option=='y':
                self.game_judge()
            else:
                break

if __name__ == '__main__':
    g = Game()
    g.game_start()

  • 写回答

3条回答 默认 最新

  • 关注

    player = Player().gesture() ,这句代码的意思是首先调用 Player()创建对象,但是这个对象是一个没有名字的Player对象(一般称为匿名对象),然后再调用这个匿名对象的gesture()方法,gesture()方法根据用户输入返回对应的值,player 就是gesture()方法的返回值。也就是player的值是剪刀、石头、布,这3个字符串中的一个。

    player = Player().gesture() 等价于下面两行代码:
    t = Player()
    player = t.gesture()
    t 只是一个中间变量,可以换成任意可用名称。player 是gesture()方法的返回值,是根据用户输入,从字典中返回的对应值。比如,用户输入0,player的值就是 剪刀

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 6月15日
  • 已采纳回答 6月7日
  • 创建了问题 6月4日

悬赏问题

  • ¥200 csgo2的viewmatrix值是否还有别的获取方式
  • ¥15 Stable Diffusion,用Ebsynth utility在视频选帧图重绘,第一步报错,蒙版和帧图没法生成,怎么处理啊
  • ¥15 请把下列每一行代码完整地读懂并注释出来
  • ¥15 pycharm运行main文件,显示没有conda环境
  • ¥15 寻找公式识别开发,自动识别整页文档、图像公式的软件
  • ¥15 为什么eclipse不能再下载了?
  • ¥15 编辑cmake lists 明明写了project项目名,但是还是报错怎么回事
  • ¥15 关于#计算机视觉#的问题:求一份高质量桥梁多病害数据集
  • ¥15 特定网页无法访问,已排除网页问题
  • ¥50 如何将脑的图像投影到颅骨上