我的程序应该使用用户输入来绘制棋盘。绘图必须通过调用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()
谢谢你的帮助!
每个类方法(包括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] 删除。
我来说两句