ZeroDivisionError: деление на ноль. Что нужно изменить

def get_success_rate(statistics: str) -> int:
    count = 0
    for i in statistics:
        if statistics == '':
            return 0
        if i == '1':
            count += 1
    res = count / len(statistics) * 100
    return round(res)


print(get_success_rate("11100"))  # 60
print(get_success_rate("1100"))  # 50
print(get_success_rate("000000"))  # 0
print(get_success_rate("11111"))  # 100
print(get_success_rate(""))  # 0
60
50
0
100
Traceback (most recent call last):
  File "D:\Program Files\Python\CHERHOBNK\Folder - 1\draft.py", line 807, in <module>
    print(get_success_rate(""))  # 0
  File "D:\Program Files\Python\CHERHOBNK\Folder - 1\draft.py", line 799, in get_success_rate
    res = count / len(statistics) * 100
ZeroDivisionError: division by zero

Переместите галочку на statistics == '' перед циклом

buran 18.02.2023 22:12

Просто проверьте if statistics == ''. Как бы то ни было, вы перебираете statistics, но если он пуст, цикл будет повторяться ноль раз.

snakecharmerb 18.02.2023 22:12
Инструменты для веб-скрапинга с открытым исходным кодом: Python Developer Toolkit
Инструменты для веб-скрапинга с открытым исходным кодом: Python Developer Toolkit
Веб-скрейпинг, как мы все знаем, это дисциплина, которая развивается с течением времени. Появляются все более сложные средства борьбы с ботами, а...
Библиотека для работы с мороженым
Библиотека для работы с мороженым
Лично я попрощался с операторами print() в python. Без шуток.
Эмиссия счетов-фактур с помощью Telegram - Python RPA (BotCity)
Эмиссия счетов-фактур с помощью Telegram - Python RPA (BotCity)
Привет, люди RPA, это снова я и я несу подарки! В очередном моем приключении о том, как создавать ботов для облегчения рутины. Вот, думаю, стоит...
Пошаговое руководство по созданию собственного Slackbot: От установки до развертывания
Пошаговое руководство по созданию собственного Slackbot: От установки до развертывания
Шаг 1: Создание приложения Slack Чтобы создать Slackbot, вам необходимо создать приложение Slack. Войдите в свою учетную запись Slack и перейдите на...
Учебник по веб-скрапингу
Учебник по веб-скрапингу
Привет, ребята... В этот раз мы поговорим о веб-скрейпинге. Целью этого обсуждения будет узнать и понять, что такое веб-скрейпинг, а также узнать, как...
Тонкая настройка GPT-3 с помощью Anaconda
Тонкая настройка GPT-3 с помощью Anaconda
Зарегистрируйте аккаунт Open ai, а затем получите ключ API ниже.
0
2
78
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

Переместите проверку пустой строки за пределы цикла:

def get_success_rate(statistics: str) -> int:
    if statistics == '':
        return 0
    count = 0
    for i in statistics:
        if i == '1':
            count += 1
    res = count / len(statistics) * 100
    return round(res)

Если строка пуста, цикл не будет выполняться, поэтому проверка фактически будет пропущена.

Логика вашей функции не верна. Судя по коду, вы, вероятно, захотите сделать предложение if statistics == '' перед итерацией, for i in statistics. Тогда у вас больше не будет ошибки деления на ноль вашей функции.

Проблема с вашим текущим кодом заключается в том, что итерация не происходит, когда статистика == '', нечего повторять. А затем делается вызов res = count / len(statistics) * 100, и поскольку len("") равно нулю, это дает вам ошибку деления на ноль.

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