isnumeric()
проверяет, являются ли все символы числовыми (например, 1, 2, 100 ...).
Если вы поставите «.» во входных данных он не считается ни числовым символом, ни '-', поэтому он возвращает False
.
Я бы попытался преобразовать входные данные в float и обойти некорректные входные данные.
Вы могли бы использовать isinstance()
, но для этого вам нужно было бы преобразовать входные данные во что-то другое, чем string .
Я придумал это:
message = "What is the cost of your book? >>"
while True:
bookPrice = input(message)
try:
bookPrice = float(bookPrice)
if bookPrice <= 0:
message = "Use whole # or decimal, no spaces: >> "
continue
currect_user_input = True
except ValueError:
currect_user_input = False
message = "Use whole # or decimal, no spaces: >> "
if currect_user_input:
print("Your book price is ${0:<.2f}.".format(bookPrice))
break