在while循环中使用if语句?
我需要用一个while循环和一个if语句来写一个函数 div_3_5 (start, end)
,这个函数的作用是计算从 start
到 end
之间(不包括 end
)有多少个整数是能被3或5整除的。
我不需要列出这些数字,只需要告诉我有多少个这样的数字就可以了。
我遇到了一个错误,要么是说我需要一个返回值,要么是说用这个代码给出的答案不正确。
def div_3_5(start, end):
x = 0
while start < end:
x = x + start
start = start + 1
if (x%3 == 0) or (x%5 == 0):
return x
6 个回答
0
我相信还有很多更优雅的解决方案,但这个方法看起来是有效的。
def div_3_5(start, end):
count = 0
x = 0
while start < end:
start += 1
x += 1
if (x%3 == 0) or (x%5 == 0):
count += 1
return count
0
你的问题是,当你遇到第一个符合条件的情况就返回了,这样不对。你需要把所有符合条件的都统计出来,然后再返回结果。
你可以试试这种方法,它会返回一个符合条件的列表:
def div_3_5(start, end):
numbers_3_5 = []
for number in range(start, end):
if number % 3 == 0 or number % 5 == 0:
numbers_3_5.append(number)
return len(numbers_3_5)
举个例子:
print div_3_5(3, 10)
输出结果:
4
补充:
可以用一个循环来实现:
def div_3_5(start, end):
numbers_3_5 = []
while start < end:
if start % 3 == 0 or start % 5 == 0:
numbers_3_5.append(start)
start += 1
return len(numbers_3_5)
2
你可以为范围内每个能被 3
或 5
整除的数字生成一个 1
,然后把所有的 1
加起来:
def div_3_5(start, end):
return sum(1 for x in xrange(start, end) if (x % 3 == 0) or (x % 5 == 0))
额外的小技巧
如果需要的话,你还可以创建一个这样的函数生成器:
def div_generator(divs):
return lambda start, end: sum(
1 for x in xrange(start, end)
if any(x % div == 0 for div in divs))
div_3_5 = div_generator([3, 5])
2
你的代码不应该更像这样吗:
def div_3_5(start, end):
x = 0
while start < end:
if (start%3 == 0) or (start%5 == 0):
x += 1
start = start + 1
print x
return x
调用:
div_3_5(1,9)
输出:
3
2
对于任何一个数字 x,在 1 到 x 之间(包括 x 本身),有 x//n 个数字是可以被 n 整除的。因此,在 1 到 x 之间,有 x//3 + x//5 - x//15 个数字是可以被 3 或 5 整除的(这是用到了一种叫做包含-排除原理的方法)。
这样,你就可以用 O(1) 的方式来计算这个函数:
def d35(x):
return x//3 + x//5 - x//15
def div3or5(start, end):
return d35(end-1) - d35(start-1)