在另一个函数中使用一个函数的变量(参数'dice'未填充)

时间:2014-11-25 00:10:32

标签: python random

嗨,我试图创建一个游戏,计算机在1到6之间生成5个随机数。但我的问题是我创建了一个列表,它将获得' 1'在各自的部分取决于出现的数字。例如如果计算机生成31534,则列表需要显示[1,0,2,1,1,0](因为它有两个3'它在3个插槽中填充2)它只显示5个随机数而没有其他

from random import randint

def rollDice():

    dice = [str(randint(1, 6)) for _ in range(5)]
    print(dice)
    return dice

#-----------------------------------------------------------------

def countVals(dice):

    totals = [0, 0, 0, 0, 0]
    for x in dice:
        if x == 1:
            totals = totals[1] + 1
        elif x == 2:
            totals = totals[2] + 1
        elif x == 3:
            totals = totals[3] + 1
        elif x == 4:
            totals = totals[4] + 1
        elif x == 5:
            totals = totals[5] + 1

            print(totals)
            return totals

#------------------------------------------------------------------

rollDice()
countVals()

3 个答案:

答案 0 :(得分:1)

我相信当你增加每个数字的计数时,你的错误就在于

totals = totals[1] + 1

应该是,

totals[1] = totals[1] + 1

此外,根据您的应用程序,您可以简化代码

def countVals(dice):

    totals = [0, 0, 0, 0, 0]
    for x in dice:
        totals[x - 1] += 1
    print (totals)
    return totals

答案 1 :(得分:0)

您可以尝试以下方法:

dice = rollDice()
countVals(dice)

您还要修复printreturncountVals()语句的缩进。目前,它们仅在x==5时触发。正如萨尔瓦多·达利所提到的,要么从str移除rollDice(),要么将countVals()中的比较更改为x == '1'等。


编辑:

以下是您可能希望编写脚本的方法:

def rollDice():
    dice = [randint(1, 6) for _ in range(5)]
    print(dice)
    return dice

def countVals(dice):
    totals = [0, 0, 0, 0, 0]
    for x in dice:
        # x can be, 1-5.  Index of totals can be 0-4.
        totals[x-1] += 1

        print(totals)
        return totals

dice = rollDice()
countVals(dice)

答案 2 :(得分:0)

我认为问题是rollDice函数返回的结果是一个字符串列表。然后,countVals中的if - else语句会导致例如'5' == 5 -> False。您可以修改rollDice以返回int的列表(不要将int转换为字符串):

def rollDice():

    dice = [randint(1, 6) for _ in range(5)]
    print(dice)
    return dice

如果你绝对希望rollDice返回一个字符串列表,你可以使用countVals方法中的int方法将字符串转换为整数。示例:int('5') -> 5,或者仅比较字符串而不是整数。 x == '5'

还要确保将总计保存回总计列表中的正确索引(在rollDice中)。您可以更简洁地执行此操作,如下所示:totals[1] += 1,例如:

def countVals(dice):

    totals = [0, 0, 0, 0, 0, 0] #alternatively could be 'totals = [0]*6' :)
    for value in dice:
        totals[value - 1] += 1

    print(totals)
    return totals

(假设已修改rollDice以返回整数列表)

您应该可以按以下方式调用方法totals = countVals(rollDice())来获取总计列表。