Python代码运行报IndexError: list assignment index out of range错误问询
报错根因
你初始化的word是没有任何元素的空列表,Python不允许对列表不存在的索引位置直接赋值,你写的word[0]=faseLetter试图给空列表的第0位赋值,自然就触发了IndexError: list assignment index out of range报错。
其他代码问题
除了这个报错点,你的代码还有多处逻辑和语法错误:
randint只接收2个整数参数(起始值、结束值),你代码里chr(randint((66,68),(70,72),(74,78),(80,88),(90)))的传参方式完全不符合语法要求- 循环内第一行
firstLetter=word[letterNum],letterNum取值是4~8,而循环刚开始的时候word只有1个元素,访问不存在的索引会再次触发越界报错 - 列表不能直接和字符串拼接,
word=word+faseLetter写法错误,要么用word.append(faseLetter),要么写成word = word + [faseLetter]
修正后可用代码
#all leter are MAG #E->3 A->4 O->0 V->W I->2 #rand ASCII with ch from random import randint, choice letterNum=randint(4,8) word=[] if len(word)==0: faseLetter=chr(randint(65,90)) # 替换索引赋值为append添加元素 word.append(faseLetter) voc=['A','E','O','U','Y','I'] for i in range(letterNum): # 取当前列表最后一个元素作为判断依据 firstLetter=word[-1] randomChangeMaker=randint(1,2) if firstLetter in voc: # 随机选非元音的大写字母 consonants = [c for c in range(65,91) if chr(c) not in voc] faseLetter=chr(choice(consonants)) 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.append(faseLetter) # 把列表转成字符串输出 print(''.join(word))
内容的提问来源于stack exchange,提问作者kiRaKilL
相关产品推荐
相关产品推荐

