1

私は現在、RPGゲーム用のMUD(マルチユーザードメイン)を構築しています。これを完全にPythonで行うことで、私が楽しむゲームを作成し、Pythonを学ぶことができます。私が直面している問題、そして質問の極端な特異性のために、私は正しい答えを見つけることができませんでした。

だから、これが私が必要としているものです。使用している5行に約50行を貼り付ける必要があるため、必要なものを完全に示す優れたコードスニペットがありません。

targetOptions = ['Joe', 'Bob', 'zombie', 'Susan', 'kobold', 'Bill']

ゲームのcmdは攻撃です。ここでは、「ゾンビ」と入力してから、ゾンビを殺します。ただし、「az」と入力したいだけです。コードでいくつかの異なることを試しましたが、それらはすべて不安定で、多くの場合間違っています。私たちの試みの1つは、「getsword」の一致として['sword'、'talisman']のようなものを返しました。それで、このリストを検索して、一致した値を返す方法はありますか?

また、部屋にゾンビが2人いて、「az」と入力した場合は、value[0]を返す必要があります。事前にご協力いただきありがとうございます。私が探しているものが十分に明確になったことを願っています。さらに情報が必要な場合はお知らせください。そして、攻撃全体について心配する必要はありません。「zo」を送信して「zombie」などを取得するだけです。ありがとう!

4

2 に答える 2

2

SO と Python へようこそ! Python の公式ドキュメントを参照し、 Python 標準ライブラリに何が含まれているかを調べることをお勧めします。

difflibモジュールには、おおよその文字列比較に役立つ関数が含まれていますget_close_matches()これがどのように見えるかです:

difflib インポート get_close_matches から

def get_target_match(target, targets):
    '''
    Approximates a match for a target from a sequence of targets,
    if a match exists.
    '''
    source, targets = targets, map(str.lower, targets)
    target = target.lower()

    matches = get_close_matches(target, targets, n=1, cutoff=0.25)

    if matches:
        match = matches[0]
        return source[targets.index(match)]
    else:
        return None

target = 'Z'
targets = ['Joe', 'Bob', 'zombie', 'Susan', 'kobold', 'Bill']
match = get_target_match(target, targets)
print "Going nom on %s" % match # IT'S A ZOMBIE!!!
于 2012-07-04T23:36:59.087 に答える
0
>>> filter(lambda x: x.startswith("z"), ['Joe', 'Bob', 'zombie', 'Susan', 'kobold', 'Bill'])
['zombie']
>>> cmd = "a zom"
>>> cmd.split()
['a', 'zom']
>>> cmd.split()[1]
'zom'
>>> filter(lambda x: x.startswith(cmd.split()[1]), ['Joe', 'Bob', 'zombie', 'Susan', 'kobold', 'Bill'])
['zombie']

それは役に立ちますか?

filter最初の引数が受け入れるもののリスト (2 番目の引数) をフィルター処理します。 cmdあなたのコマンドでありcmd.split()[1]、スペースの後の部分を取得します。 「スペースの後のコマンドで始まるlambda x: x.startswith(cmd.split()[1])か」を尋ねる関数 (ラムダ式)です。x

別のテストでcmdは、「a B」の場合、2 つの一致があります。

>>> cmd = "a B"
>>> filter(lambda x: x.startswith(cmd.split()[1]), ['Joe', 'Bob', 'zombie', 'Susan', 'kobold', 'Bill'])
['Bob', 'Bill']
于 2012-07-04T23:10:21.597 に答える