我编写了一些代码,以找到在任意数字n下计数到1的最小事件数。
class Solution(object):
def __init__(self):
events=0
def integerReplacement(self, n):
"""
:type n: int
:rtype: int
"""
if n==1 or not n:
return self.events
if n%2==0:
self.events=self.events+1
self.integerReplacement(self,n/2)
else:
self.events=self.events+1
self.integerReplacement(self,(n-1)/2)
return self.events
def stringToInt(input):
return int(input)
def intToString(input):
if input is None:
input = 0
return str(input)
def main():
import sys
def readlines():
for line in sys.stdin:
yield line.strip('\n')
lines = readlines()
while True:
try:
line = lines.next()
n = stringToInt(line)
ret = Solution().integerReplacement(n)
out = intToString(ret)
print out
except StopIteration:
break
if __name__ == '__main__':
main()
我得到的错误是
Finished in N/A
AttributeError: 'Solution' object has no attribute 'events'
Line 12 in integerReplacement (Solution.py)
Line 38 in main (Solution.py)
Line 46 in <module> (Solution.py)
我不知道为什么它不能识别我在初始化函数中声明的事件变量。我在做什么错了?
答案 0 :(得分:1)
它必须是实例变量self
的属性,因此请更改:
events=0
收件人:
self.events=0
答案 1 :(得分:1)
正如Cireo所说,您需要使用:
self.events = 0
self告诉python声明的变量必须是整个类都可以访问的。否则,只能在__init__函数的本地范围内访问它。换句话说,event和self.event是两个单独的变量。
或者,如果出于任何原因要使用events = 0,则要将其设为类属性,则当前代码将起作用。为此,请删除__init__函数,然后声明变量:
class Solution(object):
event = 0
# The rest of your code