我正在为Python编写一个刽子手游戏的脚本。假设计算机选择随机字(字符串):
bb = "artist"
如果玩家输入猜测:
a = "t"
很容易验证单词"artist"
中是否存在,因此是否是正确的猜测。此外,很容易将单词"artist"
更改为适当长度的空白:
cc = "_ " * len (bb)
但是,我遇到麻烦的时候,填补了正确猜测的空白。也就是说,将上述内容转换为:
_ _ t_ _ t
我试过玩
cc.replace()
但无济于事。有什么想法吗?
答案 0 :(得分:0)
cc.replace
不会对您有所帮助,因为replace
无法区分一个_
和另一个_
,这正是您尝试这样做:您希望将{em>位于同一位置的替换为't'
中的bb
字母。
“在同一位置”几乎意味着你将要么通过索引工作,要么使用zip
。
如果cc
中的空格不在bb
中,则这很容易。其中任何一个:
cc = ''.join(a if bb[i] == a else cc[i] for i in range(len(cc)))
cc = ''.join(a if b == a else c for b, c in zip(bb, cc))
我认为第二个更简单,但是......
不幸的是,cc
中的这些空格不在bb
中。因此,cc
的元素与bb
的元素不对齐;偶数的元素在索引的一半处与bb
元素对齐,奇数元素总是空格。所以,你几乎不得不使用索引来做到这一点,这很难看:
cc = ''.join(a if (i % 2 == 0 and bb[i//2] == a) else cc[i]
for i in range(len(cc)))
我认为不在cc
中存储空格会更好。就此而言,没有理由cc
必须是字符串而不是列表。就这样做:
cc = ['_' for _ in bb]
然后,更新它:
cc = [a if b == a else c for b, c in zip(bb, cc)]
然后,将其转换为您要打印的字符串:
print(' '.join(cc))
答案 1 :(得分:0)
正如@abarnert所述,您不应该使用cc.replace()
。
一个简单的解决方案是开始使用cc
的列表,然后使用enumerate()
函数:
bb = "artist"
cc = []
[cc.append("_") for x in bb] #make cc a list of "_" with the same length as bb
while ''.join(cc)!=bb: #while cc does not equal bb
a=raw_input("Enter letter: ") #here, use input() if you use Python 3
for index,val in enumerate(bb): #this checks the index and value of bb
if val==a: #if the letter matches the input
cc[index]=val #replace the list element with the input
print ' '.join(cc) #now you can print the list with spaces and repeat
答案 2 :(得分:0)
您可以使用re
import re
bb = 'artist'
>>>re.sub("[^t]","_",bb)
'__t__t'
>>>re.sub("[^t]", "_ ", bb)
'_ _ t_ _ t'