3
from __future__ import division
from math import*

def add(*args):
    return sum(args)

def times(*args):
    s=1
    for i in range(len(args)-1):
        s*=args[i]*args[i+1]
    return s

def divide(*args):
    s=1
    for i in range(len(args)-1):
        s=args[i]/args[i+1]/s
    return s

def sqroot(arg):
    return sqrt(arg)

def get(data,s):
   if len(data)==1:
        s=add(s,int(data))
        return s

    s=add(s,int(data[data.index('+')-1]))
    cut=data[(data.index('+')+1):]
    get(cut,s)

user=raw_input()
print str(get(user,0))

为什么函数返回None而不是s (如果我打印s的值是正确的)的值?该函数只是解析一个表达式,如1+1+1.

4

1 回答 1

2

如果 len > 1,您忘记返回值。试试这个:

def get(data,s):
    if len(data) == 1:
        return add(s, int(data))

    s = add(s, int(data[data.index('+')-1]))
    cut = data[(data.index('+')+1):]
    return get(cut,s)

您还需要考虑字符串拆分,您的索引不安全。您可以查看 RPN 或至少尝试类似的方法(如果您的 expr 只有 +):

add(*[int(x) for x in data.split('+')])
于 2013-03-14T08:45:56.783 回答