调用功能

时间:2012-11-26 18:47:58

标签: python

我需要构建3个功能。 第一个是插入排序,第二个是生成0-1之间的随机数列表,第三个需要创建一个randon数列表(使用第二个函数)并对它们进行排序(使用第一个函数)。 我最终无法改变测试而不是funcs的参数。 我对func 3有疑问,它说NameError: global name 'my_list' is not defined。 其他功能正常,我在第三个错误的地方? *第一个功能不允许返回任何内容。

谢谢!

我的代码:

def insertion_sort(lst):
    for i in range(1,len(lst)):
        current=lst[i]
        j=i-1
        while j>=0:
            if current < lst[j]:
                lst[j+1] = lst[j]
                lst[j] = current
                j-=1
            else:
                break

def random_list(n):
    import random
    my_list=[]
    for i in range(n):
        my_list.append (random.random ())
    return my_list

def sorted_random_list(n):
    random_list(n)
    insertion_sort(my_list)

### TEST FUNCTION - DON'T CHANGE THIS ####
def test_sorted(lst):
    print lst == sorted(lst) and len(lst) > 0

def test_len(lst, length):
    print len(lst)==length

def sort_and_test(lst):
    lst = lst[:]
    insertion_sort(lst)
    test_sorted(lst)

sort_and_test([13,54,3434,88,334,6,8,84,57,4,2,4,6,6])
sort_and_test(["dog","cat","cow","zebra","frog","bat","spider","monkey"])
sort_and_test(["hi","hello","how are you","what your doing"])

test_len(random_list(10), 10)
lst = sorted_random_list(10)
test_len(lst, 10)
test_sorted(lst)

3 个答案:

答案 0 :(得分:7)

这是因为你打电话给random_list(n),但你没有将它返回的值分配给任何变量。

请改为尝试:

my_list = random_list(n)

那应该可以解决你的问题

如果没有将random_list()的返回值赋给变量,您所做的只是计算random_variable()并丢弃结果。您要做的是将调用的结果命名为random_variable(),以便稍后可以参考。这是通过将其分配给具有该名称的变量(在本例中为my_list

)来完成的

希望这有帮助

答案 1 :(得分:2)

嗯,最快的方法是用{/ 1>替换sorted_random_list()中的代码

new_list = random_list(n)
insertion_sort(new_list)
return new_list

但是这里更深层次的问题似乎是缺乏对范围界定的理解以及对变量赋值的需求。 my_list仅存在于random_list()的范围内,因此它在全局命名空间中不可用,这就是您在此处看到错误的原因。您实际上并没有将random_list(n)的结果分配给任何内容,因此您将丢弃新列表。然后,在任何情况下,您实际上都不会返回在sorted_random_list()中创建的列表。

答案 2 :(得分:1)

my_list不是全局变量。由于您要从random_list()返回列表,因此在sorted_random_list()中您应该my_list = random_list(n)。这将在该函数的范围内创建变量my_list