我在这样的方法中有一个循环:
from random import randint
class Player:
def __init__(self, position=0):
self.position = position
def move(self, move):
self.position += move
class Game:
def __init__(self, size=10, p1=1, p2=1):
self.size = size
self.p1 = Player()
self.p2 = Player()
def finished(self):
if self.p1.position >= self.size:
return True
if self.p2.position >= self.size:
return True
def run(self):
while True:
roll = randint(1,2)
self.p2.move(roll)
if self.finished():
break
roll = randint(1,2)
self.p1.move(roll)
if self.finished():
break
if self.p2.position >= self.p1.position: # if player 2 won return 2, else 1
return 2
else:
return 1
def jump(self, iterations):
move1, move2, i = 0,0,0
while i < iterations:
print(move1, move2) # move1 is 0 again
a = Game(self.size, self.p1.position+1, self.p2.position)
x = a.run()
print(x) # x is either 1 or 2, for the sake of testing
# it's been set to always 1
if x == 1:
move1 += 1
print(move1) # if move1 is incremented, it is shown here successfully
b = Game(self.size, self.p1.position+2, self.p2.position)
y = b.run()
if y == 1:
move2 += 1
i += 1
if move2 >= move1:
return 2
else:
return 1
human, comp, i = 0, 0, 0
times = 10
while i < times:
g = Game()
while True:
roll = g.jump(4)
g.p1.move(roll)
if g.finished():
human += 1
break
roll = g.jump(4)
g.p2.move(roll)
if g.finished():
comp += 1
break
i += 1
但是,在每个循环开始时,应该更新应该更新的变量。我的缩进似乎是正确的,所以我不确定问题是什么。它可以是变量范围吗?
感谢您的帮助。
编辑:这是所有代码的粘贴:http://pastebin.com/GjKA8yag
编辑:在帖子中添加了所有代码。以下是底部控制器代码应该发生的事情:
初始化游戏,g
。 g
有2个玩家,每个玩家都有一个位置,他们需要到达棋盘的最后才能获胜,棋盘长10平方,他们可以一次移动1或2个方格。
要确定要移动的方格数,我们使用jump
方法。 jump
方法在其中创建了两个游戏,其中一个游戏初始化为player1,距离他前方1个方格,其中一个游戏初始化,其中玩家1前方2个方格。然后使用run
方法随机完成这些游戏,返回一个值以查看谁赢得了该游戏(玩家2为2
,玩家1为1
。
这已经完成iterations
次,然后是哪个游戏更成功,即最初向前移动1次或向前移动2次,这是将在实际游戏中采取的移动,g
打印声明的样本:
0 0
1
1
0 0
2
0
0 0
1
1
0 0
1
1
第一行是print(move1, move2)
,它位于while循环的开头。然后print(x)
作为run()
方法返回的值,然后print(move1)
增加后。{/ p>
我在Windows 8上运行Python 3.3 x64。
结果:切换到Python 2.7.3并且它现在正在工作。
答案 0 :(得分:1)
def jump(self, iterations):
move1, move2, i = 0,0,0
while i < iterations:
print(move1, move2) # move1 is 0 again
a = Game(self.size, self.p1.position+1, self.p2.position)
x = a.run()
print("who won game a? : " + str(x)) # x is either 1 or 2, for the sake of testing
# it's been set to always 1
if x == 1:
move1 += 1
print("move 1 is: " + str(move1)) # if move1 is incremented, it is shown here successfully
b = Game(self.size, self.p1.position+2, self.p2.position)
y = b.run()
print("who won game b? : " + str(y))
if y == 1:
move2 += 1
print("move 2 is: " + str(move2))
i += 1
if move2 >= move1:
return 2
else:
return 1
human, comp, i = 0, 0, 0
times = 10
while i < times:
g = Game()
print("new game")
while True:
print("position of 1 is:" + str(g.p1.position))
print("position of 2 is:" + str(g.p2.position))
roll = g.jump(4)
print("first jump finished")
g.p1.move(roll)
if g.finished():
human += 1
break
roll = g.jump(4)
print("second jump finished")
g.p2.move(roll)
if g.finished():
comp += 1
break
i += 1
以下是我更改的部分。我只在你的代码中添加了print语句 这是输出 请告诉我哪一部分输出对您没有意义。
new game
position of 1 is:0
position of 2 is:0
(0, 0)
who won game a? : 2
move 1 is: 0
who won game b? : 2
move 2 is: 0
(0, 0)
who won game a? : 2
move 1 is: 0
who won game b? : 1
move 2 is: 1
(0, 1)
who won game a? : 1
move 1 is: 1
who won game b? : 1
move 2 is: 2
(1, 2)
who won game a? : 1
move 1 is: 2
who won game b? : 2
move 2 is: 2
first jump finished
(0, 0)
who won game a? : 1
move 1 is: 1
who won game b? : 2
move 2 is: 0
(1, 0)
who won game a? : 1
move 1 is: 2
who won game b? : 1
move 2 is: 1
(2, 1)
who won game a? : 2
move 1 is: 2
who won game b? : 2
move 2 is: 1
(2, 1)
who won game a? : 2
move 1 is: 2
who won game b? : 2
move 2 is: 1
second jump finished
position of 1 is:2
position of 2 is:1
(0, 0)
who won game a? : 1
move 1 is: 1
who won game b? : 2
move 2 is: 0
(1, 0)
who won game a? : 2
move 1 is: 1
who won game b? : 1
move 2 is: 1
(1, 1)
who won game a? : 1
move 1 is: 2
who won game b? : 2
move 2 is: 1
(2, 1)
who won game a? : 2
move 1 is: 2
who won game b? : 2
move 2 is: 1
first jump finished
(0, 0)
who won game a? : 1
move 1 is: 1
who won game b? : 2
move 2 is: 0
(1, 0)
who won game a? : 2
move 1 is: 1
who won game b? : 1
move 2 is: 1
(1, 1)
who won game a? : 1
move 1 is: 2
who won game b? : 2
move 2 is: 1
(2, 1)
who won game a? : 2
move 1 is: 2
who won game b? : 2
move 2 is: 1
second jump finished
position of 1 is:3
position of 2 is:2