python核心编程 练习7-9

7-9. 翻译

(a) 编写一个字符翻译程序(功能类似于 Unix 中的 tr 命令)。我们将这个函数叫做 tr(),它有三个字符串做参数: 源字符串、目的字符串、基本字符串,语法定义如下:

def tr(srcstr, dststr, string)srcstr 的内容是你打算“翻译”的字符集合,dsrstr 是翻译后得到的字符集合,而 string 是你打算进行翻译操作的字符串。举例来说,如果 srcstr == 'abc', dststr == 'mno', string =='abcdef', 那么 tr()的输出将是'mnodef'. 注意这里 len(srcstr) == len(dststr).在这个练习里,你可以使用内建函数 chr() 和 ord(), 但它们并不一定是解决这个问题所必不可少的函数。

(b) 在这个函数里增加一个标志符参数,来处理不区分大小写的翻译问题。
(c)修改你的程序, 使它能够处理删除字符的操作。 字符串 srcstr 中不能够映射到字符串 dststr中字符的多余字符都将被过滤掉。换句话说,这些字符没有映射到 dststr 字符串中的任何字符,因此就从函数返回的字符里被过滤掉了。举例来说:如果 srcstr == 'abcdef', dststr == 'mno',string == 'abcdefghi', 那么 tr()将输出'mnoghi'. 注意这里 len(srcstr) >= len(dststr)

(c)修改你的程序, 使它能够处理删除字符的操作。 字符串 srcstr 中不能够映射到字符串 dststr中字符的多余字符都将被过滤掉。换句话说,这些字符没有映射到 dststr 字符串中的任何字符,因此就从函数返回的字符里被过滤掉了。举例来说:如果 srcstr == 'abcdef', dststr == 'mno',string == 'abcdefghi', 那么 tr()将输出'mnoghi'. 注意这里 len(srcstr) >= len(dststr)


def tr(srcstr,dststr,string):
    '''
用dststr替换string中srcstr字符串,注意srcstr与dststr等长
'''
    lenb=len(srcstr)
    lens=len(string)
    count=0  #用一个计数器计算string中srcstr字符串出现几次
    i=0
    j=0
    newstring=''
    while i<=(lens-lenb):         #查找并替换
            if srcstr not in string[i:i+lenb]:
                i=i+1
            else:
                newstring=newstring+string[j:i]
                newstring=newstring+dststr
                i=i+lenb
                j=i
                count=count+1
    newstring=newstring+string[j:lens]  #最后添加末尾字符串
    return newstring

def strlower(string):
    '''
将一个字符串变为小写
'''
    lens=len(string)
    newstring=''
    for i in range(0,lens):
        if 64<ord(string[i])<91:
            newstring=newstring+chr(ord(string[i])+32)
        else:
            newstring=newstring+string[i]
    return newstring



if __name__ == '__main__':
    print(tr(strlower(input('源字符串为:')),strlower(input('目标字符串为:'))\
             ,strlower(input('母串为:'))))
    #区分大小写用一下代码
    #print(tr(input('源字符串为:'),input('目标字符串为:'),input('母串为:')))



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值