2017-02-04 3 views
0

У меня есть код, который просит пользователя угадать ответ на расчет, а затем либо сообщает им, что они верны, либо пытается определить, где они поступили неправильно. Я использовал цикл while в этом, но иногда он застревает, есть ли способ добавить счетчик к принятым предположениям и разбить цикл while после 5 неправильных догадок?Добавить счетчик while loop python

ответ

1

В целом это должно выглядеть следующим образом:

i = 0 
while i < max_guesses: 
    i+=1 
    # here is your code 
0

Вам просто нужно создать wrong_guess счетчик, и остановить время цикла, если wrong_guess> = 5:

wrong_guess = 0 
Ac=L*xm 
#ask user to work out A (monthly interest * capital) 
while wrong_guess < 5: 
    A= raw_input("What do you think the monthly interest x the amount you are borrowing is? (please use 2 d.p.) £") 
    A=float(A) 
    #tell user if they are correct or not 
    if A==round(Ac,2): 
     print("correct") 
     break 
    elif A==round(L*x,2): 
     print("incorrect. You have used the APR rate, whic is an annual rate, you should have used this rate divided by 12 to make it monthly") 
    elif A==round(L/(x*100),2): 
     print("incorrect. You have used the interest rate as a whole number when you should have used it as a decimal, and divided it by 12 for the monthly rate") 
    else: 
     print("Wrong, it seems you have made an error somewhere, you should have done the loan amount multiplied by the monthly rate") 
    wrong_guess += 1 
+2

Там нет необходимости писать 'wrong_guess + = 1' так много раз, поскольку OP ломается, когда ответ правильный. – MaLiN2223

1

Pythonic путь

max_guesses = 5 
guessed = False 
for wrong_guesses in range(max_guesses): 
    if A==round(Ac,2): 
     print("correct") 
     guessed = True 
     break 
    ... 
else: 
    print("You have exceeded the maximum of {} guesses".format(max_guesses)) 
if not guessed: 
    wrong_guesses += 1 

Таким образом, цикл выполняется не более max_guesses раз. Блок else выполняется только в том случае, если цикл не завершился из-за инструкции break, т. Е. Когда правильного предположения не было.

Обратите внимание: if not guessed в конце должен подсчитывать последнее неправильное предположение, потому что цикл заканчивается на wrong_guesses == (max_guesses - 1 в этом случае). Это связано с тем, что range является итератором на интервале [0, max_guesses) (исключая верхний предел).

1

Просто создайте переменную для хранения неправильных предположений и использовать, если условие, чтобы решить, когда произойдет 5 incorrects, остановить loop.As показано ниже:

Ac=L*xm 
count = 0 #variable to store incorrect guesses 
#ask user to work out A (monthly interest * capital) 
while True: 
    if count == 5: #IF COUNT(incorrect) is 5 times 
     break #stop loop 
    else: # if not continue normally 
     A = raw_input("What do you think the monthly interest x the amount you are borrowing is? (please use 2 d.p.) £") 
     A = float(A) 
     # tell user if they are correct or not 
     if A == round(Ac, 2): 
      print("correct") 
      break 
     elif A == round(L * x, 2): 
      print(
       "incorrect. You have used the APR rate, whic is an annual rate, you should have used this rate divided by 12 to make it monthly") 
      count += 1 
     elif A == round(L/(x * 100), 2): 
      print(
       "incorrect. You have used the interest rate as a whole number when you should have used it as a decimal, and divided it by 12 for the monthly rate") 
      count += 1 
     else: 
      print(
       "Wrong, it seems you have made an error somewhere, you should have done the loan amount multiplied by the monthly rate") 
      count += 1