python笔记:案例之 统计字符串里各种字符的个数

中文字符、数字字符、英文字符、空格字符和其他字符的个数统计

记录写代码时遇到的坑。

包括习题要求,代码,及自己费时较多的地方。

(习题来自MOOC公开课,嵩天老师的《Python语言程序设计基础》第二版)

一、习题要求

统计不同字符个数。用户从键盘输入一行字符,编写一个程序,统计并输出其中英文字符、数字、空格和其他字符的个数。

二、思路分析

最重要的是找到一个标准,可以利用if语句把需要统计的字符区别开来。

显而易见,python3.X直接使用unicode这个特点,就可以利用,

 

 

第1步:确定unicode编码范围:

  • 汉字: 十六进制 [0x4e00, 0x9fa5] / 十进制 [19968,40869]
  • 数字:十六进制 [0x30, 0x39] / 十进制 [48, 57]
  • 小写字母:十六进制 [0x61, 0x7a] / 十进制 [97,122]
  • 大写字母:十六进制 [0x41, 0x5a] / 十进制 [65, 90],

注:chr(x) & ord(x)使用的是 单个字符,或者十进制INT格式的unicode编码;

第2步:保证输出结果只有一行

第3步:编写代码

三、代码:

 

text = input('请输入字符:')                       # 界面:让用户输入字符 
zgeshu = ygeshu = sgeshu = qgeshu = kgeshu = 0    # 设置初始值,以便用于for in循环
for i in text:
    if 40869 >= ord(i) >= 19968:                  # 本处使用十进制,简单。或者使用十六进制,再用ord('\u9fa5')转换为十进制的unicode编码;
        zgeshu += 1
    elif 57 >= ord(i) >= 48:
        sgeshu += 1
    elif 122 >= ord(str.lower(i)) >= 97:          # 直接使用str.lower()函数,将英文字符统一为小写,节省代码;
        ygeshu += 1
    elif i == ' ':
        kgeshu += 1
    else:
        qgeshu += 1
print('中文字符个数为{}'.format(zgeshu), '\n'+'数字字符个数为{}'.format(sgeshu), '\n'+'英文字符个数为{}'.format(ygeshu), '\n'+'空格字符个数为{}'.format(kgeshu), '\n'+'其他字符个数为{}'.format(qgeshu))

注:

- print()函数和for语句对齐后,输出结果仅仅是最后统计值,输出一次。

- 使用'\n'+'string'来使得输出结果换行;

- python3.x 默认十进制之前直接使用 十六进制的汉字编码,易出错,如‘u9fa5’会被当作string处理

你可能感兴趣的:(Python,笔记)