파이썬 구현
'''
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번과 마찬가지.
'프로젝트들 > Python_Udemy' 카테고리의 다른 글
[Python]37 - Check if Palindrome //입력문자가 '회문'인지 체크 (0) | 2020.12.28 |
---|---|
[Python]20 - Coin Flip Simulator 동전 던지기 (0) | 2020.12.22 |
[Python]1 - Find Pi to the Nth Digit, 원주율 N번째 자릿수까지 계산하기 (0) | 2020.12.14 |
[Python]3 - Fibonacci Sequence 피보나치 수열 (0) | 2020.12.08 |
[Python]9 - 이진수 (Binary) & 십진수 (Decimal) 컨버터 (0) | 2020.12.08 |
댓글