我的任务是编写一个名为fix_yz的函数。此函数采用单个参数,该参数将是一个字符串。我的函数返回这个字符串,交换了所有的y和z,并交换了所有的Y和Z. 我做了什么:
replace = {"Y":"Z","y":"z","Z":"Y","z":"y"}
def fix_yz(Input):
replaced=[]
for yzYZ in Input:
if yzYZ in replace:
yzYZ = replace[replaced]
replaced.append(yzYZ)
return ''.join(replaced)
虽然我收到错误但我不明白要处理哪一行。
答案 0 :(得分:3)
这完全符合您的需要:
translation_table = str.maketrans({"Y":"Z","y":"z","Z":"Y","z":"y"})
def fix_yz(input_):
return input_.translate(translation_table)
您创建转换表,然后使用它翻译所有内容。它的执行时间非常快,而且是一个非常简单的解决方案。
答案 1 :(得分:1)
您的代码有两个错误:return语句上的缩进错误和错误的变量。您尝试按列表索引字典。
修正版:
replace = {"Y":"Z","y":"z","Z":"Y","z":"y"}
def fix_yz(Input):
replaced=[]
for yzYZ in Input:
if yzYZ in replace:
yzYZ = replace[yzYZ]
replaced.append(yzYZ)
return ''.join(replaced)
答案 2 :(得分:0)
正如已经指出的那样,你只是在代码中使用了错误的变量,你试图使用[replaced]
进行查找,这是一个不是yzYZ
的列表,它是字符串中的每个字符:
replace = {"Y":"Z","y":"z","Z":"Y","z":"y"}
def fix_yz(Input):
replaced = []
for yzYZ in Input:
if yzYZ in replace:
yzYZ = replace[yzYZ] # replace[yzYZ]
replaced.append(yzYZ)
return ''.join(replaced)
如果char不在 replace dict中,您还可以使用dict.get
使用每个字符作为默认值来简化自己的逻辑:
def fix_yz(inp):
return ''.join([replace.get(ch, ch) for ch in inp])
如果您使用str.translate,则需要使用每个字符的ord进行dict映射:
replace = {ord("Y"): "Z", ord("y"): "z", ord("Z"): "Y", ord("z"): "y"}
def fix_yz(inp):
return inp.translate(replace)
答案 3 :(得分:0)
在Python3中你可以做到
def fix_yz(s):
return s.translate(str.maketrans("yYzY", "zZyY"))
或
table = {ord("Y"):"Z",ord("y"):"z",ord("Z"):"Y",ord("z"):"y"}
def fix_yz(s):
return s.translate(table)
in< Python3就是
from string import maketrans
table = maketrans("yYzY", "zZyY")
def fix_yz(s):
return s.translate(table)