不计算文件中的正确字符

时间:2018-08-12 16:44:03

标签: python python-3.x

我有以下代码可以正常运行,但是在计算字符数和最长字符行的长度时遇到了一些问题。以下是我的代码:

def stats(file_name):
    n_chars = 0
    n_words = 0
    n_lines = 0
    longest_line = 0
    with open(file_name) as f:
        lines = f.readlines()
        n_lines = len(lines)
        longest_line = max([len(line) for line in lines])
        words = []
        line_words = [line.split() for line in lines]
        for line in line_words:
            for word in line:
                words.append(word)
        n_words = len(words)
        chars = []
        line_chars = [list(word) for word in words]
        for line in line_chars:
            for char in line:
                chars.append(char)
        n_chars = len(chars)
        f.close()
        return n_chars, n_words, n_lines, longest_line

你们能看到使代码无法计算正确字符数的任何内容吗?最长的行总是比正确的答案多一。

输入如下:

美丽而丰富的绿色汤, 在一个热的碗里等待! 谁会为这样的精致而屈服? 晚上的汤,美丽的汤! 晚上的汤,美丽的汤!

美女-赞叹不已! 花花公子-oo! 太晚了, 美丽,美丽的汤!

美丽的汤!谁在乎鱼, 野味,或其他菜肴? 谁不会给两个其他一切 潘尼沃思只有美丽的汤吗? 潘尼沃思只有美丽的汤吗?

美女-赞叹不已! 花花公子-oo! 太晚了, 美丽,美丽-全汤!

预期的输出如下:

字符:553 字数:81 行数:21 最长的线:38

实际(失败)输出:

个字符:469 字数:81 行数:21 最长:39

2 个答案:

答案 0 :(得分:0)

要获得正确的字符数,您必须计算空格以及其他字符。否则,您将获得较小的价值。像这样:

n_chars = sum( [len(line) for line in lines] )

答案 1 :(得分:0)

您只计算非空白字符。所需的字符数可能包含空格。

def stats(file_name):
    n_chars = 0
    n_words = 0
    longest_line = 0
    with open(file_name) as lines:
        for n_lines, line in enumerate(lines, 1):
            longest_line = max(longest_line, len(line.rstrip('\n'))
            n_chars += len(line)
            n_words += len(line.split())
    return n_chars, n_words, n_lines, longest_line