Найти - Пользователи
Полная версия: Ошибка в программе "Панграм"
Начало » Python для новичков » Ошибка в программе "Панграм"
1 2
dement3r
Здравствуйте, последние 2 недели я изучаю язык Python и tkinter
Недавно я захотел сделать desktop-приложение, которое сможет узнавать(поправьте, если не так написал) есть ли в ведёном тексте pangram, но я столкнулся с ошибкой, решение которой я не знаю. Был бы очень благодарен, если бы кто-нибудь подсказал мне решение моей проблемы
Вот код:
 from tkinter import *
root = Tk()
w = root.winfo_screenwidth()
h = root.winfo_screenheight()
w = w // 2
h = h // 2
w = w - 200
h = h - 200
root.geometry('400x400+{}+{}'.format(w, h))
root.title("Панграм")
def is_pangram(phrase):
    alphabet = "abcdefghijklmnopqrstuvwxyz"
    for char in alphabet:
        if char not in phrase:
            return False
    return True
e = Entry(root, width = 50)
e.pack()
e.insert(0,"Введите текст")
b = Button(root, text="Узнать панграм", command=is_pangram); b.pack()
root.mainloop()
А вот ошибка, которую мне выдаёт: 
Exception in Tkinter callback
Traceback (most recent call last):
  File "Programs\Python\Python39\lib\tkinter\__init__.py", line 1892, in __call__
    return self.func(*args)
TypeError: is_pangram() missing 1 required positional argument: 'phrase'
Вроде как нужно создать class __init__ , но я не уверен
xam1816
[code python]между этимим тегами вставлять код[/code]
dement3r
Сейчас я добавил class __call__
 from tkinter import *
root = Tk()
w = root.winfo_screenwidth()
h = root.winfo_screenheight()
w = w // 2
h = h // 2
w = w - 200
h = h - 200
root.geometry('400x400+{}+{}'.format(w, h))
root.title("Панграм")
class __call__():
    def is_pangram(phrase):
        alphabet = "abcdefghijklmnopqrstuvwxyz"
        for char in alphabet:
            if char not in phrase:
                return False
                return True
e = Entry(root, width = 50)
e.pack()
e.insert(0,"Введите текст")
b = Button(root, text="Узнать панграм", command=is_pangram); b.pack()
root.mainloop()
И у меня появилась новая ошибка, которая не распознаёт имя is_pangram:
Traceback (most recent call last):
  File "", line 26, in <module>
    b = Button(root, text="Узнать панграм", command=is_pangram); b.pack()
NameError: name 'is_pangram' is not defined
dement3r
xam1816
Ой, простите, пожалуйста
dement3r
Также решил попробовать без alphabet
 from tkinter import *
root = Tk()
w = root.winfo_screenwidth()
h = root.winfo_screenheight()
w = w // 2
h = h // 2
w = w - 200
h = h - 200
root.geometry('400x400+{}+{}'.format(w, h))
root.title("Панграмм")
c=0
def is_pangram():
    if c in 'abcdefghijklmnopqrstuvwxyz':
        True
    else:
        False
e = Entry(root, width = 50)
e.pack()
e.insert(0,"Введите текст")
b = Button(root, text="Узнать панаграмм", command = is_pangram); b.pack()
root.mainloop()
и получилась ошибка: Exception in Tkinter callback
Traceback (most recent call last):
File “Python\Python39\lib\tkinter\__init__.py”, line 1892, in __call__
return self.func(*args)
File “”, line 13, in is_pangram
if c in ‘abcdefghijklmnopqrstuvwxyz’:
TypeError: ‘in <string>’ requires string as left operand, not int
py.user.next
dement3r
Был бы очень благодарен, если бы кто-нибудь подсказал мне решение моей проблемы
Не надо делать всё сразу, сделай сначала просто пустое окно, которое запускается. Когда сделаешь окно, добавь к нему средства ввода и вывода текста и потестируй их. Когд сделаешь окно со средствами ввода и вывода текста, тогда добавишь в него функцию проверки текста. Так по чуть-чуть ты и придёшь к конечному результату, в котором всё будет работать.
dement3r
py.user.next
Неужели ошибка заключается только в том, что я просто поторопился?
xam1816
dement3r
Неужели ошибка заключается только в том, что я просто поторопился?
тебе нужно приложение или научиться писать программы?
dement3r
xam1816
Мне нужно и приложение и научиться писать, но я не знаю в чём тут ошибка. Те ошибки которые у меня вылезают, мной никак не исправятся, просто потому, что я не знаю как их исправить. Моё знание языка заканчивается на этом, вроде всё правильно, а вроде и нет. Это моё desktop-приложение, через библиотеку tkinter и я бы хотел услышать какие-нибудь советы или например, чтобы мне подсказали что я не так написал, мне нравится программировать, мне нравится исправлять ошибки, учится на них, но без совета я тут точно не справлюсь)
xam1816
dement3r
хотел услышать какие-нибудь советы

вход информации -> обработка информации -> выход информации.

вот ты человек, у тебя есть глаза - это вход информации,т.е ты смотришь на строку и она через глаза поступает в мозг.
в мозге обработка информации, т.е там ее крутишь, вертишь, сравниваешь, считаешь, ассоциируешь с чем-то тд., т.е изначальная информация преобразуется в другую информацию.
у тебя есть рот - это выход информации Так ты передаешь преобразованную информацию дальше. говоришь вслух ее. У другого человека ухо - это вход информации, и так далее.

так вот программа - это такая же сущность, как и человек.(или человек такая же сущность как программа).

обязательно должен быть вход для информации. У тебя есть окно где есть есть строка ввода - ок. У тебя есть кнопка(нажатие на кнопку это тоже входящая информация т.е вкл или выкл) - ок.

эта информация попавшая на вход должна передаться в обработчик. У тебя это функция - ок. На входе у нее строка -> на выходе ответ да или нет.Так информация преобразовалась в другую информацию.

теперь нужен выход информации. У тебя он где???. Ты должен вывести что-то в виде слов, или рисунков, или звуков. Т.е информацию нужно куда то передать.

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

Сделай окно где есть поле ввода, кнопка, поле вывода. Обработка информации будет нулевой - т.е то что ввел в строку эта же строка после нажатия на кнопку должна выйти на вывод

выложи рабочий код этого варианта
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB