2016-10-13 7 views
0

によって上書きされ続けます。私は、私の関数呼び出しが、質問しない限り、ファイルから読み込まれたデータを上書きしているようです。私は元のリストの合計を取得しようとしていますが、私は二乗されたリストの合計を得続けます。ファイルのデータは、何らかの理由で関数

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))) 
+1

'numbers.txt'ファイルには何が含まれていますか? – Nurjan

+0

残念ながら、それは数字のリストで構成されています。 "54 63 63 42 83 42 22 27 88 52" スペースで区切って – WannaBeCoder

答えて

3

あなたsquareEach機能がそれに渡された元のリストを変更します。 何が起きているのかを確認するには、関数呼び出しの間にプリントを追加することを検討してください。 def main(): file=open("numbers.txt","r").readline().split(" ") print(str(squareEach(file))) print(str(file)) print(str(sumList(file))

EDIT: 最も簡単な修正は他の回答で示唆されているように、より効率的な方法がありますsquareEach関数内

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

をご平方数を格納するために別のリストを使用することですが、あなたの場合は、これは最も簡単な解決策です。

+0

ファイルを閉じることも忘れないでください(with-statementを使用)。 – Slava

+0

これはなぜですか?私はデータが関数呼び出し内でのみ変更され、ファイル変数自体では特に変更されないと考えました。これを回避する方法は何ですか?渡されたリストを変更する代わりに、最初にコピーする必要がありますか?それとも簡単な方法がありますか? – WannaBeCoder

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) 
+0

関数で行う必要があります:) – WannaBeCoder

0

リストnumssquareEach方法で変更されているもの。結果を別のリスト変数に格納することを検討してください。

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 
関連する問題