中文字符、数字字符、英文字符、空格字符和其他字符的个数统计
记录写代码时遇到的坑。
包括习题要求,代码,及自己费时较多的地方。
(习题来自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处理。