Совет по обработке исключений - PullRequest
0 голосов
/ 31 августа 2018

Я новичок в Python и создаю небольшую программу, которая подсчитывает, сколько должно по кредиту. Мне нужна помощь с обработкой исключений в моей программе.

Когда я ввожу нечисловое число, программа перезагружается до самого начала, предлагая пользователю повторить попытку. Хотя, когда я ввожу все с цифрами, ничего не рассчитывается и возвращает меня к началу программы. Мне нужно некоторое руководство и нужно знать, что я делаю неправильно.

permonthpayment = 0
loantotal = 0
monthlyinterestrate = 0
numberofpayments = 0 
loanyears = 0

while True:
    loantotal = input("How much money do you need loaned? ")
    loanyears = input("In how many years will full payment be fulfilled? ")
    monthlyinterestrate = input("What's the annual interest rate? (Enter as whole number) ")

try:
    loanyears = float(loanyears)
    loantotal = float(loantotal)
    monthlyinterestrate = float(monthlyinterestrate)
except:
    print("Please enter a valid number and try again.")
    continue

totalpayments = loanyears*12
percent = monthlyinterestrate/100

permonthpayment = (loantotal * (percent/12)) / (1-(1/(1 + (percent/12))) ** (loanyears * 12))
totalpayment = (permonthpayment) * totalpayments

print("You owe $" + str(round(permonthpayment, 2)), "each month")
print("You owe $" +str(round(totalpayment, 2)), "at the end of the pay period")

1 Ответ

0 голосов
/ 31 августа 2018

Здравствуйте и добро пожаловать в StackOverflow! Ваш код выглядит довольно хорошо, есть только одно маленькое изменение, которое необходимо для запуска этой программы. В настоящее время вы запрашиваете ввод данных пользователем внутри цикла while, но затем вы выходите из цикла while перед проверкой ввода. Давайте взглянем на правильную проверку ввода в python:

while True:
    try:
         loantotal = input("How much money do you need loaned? ")
         loanyears = input("In how many years will full payment be fulfilled? ")
         monthlyinterestrate = input("What's the annual interest rate? (Enter as whole number) ")
    except ValueError:
        print("Sorry, I didn't understand that.")
        #better try again... Return to the start of the loop
        continue
    else:
        # the values were successfully parsed!
        #we're finished with input validation and ready to exit the loop.
        break 
# now we can continue on with the rest of our program
permonthpayment = (loantotal * (percent/12)) / (1-(1/(1 + (percent/12))) ** (loanyears * 12))
totalpayment = (permonthpayment) * totalpayments

print("You owe $" + str(round(permonthpayment, 2)), "each month")
print("You owe $" +str(round(totalpayment, 2)), "at the end of the pay period")

while True:... по сути означает «делать ... навсегда», если вам явно не сказано остановиться. Таким образом, в нашем случае мы будем просить пользователя о вводе навсегда, пока они не введут значения, которые не приведут к ValueError. Исключение ValueError в python возникает из-за сбоя приведения типа данных или, более конкретно, в нашем случае из-за сбоя при преобразовании необработанного пользовательского ввода в числа с плавающей запятой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...