import random class BlankPuzzle(): """填空题谜题生成器 Args: text: 原始字符串(需要 "/" 分割句子, 末尾应有 "/") min_denominator: 最小概率倒数(如占所有可生成填空数的 1/7 中的 7, 若期望值小于 1, 则取 1) """ def __init__(self, text, min_denominator): self.text = text self.min_denominator = min_denominator self.wording = "填空题 - 尚未刷新谜题" self.answer = ["填空题 - 尚未刷新谜题"] def refresh(self): # 刷新谜题 placeholder = "___SLASH___" tmp_text = self.text.replace("/", placeholder) words = tmp_text.split(placeholder) if not words: return "" words = [word for word in words if word] num_blanks = min(max(1, len(words) // self.min_denominator), len(words)) indices_to_blank = random.sample(range(len(words)), num_blanks) indices_to_blank.sort() blanked_words = list(words) answer = list() for index in indices_to_blank: blanked_words[index] = "__" * len(words[index]) answer.append(words[index]) result = [] for word in blanked_words: result.append(word) self.answer = answer self.wording = "".join(result) def __str__(self): return f"{self.wording}\n{str(self.answer)}" # demo text = """我联合国人民/同兹/决心/: /欲免/后世/再遭/今代人类/两度/身历/惨不堪言/之战祸/.../""" riddle = BlankPuzzle(text, 3) print(riddle) riddle.refresh() print(riddle)