這種方法會自動替換所有,但第一個字母每個單詞用'_'表示,然後將允許基於索引的重新填充提示字母。它使用了三個list解析:
def hint(a, hidxs):
return ''.join(c[i in idxs] for i, c in enumerate(a))
a = zip(' '.join(w[0] + '_'*(len(w)-1) for w in answer.split()), answer)
_idxs = [i for i, c in enumerate(hint(a, [])) if c == '_']
下面是如何使用它們:
>>> answer = "I am just an example"
>>> a = zip(' '.join(w[0 ]+ '_'*(len(w)-1) for w in answer.split()), answer)
>>> _idxs = [i for i, c in enumerate(hint(a, [])) if c == '_']
>>> _idxs #list of indexes for every '_'
[3, 6, 7, 8, 11, 14, 15, 16, 17, 18, 19]
>>> hidxs=[]
>>> print 'Hint 1:', hint(a, hidxs)
Hint 1: I a_ j___ a_ e______
>>> hidxs=[6]
>>> print 'Hint 2:', hint(a, hidxs)
Hint 2: I a_ ju__ a_ e______
>>> hidxs=[6, 14]
>>> print 'Hint 3:', hint(a, hidxs)
Hint 3: I a_ ju__ a_ ex_____
>>> hidxs=[6, 14, 17]
>>> print 'Hint 4:', hint(a, hidxs)
Hint 4: I a_ ju__ a_ ex__p__
>>> print 'Answer:', hint(a, _idxs)
Answer: I am just an example
,它隨機提示的程序應該是:
from random import shuffle
def hint(a, hidxs):
return ''.join(c[i in idxs] for i, c in enumerate(a))
def all_hints(answer):
a = zip(' '.join(w[0 ]+ '_'*(len(w)-1) for w in answer.split()), answer)
_idxs = [i for i, c in enumerate(hint(a, [])) if c == '_']
shuffle(_idxs)
hints = []
print 'Press enter for next hint:'
for i in _idxs:
print 'Hint:', hint(a, hints),
hints.append(i)
raw_input()
print 'Answer:', hint(a, hints)