Python 编码重复的单词在代码中不起作用?

Python 编码重复的单词在代码中不起作用?,python,python-3.x,string,Python,Python 3.x,String,我是一名学习者,我在代码战中做了一个字符编码练习 我的代码在测试“(“and”)和随机字符时失败 def duplicate_encode(word): #your code here word = word.lower() for ch in word: if word.count(ch) == 1: word = word.replace(ch, "(") else:

我是一名学习者,我在代码战中做了一个字符编码练习 我的代码在测试“(“and”)和随机字符时失败

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

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

此外,如果您的函数使用了
replace(ch,…)
,并且
ch
等于
,则您正在更改迄今为止添加的所有括号

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

def duplicate_encode(字):
word=word.lower()
新=[]
对于ch in word:
如果字计数(ch)=1:
new.append(“(”)
其他:
new.append(')')
返回“”。加入(新)

您评论中的一行:

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

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

在哪个输入字符串中失败?例如,对于括号或随机字符字符串HaO@lknFmcxzI(RHJYou非常接近。我对代码战进行了测试,但19次测试都失败了,其中一次是:lPFwRan)wbuHJxb!vJTPdl我不太习惯一行程序,但如果您能向我解释一下,这是我在git hub上找到的一些解决方案,可能是
return'.join(''If word.lower().count(ch)=1 else'),对于ch in word.lower()。
我已经修改了我的答案,并添加了对一行程序的描述。