用大写字母z替换大写字母y和用小写字母z替换大写字母y的代码或反之

时间:2016-03-23 23:11:26

标签: python python-3.x

我的任务是编写一个名为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)

虽然我收到错误但我不明白要处理哪一行。

4 个答案:

答案 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)