如何在Loop

时间:2016-09-04 11:54:53

标签: python loops sum

我有一个练习,输入数据将包含第一行中要处理的对的总数。 以下行将包含自身对 - 每行一对。 答案应包含以空格分隔的结果。 我的代码:

    n = int(raw_input())
    sum = 0

    for i in range(n):
        y = raw_input().split(" ")
        for i in y:
            sum = sum + int(i)


    print sum          

使用我的代码,我将Sum一起来,但我会将结果以空格分隔。谢谢你的帮助。

2 个答案:

答案 0 :(得分:0)

哦,看起来你在内循环中重复使用相同的变量i作为外循环 - 这是不好的做法,可能会导致错误。

您目前正在做的是在每对中添加两个元素进行求和,然后在最后打印,您可以通过两种不同的方式解决此问题。

  1. 您可以对每一对求和,将和转换为字符串,然后将其余的和作为字符串连接,或者

  2. 您可以在使用print sum,对它们进行求和后立即打印每对的总和,这将打印不带换行符的数字,以便您可以在一行上打印所有结果。

    < / LI>

答案 1 :(得分:0)

使用您当前的代码得到的是所有给定数字的总和,得到在外循环中初始化计数器所需的每行总和,然后打印它,并且因为您想要打印所有它在同一行中有几种方法可以执行此操作,例如将其保存在列表中或告诉print不要打印新的行,该行通过在末尾添加,来完成与print x,一样,考虑到这一点,所需的更改是

n = int(raw_input())
for i in range(n):
    pairs = raw_input().split() #by default split use spaces 
    pair_sum = 0
    for p in pairs:
        pair_sum += int(p) # a += b is the same as a = a + b
    print pair_sum, 

 print ""  # to print a new line so any future print is not done in the same line as the previous one

这是每行打印的版本,接下来是使用列表的版本

n = int(raw_input())
resul_per_line = []
for i in range(n):
    pairs = raw_input().split() #by default split use spaces 
    pair_sum = 0
    for p in pairs:
        pair_sum += int(p) # a += b is the same as a = a + b
    resul_per_line.append( str(pair_sum) ) #conver each number to a string to use with join bellow

 print " ".join(resul_per_line) 

使用上述任何一个,例如说输入数据是

3
1 2
40 50
600 700

然后结果将是

3 90 1300

使用built inmap之类的sum函数可以简化上述代码的某些部分,例如此部分

    pair_sum = 0
    for p in pairs:
        pair_sum += int(p)

可以成为

    pair_sum = sum( map(int,pairs) )