import random
possible_moves = ['roll', 'hold']
other = {1: 0, 0: 1}
goal = 50defclueless(state):
"A strategy that ignores the state and chooses at random from possible moves."return random.choice(possible_moves)
defhold(state):
"""Apply the hold action to a state to yield a new state: Reap the 'pending' points and it becomes the other player's turn."""
(p, me, you, pending) = state
return (other[p], you, me + pending, 0)
defroll(state, d):
"""Apply the roll action to a state (and a die roll d) to yield a new state: If d is 1, get 1 point (losing any accumulated 'pending' points), and it is the other player's turn. If d > 1, add d to 'pending' points."""
(p, me, you, pending) = state
if d == 1:
return (other[p], you, me + 1, 0) # pig out; other player's turnelse:
return (p, me, you, pending + d) # accumulate die roll in pendingdefplay_pig(A=clueless, B=clueless):
"""Play a game of pig between two players, represented by their strategies. Each time through the main loop we ask the current player for one decision, which must be 'hold' or 'roll', and we update the state accordingly. When one player's score exceeds the goal, return that player."""# your code here
strategies = [A, B]
state = (0, 0, 0, 0)
whileTrue:
(p, me, you, _) = state
if me >= goal:
return strategies[p]
elif you >= goal:
return strategies[other[p]]
elif strategies[p](state) == 'roll':
state = roll(state, random.randint(1, 6)) #randomが毎回変わるのでテストができない・・・else:
state = hold(state)
defalways_roll(state):
return'roll'defalways_hold(state):
return'hold'

DIにする。
変更部分のみを記述。

defdierolls():
"Generate die rolls."whileTrue:
yield random.randint(1, 6)
defplay_pig(A=clueless, B=clueless, die=dierolls()): # generaterは、dierolls()の様に括弧付きでよい。"""Play a game of pig between two players, represented by their strategies. Each time through the main loop we ask the current player for one decision, which must be 'hold' or 'roll', and we update the state accordingly. When one player's score exceeds the goal, return that player."""# your code here
strategies = [A, B]
state = (0, 0, 0, 0)
whileTrue:
(p, me, you, _) = state
if me >= goal:
return strategies[p]
elif you >= goal:
return strategies[other[p]]
elif strategies[p](state) == 'roll':
state = roll(state, next(die))
else:
state = hold(state)