Multiplicar todos os Itens da Lista

6,123 views
Skip to first unread message

Isis Carvalho

unread,
Aug 15, 2017, 1:46:01 PM8/15/17
to Python Brasil

Olá,

Me chamo Isis, sou nova em programação e no Grupo do Python Brasil. E estou aprendendo sozinha em casa.

Em um exercício do site Python Brasil, não consegui executar o programa como eu desejaria.

A quem puder me ajudar segue os detalhes:

Dúvida: Como multiplicar todos os itens da lista?
Se eu coloco um ciclo FOR ou WHILE, de soma ou multiplicação por exemplo: vetor += vetor, Dá o seguinte erro:

soma += num
TypeError: 'int' object is not iterable

>>> Compreendo que não posso fazer a interação de uma lista com tipo int.
>>> Mas a intenção é multiplicar como lista e retornar o resultado da multiplicação.

###############################
## ESTE CÓDIGO FUNCIONA ##
## POREM, MANIPULANDO STRING ##
###############################

# 8. Faça um Programa que leia um vetor de 5 números inteiros, mostre a soma, a multiplicação e os números.

lista = []
mult = 1

print()
for numeros in range(1, 6):
num = int(input('Digite o {}º número: '.format(numeros)))
lista.append(num)

# estou multiplicando os numeros da lista como string e incrementando como string também...
mult = mult * num

soma = sum(lista)

print('\nOs vetores são: {}\nA soma dos vetores é: {}\nA multiplicação dos vetores é: {}'.format(lista, soma, mult))


Desde já, fico agradecida!


Robson Eisinger

unread,
Aug 15, 2017, 1:53:16 PM8/15/17
to python...@googlegroups.com
Isis, boa tarde.

Tirei isso do stackoverflow, só pra confirmar se é preciso refazer a lista ou não. Segue link.


my_new_list = [i * 5 for i in my_list]

--
--
------------------------------------
Grupo Python-Brasil
http://www.python.org.br/wiki/AntesDePerguntar
 
<*> Para visitar o site do grupo na web, acesse:
http://groups.google.com/group/python-brasil
 
<*> Para sair deste grupo, envie um e-mail para:
python-brasil+unsubscribe@googlegroups.com

---
Você recebeu essa mensagem porque está inscrito no grupo "Python Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para python-brasil+unsubscribe@googlegroups.com.
Para mais opções, acesse https://groups.google.com/d/optout.



--
Abraços,

Robson Eisinger.

Twitter: http://twitter.com/papilobr (de vez em quando posto links e bobagens que acho ou acham pra mim)

Blog: http://animecare.blogspot.com/
(Reviews, Notícias e muito papo furado)

Isis Carvalho

unread,
Aug 15, 2017, 2:24:25 PM8/15/17
to Python Brasil

Agradeço pela Resposta Robson,

mas eu tentei algo semelhante usando o map(), e a saida é parecida, porem, veja a saida gerada do codigo que me informou:


#Os vetores são: [1, 2, 3, 1, 2] > informados pelo usuario em um loop.

mult = [i * 5 for i in lista]
Saida: [5, 10, 15, 5, 10]

Esta multiplicando cada item pelo total do loop, ou seja 5.

Eu queria multiplicar como segue:

exemplo 1: 1 * 2 * 3 * 1 * 2 = 6
exemplo 2: item1 * item2 * item3 * item4 * item5 = lista[produto da multiplicação]

tentei colocar :
lista: [1, 2, 3, 1, 2]
mult = [i * lista for i in lista]
Saida: [[1, 2, 3, 1, 2], [1, 2, 3, 1, 2, 1, 2, 3, 1, 2], [1, 2, 3, 1, 2, 1, 2, 3, 1, 2, 1, 2, 3, 1, 2], [1, 2, 3, 1, 2], [1, 2, 3, 1, 2, 1, 2, 3, 1, 2]]

Ta dificil rsrs



---
Você recebeu essa mensagem porque está inscrito no grupo "Python Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para python-brasi...@googlegroups.com.

Para mais opções, acesse https://groups.google.com/d/optout.

Diego Rocha

unread,
Aug 15, 2017, 2:55:16 PM8/15/17
to Python Brasil
Isis,

Seu código está certo. Você está lendo os cinco elementos, somando e subtraindo.

E você não está manipulando string não!

num = int(input('Digite o {}º número: '.format(numeros)))

A variável num está recebendo o valor o digitado pelo usuário já convertido em inteiro, através da função int.

Atenciosamente

Atenciosamente,
Diego Rocha

Isis Carvalho

unread,
Aug 15, 2017, 3:02:29 PM8/15/17
to Python Brasil

Oi Diego,

Verdade, foi um erro meu ter escrito que estava manipulando string, era pra ter digitado inteiro..rsrsrs

Mas está correto fazer isso? pois eu notei que a função sum() funciona na lista, por isso imaginei que deveria ter outro geito de multiplicar os itens da lista.

Toda vez que eu for fazer operações como essa, msm em listas, eu devo, ou posso usar este metodo?

Obrigada.

Marcos Thomaz

unread,
Aug 15, 2017, 3:09:16 PM8/15/17
to python...@googlegroups.com
Você poderia usar reduce:

from functools import reduce

mult = reduce(lambda x, y:x*y, lista)




---
Você recebeu essa mensagem porque está inscrito no grupo "Python Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para python-brasil+unsubscribe@googlegroups.com.

Para mais opções, acesse https://groups.google.com/d/optout.



--


Marcos Thomaz da Silva
Analista de Tecnologia da Informação

Isis Carvalho

unread,
Aug 15, 2017, 3:24:45 PM8/15/17
to Python Brasil
Marcos boa tarde,

Perfeito,, funcionou...heeeeeeee

Mas tive que importar o modulo Functions, reduce() não é mais builtin no Python3.5..

Mas admito, que reduce(), lambda() é confuso pra mim... :(
vou ler um pouco sobre estas funçoes.

mult = functools.reduce(lambda x, y : x * y, lista)

Muito Obrigada a todos!

Espero um dia poder ajudar também! bjos

Linux - Junior Polegato

unread,
Aug 15, 2017, 4:19:54 PM8/15/17
to python...@googlegroups.com
Em 15-08-2017 16:24, Isis Carvalho escreveu:
Marcos boa tarde,
Perfeito,, funcionou...heeeeeeee
Mas tive que importar o modulo Functions, reduce() não é mais builtin no Python3.5..
Mas admito, que reduce(), lambda() é confuso pra mim... :(
vou ler um pouco sobre estas funçoes.
mult = functools.reduce(lambda x, y : x * y, lista)
Muito Obrigada a todos!
Espero um dia poder ajudar também! bjos

Olá!

        Ainda em vez de "lambda x, y: x * y" pode-se utilizar "operator.__mul__", que terá o mesmo efeito com melhor desempenho.

-- 

[]'s

Junior Polegato

Diego Rocha

unread,
Aug 15, 2017, 5:51:31 PM8/15/17
to python...@googlegroups.com
Isis,

Pensando em "algoritmo" (ou seja, sem amarrar na implementação da linguagem x, y ou z) essa é a forma: percorrer todos os elementos somando e/ou multiplicando em variáveis de fora do loop.

Python te permite usar a função sum, ou reduce com lambada, mas no final das contas essas funções estão fazendo o que eu te falei ai em cima (em alguns casos com otimizações, mas a ideia é a mesma).

Atenciosamente

--
--
------------------------------------
Grupo Python-Brasil
http://www.python.org.br/wiki/AntesDePerguntar
 
<*> Para visitar o site do grupo na web, acesse:
http://groups.google.com/group/python-brasil
 
<*> Para sair deste grupo, envie um e-mail para:
python-brasi...@googlegroups.com

---
Você recebeu essa mensagem porque está inscrito no grupo "Python Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para python-brasi...@googlegroups.com.
Para mais opções, acesse https://groups.google.com/d/optout.
--
Atenciosamente,
Diego Rocha

Isis Carvalho

unread,
Aug 15, 2017, 6:04:40 PM8/15/17
to Python Brasil
Diego,

Obrigada pelo esclarecimento...

É bom saber que estou no caminho certo rsrsrs

E obrigada tbm Junior Polegato - Linux, por demostrar outro método.

Grata,
bjo

Roberto Henriques

unread,
Aug 19, 2017, 2:15:29 PM8/19/17
to Python Brasil
Olá Isis,

Fiz usando o python3.
Tenta esse código abaixo:

#multiplicação simples:
price = [20, 30, 40, 50]
print([x * 2 for x in price])

#reajustando preço:
preco = [23.50, 32.25, 50.50]
print([i * 0.10 + i for i in preco]) # soma 10% nos preços da lista 

Isis Carvalho

unread,
Aug 21, 2017, 9:48:59 AM8/21/17
to Python Brasil

Oi Roberto,

Então, não é bem isso que eu queria fazer...

Pois a intenção era multiplicar um item pelo antecessor e a assim sucessivamente, informando o produto.. mas valeu a intenção.

E o Marcos Thomaz, enviou um código que funciona perfeitamente. Por tanto, foi resolvido rsrsrs


Mas isso funciona quando eu querer efetuar uma operação em cada item, ou seja, será util... rsrs

Obrigada!
Reply all
Reply to author
Forward
0 new messages