gpt4 book ai didi

python - while循环变量不更新

转载 作者:行者123 更新时间:2023-11-28 18:49:23 25 4
gpt4 key购买 nike

我在这样的方法中有一个循环:

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

但是在每个循环的开始,应该更新的变量正在被重置。我的缩进似乎是正确的,所以我不确定问题出在哪里。它可以是可变范围吗?

感谢您的帮助。

编辑:这是所有代码的 pastebin:http://pastebin.com/GjKA8yag

编辑:将所有代码添加到帖子中。这是底部 Controller 代码应该发生的事情的运行:

初始化一个游戏,gg 有 2 个玩家,每个玩家有一个位置,他们需要到达棋盘的尽头才能获胜,棋盘长 10 个方格,他们可以一次移动 1 个或 2 个方格。

我们使用jump 方法来决定要移动多少个方 block 。 jump 方法在其中创建了两个游戏,其中一个游戏初始化为 player1 比他所在位置前面 1 个方格,另一个游戏初始化为 player1 比他所在位置前面 2 个方格。然后使用 run 方法随机完成这些游戏,并返回一个值以查看谁赢得了该游戏(玩家 2 为 2,玩家 2 为 1玩家 1).

这是完成 迭代 次,然后无论哪个游戏更成功,即最初向前移动 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)

我在 Windows 8 上运行 Python 3.3 x64。

结果:切换到 Python 2.7.3,现在可以正常工作了。

最佳答案

    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

关于python - while循环变量不更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15340422/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com