【问题标题】:Encoding duplicate words is not working in the code?编码重复单词在代码中不起作用?
【发布时间】:2020-09-19 08:04:30
【问题描述】:

我是一名学习者,我正在代码战中进行字符编码练习 我的代码在“(”和“)”和随机字符的测试中失败

def duplicate_encode(word):
    #your code here
    word = word.lower()
    for ch in word:
        if word.count(ch) == 1:
            word = word.replace(ch, "(")
        else:
            word =  word.replace(ch, ")")
    return word

谁能帮忙 问题陈述如下: 本练习的目标是将字符串转换为新字符串,其中如果该字符在原始字符串中仅出现一次,则新字符串中的每个字符为“(”,如果该字符在原始字符串中多次出现,则为“)”细绳。在确定字符是否重复时忽略大小写。

【问题讨论】:

  • 在哪个输入字符串中失败了?
  • 用于括号或一串随机字符
  • 例如 HaO@lknFmcxzI( RHJ

标签: python python-3.x string


【解决方案1】:

例如输入:HaO@lknFmcxzI( RHJ

当您的迭代到达( 时,它将计算字符串中( 的数量,包括一些不在原始字符串中的数量,因为您的函数将新的( 放入字符串中。

此外,如果您的函数使用replace(ch, ...) 并且ch 等于(),那么您将更改到目前为止添加的所有括号。

避免这种情况的一种方法是不要在查看字符串时不断更改它,而是建立一个新的单独的字符序列。

def duplicate_encode(word):
    word = word.lower()
    new = []
    for ch in word:
        if word.count(ch) == 1:
            new.append('(')
        else:
            new.append(')')
    return ''.join(new)

您的 cmets 中的一个衬垫:

''.join('(' if word.lower().count(ch) == 1 else ')' for ch in word.lower())

使用生成器表达式。它遍历字符串(转换为小写),并为每个字符串生成()(取决于计数),然后在最后将所有字符连接成一个新字符串。

【讨论】:

  • 你已经很接近了。
  • 我对代码大战进行了测试,但它失败了 19 次测试,其中之一是:
  • lPFwRan)wbuHJxb!vJTPdl e
  • 我不太习惯使用一个衬垫,但这是我在 git hub 上找到的一些解决方案如果你能向我解释一下,也许 return ''.join('(' if word.lower().count(ch) == 1 else ')' for ch in word.lower())
  • 我已经修改了我的答案,并添加了对您的单线的描述。
猜你喜欢
  • 2012-11-28
  • 2018-03-10
  • 1970-01-01
  • 1970-01-01
  • 2017-03-24
  • 2014-02-03
  • 2013-02-06
  • 2016-10-02
  • 2018-04-30
相关资源
最近更新 更多