井字棋游戏:我很困惑为什么当用户输入位置变量之一时我的代码不运行

问题描述 投票:0回答:1

由于某种原因,我无法使用变量来定义函数的这个特定子集中的空间

from turtle import *
john = Turtle()


def naughts(nposition):
    john.penup()
    john.goto(nposition)
    john.right(90)
    john.forward(120)
    john.left(90)
    john.pendown()
    john.circle(120)
    
def crosses(cposition):
    john.penup()
    john.goto(cposition)
    john.pendown()
    john.left(45)
    for x in range(4):
        john.forward(150)
        john.backward(150)
        john.left(90)
    john.right(45)


def main():
    
    pos1= (-400, 400)
    pos2= (0, 400)
    pos3= (400, 400)
    pos4= (-400, 0)
    pos5= (0, 0)
    pos6= (400, 0)
    pos7= -400, -400
    pos8= 0, -400
    pos9= 400, -400
    
    john.penup()
    john.goto(-200, -600)
    john.pendown()
    
    john.left(90)
    john.forward(1200)
    
    john.penup()
    john.goto(200, -600)
    john.pendown()
    
    john.forward(1200)
    john.left(90)
    
    john.penup()
    john.goto(600, -200)
    john.pendown()
    
    john.forward(1200)
    
    john.penup()
    john.goto(600,200)
    john.pendown()
    
    john.forward(1200)
    
    for turns in range(5):
        
        dake = input("Naughts, please choose pos1, pos2, pos3, pos4, pos5, pos6, pos7, pos8, pos9: ")
        
        naughts(dake)
        ecks = input("Crosses, please choose pos1, pos2, pos3, pos4, pos5, pos6, pos7, pos8, pos9: ")
        crosses(ecks)
            
if __name__ == "__main__":
    main()

将变量放在最后,返回

“TypeError: Vec2D.new() 需要 3 个位置参数,但给出了 5 个”,我不确定为什么。

我尝试过自己输入位置变量,这有效。

python tic-tac-toe
1个回答
1
投票
john = Turtle()
POSITIONS = {"pos1":(-400, 400),
    "pos2": (0, 400),
    "pos3": (400, 400),
    "pos4": (-400, 0),
    "pos5":(0, 0),
    "pos6": (400, 0),
    "pos7": (-400, -400),
    "pos8": (0, -400),
    "pos9": (400, -400)}
john.speed(0) ## makes john very fast
def naughts(nposition):
    john.penup()
    john.goto(nposition)
    john.right(90)
    john.forward(120)
    john.left(90)
    john.pendown()
    john.circle(120)
    
def crosses(cposition):
    john.penup()
    john.goto(cposition)
    john.pendown()
    john.left(45)
    for x in range(4):
        john.forward(150)
        john.backward(150)
        john.left(90)
    john.right(45)


def main():
    john.penup()
    john.goto(-200, -600)
    john.pendown()
    
    john.left(90)
    john.forward(1200)
    
    john.penup()
    john.goto(200, -600)
    john.pendown()
    
    john.forward(1200)
    john.left(90)
    
    john.penup()
    john.goto(600, -200)
    john.pendown()
    
    john.forward(1200)
    
    john.penup()
    john.goto(600,200)
    john.pendown()
    
    john.forward(1200)
    
    for turns in range(5):
        
        dake = input("Naughts, please choose pos1, pos2, pos3, pos4, pos5, pos6, pos7, pos8, pos9: ")
        dake = POSITIONS[dake]
        naughts(dake)
        ecks = input("Crosses, please choose pos1, pos2, pos3, pos4, pos5, pos6, pos7, pos8, pos9: ")
        ecks = POSITIONS[ecks]
        crosses(ecks)
            
if __name__ == "__main__":
    main()

这解决了您遇到的问题。我所做的是制作一个包含移动坐标的字典,并将 pos1、pos2... 指定为键,这样当用户输入键时,

POSITIONS[dake]
返回
dake
输入的坐标。

导致错误的原因是

input()
返回一个字符串,并将字符串解析为
.goto()
属性导致 Typerror。

现在进入胜利检测...

© www.soinside.com 2019 - 2024. All rights reserved.