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

ヒント

  • 'partial'はかつて予約キーワードでした。予約されなくなりましたが、混乱を避けるために使用しない方がよいでしょう。
  • 同じコードを2回記述しないでください。それは多くの混乱を引き起こします。
  • 複製できないアイテム(この場合は文字)を処理するときは、文字列ではなくセットを使用します。
于 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 に答える