2

雑学プログラムをやろうとしていますが、答えに問題があります。私が欲しいのは、答えの文字を置き換えてヒントとして表示することです。例:

answer = "I am just an example"
hintwouldbe = "I a_ j___ a_ e______"
hint2mightbe = "I am j___ an e_a___e"

作り方がよくわかりません。ループ(答えの c の場合)と string.replace メソッドで試しました。また、いくつかの re.translate と dicts を試してみましたが、コードが非常に大きくなり、理解しにくくなっています。もっと簡単な方法があるに違いないので... ここにいます。

それを達成するための最も効率的/簡単な方法はどれだと思いますか?

編集置換する位置を選択できれば素晴らしいと思います。例: 単語が 6 文字の場合、1、3、および 6 文字を _ に置き換えます。

Edit2:正解

少し変更した後、Thomas Orozco の回答を有効なものとして選択しました。これは非常に理解しやすく、再作成しやすいものです。

    from random import random
    answer = "anything in here"
    pista = [char if random() < 0.8 else "_" for char in answer]
    pista2 = "".join(pista)
    print(pista2)
4

4 に答える 4

2

文字列は、行おうとしていることの適切な表現ではありません。リストの方が適しています。

import random

def make_hint(chars, frequency):
    hint_chars = [char if random.random() < frequency else "_" for char in chars]
    return "".join(hint_chars)

answer = "I am just an example"

print make_hint(answer, 0.3)
print make_hint(answer, 0.5)

もちろん、これはほんの一例です。ここでは、random を使用して文字の 30% または 50% を表示していますが、別の実装を使用することもできます。

.split()変換を実行する前に、最初に answer を呼び出して単語に分割できることを思い出してください。

print " ".join(make_hint(word, 0.3) for word in answer.split())
于 2013-10-20T16:42:49.963 に答える
1

考えているロジックを構造 (辞書など) に配置する必要があります (例のように、6 文字の単語は 1 番目、3 番目、6 番目を置き換えます)。次に、文を単語に分割し、論理をそれらに適用します。これは、単語内の必要な位置を _ と交換する関数です。

def exchange(word,positions):
    chars=list(word)
        w=""
    for i in range(1,len(chars)+1):
        if i in positions:
            w+='_'
        else:
            w+=chars[i-1]
    return w

ロジックを辞書に入れます (7 - 'example' という単語をキャッチし、4 で 'just' をキャッチします):

d={7:[1,3,6],4:[range(2,4+1)]}

最後にロジックを適用します。

words=answer.split() # split the sentence into word
' '.join(map(lambda x: exchange(x,d.get(len(x),[])),words)) # apply the logic and join results
>>> 'I am j___ an _x_mpl_'
于 2013-10-20T17:08:06.520 に答える
1

指定された位置で文字を置換します。

answer = "I am just an example"   
''.join('_' if i in (1,3,6) else answer[i] for i in range(0, len(answer)))

空白の置換を避けるには:

import string
answer = "I am just an example" 
def pr((c,i,L)):
 if (i in L and c in string.letters + string.digits):
  return '_'
 else:
  return c

''.join(map(pr,((answer[i],i,(1,3,6)) for i in range(len(answer)))))

そしてランダムに(空白を置き換えたくない場合):

answer = "I am just an example"
import string
import random
''.join('_' if random.randint(0, 1) and i in string.letters + string.digits else i for i in answer)
于 2013-10-20T17:14:31.083 に答える