2016-05-01 9 views
-1

forループとinine文は使用できません エラーが発生しました。範囲外ですか?どうして?はforループとinine文を取得できません

lst=[] 
for m in xrange(0,5,1): 
    rs=[0,0,0,3] 
    rg=range(5) 
    lst.append(rg[m+1] if rs==0 or rg[m+1]>3 else 0) 

これは機能しますが、エラーはありません!

lst=[] 
for m in xrange(0,5,1): 
    rs=[0,0,0,3] 
    rg=range(5) 
    lst.append(rg[m+1] if rs==0 or rg[m]<3 else 0) 

これは機能しませんが、

lst=[] 
for m in xrange(0,5,1): 
    rs=[0,0,0,3] 
    rg=range(5) 
    lst.append(rg[m+1] if rs==0 or rg[m]>3 else 0) 
+2

この質問には、使用しているプログラミング言語でタグを付けてください。 – yaakov

+0

これはpythonなら、それは私のために良い評価します。 –

+0

私は私の質問を変えた、おそらくタイプミスが進行中でした。私はあなたがそれに答えるときに質問を編集していました! –

答えて

1

m 0から4

rgに行きますmが4であるときは、(条件によって異なります)lstrg[m+1]を追加しよう4.

にインデックス0と5つの要素を持っていますこれはrgにそのようなインデックスがないため、範囲外のrg[5]にアクセスしようとします。

+0

あなたは正しい@Wodinですが、ifインラインステートメントの左の部分、-at leats-は正しい部分が検証されるまで検証されません。自分の答えもチェックしてください...ありがとう! –

1

私の答えが見つかりました!

インラインステートメントは、最初に右側部分を検証し、次に左側部分を検証します。 インラインステートメントの左の部分は、左の部分が検証されるまで誤って記述されます。したがって、ほとんどの場合、インラインのif文を持っている可能性があります。右側の部分はTRUEですが、左側の部分は問題ありません。

どうすれば確認できますか?その場合、追加の論理チェックを挿入する必要がありますか?これが唯一の解決策ですか?

たとえば、これは常に正しい部分を検証します。結果は0になりますが、左側の部分は有効になりません。

r=[0,1] 
a=[2,3] 

r[99999] if a[1]==2 else 0 
+0

最後に、私の答えは '((0ならm <20 else m + 1)rs == 0 else 0)'という文でした。私は20未満のすべてのアイテムを残し、同時にすべての個々のアイテムを1つ増やしたいと考えました。これはif/inlineステートメントによって行われました。みんなありがとう。 –

1

for m in xrange(0,5,1) = for m in iter([0,1,2,3,4])

rg=range(5) = rg=[0,1,2,3,4]

m = 4場合条件rg[m]>3Trueあります。あなたはlst.append(rg[4+1])です。 rg[5]rgの範囲外です。

P/S:を確認するにはどうすればよいですか?rs=[0,0,0,3]?常に返るFalse

+0

はい、あなたもそうです! –

関連する問題