如何使用python的 面向对象去编写,求大佬们解析一下

如何使用python的 面向对象去编写,求大佬们解析一下

问题描述:

根据描述设计类Count:在控制台接收一段字符串,当按下”Enter时分别统计|输入的字符串中汉字、字母、数字、特殊符号(问号冒号加号减号句号逗|号空格百分号引号感叹号)的个数,例如:

|输入:你好,python66...

输出:

汉字:['你', '好]

数字:["6', '6', '6']

字母:['p', 'y', 't, 'h', 'o', 'n']

特殊符号:[,'”,'

要求:

1、对象属性包括:

input_ str(用 于接收用户输入的字符串)

result(字典,用于存放最后的结果(各字符类型有哪些字符) )2、构造方法,用户初始化对象属性

count(self),统计各字符类型

show(self),打印结果

4、程序放到循环中一直执行下去

5、正则规则:

汉字: [\u4e00-\u9fa5]

字母: [a-zA-Z]

数字: [0-9]

特殊符号: [! ,).,%;,,, ,,-,+,?]

import re

class Count:
    """键盘输入统计类"""
    
    def __init__(self):
        """构造函数"""
        
        self.input_str = None # 接收用户输入的字符串
        self.result = {
            '汉字': list(),
            '数字': list(),
            '字母': list(),
            '特殊符号': list()
        } # 统计结果
        
    def count(self):
        """对用户输入的字符串做统计"""
        
        r = re.compile(r'[\u4e00-\u9fa5]').findall(self.input_str)
        self.result['汉字'].extend(r)
        
        r = re.compile(r'[0-9]').findall(self.input_str)
        self.result['数字'].extend(r)
        
        r = re.compile(r'[a-zA-Z]').findall(self.input_str)
        self.result['字母'].extend(r)
        
        r = re.compile(r'[!,).,%;,,, ,,-,+,?]').findall(self.input_str)
        self.result['特殊符号'].extend(r)
    
    def show(self):
        """显示统计结果"""
        
        print('汉字:%s'%str(self.result['汉字']))
        print('数字:%s'%str(self.result['数字']))
        print('字母:%s'%str(self.result['字母']))
        print('特殊符号:%s'%str(self.result['特殊符号']))
    
    def run(self):
        """接收用户输入,空输入表示结束"""
        
        while True:
            self.input_str = input('请输入:')
            if self.input_str:
                self.count()
            else:
                print('输入结束,统计结果如下:')
                self.show()
                break

if __name__ == '__main__':
    chin = Count()
    chin.run()