У меня есть код, который просит пользователя угадать ответ на расчет, а затем либо сообщает им, что они верны, либо пытается определить, где они поступили неправильно. Я использовал цикл while в этом, но иногда он застревает, есть ли способ добавить счетчик к принятым предположениям и разбить цикл while после 5 неправильных догадок?Добавить счетчик while loop python
ответ
В целом это должно выглядеть следующим образом:
i = 0
while i < max_guesses:
i+=1
# here is your code
Вам просто нужно создать 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
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) (исключая верхний предел).
Просто создайте переменную для хранения неправильных предположений и использовать, если условие, чтобы решить, когда произойдет 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
Там нет необходимости писать 'wrong_guess + = 1' так много раз, поскольку OP ломается, когда ответ правильный. – MaLiN2223