繁体   English   中英

Python,我在做什么错?

[英]Python, what am I doing wrong?

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

正如@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到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

上面是一个基本脚本。 通常,您还可以验证用户输入,并且同时只能在列表中放入奇数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM