繁体   English   中英

用字符串中的特殊字符替换字符

[英]Replace character with a special char in a string

我正在尝试编写一个简单的python代码来从用户获取一个字符串并返回其第一个字符的所有出现都已更改为“*”的字符串,期望第一个字符本身!

示例:“babble”产生“ba ** le”

def main():
    string = raw_input("Enter a string:")
    string_len = len(string)
    string_final = range(0,string_len-1)

    for i in range(0,string_len-1):
        if string[0] == string[i+1]:
           string_final[i] = "*"
        else:
            string_final[i] = string[i]
    print string_final

if __name__ == '__main__':
    main()

输出是

>>> 
[u'b', '*', '*', u'b', u'l']

我期待输出

["b" "a" "*" "*" "l" "e"]

有人能告诉我,我在这里错过了什么?

您可以这样做:

def a(your_str):
    return your_str[0]+''.join(['*' if i==your_str[0] else i for i in your_str[1:]])

例子:

>>> a('babble')
'ba**le'

>>> a('tomato')
'toma*o'

>>> a('hehehe')
'he*e*e'

你也可以使用string.replace

>>> s = "babble"
>>> s[0] + s[1:].replace(s[0], "*")

输出:

'ba**le'

如果你是比较字符在i + 1 ,做拷贝的时候没有配套原第一,而不是一个在那个角色i

if string[0] == string[i + 1]:
    string_final[i] = "*"
else:
    string_final[i] = string[i + 1]  # copy the character at i + 1

这可以简化为:

string_final[i] = "*" if string[0] == string[i + 1] else string[i + 1]

你的循环当然不会将第一个字符包含在string_final中; 您可以使用.append()调用而不是使用range()预先构建列表:

string = raw_input("Enter a string:")
string_final = string[:1]

for i in range(0, len(string) - 1):
    string_final.append("*" if string[0] == string[i+1] else string[i+1])

print string_final

要在一行中执行函数,需要使用str.join()和具有相同条件表达式的列表str.join()

string_final = string[0] + ''.join(['*' if s == string[0] else s for s in string[1:]])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM