首页 > 解决方案 > 我在这个问题上做错了什么来编码字符串?

问题描述

我一直在尝试为代码战争问题/kata编写此程序,它读取一个字符串,并将字符串转换为一个新字符串,其中新字符串中的每个字符都是“(”,如果该字符在原始字符串中只出现一次,或者")" 如果该字符在原始字符串中出现多次。在确定字符是否重复时忽略大小写。

所以,下面是我写的小代码,在开始解决更大的问题之前:

a = "Eren"
b = a.lower()
for i in b:
    c = b.count(i)
    print(c)
    if c == 1:
        d = b.replace(i, "(")
    else:
        d = b.replace(i, ")")

print(d)

我期待输出是

)()(

但我得到的是

ere(

我究竟做错了什么?

标签: pythonstringfor-loopreplaceencoding

解决方案


您还需要更新原始字符串。如果你不这样做,你只是d用新的值写了以前的值。由于b不变,你得到ere(. 相反,做

a = "Eren"
b = a.lower()
for i in b:
    c = b.count(i)
    print(c)
    if c == 1:
        d = b.replace(i, "(")
        b=b.replace(i, "(")  #==== Replace the original string too
    else:
        d = b.replace(i, ")")
        b=b.replace(i, ")") #==== Replace the original string too

print(d)

您的输出如下所示:

)()(

b但是,在迭代时更改值看起来不是一个好主意。相反,请执行以下操作:

a = "Eren"
b = a.lower()
d=''
for i in b:
    c = b.count(i)
    print(c)
    if c == 1:
        d += '('
    else:
        d+=')'
print(d)

推荐阅读