2015-12-08 3 views
0

Я создал калькулятор, который определяет налог за данный доход. Я использую for-loop для создания этого вывода. Мне нужно написать фрагмент кода, который извлекает максимальную ставку, применимую к доходу, и я не смог этого сделать. Прямо сейчас мой калькулятор возвращает последнюю ставку налога в цикле, которая для моего оператора печати равна .10. Мне нужно, чтобы он вернулся .15 в этом случае.Return First Iteration in Loop

#import TaxReturn class 
from TaxReturn import TaxReturn 
#Define tax brackets for each filing status 
class TaxCalculator: 

    def __init__(self): 
    self.brackets = { 
     'single': (
      (0, 0.10), 
      (8025, 0.15), 
      (32550, 0.25), 
      (78850, 0.28), 
      (164550, 0.33), 
      (357700, 0.35), 
      (371815, 0.396) 
      ), 
     'married_jointly': (
      (0, 0.10), 
      (16050, 0.15), 
      (65100, 0.25), 
      (131450, 0.28), 
      (200300, 0.33), 
      (357700, 0.35), 
      (418292, 0.396) 
      ), 
     'married_separately': (
      (0, 0.10), 
      (8025, 0.15), 
      (32550, 0.25), 
      (65725, 0.28), 
      (100150, 0.33), 
      (178850, 0.35), 
      (209146, 0.396) 
      ), 
     'head_of_household': (
      (0, 0.10), 
      (11450, 0.15), 
      (43650, 0.25), 
      (112650, 0.28), 
      (182400, 0.33), 
      (357700, 0.35), 
      (395054, 0.396) 
      ) 
          } 

    #calculate tax liability 
    def TaxLiability (self, taxReturn): 
     tax_liability = 0 
     top_tax_rate = 0 
     taxable_income = taxReturn.taxComp.taxable_inc 
     for bracket in reversed(self.brackets[taxReturn.taxComp.filing_status]): 
      if taxable_income > bracket[0]: 
       tax_liability += (taxable_income - bracket[0]) * bracket[1] 
       taxable_income -= taxable_income - bracket[0]    
       top_tax_rate = bracket[1] 

     #round tax to two decimal places 
     tax_liability = round(tax_liability, 2) 
     return tax_liability, top_tax_rate 

#assign name to TaxReturn class and update TaxReturn 
tr = TaxReturn() 
tc = TaxCalculator() 
tax_liability = tr.taxComp.inc_tax_before_credits 
top_tax_rate = tr.Misc.top_tax_rate 
#test statements, output income tax before credits 
tr.taxComp.filing_status = 'single' 
tr.taxComp.taxable_inc = 25000 
print('Unit Test for Tax Calulcator Module:') 
print('///////////////////////////////////////////////////////////') 
print("Single: ") 
print("Income tax before credits: " + str(tc.TaxLiability(tr)[0])) 
print("Top marginal rate: " + str(tc.TaxLiability(tr)[1])) 
+3

Вам нужно только показать соответствующую часть кода. Скорее всего, люди помогут вам. –

+0

@ReutSharabani Извините. См. Метод TaxLiability. Я подумал, что показать кому-то всю структуру может помочь решить мою проблему. –

ответ

1

Просто break после того, как вы нашли ставку налога. Это позволяет вам сбежать из цикла раньше, как только ваше состояние if будет выполнено.

def TaxLiability (self, taxReturn): 
    tax_liability = 0 
    top_tax_rate = 0 
    taxable_income = taxReturn.taxComp.taxable_inc 
    for bracket in reversed(self.brackets[taxReturn.taxComp.filing_status]): 
     if taxable_income > bracket[0]: 
      tax_liability += (taxable_income - bracket[0]) * bracket[1] 
      taxable_income -= taxable_income - bracket[0]    
      top_tax_rate = bracket[1] 
      break 

    #round tax to two decimal places 
    tax_liability = round(tax_liability, 2) 
    return tax_liability, top_tax_rate 

Вы также можете посмотреть на documentation на break пунктах в пределах цикла.

+0

О, вау, спасибо, что было очень просто @nbrooks –

+0

@Alex Нет проблем! Если это решит вашу проблему, не стесняйтесь [принять ответ] (http://meta.exackexchange.com/a/5235) (в общем, вы должны сделать это по всем своим вопросам, чтобы люди знали, что вы получили ответ). Это также дает вам и человеку, который ответил на некоторую дополнительную репутацию. Благодаря! – nbrooks