所以我试图在Python3.6中完成一些项目Euler挑战,并且我遇到了这个问题:
def divisors(n):
divisors = []
for i in range(2, round(n/2)+1):
if n%i == 0:
divisors.append(int(n/i))
divisors.append(1)
return sum(divisors)
def checkAmicable(n):
if divisors(divisors(n)) == n:
if divisors(n) != n:
return True
else:
return False
def main():
amicables = []
for i in range(1,20000):
if checkAmicable(i) == True:
if (divisors(i)+i) not in amicables and divisors(i)<10000:
amicables.append(divisors(i)+i)
print(sum(amicables))
main()
这是我对问题21(euler21.py)的解决方案,它可以工作并给出所要求的友好对的总和。我希望能够导入函数&#34; divisors(n)&#34;到另一个代码文件(在这种情况下是euler23.py)。
根据我的理解,这应该有效:
from euler21 import divisors
print(divisors(220))
这应该只是打印284,但是,执行它时,整个euler21代码执行,我得到该程序的结果,加上最后的284,如下所示:
31626
284
有什么建议吗?可能是因为我使用命令行而不是IDE?
TL; DR:导入的文件执行整个代码,而不是专门调用的函数。
答案 0 :(得分:1)
导入时,执行代码以调用main()
。使用以下内容:
if __name__ == '__main__':
main()
这将阻止main()
在导入时执行
user@PC:~$ cat ./tester.py
def test():
print('TEST FUNCTION')
if __name__ == '__main__':
test()
user@PC:~$ python ./tester.py
TEST FUNCTION
user@PC:~$ python
>>> from tester import *
>>> test()
TEST FUNCTION
>>>