Python,我做错了什么?

时间:2014-07-24 10:34:46

标签: python

我是python编程的新手,以及一般的编程/计算。我得到的一本书中的第一个练习中的一个说是制作一个要求10个数字的程序然后给出最大的奇数。我只是使用我所知道的,我想过使用一个列表,但我不太了解它们。

我确定有一种简单的方法可以做到这一点,如果可能的话告诉我,但是现在我想知道这个代码我做错了什么。我运行代码,当我进入1-10它说3是最大的奇数...... 我也手动运行代码,它似乎工作正常,但代码或我的逻辑中有错误...

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()

2 个答案:

答案 0 :(得分:2)

正如@Jerry解释的那样,问题在于你使用elif,它在第一个真实条件下退出而不考虑其他数字。

我想告诉你,你可以在Python中更简洁地做这些事情;一个例子是这个4班轮:

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

答案 1 :(得分:1)

嗯,逻辑不太好......我们说我们使用了1到10.我在代码中添加了一些注释:

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

现在看?您的代码甚至没有考虑其他数字。

如果要使用列表,您可能希望将每个数字附加到同一列表,从最大到最小排序并查找第一个奇数:

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

以上是基本脚本。通常,您也可以验证用户输入,同时,您只能将奇数放在列表中。