簡體   English   中英

“IndexError:列表分配索引超出范圍”分配給空列表中的索引

[英]"IndexError: list assignment index out of range" assigning to an index in an empty list

#all leter are MAG
#E->3 A->4 O->0 V->W I->2
#rand ASCII with ch
from random import randint
letterNum=randint(4,8)
word=[]
if len(word)==0:
  faseLetter=chr(randint(65,90))
  word[0]=faseLetter
  voc=['A','E','O','U','Y','I']
for i in range (letterNum+1):
  firstLetter=word[letterNum]
  randomChangeMaker=randint(1,2)
  if firstLetter in ['A','E','O','U','Y','I']:
    faseLetter=chr(randint((66,68),(70,72),(74,78),(80,88),(90)))
    if faseLetter == 'W' and randomChangeMaker == 2:
      faseLetter='V'
  else:
    faseLetter=chr(randint(65,90))
    if faseLetter == 'E' and randomChangeMaker == 2:
      faseLetter='3'
    elif faseLetter == 'A' and randomChangeMaker == 2:
      faseLetter='4'
    elif faseLetter == 'O' and randomChangeMaker == 2:
     faseLetter='0'
    elif faseLetter == 'V' and randomChangeMaker == 2:
      faseLetter='W'
    elif faseLetter == 'W' and randomChangeMaker == 2:
      faseLetter='V'
    elif faseLetter == 'I' and randomChangeMaker == 2:
      faseLetter='2'
  word=word+faseLetter
print(word)

那是我的代碼,我收到了這個錯誤(我正在使用 replit.com 編輯器)

回溯(最近調用最后):文件“main.py”,第 10 行,在 word[0]=faseLetter IndexError 中:列表分配索引超出范圍

您的問題可以簡化為

>>> word = []
>>> word[0] = 1
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list assignment index out of range

來自可變序列類型

s[i] = x      item i of s is replaced by x

這里的關鍵是“替換”。 該項目必須存在才能被替換。 相反,您可以撥打 append

word.append(1)

嗯, word是空的,所以你不能給它的第零個成員分配任何東西,因為沒有這樣的成員。 (JavaScript 可能會讓你這樣做,但那對你來說是 JavaScript,嗯?)

任何一個:

  1. word.append(faseLetter)到空列表而不是word[0] = faseLetter ,所以它變成一個長度為 1 的列表
  2. 使用“假”第零個成員初始化word ,即word = [None]而不是word = [] ,這樣您就可以分配給第零個成員。

數組字的長度是多少? 參考第 10 行,你說 word[0]=faseletter.. 但由於你沒有啟動數組字長,所以你不能這樣做。 在這種情況下,您必須使用 append。

弄清楚這些。

letterNum被分配了一個介於 4 到 8 之間的值。

word.append(faseLetter)第 0個索引處附加一個字母。

for 循環firstLetter=word[letterNum] (考慮到 letterNum 在 4-8 之間)它總是會給出錯誤,因為列表單詞的長度只是一個,而word[letterNum]試圖獲取元素形式的索引,它不會退出。

faseLetter=chr(randint((66,68),(70,72),(74,78),(80,88),(90)))

會報錯如下

randint() 取 3 個位置 arguments 但給出了 6 個

因為

random.randint 只需要兩個 arguments,一個開始和一個結束。 Python提到的第三個參數是self,它是自動完成的。

暫無
暫無

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

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