Это действительно проблема с отступами (или проблема логического потока).Для большинства языков программирования это не имеет значения, но это важно в python.
Вот что на самом деле делает ваш код:
# initialize boycount and girlcount
while(letter != 'q'):
# do some stuff inside the while loop
# do some stuff inside the while loop
if letter == 'b':
# increment boycount
# do some stuff inside the while loop
# do some stuff after the while loop
# letter must be 'q' now that the while loop ended
if letter == 'g':
# increment girlcount
# this will never happen, because letter cannot be 'g' here
else:
# print summary
# this will always happen because letter is 'q'
Вот что должен делать ваш код:
# initialize boycount and girlcount
while(letter != 'q'):
# do some stuff inside the while loop
# do some stuff inside the while loop
if letter == 'b':
# increment boycount
if letter == 'g':
# increment girlcount
# do some stuff inside the while loop
# do some stuff after the while loop
# letter must be 'q' now that the while loop ended
# print summary
В отличие от большинства других языков программирования, python требует отступов для определения области действия составного блока операторов.Иногда я использую оператор «ничего не делать» pass
с комментарием, чтобы показать свое намерение:
# initialize boycount and girlcount
while(letter != 'q'):
# do some stuff inside the while loop
if letter == 'b':
# increment boycount
pass # end if
if letter == 'g':
# increment girlcount
pass # end if
pass # end while
# print summary
Оператор pass
- это просто заполнитель, который ничего не делает, но он помогает мне выполнить запланированный поток управленияпонятнее, и это может помочь мне обнаружить ошибки проектирования.
Другим диагностическим инструментом, который вы можете использовать, является оператор print ().
# initialize boycount and girlcount
print("start of while letter loop")
while(letter != 'q'):
# do some stuff inside the while loop
if letter == 'b':
print("letter b: increment boycount")
# increment boycount
pass # end if
if letter == 'g':
print("letter g: increment girlcount")
# increment girlcount
pass # end if
pass # end while
print("end of while letter loop")
# print summary
Когда вы тестируете программу с включенными этими утверждениями печати,Вы сможете подтвердить, что каждая команда делает то, что вы ожидаете.После того, как вы убедились, что логика работает, вы можете просто поставить #
перед оператором print, чтобы превратить его в комментарий.
Просто для полноты, официальное руководство по питону Упоминает
Тело цикла с отступом: отступ - это способ группировки операторов в Python