Python, what am I doing wrong?

I'm new to python programming, and programming / computations in general.One of the first exercise in a book I got says to make a program that asks for 10 numbers then gives the largest odd number. I am only using what I know, I thought about using a list but I don't know much about them.

I'm sure there is a simple way to do this, if possible show it to me, but right now I would like to know what am I doing wrong with this code.I run the code and when I enter 1-10 it says 3 is the largest odd number... I also ran the code by hand and it seems to work fine, but there is an error in the code or in my logic...

print("Please Enter 10 digits")
num1=int(raw_input())
num2=int(raw_input())
num3=int(raw_input())
num4=int(raw_input())
num5=int(raw_input())
num6=int(raw_input())
num7=int(raw_input())
num8=int(raw_input())
num9=int(raw_input())
num10=int(raw_input())
number = 0
if num1>num2:
    if num1 %2 !=0:
        number=num1
elif num2 %2!=0:
    number=num2   

elif num3 >number:
    if num3 %2 !=0:
        number=num3
elif num4 >number:
    if num4 %2 !=0:
        number=num4
elif num5 > number:
    if num5 %2 !=0:
        number=num5
elif num6 >number:
    if num6 %2 !=0:
        number=num6
elif num7 > number:
    if num7 %2 !=0:
        number=num7
elif num8 > number:
    if num8 %2 !=0:
        number=num8
elif num9 > number:
    if num9 %2 !=0:
        number=num9
elif num10 > number:
    if num10 %2 !=0:
        number=num10
elif number == 0:
    print ("No odd numbers entred")
print(number)
raw_input()

Upvotes: 0

Views: 126

Answers (2)

uselpa
uselpa

Reputation: 18937

As @Jerry explains, the problem is that you're using elif which exits at the first true condition without considering the other numbers.

I'd like to show you that you can do these things much more concisely in Python; one example would be this 4-liner:

numbers = []
for i in range(10):
    numbers.append(int(raw_input("number? ")))
print(max(filter(lambda e : e%2==1, numbers)))

Upvotes: 2

Jerry
Jerry

Reputation: 71598

Well, the logic is not so fine... Let's say we used 1 through 10. I'm adding some comments in the code:

print("Please Enter 10 digits")
num1=int(raw_input())
num2=int(raw_input())
num3=int(raw_input())
num4=int(raw_input())
num5=int(raw_input())
num6=int(raw_input())
num7=int(raw_input())
num8=int(raw_input())
num9=int(raw_input())
num10=int(raw_input())
number = 0
if num1>num2:             # "1 > 2" false
    if num1 %2 !=0:
        number=num1
elif num2 %2!=0:          # "2 % 2 != 0" false
    number=num2   

elif num3 >number:        # "3 > 0" true
    if num3 %2 !=0:       # "3 % 2 != 0" true and exit
        number=num3
elif num4 >number:
    if num4 %2 !=0:
        number=num4
elif num5 > number:
    if num5 %2 !=0:
        number=num5
elif num6 >number:
    if num6 %2 !=0:
        number=num6
elif num7 > number:
    if num7 %2 !=0:
        number=num7
elif num8 > number:
    if num8 %2 !=0:
        number=num8
elif num9 > number:
    if num9 %2 !=0:
        number=num9
elif num10 > number:
    if num10 %2 !=0:
        number=num10
elif number == 0:
    print ("No odd numbers entred")
print(number)              # Print 3

See now? Your code hasn't even considered the other numbers.

If you want to use a list, you might want to append each number to the same list, sort from largest to smallest and look for the first odd number:

print("Please Enter 10 digits")
list_numbers = []

list_numbers.append(int(raw_input()))  # Append number to the list list_numbers
list_numbers.append(int(raw_input()))
list_numbers.append(int(raw_input()))
list_numbers.append(int(raw_input()))
list_numbers.append(int(raw_input()))
list_numbers.append(int(raw_input()))
list_numbers.append(int(raw_input()))
list_numbers.append(int(raw_input()))
list_numbers.append(int(raw_input()))
list_numbers.append(int(raw_input()))

list_numbers.sort(reverse=True)       # Sort the numbers in reverse

for i in list_numbers:                # Loop...
    if i % 2 != 0:                    # If odd...
        print(i)                      # Print
        break                         # Exit loop

The above is a basic script. Usually, you can also validate the user input, and at the same time, you could put only the odd numbers in the list.

Upvotes: 1

Related Questions