Necesito imprimir el resultado de 'x / y' pero siempre devuelve '0'. Cuando imprimo 'x' me dice eso correctamente, cuando imprimo 'y' me dice eso correctamente pero cuando imprimo 'x / y' dice 0.

Aquí está mi código:

import random

y = 0
x = 0

p = 1
while True:    

    i = [random.randint(1,100), random.randint(1,100), random.randint(1,100), random.randint(1,100), random.randint(1,100)]

    if len(set(i)) < len(i):
        print "Match!"
        x += 1
        y += 1
        print(x/y)  
    else:
        print "No Match!"
        y += 1
        print y

Como dije, imprime y bien cuando se supone que debe hacerlo, pero en el caso de que necesite imprimir x/y imprime 0. También he intentado imprimir x/y e imprimir x//y pero tampoco funcionan.

¿Qué estoy haciendo mal?

Gracias de antemano

3
Taimur 21 jul. 2011 a las 23:51

4 respuestas

La mejor respuesta

Si x e y son ambos enteros, Python siempre hace una división entera. Entonces, si el resultado es 0.algo, Python mostrará 0.

Debe convertirlos en flotadores si desea hacer la división de flotadores:

print float(x) / float(y)

U Decimal objetos:

from decimal import Decimal
print Decimal(x) / Decimal(y)
5
Daniel Roseman 21 jul. 2011 a las 19:58

Pensé que podría ser útil señalar la parte de esa PEP que es más relevante aquí:

La solución correcta es sutil: lanzar un argumento para float () está mal si podría ser un número complejo; agregar 0.0 a un argumento no conserva el signo del argumento si era menos cero. La única solución sin ningún inconveniente es multiplicar un argumento (generalmente el primero) por 1.0. Esto deja el valor y el signo sin cambios para flotante y complejo, y convierte int y long en un flotante con el valor correspondiente.

Entonces, puedes hacer:

print 1.0 * x / y
4
Jason Drew 21 jul. 2011 a las 20:45

Tratar:

print float(x)/float(y)

La división entera siempre trunca el decimal.

También tenga en cuenta que solo el numerador realmente debe ser flotante, pero es mejor ser explícito sobre lo que está haciendo.

1
Russ 21 jul. 2011 a las 19:58

Haga esto

from __future__ import division

Lee esto

http://www.python.org/dev/peps/pep-0238/

5
S.Lott 21 jul. 2011 a las 20:00