我有以下代码,它按预期运行,但在计算字符数和最长行的长度时有一些问题。下面是我的代码:
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
你们能看到什么会使代码不能计算正确的字符数吗?最长的一行总是显示为比正确答案多一行。
输入如下:
美丽的汤,如此浓郁和青绿,在热腾腾的图腾中等待!对于这样的美味,谁不会屈尊呢?晚上的汤,美丽的汤!晚上的汤,美丽的汤!
博--胡说八道!博--胡说八道!所以--哦--晚上,美丽,美丽的汤!
美味的汤!谁会关心鱼、野味或其他菜肴呢?谁不愿意为两便士的美汤付出一切呢?彭尼沃斯,只有美丽的汤吗?
博--胡说八道!博--胡说八道!所以--哦--晚上,美丽的,美丽的--浓汤!
预期输出如下:
字符: 553字: 81行: 21最长行: 38
实际(失败)输出:
字符: 469字: 81行: 21最长: 39
发布于 2018-08-13 02:21:23
您只计算非空格字符。可能需要的字符数包括空格。
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
发布于 2018-08-13 01:20:39
要获得正确的字符数,必须像计算其他字符一样计算空格。否则,你得到的值会小得多。类似于:
n_chars = sum( [len(line) for line in lines] )
https://stackoverflow.com/questions/51810837
复制相似问题