Python 2.7:% d,% s, y float ()

Estoy intentando aprender un poco de encoding a través del libro “aprenda python the hard way” y estoy luchando con% d /% s /% r cuando bash mostrar un número de punto flotante. ¿Cómo se pasa correctamente un número de punto flotante con un carácter de formato? Primero probé% d, pero eso hizo que mis respuestas se mostraran como enteros … Tuve algún éxito con% r, pero estaba bajo el supuesto de que generalmente estaba reservado para la depuración. Descubrí que para la división en python 2.x, debes flotar manualmente el denominador para que funcione correctamente por alguna razón.

Código de ejemplo:

def divide (a, b): print "WE DIVIDING %r and %r NOW" % (a, b) return a / float(b) print "Input first number:" first = float(raw_input("> ")) print "OK, now input second number:" second = float(raw_input("> ")) ans = divide(first, second) print "DONE: %r DIVIDED BY %r EQUALS %r, SWEET MATH BRO!" % (first, second, ans) 

Intente lo siguiente:

 print "First is: %f" % (first) print "Second is: %f" % (second) 

No estoy seguro de qué respuesta es. Pero aparte de eso, esto será:

 print "DONE: %f DIVIDED BY %f EQUALS %f, SWEET MATH BRO!" % (first, second, ans) 

Hay mucho texto en los Especificadores de cadena de formato. Puedes buscarlo en Google y obtener una lista de especificadores. Una cosa que olvidé tener en cuenta:

Si intentas esto:

 print "First is: %s" % (first) 

Convierte el valor flotante en primer lugar en una cadena. Así que eso funcionaría también.

Ver operaciones de formato de cadena :

%d es el código de formato para un entero. %f es el código de formato para un flotador.

%s imprime el str() de un objeto (lo que ve cuando print(object) ).

%r imprime el repr() de un objeto (lo que ve cuando print(repr(object)) .

Para un float% s,% r y% f todos muestran el mismo valor, pero ese no es el caso para todos los objetos. Los otros campos de un especificador de formato también funcionan de manera diferente:

 >>> print('%10.2s' % 1.123) # print as string, truncate to 2 characters in a 10-place field. 1. >>> print('%10.2f' % 1.123) # print as float, round to 2 decimal places in a 10-place field. 1.12