繁体   English   中英

掷骰子程序-TypeError:列表索引必须是整数,而不是列表

[英]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函数中将该列表更改为intstr ,但似乎无济于事。 也许我会以错误的方式解决这个问题? 这是到目前为止我在该区域的代码:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM