Jump to content

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


Go to solution Solved by pedropregueiro,

Recommended Posts

Posted

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"""
  • Solution
Posted

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
Posted
Em 08/11/2016 às 01:30, 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)
Posted
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]'

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.