代码之家  ›  专栏  ›  技术社区  ›  Ryrich

3或5的倍数可以用else if语句来完成吗?

  •  -3
  • Ryrich  · 技术社区  · 9 月前

    我尝试了以下代码,除了0或负数外,它工作正常,它说: “无法访问未与值关联的局部变量'add_list'”。

    我已经看到了如何通过其他方式实现这一点,我只是想知道是否可以使用elif语句来实现。我尝试了“break”、缩进和不同的顺序,但得到了相同的错误。

    def solution(number):
        raw_list = range(number)
        my_list = []
        for num in raw_list:
            if num < 0:
                my_list.append(0)
                return my_list 
            elif num % 3 == 0 or num % 5 == 0:
                my_list.append(num)
                add_list = sum(my_list)
        return add_list
    
    2 回复  |  直到 9 月前
        1
  •  1
  •   Barmar    9 月前

    如果范围不包含3或5的任何倍数,则永远不会执行 add_list = sum(my_list) 。因此,当您尝试返回它时,会出现错误。

    不需要每次通过循环计算总和,因为您正在覆盖上一次迭代的总和。把它从循环中去掉,那么它就不会依赖于 elif 条件。

    def solution(number):
        raw_list = range(number)
        my_list = []
        for num in raw_list:
            if num < 0:
                my_list.append(0)
                return my_list 
            elif num % 3 == 0 or num % 5 == 0:
                my_list.append(num)
        add_list = sum(my_list)
        return add_list
    

    自从 if 条件永远不可能是真的,你也可以忽略它。然后,您可以将整个过程简化为:

    def solution(number):
        return sum(num in range(number) if num % 3 == 0 or num % 5 == 0)
    

    顺便提一下 raw_list 变量的名称不好。 range() 不返回列表,它返回 range 充当发电机的对象。

        2
  •  -1
  •   Channa Karawita    9 月前

    range函数不取0,因为通常范围从0开始,直到给定的数字。因此负数不起作用。为了修复“无法访问与值无关的局部变量'add_list'”错误,您只需将add_list变量保持在for循环之外,因此操作发生在将值附加到my_list之后。