0

以下のコードは、多くの SO ベテランの助けを借りて私が作成したものです。

このコードは、入力された数式を受け取り、後で使用するために演算子とオペランドに分割します。分割する解析関数とエラー関数の 2 つの関数を作成しました。エラーメッセージが表示されず、コードの実行時に関数が無視されているように感じるため、エラー関数に問題があります。3//3+4 などの式を入力すると、エラーが出力されます。2 つの演算子が一緒にあるか、式全体に 3 つ以上の演算子がありますが、エラー メッセージは表示されません。私のコードは以下の通りです:

def errors():

    numExtrapolation,opExtrapolation=parse(expression)
    if (len(numExtrapolation) == 3) and (len(opExtrapolation) !=2):
        print("Bad1")
    if (len(numExtrapolation) ==2) and (len(opExtrapolation) !=1):
        print("Bad2")


def parse(expression):
    operators= set("*/+-")
    opExtrapolate= []
    numExtrapolate= []
    buff=[]
    for i in expression:
        if i in operators:
            numExtrapolate.append(''.join(buff))
            buff= []
            opExtrapolate.append(i)
            opExtrapolation=opExtrapolate
        else:
            buff.append(i)
    numExtrapolate.append(''.join(buff))
    numExtrapolation=numExtrapolate
    #just some debugging print statements
    print(numExtrapolation)
    print("z:", len(opExtrapolation))
    return numExtrapolation, opExtrapolation

    errors()

どんな助けでも大歓迎です。すでにここにあるコードよりも高度な新しいコードを導入しないでください。問題の解決策を探しています...大きな新しいコードセグメントではありません。ありがとう。

4

1 に答える 1

1

errors() 関数は、parse() の本体内にあるため、parse() が戻った後に呼び出されます。うまくいけば、それはタイプミスです。

この特定の入力では、/ と / の間にオペランドがないため、numExtrapolate に空のバッファーが追加されます。その長さは 4 になり、Bad1 のチェックは失敗します。このようにチェックを入れます

 if buff:
     numExtrapolate.append(''.join(buff))
于 2012-11-02T10:58:36.583 に答える