2017-07-11 30 views
-1
import pylab as pl 

a = 0.499901 

ran = pl.frange(0.200001 , 0.5 , 0.00001) 

for i in range(len(ran)): 
    if a in ran[i]: 
     print "all is good" 

エラー:これは大きな問題にちょうどテストケースで、誰かができれば、私は本当にたいと引数は反復可能ではありません:パイソン

if a in ran[i]: 

TypeError: argument of type 'numpy.float64' is not iterable 

誰かが私を助けることができますあなたはこのようなすべての要素をループする必要はありません。この

+0

'' 'RAN [i]は' 'で'いくつかの順序で線形検索です。しかし、シーケンスはありません(実行されますが、 '' 'は実行されませんでした' ')。あなたはスカラーを持っています。だからループ+等価性チェックか、ループを取り除いて線形探索のみを使う。また、浮動小数点数学の基本についても読んでください。 – sascha

+0

これは 'print ran [i]'でループを実行するとすべての浮動小数点を返します –

+0

はい(すべての数字が表示され、各ループ反復で1つずつ、または各ループステップですべてが出力されます;私は前者を期待する)と?あなたは '' 'で' '何をしているのか知っていますか? – sascha

答えて

2

で私を助け:

あなただけのオペレータin

を使用することができます
import pylab as pl 
from __future__ import print_function 

a = 0.499901 
ran = pl.frange(0.200001 , 0.5 , 0.00001) 
if a in ran: 
    print('All is good') 

a in ranfalseであるため、このステートメントは印刷されません。あなたはまだすべての数字(効率的ではありません)をループにしたい場合は

あなたif文を再定義する必要があります。

for i in range(len(ran)): 
    if a == ran[i]: 
     print "all is good" 
+0

0.49901は配列 'ran'にあるため、技術的にFalseではありません。 –

+1

@MrinalMathur私が言った文書をお読みください。この基本的な知識がなければ、遠くに来ることはありません。ごめんなさい。 fp-数学では、0.1 == 0.05 * 2は必ずしも真ではありません(ランダムな例)。 – sascha

+1

結局のところ、それが 'false'を出力する理由はリンクされた論文に記述されています。 – narn

関連する問題