Jump to content
miguelt1

[Resolvido] TypeError: can't multiply sequence by non-int of type 'str'

Recommended Posts

miguelt1

Boas! O meu problema é o seguinte: eu quando vou executar o codigo de um exercicio dá-me  um erro que não estou a perceber o porquê dele acontecer . Por favor, me ajudem!

TypeError: can't multiply sequence by non-int of type 'str'

produtos = input('Lista com produtos:')
quantidade = input('Lista com quantidade:')
preco = input('Preco dos produtos:')
def sub_total(produtos,quantidade, preco):
    z = 0
    for x in range(len(produtos)):
        print (produtos[x], quantidade[x]*preco[x],'eur')
        z+=quantidade[x]*preco[x]        
           
    print ('Total:',z,'eur')    
sub_total(produtos, quantidade, preco)

"""os produtos , a quantidade e o preco devem ser executados em listas"""

 

Edited by miguelt1

Share this post


Link to post
Share on other sites
pedropregueiro

olá @miguelt1, o erro que tens é por estares a tentar multiplicar 2 strings: 

quantidade[x] * preco[x]

repara, quando tu fazes o seguinte:

quantidade = input('Lista com quantidade:')

o método "input" retorna uma string portanto a tua variável "quantidade", por exemplo, é uma string, não uma lista. portanto, "quantidade[x]" será também uma string - o elemento "x" da string "quantidade".

quantidade = input('Lista com quantidade:')
# imagina que acima tinhas posto: 2 3 5
quantidade[0] = "2"
quantidade[1] = " "
quantidade[2] = "3"

então, o que podes fazer, para começar, é usar o método split para transformar a string de input numa lista de strings e depois podes converter cada elemento para inteiro quando quiseres fazer a multiplicação. uma dica mais avançada seria usares listas por compreensão para transformar a string de input directamente para uma lista de inteiros ;)

  • Vote 2

Share this post


Link to post
Share on other sites
miguelt1
19 horas atrás, pedropregueiro disse:

olá @miguelt1, o erro que tens é por estares a tentar multiplicar 2 strings: 


quantidade[x] * preco[x]

repara, quando tu fazes o seguinte:


quantidade = input('Lista com quantidade:')

o método "input" retorna uma string portanto a tua variável "quantidade", por exemplo, é uma string, não uma lista. portanto, "quantidade[x]" será também uma string - o elemento "x" da string "quantidade".


quantidade = input('Lista com quantidade:')
# imagina que acima tinhas posto: 2 3 5
quantidade[0] = "2"
quantidade[1] = " "
quantidade[2] = "3"

então, o que podes fazer, para começar, é usar o método split para transformar a string de input numa lista de strings e depois podes converter cada elemento para inteiro quando quiseres fazer a multiplicação. uma dica mais avançada seria usares listas por compreensão para transformar a string de input directamente para uma lista de inteiros ;)

Fiz exatamente o que disseste mas mesmo assim continua a dar erro. Vê como ficou o código:


produtos = input('Lista com produtos:').split()
quantidade = input('Lista com quantidade:').split()
quantidade = list(map(int, quantidade))
preco = input('Preco dos produtos:').split()
preco = list(map(float, preco))
def sub_total(produtos,quantidade, preco):
    z = 0
    for x in range(len(produtos)):
        print (produtos[x], quantidade[x]*preco[x],'eur')
        z += quantidade[x]*preco[x]
           
    print ('Total:',z,'eur')    
sub_total(produtos, quantidade, preco)

Share this post


Link to post
Share on other sites
Rui Carlos
5 horas atrás, miguelt1 disse:

Fiz exatamente o que disseste mas mesmo assim continua a dar erro. Vê como ficou o código:

Que erro é que te dá?  E que versão do Python é que estás a usar?

Esse código devia funcionar com Python 3.

Share this post


Link to post
Share on other sites
miguelt1
45 minutos atrás, Rui Carlos disse:

Que erro é que te dá?  E que versão do Python é que estás a usar?

Esse código devia funcionar com Python 3.

Estou a usar o python 3.5.2.

O erro que está a dar é o seguinte: Traceback (most recent call last):
  File "C:/Users/user/Desktop/teste.py", line 3, in <module>
    quantidade = list(map(int, quantidade))
ValueError: invalid literal for int() with base 10: '[3,2]'

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.