第一部分可以,您可以在其中获取总字数并打印结果。
你跌倒的地方就在这里
words_par = 0
for words_par in lines:
if words_par.startswith("P1" or "P2" or "P3") & words_par.endswith("P1" or "P2" or "P3"):
words_par = line.split()
print len(words_par)
print words_par.replace('P1', '') #doesn't display it but still counts
else:
print 'No words'
words_par最初是一个包含文件行的字符串。在一个永远不会满足的条件下,它变成一个列表
line.split()
表达。这,如果表达式
words_par.startswith("P1" or "P2" or "P3") & words_par.endswith("P1" or "P2" or "P3")
如果要返回 True,则始终会拆分文件中的最后一行,因为最后一次分配它是在程序的第一部分中,您在该部分中对文件中的字数进行了完整计数。真的应该这样
words_par.split()
还
words_par.startswith("P1" or "P2" or "P3")
将一直是
words_par.startswith("P1")
自从
"P1" or "P2" or "P3"
始终计算为第一个为 True 的值,在这种情况下,它是第一个字符串。如果您想了解更多信息,请阅读http://docs.python.org/reference/expressions.html 。
当我们这样做时,除非您想做按位比较,否则请避免这样做
something & something
而是做
something and something
无论第一个的结果如何,第一个都会评估两个表达式,而第二个只会在第一个为 True 时评估第二个表达式。如果您这样做,您的代码将更有效地运行。
这
print len(words_par)
下一行总是要计算行中的字符数,因为 if 语句总是会评估为 False 并且 word_par 永远不会被拆分为单词列表。
此外,无论序列是否为空,都将始终执行 for 循环上的 else 子句。查看http://docs.python.org/reference/compound_stmts.html#the-for-statement了解更多信息。
根据我认为你想要的,我写了一个我认为你所追求的版本作为示例。我尽量保持简单并避免使用列表理解之类的东西,因为你说你才刚刚开始学习,所以它不是最佳的,但希望会很清楚。另请注意,我没有发表任何评论,因此请随时麻烦我为您解释。
words = None
with open('data.txt') as f:
words = f.read().split()
total_words = len(words)
print 'Total words:', total_words
in_para = False
para_count = 0
para_type = None
paragraph = list()
for word in words:
if ('P1' in word or
'P2' in word or
'P3' in word ):
if in_para == False:
in_para = True
para_type = word
else:
print 'Words in paragraph', para_type, ':', para_count
print ' '.join(paragraph)
para_count = 0
del paragraph[:]
para_type = word
else:
paragraph.append(word)
para_count += 1
else:
if in_para == True:
print 'Words in last paragraph', para_type, ':', para_count
print ' '.join(paragraph)
else:
print 'No words'
编辑:
我实际上只是注意到示例中的一些冗余代码。不需要变量 para_count,因为单词被附加到段落变量中。所以而不是
print 'Words in paragraph', para_type, ':', para_count
你可以做
print 'Words in paragraph', para_type, ':', len(paragraph)
少一个变量需要跟踪。这是更正的片段。
in_para = False
para_type = None
paragraph = list()
for word in words:
if ('P1' in word or
'P2' in word or
'P3' in word ):
if in_para == False:
in_para = True
para_type = word
else:
print 'Words in paragraph', para_type, ':', len(paragraph)
print ' '.join(paragraph)
del paragraph[:]
para_type = word
else:
paragraph.append(word)
else:
if in_para == True:
print 'Words in last paragraph', para_type, ':', len(paragraph)
print ' '.join(paragraph)
else:
print 'No words'