if while while循环中的语句?

时间:2014-08-10 08:16:05

标签: python

使用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

6 个答案:

答案 0 :(得分:2)

您可以为13整除的范围内的每个数字生成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