python中的频率分析程序

2024-05-19 10:08:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我是python编程新手。现在,在程序的一部分中,我想定义一个用于频率分析的类,并以漂亮的方式打印它:

Letter    Occurrence    Percentage
  a          12            4.12%
  b          7             3.15%
  c          21            7.67%
 ...        ...             ...

这是我的密码:

class Analysis():

    def __init__(self, sentence, freq_dict = {}):
        self.sentence = sentence
        self.freq_dict = freq_dict

    @property
    def frequency(self):
        print("\t\tLetter\t\tOccurrence\t\tPrecentage")
        for letter, occurrence in enumerate(self.freq_dict):
            return f"\t\t{letter}\t\t{occurrence}\t\t{round(occurrence*100/len(sentence), 2)}%"

    @frequency.setter
    def frequency(self, sentence):
        self.sentence = sentence
        for letter in sentence:
            freq_dict[letter] = self.sentence.count(letter)
        return freq_dict


sentence = input("please enter your sentence: ").lower()
object = Analysis(sentence)
print(object.frequency())

我想在类中定义句子的输入,而不是作为全局变量

也许它可以短一点或者换几行。(我可以用collections.Counter(句子)代替字典,它返回一个元组)


Tags: inselfforreturn定义objectdefanalysis
1条回答
网友
1楼 · 发布于 2024-05-19 10:08:56

您的代码中有一些错误。 下面是一些您可以做的更改

1-要在类内定义输入函数(而不是作为全局变量),可以定义一个名为get_语句的classmethod

2-您可以使用collections模块中的Counter()创建字母及其出现次数的字典。 要提取和打印结果,可以定义extract()实例方法

(将按出现次数从高到低对结果进行排序。)

代码如下:

from collections import Counter

class Analysis():

    def __init__(self, sentence):
        self.sentence = sentence

    def extract(self):
        print("\n\t\tLetter\t\tOccurrence\t\tPrecentage")
        print(f"\t\t {'-' * 39}")
        sorted_f = sorted(Counter(self.sentence).items(), key = lambda kv: kv[1], reverse=True)
        for letter, occurrence in sorted_f:
            print(f"\t\t  {letter}\t\t\t    {occurrence}\t\t\t  {round(occurrence * 100 / len(self.sentence), 2)}%")
        return " "

    @classmethod
    def get_sentence(cls):
        sentence = input("Enter your sentence: ").lower().replace(" ", "")
        return cls(sentence)

obj = Analysis.get_sentence()
obj.extract()

输出:

      Letter      Occurrence      Precentage
                         -
        e             5             21.74%
        n             4             17.39%
        s             3             13.04%
        t             3             13.04%
        i             2             8.7%
        o             1             4.35%
        m             1             4.35%
        c             1             4.35%
        h             1             4.35%
        p             1             4.35%
        u             1             4.35%

相关问题 更多 >

    热门问题