[英]Roll dice program - TypeError: list indices must be integers, not list
我正在编写一个程序,该程序可以掷出任意数量的骰子,带有任意数量的边,可以掷任意次数。 我陷入了将骰子掷骰多次的函数中,然后用掷骰替换列表中的零。 我不断在rolls[rv]+=1
上遇到错误:
TypeError: list indices must be integers, not list
我发送给rolls的ctrList
函数确实返回了一个列表,并且我尝试在rollSim
函数中将该列表更改为int
或str
,但似乎无济于事。 也许我会以错误的方式解决这个问题? 这是到目前为止我在该区域的代码:
numDice=int(input("How many dice do you want to roll? "))
numSides=int(input("How many Sides does each have? "))
numRolls=int(input("How many times do you want to roll the dice? "))
def ctrList(numSides, numDice): #Function that seeds list with all zeros
L=[]
ctr=0
possible= ((numSides * numDice)+1)
for p in range (possible):
ctr+=1
L.append(0)
return L
def rollSim(numDice, numSides, numRolls, rollDice):
rolls=ctrList(numSides, numDice)
for i in range (numRolls):
rv= rollDice(numDice, numSides )
rolls[rv]+=1 #where I keep on getting the error at :(
return rolls
def rollDice(numDice, numSides ): #Function that rolls dice
L=[]
ctr=0
for dice in range (numDice):
L.append (random.randint(1, numSides))
ctr+=1
return L
似乎不是:
for i in range (numRolls):
rv= rollDice(numDice, numSides )
rolls[rv]+=1 #where I keep on getting the error at :(
你需要:
for i in range (numRolls):
rv = rollDice(numDice, numSides)
for dice in rv:
rolls[dice] += 1
您的rollDice
返回numDice
骰子(一个list
)的结果。 然后,您尝试用另一个列表为rolls
列表建立索引,这没有任何意义(这就是错误的确切含义)。
您还可以更改方法,只返回一个骰子的一个结果:
def rollDice(numSides):
return random.randint(1, numSides)
因此,您的计数代码版本将起作用。 取决于您想要什么。
您的rollDice函数返回一个列表,因此当您执行
rv = rollDice(numDice, numSides)
您为rv分配一个列表。 您不能从那里开始rolls [rv],rv必须是一个int。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.