2013-03-14 2 views
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.Почему я получаю «Нет»

+0

Почему я получаю «Нет»? Не знаю, может попробовать новый бейсбол или другой бар? – gecko

ответ

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 или хотя бы попробовать что-то вроде (в случае, если у вас есть только +):

add(*[int(x) for x in data.split('+')]) 
Смежные вопросы