如何打印列表元素直到遇到特定元素

0 投票
2 回答
991 浏览
提问于 2025-04-17 21:33

我是一名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的标记,当你遇到空行时再把它重置。

撰写回答