如何找到一个数字中的第二大数字?蟒蛇

时间:2016-01-30 18:25:45

标签: 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:
                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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

使用python mapsorted的内置函数轻松完成

raw_input获得号码后,您可以执行此操作

>>> a
'1459'
>>> ordnum = sorted(map(int,a),reverse=True)
>>> ordnum[1]
5
>>> ordnum
[9, 5, 4, 1]
>>> 

首先使用map将每个数字转换为数字,并将结果传递给sort,默认情况下按升序对它们进行排序,但是使用reverse关键字参数,orden被反转,然后你得到一个列表数字按顺序排列,所以第二个元素是欲望数字。

或者,当您已经执行地图部分时,您可以直接对列表进行排序部分

>>> l
[1, 4, 5, 9]
>>> l.sort(reverse=True)
>>> l
[9, 5, 4, 1]
>>> 

同样的效果。

你的代码的问题在于你没有打破第一个for循环,只有第二个,打破你可以像@cjahangir show那样打破,或者把它变成一个函数,当它像这样找到它时返回< / p>

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是不必要的,因为在单独处理时数字是正确的顺序,你也可以使用set删除任何版本中的重复。

>>> 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]
>>>