Python 2.7 怎么找不到数字中第二大的数字?python

Python 2.7 怎么找不到数字中第二大的数字?python,python-2.7,Python 2.7,程序必须获取一个数字并打印该数字中的第二大数字 i have tried this ==> a=raw_input("Please enter the nummber =") l=list() for i in a: l.append(int(i)) great=0 for i in range(0,len(l)): for j in l: if l[i]>j: if l[i]>great:

程序必须获取一个数字并打印该数字中的第二大数字

i have tried this ==>
a=raw_input("Please enter the nummber =")
l=list()
for i in a:
    l.append(int(i))
great=0
for i in range(0,len(l)):
    for j in l:
        if l[i]>j:
            if l[i]>great:
                great=l[i]
print great
for i in range(20):
    great-=1
    for j in l:
        if j==great:
            print "Second largest number is ",j
            break
但这带来了产出

Please enter the nummber =1459
9
Second largest number is  5
Second largest number is  4
Second largest number is  1

我认为这会奏效:

print great
flag = 0 
for i in range(20):
    great-=1
    for j in l:
        if j==great:
            print "Second largest number is ",j
            flag = 1
            break
    if flag:
        break

我认为这会奏效:

print great
flag = 0 
for i in range(20):
    great-=1
    for j in l:
        if j==great:
            print "Second largest number is ",j
            flag = 1
            break
    if flag:
        break

使用python的内置函数和

raw\u input
中获得数字后,即可执行此操作

>>> a
'1459'
>>> ordnum = sorted(map(int,a),reverse=True)
>>> ordnum[1]
5
>>> ordnum
[9, 5, 4, 1]
>>> 
首先,使用map将每个数字转换为一个数字,然后将结果传递给按升序排序的数字(默认情况下),但使用
reverse
关键字参数,顺序会颠倒,然后您会得到一个按顺序排列的数字列表,这样第二个元素就是所需的数字

或者,由于您已经完成了映射部分,您可以直接对列表执行排序部分

>>> l
[1, 4, 5, 9]
>>> l.sort(reverse=True)
>>> l
[9, 5, 4, 1]
>>> 
同样的效果

您的代码的问题在于,您没有中断第一个for循环,只有第二个for循环。要中断这两个for循环,您可以按照@cjahangir show的方式执行,或者将其转换为一个函数,当找到它时,它会像这样返回

def second_great(great,num):
    for i in range(10):
        great -= 1
        for j in num:
            if j == great:
                return j
并称之为

print great
print "Second largest number is ", second_great(great,l)

正如@Blckknght所指出的,在这种情况下不需要转换为int,因为数字在单独处理时顺序正确,您也可以使用来删除任何版本中的重复

>>> b="1459934"
>>> sorted(b,reverse=True)
['9', '9', '5', '4', '4', '3', '1']
>>> sorted(set(b),reverse=True)
['9', '5', '4', '3', '1']
>>> sorted(map(int,set(b)),reverse=True)
[9, 5, 4, 3, 1]
>>> 

使用python的内置函数和

raw\u input
中获得数字后,即可执行此操作

>>> a
'1459'
>>> ordnum = sorted(map(int,a),reverse=True)
>>> ordnum[1]
5
>>> ordnum
[9, 5, 4, 1]
>>> 
首先,使用map将每个数字转换为一个数字,然后将结果传递给按升序排序的数字(默认情况下),但使用
reverse
关键字参数,顺序会颠倒,然后您会得到一个按顺序排列的数字列表,这样第二个元素就是所需的数字

或者,由于您已经完成了映射部分,您可以直接对列表执行排序部分

>>> l
[1, 4, 5, 9]
>>> l.sort(reverse=True)
>>> l
[9, 5, 4, 1]
>>> 
同样的效果

您的代码的问题在于,您没有中断第一个for循环,只有第二个for循环。要中断这两个for循环,您可以按照@cjahangir show的方式执行,或者将其转换为一个函数,当找到它时,它会像这样返回

def second_great(great,num):
    for i in range(10):
        great -= 1
        for j in num:
            if j == great:
                return j
并称之为

print great
print "Second largest number is ", second_great(great,l)

正如@Blckknght所指出的,在这种情况下不需要转换为int,因为数字在单独处理时顺序正确,您也可以使用来删除任何版本中的重复

>>> b="1459934"
>>> sorted(b,reverse=True)
['9', '9', '5', '4', '4', '3', '1']
>>> sorted(set(b),reverse=True)
['9', '5', '4', '3', '1']
>>> sorted(map(int,set(b)),reverse=True)
[9, 5, 4, 3, 1]
>>> 

您在解释场景和演示您尝试过的内容以及输出方面做得很好。如果你也写下你期望的结果会更好。你很好地解释了这个场景,展示了你所做的尝试和结果。如果你也写下你所期望的输出,那就更好了。虽然这个答案可能是正确的和有用的,但是如果你能解释一下它是如何帮助解决问题的,那就更好了。如果有一个变化(可能无关)导致它停止工作,并且用户需要了解它曾经是如何工作的,这在将来会变得特别有用。感谢您的评论。虽然这个答案可能是正确和有用的,但如果您解释它如何帮助解决问题,则最好使用它。这在将来变得特别有用,如果有一个变化(可能无关)导致它停止工作,用户需要了解它曾经是如何工作的。感谢您的评论。我要指出的是,您不需要将一位数字符串转换为整数,以便它们正确排序。只有长度不同的数字字符串在按字典顺序排序时才会出现问题(例如,
“10”
出现在
“2”
之前)。我要指出的是,为了正确排序,您不需要将单个数字字符串转换为整数。只有长度不同的数字字符串在按字典顺序排序时才会出现问题(例如,
“10”
位于
“2”
之前)。