나는 개발자다/실전 파이썬

실전 코딩 #01. 상생소비지원금 계산기, 파이썬으로 만들어 보자.

걍교쥬 2021. 10. 7. 18:41

'상생소비지원금' 제도가 시작됐다. 나는 10/6일에 카드회사에 상생소비지원금을 신청해서 이튿날인 10/7일에 완료됐다. 상생소비지원금은 2분기 평균 신용카드 사용액보다 더 많은 금액을 지출했을 경우 초과액 중 일부를 캐시백 해준다고 한다. 이번 포스팅은 월 최대 지원금 10만 원을 받으려면 얼마를 쓰면 되는지 파이썬 프로그래밍으로 계산기를 만들어 보았다.

 

파이썬으로 상생소비지원금 계산기를  프로그래밍하기 위한 주요 내용은 다음과 같다.

  • 상생소비지원금 계산식(프로그램의 핵심)을 파이썬 코드로 만들기
  • 파이썬으로 상생소비지원금 GUI(프로그램 껍데기) 만들기
  • 위의 2개를 결합하여 상생소비지원금 계산기 최종 파이썬 프로그래밍 완성하기
  • 상생소비지원금 계산기 파이썬 코드를 윈도우용 실행 파일로 만들기
  • 그리고 제일 중요한 점. 상생소비지원금 제외 업종을 기억하자!

 

혹시 파이썬 개발 환경부터 해야된다면 아래 글을 참고하자.

 

윈도우 파이썬 설치 방법, 그리고 실행 방법 3가지

나는 C, C++, JAVA 전문이다. 그러나, 최근 몇 년 사이 파이썬을 사용하는 빈도가 늘어나고 있다. 회사에서 데이터 분석이나, 머신러닝 모델 개발을 할 경우 필수적이다. 그리고, 집에서는 퀀트 투자

shawsk.tistory.com

 

이제부터 본격적으로 파이썬으로 상생소비지원금 계산기 만들기 프로젝트를 시작한다. 너무 쉽다고 놀라지 마시라.

 

 

 

 

상생소비지원금 계산법(프로그램의 핵심 알고리즘)을 파이썬로 만들기

 

상생소비지원금 계산법은 아래와 같다.
2021년 2분기(4. 1 ~ 6. 30) 월평균 이용금액보다 3% 초과한 카드 이용금액의 10%를 선불형 포인트(캐시백)로 지급
(예시) 2분기 월 평균 카드 이용금액이 100만 원이고, 10월 카드 이용금액이 153만 원인 경우 받게 되는 지원금은?
➊ 2분기 월 평균의 3%를 초과해 증가한 월 카드 이용금액 산정 = 50만 원 [(153만 원 - 100만 원) - (100만 원 x 3%)]
➋ 지원금 = 5만원 (50만 원 × 10%)

 

일단, 위의 계산법을 수식으로 정리해 보자.

(상생소비지원금 ) = { (10월 카드 사용 예정 금액) - [ (2분기 사용 평균액) + (2분기 사용 평균액) * 0.03 ] } * 0.1  

 

위의 수식에서 '상생소비지원금 ' 최대 액수인 10만 원을 받으려면 '10월 카드 사용 예정 금액'이 얼마인가를 알고 싶다.

(10월 카드 사용 예정 금액) = (상생소비지원금)*10 + (2분기 사용 평균액) * 1.03 

 

상생소비지원금은 100,000원으로 상수가 되고, 2분기 사용 평균액이 입력, 10월 카드 사용 예정 금액이 출력 값이 된다.

 

이제 위의 계산법을 파이썬 프로그래밍으로 표현해 보자. 2분기 사용 평균액은 50만 원이라고 가정했다. 먼저 손으로 계산해 보자. 얼마인가?

def calculate(card_amount):
    print("calculate card amount to use~")
    result = 100000*10 + card_amount * 1.03
    return result
    
if __name__ == "__main__":
    result = calculate(500000)
    print(result)

그리고 프로그램을 실행해 보자. 위에서 손으로 계산한 값과 동일하게 나왔는가? 그러면 성공이다.

상생소비지원금-알고리즘-실행결과

 

 

상생소비지원금의 핵심 알고리즘이 완성됐다. 너무 쉽지 않은가? 혹시 그렇지 않더라도 걱정하지는 말자. 이해될 때까지 천천히 생각해 보면 된다.

 

 

파이썬으로 상생소비지원금 GUI(프로그램 껍데기) 만들기

 

GUI 프로그램의 핵심 창은 입력창, 실행 버튼, 그리고 출력창 3개다.

  • 입력창: 2분기 가드 평균 사용 금액 입력
  • 실행 버튼: 알고리즘 함수를 실행
  • 출력창: 알고리즘 실행 결과를 윈도우에 출력

 

아래 GUI 코드의 핵심은 이 부분이다.

btn.config(command=btnpress) # 버튼 기능 (btnpree() 함수 호출)

버튼을 누르면 btnpress 함수를 호출하겠다고 설정하는 것이다. C/C++에서 초보자들이 많이 어려워하는 부분인데, 함수 포인터를 이용하는 것이다. 자세한 설명은 너무 길고 간단한 비유를 하자면 이런 거다.

 

철수가 영희는 이제 막 사귄 연인 사이다. 당연히 영희는 철수의 전화번호를 알고 있다. 영희는 배고플 때마다 철수한테 전화한다. 그러면 철수가 달려가서 음식을 요리한다. 영희는 완성된 음식을 받고 철수를 돌려보낸다. 그리고 영희는 음식을 먹던지 냉장고에 넣던지 하고 싶은 일을 계속한다.

 

여기서 철수의 전화번호는 함수 포인터, 철수는 함수, 밥상은 함수 리턴 값, 영희는 함수 호출자이다.

 

파이썬이 워낙 사용자 친화적 언어라 나머지는 별다른 설명이 필요 없을 것 같다. 주석을 참고하자.

"""
https://shawsk.tistory.com/
subsidy calculator
"""

from tkinter import *            # tkinter 라이브러리에 모든 함수를 사용

window = Tk()                              # 메인 창을 생성
window.geometry("600x400")                 # 창 크기설정
window.title("소비상생지원금 계산기 - 쌀사비파")           # 창 제목설정
window.option_add("*Font","맑은고딕 25")    # 폰트설정
window.resizable(False, False)             # x, y 창 크기 변경 불가

def btnpress():                            # 함수 btnpress() 정의
	# To-Do... call calculate algorithm
	result = ent.get()
	label.configure(text = '카드 사용 목표 금액 : ' + str(result))

message = Label(window, text = '2분기 평균 카드 사용액 입력', height=3)
message.pack()

ent = Entry(window)                        # 메인 window에 입력창 생성
ent.pack()                                 # 입력창 배치

btn = Button(window)                       # 메인 윈도우에 버튼 생성
btn.config(text= "계산하기")               # 버튼 내용 
btn.config(width=10)                      # 버튼 크기
btn.config(command=btnpress)               # 버튼 기능 (btnpree() 함수 호출)
btn.pack()                                 # 버튼 배치

label = Label(window, text = '결과 :', height=3) # 메인 윈도우에 레이블창 생성
label.pack()								# 레이블 배치

window.mainloop()

 

프로그램이 정상적으로 실행되는지 확인해 보자.

 

상생소비지원금-GUI-실행화면

 

정말, 간단하게 윈도우 소프트웨어를 만들 수 있다. 놀라울 따름이다.

빈 박스에 아무 글자나 쳐서 똑같이 출력이 되는지 테스트해 보자.

 

상생소비지원금-GUI-테스트화면

 

정상이다. 이제 마지막 단계로 넘어가자. 짜장면을 만들려면 짜장을 끓이고 면을 삶은 다음에 비벼야 되는 것과 마찬가지다.

 

 

위의 2개를 결합하여 윈도우용 상생소비지원금 계산기 만들기

 

이제 파이썬 코딩의 마지막 단계다. 1단계와 2단계를 아래와 같이 결합하면 된다.

  • 2단계의 GUI 코드에 1단계에서 완성한 calculate 함수를 추가한다.
  • 그리고, btnpress에서 calculate 함수를 호출한다.
  • calculate 실행 결과는 label 창으로 출력한다.
"""
https://shawsk.tistory.com/
subsidy calculator
"""

from tkinter import *            # tkinter 라이브러리에 모든 함수를 사용

def calculate(card_amount):
    print("calculate card amount to use~")
    result = 100000*10 + int(card_amount) * 1.03
    return result

window = Tk()                              # 창을 생성
window.geometry("600x400")                 # 창 크기설정
window.title("소비상생지원금 계산기 - 쌀사비파")           # 창 제목설정
window.option_add("*Font","맑은고딕 25")    # 폰트설정
window.resizable(False, False)             # x, y 창 크기 변경 불가

def btnpress():                            # 함수 btnpress() 정의
    card_amount = ent.get()
    result = calculate(card_amount)
    label.configure(text = '사용해야 할 금액: ' + str(result))

message = Label(window, text = '2분기 평균 카드 사용액 입력', height=3)
message.pack()

ent = Entry(window)                        # window라는 창에 입력창 생성
ent.pack()                                 # 입력창 배치

btn = Button(window)                       # window라는 창에 버튼 생성
btn.config(text= "계산하기")               # 버튼 내용 
btn.config(width=10)                      # 버튼 크기
btn.config(command=btnpress)               # 버튼 기능 (btnpree() 함수 호출)
btn.pack()                                 # 버튼 배치

label = Label(window, text = '결과 :', height=3)
label.pack()


window.mainloop()

 

 

2단계에서처럼 프로그램을 실행하고 50만 원을 입력해 보자. 완성이다.

 

 

 

상생소비지원금 계산기를 윈도우용 실행 파일로 만들기

 

이제 상생소비지원금 계산기 파이썬 프로그래밍은 완전히 끝났다. 이왕 만들었는데 아는 사람한테 자랑이라도 해야 되지 않겠는가? 그러나, 그 사람한테 코드를 보여 주고 자랑해봤자 장님 문고리 잡기다. 윈도우에서 실행 가능한 파일로 변환하자.

 

실행 파일 변환 방식은 여러 가지가 있지만 여기서는 pyinstaller를 사용하겠다.

 

  • 윈도우 커맨드 쉘을 실행한다.
  • pyinstaller를 설치한다.
  • pip install pyinstaller
  • pyinstaller로 실행파일을 만든다.
  • pyinstaller subsidy_calculator.py
  • 실행이 완료되면 dist 폴더에 subsidy_calculator.exe 파일이 생성된다.

pyinstaller-빌드결과-상생소비지원금-계산기-실행파일

 

  • 친구한테 실행파일만 보내면 절대 안 된다. dist 폴더 전체를 압축해서 보내야 한다. 

 

서비스. 상생소비지원금 제외 업종을 기억하자.

 

소비 상생지원금은 제외 업종을 알아두는 것이 중요하다. 목표 금액을 다 채웠는데 캐시백이 10만 원이 안 되면 얼마나 억울하겠는가?

 

▲대형마트 (이마트, 홈플러스, 롯데마트, 코스트코, 창고형 매장 포함)

▲대형 백화점(롯데, 신세계, 현대, 갤러리아, AK, NC 등 이랜드 계열, 아웃렛)

▲ 복합쇼핑몰 (롯데, 신세계, 면세점 전체)

▲ 대형 전자전문 판매점 (하이마트, 전자랜드, 삼성 디지털플라자, LG 베스트샵, 애플 판매 전문점, 일렉트로 마트)

▲ 대형 종합 온라인몰 (SSG, 롯데온, 쿠팡, G마켓, 옥션, G9, 11번가, 위메프, 티몬, 인터파크)

 

 

마치며

 

오늘은 소비생상지원금 계산법을 소재로 파이썬 프로그래밍에 대한 레슨을 진행해 보았다. 초기에는 언어의 장벽을 넘기 힘들겠지만 프로그래밍의 핵심은 문제를 명확하게 정의하고 해결 방안을 도출하는 것이다. 그리고 언어는 부차적인 문제다. 프로그램을 잘하려면 평상시에 원인과 결과의 관계를 명확히 간파할 수 있는 합리적인 사고방식을 단련하기 바란다.

 

코드는 파일로 첨부한다.

 

* 상생소비지원금 계산법 알고리즘 파이썬 코드

subsidy_calculator_algorithm.py
0.00MB

* 상생소비지원금 GUI 파이썬 코드

subsidy_calculator_gui.py
0.00MB

* 상생소비지원금 최종 코드

subsidy_calculator.py
0.00MB

 

혹시, 진짜로 친구에게 자랑할 거라면 GUI 디자인도 신경 쓰는 것이 좋을 것이다.

 

상생소비지원금 계산식을 구글 시트로 만들었다. 필요하신 분은 복사해서 사용하시기 바란다.  (파일->사본 만들기)

https://docs.google.com/spreadsheets/d/1FECdRPz2fP5k6EtUejRdQ1Dh5y6WdVELoFtVX5SkIuk/edit?usp=sharing 


프로그램 공부와 더불어 투자에 대한 공부도 함께한다면 금상첨화일 것이다.

 

배당 성장 투자의 핵심은 시간이다, "존버"하자 !

대부분의 투자자들은 배당 투자를 지루하고 수익이 낮다고 생각한다. 하지만, 역사적으로 미국의 배당 성장 투자는 S&P 500 수익률을 상회한다. 본글은 미국 배당 성장 투자의 핵심을 살펴보도록

shawsk.tistory.com

나는 코딩해서 번 돈으로 배당을 받고 있다. 숨만 쉬고 있어도 증권계좌 예수금이 늘어난다.

 

[2021/10/06] 킴벌리 클라크, 디지털 리얼티 트러스트 배당금 입금

월초부터 배당금 폭탄이다. 킴벌리 클라크, 디지털 리얼티 트러스트 배당금이 들어왔다. 그리고, 올웨더 포트폴리오에서도 배당금이 들어왔다. DGRO, EDV, VTIP 배당금을 지급했다. 총액은 약 $240 (

shawsk.tistory.com