【问题标题】:How computes the number of integers from start up to如何计算从开始到的整数个数
【发布时间】:2020-03-27 02:00:18
【问题描述】:

编写一个函数 div_3_5(start, end) 来计算从 start 到的整数个数,但不包括使用 while 循环可被 3 或 5 整除的 end。

注意:在这个练习中,我必须在函数内使用 while 循环(我知道 for 循环是最好的)。

示例: div_3_5(7, 27) 计算结果为 9(在该范围内可被 3 或 5 整除的数字:9,10,12,15,18,20,21,24,25)

我真的不明白我为什么或在做什么,有人可以解释我哪里出错了。 到目前为止,这是我的代码:

count = 0
def div_3_5(start, end):
    while start < end:
        if start%3 == 0 or start%5 == 0:
            count + 1
        start = start + 1
            start + 1
    return count

这显然不完整或不正确,我得到的当前错误是:

预期输出:

div_3_5(7, 27) -> 9

测试结果:0 != 9

【问题讨论】:

  • 您在 while 循环之外增加 start 。所以循环开始/结束值永远不会改变,这意味着它将永远循环。看看列表理解。在不为您解决问题的情况下考虑类似[v for v in range(start, end+1) if True]。将 True 更改为为所需 v 生成 True 的函数,您将获得解决方案。

标签: python while-loop


【解决方案1】:

这里有一些有用的提示。

  1. mod 操作 % 将返回一个对象的余数,因此一个数字可以被另一个数字整除,mod 将为 0,例如 6 % 3 == 0 返回 true。

  2. while 循环不是这个操作的最佳选择,最好是 for 循环

for i in range(start, end+1):

这将修复无限循环。

我会这样写:


def div_3_5(start, end):
    count = 0
    for i in range(start, end + 1):
        if i % 3 == 0 or i % 5 == 0:
            count += 1
    return count

start = 1
end = 10

count = div_3_5(start, end)
print(count)

【讨论】:

  • 我刚刚编辑了我的帖子,但是我应该注意到我必须在函数内使用 while 循环来通过这个练习
【解决方案2】:

Python 有一个取模运算符 (%),它返回 A/B 的余数 (10%4 == 2)。

在您的情况下,您将寻找除以 3 或 5 时余数为 0 的数字

(即 x%3 == 0 或 x%5 == 0)。

最后,您问elif start &gt;= end 的最后一个 elif 是不必要的,因为您在创建循环时将其声明为条件。相反,请尝试将这两行替换为 start = start + 1

【讨论】:

  • 这非常有帮助
【解决方案3】:

我找到的答案是:

def div_3_5(start, end):
count = 0
while start < end:
    if start % 3 == int() or start % 5 == int():
        count += 1
    start = start + 1
return count

【讨论】:

    【解决方案4】:

    你不需要循环来完成这个任务,这里有一个简单而有趣的数学方法,Python 允许我们轻松实现: - 一,创建一个从 0 到结尾的集合,步长为 3,即 {0,3,6,...end} 这将为您提供所有可整除 3 的元素在您的结尾边界内(同时保持end 不包括在内),在 Python 中,这是通过这种方式完成的:set_of_3=set(range(0,b,3)) simple eh? - 二,做同样的事情,但对于 5s,set_of_5=set(range(0,b,5)) - 三,将这些集合加在一起:set_of_all=set_of_3.union(set_of_5) 现在你得到了从 0 到结尾所有可被 3 和 5 整除的元素,但你不希望这样,你想要从头到尾,简单地说,只需从 set_of_all 删除从 0 到开头的所有数字,通过: result = set_of_all - set(range(0,a)) 并返回该结果的 len()。你的完整代码:

    def div_3_5(start,end):
        set_of_3 = set(range(0,end,3))
        set_of_5 = set(range(0,end,5))
        set_of_all = set_of_3.union(set_of_5)
        result = set_of_all - set(range(0,start))
        return len(result)
    

    我知道有点复杂,但很有趣!至少对我来说。希望这会有所帮助。

    已编辑

    是的,我没有注意到你说你必须使用while循环,你可以做这个版本的代码:

    def div_3_5(start,end):
        list = []
        while start<end:
            if start%3==0 or start%5==0:
                list.append(start)
            start+=1
        return len(list)
    

    使用 Python 的强大功能,忘记这些 C-ish 方法,关于您的代码有什么问题,以下行: count + 1 在 Python 中不起作用,你必须这样做:count+=1

    【讨论】:

      猜你喜欢
      • 2021-09-13
      • 1970-01-01
      • 2020-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-13
      • 1970-01-01
      • 2010-10-23
      相关资源
      最近更新 更多