__init__() 采用 1 个位置参数,但给出了 2 个并且为空 tkinter

__init__() takes 1 positional argument but 2 were given and empty tkinter

看到一些类似的帖子,但他们使用了一种叫做 Django 的东西?

首先,这是学校作业,我知道堆栈溢出不喜欢我们学生要求的东西。我只是想澄清一下。

第一个代码运行,但是当我关闭它时,出现错误。在我的 tkinter window 中什么也没有出现。

问题出在下面这行代码:

board2 = EQ([0, 4, 7, 5, 2, 6, 1, 3])

主要功能是测试 class 的正确解决方案。这是一个八皇后问题。 希望有人能帮帮我。

这是我的上下文代码的其余部分: 如果代码没有意义,这里是作业的图像,https://imgur.com/a/G5PdrRQ

from tkinter import *

SIZE = 8

class EQ:
    def __init__(self):
        self.queens = SIZE * [-1]

        window = Tk()
        window.title("Eight Queens")

        window.mainloop()
    
    def get(self, i):
        return self.queens[i]
    
    def set(self, i, j):
        self.queens[i] = j

    def is_solved(self):
        for i in range(0, 8):
            #If two queens are in same row
            for j in range(i + 1, 8):
                if self.queens[i] == self.queens[j]:
                    return False

            #Diagonal down       
            count = 1
            for j in range(i + 1, 8):
                if count + self.queens[i] == self.queens[j]:
                    return
                count += 1
            
            #Diagonal up
            count = 1
            for j in range(i + 1, 8):
                if self.queens[i] - count == self.queens[j]:
                    return False
                count += 1
        
        return True
    
    def print_board(self):
        for i in range(0, 8):
            for j in range(0,8):
                print("|", end = " ")
                if self.queens[j] == i:
                    print("X", end = " ")
                else:
                    print(" ", end = " ")
            print("|")

def main():

    board1 = EQ()
    board1.set(0, 2)
    board1.set(1, 4)
    board1.set(2, 7)
    board1.set(3, 1)
    board1.set(4, 0)
    board1.set(5, 3)
    board1.set(6, 6)
    board1.set(7, 5)

    print("Is board1 a correct eight queen placement?",
        board1.is_solved())

    board2 = EQ([0, 4, 7, 5, 2, 6, 1, 3])

    if board2.is_solved():
        print("Eight queens are placed correctly in board2")
        board2.print_board()

    else:
        print("Eight queens are placed incorrectly in board2")

main()

您根本不需要 tkinter,因为该应用程序只有控制台输出。

由于EQ的当前构造函数不接受参数,因此创建第二个实例将引发错误。

要修复它,只需修改 EQ 的构造函数以接受可选列表:

class EQ:
    def __init__(self, queens=None):
        self.queens = queens if queens else SIZE*[-1]
        # removed tkinter stuff
    ...