2014-02-21 4 views
0

я работал над проектом Эйлера проблемы и нашел этот код в Интернете:Что именно это означает в Python?

a = 1 
b = 2 
s = 0 

while b <= 4000000: 
    if not b % 2: 
     s += b 
    a, b = b, a + b 
print s 

Я не совсем уверен, что if not b % 2: средства и было интересно, если кто-то будет возражать, пролить некоторый свет на это для меня.

+0

'if not b% 2:' = если остаток от b/2 равен 0. – njzk2

+0

Вы прочитали документацию на Python, что означает «нет» и что делает оператор%? –

+0

'%' в большинстве современных языков программирования означает модуль/оставшийся. Вы должны найти документацию по языку, прежде чем задавать такие основные вопросы. –

ответ

3

Из docs:

The % (modulo) operator yields the remainder from the division of the first argument by the second.

например, 5/2 == 2.5 # or 2 remainder 1, 5%2 == 1

Единственный раз, когда % операция выйдет на 0 (который удовлетворяет not x%y), если это нацело. Другими словами, 4 % 2 == 0, потому что 2 делит 4 равномерно.

В своем коде, он говорит:

while b is less than 4,000,000: 
    if b is even: 
     set s equal to s+b 
-1

Это просто милый способ написания if b%2==0. Оператор not при его переходе 0 вернет True и False что-нибудь еще.

+1

Удовлетворенность фактом: поскольку Python эффективен с точки зрения памяти и создает только указатели для небольших целых чисел, вы можете делать 'if b% 2 is 0' и увлекать каждого программиста, который должен поддерживать ваши код! –

1

modulo % operator возвращает остаток от деления b на 2 (в вашем случае).
Таким образом, if not b % 2 имеет то же значение, что if b % 2 == 0: он проверяет, равно ли число.

0

b % 2 - остаток после деления на 2. Таким образом, это будет 1, если b нечетно, или 0 в противном случае.

if not b % 2, таким образом, могут быть переведены на «если б даже»

0

Python интерпретирует значение 1, как истинный и 0, как FALSE:

>>> 1 == True 
True 
>>> 0 == True 
False 

Операция по модулю x % y возвращает остаток, когда x делится от y. Поэтому b % 2 будет 0, когда b равно, и 1, когда b является нечетным.

Объединив все это вместе, утверждение if not b % 2: соответствует «если b равно».

+1

Нет, это неверно. В Python каждое целое число, за исключением '0', оценивается как' True' в булевом контексте. Поведение, которое вы видите, можно объяснить тем, что 'True' оценивает' 1', когда оно интерпретируется как целое (это по историческим причинам). – iCodez

+0

А, я вижу. Я отредактирую свой ответ, чтобы устранить путаницу. – Tetrinity

Смежные вопросы