如何在单词列表中查找字母的位置

时间:2015-03-16 18:26:57

标签: python python-2.7

我正在制作这个代码拼图,用户将获得一个由符号加密的10个单词的列表。每个符号代表一个字母,用户将尝试通过用符号代替符号来找出单词:

这是单词列表,保存为“单词”

#+/084&"      
#3*#%#+  
8%203:  
,1$&  
!-*%  
.#7&33&
#*#71%  
&-&641'2  
#))85
9&330*

实际的单词列表是:

ACQUIRED
ALMANAC
INSULT
JOKE
HYMN
GAZELLE
AMAZON
EYEBROWS
AFFIX
VELLUM

例如,如果用户希望将'#'替换为'A',则语法将为:     x = raw_input(“你要替换什么符号?”)     y = raw_input(“你要用什么符号替换它?”)

用户输入'#'为'x','A'输入'y':

words = words.replace(x,y)
print words

依旧......

到目前为止一直很好......

但是,我需要创建一个允许用户删除与他/她的选择配对的功能。例如:

a = raw_input("Which letter would you like to delete")

他应输入的信件应删除,并且最初应插入原始符号。 为此,我计划找到字母出现的所有实例的位置,并将其替换为相同位置的原始符号,方法是将其与原始加密字列表(“单词”)进行比较。

有人可以帮我这个吗? 任何其他建议/方法将受到高度赞赏。

6 个答案:

答案 0 :(得分:1)

我只是存储(x,y)组合。要更改回原始文件,只需查找要删除的字母,进行更改并删除该组合。

例如:

changes = {}
# store first change ('#', 'A')
changes[y] = x
# delete the change
original_x = changes.pop(letter_to_delete)
words.replace(letter_to_delete, original_x)

答案 1 :(得分:0)

您应该将单词拆分为字符数组,这样您就可以遍历要替换的字符的单词。

一些示例代码:

string = "Hello"
splitString = list(string)
splitString
['H','e','l','l','o']

答案 2 :(得分:0)

我建议切换数据结构。如果你有类似列表的字典,你可以让密钥是原始加密的,第0项是未加密的列表,然后附加他们的尝试。

例如:

{'ACQUIRED': ['#3*#%#+']
'ALMANAC': ['8%203']}

然后,他们猜测8 == j:

{'ACQUIRED': ['#3*#%#+', '#3*#%#+']
'ALMANAC': ['8%203', 'J%203']}

然后您将列表的第1个元素作为他们当前的猜测返回。如果他们决定删除上次猜到的字母,您可以弹出列表的末尾。

然后,当所有键值对都包含一个等于键的值时,你就可以结束程序。

答案 3 :(得分:0)

您可以使用字典存储他们设置或选择删除的每个替换。

protected void AddKeyButton(object sender, EventArgs e)
{
   var encryptedCharacter = txtKeyToAdd.Text;
   var characterToReplace = txtCharToReplace.Text;

   var keys = new Dictionary<string, string>();

   keys.Add(encryptedCharacter, characterToReplace);

   //Add some function to iterate through and replace the characters in
   //your "words" with these values.
}

一个要删除......

protected void RemoveKeyButton(object sender, EventArgs e)
{
   var encryptedCharacter = txtKeyToAdd.Text;

   masterKeys.Remove(encryptedCharacter);

   //Add some function to iterate through and replace the characters in
   //your "words" back to the original values.
}

不确定您使用的是哪种语言,但这是C#中的一个示例。用您正在使用的任何语言查找词典。

答案 4 :(得分:0)

你可以使用字典只关注python字符串是不可变的这一事实,所以只做replace就行不通了。 E.g:

>>> s.replace("A","2")
'2CQUIRED'
>>> s
'ACQUIRED'
>>> `

总而言之,你可以使用类似这样的例子(在ideone上)

s = "AAACQUIRED"
d = {}
for i in xrange(2):
    x = raw_input("what symbol would you like to replace?\n")
    y = raw_input("what symbol would you like to replace it with?\n")
    d[y]=x
    s = s.replace(x,y)
    print s

a = raw_input("Which letter would you like to delete\n")
old = d.pop(a)
s = s.replace(a,old)
print s 

答案 5 :(得分:-1)

为什么不轻松一点?

random = [“#+ / 084&amp;'”,“#3 *#%#+”,“8%203:”,“,1 $&amp;”,“! - %”,“ #7和33&安培;”, “##71%”, “&安培; - &安培; 641 ^ 2”, “#))85”, “9&安培; 330 *”]