按位置更改字符串中的字符

时间:2015-05-08 05:04:03

标签: python string list

问题是: 编写一个接受三个参数的函数,一个字符串和两个整数。 该字符串代表猜谜游戏中的一个单词。这两个整数代表 以字母为起点的位置。剩下的字母应该 被*符号替换。该函数应返回结果字符串。

下面的文档应该清楚说明:

def hangman_start(strng, pos1, pos2):
    """
    >>> hangman_start("banana", 0, 5)
    'b****a'
    >>> hangman_start("passionfruit", 0, 7)
    'p******f****'
    >>> hangman_start("cherry", 3, 4)
    '***rr*'
    >>> hangman_start("peach", 2, 10)
    '**a**'
    >>> hangman_start("banana", -1, -1)
    '******'
    """
if __name__=="__main__":
    import doctest
    doctest.testmod(verbose=True)

我试过这样做如下:

def hangman_start(strng, pos1, pos2):    
    count=0
    result=""
    while count<len(strng):
        if strng[count]==strng[pos1] or strng[count] == strng[pos2]:
             result += strng[count]
        else:
            result += "*"
        count+=1
    return result

但它无法正常工作。 例如:hangman_start("banana", 0, 5)我得到ba*a*a

任何善良的人都能帮助我吗?

4 个答案:

答案 0 :(得分:1)

如果我理解正确,您希望*替换所提供位置上除之外的所有字符:

def hangman_start(strng, pos1, pos2):
  return "".join([char if index in (pos1,pos2) else '*' for index, char in enumerate(strng)])

print hangman_start("asdasd", 3, 4)

以上打印

***as*

如果你想坚持你的实现,只需用索引比较替换index-index比较:

def hangman_start(strng, pos1, pos2):
  count=0
  result=""
  while count<len(strng):
    if count == pos1 or count == pos2:
      result += strng[count]
    else:
      result += "*"
    count+=1
  return result

虽然这里的输入不够大,但是我想建议你附加到列表然后join列表,而不是追加到字符串,因为这很多,{ {3}}:

def hangman_start(strng, pos1, pos2):
  count=0
  result=[]
  while count<len(strng):
    if count == pos1 or count == pos2:
      result.append(strng[count])
    else:
      result.append("*")
    count+=1
  return "".join(result)

就像我说的那样,在这种情况下输入的大小不足以引起注意,但这是一个很好的习惯。

答案 1 :(得分:0)

def hangman_start(strng, pos1, pos2):    
    count=0
    result=""
    while count<len(strng):
        if count ==pos1 or count== pos2 :
             result += strng[count]
        else:
            result += "*"
        count+=1
    return result

h = hangman_start("banana", 0, 5)

print(h)

解决方案是if count ==pos1 or count== pos2 :

o / p

b****a

您应该比较传递的NUMERIC位置值

答案 2 :(得分:0)

这部分是错误的。

if strng[count]==strng[pos1] or strng[count] == strng[pos2]:

您在此处尝试比较位置strng[count]中的字符count是否等于位置strng[pos1]中的字符pos1strng[pos2]中的字符pos2 1}}。

我认为这不是你想要的。

答案 3 :(得分:-1)

应该是

if count==pos1 or count == pos2:

而不是

if strng[count]==strng[pos1] or strng[count] == strng[pos2]: