【问题标题】:Problems with "while" looping“while”循环的问题
【发布时间】:2020-02-05 07:44:29
【问题描述】:

我必须以某种方式执行一个函数,当我执行它时,我将能够以如下所示的方式添加一个数字的所有除数。

这让我发疯了,我遇到同样的问题大约一个小时了。

def sum_divisors(n):
  # Return the sum of all divisors of n, not including n
  divisor = 1
  while divisor < n:
    if n%divisor==0:
      return divisor
      divisor = divisor + 1
    else:
      divisor = divisor + 1

print(sum_divisors(6)) # Should be 1+2+3=6
print(sum_divisors(12)) # Should be 1+2+3+4+6=16

【问题讨论】:

  • 我猜,问题是这段代码无法访问? (应该说出来,而不是我)。
  • 我认为这是一个传统,你也应该对你接受的答案投赞成票。

标签: python loops while-loop


【解决方案1】:
def sum_divisors(n): 
    sum = 0
    z = 1

    while n > z:
        if n % z == 0:
            sum = sum + z
            z = z + 1
        else:
            z = z + 1
    # Return the sum of all divisors of n, not including n
    return sum

【讨论】:

    【解决方案2】:

    一个简单的谷歌搜索会引导你找到很多解释的答案:sum of divisors in python

    如果你考虑一些效率:

    我们需要检查除数,直到一个数字的sqrt

    import math 
    def sum_divisors(num) : 
    
        # Final result of summation of divisors 
        result = 0
    
        # find all divisors which divides 'num' 
        i = 2
        while i<= (math.sqrt(num)) : 
    
            # if 'i' is divisor of 'num' 
            if (num % i == 0) : 
    
                # if both divisors are same then 
                # add it only once else add both 
                if (i == (num / i)) : 
                    result = result + i; 
                else : 
                    result = result +  (i + num//i); 
            i = i + 1
    
        # Add 1 to the result as 1 is also  
        # a divisor 
        return (result + 1); 
    
    print(sum_divisors(6))
    print(sum_divisors(12))
    

    【讨论】:

      【解决方案3】:

      在你的函数中,你在找到一个除数后立即返回。 这就是为什么你的功能不起作用 尝试将每个 n%divisor == 0 放入一个列表中,然后在结束时返回它。

      或者尝试直接打印。

      【讨论】:

      • 看他的需要,是否只是检查的问题,但我同意
      【解决方案4】:

      这里很奇怪:

      if n%divisor==0:
            return divisor
            divisor = divisor + 1 //<= this is actually dead code, since is after the return statement...
      

      另一方面:

      这里是:

      divisor = divisor + 1
      

      更像是一个计数器,但你缺少累加器...

      你应该做类似的事情

      accum = 0
      while divisor < n:
          foo = n % divisor
          if foo == 0:
          accum = accum + divisor
      

      【讨论】:

        【解决方案5】:

        def sum_divisors(n):

        total = [0]
        divisors = 1
        while divisors < n:
            if n % divisors == 0:
                result.append(divisors)
            else:
                pass
            divisors += 1
        return sum(total)
        

        【讨论】:

        • 虽然这可能会回答问题,但您应该edit 您的回答包括对如何此代码块回答问题的解释。这有助于提供上下文,并使您的答案对未来的读者更有用。
        【解决方案6】:

        您可以使用这个简单的 while 循环来打印一个数字的所有除数的总和。你应该使用累加器来增加温度。

        def sum_divisors(n):
          sum = 0
          accum = 1
          while n != 0 and accum < n:
            if n % accum == 0:
              sum += accum
            accum += 1
          return sum
        
        
        
        print(sum_divisors(6)) # prints 6
        print(sum_divisors(12)) # prints 16
        

        【讨论】:

          【解决方案7】:
          def sum_divisors(n):
            sum = 0
            accum = 1
            # Return the sum of all divisors of n, not including n
            while n != 0 and accum < n:
              if n % accum == 0:
                sum += accum
              accum += 1
            return sum
          
          print(sum_divisors(0))
          # 0
          print(sum_divisors(3)) # Should sum of 1
          # 1
          print(sum_divisors(36)) # Should sum of 1+2+3+4+6+9+12+18
          # 55
          print(sum_divisors(102)) # Should be sum of 2+3+6+17+34+51
          # 114
          

          【讨论】:

            【解决方案8】:

            第5行应该有一个if条件,这样0也能得到所需的结果

            if(num==0):
            return result;
            

            【讨论】:

              【解决方案9】:
              def sum_divisors(n):
                sum = 0
                x = 1
                while n != 0 and x < n :
                    
                  if n % x == 0  :
                    sum += x
                  else:
                    sum += 0
                  x += 1    
                return sum
              

              【讨论】:

                【解决方案10】:
                def sum_divisors(n):
                    x = 1
                    a = 0
                    while n!=0 and x<n:
                        if n%x == 0:
                        a = a + x
                        x += 1  
                    #Return the sum of all divisors of n, not including n
                    return a
                
                print(sum_divisors(0)) #0
                
                print(sum_divisors(3)) # Should sum of 1
                
                print(sum_divisors(36)) # Should sum of 1+2+3+4+6+9+12+18
                
                print(sum_divisors(102)) # Should be sum of 2+3+6+17+34+51
                

                【讨论】:

                  猜你喜欢
                  • 2011-06-19
                  • 2011-03-04
                  • 1970-01-01
                  • 1970-01-01
                  • 2014-05-22
                  • 2018-11-05
                  • 2013-12-10
                  • 2017-08-11
                  • 1970-01-01
                  相关资源
                  最近更新 更多