此方法自动将每个单词的第一个字母以外的所有字母替换为“_”,然后允许基于索引的提示字母重新填充。它使用三个列表推导:
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)