使用while和if语句我需要编写函数div_3_5 (start, end)
来计算从start
到最多但不包括end
的整数,这些整数可以被3整除或者5.
我不需要列出数字,只说明有多少。
我得到一个错误,或者说我需要一个return语句,或者当给出变量时,使用此代码的答案是错误的。
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
答案 0 :(得分:2)
您可以为1
或3
整除的范围内的每个数字生成5
,而不是对所有1
s求和:
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])
答案 1 :(得分:2)
对于任何数字x,在1和x(包括)之间有x // n个可被n整除的数字。因此,有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)
答案 2 :(得分:1)
你的代码不应该更像这样:
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
答案 3 :(得分: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
修改强>
通过while循环:
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)
答案 4 :(得分:0)
当你使用return时,编译器在第一次查找时退出循环。你可以把下面的计数器找到有多少答案。 我也很关心你的算法。部分x = x + start,你是从头到尾加起来的所有数字,这是你的目标吗?如果是这样,代码应为:
def div_3_5(start, end):
x = 0
y = 0
while start < end:
x = x + start
start = start + 1
if (x%3 == 0) or (x%5 == 0):
y = y +1
return y
print div_3_5(1,8)
输出为:5
答案 5 :(得分: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