用`$`

时间:2018-03-25 16:24:04

标签: python python-3.x

代码的问题是输入一个单词并检查单词的第一个字符是否在单词中重复。如果是,则将所有重复字符更改为$,但第一个字符除外。'

所以我编写了以下内容并使用逻辑从单词的第二个字符开始循环,以便第一个字符保持不变。

a=input()
for i in range(1,len(a)):
    if(a[i]==a[0]):
        b=a.replace(a[i],'$')
print(b)

对于上述程序,我将输入作为' agra'令我惊讶的是,输出为' $ gr $'。第一个角色也改变了。 我的逻辑有什么问题?以及你建议的其他解决方案?

3 个答案:

答案 0 :(得分:5)

更简单地完成:

代码:

b = a[0] + a[1:].replace(a[0], '$')

测试代码:

a = 'stops'
b = a[0] + a[1:].replace(a[0], '$')
print(b)

结果:

stop$

答案 1 :(得分:2)

有关python中的正确解决方案,请参阅Stephen Rauch的回答。

我认为你想要实现的目标是什么,在一个非常" unpythonic"方式,是:

a = input()
b = a # b is a copy 
for i in range(1, len(a)):
    if a[i] == a[0]:
        # replace i-th char of b by '$''
print (b)

如何更换?在python中:字符串是不可变的,这意味着你不能替换char"就位#34;。尝试这样做:

a='agra'
a[3] = '$'

你会收到错误:

TypeError: 'str' object does not support item assignment

如果你想用$替换字符串的第i个字符,你必须写:

b = b[:i] + '$' + b[i+1:]

即:从b[0],...,b[i-1]构建新字符串,添加$并继续b[i+1],...,{{1 }}。如果您在代码中使用它,则会得到:

b[len(a)-1]

好吧,它有效,但不能这样做,因为它非常" unpythonic"

开始编辑 顺便说一句,你不需要替换,你可以按字符构建字符串:

a = input()
b = a
for i in range(1, len(a)):
    if a[i] == a[0]:
        b = b[:i] + '$' + b[i+1:]
print (b)

结束编辑

这给了我这个想法:

a = input()
b = a[0] # start with first char
for i in range(1, len(a)):
    if a[i] == a[0]:
        b += '$' # $ if equals to first char
    else:
        b += a[i] # else the current char
print (b)

说明:列表理解采用a=input() b="".join('$' if i!=0 and c==a[0] else c for i,c in enumerate(a)) print(b) 的所有字符及其位置ai的作用)。对于每个情侣的位置,角色,如果位置不是enumerate(不是第一个角色),并且角色等于0,则放置a[0]。否则就把角色本身。将所有东西粘在一起以制作新的字符串。

同样,这不是你正在做的事情的正确方法,因为还有另一种方式更整洁,更容易(参见Stephen Rauch的回答),但是展示了你如何做到有时会处理python中的困难。

答案 2 :(得分:0)

a=input()
for i in range(1,len(a)):
    if(a[i]==a[0]):
        b=a[1:len(a)].replace(a[i],'$')
print(a[0]+b)

你改变了整个单词/句子'a':a.replace(...)