TypeError:'int'对象不可调用-问题

时间:2019-08-29 20:29:19

标签: python-3.x

我不断收到类型错误。它会在第一次打印时正确打印,然后无法打印第二轮。

我尝试进行更改,但出现了更多错误

class reflex_vacuum():

  global count


  def count(pos, l, r):
    global count
    global p 
    global left
    global right
    p = pos
    left = l 
    right = r 


    count = 0 

    def clean(pos, l, r):
      global p 
      global left
      global right

      if pos == 'left':
        if l == 1:
          l=0
        pos = 'right'

      else:
        if r == 1:
          r=0
        pos = 'left'
      p = pos
      left = l 
      right = r  

    while left==1 or right==1:
      clean(p, left, right)
      count=count+1 
    print (count)

  def scale(sum):
    global count
    s = 10 - (count/sum)
    print ('The score is ' + str(s) + ' out of 10.')


  print('This program checks the efficiency of the vacuum depending on the vacuum position and dirt placement. The scale is 10 points. each move deducts a point. If move was made with dirt on both sides (thus move was necessary) then the move count is divided by two. \n')    
  print('Starting left with no dirt')
  count('left', 0, 0)
  scale(2)

  print('\nStarting right with no dirt')
  count('right', 0, 0)
  scale(1)

  print('\nStarting left with dirt left')
  count('left', 1, 0)
  scale(1)

我只需要它给我不同组合的输出

1 个答案:

答案 0 :(得分:0)

问题是您在两种不同类型的事物中使用相同的名称。您有一个名为'count'的全局变量,该变量存储一个整数,并且您有一个名为'count'的类方法。在第48行上,首次调用sympy时,解释器将该符号解析为方法count("left", 0, 0),因为它是存在的count()的唯一定义。在执行该方法期间,您执行count,这将覆盖符号,将其从方法更改为整数。然后,在count=count+1返回之后,您尝试调用count("left", 0, 0),但是现在全局符号count("right", 0, 0)不再是方法,而是一个整数,并且您无法将其作为方法。这将导致以下跟踪:

count

追溯是非常有价值的事情。通过运行您的代码并查看该代码,我能够立即看到它引发错误时试图执行的操作,并且这告诉我,即使您有一个名为的方法,解释器仍认为Traceback (most recent call last): File "tmp.py", line 1, in <module> class reflex_vacuum(): File "tmp.py", line 53, in reflex_vacuum count('right', 0, 0) TypeError: 'int' object is not callable 是一个整数。 count

那么您如何解决呢?嗯,有两种选择。最简单的方法是重命名方法count或全局变量count(),以便它们不共享相同的名称。

但是,我敦促您花一些时间来学习有关python变量和类的正确作用域的知识,以便您根本不需要使用count关键字。这样实际上可以同时具有一个名为count的方法和一个名为count的变量,但是如果您使用global将它们绑在一起,则不可能。