【问题标题】:Alternating sums of a list [duplicate]列表的交替总和[重复]
【发布时间】:2018-10-18 18:37:30
【问题描述】:

9.编写一个程序,接受来自用户的 9 个整数并将它们存储在一个列表中。接下来,计算列表中所有元素的交替总和。例如,如果用户输入 1 4 9 16 9 7 4 9 11 然后它计算 1 – 4 + 9 – 16 + 9 – 7 + 4 – 9 + 11 = –2

myList = []
value = None
count = 0
while count != 9:
  value = int(input("Please enter a number: "))
  myList.append(value)
  count = count + 1
  if count == 9:
    break
print(myList)
def newList(mylist):
  return myList[0] - myList[1] + myList[2] - myList[3] + myList[4] - myList[5] + myList[6] - myList[7] + myList[8]
x = newList(myList)
print(x)

我的代码返回正确的答案,但我需要它来打印出实际的交替总和,如示例中所示。我已经坚持了一段时间。我对此有一个心理障碍,并且无法在网上找到与此类似的任何东西。 我感谢任何帮助或提示。 另外,这是python 3。 谢谢。

【问题讨论】:

  • 抱歉,又是什么问题?
  • 我从示例数字中得到了正确的答案 (-2),但我还需要它来打印出实际的方程式,而不仅仅是答案。

标签: python alternating


【解决方案1】:
a=[1, 4, 9, 16, 9, 7, 4, 9, 11]
start1=0
start2=1
sum1=0
first_list=[a[i] for i in range(start1,len(a),2)]
second_list=[a[i] for i in range(start2,len(a),2)]
string=''
for i,j in zip(first_list,second_list):
    string+=str(i)+'-'+str(j)+'+'
string.rstrip('+')
print('{}={}'.format(string,str(sum(first_list)-sum(second_list))))

输出

1-4+9-16+9-7+4-9+=-2

【讨论】:

    【解决方案2】:

    尝试这样做:

    positives = myList[::2]
    negatives = myList[1::2]
    result = sum(positives) - sum(negatives)
    print ("%s = %d" % (" + ".join(["%d - %d" % (p, n) for p, n in zip(positives, negatives)]), result))
    

    我会解释我在这里做什么。前两行是您列表的一部分。我在myList 中取所有其他数字,从 0 开始表示 positives,从 1 开始表示 negatives。从那里,找到交替总和的结果只是将positives 的总和减去negatives 的总和。

    最后一行有点忙。在这里,我将正数和负数压缩在一起,生成一个 2 元组列表,其形式为 (positive, negative),然后我使用字符串格式生成 p - n 形式。从那里我使用join 将它们与加号连接在一起,从而产生p0 - n0 + p1 - n1 + p2 - n2...。最后,我再次使用字符串格式化,得到p0 - n0 + p1 - n1 + p2 - n2 ... = result的形式。

    【讨论】:

      【解决方案3】:

      你可以照做,但把它放在打印语句中

      print(myList[0] + " - " + myList[1] + " + " + myList[2] + " - " + myList[3] + " + " + myList[4] + " - " + myList[5] + " + " + myList[6] + " - " + myList[7] + " + " + myList[8] + " = " + x)
      

      它并不完全干净,但它遵循您的逻辑,因此您的老师不会知道您的解决方案是从其他人那里得到的。

      【讨论】:

      • 这不在 Python 3 中运行。
      • 为什么它在 python 3 中不起作用?
      【解决方案4】:

      类似以下的方法会起作用:

      def sumList(theList):
          value = 0
          count = 0
          steps = ""
          for i in theList:
              if count % 2 == 0:
                  value += i
                  steps += " + " + str(i)
              else:
                  value -= i
                  steps += " - " + str(i)
              count += 1
          print(steps[3:])
          return value
      
      
      print(sumList(myList))
      

      它通过跟踪列表中的位置并使用模运算符在+- 之间交替。然后它计算该值并附加到一个字符串以显示所采取的步骤。

      【讨论】:

        【解决方案5】:

        9 个或更多号码列表准备就绪后,您还可以执行以下操作

        st = ''
        sum = 0
        
        for i, v in enumerate(myList):
            if i == 0:
                st += str(v)
                sum += v
            elif i % 2 == 0:
                st += "+" + str(v)
                sum += v
            else:
                st += "-" + str(v)
                sum -= v
        
        print("%s=%d" % (st, sum))
        

        打印:1-4+9-16+9-7+4-9+11=-2

        【讨论】:

        • 这很好用。我们还没有深入学习 % 的格式,但这对我的目的有用。谢谢。
        • 很高兴知道!快乐编码
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-12-15
        • 2021-09-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-08-31
        • 1970-01-01
        相关资源
        最近更新 更多