0

假设用户输入整数 10。我知道 print(the_sum) 行会产生 12,因为选择了 3 和 9。我不明白为什么选择 3 和 9。在 if 语句行中:“number % 2 and not number % 3”是我感到困惑的地方。我想我只是不明白“而不是”正在做什么来更改该行以生成要为 the_sum 添加的 3 和 9。任何帮助将不胜感激,因此我可以进一步理解。

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 都0被考虑False,所有其他 int 都被考虑True

现在,何时n % 2等于才能0考虑False?好吧,whenn可以被 2 整除。对于 也可以这样说n % 3:它是Falsewhenn可以被 3 整除。所以 if 语句可以被认为是:

if ((number 不能被 2 整除) and (number is 能被 3 整除))

请注意,因为n % 3对于所有不能被 3 整除的整数都not n % 3为真,所以对于所有能被 3 整除的整数为真。

这与您看到的输出相匹配:9并且3是 1 到 9(含)范围内唯一满足此条件的两个整数。

于 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 在布尔上下文中为假,任何其他数字都被视为真。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

模运算符 ( %) 将返回一个 int,它对应于 2 个数字相除的余数。在if语句中,Python 根据它们的真实性来处理数字——0是虚假的,其他的都是真实的。所以这段代码有点太聪明了。我会这样澄清:

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