Как найти все специальные символы в заданной пользователем строке в Python? - PullRequest
0 голосов
/ 29 сентября 2019

Я создаю приложение GUI BMI Calculator с использованием Python и tkinter, и мне нужна помощь.

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

Я использовал метод компиляции regex, как видел онлайн.Но он не обнаружил все специальные символы.Как и когда я дал 165,56 вместо 165,56, он вернулся и ошибка в консоли.Другие символы, такие как # $ @! $ И т. Д., Все отлично работали, показывая tkMessageBox, как я запрограммировал.

Я пробовал каждый символ в строке, просматривая итерацию и находя, есть ли специальные символы, и я даже использовал regex compile, как уже упоминалосьвыше, но ни один из них не удовлетворяет моим запросам.

    regex = re.compile('[@_!#$%^&*()<>?/\|}{~:]')

#assume have already got the value for h from user as 165,65
    h = Entry.get(heightEntry)
    if not h:
        h = "0"
        height = 0
    elif h.isdigit() == True:
        height = float(h)
    elif h.isalnum() == True:
        height = "None"
    elif regex.search(h) == None:
        for x in h:
            if "." in x:
                y += 1
        if y >=2:
            height = "None"
        else:
            height = float(h)
    else:
        height = "None"

#Check height lies between 0.5m and 3.0m or 50cm to 300cm
    if not height:
        print("There is no value for height to calculate")
        tkMessageBox.showerror("Alert","No height value")
    else:
        if height == "None":
            print("Invalid height value")
            tkMessageBox.showerror("Alert","Invalid height value")
            height = 0
        elif not ((50.0<=height<=300.0) or (0.5<=height<=3.0)):
            print("Invalid height value",height)
            tkMessageBox.showerror("Alert","Invalid height value")
        else:
            if 50.0<=height<=300.0:
                print("Height:",height,"cm")
            else:
                print("Height:",height,"m")

Я ожидал, что результат покажет окно сообщения ниже высоты == "Нет"

Но оно показывает трассировку самой последней ошибки вызова.

1 Ответ

1 голос
/ 29 сентября 2019

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

import tkinter as tk

root = tk.Tk()

def onValidate(P):
    try:
        float(P)
    except:
        return False
    return True

vcmd = (root.register(onValidate), '%P')

entry = tk.Entry(root, validate="key", validatecommand=vcmd)
entry.pack()

root.mainloop()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...