#!/usr/bin/env python3
_PERCENTS = 0.10 , 0.15 , 0.25 , 0.28 , 0.33 , 0.35
_THRESHOLDS = 8350 , 33950 , 82250 , 171550 , 372950
def compute_tax( income) :
tax = 0
for percent, threshold, prev_threshold in zip ( _PERCENTS, _THRESHOLDS, ( 0 , ) + _THRESHOLDS) :
if income <= 0 :
break
income_part = min ( income, threshold - prev_threshold)
tax += income_part * percent
income -= income_part
if income > 0 :
tax += income * _PERCENTS[ -1 ]
return tax
def main( ) :
tax = compute_tax( 5000.0 )
controlValue = 5000 * 0.10
print ( 'Tax is' , ( tax * 100 ) / 100.0 )
print ( 'Control value is' , ( controlValue * 100 ) / 100.0 )
tax = compute_tax( 10000.0 )
controlValue = 8350 * 0.10 + ( 10000 - 8350 ) * 0.15
print ( 'Tax is' , tax * 100 / 100.0 )
print ( 'Control value is' , ( controlValue * 100 ) / 100.0 )
tax = compute_tax( 50000.0 )
controlValue = 8350 * 0.10 + ( 33950 - 8350 ) * 0.15 + \
( 50000 - 33950 ) * 0.25
print ( 'Tax is' , ( tax * 100 ) / 100.0 )
print ( 'Control value is' , ( controlValue * 100 ) / 100.0 )
tax = compute_tax( 100000.0 )
controlValue = 8350 * 0.10 + ( 33950 - 8350 ) * 0.15 + \
( 82250 - 33950 ) * 0.25 + ( 100000 - 82250 ) * 0.28
print ( 'Tax is' , ( tax * 100 ) / 100.0 )
print ( 'Control value is' , ( controlValue * 100 ) / 100.0 )
tax = compute_tax( 200000.0 )
controlValue = 8350 * 0.10 + ( 33950 - 8350 ) * 0.15 + \
( 82250 - 33950 ) * 0.25 + ( 171550 - 82250 ) * 0.28 + \
( 200000 - 171550 ) * 0.33
print ( 'Tax is' , ( tax * 100 ) / 100.0 )
print ( 'Control value is' , ( controlValue * 100 ) / 100.0 )
tax = compute_tax( 500000.0 )
controlValue = 8350 * 0.10 + ( 33950 - 8350 ) * 0.15 + \
( 82250 - 33950 ) * 0.25 + ( 171550 - 82250 ) * 0.28 + \
( 372950 - 171550 ) * 0.33 + ( 500000 - 372950 ) * 0.35
print ( 'Tax is' , ( tax * 100 ) / 100.0 )
print ( 'Control value is' , ( controlValue * 100 ) / 100.0 )
if __name__ == '__main__' :
main( )
IyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwpfUEVSQ0VOVFMgICA9IDAuMTAsIDAuMTUsIDAuMjUsIDAuMjgsIDAuMzMsIDAuMzUKX1RIUkVTSE9MRFMgPSA4MzUwLCAzMzk1MCwgODIyNTAsIDE3MTU1MCwgMzcyOTUwCgoKZGVmIGNvbXB1dGVfdGF4KGluY29tZSk6CiAgICB0YXggPSAwCiAgICBmb3IgcGVyY2VudCwgdGhyZXNob2xkLCBwcmV2X3RocmVzaG9sZCBpbiB6aXAoX1BFUkNFTlRTLCBfVEhSRVNIT0xEUywgKDAsKSArIF9USFJFU0hPTERTKToKICAgICAgICBpZiBpbmNvbWUgPD0gMDoKICAgICAgICAgICAgYnJlYWsKICAgICAgICBpbmNvbWVfcGFydCA9IG1pbihpbmNvbWUsIHRocmVzaG9sZCAtIHByZXZfdGhyZXNob2xkKQogICAgICAgIHRheCArPSBpbmNvbWVfcGFydCAqIHBlcmNlbnQKICAgICAgICBpbmNvbWUgLT0gaW5jb21lX3BhcnQKICAgIAogICAgaWYgaW5jb21lID4gMDoKICAgICAgICB0YXggKz0gaW5jb21lICogX1BFUkNFTlRTWy0xXQogICAgCiAgICByZXR1cm4gdGF4CiAgICAKCmRlZiBtYWluKCk6CiAgICB0YXggPSBjb21wdXRlX3RheCg1MDAwLjApCiAgICBjb250cm9sVmFsdWUgPSA1MDAwICogMC4xMAogICAgcHJpbnQoJ1RheCBpcycsICAodGF4ICogMTAwKSAvIDEwMC4wKQogICAgcHJpbnQoJ0NvbnRyb2wgdmFsdWUgaXMnLCAgKGNvbnRyb2xWYWx1ZSAqIDEwMCkgLyAxMDAuMCkKCgogICAgdGF4ID0gY29tcHV0ZV90YXgoMTAwMDAuMCkKICAgIGNvbnRyb2xWYWx1ZSA9IDgzNTAgKiAwLjEwICsgKDEwMDAwIC0gODM1MCkgKiAwLjE1CiAgICBwcmludCgnVGF4IGlzJywgIHRheCAqIDEwMCAvIDEwMC4wKQogICAgcHJpbnQoJ0NvbnRyb2wgdmFsdWUgaXMnLCAgKGNvbnRyb2xWYWx1ZSAqIDEwMCkgLyAxMDAuMCkKCgogICAgdGF4ID0gY29tcHV0ZV90YXgoNTAwMDAuMCkKICAgIGNvbnRyb2xWYWx1ZSA9IDgzNTAgKiAwLjEwICsgKDMzOTUwIC0gODM1MCkgKiAwLjE1ICsgXAogICAgICAgICg1MDAwMCAtIDMzOTUwKSAqIDAuMjUKICAgIHByaW50KCdUYXggaXMnLCAgKHRheCAqIDEwMCkgLyAxMDAuMCkKICAgIHByaW50KCdDb250cm9sIHZhbHVlIGlzJywgIChjb250cm9sVmFsdWUgKiAxMDApIC8gMTAwLjApCgoKICAgIHRheCA9IGNvbXB1dGVfdGF4KDEwMDAwMC4wKQogICAgY29udHJvbFZhbHVlID0gODM1MCAqIDAuMTAgKyAoMzM5NTAgLSA4MzUwKSAqIDAuMTUgKyBcCiAgICAgICAgKDgyMjUwIC0gMzM5NTApICogMC4yNSArICgxMDAwMDAgLSA4MjI1MCkgKiAwLjI4CiAgICBwcmludCgnVGF4IGlzJywgICh0YXggKiAxMDApIC8gMTAwLjApCiAgICBwcmludCgnQ29udHJvbCB2YWx1ZSBpcycsICAoY29udHJvbFZhbHVlICogMTAwKSAvIDEwMC4wKQoKCiAgICB0YXggPSBjb21wdXRlX3RheCgyMDAwMDAuMCkKICAgIGNvbnRyb2xWYWx1ZSA9IDgzNTAgKiAwLjEwICsgKDMzOTUwIC0gODM1MCkgKiAwLjE1ICsgXAogICAgICAgICg4MjI1MCAtIDMzOTUwKSAqIDAuMjUgKyAoMTcxNTUwIC0gODIyNTApICogMC4yOCArIFwKICAgICAgICAoMjAwMDAwIC0gMTcxNTUwKSAqIDAuMzMKICAgIHByaW50KCdUYXggaXMnLCAgKHRheCAqIDEwMCkgLyAxMDAuMCkKICAgIHByaW50KCdDb250cm9sIHZhbHVlIGlzJywgIChjb250cm9sVmFsdWUgKiAxMDApIC8gMTAwLjApCgoKICAgIHRheCA9IGNvbXB1dGVfdGF4KDUwMDAwMC4wKQogICAgY29udHJvbFZhbHVlID0gODM1MCAqIDAuMTAgKyAoMzM5NTAgLSA4MzUwKSAqIDAuMTUgKyBcCiAgICAgICAgKDgyMjUwIC0gMzM5NTApICogMC4yNSArICgxNzE1NTAgLSA4MjI1MCkgKiAwLjI4ICsgXAogICAgICAgICgzNzI5NTAgLSAxNzE1NTApICogMC4zMyArICg1MDAwMDAgLSAzNzI5NTApICogMC4zNQogICAgcHJpbnQoJ1RheCBpcycsICAodGF4ICogMTAwKSAvIDEwMC4wKQogICAgcHJpbnQoJ0NvbnRyb2wgdmFsdWUgaXMnLCAgKGNvbnRyb2xWYWx1ZSAqIDEwMCkgLyAxMDAuMCkKICAgIAppZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgbWFpbigp