在python中生成随机整数列表3
问题描述:
我试图运行该程序时,出现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()
答
添加元素阵列通过初始化列表与
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))
答
列表不像其他语言的数组!
lotteryNumbers
被初始化为空列表。没有什么。它的长度是零。您需要将random.randrange(0, 10)
添加到空白列表中。这是通过.append()
答
做你应该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
还要注意你不啃老族递增指数,你已经在遍历范围了。
答
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个选项!
答
您正试图访问列表中不存在的元素。
要建立您的清单,你可以保留追加到它与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)]
通常是更有效简洁。
答
我认为你尝试像
lotteryNumbers = [0,0,0,0,0,0,0]
您不能分配一个列表dinamically,你需要预先分配,如果你w蚂蚁通过切片来访问它的元素。你需要使用append – gionni
'index + = 1'不是必需的。相反: – fredtantini
:追加是需要的! – dnalow