在Tictaoe游戏中重复输入时出错

2024-05-19 03:20:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图阻止用户输入一个已经标记的方块,但是for循环继续下一个玩家的输入,而不会将I的值减1,因此玩家1可以重复他的输入。我该如何解决这个问题


arr = [[0,0,0],[0,0,0],[0,0,0]]
grid = grid(arr)
grid.print_grid()

for i in range(9):
    row = int(input("Enter the row name: "))
    col = int(input("Enter the column name: "))
    if(arr[row][col] == 0):
        if(i%2):
            arr[row][col] = 1
        else:
            arr[row][col] = 2
    else:
        print("\nThat square has already been marked! Please select another square")
        i = i-1
        continue
    grid.print_grid()
    res = grid.grid_checker()
    if (res == 1):
        print("\nPlayer 1 wins the game!")
        break
    elif(res == 2):
        print("\nPlayer 2 wins the game!")
        break
    elif(i == 8):
        print("\nThe game has ended in a draw!")

2条回答

您需要存储另一个变量来跟踪轮到谁。在循环体中时,不能修改正在循环的变量。这意味着当你在循环中运行时,我不能被操纵。下面是我将如何改变它

turn = 0
while True:
    row = int(input("Enter the row name: "))
    col = int(input("Enter the column name: "))
    if(arr[row][col] == 0):
        if(i%2):
            arr[row][col] = 1
            turn = turn + 1
        else:
            arr[row][col] = 2
            turn = turn + 1
    else:
        print("\nThat square has already been marked! Please select another square")
        continue
    grid.print_grid()
    res = grid.grid_checker()
    if (res == 1):
        print("\nPlayer 1 wins the game!")
        break
    elif(res == 2):
        print("\nPlayer 2 wins the game!")
        break
    elif(turn == 8):
        print("\nThe game has ended in a draw!")

在这里,我们将把回合数保存在变量turn中,并且只有当我们能够确认一个玩家已经成功完成了他们的回合时,才增加该变量

为什么不能修改i:为了优化,循环通常在转换为汇编指令之前由python进行扩展。例如,像这样的简单循环:

for i in range(9):
    print(i)

可以扩展为如下内容:

i = 0
print(i)
i = 1
print(i)
# and so on, upto
i = 9
print(i)

这样做是为了避免在内存中跳转。因此,正如您在这里所看到的,i被重新分配给循环的每个迭代。因此,即使更改循环体中i的值,它也将在下一次迭代之前重新分配

for i in range(9)创建一个列表并执行迭代块9次,i为0、1、2、3、4、5、6、7、8。如果你使用i它将跳转到下一个数字。您可以将其替换为:

i=0
while i < 9:

并在缩进块的末尾添加i+=1

Python中的p>^ {CD5>}在C++中不象^ {CD6>}。

相关问题 更多 >

    热门问题