如何打印列表元素直到遇到特定元素
我是一名Python初学者,正在尝试写一个程序,能够打印出电视剧本中的每一行对话(文本文件),如果该行是对话的话。
每个角色的名字总是紧接着一段对话(这段对话可以是一行或多行)。而且总会有一个空行来表示对话的结束。我把剧本的每一行都放在一个叫做script_list的列表里,把所有角色的名字放在一个叫做character_list的列表里。可能有更好的解决办法,但现在我想找一个Python命令,能够识别script_list中的元素是否是角色名字,然后打印出后面的script_list元素,直到遇到一个空行。
举个例子,对于下面的剧本,我只想打印出:'Looks like she's late again.',然后打印出Bob的每一句对话。
第一幕
办公室会议室 - 早晨
Bob和John互相尴尬地对视。 <-- 这不是对话。
BOB 看起来她又迟到了。 <-- 紧接着说话的角色的对话。
John看了看他的手表。
JOHN [一段多行的文本]
Sarah走进房间。
2 个回答
0
首先给你一个简单的开始:
characterNames = ["JOHN", "BOB", "SARAH"]
play = ["These are stage directions", "BOB This is printed", "This is case sensitive, Sarah"]
for line in play:
for name in characterNames:
if name in line:
print(line)
请注意,这里假设你在对话中没有使用全大写字母。
0
我觉得你想要的东西可能是这样的:
if any(line.startswith(name) for name in character_list):
如果这个line
的开头是你列表中的任何一个名字,这个判断就会返回True
。这里假设你的列表里的名字都是大写的,否则你可能会匹配到“舞台指示”,因为它们也是以名字开头的。
你可以设置一个dialogue = True
的标记,当你遇到空行时再把它重置。