У меня проблема в ката кодварс https://www.codewars.com/kata/58cbfe2516341cce1e000001/train/python
def count_zeros_n_double_fact(n):
res = []
oddeven = []
revers = []
result = 1
c = 0
for i in range(n+1):
if i % 2 == 0 and i != 0:
oddeven.append(i)
for x in oddeven:
result = result * x
for z in reversed(str(result)):
if z == '0':
c+=1
else:
break
return c
Я прошел тесты, но при попытках любого большого числа он возвращает ноль
тесты с возвратом:

попытки с возвратом:

Но когда я использовал печать, все ответы были правильными
def count_zeros_n_double_fact(n):
res = []
oddeven = []
revers = []
result = 1
c = 0
for i in range(n+1):
if i % 2 == 0 and i != 0:
oddeven.append(i)
for x in oddeven:
result = result * x
for z in reversed(str(result)):
if z == '0':
c+=1
else:
break
print (c)
попытки с печатью
Пожалуйста, помогите мне!
Для будущих вопросов, , пожалуйста, попробуйте , чтобы сначала найти проблему самостоятельно . Мы не даем полных ответов на подобные вопросы, потому что они не соответствуют стандартам сайта; нам нужны конкретные вопросы, которые могут помочь кому-то еще. Чтобы создать хороший вопрос, сначала найдите проблему, внимательно изучив, шаг за шагом, что делает код; когда вы обнаружите проблему, создайте правильный минимально воспроизводимый пример только для той части, которая является проблемой, а затем посмотрите, есть ли еще значимый вопрос.
«Но когда я использовал печать, все ответы были правильными» - это не так. Вы не правильно поняли отзыв тестировщика. Числа, которые вы получаете от print, такие же, как те, которые возвращаются return, но вы должны return, чтобы удовлетворить тестер. Тестер не может прочитать то, что отображается на экране, когда он вызывает вашу функцию. Он должен использовать возвращаемое значение.
@KarlKnechtel Он делает return c в первой версии, которую, я полагаю, он отправляет тестировщику. Вторая версия - просто посмотреть, что она возвращает.
@ Бармар ... да, я понимаю. В вопросе говорится: «Когда я использовал печать, все ответы были правильными», но это явно не так. Он печатает ответы, которые были бы возвращены в противном случае, и эти ответы явно неверны в половине случаев. (Тестер терпит неудачу при использовании печати, но это отдельная проблема.)
@KarlKnechtel Ты прав, я не смотрел на этот скриншот.
@KarlKnechtel Спасибо за ваш комментарий, я действительно пытался понять проблему, но не смог, спасибо за ваше время, и я постараюсь быть более точным.
@Barmar спасибо братан






Ваша логика неверна, вы всегда используете нечетные числа, но как говорится
n нечетное, умножьте нечетные числа до nn четное, умножьте четные числа до nВозьмите требуемые значения, как указано в упражнении
def count_zeros_n_double_fact(n):
res = []
oddeven = []
revers = []
result = 1
c = 0
for i in range(1, n+1):
if (i % 2 == 0 and n % 2 == 0) or (i % 2 == 1 and n % 2 == 1):
oddeven.append(i)
for x in oddeven:
result = result * x
for z in reversed(str(result)):
if z == '0':
c+=1
else:
break
return c
Зацикливайте только на каждых двух значениях и умножайте их напрямую, не сохраняйте их в списке
def count_zeros_n_double_fact(n):
result = 1
c = 0
for i in range((n + 1) % 2 + 1, n + 1, 2):
result *= i
for z in reversed(str(result)):
if z == '0':
c += 1
else:
break
return c
Другой путь
from functools import reduce
from operator import mul
def count_zeros_n_double_fact(n):
result = str(reduce(mul, range((n + 1) % 2 + 1, n + 1, 2)))
return len(result) - len(result.rstrip("0"))
Большое спасибо за ваш отличный ответ, я ценю ваши усилия
Подсказка: посмотрите на тестовые примеры, которые не прошли. Введенные числа нечетные или четные? А теперь хорошенько подумайте над своей логикой. Если введено число
9, какие числа будут умножены вашим кодом? (Вы проверяли? Можете ли вы придумать способ проверки? Что, если вы попытаетесь отобразитьoddevenперед выполнением умножения?) Какие числа должны быть умножены вместе? Вы понимаете, почему это вызывает проблему?