dustin - 1 year ago 105

Python Question

I am trying to make a simple program in Python that calculates the largest odd number out of the values x, y, z. How do I give the user an option to pick the values for x, y, and z?

So the program will ask what x, y, and z is and then say "x,y,z is the largest odd" or the numbers are all even.

What I have so far is below. Is this at least a decent start?

`# This program exmamines variables x, y, and z`

# and prints the largest odd number among them

if x%2 !== 0 and x > y and y > z:

print 'x is the largest odd among x, y, and z'

elif y%2 !== 0 and y > z and z > x:

print 'y is the largest odd among x, y, and z'

elif z%2 !== 0 and z > y and y > x:

print 'z is the largest odd among x, y, and z'

elif x%2 == 0 or y%2 == 0 or z%2 == 0:

print 'even'

With thkang post, I now have:

`# This program exmamines variables x, y, and z`

# and prints the largest odd number among them

if x%2 !== 0:

if y%2 !== 0:

if z%2 !== 0:

if x > y and x > z: #x is the biggest odd

elif y > z and y > x: #y is the biggest odd

elif z > x and z > y: #z is the biggest odd

else: #z is even

if x > y: #x is the biggest odd

else: #y is the biggest odd

else: #y is even

if z%2 != 0: #z is odd

if x > z: #x is the biggest odd

else: #z is the biggest odd

else: #y,z are even and x is the biggest odd

else: #x is even

if y%2 != 0 and z%2 != 0; #y,z is odd

if y > z: #y is the biggest odd

else: #z is the biggest odd

else: #x and y is even

if z%2 != 0: #z is the biggest odd

Answer Source

it would be better to filter the numbers, then sort them.

```
numbers = [x, y, z]
sorted_odd_nums = sorted((x for x in enumerate(numbers) if x[1]%2),
key = lambda x:x[1],
reverse=True)
if not sorted_odd_nums:
# all numbers were even and filtered out.
elif sorted_odd_nums[0][0] == 0:
# x is the biggest odd number
elif sorted_odd_nums[0][0] == 1:
# y is the biggest odd number
elif sorted_odd_nums[0][0] == 2:
# z is the biggest odd number
```

`enumerate(numbers)`

returns a sequence of `(index, item)`

pairs. since original list was `[x, y, z]`

, we can keep the track of `x`

, `y`

, `z`

even after filter and sort.

`(x for x in enumerate(numbers) if x[1]%2)`

filters above enumeration if the second item in given tuple is not an even number.

`sort( ... , key=lambda x:x[1], reverse=True)`

sorts filtered items using value of their second-indexed item(which is original number) in descending order.

to read from user, the easiest way is using `raw_input`

(py2) / `input`

(py3k).

```
number = int(raw_input('enter a number: '))
```

you'd have to nest if-statements. like:

```
if x%2: # x is odd
if y%2: # y is odd
if z%2: #z is odd
if x>y and x>z: #x is the biggest odd number
elif y>z and y>x: #y is the biggest odd number
elif z>x and z>y: #z is the biggest odd number
else: #z is even
if x>y: #x is the biggest odd number
else: #y is the biggest odd number
else: #y is even
if z%2: #z is odd
...
```