【问题标题】:How to find sum in a list using classes如何使用类在列表中查找总和
【发布时间】:2016-03-13 00:51:14
【问题描述】:

可以使用函数以更简单的方法完成,但由于我正在练习 OOP,所以我想尝试使用类对这个问题进行编码。

class Numbers:
    def __init__(self):
       self.__sum=0
    def addNumber(self, number):
       self.__sum += number
    def currentSum(self):
       return self.__sum

numbers = Numbers()
a = ['3 2', '1 2']
for n in a:
    for i in n.split():
        numbers.addNumber(int(i))
        print(numbers.currentSum())

但是,产生的输出是这样的:

3
5
6
8

而不是

5
3

【问题讨论】:

  • 如果您想实践 OO,您可能希望使用更合适的 OO 语言,例如 Java 或 C++。
  • 为什么要打印5 3?每次添加数字时都会打印总和...也许您的意思是取消缩进打印行?
  • @cricket_007 我想打印列表“a”3+2 = 51+2=3 中每个元素显示的值的总和,而不是一起迭代所有元素中的所有整数。
  • 我明白了。答案解决了这个问题。

标签: python class oop methods sum


【解决方案1】:

在第一个循环中创建类实例。并在第二个循环之外打印。

class Numbers:
    def __init__(self):
       self.__sum=0
    def addNumber(self, number):
       self.__sum += number
    def currentSum(self):
       return self.__sum

a = ['3 2', '1 2']
for n in a:
  numbers = Numbers()
  for i in n.split():
      numbers.addNumber(int(i))
  print(numbers.currentSum())

【讨论】:

  • 你打败了我 :)
【解决方案2】:

两件事;

  • 您需要重置每个字符串的总和,否则您将得到 5 8。
  • 您需要在遍历字符串中的所有数字后打印结果,而不是 while 循环。通过无意打印来解决此问题。
a = ['3 2', '1 2']
for n in a:
    numbers = Numbers()               <-- reset sum per string
    for i in n.split():
        numbers.addNumber(int(i))
    print(numbers.currentSum())       <-- do this _after_ the loop

# 5
# 3

【讨论】:

    猜你喜欢
    • 2022-01-17
    • 1970-01-01
    • 2018-05-23
    • 2014-09-22
    • 2021-08-30
    • 1970-01-01
    • 2019-02-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多