Как исправить ZeroDivisionError: Деление на ноль?

После запуска кода я получаю ZeroDivisionError! Может кто-нибудь объяснить, что происходит? Поиск среднего значения входных данных bscore и gscore

bscore = 0
gscore = 0
bcount = 0
gcount = 0

choice = input("Boy (b), Girl (g) or Quit (q): ")
while (choice != 'q'):
    if (choice == 'b'):
        score = int(input("Boy score: "))
        bscore += score
        bcount == 1
        #z = (x / y) if y != 0 else 0
    elif (choice =='g'):
        score = int(input("Girl score: "))
        gscore += score
        gcount += 1
    else:
            print("Invalid!")
    choice = input("Boy (b), Girl (g) or Quit (q): ")

print("Boy average is: ", (bscore/bcount))
print("Girl average is: ", (gscore/gcount))

Bcount == 1 ничего не делает

Andrew Allen 04.05.2019 02:11
bcount == 1 должен был быть bcount += 1. Похоже, вы не нажали Shift, когда хотели. (Закрытое голосование как опечатка.)
user2357112 supports Monica 04.05.2019 02:11

Ну, для начала, как вы думаете, что произойдет, если вы не введете ни одного балла за мальчика? Что даст bscore/bcount?

Matias Cicero 04.05.2019 02:11

Попался, поэтому вам нужно будет ввести bscore и gscore для результатов на обоих!

Mr.PlayNoGames 04.05.2019 02:15

@Mr.PlayNoGames Верно. Вы также можете потребовать, чтобы пользователь ввел хотя бы одно значение для каждого из них, или учитывает этот пограничный случай при расчете среднего значения, например. print("Boy average is: ", bscore/(bcount or 1))

Matias Cicero 04.05.2019 02:21
Обработка исключений
wwii 04.05.2019 02:22
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
6
2 095
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вам нужно заменить bcount == 1 с bcount += 1. bcount == 1 — это логическое выражение, которое здесь ничего не делает. Похоже, вы хотите увеличить счет в этот момент.

Кроме того, даже после этого может быть ZeroDivisionError, поскольку может случиться так, что ввод никогда не был b или g. Я бы рекомендовал иметь условие if, прежде чем пытаться разделить при печати.

Это было бы одним из источников ошибки. OP никогда не увеличивает bcount и инициализируется 0. Таким образом, деление на это определенно приведет к этой ошибке, даже если бы было введено b и соответствующая оценка

anon 04.05.2019 02:20

@MatiasCicero - если bcount никогда не увеличивается из-за ошибки в этой строке, то он всегда останется 0 и может привести к ошибке, если он используется в качестве делителя.

wwii 04.05.2019 02:21

Теперь он работает, «bcount == 1» было синтаксической ошибкой с моей стороны!

Mr.PlayNoGames 04.05.2019 02:22

Вам нужно будет проверить во время деления на случай, если не будет записей мальчиков или девочек, хотя перед делением их количество останется равным 0 @Mr.PlayNoGames.

anon 04.05.2019 02:23

Другие вопросы по теме