diff --git a/基本结构/状态机/81.py b/基本结构/状态机/81.py new file mode 100644 index 0000000..cc083d4 --- /dev/null +++ b/基本结构/状态机/81.py @@ -0,0 +1,56 @@ +import cppy.cp_util as util +from collections import Counter + +class WordFrequencyStateMachine: + def __init__(self, file_path): + self.file_path = file_path + self.content = None + self.words = None + self.word_freq = None + self.state = 'IDLE' + + def transition_to_read_file(self): + try: + with open(self.file_path, 'r', encoding='utf-8') as file: + self.content = file.read() + self.state = 'WORDS_SPLIT' + except FileNotFoundError: + print(f"文件 {self.file_path} 未找到。") + except Exception as e: + print(f"读取文件时发生错误: {e}") + + def transition_to_split_words(self): + if self.content is not None: + self.words = util.extract_str_words(self.content) + self.state = 'CALCULATE_FREQ' + else: + print("文件内容为空,无法分割单词。") + + def transition_to_calculate_freq(self): + if self.words is not None: + self.word_freq = Counter(self.words) + self.state = 'DONE' + else: + print("单词列表为空,无法计算词频。") + + def run(self): + while self.state != 'DONE': + if self.state == 'IDLE': + self.transition_to_read_file() + elif self.state == 'WORDS_SPLIT': + self.transition_to_split_words() + elif self.state == 'CALCULATE_FREQ': + self.transition_to_calculate_freq() + else: + print(f"未知状态: {self.state}") + break + + return self.word_freq + +# 使用状态机计算词频 +state_machine = WordFrequencyStateMachine( util.testfilepath ) +word_frequencies = state_machine.run() + +# 打印结果 +for word, freq in word_frequencies.most_common(10): + print(f"{word}: {freq}") \ No newline at end of file