2012-11-25 23 views
1

我有一个关于这个我的hang子手程序的问题。当我猜测一个单词(“好”)有重复的字母('o')右侧时,它只会被显示为第一个索引因为list.index(value)只会返回一个索引,即使该值存在重复。如果我想要同时显示所有重复的字母,我需要更改或添加什么。Hang子手 - 重复的字符

这就是我所期望的程序来做:

猜字母:L >>> _oo_

感谢。

the_word="good" 
#print the_word 
wLen=len(the_word) 
u='_'*wLen 
counter=0 
while counter!=12 and wLen!=0: 
    counter=counter+1 
    print u 
    g=raw_input("Guess the letter: ") 
    p=list(the_word) 
    x1=the_word.find(g) 
    if x1 >=0: 
     u1=list(u) 
     u1[x1]=g 
     u=''.join(u1) 
     wLen=wLen-1 

if wLen==0:  
    print "Congratulation!!!you have guessed the word" 
    print "The word was",the_word 

else: 
    print "sorry u loose" 
+0

您是否熟悉递归?这似乎是一个递归函数的完美应用。 while循环也会起作用。 –

回答

0

如果这是一个任务,我会专注于一个更简单的解决方案,希望有意义。你知道你的目标的话,和你可以使用一个名为enumerate找到所有字母的索引位置功能:

In [31]: word = 'good' 

In [32]: for index, letter in enumerate(word): 
    ....:  print index, letter 
    ....: 
0 g 
1 o 
2 o 
3 d 

所以知道这一点,让我们假设一个用户输入o。我们目前的“猜测”字符串看起来像____,我们知道我们需要用o替换索引位置1和2。由于猜测字符串和目标单词具有相同的长度(因为它们应该是同一个单词),所以一个简单的解决方案是使用枚举遍历实际单词,如果该字母是o(或者他们猜测的任何东西) ,用该字母替换guessing字中的相同索引位置。例如:

In [33]: word = 'good' 

In [34]: guess_list = list('_' * len(word)) 

In [35]: g = raw_input('Guess a letter: ') 
Guess a letter: o 

In [36]: for index, letter in enumerate(word): 
    ....:  if letter == g: 
    ....:   guess_list[index] = letter 
    ....: 

In [37]: print ''.join(guess_list) 
_oo_ 
+0

现在工作正常。谢谢。 –

+0

@ G2.0没问题,很高兴帮助。 – RocketDonkey

0
while (true): 
    x1=the_word.find(g) 

    if x1 < 0: 
     break 

    u1=list(u) 
    u1[x1]=g 
    u=''.join(u1) 
    wLen=wLen-1 

这样的事情应该工作。没有测试过,但应该是正确的逻辑。