python - 提取字母并填充单词的斑点
问题描述
我正在尝试制作一个脚本,其中有一个单词(“管理员”)并且提取了组成该单词的字母。
我在每个循环之后寻找的输出是这样的:
第一个循环:提取字母“d”
_ d _ _ _ _ _ _ _ _ _ _ _
第二个循环:提取字母“m”
_ 分米 _ _ _ _ _ _ _ _ _ _
第三个循环:提取字母“a”
adm _ _ _ _ _ _ 一个 _ _ _
现在,问题是我一次只想填补一个位置。正如您在字母“a”中看到的那样,当一个字母在一个单词中出现多次时,脚本将填充该字母所在的所有位置。
可能解决方案是基于脚本应该提取索引而不是单词的事实,并通过字典填充与每个索引对应的位置。我试图做到这一点,但我没有设法让它发挥作用。
您对我如何使其工作有任何想法吗?
编码:
import time
import random
word = 'administrator'
letters_extracted = []
def string_word(word, letters_extracted):
string = ''
for letter in word:
print("\nletter:", letter)
print("letters_extracted:", letters_extracted)
if letter in letters_extracted:
string += letter + " "
else:
string += ' _ '
return string
letters_in_word = []
for letter in word:
letters_in_word.append(letter)
print("letters_in_word", letters_in_word)
while True:
print(string_word(word, letters_extracted))
new_letter = random.choice(letters_in_word)
print("\nnew letter = ", new_letter)
#in order to avoid to extract the same letter twice.
letters_in_word.remove(new_letter)
letters_extracted.append(new_letter)
time.sleep(1)
print(string_word(word, letters_extracted))
if len(letters_in_word)==0:
break
以下是我使用字典的尝试。为了提取随机字母,我将“管理员”一词重新洗牌,并将其放入名为“word_dictionary_shuffled”的字典中。问题是当for循环开始时,它遵循重新洗牌的字典(word_dictionary_shuffled)中的字母顺序。所以字母不会按照原始单词(“管理员”)的顺序出现。顺序是改组后的单词的顺序。此外,下划线不出来。
import time
import random
word = 'administrator'
word_shuffled = ''.join(random.sample(word, len(word)))
word_dictionary = dict(enumerate(word))
word_dictionary_shuffled = dict(enumerate(word_shuffled))
print("word_dictionary", dict(enumerate(word)))
print("word_dictionary_shuffled", dict(enumerate(word_shuffled)))
def string_word(word_dictionary, word_dictionary_shuffled):
string = ''
for index,value in word_dictionary_shuffled.items():
if index in word_dictionary_shuffled:
string += value + " "
else:
string += ' _ '
print("\nindex", index)
print("string = ", string)
return string
while True:
print(string_word(word_dictionary, word_dictionary_shuffled))
time.sleep(1)
print(string_word(word_dictionary, word_dictionary_shuffled))
解决方案
您不需要 dict 将索引映射到字母。字符串本身已经可以通过字母索引进行索引。您应该打乱索引而不是字母,以便您可以遍历打乱的索引以一一取消屏蔽相应的字母:
import time
import random
word = 'administrator'
indices_shuffled = list(range(len(word)))
random.shuffle(indices_shuffled)
letters = ['_'] * len(word)
for i in indices_shuffled:
letters[i] = word[i]
print(''.join(letters))
time.sleep(1)
样本输出:
_d___________
_d_____t_____
_dm____t_____
_dm__i_t_____
_dm__ist_____
_dm__ist_a___
_dm__ist_a_o_
adm__ist_a_o_
admi_ist_a_o_
admi_istra_o_
admi_istra_or
administra_or
administrator
推荐阅读
- r - 在 r 中安装 quantmod 和 curl 的问题
- reactjs - 如何从 getstaticprops 函数中的 Context API 获取数据?
- amazon-web-services - 如何设置我的 HostedZone 以便它委托给另一个 AWS 账户中的父 DNS 记录?
- javascript - 如何垂直调整半屏网站的所有内容
- r - 在 R 中选择前向传播观察
- html - 如何使域 url 导致 index.html?
- javascript - Chrome 扩展程序:阻止自定义网站不起作用
- arrays - C:在 main() 中打印矩阵值时出错
- cmake - 在 CentOS7 中安装 Geant4 时出错
- vuejs2 - Vue手动安装和重新安装组件