2016-06-02 6 views
-1

私はTkinterのテキストベースのゲームに取り組んできました。入力に柔軟性を持たせるためには、私は方法が必要です。基本的に、私が探しているコーディングする方法である:Tkinter入力の置換

if Input.get() == "look at" Item: 
    Item.look() 

しかし、「アイテム」の柔軟性が「見」することができ、すべてのそれらのサブクラスで、クラスであることを。これは、このセグメントの私の現在の(非稼働)コードです:

def Check(): 
    if Output == "look at" Item: 
     Item.look() 
    else: 
     pass 
class Item(): 
    def __init__(self, name, description, value, quantity): 
     self.name = name 
     self.description = description 
     self.value = value 

    def look(self): 
     Look.Title = "{}".format(self.name) 
     Look.Description = "{}".format(self.Description) 
     Look.Value = "{} is worth {}.".format(self.name, self.value) 
     Details.insert(Look.Title) 
     Details.insert(Look.Description) 
     Details.insert(Look.Value) 
     Details.insert(Look.Quantity) 
class Headphones(Item): 
    def __init__(self): 
     super.__init__(name = "Headphones", description = "A set of high quality white headphones.", value = 150) 

すべてのヘルプははるかに高く評価され、
ブレイズ

+0

これは何と思いますか?もしInput.get()== "Item:'を見れば?それは無効な構文なので、 'Item'部分が何をしていると思いますか、私は推測できません。あなたはそれを "見る"と連結させたいのですか?あなたは '' headphones.look() ''コードを実行するために ''ヘッドフォンを見てください ''というユーザーの入力をどのように変換するかを尋ねています –

+0

そのように動作する他のコード(私は忘れてしまった) 。何らかの理由で。そして、ヘッドフォンを見て、headphones.look()を実行するか、ゴーグルを見てゴーグルを見て、電話をかけるために電話を見るようにするかを聞いています。 look()など、どの項目でも実行できます。 – user2778363

答えて

0

あなたは、入力と機能のあなたとの間のマッピングのいくつかの並べ替えを行う必要があります電話したい。入力文字列からオブジェクトを引き出し、解析結果を使用して適切なオブジェクトまたはクラスをルックアップするには、文字列を解析する必要があります。

たとえば、正規表現を使用して "look at X"という文字列を解析し、次に "X"を辞書のインデックスとして使用して、どのクラスをインスタンス化するかを知ることができます。

import re 

class Headphones(object): 
    def look(self): 
     print("you are looking at headphones") 

class Goggles(object): 
    def look(self): 
     print("you are looking at goggles") 

class Unknown(object): 
    def look(self): 
     print("I don't know what you're looking at") 

def check(input): 
    map = { 
     "goggles": Goggles, 
     "headphones": Headphones, 
    } 

    match = re.match(r'look at (.*)', input) 
    if match: 
     thing = match.group(1) 
     cls = map.get(thing, Unknown) 
     object = cls() 
     object.look() 

for phrase in ("look at headphones", 
       "look at goggles", 
       "look at something else"): 
    check(phrase) 

注:この問題を解決するために多くの方法の一つである

は、ここで簡単な例を示します。ポイントは、あなたがする必要がある、次のとおりです。

  1. は、入力からの重要な部分を引き出し、そして
  2. がデータに
を処理する方法を決定するために構文解析ステージの結果を使用することができますパーサを書きます

パーサーは、空白の入力を単純に分割し、最後の単語を取得する、正規表現を使用する、pyparsingなどを使用して完全なパーサを使用するなど、何でもよい。

関連する問題