У меня мини-програма предназначена для считания произведения елементов числа

Например задаем число 25 и результат: 2*5=10, но функция rap() почему-то выводит только последний элемент в случае 25 в списке fold оставляет только 5 и если напишем например 12334334, функция оставит только 4.

firstfold = []
def rap(a):
    while a > 0:
      fold.append(a % 10)
      a = a // 10
      return fold
a = int(input("Enter numbers: "))
rap(a)
firstfold.extend(fold)
print(firstfold)
result = 1  # перемножаем элементы между собой
for i in range(0, len(firstfold)):
   result = result * firstfold[i]
print(result)

Ответы (2 шт):

Автор решения: icYFTL

Слишком много кода.

from functools import reduce

reduce(lambda x, y: x*y, (int(c) for c in input()))

*ty to Shamus

→ Ссылка
Автор решения: Shamus Rezol
def rap(a):
    while a > 0:
      fold.append(a % 10)
      a = a // 10
      return fold
a = int(input("Enter numbers: "))
rap(a)
    firstfold.extend(fold)
    print(firstfold)
    result = 1 #перемножає елемнти між собою
    for i in range(0, len(firstfold)):
        result = result * firstfold[i]
    print(result)

Тут мы видим, что в функции rap возвращается некоторая глобальная переменная fold в конце первой итерации цикла. То есть fold+(a%10, ). Достаточно опустить инструкцию return на уровень ниже и объявить fold как локальную переменную перед циклом во избежание каких-либо ошибок при многократном вызове. Таким образом, в fold добавятся все цифры числа a.

def rap(a):
    fold=list()
    while a > 0:
        fold.append(a % 10)
        a = a // 10
    return fold
→ Ссылка