Произведение отличных от нуля чисел

Напишите программу, которая считывает 10 чисел и выводит произведение отличных от нуля чисел.

Формат входных данных: На вход программе подаются 10 целых чисел, каждое на отдельной строке.

Формат выходных данных: Программа должна вывести произведение отличных от нуля чисел.

Примечание: Гарантируется, что хотя бы одно из 10 чисел является ненулевым.

Sample Input 1:

8 
0  
1  
2  
1  
0  
0  
5  
4  
12


Sample Output 1:

3840

Мой код:

total = 1
a = int(input())
for i in range(1, 10):
    if a != 0 and a *= a:
        a += a
print(total)
    

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

Автор решения: Егор

считывать надо в теле цикла! И вам надо умножать переменную-счетчик на a (в случае, если условие в if выполняется). Прибавлять единицу к счетчику не надо. Мы же не количество считаем...

→ Ссылка
Автор решения: Danis

вот немного изменённая версия вашего кода:

total = 1
for i in range(10):
    a = int(input())
    if a != 0:
        total *= a
print(total) 

если ввод должен быть в одной строке, то так:

total = 1
for a in map(int, input().split()):
    if a != 0:
        total *= a
print(total) 

также можно попробовать так:

total = 1
for a in map(int, input().split()):
    total *= a or 1
print(total) 
→ Ссылка
Автор решения: Zhihar

Формат входных данных На вход программе подаются 10 целых чисел, каждое на отдельной строке.

однако вы приводите пример

Sample Input 1:

8 0 1 2 1 0 0 5 4 12

т.е. ввод всех чисел в одной строке

так как именно надо ввести то?

касательно вашего кода - перед тем как задавать вопрос вы бы сами прошлись по нему и ответили на вопрос - а что делает каждая строчка вашего кода

    total = 1
a = int(input()) # ввели одно число
for i in range(1, 10): # в цикле непонятно что сделали
    if a != 0 and a *= a: # что это за условие?
        a += a
print(total)

если уж на то пошло (в связи с новым годом)

res = 1
for num in map(int, input().split()):
    if num != 0:
        res *= num

можно и в одну строчку, но придется библиотеку тащить:

import functools
res = functools.reduce(lambda res, num: num * res, [i for i in map(int, input().split()) if i != 0])
→ Ссылка
Автор решения: Jack_oS
result = 1
for _ in range(10):
    a = int(input())
    if a:
        result *= a
print(result)
→ Ссылка
Автор решения: Stanislav Volodarskiy

Oneliner

Читаем целые из входного потока по одному на строку. stdin притворяется iterable, который выдаёт строки по одной. map превращает строки в числа применяя int:

g1 = map(int, stdin)

Отбрасываем нули. Круглые скобки - генератор:

g2 = (v for v in g1 if v != 0)

reduce - классика функционального программирования: берёт функцию с двумя аргументами и последовательно применяет её к элементам и промежуточному итогу. mul - произведение двух чисел. 1 - начальное значение.

p = reduce(mul, g2, 1)
[1, 2, 3, 4]
<промежуточный итог> * <число из списка> -> <новый промежуточный итог>
1 * 1 -> 1
1 * 2 -> 2
2 * 3 -> 6
6 * 4 -> 24

Результат печатаем:

print(p)

Всё вместе:

from functools import reduce
from operator import mul
from sys import stdin

print(reduce(mul, (v for v in map(int, stdin) if v != 0), 1))
$ python product.py
8
0
1
2
1
0
0
5
4
12
Ctrl+D
3840
→ Ссылка
Автор решения: Semitron

Если число n подаваемое на вход равно нулю, то в скобках при верном равенстве будет значение True==1, в таком случае имеющее произведение домножается не на 0, а на 0 + 1. Если же число n подаваемое на вход не равно нулю, то в скобках значение False==0, следовательно произведение домножается на n + 0.

total = 1
for _ in range(10):
    n = int(input())
    total *= n + (n == 0)
print(total)
→ Ссылка