Как найти произведение всех чисел в цикле

Я приведу не очень практичное, но красивое решение в одну строку. Оно не использует eval, побочные эффекты при работе со списком или именованные функции.

Если именованные функции разрешены, то решение может выглядеть так:

def p(a):
    if a:
        return a[0] * p(a[1:])
    return 1

print(p([1, 2, 3, 4, 5]))

Нам оно не подходит, так именованная функция требует минимум две строки для определения и вызова. Лямбду можно определить и вызвать в одной строке, но есть трудность в создании рекурсивной лямбды. Синтаксис Python разрешает такой трюк:

p = (lambda a: a[0] * p(a[1:]) if a else 1); print(p([1, 2, 3, 4, 5]))

Это именно трюк с глобальной переменной и двумя операторами в одной строке. А можно обойтись без глобальной переменной вообще. На первый взгляд этого не может быть так как имя нужно чтобы сделать рекурсивный вызов. Но функцию можно передать как аргумент в саму себя:

p = lambda f, a: a[0] * f(f, a[1:]) if a else 1
print(p(p, [1, 2, 3, 4, 5]))

Кажется мы ничего не выиграли: всё равно два оператора и глобальная переменная p. Однако сделан очень важный шаг — тело лямбды не использует глобальные переменные. Глобальная переменная используется в операторе print. Избавимся от неё:

p = lambda f, a: a[0] * f(f, a[1:]) if a else 1
y = lambda f, a: f(f, a)
print(y(p, [1, 2, 3, 4, 5]))

Стало только хуже: три строки и две глобальные переменные. Зато каждая глобальная переменная задействована только один раз. Делаем подстановку:

print((lambda f, a: f(f, a))(lambda f, a: a[0] * f(f, a[1:]) if a else 1, [1, 2, 3, 4, 5]))

Читается тяжело, но задача решена в одну строку без глобальных имён и волшебных вызовов eval.

P.S. Читайте Fixed-point combinator чтобы узнать откуда пошло это решение.

P.P.S. Красивое утверждение: программу любой сложности можно записать в функциональном стиле не определив ни одной глобальной переменной, включая имена функций.

P.P.P.S. Не пытайтесь повторить это дома.

In this tutorial, you will learn to multiply all numbers in a list in Python. List is an ordered set of values enclosed in square brackets [ ]. List stores some values called elements in it, which can be accessed by their particular index. We will write a function that will multiply all numbers in the list and return the product.

Multiplying all the values will give a single product. For example, for a list [2, 5, 9] the product will be 90. We will be discussing the various approaches by which we can calculate the product of all numbers in a list.

Take a look at the sample input and output

Input: list= [5, 3, 2, 7]

Output: 210

Approach

For executing this program in Python, we can follow any one of the following approaches.

  1. By traversing the list and multiplying each element
  2. Using math.prod() function
  3. numpy.prod() function

Let us look at all the approaches one by one

Approach 1: By using loop

In this approach, we will traverse till the end of the list to find the product. Initialize a variable product to 1 and multiply each number in the list with a product to get the result. To access each number in the list we will use for loop in Python.

Algorithm

Follow the algorithm to understand the approach better

Step 1- Define a function to multiply numbers

Step 2- Declare a variable product and set it to 1

Step 3- Run a loop for all elements in the list

Step 4- Multiply all elements to the product

Step 5- Return product

Step 7- Declare a list

Step 8- Pass list in our function

Step 9- Print value returned by the function

Python Program 1

Look at the program to understand the implementation of the above-mentioned approach.

#multiply all numbers in list

#function
def mul_list(list) :
     
    # Multiply elements one by one
    product = 1
    for i in list:
         product = product * i
    return product
     

list1 = [11, 12, 4, 3]
print(list1)
print("product: ") 
print(mul_list(list1))

[11, 12, 4, 3]
product:
1584

Approach 2: Using math.prod() Function

In this approach, we have used a function prod() of the math module to calculate the product. Math module provides access to various mathematical functions like pow(), sum(), avg() in our program. Let’s see the algo.

Algorithm

Follow the algorithm to understand the approach better

Step 1- Import math module in the program

Step 2- Define a function to multiply numbers

Step 3- Return math.prod(list)

Step 4- Declare list

Step 5- Call function and pass list

Step 6- Print the value returned by the function

Python Program 2

Look at the program to understand the implementation of the above-mentioned approach.

#multiply all numbers in list
#import math module
import math
def mul_list(list):
     return math.prod(list)
     

list1 = [3, 2, 5, 4, 8, 9, 10]
print(list1)
print("product: ") 
print(mul_list(list1))

[3, 2, 5, 4, 8, 9, 10]
product:
86400

Approach 3: Using numpy.prod() Function

In this approach, we have used a function prod() of the NumPy module to calculate the product. It allows a programmer to perform various advanced mathematical operations on large numbers of data.

Algorithm

Follow the algorithm to understand the approach better

Step 1- Import NumPy module in the program

Step 2- Define a function to multiply numbers

Step 3- Return numpy.prod(list)

Step 4- Declare a list

Step 5- Call function and pass the list

Step 6- Print the value returned by the function

Python Program 3

Look at the program to understand the implementation of the above-mentioned approach.

#multiply all numbers in list
#import numpy module
import numpy
def mul_list(list):
     return numpy.prod(list)
     

list1 = [3, 2, 5, 4, 8, 9, 10]
print(list1)
print("product: ") 
print(mul_list(list1))

[12, 11, 9]
product:
1188

Conclusion

In this tutorial, we have learned three ways for calculating the product of elements in a list in Python. We have used, a loop to access elements individually for calculating products. We have also seen how to use the math module and NumPy module to calculate products.

Как мне сделать такую вещь? Надо в цикле for i in range найти произведение цифр каждого i. К примеру
for i in range (15, 25)
и выводиться будет 5, 6, 7 … 6, 8, 10
Получается реализовать только для одного числа, а с for уже никак


  • Вопрос задан

    более двух лет назад

  • 883 просмотра

def mult(l):
	m=1
	for i in l:
		m*=int(i)
	return m
print ([ mult(str(x)) for x in range(15,26)])

def getting_digits(number):
	answer = str()
	while number:
		answer += str(number % 10)
		number //= 10
	return(answer)

def digits_mult(low_border, high_border):
	for i in range(low_border, high_border):
		number = 1
		for digit in getting_digits(i):
			number *= int(digit)
		print(number, end = ' ')

Пригласить эксперта


  • Показать ещё
    Загружается…

30 мая 2023, в 00:55

125000 руб./за проект

30 мая 2023, в 00:34

1000 руб./за проект

29 мая 2023, в 23:21

2000 руб./за проект

Минуточку внимания

0 / 0 / 0

Регистрация: 20.12.2013

Сообщений: 6

1

Найти произведение всех целых

20.12.2013, 23:45. Показов 29310. Ответов 3


Студворк — интернет-сервис помощи студентам

а) произведение всех целых чисел от 8 до 15
б) произведение всех целых чисел от a до 20 (значение a вводится с клавиатуры;
https://www.cyberforum.ru/cgi-bin/latex.cgi?1 leq aleq 20
в) произведение всех целых чисел от 1 до b (значение b вводится с клавиатуры;
https://www.cyberforum.ru/cgi-bin/latex.cgi?1 leq bleq 20
(Python)



0



KOPOJI

Почетный модератор

Эксперт HTML/CSSЭксперт PHP

16842 / 6720 / 880

Регистрация: 12.06.2012

Сообщений: 19,967

21.12.2013, 00:40

2

а)

Python
1
2
3
4
5
6
#!/usr/bin/env python
# -*- coding: utf-8 -*-
n = 1
for i in range(8, 16):
    n *= i
print n

б)

Python
1
2
3
4
5
6
7
8
9
10
#!/usr/bin/env python
# -*- coding: utf-8 -*-
a = int(input("Введите число a: "))
n = 1
if 1 <= a and a <= 20 :
    for i in range(a, 21):
        n *= i
    print n
else :
    print "Введите число от 1 до 20"

в)

Python
1
2
3
4
5
6
7
8
9
10
#!/usr/bin/env python
# -*- coding: utf-8 -*-
b = int(input("Введите число b: "))
n = 1
if 1 <= b and b <= 20 :
    for i in range(1, b + 1):
        n *= i
    print n
else :
    print "Введите число от 1 до 20"

Проверки на то, что ввели и т.п. сами сделайте..



2



dondublon

Эксперт Python

4607 / 2028 / 359

Регистрация: 17.03.2012

Сообщений: 10,086

Записей в блоге: 6

23.12.2013, 09:51

3

Лучший ответ Сообщение было отмечено Пакетик чаю как решение

Решение

Python
1
reduce(lambda x,y:x*y, range(a,b+1))

Где a,b — границы интервала включительно.



0



0 / 0 / 0

Регистрация: 27.06.2021

Сообщений: 7

26.09.2021, 16:17

4

а как найти произведение чисел от a до b == c в цикле чтобы получилось в питоне
например:
30 — 2,3,5
потому что 2*3*5=30



0



Я приведу не очень практичное но красивое решение в одну строку. Оно не использует eval, побочные эффекты при работе со списком или именованные функции.

Если именованные функции разрешены, то решение может выглядеть так:

def p(a):
    if a:
        return a[0] * p(a[1:])
    return 1

print(p([1, 2, 3, 4, 5]))

Нам оно не подходит, так именованная функция требует минимум две строки для определения и вызова. Лямбду можно определить и вызвать в одной строке, но есть трудность в создании рекурсивной лямбды. Синтаксис Python разрешает такой трюк:

p = (lambda a: a[0] * p(a[1:]) if a else 1); print(p([1, 2, 3, 4, 5]))

Это именно трюк с глобальной переменной и двумя операторами в одной строке. А можно обойтись без глобальной переменной вообще. На первый взгляд этого не может быть так как имя нужно чтобы сделать рекурсивный вызов. Но функцию можно передать как аргумент в саму себя:

p = lambda f, a: a[0] * f(f, a[1:]) if a else 1
print(p(p, [1, 2, 3, 4, 5]))

Кажется мы ничего не выиграли: всё равно два оператора и глобальная переменная p. Однако сделан очень важный шаг — тело лямбды не использует глобальные переменные. Глобальная переменная используется в операторе print. Избавимся от неё:

p = lambda f, a: a[0] * f(f, a[1:]) if a else 1
y = lambda f, a: f(f, a)
print(y(p, [1, 2, 3, 4, 5]))

Стало только хуже: три строки и две глобальные переменные. Зато каждая глобальная переменная задействована только один раз. Делаем подстановку:

print((lambda f, a: f(f, a))(lambda f, a: a[0] * f(f, a[1:]) if a else 1, [1, 2, 3, 4, 5]))

Читается тяжело, но задача решена в одну строку без глобальных имён и волшебных вызовов eval.

P.S. Читайте Fixed-point combinator чтобы узнать откуда пошло это решение.

P.P.S. И есть очаровательное утверждение: программу любой сложность можно записать в функциональном стиле не определив ни одной глобальной переменной, включая имена функций.

P.P.P.S. Не пытайтесь повторить это дома.

Понравилась статья? Поделить с друзьями:
  • Как найти периметр диагонали 4 класс
  • Подписки на яндексе как найти телефон
  • Как правильно составить генеалогическое древо семьи схема
  • Как найти дело по душе по обществу
  • Как найти розыскное дело по номеру