2016-06-28 25 views
-2

有时候这段代码工作得很好并且可以遍历,但有时会抛出int对象而不是可调用错误。我不确定它为什么这样做。'int'对象不可调用,只能随机出现

for ship in ships: 
    vert_or_horz = randint(0,100) % 2 
    for size in range(ship.size): 
     if size == 0: 
      ship.location.append((random_row(board),random_col(board))) 
     else: 
      # This is the horizontal placing 
      if vert_or_horz != 0 and ship.size > 1: 
       ship.location.append((ship.location[0][0], \ 
             ship.location[0][1] + size)) 
       while(ship.location[size][1] > len(board[0])) or \ 
        (ship.location[size][1] < 0): 
        if ship.location[size][1] > len(board[0]): 

         ship.location[size][1]((ship.location[0][0], \ 
               ship.location[0][1] - size)) 
        if ship.location[size][1] < 0: 
         ship.location[size][1]((ship.location[0][0], \ 
              ship.location[0][1] + size)) 

      # This is the vertical placing 
      if vert_or_horz == 0 and ship.size > 1: 
       ship.location.append((ship.location[0][0] + size, \ 
             ship.location[0][1])) 
       while(ship.location[size][1] > len(board[0])) or \ 
        (ship.location[size][1] < 0): 
        if ship.location[size][1] > len(board[0]): 
         ship.location[size][1] \ 
          ((ship.location[0][0] - size, \ 
           ship.location[0][1])) 
        if ship.location[size][1] < 0: 
         ship.location[size][1] \ 
          ((ship.location[0][0] + size, \ 
           ship.location[0][1])) 

这里是回溯:

Traceback (most recent call last): 
    File "python", line 217, in <module> 
    File "python", line 124, in create_med_game 
    ship.location[size][1]((ship.location[0][0], \ 
TypeError: 'int' object is not callable 
+0

你能后的错误回溯?此外,有些东西必须改变,以便有时出现,而不是其他人。 – Jeff

+0

鉴于您正在使用'random'在您的代码中作出决定,错误出现随机并不奇怪。请在您的问题中包含错误的*完整回溯*。没有这个问题不能很容易地回答,因为你要求我们手动梳理你的代码,以找出可能的错误原因。 –

+2

我的第一个怀疑是它与这样的线有关:'ship.location [size] [1]((ship.location [0] [0],ship.location [0] [1] + size) )'。如果'ship.location [size] [1]'是一个int类型,它将导致类似的错误。 – 0x5453

回答

0

您试图呼吁这里的整数(使用..(...)语法):

ship.location[size][1]((ship.location[0][0], \ 
         ship.location[0][1] - size)) 

ship.location[size][1]是一个整数,而你试图通过传入元组(ship.location[0][0], ship.location[0][1] - size)作为参数来调用它。

你的代码在多个地方犯这个错误;其他的例子包括

ship.location[size][1]((ship.location[0][0], \ 
        ship.location[0][1] + size)) 

ship.location[size][1] \ 
    ((ship.location[0][0] - size, \ 
     ship.location[0][1])) 

ship.location[size][1] \ 
    ((ship.location[0][0] + size, \ 
     ship.location[0][1])) 

还有加入了物理线路成一个逻辑行,所以(...)电话仍适用于整数反斜杠。

但是,我不清楚你想用这种表达方式做什么,但是,我不能在这里提供任何补救措施。

+0

好的,我会解释一下逻辑。它基本上是一艘战舰游戏。我试图随机将这些船放在一个10×10的网格上。该代码用于处理将一艘船的所有部件水平或垂直放置的需求。我所关注的特定行中的逻辑是用不同的连续坐标覆盖放置在电路板边界之外的任何坐标。希望有助于 – Brodie

+0

@BrodieMather:所以你想使用两个值中较低或较高的值?然后使用赋值并调用'min()'或'max()'。 –

+0

如果它高于板的最大值,那么我需要停止放置在起点右侧的坐标,并开始将它们放置在船的左侧。那有意义吗? – Brodie

0

在任何部位,其中的代码如下所示:

ship.location[size][1]((ship.location[0][0], \ 
       ship.location[0][1] - size)) 

简单的解决方案是,我需要将其分配到的位置:

ship.location[size] = ((ship.location[0][0],ship.location[0][1] - size))