将伪代码翻译成Python

将伪代码翻译成Python,python,pseudocode,Python,Pseudocode,这是我得到的伪代码: 注释:定义函数sort1 输入:数字列表我的列表 打印初始列表 在列表中的所有位置i上循环;从第二个元素(索引1)开始 注释:此时,此列表中从0到i-1的元素被排序 在i左侧列表中的位置j上向后循环;从位置i-1开始,只要j+1处的值小于j处的值,则继续此循环 交换位置j和j+1处的值 打印当前列表 这是我提出的python代码: #define a function sort1 my_list=range(1,40) print print my_list n

这是我得到的伪代码:

  • 注释:定义函数
    sort1

  • 输入:数字列表我的列表

  • 打印初始列表

  • 在列表中的所有位置i上循环;从第二个元素(索引1)开始

    注释:此时,此列表中从0到i-1的元素被排序 在i左侧列表中的位置j上向后循环;从位置i-1开始,只要j+1处的值小于j处的值,则继续此循环

  • 交换位置j和j+1处的值

  • 打印当前列表

  • 这是我提出的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
    
    #定义函数sort1
    我的列表=范围(1,40)
    打印
    打印我的清单
    num_比较=0
    数量交换=0
    对于范围(0,len(我的列表)-1)内的pos:
    对于范围内的i(位置+1,len(我的列表)):#从位置i-1开始,继续此循环
    #因为j+1处的值小于j处的值
    num_比较+=1
    
    如果我的清单[i]如我在评论中所说,我认为你实际上拥有伪代码评论所说的
    j
    (以及
    i
    )。但是,在您的代码中,
    i
    是变量
    pos
    ,它将使
    j
    成为代码中的
    i

    要查看代码是否有效,首先需要在代码中有一个未排序的列表,而不是
    my_list=range(1,40)
    (即
    [1,2,3,…38,39]
    ,并且已经按数字顺序排列)

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

    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
    
    下面的内容本质上是您的代码,但我重命名了这两个变量以匹配伪代码注释,并将(大部分)放在函数定义中它应该在的位置

    除此之外,我还必须将变量
    num_comparison
    num_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
    

    欢迎光临。请复习。。。你试过运行它吗?你遇到了什么问题?这看起来像是家庭作业。不确定这是否是寻求帮助的正确位置验证其正确性的一个好方法是确定意图是什么,然后使用一些输入数据检查它是否提供了预期的结果。在不知道目标或不了解输入/输出的情况下“翻译”代码对您没有多大帮助。我能够运行代码而不会出错。。但是我想我遗漏了一些东西,因为我没有在代码中添加关于位置j的任何内容,也无法确定它会去哪里。很抱歉,我对此非常陌生……我认为psuedocode调用的
    I
    是代码中的变量
    pos
    ,因此代码
    I
    中的变量I将对应于第二条
    注释中的
    j
    。这将有助于了解结果应该是什么(应该完成什么)。谢谢!每次我试图定义函数时,我总是会遇到一个错误,现在我明白了原因,我把print语句和列表放在函数后面。