0

我有一个刽子手类型的游戏,它将秘密字符串显示为破折号。

所以在这种情况下,秘密字符串是'+*794242',它首先会显示为'--------'。现在,takeguess 函数接受猜测的数字并用它替换正确的相应破折号。这适用于初始猜测,但之后的任何猜测都会使部分变量更长(部分显示猜测和破折号,例如:'--7-4-4-')。

我首先将它拆分,看看它是否是部分为空白的初始猜测。我不确定为什么每次猜测后它都会使部分字符串变长。你会明白我的意思的!另外,如果有其他更好的方法可以做到这一点,我想在我解决这个问题后知道!谢谢!

secret = '+*794242'
partial = ''
def takeguess(a):
    incomp = ('-' * len(secret))    #Dashes
    if partial == '':        # If just starting (first guess), partial is blank
        for i in range(0,len(secret)):
            if guess == secret[i]:
                global partial
                partial = partial + guess
            else:
                global partial
                partial = partial + incomp[i]
        return partial
    else:       # After initial guess, partial won't be blank, this is where I need help
        for i in range(0,len(secret)):
            if guess == secret[i]:
                global partial
                partial = partial + guess
            else:
                global partial
                partial = partial + incomp[i]
        return partial

while True: #Example while true
    guess = raw_input('Enter guess: ')
    takeguess(guess)
    print partial
4

2 回答 2

2

如果你使用一个集合,你可以简化更多。

 message = '+*794242'
 currentLetters = set()
 currentMessage = ''

 def takeguess(letterGuess):
   if letterGuess in message:
     currentLetters.add(letterGuess)

 while message != currentMessage:
   takeguess(raw_input('Enter guess: '))
   currentMessage = ''.join([l if l in currentLetters else '-' for l in message])
   print currentMessage

提示

  • “部分”曾经是一个保留关键字。它不再保留,但最好不要使用它以避免混淆。
  • 永远不要两次编写相同的代码。这会引起很多混乱。
  • 在处理无法复制的项目(在这种情况下为字符)时,请使用集合,而不是字符串。
于 2012-11-10T23:27:24.143 回答
0

这就是我将如何重写你的程序:

secret = '+*794242'
partial = bytearray('-' * len(secret))

def takeguess(a):
    global partial
    for i in range(0,len(secret)):
        if guess == secret[i]:
            partial[i] = guess

while partial != secret:
    guess = raw_input('Enter guess: ')
    takeguess(guess)
    print partial

最重要的变化是允许它被大大简化的那个——它partial变成了一个bytearray而不是一个字符串(它们是不可变的)。这样做允许它被初始化为所有破折号,然后慢慢地填充每个连续的猜测。

于 2012-11-10T23:23:48.647 回答