文件的数据不断被功能覆盖

时间:2016-10-13 05:46:22

标签: python file-io

由于某种原因,我遇到了一个问题,我的函数调用似乎覆盖了从文件读入的数据而没有我要求它。我试图得到原始列表的总和,但我不断得到平方列表的总和。

CODE:

def toNumbers(strList):
    for i in range(len(strList)):
        strList[i] = strList [int(i)]
    return strList


def squareEach(nums):
    for i in range(len(nums)):
        nums[i] = eval(nums[i])
        nums[i] = nums[i]**2
    return nums




def sumList(nums):
    b = sum(nums)
    return b





def main():
    file=open("numbers.txt","r").readline().split(" ")
    print(str(squareEach(file)))
    print(str(sumList(file)))

3 个答案:

答案 0 :(得分:3)

您的squareEach函数会修改传递给它的原始列表。 要查看要进行的操作,请考虑在函数调用之间添加打印件。 def main(): file=open("numbers.txt","r").readline().split(" ") print(str(squareEach(file))) print(str(file)) print(str(sumList(file))

编辑: 最简单的解决方法是使用不同的列表在squareEach函数

中存储方形数字
def squareEach(nums):
    squares = []
    for i in range(len(nums)):
        num = eval(nums[i])
        squares[i] = num**2
    return squares

其他答案中提供了更有效的方法,但在您的情况下,这似乎是最简单的解决方法。

答案 1 :(得分:0)

我不确定我是否在帮忙。但无论你想做什么,都可以按照以下方式完成

file=open("numbers.txt","r").readline().split(" ")
print ([int (m)**2 for m in file])
print (sum([int(m) for m in file]))

如果你想要功能

def squareEach(file):
    print ([int (m)**2 for m in file])
def sumList(file):
    print (sum([int(m) for m in file]))


file=open("numbers.txt","r").readline().split(" ")
squareEach(file)
sumList(file)   

答案 2 :(得分:0)

nums方法修改了列表squareEach。考虑将结果存储在以下排序的不同列表变量中:

def squareEach(nums):
    sq = list()
    for i in range(len(nums)):
        sq.append(str(int(nums[i])**2))
        # nums[i] = str(int(nums[i])**2)
    return sq