+ 1

# Please can anyone explain the output? I don't understand i try but still no. Why numbers are evens !?

def numbers(x): for i in range(x): if i % 2 == 0: yield i print(list(numbers(11))) # output --> [0,2,4,6,8]

4 ответов

+ 3

% operator return remainder...
Therefore, it will print [0,2,4,6,8,10]
(range always work one less)
as per your if logic ~
0%2 == 0 true -> 0
1%2 == 0 false
2%2 == 0 true -> 2
3%2 == 0 false
4%2 == 0 true -> 4
5%2 == 0 false
6%2 == 0 true -> 6
7%2 == 0 false
8%2 == 0 true -> 8
9%2 == 0 false
10%2 == 0 true -> 10

+ 2

% is the modulo operator.
It divides two numbers and returns the reminder
For example:
There are 4 people who wants to eat a pizza. The pizza is cutted in 9 exactly portions. All of them must eat the same quantity of pizza so you give them 2 portions each. 1 portion is the reminder
So in numbers it will be:
9%4 = 1
a % b
The operation is like:
a - floor(a/b) * b
Where floor(a / b) represents the number of times you can divide a by b.
floor(a / b) * b is the amount that was successfully shared entirely
The total ‘a’ minus what was shared equals the reminder of the division
So using your code as example the reminder of
any number % 2 can be 0 or 1
If the number es even : 2,4,6,8
The operation will return 0
2%2 = 0
4%2=0
Because there are no reminders!! You can divide it entirely
If the number is odd: 1,3,5,7
The operation will return 1
1%2 = 1
3%2 = 1
5%2 = 1

+ 2

5 / 2 = 2.5
5 // 2 = 2
5 % 2 = 1 <--- 2 can only go into 5 evenly twice and 1 (remainder) is left over (5-2-2 = 1)

+ 2

Thanks a lot community !
Sweet pizza 😋