【发布时间】:2016-08-17 00:51:21
【问题描述】:
我有密码
num = 1
num2 = 1
num3 = 1
list = []
list2 = []
list3 = []
def numCheck1 (num):
while num<1001:
if (num%3==0):
if (num%5==0):
print num
list.append(num)
num+=1
numCheck1(num)
break
else:
print "error 1"
else:
print "error 2"
num+=1
numCheck1(num)
total=sum(list)
print list
print total
def numCheck2 (num2):
while num2<1001:
if (num2%5==0):
print num2
list2.append(num2)
num2+=1
numCheck1(num2)
break
else:
print "error"
numCheck2(num2)
def numCheck3 (num3):
while num3<1001:
if (num3%3==0):
print num3
list3.append(num3)
num3+=1
numCheck1(num3)
break
else:
print "error"
numCheck3(num3)
total2 = sum(list2)
total3 = sum(list3)
overall = (total2 + total3) - total
print list2
print list3
print total2
print total3
print overall
作为我的代码的基本摘要,我有 3 个函数,以及每个函数对应的列表和变量。第一个函数检查小于等于 1000 的 3 和 5 的所有倍数。第二个函数检查小于等于 1000 的所有 5 的倍数。第三个函数检查小于等于 1000 的 3 的所有倍数。是倍数的数字被添加到相应的列表中,而相应的变量递增以允许函数检查所有数字。最后,程序计算 4 个总数:每个列表的总数,以及一个特殊总数,它将后两个总数相加并减去第一个总数,以防止过度计数。这只是程序的总体结构。
这个程序应该解决this problem(不是作业,只是好玩)。代码正在工作(据我所知;第一个函数肯定有效)但它不断使编译器崩溃(我正在使用在线编译器,repl。我想知道是否有任何方法可以使这段代码更高效。
谢谢!
【问题讨论】:
-
我认为你达到了最大堆栈递归深度,为什么你使用递归函数?
while足以满足此目的 -
一目了然:您似乎是从内部呼叫
numCheck1。另外,不要将变量分配给名称list(或str,或其他任何保留的名称)。最后,这里有很多违反 Python 风格的元素,例如空格和括号的使用 - 查看 PEP8 了解更多信息。 -
永远不要使用
list作为变量名。 -
@Alexander,为什么不呢?
-
list是python中的保留字,例如列表((1, 2, 3))
标签: python performance