简体   繁体   English

从 3 到 5 个位置 arguments 但给出了 6 个?

[英]takes from 3 to 5 positional arguments but 6 were given?

My program is supposed to draw a chessboard using user input.我的程序应该使用用户输入来绘制棋盘。 The drawing has to occur with the call of draw().绘图必须通过调用 draw() 进行。 I am getting an error:我收到一个错误:

line 18, in main
 chessboard = Chessboard(tr, startX, startY, eval(width),  val(height)) 
TypeError: __init__() takes from 3 to 5 positional arguments but 6 were given

The thing is that my main module cannot change .问题是我的主模块无法更改 I have to leave it as it is.我必须保持原样。 It's a requirement.这是一个要求。 So, how can I solve that problem when I cannot change a thing from it?那么,当我无法改变它时,我该如何解决这个问题呢? It only gives me an error on line 18.它只在第 18 行给我一个错误。

main module:主模块:

import turtle
from chessboard import Chessboard

def main():
    startX, startY = eval(input("Enter a starting point: "))
    width = input("Input a width: ")
    height = input("Input a height: ")

    tr = turtle.Turtle()

    if width == "" and height == "":
        chessboard = Chessboard(tr, startX, startY)
    elif height == "":
        chessboard = Chessboard(tr, startX, startY, width=eval(width))
    elif width == "":
        chessboard = Chessboard(tr, startX, startY, height=eval(height))
    else:
        chessboard = Chessboard(tr, startX, startY, eval(width), eval(height))

        chessboard.draw()

        tr.hideturtle()
        turtle.done()

main()

I leave my chessboard.py module in case it has to do something with it:我留下我的 chessboard.py 模块,以防它必须对它做些什么:

import turtle


class Chessboard:
    def __init__(self, startX, startY, width=250, height=250):
        self.__startX = startX
        self.__startY = startY
        self.__width = width
        self.__height = height

    def draw(self, __startX, __startY, __width=250, __height=250):
        turtle.clear
        self.__drawChessboard(__startX, __startY, __width, __height)

    def __drawChessboard(self, __startX, __startY, __width=250, __height=250):
        # uses height x width, default 250
        turtle.setheading(0)  
        turtle.penup() 
        turtle.goto(__startX, __startY) 
        turtle.pendown() 
        turtle.goto(__startX + __width, __startY)
        turtle.goto(__startX + __width, __startY + __height)
        turtle.goto(__startX, __startY + __height)
        turtle.goto(__startX, __startY)

        self.__drawAllRectangles(self, __startX, __startY, __width, __height)

        turtle.exitonclick()

    def __drawAllRectangles(self, __startX, __startY, __width, __height):
        __checkerWidth = __width / 8
        __checkerHeight = __height / 8
        for row in range(8):
            for column in range(4):
                if row % 2 == 0:
                    self.__drawRectangle(self, __startX + (2 * column * __checkerWidth),
                                         __startY + (row * __checkerHeight), __checkerWidth, __checkerHeight)
                else:
                    self.__drawRectangle(self, __startX + __checkerWidth + (2 * column * __checkerWidth),
                                         __startY + (row * __checkerHeight), __checkerWidth, __checkerHeight)

    def __drawRectangle(self, __startX, __startY, __checkerWidth, __checkerHeight):
        turtle.penup()
        turtle.setheading(0)
        turtle.goto(__startX, __startY)
        turtle.fillcolor("black")
        turtle.begin_fill()
        turtle.pendown()
        turtle.goto(__startX + __checkerWidth, __startY)
        turtle.goto(__startX + __checkerWidth, __startY + __checkerHeight)
        turtle.goto(__startX, __startY + __checkerHeight)
        turtle.goto(__startX, __startY)
        turtle.end_fill()

Thanks for your help!谢谢你的帮助!

The first argument of every class method, including init, is always a reference to the current instance of the class.每个 class 方法(包括 init)的第一个参数始终是对 class 的当前实例的引用。 By convention, this argument is always named self.按照惯例,这个参数总是命名为 self。 In the init method, self refers to the newly created object;在init方法中,self指的是新创建的object; in other class methods, it refers to the instance whose method was called.在其他 class 方法中,它指的是调用其方法的实例。

EDIT: I didnt read the part where you said you can't change the main module, I apologize编辑:我没有阅读你说你不能改变主模块的部分,我很抱歉

class Chessboard:
    def __init__(self, tr, startX, startY, width=250, height=250):
        self.tr = tr
        self.__startX = startX
        self.__startY = startY
        self.__width = width
        self.__height = height

    def draw(self):
        self.tr.clear()
        self.__drawChessboard(self.__startX, self.__startY, self.__width, self.__height)

    def __drawChessboard(self, __startX, __startY, __width=250, __height=250):
        # uses height x width, default 250
        self.tr.setheading(0)  
        self.tr.penup() 
        self.tr.goto(__startX, __startY) 
        self.tr.pendown() 
        self.tr.goto(__startX + __width, __startY)
        self.tr.goto(__startX + __width, __startY + __height)
        self.tr.goto(__startX, __startY + __height)
        self.tr.goto(__startX, __startY)

        self.__drawAllRectangles(__startX, __startY, __width, __height)

        self.tr.exitonclick()

    def __drawAllRectangles(self, __startX, __startY, __width, __height):
        __checkerWidth = __width / 8
        __checkerHeight = __height / 8
        for row in range(8):
            for column in range(4):
                if row % 2 == 0:
                    self.__drawRectangle(__startX + (2 * column * __checkerWidth),
                                         __startY + (row * __checkerHeight), __checkerWidth, __checkerHeight)
                else:
                    self.__drawRectangle(__startX + __checkerWidth + (2 * column * __checkerWidth),
                                         __startY + (row * __checkerHeight), __checkerWidth, __checkerHeight)

    def __drawRectangle(self, __startX, __startY, __checkerWidth, __checkerHeight):
        self.tr.penup()
        self.tr.setheading(0)
        self.tr.goto(__startX, __startY)
        self.tr.fillcolor("black")
        self.tr.begin_fill()
        self.tr.pendown()
        self.tr.goto(__startX + __checkerWidth, __startY)
        self.tr.goto(__startX + __checkerWidth, __startY + __checkerHeight)
        self.tr.goto(__startX, __startY + __checkerHeight)
        self.tr.goto(__startX, __startY)
        self.tr.end_fill()

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 place() 从 1 到 2 个位置 arguments 但给出了 3 个? - place() takes from 1 to 2 positional arguments but 3 were given? open()接受1到3个位置参数,但给出了5个 - open() takes from 1 to 3 positional arguments but 5 were given Odoo接受1到2个位置参数,但给出了3个 - Odoo takes from 1 to 2 positional arguments but 3 were given get() 从 2 到 3 个位置 arguments 但给出了 4 个 - get() takes from 2 to 3 positional arguments but 4 were given RasaNLUHttpInterpreter:接受1到4个位置参数,但给出了5个 - RasaNLUHttpInterpreter: takes from 1 to 4 positional arguments but 5 were given where() 需要 1 到 2 个位置参数,但给出了 3 个 - where() takes from 1 to 2 positional arguments but 3 were given 需要 2 个位置 arguments 但给出了 3 个 - Takes 2 positional arguments but 3 were given TypeError: __init__() takes from 1 to 3 positional arguments but 4 were given - TypeError: __init__() takes from 1 to 3 positional arguments but 4 were given Money 和 TypeError:__init__() 需要 1 到 2 个位置参数,但给出了 3 个 - Money and TypeError: __init__() takes from 1 to 2 positional arguments but 3 were given “predict_classes() 需要 2 到 4 个位置参数,但给出了 5 个”错误 - "predict_classes() takes from 2 to 4 positional arguments but 5 were given" erorr
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM