2016-08-20 19 views
1

私のプログラムをオブジェクト指向スタイルに変換しようとしています。現在、私はquerySelector()関数を使用してクエリ入力を受け取り、クエリとブランド配列の間の交差点を見つけます。しかし、私はbrandSelector()を汎用Selector()またはintersection finderに変換しようとしています。たとえば、型とクエリ(Selector(type、query))を呼び出すことができます。この場合、Selector(ブランド、クエリ)と入力します。この追加のパラメータは、どの配列がチェックされ、どの変数が設定されているかを定義します - if文で十分でしょうが、そのようなシステムを実装する方法がわかりません。私は、あらゆる解決策やアドバイスに感謝します。おかげで、変数を変更するためのオブジェクト指向関数パラメータ

brands = ["apple", "android", "windows"] 
brand = None 

def Main(): 
    query = input("Enter your query: ").lower() 
    brand = brandSelector(query) 

def brandSelector(query): 
    try: 
     brand = set(brands).intersection(query.split()) 
     brand = ', '.join(brand) 
     #Check Condition After Setting 
     int_cond = confirmIntersection(brand) 
     if int_cond == False: 
      raise NameError("No Intersection") 
     return brand 
    except NameError: 
     print("\nNo Intersection found between query defined brand and brands array\n") 
     return brandDetectionFailure() 

全コード:https://github.com/KentCoding/phoneTroubleshooting/blob/master/phoneTroubleshooting.py Pythonのバージョン:v3.5.2

私の試み:

def Main(): 
    init() 
    query = input("Enter your query: ").lower() 
    brand = Selector(brand, brands, query) 
    keywordSelection(query, brand) 
def Selector(var, array, query): 
    try: 
     #Format Brands Query 
     var = set(array).intersection(query.split()) 
     var = ', '.join(var) 
     #Check Condition After Setting 
     int_cond = confirmIntersection(var) 
     if int_cond == False: 
      raise NameError("No Intersection") 
     return var 
    except NameError: 
     print("\nNo Intersection found between query defined brand and brands array\n") 
     return brandDetectionFailure() 

しかし、エラーを与える: UnboundLocalError: local variable 'brand' referenced before assignment

+0

'brand = Selector(brand、brands、query) 'というステートメントは、定義前に' Selector() '関数の引数として渡すことで' brand'を使用しようとしているからです。 – martineau

+0

確かに、私は 'brand = [" apple "、" android "、" windows "] brand = None'でグローバルとして定義しているので、問題はありません。修理する?あなたの助けをありがとう –

+1

伝説 - ありがとう! :-)あなたが答えとしてそれを置くならば、あなたはrepポイントを望むなら、それにティックを与えることをうれしく思う。 –

答えて

1

私が見ることができるものから、 、varという引数をに渡す必要はありませんですので、def Selector(array, query):とし、brand = Selector(brands, query)としてください。

+0

マーティンありがとう! –

+0

ようこそ。 BTWは 'main()'関数の中で 'brand'はローカル変数とみなされます。なぜなら、その変数には(Selector()を呼び出した結果の)値が割り当てられており、その前に' global brand'関数。 – martineau

+0

ヒントありがとう: –

関連する問題