動作がよくわからないときはprint
デバッグと言う方法があります。要所要所にprint文(Python3以降はprint式)を突っ込んで何がどう変わったのかを確認するという方法です。
Python
1 data = raw_input ( )
2 nums = data . split ( )
3
4 min = int ( nums [ 0 ] )
5 for i in range ( len ( nums ) ) :
6 nums [ i ] = int ( nums [ i ] )
7 if ( min < nums [ i ] ) :
8 min = nums [ i ]
9
10 sorted_list = [ ]
11
12 print "start" , "min:" , min , "sorted_list:" , sorted_list , "nums:" , nums
13
14 for i in range ( len ( nums ) ) :
15 #find the maximum, append to other list
16 #and replace it with a small number
17 max = min
18 max_index = 0
19 for j in range ( len ( nums ) ) :
20 if ( nums [ j ] < max ) :
21 max = nums [ j ]
22 max_index = j
23 print "i:" , i , "j:" , j , "min:" , min , "max:" , max , "max_index:" , \
24 max_index , "sorted_list:" , sorted_list , "nums:" , nums
25
26 sorted_list . append ( nums [ max_index ] )
27 nums [ max_index ] = min
28
29 print sorted_list
このようにして、二重forループで何がどうわかっていったのかを見えるようにします。例えば、3 2 8 5 7
という入力だと、
start min: 8 sorted_list: [] nums: [3, 2, 8, 5, 7]
i: 0 j: 0 min: 8 max: 3 max_index: 0 sorted_list: [] nums: [3, 2, 8, 5, 7]
i: 0 j: 1 min: 8 max: 2 max_index: 1 sorted_list: [] nums: [3, 2, 8, 5, 7]
i: 0 j: 2 min: 8 max: 2 max_index: 1 sorted_list: [] nums: [3, 2, 8, 5, 7]
i: 0 j: 3 min: 8 max: 2 max_index: 1 sorted_list: [] nums: [3, 2, 8, 5, 7]
i: 0 j: 4 min: 8 max: 2 max_index: 1 sorted_list: [] nums: [3, 2, 8, 5, 7]
i: 1 j: 0 min: 8 max: 3 max_index: 0 sorted_list: [2] nums: [3, 8, 8, 5, 7]
i: 1 j: 1 min: 8 max: 3 max_index: 0 sorted_list: [2] nums: [3, 8, 8, 5, 7]
i: 1 j: 2 min: 8 max: 3 max_index: 0 sorted_list: [2] nums: [3, 8, 8, 5, 7]
i: 1 j: 3 min: 8 max: 3 max_index: 0 sorted_list: [2] nums: [3, 8, 8, 5, 7]
i: 1 j: 4 min: 8 max: 3 max_index: 0 sorted_list: [2] nums: [3, 8, 8, 5, 7]
i: 2 j: 0 min: 8 max: 8 max_index: 0 sorted_list: [2, 3] nums: [8, 8, 8, 5, 7]
i: 2 j: 1 min: 8 max: 8 max_index: 0 sorted_list: [2, 3] nums: [8, 8, 8, 5, 7]
i: 2 j: 2 min: 8 max: 8 max_index: 0 sorted_list: [2, 3] nums: [8, 8, 8, 5, 7]
i: 2 j: 3 min: 8 max: 5 max_index: 3 sorted_list: [2, 3] nums: [8, 8, 8, 5, 7]
i: 2 j: 4 min: 8 max: 5 max_index: 3 sorted_list: [2, 3] nums: [8, 8, 8, 5, 7]
i: 3 j: 0 min: 8 max: 8 max_index: 0 sorted_list: [2, 3, 5] nums: [8, 8, 8, 8, 7]
i: 3 j: 1 min: 8 max: 8 max_index: 0 sorted_list: [2, 3, 5] nums: [8, 8, 8, 8, 7]
i: 3 j: 2 min: 8 max: 8 max_index: 0 sorted_list: [2, 3, 5] nums: [8, 8, 8, 8, 7]
i: 3 j: 3 min: 8 max: 8 max_index: 0 sorted_list: [2, 3, 5] nums: [8, 8, 8, 8, 7]
i: 3 j: 4 min: 8 max: 7 max_index: 4 sorted_list: [2, 3, 5] nums: [8, 8, 8, 8, 7]
i: 4 j: 0 min: 8 max: 8 max_index: 0 sorted_list: [2, 3, 5, 7] nums: [8, 8, 8, 8, 8]
i: 4 j: 1 min: 8 max: 8 max_index: 0 sorted_list: [2, 3, 5, 7] nums: [8, 8, 8, 8, 8]
i: 4 j: 2 min: 8 max: 8 max_index: 0 sorted_list: [2, 3, 5, 7] nums: [8, 8, 8, 8, 8]
i: 4 j: 3 min: 8 max: 8 max_index: 0 sorted_list: [2, 3, 5, 7] nums: [8, 8, 8, 8, 8]
i: 4 j: 4 min: 8 max: 8 max_index: 0 sorted_list: [2, 3, 5, 7] nums: [8, 8, 8, 8, 8]
[2, 3, 5, 7, 8]
i
とj
の二重ループ、i
が回る度にsorted_list
がちょっとずつ増やしてnums
がmin
で置き換えられていく、j
を回してmax
になるのを探していく、**min
とmax
の比較の所って不等号が逆じゃ無いのか?**というのがよくわかるかと思います。