0

だから私はpythonのリストでアイテムを見つけようとしています。これが私の機能です:

def operator(input):
    operatorlist = ['+', '-', '*', '/', '^', 'sin', 'cos']

    for i in operatorlist:
        if input is operatorlist[i]:
            return True

私のコードが壊れていて、その理由がわかりません...何かアイデアはありますか?

コードを次から変更しました。

def operator(input):
    if input is '+' or input is '-' or input is '*' or input is '/' or input is '^' or input is 'sin' or input is 'cos':
    return True

そのように書くのは、本質的に、文体的に愚かだと言われたからです。

4

6 に答える 6

11

1 行 :

return input in operatorlist

ここで条件を実行する必要はありません。in 演算子は既にブール値を返します。

于 2012-04-14T00:43:32.750 に答える
3

ここでいくつかのこと:

  • 関数定義行はコロンで終わる必要があります。
  • インデントが重要です。
  • 「is」を使用することはほとんどありません。
  • 「in」演算子を使用して明示的にループすることなく、オブジェクトがリスト内にあるかどうかを確認できます。
  • 探しているものが見つからない場合は、おそらく False を返す必要があります。明示的に返さないと関数は None を返し、None は「真実」ではないため、ほとんどの場合、それでうまくいきます。

だから試してください:

def operator(input):
    operatorlist = ['+', '-', '*', '/', '^', 'sin', 'cos']

    if input in operatorList:
        return True

    return False

またはさらに簡潔に:

def operator(input):
    operatorlist = ['+', '-', '*', '/', '^', 'sin', 'cos']
    return input in operatorList
于 2012-04-14T00:39:15.787 に答える
2

in次の演算子を使用します。

return (input in operatorlist)

(かっこは必要ありません。わかりやすくするために入れています。)

Python の使用を開始するには、チュートリアル書籍を参照することをお勧めします。

于 2012-04-14T00:40:56.410 に答える
2

for i in operatorlistoperatorlist のインデックスではなく、実際の要素に対して実行されます。最初のループでもi、2 番目のループでも同様です。'+''-'

したがって、これif input is operatorlist[i]は次のようになりif input is iます。

最後に、実際にはこの関数全体を論理演算に置き換えることができますinput in operatorlist。したがって、次のようなことができます。

def operator(input):
    return input in ('+', '-', '*', '/', '^', 'sin', 'cos')
于 2012-04-14T00:42:27.983 に答える
1
def operator(x):
    return x in {'+', '-', '*', '/', '^', 'sin', 'cos'}

ただし、関数呼び出しごとに新しいセットを作成することは避けたい場合があります。その場合は...

def operator_check(*operators):
    operators = set(operators)
    def checker(x):
        return x in operators
    return checker

math_operator = operator_check('+', '/', '*', '^', '-')

if math_operator('+'):
    print "it's a math operator!"
于 2012-04-14T02:09:13.953 に答える
0

for i in operatorlistに変更for i in range(len(operatorlist))

を要求するだけの場合i in operatorlist、各反復で、i実際にはそのエントリのインデックスではなく要素になります。または、ループの本体を再フォーマットしてi、インデックスではなく、問題の演算子を含む実際の文字列であることを反映することができます。

于 2012-04-14T00:39:12.153 に答える