Почему проверка игнорирует значения внутри переменных?
Функция генератора случайных числе запускается по клику на кнопку и считывает данные со строк , заносить их в переменные. Переменные проходят проверку , есть ли во всех переменных числа . Если да - генерируется ключ , если нет - выводиться ошибка . В мое случае ошибка выводиться даже если во всех переменных были числа. Пытался менять тип на int но в isdigit нету атрибута int (насколько я понял )
from tkinter import *
from tkinter import messagebox as mb
import random
def rand(r, a, b):
if r.isdigit == TRUE and a.isdigit == TRUE and b.isdigit == TRUE:
text_key.delete(1.0, END)
d = list
for i in range(r):
d = random.randint(a, b)
text_key.insert(1.0, str(d) + ' ')
print(d, end=" ")
else:
mb.showerror("Помилка",
"В полі 'Розмір ключа','Мінімальне значення' та 'Максимальне значення' повинні бути введені "
"числа!! ")
def clean(evt):
text_key.delete(1.0, END)
entry_size.delete(0, END)
entry_min.delete(0, END)
entry_max.delete(0, END)
button_generation = Button(root, text='Генерувати', width=12, height=1, font='arial 15')
button_generation.bind('<Button-1>', lambda event: rand(str(entry_size.get()),
str(entry_min.get()),
str(entry_max.get())))
button_generation.place(x=450, y=0)
button_clean = Button(root, text='Очистити поле', width=12, height=1, font='arial 15')
button_clean.bind('<Button-1>', clean)
button_clean.place(x=450, y=45)
root.mainloop()
Ответы (1 шт):
Автор решения: insolor
→ Ссылка
Исправленный кусок:
def rand(r, a, b):
if r.isdigit() and a.isdigit() and b.isdigit():
r = int(r)
a = int(a)
b = int(b)
...
- В Python нет
TRUE, естьTrue. В данном случаеTRUEимпортировался из модуля tkinter, но смысла его использовать нет. Второе - если функция возвращаетTrueилиFalse, то не нужно сравнивать сTrue, просто используйте возвращенное из функции значение. r.isdigit- это не вызов метода, это просто ссылка на метод. В вашем коде вы сравниваете ссылку на метод сTRUE, что довольно бессмысленно. Чтобы проверить, что строка содержит только числа, нужно вызвать этот метод, добавив круглые скобки:r.isdigit().- Из полей ввода вы получили строки, они не могут участвовать там где ожидаются целые числа (например в вызовах функций
rangeиrandom.randint(a, b)), поэтому нужно вручную перевести эти строки в целые числа. d = listзаписывает в переменнуюdссылку на функциюlist. Это само по себе бессмысленно, к тому же потом это значение в цикле будет перезаписано числом, которое вернет методrandint.