0 / 0 / 0
Регистрация: 17.03.2021
Сообщений: 7

Беда с if/else в крестиках-ноликах

21.04.2021, 15:57. Показов 2460. Ответов 9

Студворк — интернет-сервис помощи студентам
Если что то я только начал изучение программирования.

Решил я сделать крестики нолики с помощью библиотеки tkinter. И возникла проблема, решение которой я не нашёл в гугле.
При нажатии на кнопку в консоль возвращается ошибка.

Вот ошибка:

Exception in Tkinter callback
Traceback (most recent call last):
File "E:\Python\lib\tkinter\__init__.py", line 1892, in __call__
return self.func(*args)
TypeError: click_button() missing 1 required positional argument: 'a'

Вот код:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
from tkinter import *
 
root = Tk()
 
root.title("Test btn ttt")
 
buttonText = StringVar()
 
def click_button(a):
    a = 0
    if a == 0:
        buttonText.set("O")
        a += 1
        a %= 2
    else:
        buttonText.set("X")
        a += 1
        a %= 2
 
bt1 = Button(textvariable = buttonText,height="1",width="3",background="#555",foreground="#ccc",font=("Verdana", 30, "bold"),command = click_button)
 
bt1.pack()
 
root.mainloop()
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
21.04.2021, 15:57
Ответы с готовыми решениями:

Бред в крестиках ноликах
Проблема. Написал цикдические крестики нолики ( в конце игры спрашивает хотите сыгарть еще или нет?) и после этого происходит какой то...

Бот в крестиках-ноликах
Здравствуйте. Суть такова: в код игры крестики- нолики нужно встроить бота, а также добавить третий класс в игру (полагаю, что было бы...

Ошибка в крестиках-ноликах
Здравствуйте, форумчане! Я тут впервые, поэтому не уверен, правильно ли все делаю, прошу простить. Являюсь учеником 8 класса и совсем...

9
Эксперт Python
1356 / 653 / 207
Регистрация: 23.03.2014
Сообщений: 3,057
21.04.2021, 16:11
PixelFlashka, что должна делать Ваша программа?

Добавлено через 2 минуты
Вопрос таков, ибо это ни разу не крестики-нолики.
0
0 / 0 / 0
Регистрация: 17.03.2021
Сообщений: 7
21.04.2021, 16:16  [ТС]
я сделал кнопки но они не работали. Затем я отдельно сделал одну кнопку при нажатии на которую должны были переключатся надписи на ней
0
Эксперт Python
1356 / 653 / 207
Регистрация: 23.03.2014
Сообщений: 3,057
21.04.2021, 16:18
Лучший ответ Сообщение было отмечено PixelFlashka как решение

Решение

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
from tkinter import *
import random
root = Tk()
root.title('Criss-cross')
game_run = True
field = []
cross_count = 0
 
 
def new_game():
    for row in range(3):
        for col in range(3):
            field[row][col]['text'] = ' '
            field[row][col]['background'] = 'lavender'
    global game_run
    game_run = True
    global cross_count
    cross_count = 0
 
 
def click(row, col):
    if game_run and field[row][col]['text'] == ' ':
        field[row][col]['text'] = 'X'
        global cross_count
        cross_count += 1
        check_win('X')
        if game_run and cross_count < 5:
            computer_move()
            check_win('O')
 
 
def check_win(smb):
    for n in range(3):
        check_line(field[n][0], field[n][1], field[n][2], smb)
        check_line(field[0][n], field[1][n], field[2][n], smb)
    check_line(field[0][0], field[1][1], field[2][2], smb)
    check_line(field[2][0], field[1][1], field[0][2], smb)
 
 
def check_line(a1, a2, a3, smb):
    if a1['text'] == smb and a2['text'] == smb and a3['text'] == smb:
        a1['background'] = a2['background'] = a3['background'] = 'pink'
        global game_run
        game_run = False
 
 
def can_win(a1, a2, a3, smb):
    res = False
    if a1['text'] == smb and a2['text'] == smb and a3['text'] == ' ':
        a3['text'] = 'O'
        res = True
    if a1['text'] == smb and a2['text'] == ' ' and a3['text'] == smb:
        a2['text'] = 'O'
        res = True
    if a1['text'] == ' ' and a2['text'] == smb and a3['text'] == smb:
        a1['text'] = 'O'
        res = True
    return res
 
 
def computer_move():
    for n in range(3):
        if can_win(field[n][0], field[n][1], field[n][2], 'O'):
            return
        if can_win(field[0][n], field[1][n], field[2][n], 'O'):
            return
    if can_win(field[0][0], field[1][1], field[2][2], 'O'):
        return
    if can_win(field[2][0], field[1][1], field[0][2], 'O'):
        return
    for n in range(3):
        if can_win(field[n][0], field[n][1], field[n][2], 'X'):
            return
        if can_win(field[0][n], field[1][n], field[2][n], 'X'):
            return
    if can_win(field[0][0], field[1][1], field[2][2], 'X'):
        return
    if can_win(field[2][0], field[1][1], field[0][2], 'X'):
        return
    while True:
        row = random.randint(0, 2)
        col = random.randint(0, 2)
        if field[row][col]['text'] == ' ':
            field[row][col]['text'] = 'O'
            break
 
 
for row in range(3):
    line = []
    for col in range(3):
        button = Button(root, text=' ', width=4, height=2,
                        font=('Verdana', 20, 'bold'),
                        background='lavender',
                        command=lambda row=row, col=col: click(row, col))
        button.grid(row=row, column=col, sticky='nsew')
        line.append(button)
    field.append(line)
new_button = Button(root, text='new game', command=new_game)
new_button.grid(row=3, column=0, columnspan=3, sticky='nsew')
root.mainloop()
0
0 / 0 / 0
Регистрация: 17.03.2021
Сообщений: 7
21.04.2021, 16:22  [ТС]
спасибо большое
0
Эксперт Python
1356 / 653 / 207
Регистрация: 23.03.2014
Сообщений: 3,057
21.04.2021, 16:35
PixelFlashka, обращайтесь.
0
21.04.2021, 16:38

Не по теме:

Dax, ты его плохому научил, а главное он и не понял в чем проблемы были, теперь у нас готовый "глобалист" во все поля.

0
Эксперт Python
1356 / 653 / 207
Регистрация: 23.03.2014
Сообщений: 3,057
21.04.2021, 16:45

Не по теме:


Welemir1, виноват, исправлюсь).



Добавлено через 3 минуты
PixelFlashka, советую почитать для начала
https://www.russianlutheran.or... e/life.htm
0
1712 / 579 / 76
Регистрация: 10.04.2009
Сообщений: 9,328
21.04.2021, 19:44
Тс строки первого поста 10-11, а когда возникнет или?
1
Эксперт Python
1356 / 653 / 207
Регистрация: 23.03.2014
Сообщений: 3,057
21.04.2021, 21:44
Лучший ответ Сообщение было отмечено PixelFlashka как решение

Решение

PixelFlashka, во- первых, в TK не просто переменные, а используются значения, получаемые от элементов, например entry
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
import tkinter
from tkinter import *
from tkinter import messagebox
 
 
def test():
    if fameo_entry.get().endswith('й'):# вот так
        messagebox.showinfo("заканчивается")
 
    else:
        messagebox.showinfo('не заканчивается')
 
 
root = Tk()
root.title('Test')
root.geometry('300x256')
fameo = StringVar()
nameo = StringVar()
famr = StringVar()
namer = StringVar()
otchr = StringVar()
fameo_label = Label(text="введите фамилию  отца")
nameo_label = Label(text="введите имя   отца")
famr_label = Label(text="введите фамилию  ребенка")
namer_label = Label(text="введите имя  ребенка")
otchr_label = Label(text="введите отчество  ребенка")
 
fameo_label.grid(row=0, column=0)
nameo_label.grid(row=1, column=0)
famr_label.grid(row=2, column=0)
namer_label.grid(row=3, column=0)
otchr_label.grid(row=4, column=0)
 
fameo_entry = Entry(textvariable=fameo)
nameo_entry = Entry(textvariable=nameo)
famr_entry = Entry(textvariable=famr)
namer_entry = Entry(textvariable=namer)
otchr_entry = Entry(textvariable=otchr)
 
fameo_entry.grid(row=0, column=1, padx=5, pady=5)
nameo_entry.grid(row=1, column=1, padx=5, pady=5)
famr_entry.grid(row=2, column=1, padx=5, pady=5)
namer_entry.grid(row=3, column=1, padx=5, pady=5)
otchr_entry.grid(row=4, column=1, padx=5, pady=5)
test_button = Button(text="click me", command=test)
test_button.grid(row=5, column=1)
 
root.mainloop()
Добавлено через 4 минуты
Во -вторых
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
from tkinter import *
 
root = Tk()
 
root.title("Test btn ttt")
 
buttonText = StringVar()
 
 
def click_button(a):
    a = 0
    if a == 0: # как тут будет что-то другое,если a==0 и меняться не собирается
        buttonText.set("O")
        a += 1
        a %= 2
    else:
        buttonText.set("X")
        a += 1
        a %= 2
 
 
bt1 = Button(textvariable=buttonText, height="1", width="3", background="#555",
             foreground="#ccc", font=("Verdana", 30, "bold"), command=click_button)
 
bt1.pack()
 
root.mainloop()
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
21.04.2021, 21:44
Помогаю со студенческими работами здесь

Сброс игры в крестиках-ноликах
Есть вот такой вот код. public partial class MainWindow : Window { public MainWindow() { new...

Проверка на победу в крестиках-ноликах
Здраствуйте! Я сделал игру крестики-нолики на языке с++, но столкнулся с тем, что у меня нету проверки на победу. Используя разные сайты...

Очередность ходов в крестиках ноликах
Как сделать чтоб крестики и нолики ставились по очереди?

Абстракция игрока в крестиках-ноликах
Я пишу крестики-нолики. хочу создать единый метод для проведения игры внезависимости от типа игроков(человек/компьютер) то есть должны...

Определение победителя в крестиках ноликах
Не знаю как определять победителя в игре,принцип игры основан на кнопках(QPushButton),при нажатии на кнопку в зависимости от хода кнопка...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

Новые блоги и статьи
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru