Код ниже Python имеет странное поведение, которое я не могу понять.
Программа вызывает testQuery, который запрашивает используемый ответ «да» для вызова ScoreAverager или «нет» выйти из программы. Если вызывается ScoreAverager, он затем запрашивает у пользователя ввести серию баллов или 'x' в fini sh, что возвращает пользователя в testQuery, где они могут выбрать усреднение другого теста или выхода.
Странность возникает, если пользователь усредняет результаты для нескольких тестов (например, 2 или более). В этот момент отказ от testQuery не завершит работу программы. Он будет повторять дополнительный цикл для каждого усредненного теста. Я не могу понять, почему это так. Он выглядит и ведет себя как ошибка, но условия для закрытия l oop выглядят удовлетворенными. Это можно решить с помощью «перерыва», но я бы лучше знал, в чем заключается проблема, чтобы решить его более органично.
Может кто-нибудь дать мне знать, почему происходит такое странное поведение?
КОД:
def scoreAverager():
done=0
scoreTot=0
numScores=0
average=0
while done == 0:
score=input("Enter the numerical score, or enter 'x' to finish entering scores:")
acceptedXs={"X","x"}
if score in acceptedXs:
print ("The average of the scores is: ",average)
#break #this break is necessary for proper function.
done=1
testQuery()
else:
try:
score=float(score)
scoreTot=scoreTot+score
numScores=numScores+1
average=scoreTot/numScores
except ValueError:
print("EXCEPTION: The entry was invalid, please try again.")
def testQuery():
done=0
while done == 0:
moreTests=input("Do you have a set of score to average? Enter 'Yes' or 'No':")
acceptedNos=("No","NO","no")
acceptedYess=("Yes","YES","yes")
if moreTests in acceptedNos:
print("Program Complete.")
done=1
elif moreTests in acceptedYess:
scoreAverager()
else:
print ("ERROR: The entry was invalid. Please try again.")
def main():
testQuery()
main()
ПРИМЕР ВХОД / ВЫХОД:
Do you have a set of score to average? Enter 'Yes' or 'No':Yes
Enter the numerical score, or enter 'x' to finish entering scores:1
Enter the numerical score, or enter 'x' to finish entering scores:2
Enter the numerical score, or enter 'x' to finish entering scores:x
The average of the scores is: 1.5
Do you have a set of score to average? Enter 'Yes' or 'No':Yes
Enter the numerical score, or enter 'x' to finish entering scores:1
Enter the numerical score, or enter 'x' to finish entering scores:2
Enter the numerical score, or enter 'x' to finish entering scores:x
The average of the scores is: 1.5
Do you have a set of score to average? Enter 'Yes' or 'No':No
Program Complete.
Do you have a set of score to average? Enter 'Yes' or 'No':No
Program Complete.
Do you have a set of score to average? Enter 'Yes' or 'No':No
Program Complete.