Как «напечатать» результат деления в Ironpython (Python.net)? - PullRequest
3 голосов
/ 21 июля 2011

Мне нужно напечатать результат 'x / y', но он всегда возвращает '0'. Когда я печатаю 'x', он говорит мне это правильно, когда я печатаю 'y', он говорит мне это правильно, но когда я печатаю 'x / y', он говорит 0.

Вот мой код:

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

Как я уже сказал, он печатает y нормально, когда должен, но в тех случаях, когда нужно печатать x/y, он печатает 0. Я также пробовал печатать x/y и печатать x//y, но они тоже не работают.

Что я делаю не так?

Заранее спасибо

Ответы [ 4 ]

5 голосов
/ 22 июля 2011

Сделайте это

from __future__ import division

Прочитайте это

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

5 голосов
/ 21 июля 2011

Если x и y оба являются целыми числами, Python всегда выполняет целочисленное деление.Поэтому, если результат равен 0.something, Python покажет 0.

Вам нужно преобразовать их в числа с плавающей точкой, если вы хотите выполнить деление числа с плавающей точкой:

print float(x) / float(y)

или Decimal объектов:

from decimal import Decimal
print Decimal(x) / Decimal(y)
4 голосов
/ 22 июля 2011

Я подумал, что было бы полезно указать на ту часть ПКП, которая наиболее важна здесь:

Правильный обходной путь - тонкий: приведение аргумента к float () неверно, если это может быть комплексное число; добавление 0.0 к аргументу не сохраняет знак аргумента, если он был минус ноль. Единственное решение без недостатков - умножение аргумента (обычно первого) на 1,0. Это оставляет значение и знак неизменными для float и complex, и превращает int и long в float с соответствующим значением.

Итак, вы можете сделать:

print 1.0 * x / y
1 голос
/ 21 июля 2011

Попробуйте:

print float(x)/float(y)

Целочисленное деление всегда усекает десятичное число.

Также обратите внимание, что на самом деле только числитель должен быть плавающей точкой, но лучше четко указывать, что вы делаете.

...