Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在Tictaoe游戏中重复输入时出错_Python_Loops_Continue - Fatal编程技术网

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

Python 在Tictaoe游戏中重复输入时出错,python,loops,continue,Python,Loops,Continue,我试图阻止用户输入一个已经标记的方块,但是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

我试图阻止用户输入一个已经标记的方块,但是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!")

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

turn=0
尽管如此:
行=int(输入(“输入行名称:”)
col=int(输入(“输入列名:”)
如果(arr[row][col]==0):
如果(i%2):
arr[行][列]=1
转弯=转弯+1
其他:
arr[行][列]=2
转弯=转弯+1
其他:
打印(“\n该正方形已被标记!请选择另一个正方形”)
持续
grid.print_grid()
res=grid.grid\u checker()
如果(res==1):
打印(“\n第1层赢得游戏!”)
打破
elif(res==2):
打印(“\n第2层赢得游戏!”)
打破
elif(圈数==8):
打印(“\n游戏以平局结束!”)
在这里,我们将把回合数保存在变量
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)
可以扩展为如下内容:

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
的值,它也将在下一次迭代之前重新分配。

对于范围(9)中的i
创建一个列表,并在
i
为0、1、2、3、4、5、6、7、8的情况下执行迭代块9次。如果你输入i,它将跳转到下一个数字。您可以将其替换为:

i=0
while i < 9:
i=0
而我<9:
并在缩进块的末尾添加
i+=1

python中范围(10)中x的
与(int x;x)的
不同