Форум сайта python.su
Высчитывает массу цилиндра по 3-ём введенным от пользователя параметрам.
Нужно провести проверку чисел на тип float.
Всё прекрасно работает, но стоит ввести в первый раз неправильно параметр (РАДИУС), а потом ввести уже корректную циферку, то потом далее при вводе корректной цифры в ВЫСОТУ вылетает ошибка.
Плюс ко всему подобный код на проверку видится мне излишне громоздким. Как лучше подобное провернуть с минимальным кол-вом кода? Заранее благодарю.
*****
from math import pi as PI
def is_number(s): #проверка ввода на число типа float
try:
float(s)
return True
except ValueError:
return False
def radius():
n = input('Диаметр цилиндра, см: ')
if is_number(n):
print('Введено число')
n = float(n)/2
return n
else:
print('Введено НЕ число')
radius()
def height():
n = float(input('Высота цилиндра, см: '))
return n
Отредактировано Amaxiy (Сен. 20, 2022 13:47:45)
Офлайн
AmaxiyНадо использовать циклы для ввода значений.
Всё прекрасно работает, но стоит ввести в первый раз неправильно параметр (РАДИУС), а потом ввести уже корректную циферку, то потом далее при вводе корректной цифры в ВЫСОТУ вылетает ошибка.
Офлайн
py.user.nextif answer.isdigit() and float(answer) > 0: не работает
Отредактировано Amaxiy (Сен. 20, 2022 13:43:56)
Офлайн
>>> def radius(): ... n = None ... while True: ... answer = input('Диаметр цилиндра, см: ') ... try: ... n = float(answer) ... break ... except ValueError: ... pass ... print('Некорректные данные, попробуйте снова') ... return n ... >>> radius() Диаметр цилиндра, см: x Некорректные данные, попробуйте снова Диаметр цилиндра, см: a1 Некорректные данные, попробуйте снова Диаметр цилиндра, см: 1a Некорректные данные, попробуйте снова Диаметр цилиндра, см: 123.456 123.456 >>>
AmaxiyДля обыкновенных дробей надо другой алгоритм использовать. Напиши пока всю программу на десятичных дробях. А вот потом можно будет часть программы по вводу дробей разработать дальше, чтобы можно было вводить как десятичные, так и обыкновенные дроби.
Не пропускает 1.6 и 3/4.
>>> import re >>> >>> pat = r'^\d+(.\d+)?$' >>> >>> text = '123' >>> re.search(pat, text) is not None True >>> >>> text = 'x' >>> re.search(pat, text) is not None False >>> >>> text = '123.456' >>> re.search(pat, text) is not None True >>> >>> text = '123.456x' >>> re.search(pat, text) is not None False >>>
>>> import re >>> >>> pat_div = r'^(\d+)/(\d+)$' >>> text = '1/2' >>> match = re.search(pat_div, text) >>> if match is not None: ... n1, n2 = int(match.group(1)), int(match.group(2)) ... if n2 == 0: ... print('division by zero') ... else: ... result = n1 / n2 ... print('ok', result) ... ok 0.5 >>>
>>> import re >>> >>> pat_div = r'^(\d+)/(\d+)$' >>> text = '1/0' >>> match = re.search(pat_div, text) >>> if match is not None: ... n1, n2 = int(match.group(1)), int(match.group(2)) ... if n2 == 0: ... print('division by zero') ... else: ... result = n1 / n2 ... print('ok', result) ... division by zero >>>
Отредактировано py.user.next (Сен. 17, 2022 04:07:14)
Офлайн