Shikha saran Ответов: 1

Этот код для игры в крестики-нолики дает ошибку.пожалуйста, помогите мне выяснить, что это за ошибка.


from tkinter import *
from tkinter import messagebox
root=Tk()
root.geometry('500x500')
bu2=Button(root,text="play game")
bu2.grid()
<pre>def tic_tac_toe(events):
 tk=Tk()
 tk.title("Tic Tac Toe")
 click=True
 def checker(buttons):
    global click
    if buttons["text"]==" " and click==True:
         buttons["text"]=="X"
         click=False
    elif buttons["text"] == " " and click == False:
         buttons["text"] == "O"
         click = True
    elif (button1["text"]=="X" and button2["text"]=="X" and button3["text"]=="X" or
          button4["text"]=="X" and button5["text"]=="X" and button6["text"]=="X" or
          button7["text"]=="X" and button8["text"]=="X" and button9["text"]=="X" or
          button1["text"]=="X" and button5["text"]=="X" and button9["text"]=="X" or
          button3["text"]=="X" and button5["text"]=="X" and button7["text"]=="X" or
          button1["text"]=="X" and button4["text"]=="X" and button7["text"]== "X" or
          button2["text"]=="X" and button5["text"]=="X" and button8["text"]== "X" or
          button3["text"]=="X" and button6["text"]=="X" and button9["text"]== "X"):
          messagebox.showinfo("Winner X","You have just won the game")

    elif (button1["text"] =="O" and button2["text"]=="O" and button3["text"] == "O" or
            button4["text"] =="O" and button5["text"] =="O" and button6["text"] =="O" or
            button7["text"] =="O" and button8["text"] =="O" and button9["text"] =="O" or
            button1["text"] =="O" and button5["text"] =="O" and button9["text"] =="O" or
            button3["text"] =="O" and button5["text"] =="O" and button7["text"] =="O" or
            button1["text"] =="O" and button4["text"] =="O" and button7["text"] =="O" or
            button2["text"] =="O" and button5["text"] =="O" and button8["text"] == "O" or
            button3["text"] == "O" and button6["text"] == "O" and button9["text"] == "O"):
            messagebox.showinfo("Winner O","You have just won the game")
    buttons=StringVar()
 button1=Button(tk,text=" ",font=('Times 26 bold'),height=4,width=8,command=lambda: checker(button1))
 button1.grid(row=1,column=0,sticky=S+N+E+W)
 button2 = Button(tk, text=" ", font=('Times 26 bold'), height=4, width=8, command=lambda:checker(button2))
 button2.grid(row=1, column=1, sticky=S + N + E + W)
 button3 = Button(tk, text=" ", font=('Times 26 bold'), height=4, width=8, command=lambda: checker(button3))
 button3.grid(row=1, column=2, sticky=S + N + E + W)
 button4 = Button(tk, text=" ", font=('Times 26 bold'), height=4, width=8, command=lambda: checker(button4))
 button4.grid(row=2, column=0, sticky=S + N + E + W)
 button5 = Button(tk, text=" ", font=('Times 26 bold'), height=4, width=8, command=lambda: checker(button5))
 button5.grid(row=2, column=1, sticky=S + N + E + W)
 button6= Button(tk, text=" ", font=('Times 26 bold'), height=4, width=8, command=lambda: checker(button6))
 button6.grid(row=2, column=2, sticky=S + N + E + W)
 button7= Button(tk, text=" ", font=('Times 26 bold'), height=4, width=8, command=lambda: checker(button7))
 button7.grid(row=3, column=0, sticky=S + N + E + W)
 button8= Button(tk, text=" ", font=('Times 26 bold'), height=4, width=8, command=lambda: checker(button8))
 button8.grid(row=3, column=1, sticky=S + N + E + W)
 button9= Button(tk, text=" ", font=('Times 26 bold'), height=4, width=8, command=lambda: checker(button9))
 button9.grid(row=3, column=2, sticky=S + N + E + W)
 tk.mainloop()
bu2.bind("<Button-1>",tic_tac_toe)
root.mainloop()




Что я уже пробовал:

i have tried so much but didnt get the error

Patrice T

Опишите "ошибку"

1 Ответов

Рейтинг:
0

OriginalGriff

Компиляция не означает, что ваш код верен! :смеяться:
Подумайте о процессе разработки как о написании электронного письма: успешная компиляция означает, что вы написали письмо на правильном языке - например, на английском, а не на немецком, - а не то, что письмо содержало сообщение, которое вы хотели отправить.

Итак, теперь вы входите во вторую стадию разработки (на самом деле это четвертая или пятая, но вы перейдете к более ранним стадиям позже): тестирование и отладка.

Начните с рассмотрения того, что он делает, и как это отличается от того, что вы хотели. Это важно, потому что это дает вам информацию о том, почему он это делает. Например, если программа предназначена для того, чтобы позволить пользователю ввести число, а затем удвоить его и напечатать ответ, то если бы ввод / вывод был таким:

Input   Expected output    Actual output
  1            2                 1
  2            4                 4
  3            6                 9
  4            8                16
Тогда совершенно очевидно, что проблема заключается в бите, который удваивает его - он не прибавляет себя к себе или умножает его на 2, он умножает его на себя и возвращает квадрат входного сигнала.
Таким образом, вы можете посмотреть на код, и очевидно, что он находится где-то здесь:
private int Double(int value)
   {
   return value * value;
   }

Как только у вас появится идея, что может пойти не так, начните использовать отладчик, чтобы выяснить, почему. Поместите точку останова в первую строку и запустите приложение. Подумайте о том, что должна делать каждая строка кода перед ее выполнением, и сравните это с тем, что она на самом деле делала, когда вы использовали кнопку "Step over" для выполнения каждой строки по очереди. Он сделал то, что вы ожидали? Если да, то переходите к следующей строке.
Если нет, то почему? Чем это отличается?

Это навык, и его стоит развивать, поскольку он помогает вам как в реальном мире, так и в развитии. И, как и все навыки, он только улучшается при использовании!

Если вы не знакомы с отладчиком, то смотрите здесь: python debugger - поиск в Google[^]