0

ユーザーが整数 10 を入力したとします。3 と 9 の両方が選択されているため、print(the_sum) 行が 12 を生成することがわかっています。なぜ 3 と 9 が選ばれたのかわかりません。if ステートメントの行では、「number % 2 であり、number % 3 ではありません」という箇所で混乱しています。the_sumに追加される3と9を生成するためにその行を変更するために「and not」が何をしているのか理解していないと思います。より理解を深めて前進できるように、どんな助けも大歓迎です。

the_max = int(input("Enter the upper limit:"))
the_sum = 0
extra = 0

for number in range(1,the_max):
    if number%2 and not number%3:
        the_sum = the_sum + number
    else:
        extra += 1 

print(the_sum) 
print(extra)
4

3 に答える 3

3
if number%2 and not number%3:

この行を理解するには、最初に bool コンテキストで使用されたときに int がどのように扱われるかを理解する必要があります。一言で言えば、 int の値を持つすべての int が0考慮Falseされ、他のすべての int が考慮されTrueます。

では、 が にn % 2等しい0と見なされるのはFalseいつですか? さて、 whennは 2 で割り切れます。同じことが にも言えますn % 3:が 3 で割り切れるFalse場合です。n

If ((数値は2で割り切れない)かつ(数値は3で割り切れる))

n % 3sinceは 3 で割り切れないすべての int についてnot n % 3真であり、 は3割り切れるすべての int について真であることに注意してください。

9これは、表示される出力と一致します3。この条件を満たすのは、1 から 9 (両端を含む) の範囲内の 2 つの整数だけです。

于 2013-09-26T21:51:18.823 に答える
1

9 のコンポーネントを試してください。

>>> 9 % 2
1
>>> 9 % 3
0
>>> not 9 % 3
True
>>> 9 % 2 and not 9 % 3
True

数値 0 はブール コンテキストでは false であり、その他の数値は true と見なされます。not 0したがって、本当です。

他の数値の場合、組み合わせは両方のテストで真の値を返すことはありません。

>>> 1 % 2
1
>>> 1 % 3
1
>>> not 1 % 3
False

つまり、2 で割り切れないが 3 で割り切れる数のみ選択されます。

理解を簡単にするために、代わりに数値 0 を明示的にテストできます。

if number % 2 != 0 and number % 3 == 0:
于 2013-09-26T21:48:52.687 に答える
0

モジュロ演算子 ( %) は、2 つの数値の除算の余りに対応する int を返します。ifステートメントでは、Python はその真偽に従って数値を扱います0。したがって、このコードは少し巧妙すぎます。私はそれを次のように明確にします:

    if number % 2 != 0 and number % 3 == 0:
于 2013-09-26T21:50:25.337 に答える