将伪代码转换为Python

时间:2017-04-12 22:27:39

标签: python pseudocode

这是我给出的伪代码:

  1. 评论:定义一个函数sort1

  2. INPUT:我的列表中的数字列表

  3. 打印初始列表

  4. 循环遍历列表中的所有位置;从第二个元素(索引1)开始

    评论:此时此列表中从0到i-1的元素已排序 向后循环在位于i左侧的列表中的那些位置j;从位置i-1开始,只要j + 1处的值小于j处的值

  5. ,就继续此循环。
  6. 交换位置j和j + 1

  7. 的值
  8. 打印当前列表

  9. 这是我提出的python代码:

    #define a function sort1
    my_list=range(1,40)
    print
    print my_list
    num_comparisons=0
    num_swaps=0
    for pos in range (0,len(my_list)-1):
        for i in range(pos+1,len(my_list)): # starting at position i-1 continue this loop as long
                                            # as the value at j+1 is less than the value at j
            num_comparisons+=1
            if my_list[i]<my_list[pos]:
               num_swaps+=1
               [my_list[i],my_list[pos]]=[my_list[pos],my_list[i]]
    
    print my_list
    print
    print num_comparisons, num_swaps
    

    我不确定我是否正确地做到了。

1 个答案:

答案 0 :(得分:0)

正如我在评论中所说的那样,我认为你实际上j(以及i)与COMMENT谈论的伪代码。但是,在您的代码中,i是变量pos,它会使代码中的j成为i

要查看您的代码是否有效,您最初需要一个未排序的列表 - 而不是代码中的my_list=range(1,40)[1, 2, 3, ... 38, 39]并且已按数字顺序排列)。

您没有做的一件事是定义sort1()函数。

以下是本质上是你的代码,但我重命名了两个变量以匹配伪代码COMMENT,并将(大部分)放在函数定义中,它应该是。

除此之外,我必须将变量num_comparisonsnum_swaps(在psuedocode中没有提到)声明为global,以便可以在函数外部访问它们 - 否则,默认情况下它们本身就是局部变量,只能在函数中访问

def sort1(items):
    """ Sort given list of items in-place. """
    # allow access to these variables outside of function
    global num_comparisons
    global num_swaps

    # initialize global variables
    num_comparisons = 0
    num_swaps = 0

    # starting at position i-1 continue this loop as long
    # as the value at j+1 is less than the value at j
    for i in range(0, len(items)-1):
        for j in range(i+1, len(items)):
            num_comparisons += 1
            if items[j] < items[i]:
               num_swaps += 1
               [items[j], items[i]] = [items[i], items[j]]

my_list = [6, 3, 7, 2, 9, 4, 5]

print 'my_list before sort:'
print my_list
sort1(my_list)
print 'my_list after sort:'
print my_list
print
print 'num_comparisons:', num_comparisons, ', num_swaps:', num_swaps

输出:

my_list before sort:
[6, 3, 7, 2, 9, 4, 5]
my_list after sort:
[2, 3, 4, 5, 6, 7, 9]

num_comparisons: 21 , num_swaps: 10