python中固定位置的字符串替换
我正试图做一个琐碎的节目,我得到的答案问题。 我想要的是替换答案中的字符以显示为提示。例如:python中固定位置的字符串替换,python,string,replace,Python,String,Replace,我正试图做一个琐碎的节目,我得到的答案问题。 我想要的是替换答案中的字符以显示为提示。例如: answer = "I am just an example" hintwouldbe = "I a_ j___ a_ e______" hint2mightbe = "I am j___ an e_a___e" 我真的不知道该怎么做。尝试使用循环(对于答案中的c)和string.replace方法。也尝试了一些重新翻译和口述,但我得到了非常大的代码和难以理解。一定有更轻松的方法,这样。。。我来了 你
answer = "I am just an example"
hintwouldbe = "I a_ j___ a_ e______"
hint2mightbe = "I am j___ an e_a___e"
我真的不知道该怎么做。尝试使用循环(对于答案中的c)和string.replace方法。也尝试了一些重新翻译和口述,但我得到了非常大的代码和难以理解。一定有更轻松的方法,这样。。。我来了
你认为哪种方式最有效/更容易实现
编辑如果我能选择替换哪些职位,那就太好了。例如:如果单词有6个字符,则将1、3和6个字符替换为_
Edit2:正确答案
稍作修改后,我选择Thomas Orozco的答案为有效答案,非常容易理解和重新创建:
from random import random
answer = "anything in here"
pista = [char if random() < 0.8 else "_" for char in answer]
pista2 = "".join(pista)
print(pista2)
从随机导入随机
回答=“这里有任何东西”
pista=[char if random()<0.8 else”\ux表示应答中的字符]
pista2=“”.加入(pista)
印刷品(pista2)
字符串不是您要做的事情的合适表示形式,列表会更好
import random
def make_hint(chars, frequency):
hint_chars = [char if random.random() < frequency else "_" for char in chars]
return "".join(hint_chars)
answer = "I am just an example"
print make_hint(answer, 0.3)
print make_hint(answer, 0.5)
字符串不是您试图执行的操作的合适表示形式,列表会更好
import random
def make_hint(chars, frequency):
hint_chars = [char if random.random() < frequency else "_" for char in chars]
return "".join(hint_chars)
answer = "I am just an example"
print make_hint(answer, 0.3)
print make_hint(answer, 0.5)
你应该把你心中的逻辑(如你的例子中,用6个字母的单词代替1-st、3-rd和6-th)放到结构中(例如字典)。然后,把句子分成几个单词,并运用你的逻辑。 下面是一个函数,它可以将单词中所需的位置与u交换:
def exchange(word,positions):
chars=list(word)
w=""
for i in range(1,len(chars)+1):
if i in positions:
w+='_'
else:
w+=chars[i-1]
return w
将逻辑放入字典(7-抓住单词“example”,4-抓住单词“just”):
最后应用逻辑:
words=answer.split() # split the sentence into word
' '.join(map(lambda x: exchange(x,d.get(len(x),[])),words)) # apply the logic and join results
>>> 'I am j___ an _x_mpl_'
你应该把你心中的逻辑(如你的例子中,用6个字母的单词代替1-st、3-rd和6-th)放到结构中(例如字典)。然后,把句子分成几个单词,并运用你的逻辑。 下面是一个函数,它可以将单词中所需的位置与u交换:
def exchange(word,positions):
chars=list(word)
w=""
for i in range(1,len(chars)+1):
if i in positions:
w+='_'
else:
w+=chars[i-1]
return w
将逻辑放入字典(7-抓住单词“example”,4-抓住单词“just”):
最后应用逻辑:
words=answer.split() # split the sentence into word
' '.join(map(lambda x: exchange(x,d.get(len(x),[])),words)) # apply the logic and join results
>>> 'I am j___ an _x_mpl_'
在指定位置替换字符:
answer = "I am just an example"
''.join('_' if i in (1,3,6) else answer[i] for i in range(0, len(answer)))
要避免替换空白,请执行以下操作:
import string
answer = "I am just an example"
def pr((c,i,L)):
if (i in L and c in string.letters + string.digits):
return '_'
else:
return c
''.join(map(pr,((answer[i],i,(1,3,6)) for i in range(len(answer)))))
answer = "I am just an example"
import string
import random
''.join('_' if random.randint(0, 1) and i in string.letters + string.digits else i for i in answer)
随机(假设您不想替换空白):
在指定位置替换字符:
answer = "I am just an example"
''.join('_' if i in (1,3,6) else answer[i] for i in range(0, len(answer)))
要避免替换空白,请执行以下操作:
import string
answer = "I am just an example"
def pr((c,i,L)):
if (i in L and c in string.letters + string.digits):
return '_'
else:
return c
''.join(map(pr,((answer[i],i,(1,3,6)) for i in range(len(answer)))))
answer = "I am just an example"
import string
import random
''.join('_' if random.randint(0, 1) and i in string.letters + string.digits else i for i in answer)
随机(假设您不想替换空白):
此方法会自动将每个单词的第一个字母以外的所有字母替换为“_”,然后允许基于索引重新填充提示字母。它使用三种列表理解:
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)
此方法会自动将每个单词的第一个字母以外的所有字母替换为“_”,然后允许基于索引重新填充提示字母。它使用三种列表理解:
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)