在随机生成程序中列出索引超出范围

时间:2016-06-01 19:40:03

标签: python list

我正在开发一个随机的程序 列表中的单词并将它们组合成一个句子 但我一直收到错误:

  File "test2.py", line 13, in generater
    print list[z+2] ,
IndexError: list index out of range

这是我的代码:

def generater():
    list = ["naji", "gaming", "gameplay", "start", "stuped", "awesome", "fast", "new", "racing", "shoting", "cool", "super"]
    from random import randint 
    x = randint(0,11)
    print list[x] ,
    y = randint(0,11)
    if y == x and y != 0 :
        print list[y-1] ,
    else :
        print list[y] , 
    z = randint(0,11) 
    if z == x or z == y and z < 8 :
        print list[z+2] ,
    elif z == x or z == y and z > 9 :
        print list[z-5]
    else :
        print list[z]
generater() 

2 个答案:

答案 0 :(得分:2)

您的列表包含12个项目,因此有效索引范围为0到11.

您的rand生成器返回0到10之间的值。

10 + 2超过11 - 所以你试图访问列表末尾的列表索引。

答案 1 :(得分:2)

问题出在你的陈述中

if z == x or z == y and z < 8:

尝试将括号括起来(z == x或z == y)。如果z == x,您的程序不能确保z&lt; 8.您可以输入

进行测试
if 1 or 1 and 0:
    print('TRUE!')

并将输出与

进行比较
if (1 or 1) and 0:
    print('TRUE!')

简而言之,你说“a或(b和c)”,但你想表达“(a或b)和c。”

我不确定我是否理解你的程序的目的,但只要你保证你的z值小于8,你就不应该超出范围。