본문 바로가기
프로젝트들/Python_Udemy

[Python]15 - Tax Calculator 미국 도시 세금 계산기

by 코곰 2020. 12. 24.

파이썬 구현

'''
Tax Calculator
Ask the user to enter a cost and a USA city, then it returns the tax plus the total cost with tax!
12/24/20
'''

import requests
import bs4
import math

def getSource():
     res = requests.get("https://taxfoundation.org/sales-tax-rates-major-cities-2019/")
     return bs4.BeautifulSoup(res.text, "lxml")

def getTaxRates(soup):
     # On the website, there is ONE table which lists tax rates of some cities
     # all the table contents are in <tbody>
     # the tabel columns are City | State | State Rate | Local Rate | Total Rate | Rank

     # loop through the table row in tbody to save the tax info
     # Let's use the total tax rate
     tax_rate_dic = {}

     table_contents = soup.select('tbody tr')

     for i in range(len(table_contents)):
          content = table_contents[i].select('td')
          tax_rate_dic[content[0].text.lower()] = float(content[4].text[:-1])
          i += 1

     return tax_rate_dic

def findTaxRate(tax_rate_dic, city_name):
     for item in tax_rate_dic:
          if city_name in item:
               return tax_rate_dic[item]
     return False

def main():
     # Web Scraping
     soup = getSource() 

     # Make tax rate info into a dictionary 
     tax_rate_dic = getTaxRates(soup) 

     total_tax = False 
     city_name = ''
    # non-empty string returns True
     while (total_tax == False or len(city_name) < 4): 
          city_name = input("Which USA city tax would you want to use?: ") 
          total_tax = findTaxRate(tax_rate_dic, city_name) 

     # Print the total amount based on the base money and total tax rate! 
     base = float(input("How much is the base amount?: ")) 
     total_cost = math.ceil(base*(1+total_tax*0.01)*100)/100 

     print(f"\nCalc done! {city_name} has the total tax rate of {total_tax}.\nSo the total cost after calculating tax on ${'{:.2f}'.format(base)} is ${ '{:.2f}'.format(total_cost)}!") 

if __name__ == "__main__":
     main()

구글링해서 미국 도시의 세금 정보가 있는 웹페이지를 찾고,

web scraping을 통해 도시:세금정보를 dictionary에 저장한 후,

유저가 원하는 도시의 세금을 base amount에 적용해 세금 후 total cost를 반환하는 프로그램을 만들었다.

 

 

 

메모:

1. Web Scraping을 복습할 수 있어서 재밌었다! beautiful soup... :p

2. "{format}".format(value)의 문법도 복습!

3. 지금은 web development 수업을 듣고 있는데, 제대로 된 tag와 class 및 id를 사용하는 것이 유저나 다른 웹사이트, 그리고 screen reader에 큰 도움을 준다고 했다.

tax data를 그냥 기사에서 데이터를 끌어오다 보니 그 웹 페이지에tag/class/id가 제대로 구현이 안 되었는데, 그 가르침이 잘 와닿았다!

 

 

Udemy 추천 코드들

1. bitbucket.org/desertwebdesigns/learn_python/src/master/Numbers/tax.py

- 한정된 tax rate data를 프로그램에서 pre-defined dictionary로 만들었다.

- a dictionary nested in a set로, set[0]은 state, set[1]은 country 데이터이다.

- 코드의 concise함이 돋보인다!

- raw_input()을 썼길래 뭔가 했더니, 모든 input을 str으로 변환하는 함수란다.

  하지만 Python 3에서는 이것이 input()으로 rename되었다니, 그것이 내가 배우지 않은 이유였군!

 

  이전 버전 (Python v.2.x)에서 사람들이 raw_input()을 선호했었다는데, input()이 자동으로 type을 변환하는 데에서 올    수 있는 에러때문에 그랬다고 한다.

  하지만 이제 다 input() - 기존의 raw_input()으로 통일되었으니 그 문제는 신경 안 써도 될 것이다.

 

  이전 버전의 input() 기능을 원한다면 eval(input())이 대신할 수 있다.

  docs.python.org/3/whatsnew/3.0.html

 

2. github.com/neivin/projects/blob/master/numbers/tax_calculator.py

- 이건 심지어 더 concise하다! tax rate까지도 유저가 넣을 수 있기 때문이다.

 

3. github.com/vdrey/Project-Programs/blob/master/Python/Tax%20Calculator.py

- 2번과 마찬가지.

댓글