2017-07-25 14 views
2

尝试在Python中创建一个名为hangman的游戏。 我已经走过了很长的路,但'核心'功能让我失望。Python中的Hang子手 - 基于索引python替换单个字符串中的多个字符

我已经编辑出了与这个问题无关的所有部分。

这里说到:

picked = ['yaaayyy'] 
    length = len(picked) 
    dashed = "-" * length 

    guessed = picked.replace(picked, dashed) 

    while tries != -1: 
     input = raw_input("Try a letter: ") 
     if input in picked: 
      print "Correct letter!" 
      found = [i for i, x in enumerate(picked) if x == input] 
      for item in found: 
       guessed = guessed[:item] + input + guessed[i+1:] 
      print guessed 

在调用此脚本,蟒蛇创建一个名为变量guessed含7个破折号------- 它要求用户输入一个字母,如果这封信是正确的,它将取代-用正确的字母。但不保留以前的信件。

这个词被猜测是代码yaaayyy

输出:

Word is 7 characters: 
------- 
Try a letter: a 
Correct letter! 
-aaa 
Try a letter: y 
Correct letter! 
yyyy 

目标:

Word is 7 characters: 
------- 
Try a letter: a 
Correct letter! 
-aaa--- 
Try a letter: y 
Correct letter! 
yaaayyy 
+1

我想'猜[I + 1:]'应该'猜到[项目+ 1:]'。 – smarx

+0

它的作品...只是该死的。谢谢! – user721121

+0

_“在调用这个脚本时,python []要求用户输入一个字母”_“。奇怪的是,它并没有在我的机器上这样做。我只是得到了'AttributeError:'列表'对象在第5行没有属性'replace''。 – Kevin

回答

1

此代码似乎稍有不妥:

found = [i for i, x in enumerate(picked) if x == input] 
for item in found: 
    guessed = guessed[:item] + input + guessed[i+1:] 

最后一行也许应该是:

guessed = guessed[:item] + input + guessed[item+1:] 

编辑

这似乎是简单的对我说:

for i, x in enumerate(picked): 
    if x == input: 
     guessed = guessed[:i] + input + guessed[i+1:] 

EDIT 2

我不知道,如果这是否更清楚,但它可能更有效一些:

guessed = ''.join(x if picked[i] == input else c for i, c in enumerate(guessed)) 
+0

连接线非常好。除此之外,我会做'猜测'[item] = input',而不是每次都重新创建列表。 – MrMas

+1

'guessed'是'str',Python'str's是不可变的。我同意制作一个'list'会更好,但是这似乎有点太大了。 – smarx

+0

啊 - 新我错过了一些东西。谢谢。 – MrMas

0

假设你使用python3您可以通过简单地做解决它:

user_input = input() 
guessed = ''.join(letter if user_input == letter else guessed[i] for i, letter in enumerate(picked)) 
+0

虽然这并不保留之前输入的字母。 – Purag

+0

已更正 –