|
发表于 2021-10-28 00:30:29
|
显示全部楼层
本帖最后由 jackz007 于 2021-10-28 00:33 编辑
注意代码注释,再结合实际输出动态应该可以帮助你理解算法过程
- #coding:gbk
- li = ['M' , 'L' , 'K' , 'J' , 'I' , 'H' , 'G' , 'F' , 'E' , 'D' , 'C' , 'B' , 'A']
- c = 1
- for i in range(0 , len(li) - 1): # 循环 12 次,i 的值依次为 0、1、2、3 ... 11
- j = i + 1 # 12 次循环中,j 的值依次为 1、2、3、4 ... 12
- print("%2d" % c , ': 交换前 -> ' , *li)
- while j > 0 and li[j] < li[j - 1]: # 如果当前这张牌的前面还有牌,那就和它比,如果牌点比它小就进入(或继续)循环。
- li[j] , li[j - 1] = li[j - 1] , li[j] # 交换两张牌
- j -= 1 # 让上一张牌成为当前牌(准备继续和上上一张牌做比较)
- print("%2d" % c , ': 交换后 -> ' , *li)
- print()
- c +=1
复制代码
运行实况:
- D:\00.Excise\Python>python pk.py
- 1 : 交换前 -> M L K J I H G F E D C B A
- 1 : 交换后 -> L M K J I H G F E D C B A
- 2 : 交换前 -> L M K J I H G F E D C B A
- 2 : 交换后 -> K L M J I H G F E D C B A
- 3 : 交换前 -> K L M J I H G F E D C B A
- 3 : 交换后 -> J K L M I H G F E D C B A
- 4 : 交换前 -> J K L M I H G F E D C B A
- 4 : 交换后 -> I J K L M H G F E D C B A
- 5 : 交换前 -> I J K L M H G F E D C B A
- 5 : 交换后 -> H I J K L M G F E D C B A
- 6 : 交换前 -> H I J K L M G F E D C B A
- 6 : 交换后 -> G H I J K L M F E D C B A
- 7 : 交换前 -> G H I J K L M F E D C B A
- 7 : 交换后 -> F G H I J K L M E D C B A
- 8 : 交换前 -> F G H I J K L M E D C B A
- 8 : 交换后 -> E F G H I J K L M D C B A
- 9 : 交换前 -> E F G H I J K L M D C B A
- 9 : 交换后 -> D E F G H I J K L M C B A
- 10 : 交换前 -> D E F G H I J K L M C B A
- 10 : 交换后 -> C D E F G H I J K L M B A
- 11 : 交换前 -> C D E F G H I J K L M B A
- 11 : 交换后 -> B C D E F G H I J K L M A
- 12 : 交换前 -> B C D E F G H I J K L M A
- 12 : 交换后 -> A B C D E F G H I J K L M
- D:\00.Excise\Python>
复制代码 |
|