новичку в python нужна помощь с использованием цикла while - PullRequest
0 голосов
/ 24 октября 2018

Назначение :

Напишите интерактивное приложение на Python для отображения простого меню для пользователя.Пусть они выберут для мальчика (b) , девочки (г) или quit (q) для выхода из программы.Программа должна продолжать цикл, пока пользователь не решит выйти.Это приложение будет использовать циклы и условия для выполнения задачи. Ваша программа должна выводить средний балл мальчика и средний балл девочки.

Код :

 letter= input(" type (b) for Boy (g) for Girl or (q) for quit")
 boycount= 0
 girlcount=0


while(letter != 'q'):
   if  letter == 'b':
       print("Enter score for boy")
       scoreB= float(input())
       boycount = boycount +1
       letter=input(" type (b) for Boy (g) for Girl or (q) for quit")

if letter == 'g':
    print("enter score fo Girl")
    scoreG = float(input())
    girlcount= girlcount +1
    letter=input(" type (b) for Boy (g) for Girl or (q) for quit")

else:

   print("the average for the girls is",scoreG/girlcount)
   print("the average for the boys is",scoreB/boycount)

Не знаете, что делать, если вы новичок в Python.Я понимаю, что мне нужно сделать, и сообщения об ошибках, которые я получаю, но при реализации этого в python я застреваю.

ошибки Я получил: после ввода значениядля b и при попытке ввести другое значение для bi выдается ошибка о том, что оценкаG не определена

Ответы [ 2 ]

0 голосов
/ 24 октября 2018

Это действительно проблема с отступами (или проблема логического потока).Для большинства языков программирования это не имеет значения, но это важно в 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

0 голосов
/ 24 октября 2018

На самом деле самой большой проблемой был отступ.

Это должно работать:

letter= input(" type (b) for Boy (g) for Girl or (q) for quit")
boycount= 0
girlcount=0
scoreB = 0
scoreG = 0

while True:
   if  letter == 'b':
       print("Enter score for boy")
       scoreB += float(input())
       boycount = boycount +1
       letter=input(" type (b) for Boy (g) for Girl or (q) for quit")
   elif letter == 'g':
       print("enter score fo Girl")
       scoreG += float(input())
       girlcount= girlcount +1
       letter=input(" type (b) for Boy (g) for Girl or (q) for quit")
   elif letter == 'q':
       print("the average for the girls is",scoreG/girlcount)
       print("the average for the boys is",scoreB/boycount)
       exit()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...