0

3つの機能を構築する必要があります。1 つ目は挿入ソート、2 つ目は 0 ~ 1 の間の乱数のリストの生成、3 つ目は乱数のリストを作成し (2 つ目の関数を使用)、それらを並べ替える必要があります (1 つ目の関数を使用)。関数の引数ではなく、最終的にテストを変更することはできません。func 3 に問題がありますNameError: global name 'my_list' is not defined。他の関数は正常に動作しますが、3番目のどこが間違っていますか? *最初の関数は何も返すことができません。

ありがとう!

私のコード:

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 に答える