0

私は何年もの間このコードをいじっていましたが、ドキュメントテストに合格させる方法がわかりません。出力は常に正解より 1000 少なくなります。目的の出力が得られるようにこのコードを変更する簡単な方法はありますか?? 私のコードは次のとおりです。

def sum_numbers_in_file(filename):
    """
    Return the sum of the numbers in the given file (which only contains
    integers separated by whitespace).
    >>> sum_numbers_in_file("numb.txt")
    19138
    """
    f = open(filename)
    m = f.readline()
    n = sum([sum([int(x) for x in line.split()]) for line in f])
    f.close()
    return n

ファイル内の値は次のとおりです。

1000 
15000 
2000 
1138
4

3 に答える 3

3

犯人は次のとおりです。

m = f.readline() 

あなたがやっているときf.readline()、それはリスト内包表記で考慮されていない1000を失っています。したがって、エラー。

これはうまくいくはずです:

def sum_numbers_in_file(filename):
    """
    Return the sum of the numbers in the given file (which only contains
    integers separated by whitespace).
    >>> sum_numbers_in_file("numb.txt")
    19138
    """
    f = open(filename, 'r+')
    m = f.readlines()
    n = sum([sum([int(x) for x in line.split()]) for line in m])
    f.close()
    return n
于 2013-05-14T01:42:23.227 に答える
1

最初の行を引き出して m に格納します。その後は絶対に使用しないでください。

于 2013-05-14T01:42:39.363 に答える
1

for1 つのジェネレータ式で2 つのループを使用できます。

def sum_numbers_in_file(filename):
    """
    Return the sum of the numbers in the given file (which only contains
    integers separated by whitespace).
    >>> sum_numbers_in_file("numb.txt")
    19138
    """
    with open(filename) as f:
        return sum(int(x)
                   for line in f
                   for x in line.split())

上記のジェネレータ式は次と同等です

    result = []
    for line in f:
        for x in line.split():
            result.append(int(x))
    return sum(result)
于 2013-05-14T01:43:43.290 に答える