【问题标题】:Frequency Analysis program in pythonpython中的频率分析程序
【发布时间】:2020-08-08 03:30:33
【问题描述】:

我是 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(sentence),它返回一个元组)。

【问题讨论】:

    标签: python python-3.x class properties


    【解决方案1】:

    您的代码中有一些错误。 这里有一些你可以做的改变。

    1-要在类内部定义一个输入函数(不是全局变量),可以定义一个classmethod命名为get_sentence

    2- 您可以使用集合模块中的 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%
    

    【讨论】:

      猜你喜欢
      • 2012-02-23
      • 1970-01-01
      • 1970-01-01
      • 2014-05-23
      • 2011-05-17
      • 2017-04-03
      • 1970-01-01
      • 2019-06-21
      • 2010-12-20
      相关资源
      最近更新 更多