# returns sum of individual digits in n (incorrect implementation)
def digit_sum(n):
running_sum = 0
count = 0
while count < len(str(n)):
rightmost = n % 10 # value of right-most digit
running_sum += rightmost
n = n // 10 # strip right-most digit
count += 1
return running_sum
每次通过len(str(n))
循环的每次迭代检查条件时是否计算while
的值,或者第一次评估len(str(n))
并存储一些位置以优化执行?
与以下循环相反:
# returns sum of individual digits in n (correct implementation)
def digit_sum(n):
running_sum = 0
for _ in xrange(len(str(n))):
rightmost = n % 10 # value of right-most digit
running_sum += rightmost
n = n // 10 # strip right-most digit
return running_sum
答案 0 :(得分:2)
每次计算。 Python并不知道str(n)
每次都会返回相同的东西。在编译时,据他所知,可以使用
class IAmABadPersonWhoWantsPeopleToHaveABadTime(int):
def __str__(self):
if random.random() < 0.1:
raise SyntaxError
return super(IAmABadPersonWhoWantsPeopleToHaveABadTime, self).__str__()
并且程序的正确性可能依赖于SyntaxError的10%几率。
此外,请勿将数字与range
返回值进行比较。这绝对不是你想要的。 for
循环更接近您想要的内容:
for _ in xrange(len(str(n))):
虽然使用while
更简单:
while n:
与n != 0
一样长。