Вы вызвали конструкторы float
и int
, которые без аргументов возвращают нулевое значение.
Итак:
if type(a) != (float() or int()):
переводится в:
if type(a) != (0.0 or 0):
, который затем (благодаря правилам булевой оценки) становится:
if type(a) != 0:
, что явно неверно.
Если вы хотите проверить точные типы, проверьте с помощью in
для tuple
типов, например:
if type(a) not in (float, int):
Обычно вы хотите принять подклассы, поэтому подход Pythonic будет:
if not isinstance(a, (float, int)):
Конечно, ничего из этого не решит проблему проверки.Вы явно создали a
, преобразовав str
в float
. всегда будет float
или будет повышать ValueError
, если строка не является допустимым значением float
.Проверка типов никогда не поможет.
Итак, что вы действительно хотите - это выполнить преобразование в блоке try
и перехватить исключение, если оно завершится неудачей:
try:
a = float(input('Insert the value for a: '))
b = float(input('Insert the value for b: '))
c = float(input('Insert the value for c: '))
except ValueError:
sys.exit('You didn\'t insert a number!') # or some equivalent action to handle failure
Если вы хотите выполнить цикл, пока вам не дадут правильный номер, у нас есть несколько вопросов на выбор из (есть еще десятки, я просто могу 'не надо связывать их всех).