作业是:
您的任务是更正数字化文本中的错误。您只需要处理以下错误:
我的代码:
def correct(string):
for i in string:
if '5' in string:
string = string.replace('5','S')
elif '0' in string:
string = string.replace('0','O')
elif '1' in string:
string = string.replace('1','I')
return string
我知道这个解决方案不适合像:
这样的词Test.assert_equals(correct("51NGAP0RE"),"SINGAPORE");
有没有人有关于如何使这个更通用的功能适用于每个单词的提示?
答案 0 :(得分:5)
您可以直接使用str.replace
。
def correct(string):
return string.replace('5','S').replace('0','O').replace('1','I')
答案 1 :(得分:5)
为什么不使用https://codepen.io/anon/pen/ZxNVJa?editors=0011和str.maketrans
:
`SQLALCHEMY_DATABASE_URI = 'mysql://dt_admin:dt2016@localhost:3308/dreamteam_db'
包含在一个函数中:
>>> "51NGAP0RE".translate(str.maketrans('501', 'SOI'))
'SINGAPORE'
答案 2 :(得分:2)
不要使用elif
,因为只有在前一个失败的情况下才会进行测试。将它们全部更改为普通if
,代码将正常工作。
但正如评论中所提到的,没有必要进行任何测试。如果字母不在字符串中,replace()
将只返回原始字符串,所以没有任何伤害。
string = string.replace('5', 'S').replace('0', 'O').replace('1', 'I')
答案 3 :(得分:2)
这是使用列表理解的另一种方法:
def correct(str_, replacements = {'5': 'S', '0': 'O', '1': 'I'}):
return "".join(replacements.get(c, c) for c in str_)
print(correct("51NGAP0RE"))
#'SINGAPORE'