问题是: 编写一个接受三个参数的函数,一个字符串和两个整数。 该字符串代表猜谜游戏中的一个单词。这两个整数代表 以字母为起点的位置。剩下的字母应该 被*符号替换。该函数应返回结果字符串。
下面的文档应该清楚说明:
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
。
任何善良的人都能帮助我吗?
答案 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]
中的字符pos1
或strng[pos2]
中的字符pos2
1}}。
我认为这不是你想要的。
答案 3 :(得分:-1)
应该是
if count==pos1 or count == pos2:
而不是
if strng[count]==strng[pos1] or strng[count] == strng[pos2]: