Есть ли способы добавить ValueError для каждого ввода? - PullRequest
0 голосов
/ 06 ноября 2019

Так что я пытаюсь написать код, в котором вы вводите ширину и высоту прямоугольника, и он дает вам площадь и периметр, теперь очевидно, что входные данные могут быть только числами, поэтому я хочу иметь возможность запросить другой ввод, еслитекущий вход не является числом. (попросите пользователя вводить только цифры). Проблема в том, что если первый ввод (ширина) является числом, а только второй ввод (высота) не является числом, я не хочу, чтобы программа попросила пользователя ввести ширинуопять же, я только хочу, чтобы пользователь снова вводил высоту, а не ширину, поскольку ширина уже была введена как число. Как мне это сделать?

while True:
try:
    a = float(input("Please enter width :"))
    b = float(input("Please enter height :"))

except ValueError:
    print("PLease only enter numbers ")
    continue

area = float(a*b)
perimeter = float((a+b)*2)

print('The area of the rectangle is {} and the perimeter of the rectangle is {} '.format(area, perimeter))

Ответы [ 2 ]

2 голосов
/ 06 ноября 2019

Основной ответ - заключить каждый вызов в float в отдельный try и обрабатывать их отдельно. Буквально писать два try было бы грязно и громоздко.

Вместо этого я бы переместил это try в его собственную функцию, а затем дважды вызвал бы эту функцию:

# Let this function handle the bad-input looping 
def ask_for_float(message):
    while True:
        try:
            return float(input(message)) 

        except ValueError:
            print("Please only enter numbers ")

a = ask_for_float("Please enter width :")
b = ask_for_float("Please enter height :")
0 голосов
/ 06 ноября 2019

Запишите свои входные данные в отдельных блоках try, чтобы ошибки можно было отслеживать отдельно. Например,

try:
a = float(input("Please enter width :"))

except ValueError:
    print("PLease only enter numbers ")

try:
    b = float(input("Please enter height :"))

except ValueError:
    print("PLease only enter numbers ")
    continue

area = float(a*b)
perimeter = float((a+b)*2)
...