我想创建一个脚本,应该防止相同的句子。首先,我认为这是足够的,只是检查如果前一个句子和当前句子是相同的。但结果是,没有句子应该是重复的。我的第一个想法是创建一个新的列表,并保存在它创建的句子。之后,程序应该检查新的句子是否在列表中。但是它根本不起作用,我不知道为什么。我希望你能帮助我。
- 如果你发现任何语法错误,这是因为我把脚本翻译成英语,做了一个错误。
import random
sentence = ''
previous_sentence = ''
sentence_list = []
def create_sentence():
names = ["x","y", "z"]
descriptions = ["a","b", "Dc"]
global sentence
global previous_sentence
global sentence_list
while sentence == previous_sentence:
sentence_list.append(sentence)
name = random.choice(names)
description = random.choice(descriptions)
sentence = f'{name} is a {description}'
if sentence == previous_sentence and sentence in sentence_list:
name = random.choice(names)
description = random.choice(descriptions)
sentence = f'{name} is a {description}'
else:
previous_sentence = sentence
return sentence
else:
prevoius_sentence = sentence
return sentence
for i in range(50):
print(create_sentence())
2条答案
按热度按时间7jmck4yq1#
您提供的脚本看起来应该可以防止生成重复的句子,但是它存在一些问题,可能会导致它无法按预期工作。
首先,在while循环中,在检查句子是否重复之前,先将句子添加到sentence_list中,所以即使它是重复的,也会被添加到列表中,这意味着后面的重复检查将无法正常工作。
接下来,在while循环中,你有一个if-else块,如果当前句子是重复的,你可以在这里用一个新句子重新赋值语句变量,但是,这个块应该在while循环中,以便在每次生成一个重复的句子时执行。
此外,您使用相同的变量名来检查重复的句子和句子列表,这可能会导致混淆。
下面是脚本的修订版本,应该可以正常工作:
qxgroojn2#
我用一种更简洁的方式重写了代码,不使用全局变量,使代码更可重用:
create_sentence()
函数使用while
循环继续生成新句子,直到生成sentence_list
中尚未包含的句子。生成唯一句子后,将使用sentence_list.append(sentence)
行将其添加到sentence_list
中。create_sentence()
从程序的主逻辑中分离出来,使其更易于重用和测试。names
、descriptions
和sentence_list
作为参数,使函数依赖的数据更加清晰。while
循环而不是全局变量来跟踪上一句。main
函数创建变量并在for循环中调用create_sentence
函数。main
函数 Package 在if name == 'main'
块中,它允许代码作为模块导入,而无需运行main
函数。if else
块,因为它不是必需的。