Python 用于计算从零到999的所有数字之和的程序,产生一致的结果
下面是python代码,该代码试图使用找到的算术级数方程找到所有值除以特定数字的总和 该程序只会在极少数时间内产生不正确的输出,每次都会以完全相同的数量关闭相同的数字 样本输出 格式:首先,它是一个数字,我们试图找到0-999之间的所有数字的总和,可以被它整除。接下来,是蛮力答案,然后是我的尝试,最后是两个答案之间的差异 错误:7)correctAnswer=71071!=testAnswer=71000正确答案testAnswer=71 错误:11)correctAnswer=45045!=testAnswer=45000正确答案testAnswer=45 错误:13)correctAnswer=38038!=testAnswer=38000正确答案testAnswer=38 错误:15)correctAnswer=33165!=testAnswer=33132更正回答testAnswer=33 错误:17)correctAnswer=29087!=testAnswer=29058正确答案testAnswer=29 错误:19)correctAnswer=26182!=testAnswer=26156正确答案testAnswer=26 错误:29)correctAnswer=17255!=testAnswer=17238正确答案testAnswer=17 错误:31)correctAnswer=16368!=testAnswer=16352正确答案testAnswer=16 错误:33)correctAnswer=15345!=testAnswer=15330正确答案testAnswer=15 错误:35)correctAnswer=14210!=testAnswer=14196正确答案testAnswer=14 错误:41)correctAnswer=12300!=testAnswer=12288正确答案testAnswer=12 错误:45)correctAnswer=11385!=testAnswer=11374正确答案testAnswer=11 错误:49)correctAnswer=10290!=testAnswer=10280正确答案testAnswer=10 错误:53)correctAnswer=9063!=testAnswer=9054正确答案testAnswer=9 错误:55)correctAnswer=9405!=testAnswer=9396正确答案testAnswer=9 列表还在继续,但请注意这两个答案之间的差异是如何缩小的。错误最终在499处消失,换言之,在499之后程序工作正常 代码在这一段之后,已经有了完整的文档,应该可以将粘贴复制到IDE中并运行了。在这一点上,这些问题要么是 由于herp带有derp(轻微错误)或对语言的误解而导致。提前感谢您的帮助 “”“SumDivisibleby返回 可除数的数列 首先按参数的值 参数: first-指定第一个值的整数 常数差的算术级数 等于first的值 last-指定最后一个值的整数 常数差的算术级数 等于first的值 nTerms-一个整数,指定术语的数量 在常数差的算术级数中 等于第一个的值“” def SUMDIVISIBILEBY(第一个、最后一个、第三个): 返回nTerms*((第一个+最后一个)/2) “”“nthTerm查找单个术语。” 在算术级数中 常差等于 第一价值 参数: first-指定第一个值的整数 常数差的算术级数 等于first的值 nTerms-一个整数,指定术语的数量 在常数差的算术级数中 等于first的值 cDiff-表示常数差的整数 一个算术级数,在这里以防它不同 从第一的价值 “”“ determineN查找 一个特殊的算术数列 本来 first-一个整数,指定 其常数差的算术级数的第一个值 等于first的值 max-指定可能的最大值的整数 算术序列中允许的值 cDiff-表示常数差的整数 一个算术级数,在这里以防它不同 从第一的价值 “”“ “”“testSumDivisibleBy是的测试驱动程序 上述三个功能Python 用于计算从零到999的所有数字之和的程序,产生一致的结果,python,math,Python,Math,下面是python代码,该代码试图使用找到的算术级数方程找到所有值除以特定数字的总和 该程序只会在极少数时间内产生不正确的输出,每次都会以完全相同的数量关闭相同的数字 样本输出 格式:首先,它是一个数字,我们试图找到0-999之间的所有数字的总和,可以被它整除。接下来,是蛮力答案,然后是我的尝试,最后是两个答案之间的差异 错误:7)correctAnswer=71071!=testAnswer=71000正确答案testAnswer=71 错误:11)correctAnswer=45045!=t
您遇到了整数除法和运算顺序的问题。删除括号以更改此函数:
def SumDivisibleby(first,last,nTerms): return nTerms * ((first + last)/2);
为此:
def SumDivisibleby(first,last,nTerms): return nTerms * (first + last)/2;
编辑:作为一个问题的例子,考虑计算5+10+15+20之和(4项级数增加5s)。这等于50,应该由SumDivisibleBy(5,20,4)给出。但是您的版本给出了48。
您应该尝试格式化您的代码,以便我们可以读取或运行它。并了解DocString在Python中的工作原理(提示:它们包含在函数中)。对于更好的格式,您有何建议?#This value is the chosen upper bound
#for the arithmetic series
chosenMax = 999
def testSumDivisibleBy ():
for i in range(1,2000000):
#Attempting to find the sum of all values divisible by i
numberOfTerms = determineN(i, chosenMax , i)
lastTerm = nthTerm(i, numberOfTerms, i)
testAnswer = SumDivisibleby(i,lastTerm,numberOfTerms)
#This is a brute force solution to the same problem
#that SumDivisibleBy() tries to solve
correctAnswer = 0
for j in range(0,chosenMax +1,i):
correctAnswer+=j
#This prompts the user when a discrepancy has come
#up and displays debug text
if(testAnswer != correctAnswer):
print "ERROR: " + repr(i) + ") correctAnswer = " + \
repr(correctAnswer) + " != testAnswer = " + \
repr(testAnswer) + " correctAnswer-testAnswer = " + \
repr(correctAnswer-testAnswer)
return
#Function call
testSumDivisibleBy()
def SumDivisibleby(first,last,nTerms): return nTerms * ((first + last)/2);
def SumDivisibleby(first,last,nTerms): return nTerms * (first + last)/2;