我正在尝试编写一个简单的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"]
有人可以告诉我,我在这里缺少什么?
答案 0 :(得分:1)
你可以这样做:
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'
答案 1 :(得分:1)
您也可以使用string.replace
。
>>> s = "babble"
>>> s[0] + s[1:].replace(s[0], "*")
输出:
'ba**le'
答案 2 :(得分:0)
如果您要比较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()
和具有相同条件表达式的列表推导:
string_final = string[0] + ''.join(['*' if s == string[0] else s for s in string[1:]])