2015-10-11 2 views
-1
## 
numOfYears = 0 
## Ask user for the CPI 
cpi = input("Enter the CPI for July 2015: ") 
## If they didn't enter a digit, try again 
while not cpi.isdigit(): 
    print("Bad input") 
    cpi = input("Enter the CPI for July 2015: ") 
## Convert their number to a float 
cpi = float(cpi) 
while cpi <= (cpi * 2): 
    cpi *= 1.025 
    numOfYears += 1 
## Display how long it will take the CPI to double 
print("Consumer prices will double in " + str(numOfYears) + " years.") 

Есть ли способ принять номер, который пользователь вводит cpi, и удвоить его так, чтобы while cpi <= (cpi * 2) не дал мне бесконечный цикл? Кроме того, есть ли способ разрешить пользователю вводить число с плавающей запятой, чтобы он не возвращал ошибку Bad input? Вся помощь очень ценится.Как мне избавиться от этого бесконечного цикла?

ответ

6

Другие уже объяснили, почему вы получите, что бесконечный цикл: Вы сравниваете cpi его текущей стоимости вместо его первоначальной стоимости. Тем не менее, есть еще:

  1. Результат numOfYears не зависит от cpi
  2. Вам не нужно петлю на всех, просто используйте logarithms

Таким образом, вы можете просто изменить свой код следующим образом:

from math import ceil, log 
numOfYears = ceil(log(2)/log(1.025)) 

Это дает вам годы, пока любой CPI не удвоенные с учетом годовой нормы изменения 1.025.


О другой Ваш вопрос:

Кроме того, есть ли способ, чтобы позволить пользователю ввести число с плавающей точкой, так что он не возвращает ошибку «Bad вход»?

Вы должны просто try преобразовать плавать и break из цикла как только он работает.

while True: 
    try: 
     cpi = float(input("Enter the CPI for July 2015: ")) 
     break 
    except ValueError: 
     print("Bad input") 

Но, как я уже сказал, для того, что вы вычисляете в этом скрипте, вам не нужно это число вообще.

+1

XY Проблема замечена! – Amxx

2

Вы должны сохранить значение givent в качестве входных данных

cpi = float(cpi) 
target_cpi = cpi * 2 
while cpi <= target_cpi: 
    cpi *= 1.025 
    numOfYears += 1 
Смежные вопросы