【问题标题】:'int' object is not callable while calling a function调用函数时“int”对象不可调用
【发布时间】:2012-11-04 14:29:49
【问题描述】:

我是一名业余程序员,正在开发控制台掷骰子,比传统的掷骰子要复杂得多。到目前为止,我在使用此功能时遇到了问题:

  def multiRoll(dice, amount):
        total = 0
        rolls = []
    for roll in range(amount):
        rolls += roll(dice)
    total = sum(rolls)
    return total, rolls

意味着从描述骰子种类(4、6、8 面等)的字典中获取单个条目及其索引和掷骰子的次数。然后它会根据需要尽可能多地掷骰子,然后将每个结果添加到一个列表中,稍后汇总。

但显然通量出了问题,当它到达这条线时:

        rolls += roll(dice)

我得到 'int' 对象不可调用

请告诉我如何克服这个问题?

如果您对 roll() 函数有任何疑问,请点击此处:

def roll(dice):
    if dice < 1:
            print "I found a problem when trying to roll a d%d" % (dice)
            return "Failed"
    else:
            return randrange(1, dice)

【问题讨论】:

    标签: python int callable dice


    【解决方案1】:
    for roll in range(amount):
            rolls += roll(dice)
    

    roll(dice) 没有使用您的函数,而是使用您的for 循环的roll 变量。您应该将循环的变量更改为:

    for number in range(amount):
        rolls += roll(dice) 
    

    或者类似的东西。

    【讨论】:

    • 非常感谢;你们的速度非常快:D
    • @gcarbonell 不客气。不要忘记接受答案;)
    • 好吧,我猜这个网站是怎么运作的,呵呵。再次感谢各位。这很快。
    【解决方案2】:

    您已将roll 重新分配到

    for roll in range(amount):
            rolls += roll(dice)
    

    用另一个变量名替换它:

    for r in range(amount):
            rolls += roll(dice)
    

    【讨论】:

    • 附带说明,下划线(_) 通常用于此类“垃圾”变量。或者,您可以使用更明确的名称来命名它,例如“junk”、“not_used”,或者在本例中为“time”(回忆“for x time(s)”)。 [注意:如果你使用gettext,使用_可能不是一个好主意]
    • 非常感谢;你们的速度非常快:D
    • @Bakuriu 是的,但是下划线tends to confuse programmers new to Python,所以我把它省略了
    【解决方案3】:

    在这一行:

    for roll in range(amount):
        rolls += roll(dice)
    

    您正在创建一个名为 roll 的局部变量,它会覆盖您在程序中定义的函数 roll
    您需要做的是更改函数名称或局部变量名称,以使它们不相同。

    【讨论】:

    • 非常感谢;你们的速度非常快:D
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-29
    • 2014-03-17
    • 1970-01-01
    • 2022-11-28
    • 2020-06-27
    • 2020-09-11
    • 2015-12-19
    相关资源
    最近更新 更多