2016-10-08 9 views
0

これは確かに簡単な答えですが、if ______ in ____:ブロックを既存のforブロックにネストする方法を見つけることができません。Pythonのforループの繰り返し中に例外を作る方法

たとえば、このブロックを変更して、奇数を省略して、iの各インスタンスを反復するにはどうすればよいでしょうか。

odds = '1 3 5 7 9'.split() 
for i in range(x): 
    if i in odds: 
     continue 
    print(i) 

このコードはif i == yのために動作しますが、私はそれが「Y」の特定のセットで動作するように得ることができないの

+1

'odds'は文字列のリストです。 'i'は整数です。 –

+0

質問から偶数または奇数を印刷するかどうかはわかりません。範囲を使用しています。これは、リストの値ではなく、ある範囲の値に対して繰り返し処理を行うことを示唆しています。これを明確にする必要があるかもしれません。 – Sarcoma

+0

私はforループを除外する方法を探していました。私が書いた実際のプログラムはもっと複雑なのでシンプルなのでこの例を与えました。この例では、すべての変数が繰り返し処理されることが好きでしたが、確率が 'continue'ステートメントに当たってからは、evensが印刷されていることが必要でした。 – Vendelisk

答えて

4

これは、ネスティングとは何の関係もありません。あなたはリンゴを梨と比較していますが、この場合はstrのリストにintが見つかりました。

したがってifのテストでは一致しません。のリストには1が含まれていません。 3または5または7または9のいずれもありません。整数は文字列とは異なる種類のオブジェクトであるため、その文字列に人間のように見える数字が数字のように含まれていても同じです。

いずれかの最初の文字列にあなたのint型に変換したり、文字列が整数に変換する:

if str(i) in odds: 

または

odds = [int(i) for i in '1 3 5 7 9'.split()] 

あなたが奇数のためにテストしたい場合は、より良いテストがあります; 2で除算した残りが1であるかどうか確認してください。

if i % 2 == 1: # i is an odd number 
0

偶数の範囲で繰り返し処理する場合は、このような処理が必要です。 Xは整数です。 2はステップですので、これは奇数を省略します。

for i in range(0,x,2): 
    print(i) 

詳細はこちらドキュメントをチェックアウト:

https://docs.python.org/2/library/functions.html#range

は、私はあなたが提供するコードで問題のカップルに走った、ちょうどprint文とに至るまで下落するだろう続けますoddsの値です。ここでcharsは比較が失敗したintsではありませんでした。

整数リストを作成し、inの代わりにnot inを使用すると、これを回避できます。

x = 10 
odds = [1, 3, 5, 9] 
for i in range(x): 
    if i not in odds: 
     print(i) 
関連する問題