```
threes_and_fives = [x ** 1 for x in range(1, 16) if (x % 3 or x % 5)==0]
```

Even though I got this section right, I wanted to know the issue with this code

```
threes_and_fives = [x ** 1 for x in range(1, 16) if (x % 3 or x % 5)==0]
```

Even though I got this section right, I wanted to know the issue with this code

the condition you used here:

```
if (x % 3 or x % 5)==0
```

isn’t right.

for example for `x=10`

we get:

```
(10 % 3 or 10 % 5) == 0
```

10 % 3 is 1, and 10 % 5 is zero so we get:

```
(1 or 0) == 0
```

`1`

is true (positive integers are considered true while zero is considered false)

so `1`

is true, so `1 or 0`

will evaluate to `1`

, then we get:

```
1 == 0
```

which is false, so `x`

isn’t appended. (the if condition only appends when evaluate to true)

for `x=6`

we would get:

```
(6 % 3 or 6 % 5 ) == 0
```

which is:

```
(0 or 1 ) ==0
```

`1`

is true, so the `or`

operator will pick the true value, so we get:

```
1 == 0
```

which is false

the only reason `x=15`

is working is because then you get `(0 or 0) == 0`

, so there is no true value to pick for the or operator, so then it uses zero. `0 == 0`

equals true. So finally something is appended to the list

But the most important thing, is to understand your if condition is wrong and needs fixing to work

for `or`

and `and`

operator, you need to compare at both sides of the `or`

(or `and`

) operator. Otherwise, you might get this unexpected behaviour.

This topic was automatically closed 7 days after the last reply. New replies are no longer allowed.