2017-04-17 332 views
1

編輯:隨機「for循環」輸出固定。現在我收到「列表索引超出範圍錯誤」。Python:如何讓for循環每次都在列表中打印隨機生成的項目?

我打算做一個基於隨機生成的字母等級(A-F)的評分程序。該程序要求分配的數量,並打印帶有字母等級的分配編號。它還應該可以找到隨機生成等級的平均等級。輸出應該是這樣的:

Assignment 1 grade is an F 
Assignment 2 grade is a C 
Assignment 3 ... 
The average is a ... 

我有一個列表設置爲隨機生成字母等級。我無法設置代碼來查找字母等級的平均值。此外,我的循環不會每次都吐出一個新的字母等級,因爲它應該是。下面是我的一些代碼:

numberlist = [] 
numberlist.append("A") 
numberlist.append("B") 
numberlist.append("C") 
numberlist.append("D") 
numberlist.append("F") 

count = 1 
for i in range(total): 
    numberindex = random.randint(0, 5) 
    print("The grade for assignment", count, \ 
      "is a {}".format(numberlist[numberindex])) 
    count = count + 1 

目前,它打印:

Assignment 1 grade is an F 
Assignment 2 grade is an F 
Assignment 3 grade is an F... 
+1

您在環路之前接受'numberindex',所以它的值在每次循環時都是相同/不變的。 。 。 – ernie

+1

您只生成一個隨機數。在循環中獲取一個新的隨機值。 –

+0

輕微:您的「numberlist」只包含字符串.. – DSM

回答

1

你只需要做出一個每次循環迭代到一個新的元素時進行隨機選擇。

numberlist = ["A", "B", "C", "D", "F"] 

for i in range(total): 
    choice = random.choice(numberlist) 
    print('The grade for assignment {i} is a {mark}'.format(i=i+1, mark=choice)) 
+1

如果您直接選擇了一封信,則不應該嘗試使用它索引到號碼列表。 – DSM

+0

我沒有得到你的意思是什麼「索引到數字列表」。 'random.choice'從迭代中選擇一個元素。迭代內部的元素類型無關緊要。 – valeas

+0

你認爲你的'numberlist [choice]'做了什麼? – DSM

1

你應該把隨機數生成的循環內:

for i in range(total): 
    numberindex = random.randint(0, 5) ####here! 
    print("The grade for assignment", count, \ 
     "is a {}".format(numberlist[numberindex])) 
    count = count + 1