2

これはばかげているように聞こえるかもしれませんが、このforループが13、11、9、7を返す方法の背後にあるロジックを一生理解することはできません。

    for i in range(13,5,-1):
        if i % 2 != 0:
            print i

最初の値はそれが始まる数であり、2番目はそれが停止する場所であり、3番目はそれが取るステップです。「ifi%2!= 0:」は、私を失望させているものです。誰かが私のために何が起こっているのか説明できますか?

4

3 に答える 3

3

最初のビットは、からまでrange(13,5,-1)逆方向にカウントするビットです。次のビットはです。 は、、または「この数を2で割って余りがない場合」と同じであるため、ステートメントは「」と言っています(これは明らかに「」と同じです)。 136i%2 != 0i%2 == 0if evenif oddif not even

基本的に、ループは13から始まり、6まで減少する奇数を印刷します(ただし、6は偶数であるため、印刷されません)

于 2012-09-07T03:29:08.813 に答える
3

%はモジュロ演算子です。ドキュメントから:

%(モジュロ)演算子は、最初の引数を2番目の引数で除算した余りを返します。数値引数は、最初に共通型に変換されます。ゼロ右引数はZeroDivisionError例外を発生させます。引数は浮動小数点数にすることができます。たとえば、3.14%0.7は0.34に等しい(3.14は4 * 0.7 + 0.34に等しいため)。モジュロ演算子は常に、第2オペランドと同じ符号(またはゼロ)の結果を生成します。結果の絶対値は、第2オペランドの絶対値よりも厳密に小さくなります。

于 2012-09-07T03:29:43.027 に答える
2
if i % 2 !=0

その行は、「iを2で割った後の余りが0に等しくない場合」を意味するため、iが奇数かどうかを確認しています。forループは1ずつカウントダウンしていますが、ifステートメントは偶数の出力をスキップします。

于 2012-09-07T03:30:07.047 に答える