最善の方法は、もちろん&が失敗することです。あなたは、何ができないのか分裂できないのか、そして何のためになるのかを決して知りません。
ただし、入力データがクリーンで、文字列がなく、ゼロではなく、数字だけであるとします。 print('YES')
とすることができます。なぜなら、すべての数値は、他のすべての数値(0と+ INF/-INFを除く)と分数結果で割り切れるからです。
その場合、質問は奇妙です。しかし、質問が尋ねられるので、私はあなたが整数除算をしたいと思います。
整数除算のため、及び手元整数を使用すると、a % b
(割り算の余り)はa
がb
によって割り切れるであることを意味し、ゼロであるかどうかを確認する必要があります
if all(ai % bi == 0 for ai, bi in zip(a, b)):
pass
あるいは、同じ:
if all(not ai % bi for ai, bi in zip(a, b)):
pass
あなたはさらに行く、と想定することができる&bには、整数だけでなく浮動小数点も含まれています。ここでは、STDLIBのfractions
モジュールが救助に来る:
>>> from fractions import Fraction
>>> f = Fraction(10, 2)
>>> f.numerator
5
>>> f.denominator
1
>>> f = Fraction(10, 3)
>>> f.numerator
10
>>> f.denominator
3
>>> f = Fraction(2.5)
>>> f.numerator
5
>>> f.denominator
2
このクラス可能&分母分子以上の整数の分数を「正規化」。 floatを含む任意の値を割り切れるには、分母は1
でなければなりません。ここ
、2.5ない残りは0.5で割り切れる:
>>> f = Fraction(2.5)/Fraction(0.5)
>>> f.numerator
5
>>> f.denominator
1
確認する:
if all((Fraction(ai)/Fraction(bi)).denominator == 1 for ai, bi in zip(a, b)):
pass
PS:しかし、着信番号の精度の問題に注意。例えば、0.01
はない、あなたが期待するよう1/100
の割合が、完全に恐ろしいものになります
>>> Fraction(0.01)
Fraction(5764607523034235, 576460752303423488)
その場合、あなたは力割合限定denomiator、おそらくいくつかの精度を失うことを持っていることができます値。たとえば、カンマ(すなわち、1/1000000
)の後に6桁に制限:
>>> Fraction(0.01).limit_denominator(1000000)
Fraction(1, 100)
0で除算するのは簡単です。数値のチェックはもう少し難しいです。しかし、例外処理がなければ、浮動小数点のオーバーフローのチェックは非常に困難です。オーバーフローをチェックする必要がありますか? –
一般的な除算、または整数除算を意味しますか?なぜなら、文字列とゼロを別にすれば、すべての数値は1つおきの数で割り切れるからです(0とINFを除く)。しかし、結果は分数である可能性があります。 –
オーバーフローの心配はありません。それは整数除算でなければなりません。基本的には、aとbの両方がリストである必要があり、int要素のみを含み、除算が機能するためにはbに0は含まれません。私は個人的にチェックするのは簡単だと言いましたが、私は全員のために一般的な声明が必要です。 – RBair