【问题标题】:A code that replaces a capital y with a capital z and a lowercase y with a lowercase z or the other way around将大写 y 替换为大写 z 并将小写 y 替换为小写 z 或相反的代码
【发布时间】:2016-03-23 23:11:25
【问题描述】:

我在这里的任务是编写一个名为 fix_yz 的函数。此函数采用单个参数,该参数将是一个字符串。我的函数返回这个字符串,所有的 ys 和 zs 都交换了,所有的 Ys 和 Zs 交换了。 我做了什么:

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)

虽然我得到一个错误并且我不明白要处理哪一行。

【问题讨论】:

  • 错误是什么?
  • 您的代码有缩进错误。空格在 python 中很重要,尽量不要混合制表符和空格。
  • 它说一个类型错误:不可散列类型:“list”@wallyk
  • 错误是yzYZ = replace[replaced]应该是yzYZ = replace[yzYZ]

标签: python python-3.x


【解决方案1】:

这正是您需要的:

translation_table = str.maketrans({"Y":"Z","y":"z","Z":"Y","z":"y"})

def fix_yz(input_):
    return input_.translate(translation_table)

您创建一个翻译表,然后使用它翻译所有内容。它的执行时间非常快,而且解决方案非常简单。

【讨论】:

【解决方案2】:

您的代码有两个错误: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)

【讨论】:

    【解决方案3】:

    正如已经指出的那样,您只是在代码中使用了错误的变量,您正在尝试使用 [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)
    

    如果字符不在您的 replace 字典中,您还可以使用 dict.get 使用每个字符作为默认值来简化您自己的逻辑:

    def fix_yz(inp):
       return ''.join([replace.get(ch, ch) for ch in inp])
    

    如果您要使用str.translate,您需要使用每个字符的顺序来进行 dict 映射:

    replace = {ord("Y"): "Z", ord("y"): "z", ord("Z"): "Y", ord("z"): "y"}
    
    def fix_yz(inp):
        return inp.translate(replace)
    

    【讨论】:

      【解决方案4】:

      在 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)
      

      from string import maketrans
      
      table = maketrans("yYzY", "zZyY")
      
      def fix_yz(s):
          return s.translate(table)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-10-15
        • 2019-06-06
        • 1970-01-01
        • 2016-02-24
        • 2018-12-28
        • 1970-01-01
        • 2011-07-21
        • 2011-10-03
        相关资源
        最近更新 更多