Проверка введенного сообщения на int или float
def get_penalty(penalty, attempts=3):
user_id = penalty.chat.id
penalty_text = penalty.text
# res = all(map(lambda l: l.isdigit(), penalty_text))
if all(is_number(c) for c in penalty_text):
print("Строка состоит из цифр или чисел с плавающей запятой")
else:
print("Строка содержит другие символы помимо цифр и точки")
# print(res)
def is_number(penalty_text):
return (penalty_text.isdigit() or (penalty_text.count('.') == 1 and penalty_text.replace('.', ',').isdigit()))
помогите решить следующее, переменная penalty_text введена как 6.6 при проверкепишет что (Строка содержит другие символы помимо цифр и точки). Код подсмотрел в других вопросах. Мне нужно, чтобы код принимал целое или число с плавающей точкой как True и далее вносил его в базу данных. Не могу понять как сделать его True. При этом, пользователь может ввести как 6, так и 6.6 или 6,6, да все что угодно и даже текст. Мне нужно чтобы он принял int и float а на остальное вернул ошибку
Ответы (1 шт):
Автор решения: Be3y4uu_K0T
→ Ссылка
Используйте встроенный модуль locale, установив русскую локаль - ru_RU.
>>> import locale
>>> locale.setlocale(locale.LC_ALL, 'ru_RU')
'ru_RU'
>>> locale.atof('6,')
6.0
>>> locale.atof('6,0')
6.0
>>> locale.atof('6.0')
6.0
>>> locale.atof('6.')
6.0
>>> locale.atof('что-то')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/locale.py", line 323, in atof
return func(delocalize(string))
^^^^^^^^^^^^^^^^^^^^^^^^
ValueError: could not convert string to float: 'что-то'
Пример Вашей функции:
>>> def is_number(penalty_text):
... try:
... locale.atof(penalty_text)
... except ValueError:
... return False
... else:
... return True
...
>>> is_number('6.')
True
>>> is_number('6.-1')
False
>>> is_number('6,')
True