下列代码中,在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()