Jump to content

Erro "TypeError: unsupported operand type(s) for %"


Go to solution Solved by jpedro20,

Recommended Posts

Posted

Olá pessoal, estou agora a ver se aprendo um bocadinho de python, por isso estou a ler um pdf de Luciano Ramalho com o título de "Aprenda a Programar", esse pdf é para a versão anterior de Python, tenho feito as alterações que consigo e lá vou testando o código, e é aqui que surge o meu primeiro problema/dúvida..

Este é o código do pdf:

# despdom1.py - Calculadora de despesas domesticas
print 'Balanco de despesas domesticas'
ana = raw_input('Quanto gastou Ana? ')
bia = raw_input('Quanto gastou Bia? ')
total = float(ana) + float(bia)
print 'Total de gastos = R$ %s.' % total
media = total/2
print 'Gastos por pessoa = R$ %s.' % media

e ficou assim com as alterações:

# despdom1.py - calculadora de despesas domésticas
print ('Balanço de despesas domésticas')
ana = input ('Quanto gastou a Ana? ')
bia = input ('Qanto gastou a Bia? ')
total = float(ana)+ float(bia)
print ('Total de gastos = € %s.') % total
media = total/2
print ('Gastos por pessoa = € %.s') % media

o problema é que dá este erro:

TypeError: unsupported operand type(s) for %: 'NoneType' and 'float'

Ora já tentei muita coisa e ainda não consegui.. 😞

Férias! Estou por aqui: http://maps.google.p...001549&t=h&z=20 (a bulir claro está!)

Nunca mais é verão outra vez.. :)

Posted

Trocaste o ponto com o s no print da média:

# despdom1.py - calculadora de despesas domésticas
print ('Balanço de despesas domésticas')
ana = input ('Quanto gastou a Ana? ')
bia = input ('Qanto gastou a Bia? ')
total = float(ana)+ float(bia)
print ('Total de gastos = € %s.') % total
media = total/2
print ('Gastos por pessoa = € %s.') % media

“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

  • Solution
Posted (edited)

Trocaste o ponto com o s no print da média:

# despdom1.py - calculadora de despesas domésticas
print ('Balanço de despesas domésticas')
ana = input ('Quanto gastou a Ana? ')
bia = input ('Qanto gastou a Bia? ')
total = float(ana)+ float(bia)
print ('Total de gastos = € %s.') % total
media = total/2
print ('Gastos por pessoa = € %s.') % media

O problema não é esse. Aliás o código que apresentas-te dá o mesmo erro.

# despdom1.py - calculadora de despesas domésticas
print ('Balanço de despesas domésticas')
ana = input ('Quanto gastou a Ana? ')
bia = input ('Qanto gastou a Bia? ')
total = float(ana)+ float(bia)
print ('Total de gastos = € %s.') % total
media = total/2
print ('Gastos por pessoa = € %.s') % media

o problema é que dá este erro:

TypeError: unsupported operand type(s) for %: 'NoneType' and 'float'

Ora já tentei muita coisa e ainda não consegui.. 😞

Na terceira versão do python, o print passou a ser uma função. O que estás a fazer é o resto da divisão entre o resultado da invocação da função print (NoneType) e a tua variável media (float). Como não é possível calcular o resto da divisão a partir do tipo None, é apresentado o erro.

Uma possível solução é:

print ('Balanço de despesas domésticas')
ana = input ('Quanto gastou a Ana? ')
bia = input ('Qanto gastou a Bia? ')
total = float(ana)+ float(bia)
print ('Total de gastos = €', total, end = '.\n')
media = total/2
print ('Gastos por pessoa = €', media, end = '.')

http://docs.python.org/release/3.0.1/whatsnew/3.0.html

Edited by jpedro20
Posted

O código que o KTachyon inseriu é funcional, pelo menos para o python 2.7 (e imagino que seja para qualquer um do 2.6 até 3.0 excluindo). O erro terá mesmo a ver com a versão do Python e não com a legitimidade do código se bem que se for esse o caso deveria ter dado erro de syntax (porque acho que o comando print deixou de existir).

Gnrtuga qual é a versão do Python que tens?

Posted (edited)

Tenho a versão 3.2.3.

Mas já tenho o exercicio a funcionar com o código do jpedro20. E até já alterei a parte que converte para float para o momento em que se insere a variavel. Ficou assim:

ana = float(input('Quanto gastou a ana'))
bia = float(input('Quanto gastou a bia?'))
total = ana + bia
Edited by Gnrtuga

Férias! Estou por aqui: http://maps.google.p...001549&t=h&z=20 (a bulir claro está!)

Nunca mais é verão outra vez.. :)

  • 3 years later...
Posted (edited)

Bom dia a todos,

Me chamo Noguche e estou também a estudar pelo Guia do Prof. Luciano Ramalho, porém com a versão 3.5 do Python.

Ao tentar executar a parte do programa sugerido onde se faz uso do float está a me surgir um erro de sintax, abaixo envio o exemplo de como o meu código está, alguém poderia por favor me ajudar a perceber o que se passa?

Obrigado

# despdom2.py - Calculadora de despesas domesticas

print("Balanco de despesas domesticas")
ana = float(input("Quanto gastou Ana? "))
bia = float(input("Quanto gastou Bia? "))
print( )
total = ana + bia
print("Total de gastos = R$ %s" % total)
media = total/2
print("Gastos por pessoa = R$ %s" % media)
if ana < media:
   diferenca = media - ana
   print("Ana deve pagar: R$ %s" % diferenca)
   else:
       diferenca = media - bia
       print("Bia deve pagar: R$ %s" % diferenca)
Edited by thoga31
Tags code + GeSHi
Posted (edited)

Boas pessoal! Voltei pois acabei por descobrir onde estava o meu erro.

A questão é que a minha indentação estava mal ao corrigi-la tudo ficou bem.

Exemplo correto:

# despdom1.py - Calculadora de despesas domesticas

print("Balanco de despesas domesticas")
ana = float(input("Quanto gastou Ana? "))
bia = float(input("Quanto gastou Bia? "))
print( )
total = ana + bia
print("Total de gastos = R$ %s" % total)
media = total/2
print("Gastos por pessoa = R$ %s" % media)
if ana < media:
   diferenca = media - ana
   print("Ana deve pagar: R$ %s" % diferenca)
else:
   diferenca = media - bia
   print("Bia deve pagar: R$ %s" % diferenca)

Obrigado

Edited by thoga31
Remoção de quote desnecessário; tags code + GeSHi

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.