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

被折叠的 条评论
为什么被折叠?



