0

一旦我弄清楚这一点,就会感到愚蠢。

我正在编写的程序提示操作(例如 9+3),然后打印结果。

示例运行:

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

我将为运算符 +、-、* 和 / 提供四个单独的函数,另一个函数用于接收用户输入并在适当的函数返回后打印结果。

到目前为止,这是我的代码(我只包括一个操作员函数):

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")

我在 shell 状态中的错误 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")

但它仅适用于一位数字参数,因此您可能会考虑使用正则表达式进行一些适当的解析,但这是另一个问题。

于 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 回答