首页 > 解决方案 > 提取字母并填充单词的斑点

问题描述

我正在尝试制作一个脚本,其中有一个单词(“管理员”)并且提取了组成该单词的字母。

我在每个循环之后寻找的输出是这样的:

第一个循环:提取字母“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))    

标签: pythonfor-loopwhile-loop

解决方案


您不需要 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

推荐阅读