第二章 字符串处理

1、中英文混排时对齐

UTF-8编码,中文占3个字节,GBK编码,中文占2个字节。如果只按照字节计算是对不齐的。

解决:获取中文长度,通过对中文字符的文字长度取齐,计算和英文字符长度的差值,处理公式如下:

{:<|>|^ x}

<:表示左对齐

>:表是右对齐

^:表示居中对齐

x:不足x位时,会自动补齐(默认空格补齐)

2、实现数据编号的集中方法

方法一:利用zfill()函数实现数字编号

zfill()方法返回指定长度的字符串,原字符串需要右对齐,在前面补0

语法:

str.zfill(width)

方法二:利用format()函数实现数据编号

对数据编号,也是对字符串格式化的一种方式。

{:[[fill] align][width]]}.format(*args,**kwargs)

fill:可以填充0,也可是任意字符:

align:是对齐方式,<左对齐,>右对齐,^居中对齐,=内容右对齐且只对数字类型有效。

width:数字宽度,表示总共输出多少位数字。

例:对数字1进行3位编号,右对齐且填充0

'{:0<3}'.format(1)

3、验证用户输入的数据

对输入的数据进行验证,通常分为纯数字验证、字符验证、字符与数字混合验证、去除特殊字符的混合验证。

方法一:利用字符串的isalnum()、isalpha()等字符判断方法进行验证

str.isalnum():所有字符都是字母或者数字

str.isalpha():所有字符都是字母

str.isdigit():所有字符都是数字

str.lower():所有字符都是小写

str.upper():所有字符都是大写

str.istitle():所有字符都是首字母大写

str.isspace():所有字符都是空白字符、\t、\n、\r

方法二:通过字符的ASCII码进行验证

例:输入字符的ASCII码不为数字字符时。其中ord()是获取字符的ASCII码值。

if ord(i) not in range(ord('1'),ord('9'))

例:要求输入的字符为所有数字、字母和符号,除了“@\/#”四个

数字、字母和符号的ASCII值范围(十进制)是33~126,需要去除的四个字符ASCII值为64、92、47、35

if ord(i) in range(33,127):  #在这个范围

         if orf(i) in [64,92,47,35]:  #又等于要去除的,则输出非法

                print('输入了非法字符',i,‘请重新输入!’)

4、使用python逆序输出字符串

对数据进行逆序输出或者处理。

方法一:使用range()函数,range(start,stop,[,step])

range返回的是可迭代对象,类型是对象

例:

big20=‘赵钱孙李周吴郑王’

for x in range(len(big20)-1,-1,-1)

        print(big20[x],end='')     #步长step为负数时,表示从列表最后读取,从而实现倒序输出。

方法二:使用reversed()函数吧字符串转成逆序列表

reversed()是一个内置函数,用于将数据反转。

例:

for x in reversed(big20):

        print(x,end='')

5、如何生成虚拟姓名

编写虚拟姓名生成程序,首先要建立姓氏库、名字库,然后使用choice()函数从库中随机收取后append()方法组合。

6、如何按照拼音顺序对中文汉字进行排序

需要借助第三方模块xpinyin将中文汉字转换为拼音,再按拼音顺序排序,具体步骤如下:

(1)安装第三方模块xpinyin。在CMD命令行窗口中输入安装命令:

pin install xpinyin

(2)导入xpinyin模块,代码如下:

form xpinyin import Pinyin  # 导入汉字转拼音模块

(3)编写自定义函数,用于按中文汉字进行排序

def my_sort(wordlist):        # 指定要排序的列表
    pin = Pinyin()        # 创建汉字转拼音对象
    temp = []            # 保存转换结果的空列表
    for item in wordlist:        # 遍历品牌名称列表
        temp.append((pin.get_pinyin(item), item)) # 将汉字的拼音和汉字放到一个元组中,再添加到列表中
    temp.sort()            # 对列表进行排序
    result = []            # 保存排序后的列表
    for i in range(len(temp)):    # 遍历排序后的列表
        result.append(temp[i][1])    # 取出汉字保存到新列表中
    return result            # 返回排序后的列表

(4)调用自定义的按照中文汉字排序的函数my_sort(),传入要排序的中文列表,并输出

print(my_sort(['华为', '小米' , '苹果', '三星' ])) # 调用函数时指定一个品牌名称列表

7、如何生成高考填报志愿时的姓名区位码

python生成区位码,只需要使用encode()方法对汉字进行GB2312编码,然后再根据区位码的生成算法,使用生成的GB2312编码进行计算即可

区位码=GB2312-160<十六进制数A0>

代码:

def getCode(chinese):
    '''
    获取汉字的对应区位码
    :param chinese: 单个汉字
    :return: 获取到的区位码
    '''
    barray = chinese.encode('gb2312')    # 用GB2312对汉字进行编码
    # 计算区位码(如果是1位,则格式为2位)
    code = '{0:02d}'.format((barray[0] - 160)) + '{0:02d}'.format((barray[1] - 160))
    return code                # 返回区位码
while True:                # 循环输入
    name = input('请输入姓名:')        # 记录输入的姓名
    for word in name:            # 遍历输入的姓名
        print(word,':',getCode(word))    # 输入单个汉字及对应区位码

8、如何使用MD5或SHA1等算法对用户密码进行加密

(1)MD5加密方法

import hashlib
str = input('请输入要加密的字符串:')
# MD5加密(返回32位十六进制字符串)
md5=hashlib.md5()
md5.update(str.encode('utf-8'))
print('MD5加密:',md5.hexdigest())

(2)SHA1加密

import hashlib
str = input('请输入要加密的字符串:')
# SHA1加密(返回40位十六进制表示字符串)
sha1=hashlib.sha1()
sha1.update(str.encode('utf-8'))
print('SHA1加密:',sha1.hexdigest())

(3)SHA256加密

import hashlib
str = input('请输入要加密的字符串:')
# SHA256加密(返回64位十六进制字符串)
sha256=hashlib.sha256()
sha256.update(str.encode('utf-8'))
print('SHA256加密:',sha256.hexdigest())

(4)采用哈希算法计算后的MD5加密
import hmac
str = input('请输入要加密的字符串:')
pwd=str.encode('utf-8')
key='id'.encode('utf-8')
h=hmac.new(key,pwd,digestmod='MD5')
print('更安全的MD5加密:',h.hexdigest())

9、比较两种字符串的拼接方法哪个更省时

方法一:使用“+”号连接

方法二:使用列表的append()方法进行连接,在通过字符串的join()方法,将列表的元素合并成字符串

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值