0

これを理解したら、ばかげた気分になります。

私が書いているプログラムは、操作のプロンプト (例: 9+3) を表示し、結果を出力します。

実行例:

>>>Enter an operation: 9+3
>>>Result: 12

演算子 +、-、*、/ の 4 つの個別の関数と、ユーザー入力を受け取り、適切な関数が返された後に結果を出力する別の関数を用意します。

これはこれまでの私のコードです (演算子関数を 1 つだけ含めています)。

def add(n, y):
    result = ""
    result = n + y
    return result

def main():
    op = input("Enter an operation: ")
    for i in range(1,len(op)):
        n = n[0]
        y = y[2]
        if (i == "+"):
            result = add(n, y)
    print("Result: ", result)
    print("Bye")

シェルでの私のエラーは、 n と y が割り当てられていないことを示しているため、入力から正しく解析していません。

4

2 に答える 2

1

これらは関数の本体で割り当てられておらず、グローバル スコープでは使用できないためです。

def main():
    op = input("Enter an operation: ")
    for i in range(1,len(op)):
        n = n[0]  # no n here yet so n[0] won't work
        y = y[2]  # no y here yet so y[2] won't work

入力を解析し、それらの値を使用して加算を実行することを目指していると思います。

def main():
    op = input("Enter an operation: ")
    i = op[1]
    n = int(op[0])
    y = int(op[2])

    if i == "+":
        result = add(n, y)
    print("Result: ", result)
    print("Bye")

しかし、それは1桁の引数に対してのみ機能するため、正規表現を使用した適切な解析について考えるかもしれませんが、それは別の質問です.

于 2013-04-04T10:02:44.427 に答える
0

コードに問題があります:

ではmain、で、何も定義されn = n[0]ていません。nしたがって、エラーが発生します。についても同じですy = y[2]。あなたはadd文字列を追加しています。だからあなたは'93'答えとして得るでしょう。

適切な解析のために正規表現を使用する
か、すばやく作業したい場合は、コーディングバージョンを減らします(学習している場合はお勧めしません)
これを試してください:

def main():
    while True:
        # just a variable used to check for errors.
        not_ok = False

        inp = input("Enter an operation: ")
        inp = inp.replace('\t',' ')

        for char in inp:
            if char not in '\n1234567890/\\+-*().': # for eval, check if the 
                print 'invalid input'
                not_ok = True # there is a problem
                break
        if not_ok: # the problem is caught
            continue # Go back to start

        # the eval
        try:
            print 'Result: {}'.format(eval(inp)) # prints output for correct input.
        except Exception:
            print 'invalid input'
        else:
            break # end loop

いくつかの正規表現リンク: 1 2

于 2013-04-04T10:34:37.640 に答える