程序必须带一个数字并打印数字中的第二大数字。
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
答案 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)
从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]
>>>