Python-unsupported operand type(s) for %: 'builtin_function_or_method' and 'int'

dakulaDL發表於2020-03-23
numbers = [ 12 , 37 , 5 , 42 , 8 , 6 , 7 , 39 , 72 , 68 ]
even = []
odd = []
while   len (numbers) >  0  : 
      number = numbers.pop
       if (number %  2  ==  0 ):
          even.append(number)
       else :
          odd.append(number)
print ( '單數有:' ,odd)
print ( '雙數有:' ,even)

今天在python 3中測試上面的程式碼,報錯    if(number % 2 == 0):
TypeError: unsupported operand type(s) for %: 'builtin_function_or_method' and 'int'

開始考慮可能number是保留字,導致識別成內部的方法,網上也有類似的例子


#-*- coding : utf-8 -*-
i = 0
while i <= 100:
               sum += i
               i += 1
print(sum)

sum沒有定義,導致同樣的錯誤,TypeError: unsupported operand type(s) for %: 'builtin_function_or_method' and 'int',我的例子中新增了number=0還是抱相同的錯誤,讓我開始考慮這並不是相同的問題,從錯誤出發,程式碼把number識別成一個內部的方法,向上找到number的賦值-number=numbers.pop,發現問題出現在pop後面沒有括號,如果沒有()表示把pop方法賦值給number,而不是把返回值給number,導致程式碼認為number是一個內部方法,不能做%運算,修改後執行正常。


numbers = [ 12 , 37 , 5 , 42 , 8 , 6 , 7 , 39 , 72 , 68 ]
even = []
odd = []
while   len (numbers) >  0  : 
      number = numbers.pop()
       if (number %  2  ==  0 ):
          even.append(number)
       else :
          odd.append(number)
print ( '單數有:' ,odd)
print ( '雙數有:' ,even)



PythonCode/test.py
單數有: [39, 7, 5, 37]
雙數有: [68, 72, 6, 8, 42, 12]


注:pop() 函式用於移除列表中的一個元素(預設從最後一個元素開始),並且返回該元素的值

       python3裡面有很多類似的細節問題,感覺還是要從初始錯誤的描述開始,另外養成正確的程式設計習慣也很重要,尤其是  從python2過度到python3的使用者。








來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/11289933/viewspace-2682039/,如需轉載,請註明出處,否則將追究法律責任。

相關文章