Python核心编程第二版 第七章课后练习 7.9.翻译

本文介绍了如何使用Python编写一个类似Unix tr命令的字符翻译程序。该程序接受源字符串、目的字符串和基本字符串作为参数,进行字符替换。还讨论了如何增加不区分大小写的翻译选项以及处理删除字符的操作,当源字符串中的某些字符在目的字符串中没有对应时,将从结果中移除。

版本:python3.7.4

7.9.翻译。(a)编写一个字符翻译程序(功能类似于Unix中的tr命令)。我们将这个函数叫做tr(),他又三个字符串做参数:源字符串、目的字符串、基本字符串,语法定义如下:def tr(srcstr,dststr,string)。srcstr的内容是你打算“翻译”的字符集合,dststr是翻译后得到的字符集合,而string是你打算进行翻译操作的字符串。举例来说,如果srcstr='abc',dststr='mno',string='abcdef'。那么tr()的输出将是'mnodef'。注意这里len(srcstr)=len(dststr)。在这个联系里,你可以使用内建函数chr()和ord(),但它们并不一定是解决这个问题所必不可少的函数。
(b)在这个函数里增加一个标志函数,来处理不区分大小写的翻译问题。
(c)修改你的程序,使它能够处理删除字符的操作。字符串srcstr中不能够映射到字符串dststr中的中字符的多余字符都将被过滤掉。换句话说,这些字符没有映射到dststr字符串中的任何字符,因此就从函数返回的字符里给过滤掉了。举例来说,如果scrstr='abcdef',dststr='mno',string='abcdefghi',那么tr()将输出'mnoghi',注意这里len(srcstr)>=len(dststr).

def tr(srcstr,dststr,str,ignore_case=True):
    if ignore_case:
        srcstrl=srcstr.lower()
        strl=str.lower()
    else:
        srcstrl = srcstr
        strl = str
    if srcstrl not in strl:
        print("no match: ",str)
    else:
        srclen=len(srcstr)
        strlen=len(str)
        looplen=strlen-srclen    
        for i in range(looplen+1):
            if strl[i:i+srclen]==srcstrl:            
                strstart=str[0:i]
                strmeddle=dststr
                strend=str[i+srclen:strlen] 
                break
        newtring=strstart+strmeddle+strend
        print("match: ",newtring)

if __name__=='__main__':
    tr('hello','nihao,','hElloyypython')

ignore_case=True ,运行结果:   match: nihao,yypython

ignore_case=False ,运行结果:   no match: hElloyypython

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值