1

私はPythonの初心者で、forループによって生成された合計のリストを作成するのに苦労しています.

私のプログラムが複数選択テストで視覚障害のある生徒のクラスのスコアをシミュレートする必要がある学校の課題を受け取りました。

def blindwalk():       # Generates the blind answers in a test with 21 questions
    import random
    resp = []
    gab = ["a","b","c","d"]
    for n in range(0,21):
        resp.append(random.choice(gab))
    return(resp)

def gabarite():        # Generates the official answer key of the tests
    import random
    answ_gab = []
    gab = ["a","b","c","d"]
    for n in range(0,21):
        answ_gab.append(random.choice(gab))
    return(answ_gab)

def class_tests(A):    # A is the number of students
    alumni = []
    A = int(A)
    for a in range(0,A):
        alumni.append(blindwalk())
    return alumni

def class_total(A):    # A is the number of students
    A = int(A)
    official_gab = gabarite()
    tests = class_tests(A)
    total_score = []*0
    for a in range(0,A):
        for n in range(0,21):
            if  tests[a][n] == official_gab[n]:
                total_score[a].add(1)
    return total_score

class_total() 関数を実行すると、次のエラーが発生します。

    total_score[a].add(1)

IndexError: list index out of range

問題は、各生徒のスコアを評価してリストを作成する方法です。これが class_total() 関数でやりたいことだからです。

私も試しました

if  tests[a][n] == official_gab[n]:
                    total_score[a] += 1

しかし、同じエラーが発生したため、Python でリストがどのように機能するかをまだ完全には理解していないと思います。

ありがとう!

(また、私は英語のネイティブ スピーカーではないので、十分に明確にできなかったら教えてください)

4

1 に答える 1

0

この行:

total_score = []*0

実際、次の行のいずれかです。

total_score = []*30
total_score = []*3000
total_score = []*300000000

total_score が空のリストとしてインスタンス化されるようにします。この場合、0 番目のインデックスすらありません。長さ l のリストで x のすべての値を開始したい場合、構文は次のようになります。

my_list = [x]*l

または、事前にサイズを考える代わりに、次のように特定のインデックスにアクセスする代わりに .append を使用できます。

my_list = []
my_list.append(200)
# my_list is now [200], my_list[0] is now 200
my_list.append(300)
# my_list is now [200,300], my_list[0] is still 200 and my_list[1] is now 300
于 2015-05-01T15:25:02.410 に答える