Проверка входных данных Python - положительное число с плавающей запятой или int приняты - PullRequest
0 голосов
/ 28 июня 2018

кажется, что мы много просим, ​​но мы ищем короткую проверку для положительного значения int или float, вводимого в качестве ввода. Код ниже отклоняет отрицательные, текстовые и нулевые записи - ура! Он принимает int как действительный, но почему запись не проходит как 1.1? (казалось бы, положительная числовая запись) Мы хотим, чтобы запись положительных 1 и 1.1 прошла. Есть ли простой способ без двух отдельных блоков, включая try / catch?

bookPrice = input("What is the cost of your book? >> ")
while bookPrice.isnumeric() is False or float(bookPrice) < 0:
    bookPrice = input("Use whole # or decimal, no spaces: >> ")
bookPrice = float(bookPrice)
print("Your book price is ${0:<.2f}.".format(bookPrice))

1 Ответ

0 голосов
/ 28 июня 2018

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...