## Welcome to the Treehouse Community

Want to collaborate on code errors? Have bugs you need feedback on? Looking for an extra set of eyes on your latest project? Get support with fellow developers, designers, and programmers of all backgrounds and skill levels here with the Treehouse Community!

### Looking to learn something new?

Treehouse offers a seven day free trial for new students. Get access to thousands of hours of content and join thousands of Treehouse students and alumni in the community today.

# Or statement execution

Part of the code for Kenneth's `__init__` method uses the `or` statement in the following way:

```def __init__(self, sides = 2, value = 0):
if not sides >=2:
raise ValueError('Must have at least 2 sides')
if not isinstance(sides, int):
raise ValueError('Sides must be a whole number')
self.value = value or random.randint(1, sides)
```

I always thought the `or` statement returns true if both sides of the statement is true.

How does the `or` statement work here?

Let's say someone enters value of 2 so in that case, wouldn't both `2` and `random.randint(1,sides)` be truthy, and the statement would just return `true`? I'm not getting how this is equivalent to "return value if value != 0, or else, return random.randint(1, sides)," which is what I'm assuming the statement means.

In Python, the `or` is not a purely logical evaluation (see docs).
`The expression x or y first evaluates x; if x is true, its value is returned; otherwise, y is evaluated and the resulting value is returned.`
If used as condition in an `if` statement, then the truthiness of "2" would interpreted a "True".