2016-08-26 2 views
1
def taxcalc(gsalary2): 
    tax=0 
    if(gsalary2 <= 10164): 
     tax = 0 
    elif gsalary2 > 10164 and gsalary2 <= 19740 : 
     tax1 = 10/100 * 10164 
     tax2 = (15/100 * (gsalary2 - 10164)) 
     tax = tax1 + tax2 
    elif gsalary2 > 19740 and gsalary2 <= 29316 : 
     tax1 = 10/100 * 10164 
     tax2 = 15/100 * 9576 
     tax3 = (20/100 * (gsalary2 - 19740)) 
     tax = tax1 + tax2 + tax3 
    elif (gsalary2 > 29316 and gsalary2 <= 38892) : 
     tax1 = 10/100 * 10164 
     tax2 = 15/100 * 9576 
     tax3 = 20/100 * 9576 
     tax4 = 25/100 * (gsalary2 - 29316) 
     tax = tax1 + tax2 + tax3 + tax4 
    elif gsalary2 > 38892 : 
     tax1 = 10/100 * 10164 
     tax2 = 15/100 * 9576 
     tax3 = 20/100 * 9576 
     tax4 = 25/100 * 9576 
     tax5 = 30/100 * (gsalary2 - 38892) 
     tax = tax1 + tax2 + tax3 + tax4 + tax5 
    return tax 

выше функция терпит неудачу полностью только в этом разделе, кажется, работаетмой, если Elif и «и» возвращение ни один тип

elif gsalary2 > 38892 : 
     tax1 = 10/100 * 10164 
     tax2 = 15/100 * 9576 
     tax3 = 20/100 * 9576 
     tax4 = 25/100 * 9576 
     tax5 = 30/100 * (gsalary2 - 38892) 
     tax = tax1 + tax2 + tax3 + tax4 + tax5 
     return tax 

+0

Все 'elif's работают для меня, я не вижу, где проблема. – grael

+0

После исправления отступов все работает нормально. –

+0

@grael, если elif подобен ниже, он работает только для последнего блока. способ, которым я вставлял его над ним, фактически является okey и будет отлично работать elif gsalary2> 38892: tax1 = 10/100 * 10164 tax2 = 15/100 * 9576 налог3 = 20/100 * 9576 налог4 = 25/100 * 9576 tax5 = 30/100 * (gsalary2 - 38892) налог = налог1 + налог2 + налог3 + налог4 + налог5 налог на возврат –

ответ

1

Убедитесь, что return tax линия находится в той же выемке как ваш if .... То, как у вас есть это сейчас, похоже, что оно вернет значение только в том случае, если ваш последний elif прав. Вы получаете None (вместо 0), потому что ваша функция ничего не возвращает и, следовательно, возвращает значение по умолчанию None. Другими словами, вам нужно обязательно вернуться tax.

def taxcalc(gsalary2): 
    tax = 0 
    if(gsalary2 <= 10164): 
    ... 
    return tax 
+0

Спасибо, ребята, я понял это после запуска кода на другом пошаговом сайте. Добавление налога на возврат после каждого блока делает магию. –

+0

@ANjagi в этом случае ваш результат будет таким же (и намного чище), если вы возвращаете налог один раз * после * всей вещи, как я предложил, вместо одного в каждом блоке. Он сохранит вам одну строку кода на блок. Если ваш код входит в один блок, если он никогда не войдет в другой. – elethan

+0

Да, ваш подход работает Спасибо –

Смежные вопросы