需要3到5个位置参数,但给出了6个?

用户3230

我的程序应该使用用户输入来绘制棋盘。绘图必须通过调用draw()来进行。我收到一个错误:

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

问题是我的主模块无法更改我必须保持原样。这是一个要求。那么,当我不能改变一个问题时,我该如何解决呢?它只会在第18行给我一个错误。

主模块:

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()

我离开了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()

谢谢你的帮助!

x

每个类方法(包括init)的第一个参数始终是对当前类实例的引用。按照惯例,此参数始终命名为self。在init方法中,self指的是新创建的对象;在其他类方法中,它引用其方法被调用的实例。

编辑:我没有看过您说无法更改主模块的部分,对不起

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()

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Python 3 - __init__() 需要 1 到 5 个位置参数,但给出了 6 个

Python:find_element() 需要 1 到 3 个位置参数,但给出了 6 个

需要帮助错误“类型错误:__init__() 需要 5 个位置参数,但给出了 6 个”

“predict_classes() 需要 2 到 4 个位置参数,但给出了 5 个”错误

Python 错误 - TypeError: create_or_update() 需要 5 个位置参数,但给出了 6 个

Odoo 需要 1 到 2 个位置参数,但给出了 3 个

send() 需要 1 到 2 个位置参数,但给出了 3 个 (discord.py)

TypeError:update()需要2个位置参数,但给出了3个位置:Python

Django TypeError:url()需要2到4个位置参数,但给出了16个

Django TypeError:render()需要2个位置参数,但是给出了3个?

Python TypeError:derivative_circ() 需要 2 个位置参数,但给出了 6 个

django __init__() 需要 1 个位置参数,但给出了 6 个

TypeError dropDuplicates()从1到2个位置参数,但给出了3个

TypeError:execute()从2到3个位置参数,但给出了7个

__init __()接受1到3个位置参数,但给出了4个

Money和TypeError:__init __()接受1到2个位置参数,但给出了3个

spacy 3 NER Scorer() 抛出 TypeError: score() 需要 2 个位置参数,但给出了 3 个

TypeError: __init__() 需要 2 个位置参数,但 Python 3 给出了 3 个?

python super :TypeError: __init__() 需要 2 个位置参数,但给出了 3 个

类型错误:index() 需要 2 个位置参数,但给出了 3 个

类型错误:set_user_agent() 需要 2 个位置参数,但给出了 3 个

类型错误:hook() 需要 3 个位置参数,但给出了 4 个

类型错误:chunkIt() 需要 2 个位置参数,但给出了 3 个

类型错误:forward() 需要 2 个位置参数,但给出了 3 个

类型错误:forward() 需要 2 个位置参数,但在 pytorch 中给出了 3 个

类型错误:__call__() 需要 2 个位置参数,但给出了 3 个(Gunicorn)

类型错误:randint() 需要 3 个位置参数,但给出了 4 个

为什么 psi() 需要 3 个位置参数但给出了 4 个?

遇到错误TypeError:create_task()需要1到2个位置参数,但是在创建Google Cloud Task时给出了3个