As already mentioned the correct is to represent these floating values with a point .
and not a comma ,
. Behold here the problems and limitations of floating values in Python.
Your code should look like this:
t = int(input("Digite a quantidade de minutos gasta: "))
if t < 200:
p = t * 0.2
if t >= 200 and t < 400:
p = t * 0.18
if t >= 400:
p = t * 0.15
print ("O preco da ligacao foi de %.2f reais." % p)
# Ou com a funcao format()
print ("O preco da ligacao foi de {0:.2f} reais".format(p))
DEMO
Depending on the factor localization, the decimal separator may be different instead of a point .
can be a comma ,
. To obtain this information you can use the function nl_langinfo
module locale
with the option RADIXCHAR
.
import locale
print (locale.nl_langinfo(locale.RADIXCHAR))
If it is necessary to calculate the values using decimal separator to ,
you can use the function atof
to convert a string in a floating value. See a demo:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import locale
# Em pt_BR vai o separador decimal é "."
print (locale.nl_langinfo(locale.RADIXCHAR))
# Mudamos o locale para Inglês - Dinamarca
locale.setlocale(locale.LC_ALL, 'en_DK.utf8')
# Em en_DK o separador decimal é ","
print (locale.nl_langinfo(locale.RADIXCHAR))
t = int(input("Digite a quantidade de minutos gasta: "))
if t < 200:
p = t * locale.atof("0,2")
if t >= 200 and t < 400:
p = t * locale.atof("0,18")
if t >= 400:
p = t * locale.atof("0,15")
print ("O preco da ligação foi de %.2f reais." % p)
# Ou com a função format()
print ("O preco da ligacao foi de {0:.2f} reais".format(p))
Wow, those were pretty simple mistakes, and I didn’t even notice, rs. As for operators, I find it more practical to use '%' instead of 'format' when I don’t need to repeat the arguments in the string. But that’s for now, maybe in the future I’ll get used to 'format''.
– Jefferson Carvalho