0

我需要构建 3 个功能。第一个是插入排序,第二个是生成 0-1 之间的随机数列表,第三个需要创建随机数列表(使用 2nd func。)并对它们进行排序(使用 1st func。)。我最终不能改变测试,也不能改变函数的参数。我对 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)
4

3 回答 3

7

这是因为您调用random_list(n)但您没有将它返回的值分配给任何变量。

试试这个:

my_list = random_list(n)

那应该可以解决您的问题

如果不将返回值分配给random_list()变量,您所做的就是计算random_variable()并丢弃结果。您要做的是将调用的结果命名为,random_variable()以便您以后可以参考它。这是通过将其分配给具有该名称的变量来完成的,在这种情况下,my_list

希望这可以帮助

于 2012-11-26T18:50:56.980 回答
2

好吧,最快的方法是将代码替换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()在任何情况下创建的列表。

于 2012-11-26T18:50:44.543 回答
1

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

于 2012-11-26T18:51:16.120 回答