Python Tic Tac Toe代码报错:输入位置变量时运行失败排查
问题排查:Turtle井字棋位置变量调用报错
报错根源
你遇到的TypeError: Vec2D.__new__() takes 3 positional arguments but 5 were given,本质是调用turtle位置相关方法(比如goto()、setpos())时传递了过多参数。
Turtle的位置方法仅接受两种参数形式:
- 两个单独的数值(x坐标和y坐标)
- 一个包含两个数值的序列(元组/列表)
当你传入多个位置变量(比如goto(pos1, pos2)),或错误解包多个位置变量(比如goto(*pos1, *pos2)),会把多个变量的元素全部拆成单独参数传递。比如pos1=(-200,200)、pos2=(0,200),调用goto(pos1, pos2)时实际传递了-200,200,0,200四个位置参数,加上Vec2D构造时的类参数(cls),总共5个参数,超出了Vec2D.__new__()仅接受cls, x, y三个参数的要求,因此触发报错。
正确写法示例
1. 正确定义位置变量
每个位置变量必须是仅包含两个数值的元组/列表:
# 按井字棋9个位置定义坐标 pos1 = (-200, 200) # 左上角 pos2 = (0, 200) # 上中 pos3 = (200, 200) # 右上角 pos4 = (-200, 0) # 左中 pos5 = (0, 0) # 中心 pos6 = (200, 0) # 右中 pos7 = (-200, -200) # 左下角 pos8 = (0, -200) # 下中 pos9 = (200, -200) # 右下角
2. 正确调用位置方法
每次仅传入一个位置变量(或解包单个变量):
import turtle t = turtle.Turtle() # 方式1:直接传入位置元组 t.goto(pos1) # 方式2:解包元组(与方式1等价) t.goto(*pos5)
排查步骤
- 检查
pos1-pos9的定义:确保每个变量只有两个数值元素,没有多余值。 - 检查调用位置方法的代码:确认每次只传入一个位置变量,不要同时传入多个位置变量或解包多个变量。
内容的提问来源于stack exchange,提问作者Will Bentley
相关产品推荐
相关产品推荐

