【问题标题】:Find total sum and sum of numbers in range based on condition根据条件查找范围内数字的总和和总和
【发布时间】:2023-03-20 23:19:01
【问题描述】:

我想创建一个函数my_sum_div(a, b, div=10),它将计算从ab 的数字的总和,打印出这个总和,以及所有可以被div 整除的a+(a+1)+(a+2)+(a+3) 类型的中间总和. 我希望程序按如下方式工作:

    my_sum_div(1, 10, 2)

输出应如下所示:

sums divisible by 2:
6
10
28
36
sum of numbers between 1 and 10 is: 55

现在我已经这样做了:

    def my_sum(a, b):
    print("sum of numbers between", a," and", b," is", sum(i for i in 
    range(a, b+1)))

    def my_sum_div(a, b, div = 3):
    print("sums divisible by", div,":")

    l = []
    s = ","
    x = sum(i for i in range(a, b+1)
    for i in range(a, b+1):
        if (i%div==0):
            l.append(str(i))

    print(s.join(l))

    print("sum of numbers between", a, " and", b, " is", sum(i for i in 
    range(a, b + 1))

我已经尝试了几个小时。我知道我的代码只检查(a, b+1) 之间的哪些数字可以被div 整除,但是我如何让它计算并打印所有可以被div 整除的中间和?我的第一个函数只计算给定区间内所有整数的总和。我现在希望后续函数计算在给定间隔内可被 div 整除的所有中间和并打印所有这些。

提前谢谢你。

【问题讨论】:

  • 顺便说一句,有一个常用的公式只是使用b的值。对于所有值的总和1..ben.wikipedia.org/wiki/1_%2B_2_%2B_3_%2B_4_%2B_%E2%8B%AF
  • 提示:如果你的代码块被正确缩进,它会更容易理解——例如my_sum_div() 是否定义在my_sum()内部? (我认为不是,但看起来就是这样)在缩进四个空格以开始代码块之后,请务必在 def ... 之后的行上缩进另外四个(或两个),就像在将 python 写入时一样你的编辑器/IDE。 :)

标签: python sum integer range


【解决方案1】:
def my_sum_div(a,b,div):
        sum = 0
        for i in range(a, b + 1):
            sum += i
            if sum % div == 0:
                print(sum)
        return sum

print(my_sum_div(1,10,2))

输出:

6
10
28
36
55

【讨论】:

    【解决方案2】:

    您可以创建您的自定义 generatoryield 结果为:

    def my_sum_div(start, end, d):
        my_sum = 0
        for x in range(start, end+1):
            my_sum += x 
            if my_sum % d == 0:
                yield my_sum
        # yield my_sum     # <-- uncomment this if you want the total 
                           #     sum to be returned at the end
    

    使用上述生成器,您可以一次生成一个结果,next() 为:

    >>> my_generator = my_sum_div(1, 10, 2)
    >>> next(my_generator)
    6
    >>> next(my_generator)
    10
    >>> next(my_generator)
    28
    

    或者您可以一次性获得所有结果的列表:

    >>> list(my_sum_div(1, 10, 2))
    [6, 10, 28, 36]
    

    带有注释版本的代码的结果最终产生my_sum

    >>> list(my_sum_div(1, 10, 2))
    [6, 10, 28, 36, 55]
    

    在 Python 3 中,您可以简单地将中间值的总和和最后的总和存储在两个变量中:

    >>> *intermediate_sum, total_sum = list(my_sum_div(1, 10, 2))
    # where: 
    #  - `intermediate_sum` will hold the value `[6, 10, 28, 36]`
    #  - `total_sum` will hold the value `55`
    

    对于旧版本的 Python,您需要这样做:

    >>> sum_list = list(my_sum_div(1, 10, 2))
    >>> intermediate_sum, total_sum = sum_list[:-1], sum_list[-1]
    

    【讨论】:

      【解决方案3】:

      这是我的实现

      def my_sum(a, b):
          return sum(i for i in range(a, b+1)))
      
      def my_sum_div(a, b, div = 3):
          print("sums divisible by", div,":")
      
          l = []
          s = ","
          test = 0
          for i in range(a, b+1):
              test += i
              if (test%div==0):
                  l.append(str(test))
      
          print(s.join(l))
      
          print("sum of numbers between", a, " and", b, " is", my_sum(a, b))
      

      【讨论】:

        猜你喜欢
        • 2016-12-05
        • 2016-10-19
        • 2017-05-29
        • 1970-01-01
        • 2013-08-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多