簡體   English   中英

為什么我得到這個索引超出范圍錯誤?

[英]Why am I getting this Index out of range error?

我是 Python 的初學者,我正在編寫一些代碼,可以從列表中選擇一個隨機字母,打印它,然后從列表中刪除它,這樣就不會再被選中了。 該循環通過一個while循環重復。

import random

list = ["a", "b", "c", "d", "e", "f", "g", "h" , "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"]

yn = "y"

while yn == "y":
 npat = random.randint(0, 25)
 print(list[npat])
 del list[npat]
 yn = input("Again?: ")

它工作正常,但有時,選擇的隨機數顯示在索引范圍之外。

IndexError: list index out of range

在我看來它應該可以正常工作,但是有一個問題。 誰能指出來?

每次您del list[npat]時,列表都會變短。 最終random.randint(0, 25)給你一個超出范圍的索引。

不相關: list是一個錯誤的變量名稱,因為您正在屏蔽內置list

首先,不要調用列表list 給它另一個名字。

問題是每次收到一封信后,您都會刪除該信。 因此,如果列表是[1,2,3]並且我得到3 ,則刪除3

發生這種情況時,列表現在只有 2 個項目。 早些時候, list[2]會起作用。 現在3消失了, list[2]不存在。

要么你必須刪除刪除 function 要么你必須設置一個變量,每次選擇一個字母時都會減少並獲得隨機數:

import random

lista = ["a", "b", "c", "d", "e", "f", "g", "h" , "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"]

yn = "y"
max = 25

while yn == "y":
 npat = random.randint(0, max)
 print(npat)
 print(lista[npat])
 del lista[npat]
 max = max - 1
 yn = input("Again?: ")

lista的大小在變化,特別是它的長度每次迭代都會減少 1。 這就是你得到一個IndexError的原因。

在循環之前使用random.shuffle並從list末尾獲取字母,那么您無需擔心索引。 它更簡單,並且意圖明確:打印一個隨機字母,無需替換,直到所有字母都用完。

import random

letters = ["a", "b", "c", "d", "e", "f", "g", "h" , "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"]
random.shuffle(letters)

yn = "y"

while yn == "y" and letters:
    print(letters.pop())
    yn = input("Again?: ")

每次刪除元素列表大小都會減小。 因此,在生成 (0,25) 之間的隨機數時,有可能生成一個大於列表大小的數字。 因此,不要將大小固定為 (0,25),而是將其更改為 (0,len(lista)-1)。 它會正常工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM