2011-07-21 30 views
3

'x/y'の結果を出力する必要がありますが、常に '0'が返されます。Ironpython(Python.net)でディビジョンの結果を '印刷'する方法は?

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 
:私は「X」を印刷するとき、それは正しく、私は「Y」を印刷するとき、それは正確に私にそれを伝えますが、私は「X/Y」印刷するとき、それはここでは0

は私のコードがあると言うことを私に伝えます

私が言ったように、yは正常に印刷されますが、印刷する必要があるイベントではx/y0を印刷します。私もプリントx/yとプリントx//yを試しましたが、どちらも動作しません。

私は間違っていますか?

ありがとうございます

+0

は、x

+0

ええ、 'x'は常に' y'より小さいですが、 'x // y'を試してみましたが、正しく読み込むと整数値ではなく10進値が返されますが、0も返されます – Taimur

+1

' x // yは整数値を返す。あなたはそれが10進数値を返すとどこで読んだのですか?それはまったく間違っています。分裂について読んでみましたか?そして '__future__からの輸入部門 '? –

答えて

5

xとyが両方とも整数の場合、Pythonは常に整数除算を行います。

print float(x)/float(y) 

またはDecimalオブジェクト:

from decimal import Decimal 
print Decimal(x)/Decimal(y) 
+0

ああ大丈夫、それは動作します!ありがとうございます:) – Taimur

+0

分母を浮動小数点数にキャストする限り、あなたが探している結果を得るには十分です。例えばfloat(x)/ float(y)== x/float(y) – sampwing

1
結果は0.somethingであれば、Pythonは0

が表示されますので、あなたはフロート分裂を行いたい場合は浮くためにそれらを変換する必要があります

試行:

print float(x)/float(y) 

整数小数点は常に小数点を切り捨てます。

また、実際には分子だけが浮動小数点数である必要があることに注意してください。しかし、あなたが何をしているのかを明示することをお勧めします。

4

を読むか、私はここで最も関連性のそのPEPの一部を指摘すると便利かもしれないと思った:

正しい回避策は微妙です:float()への引数のキャストは、複素数であれば間違っています;引数に0.0を追加すると、引数の符号がマイナス0の場合は保持されません。どちらの欠点もない唯一の解決策は、引数(通常は最初のもの)に1.0を掛けることです。これにより、floatとcomplexの値と符号は変更されず、intとlongは対応する値のfloatに変換されます。

だから、あなたが行うことができます:

print 1.0 * x/y 
+0

+1これが受け入れられる回答である必要があります – RoundTower

関連する問題