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
Просто проверьте if statistics == ''. Как бы то ни было, вы перебираете statistics, но если он пуст, цикл будет повторяться ноль раз.
Переместите проверку пустой строки за пределы цикла:
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("") равно нулю, это дает вам ошибку деления на ноль.
Переместите галочку на statistics == '' перед циклом