2017-07-25 125 views
0

我试图运行该程序时,出现IndexError:list assignment index超出范围错误。我的索引看起来很好(从0到8),我不认为.append是需要的,因为等号每次传递随机值。我错过了什么?在python中生成随机整数列表3

import random 

#The main function. 
def main(): 

    #Welcome message. 
    print("Welcome to the lottery number generator program!") 
    print() 

    #Explain what the program does. 
    print("Note: This program will randomly generate a 7 digit lottery number and display it to the screen. ") 
    print("________________________________________________________________________________________________") 
    print() 
    print() 

    #Call the generateNumbers function and store its returned list in variable lotteryNumbers. 
    lotteryNumbers = generateNumbers() 

    #Call the printLottery function and pass the lotteryNumbers list as argument. 
    printLottery(lotteryNumbers) 


#The generateNumbers function generated 7 random digits between 0 and 9 stores them in a list and returns the list. 
def generateNumbers(): 

    #A list variable to hold empty list. 
    lotteryNumbers = [] 

    #Declare and set loop counter to 0. 
    index = 0 

    for index in range (0,8): 
    lotteryNumbers[index] = random.randrange(0,10) 
    index += 1 
    return lotteryNumbers 


def printLottery(lotteryNumbers): 
    print("Here are the 7 lucky numbers: {}".format(lotteryNumbers)) 

#End main 
main() 
+1

您不能分配一个列表dinamically,你需要预先分配,如果你w蚂蚁通过切片来访问它的元素。你需要使用append – gionni

+0

'index + = 1'不是必需的。相反: – fredtantini

+1

:追加是需要的! – dnalow

回答

0

添加元素阵列通过初始化列表与

lotteryNumbers = [] 

它正好有0个元素。但与

lotteryNumbers[index] = random.randrange(0,10) 

您尝试访问列表的第1,第2,..,第n个元素。您的代码不会将元素插入列表中。为了避免这种情况,有许多方法。

  • 创建一个字典,而不是一个列表。一个字典实际上创建了不存在的元素:lotteryNumbers = {}
  • 预初始化列表中有8个要素:
    • lotteryNumbers = [0,0,0,0,0,0,0,0]
    • lotteryNumbers = list(range(8))
  • 但最最好的变体应使用附加: lotteryNumbers.append(random.randrange(0,10))
3

列表不像其他语言的数组!

lotteryNumbers被初始化为空列表。没有什么。它的长度是零。您需要将random.randrange(0, 10)添加到空白列表中。这是通过.append()

0

做你应该append新值:

def generateNumbers(): 

    #A list variable to hold empty list. 
    lotteryNumbers = [] 

    #Declare and set loop counter to 0. 
    index = 0 

    for _ in range (0,8): 
    lotteryNumbers.append(random.randrange(0,10)) 
    return lotteryNumbers 

或建立清单给你想要的大小:

def generateNumbers(): 

    #A list variable to hold empty list. 
    lotteryNumbers = [0]*8 

    #Declare and set loop counter to 0. 
    index = 0 

    for index in range (0,8): 
    lotteryNumbers[index] = random.randrange(0,10) 
    return lotteryNumbers 

还要注意你不啃老族递增指数,你已经在遍历范围了。

3
for index in range (0,8): 
    lotteryNumbers[index] = random.randrange(0,10) 
    index += 1 

这不符合你希望的。您不能将值分配给当前不存在于列表中的位置,并且该列表当前为空,这意味着您根本无法完成此操作。

你想要的是:

for index in range (0,8): 
    lotteryNumbers.append(random.randrange(0,10)) 

为你诠释的for循环不需要index += 1因为Python处理此。


顺便说一句,彩票一般都是挑选不换,所以难道你真的不想抽样吗?

https://docs.python.org/2/library/random.html#random.sample

如:

lotteryNumbers = random.sample(xrange(10), 7) 

虽然这也是正常的彩票有远远超过10个选项!

0

您正试图访问列表中不存在的元素。

要建立您的清单,你可以保留追加到它与list.append()

lotteryNumbers = [] 
for _ in range(8): 
    lotteryNumbers.append(random.randrange(0,10)) 

,或者因为它在Python中很常见,使用list comprehension

lotteryNumbers = [random.randrange(0,10) for _ in range(8)] 

通常是更有效简洁。

0

我认为你尝试像

lotteryNumbers = [0,0,0,0,0,0,0]