νμ΄μ¬μΌλ‘ κ°λ¨ν κ°κ³λΆ μμ±νκΈ°
μ΅κ·Ό νμ΄μ¬μ κ·Έ κ°κ²°νκ³ μ§κ΄μ μΈ λ¬Έλ² λλΆμ μ΄λ³΄μλΆν° μ λ¬Έκ°κΉμ§ νλκ² νμ©λλ νλ‘κ·Έλλ° μΈμ΄λ‘ μ리 μ‘μμ΅λλ€. νΉν κΈμ΅ κ΄λ¦¬μ κ°μ΄ 볡μ‘ν μκ³ λ¦¬μ¦ μμ΄ κΈ°λ³Έμ μΈ λ°μ΄ν° μ²λ¦¬ λ° μ¬μ©μ μΈν°λμ μ ꡬνν΄μΌ νλ μ ν리μΌμ΄μ μμλ νμ΄μ¬μ κ°μ μ μ½κ² 체κ°ν μ μμ΅λλ€. μ΄λ² ν¬μ€ν μμλ νμ΄μ¬μ μ΄μ©νμ¬ κ°λ¨ν κ°κ³λΆ νλ‘κ·Έλ¨μ μμ±νλ λ°©λ²μ λν΄ μκ°λλ¦¬κ³ μ ν©λλ€. μ΄ μμ λ λͺ λ Ήμ€ μΈν°νμ΄μ€ κΈ°λ°μ νλ‘κ·Έλ¨μΌλ‘, μ¬μ©μκ° μ§μ κ°κ³λΆ λ΄μμ μΆκ°νκ³ μ‘°ννλ©° μ΄ μμ‘μ νμΈν μ μλλ‘ κ΅¬μ±λμ΄ μμ΅λλ€.
μ΄ κΈμμλ νλ‘κ·Έλ¨μ μ 체μ μΈ κ΅¬μ‘°, κ° κΈ°λ₯μ μν , μ½λ μμ , μ€ν λ°©λ² λ° μ£Όμμ¬νμ λν΄ μμΈνκ² μ€λͺ λ릴 μμ μ λλ€. λ³Έ ν¬μ€ν μ ν΅ν΄ νμ΄μ¬μ κΈ°μ΄ λ¬Έλ²κ³Ό κ°λ¨ν κΈμ΅ κ΄λ¦¬ νλ‘κ·Έλ¨ κ°λ° λ°©λ²μ μ΄ν΄νκ³ , μΆν λ³΄λ€ λ³΅μ‘ν μ ν리μΌμ΄μ κ°λ° μμλ νμ©ν μ μλ κΈ°λ° μ§μμ μμΌμ€ μ μκΈ°λ₯Ό λ°λλλ€.
νλ‘κ·Έλ¨ κ΅¬μ‘° λ° κΈ°λ₯ μ€λͺ
μμ±ν κ°κ³λΆ νλ‘κ·Έλ¨μ μ¬μ©μμμ μνΈμμ©μ ν΅ν΄ λ°μ΄ν°λ₯Ό μ λ ₯ λ°κ³ , μ λ ₯λ λ°μ΄ν°λ₯Ό κΈ°λ°μΌλ‘ λ΄μμ μ‘°ννκ±°λ μ΄ μμ‘μ κ³μ°νλ κΈ°λ₯μ μ 곡ν©λλ€. νλ‘κ·Έλ¨μ μ£Όμ κΈ°λ₯μ λ€μκ³Ό κ°μ΅λλ€.
- λ©λ΄ μΆλ ₯: νλ‘κ·Έλ¨ μμ μ μ¬μ©μμκ² μ νν μ μλ λ©λ΄λ₯Ό μΆλ ₯ν©λλ€. λ©λ΄μλ κ°κ³λΆ λ΄μ μΆκ°, λ΄μ μ‘°ν, μ΄ μμ‘ νμΈ, νλ‘κ·Έλ¨ μ’ λ£ λ±μ μ΅μ μ΄ ν¬ν¨λ©λλ€.
- λ΄μ μΆκ° κΈ°λ₯: μ¬μ©μκ° κ°κ³λΆμ μΆκ°ν λ΄μ(λ μ§, μΉ΄ν κ³ λ¦¬, μμΈ λ΄μ, κΈμ‘)μ μ λ ₯νλ©΄, ν΄λΉ μ 보λ₯Ό λ΄λΆ 리μ€νΈμ μ μ₯ν©λλ€. μ λ ₯λ λ΄μμ λμ λ리 ννλ‘ κ΄λ¦¬λλ©°, κ° νλͺ©μλ λ μ§, μΉ΄ν κ³ λ¦¬, μ€λͺ , κΈμ‘μ΄ ν¬ν¨λ©λλ€.
- λ΄μ μ‘°ν κΈ°λ₯: μ μ₯λ κ°κ³λΆ λ΄μμ λͺ¨λ μΆλ ₯νμ¬ μ¬μ©μκ° νμ¬κΉμ§ μ λ ₯ν μ 보λ₯Ό νμΈν μ μκ² ν©λλ€.
- μ΄ μμ‘ κ³μ°: μ μ₯λ λͺ¨λ λ΄μμ κΈμ‘μ ν©μ°νμ¬ νμ¬ μμ‘μ κ³μ°νκ³ , μ΄λ₯Ό μΆλ ₯ν©λλ€.
- λ°λ³΅ μ€ν: νλ‘κ·Έλ¨μ λ°λ³΅λ¬Έμ ν΅ν΄ μ¬μ©μκ° 'μ’ λ£'λ₯Ό μ νν λκΉμ§ κ³μ μ€νλ©λλ€.
μ΄μ κ°μ΄ νλ‘κ·Έλ¨μ κ°λ¨νμ§λ§, λ°μ΄ν° μ λ ₯κ³Ό μ²λ¦¬, λ°λ³΅λ¬Έ, 쑰건문, μμΈ μ²λ¦¬ λ± νμ΄μ¬μ κΈ°λ³Έ κ°λ μ λͺ¨λ νμ©νκ³ μμ΄ νμ΅μ©μΌλ‘λ λ§€μ° μ μ΅ν μμ κ° λ μ μμ΅λλ€.
νμ΄μ¬ κ°κ³λΆ μ½λ μμ
μλλ μμμ μ€λͺ ν κΈ°λ₯λ€μ λͺ¨λ ν¬ν¨ν νμ΄μ¬ μ½λ μμ μ λλ€. μ΄ μ½λλ λͺ λ Ήμ€ νκ²½μμ μ€νλλ©°, μ¬μ©μμ μ λ ₯μ λ°λΌ κ°κ³λΆ λ΄μμ μΆκ°νκ³ μ‘°ννλ©° μ΄ μμ‘μ κ³μ°ν©λλ€.
import datetime
def display_menu():
"""
μ¬μ©μμκ² μ νν μ μλ λ©λ΄ μ΅μ
μ μΆλ ₯νλ ν¨μμ
λλ€.
"""
print("\n=== κ°λ¨ κ°κ³λΆ λ©λ΄ ===")
print("1. κ°κ³λΆ λ΄μ μΆκ°")
print("2. κ°κ³λΆ λ΄μ μ‘°ν")
print("3. μ΄ μμ‘ νμΈ")
print("4. νλ‘κ·Έλ¨ μ’
λ£")
def add_entry(ledger):
"""
κ°κ³λΆ λ΄μμ μΆκ°νλ ν¨μμ
λλ€.
λ μ§, μΉ΄ν
κ³ λ¦¬, λ΄μ, κΈμ‘μ μ
λ ₯λ°μ ledger 리μ€νΈμ μ μ₯ν©λλ€.
"""
try:
date_str = input("λ μ§λ₯Ό μ
λ ₯ν΄μ£ΌμΈμ (YYYY-MM-DD): ")
date = datetime.datetime.strptime(date_str, '%Y-%m-%d').date()
except ValueError:
print("λ μ§ νμμ΄ μ¬λ°λ₯΄μ§ μμ΅λλ€. μλ₯Ό λ€μ΄ 2025-02-17 νμμΌλ‘ μ
λ ₯ν΄μ£ΌμΈμ.")
return
category = input("μΉ΄ν
κ³ λ¦¬ μ
λ ₯ (μ: μλΉ, κ΅ν΅λΉ, μνλΉ λ±): ")
description = input("λ΄μμ μ
λ ₯ν΄μ£ΌμΈμ: ")
try:
amount_input = input("κΈμ‘μ μ
λ ₯ν΄μ£ΌμΈμ (μμ
μ μμ, μ§μΆμ μμλ‘ μ
λ ₯): ")
amount = float(amount_input)
except ValueError:
print("κΈμ‘ μ
λ ₯μ΄ μ¬λ°λ₯΄μ§ μμ΅λλ€. μ«μ ννλ‘ μ
λ ₯ν΄μ£ΌμΈμ.")
return
entry = {
'date': date,
'category': category,
'description': description,
'amount': amount
}
ledger.append(entry)
print("λ΄μμ΄ μ±κ³΅μ μΌλ‘ μΆκ°λμμ΅λλ€.")
def view_entries(ledger):
"""
μ μ₯λ λͺ¨λ κ°κ³λΆ λ΄μμ μΆλ ₯νλ ν¨μμ
λλ€.
λ΄μμ΄ μλ κ²½μ° μλ΄ λ©μμ§λ₯Ό μΆλ ₯ν©λλ€.
"""
if not ledger:
print("νμ¬ κ°κ³λΆ λ΄μμ΄ μμ΅λλ€.")
return
print("\n----- κ°κ³λΆ λ΄μ -----")
print("λ μ§ | μΉ΄ν
κ³ λ¦¬ | λ΄μ | κΈμ‘")
print("-------------------------------------------------------")
for entry in ledger:
date_str = entry['date'].strftime('%Y-%m-%d')
print(f"{date_str} | {entry['category']:<10} | {entry['description']:<20} | {entry['amount']:>10}")
print("-------------------------------------------------------")
def total_balance(ledger):
"""
μ μ₯λ λͺ¨λ λ΄μμ κΈμ‘μ ν©μ°νμ¬ μ΄ μμ‘μ κ³μ°νκ³ μΆλ ₯νλ ν¨μμ
λλ€.
"""
total = sum(entry['amount'] for entry in ledger)
print(f"\nνμ¬ μ΄ μμ‘: {total}")
def main():
"""
κ°κ³λΆ νλ‘κ·Έλ¨μ λ©μΈ ν¨μμ
λλ€.
μ¬μ©μλ‘λΆν° λ©λ΄ μ νμ λ°λ³΅μ μΌλ‘ λ°μ μ²λ¦¬ν©λλ€.
"""
ledger = [] ## κ°κ³λΆ λ΄μμ μ μ₯ν 리μ€νΈ
while True:
display_menu()
choice = input("λ©λ΄λ₯Ό μ νν΄μ£ΌμΈμ (1-4): ").strip()
if choice == '1':
add_entry(ledger)
elif choice == '2':
view_entries(ledger)
elif choice == '3':
total_balance(ledger)
elif choice == '4':
print("νλ‘κ·Έλ¨μ μ’
λ£ν©λλ€. μ΄μ©ν΄ μ£Όμ
μ κ°μ¬ν©λλ€.")
break
else:
print("μλͺ»λ μ
λ ₯μ
λλ€. 1λΆν° 4κΉμ§μ μ«μ μ€ νλλ₯Ό μ νν΄μ£ΌμΈμ.")
if __name__ == "__main__":
main()
μ½λ μμΈ μ€λͺ
μ μ½λλ μ¬λ¬ ν¨μλ‘ λλμ΄ μμ±λμ΄ μμ΄ μ΄ν΄μ μ μ§λ³΄μκ° μ©μ΄ν©λλ€. μλ κ° ν¨μμ μν κ³Ό λμ λ°©μμ ꡬ체μ μΌλ‘ μ€λͺ λλ¦¬κ² μ΅λλ€.
- display_menu ν¨μ
μ΄ ν¨μλ νλ‘κ·Έλ¨μ΄ μ€νλ λλ§λ€ μ¬μ©μμκ² μ ν κ°λ₯ν λ©λ΄ μ΅μ μ μΆλ ₯ν©λλ€. λ¨μν print ν¨μλ₯Ό μ¬μ©νμ¬ κ° λ©λ΄ νλͺ©μ 보μ¬μ£Όλ©°, μ¬μ©μκ° μ΄λ€ κΈ°λ₯μ μ νν μ μλμ§ νλμ νμΈν μ μλλ‘ λμ΅λλ€. - add_entry ν¨μ
μ¬μ©μκ° κ°κ³λΆμ μλ‘μ΄ λ΄μμ μΆκ°ν λ νΈμΆλ©λλ€. λ¨Όμ λ μ§λ₯Ό μ λ ₯λ°κ³ , datetime.datetime.strptime ν¨μλ₯Ό μ¬μ©νμ¬ μ λ ₯λ°μ λ¬Έμμ΄μ λ μ§ κ°μ²΄λ‘ λ³νν©λλ€. λ μ§ νμμ΄ μ¬λ°λ₯΄μ§ μμ κ²½μ° μμΈ μ²λ¦¬(try-except)λ₯Ό ν΅ν΄ μ¬μ©μμκ² μ€λ₯ λ©μμ§λ₯Ό μΆλ ₯ν©λλ€. μ΄ν μΉ΄ν κ³ λ¦¬, λ΄μ, κΈμ‘μ μ°¨λ‘λ‘ μ λ ₯λ°μΌλ©°, κΈμ‘ μ λ ₯ μμλ μ«μκ° μλ λ€λ₯Έ κ°μ΄ μ λ ₯λ κ²½μ° μ€λ₯λ₯Ό μ²λ¦¬ν©λλ€. λͺ¨λ μ λ ₯μ΄ μ¬λ°λ₯΄κ² μ²λ¦¬λλ©΄, μ λ ₯λ μ 보λ₯Ό λμ λ리 ννλ‘ λ¬Άμ΄ ledger 리μ€νΈμ μΆκ°ν©λλ€. - view_entries ν¨μ
νμ¬κΉμ§ μ μ₯λ κ°κ³λΆ λ΄μμ ν¬λ§·μ λ§μΆ° μΆλ ₯νλ ν¨μμ λλ€. λ΄μμ΄ νλλ μλ κ²½μ°μλ λ³λμ μλ΄ λ©μμ§λ₯Ό μΆλ ₯νλ©°, λ΄μμ΄ μμ κ²½μ° κ° νλͺ©μ λ μ§, μΉ΄ν κ³ λ¦¬, λ΄μ, κΈμ‘ μμΌλ‘ 보기 μ’κ² μ λ ¬νμ¬ μΆλ ₯ν©λλ€. - total_balance ν¨μ
ledger 리μ€νΈμ μ μ₯λ λͺ¨λ νλͺ©μ κΈμ‘μ ν©μ°νμ¬ νμ¬ μ΄ μμ‘μ κ³μ°ν©λλ€. μμ κ³Ό μ§μΆμ΄ κ°κ° μμμ μμλ‘ μ μ₯λλ―λ‘, λ¨μν λͺ¨λ κΈμ‘μ λνλ λ°©μμΌλ‘ μμ‘μ ꡬν μ μμ΅λλ€. - main ν¨μ
νλ‘κ·Έλ¨μ μ§μ μ μν μ ν©λλ€. 무ν 루νλ₯Ό ν΅ν΄ μ¬μ©μκ° λ©λ΄ μ νμ ν λλ§λ€ ν΄λΉ κΈ°λ₯μ νΈμΆν©λλ€. μ¬μ©μκ° '4'λ²μ μ ννμ¬ νλ‘κ·Έλ¨ μ’ λ£λ₯Ό μμ²ν λκΉμ§ κ³μ λ°λ³΅ μ€νλ©λλ€. μ΄ κ΅¬μ‘°λ₯Ό ν΅ν΄ μ¬μ©μλ λ°λ³΅μ μΌλ‘ λ΄μμ μΆκ°νκ±°λ μ‘°νν μ μμΌλ©°, νλ‘κ·Έλ¨ μ’ λ£ μκΉμ§ λͺ¨λ κΈ°λ₯μ μμ λ‘κ² μ¬μ©ν μ μμ΅λλ€.
μ€ν λ°©λ² λ° μ£Όμμ¬ν
μ΄ νλ‘κ·Έλ¨μ νμ΄μ¬μ΄ μ€μΉλ νκ²½μμ λͺ λ Ήμ€ ν°λ―Έλ(λλ μ½μ)μμ μ€νν μ μμ΅λλ€. νλ‘κ·Έλ¨ νμΌ(μ: ledger.py)μ μμ±ν ν, ν°λ―Έλμμ μλμ κ°μ΄ μ€ννμλ©΄ λ©λλ€.
python ledger.py
μ€ν ν, λ©λ΄μ λ°λΌ μ«μ μ λ ₯μ ν΅ν΄ κ°κ³λΆ λ΄μμ μΆκ°νκ±°λ μ‘°νν μ μμ΅λλ€. λ μ§ μ λ ₯ μ λ°λμ YYYY-MM-DD νμμΌλ‘ μ λ ₯ν΄μΌ νλ©°, κΈμ‘ μ λ ₯ μμλ μ«μλ§ μ λ ₯νλλ‘ μ£Όμν΄ μ£ΌμΈμ. λ§μ½ μλͺ»λ μ λ ₯μ΄ λ€μ΄μ¬ κ²½μ°, μμΈ μ²λ¦¬ ꡬ문μ μν΄ μ€λ₯ λ©μμ§κ° μΆλ ₯λλ©° λ€μ μ λ ₯ν μ μλ κΈ°νκ° μ£Όμ΄μ§λλ€.
μΆκ°λ‘, μ΄ μμ λ κΈ°λ³Έμ μΈ κΈ°λ₯λ§μ λ€λ£¨κ³ μκΈ° λλ¬Έμ, μ€μ μλΉμ€μ μ μ©νκΈ° μν΄μλ νμΌ μ μΆλ ₯μ ν΅ν λ°μ΄ν° μ μ₯, GUI(κ·Έλν½ μ¬μ©μ μΈν°νμ΄μ€) λλ μΉ μΈν°νμ΄μ€μμ μ°λ, 보μ λ° λ°μ΄ν° κ²μ¦ λ±μ μΆκ° κΈ°λ₯μ ꡬννλ κ²μ΄ νμν©λλ€. νμ§λ§ μ΄λ³΄μμκ²λ νμ΄μ¬μ κΈ°μ΄ λ¬Έλ²κ³Ό κ°λ¨ν λ°μ΄ν° μ²λ¦¬ λ°©λ²μ μ΄ν΄νλ λ° ν° λμμ΄ λ κ²μ λλ€.
κ²°λ‘
νμ΄μ¬μ νμ©ν κ°λ¨ν κ°κ³λΆ νλ‘κ·Έλ¨μ νλ‘κ·Έλλ° κΈ°μ΄λ₯Ό λ€μ§κ³ , μ€μνμμ μ μ©νκ² νμ©ν μ μλ λꡬλ₯Ό μ§μ λ§λ€μ΄λ³Ό μ μλ μ’μ μμ μ λλ€. μ΄λ² ν¬μ€ν μμ μκ°ν μ½λλ μ¬μ©μ μ λ ₯μ λ°μ λ°μ΄ν°λ₯Ό μ²λ¦¬νλ κΈ°λ³Έμ μΈ κ΅¬μ‘°λ₯Ό κ°μΆκ³ μμΌλ©°, λ΄μ μΆκ°, μ‘°ν, μμ‘ κ³μ°κ³Ό κ°μ ν΅μ¬ κΈ°λ₯μ λͺ¨λ ν¬ν¨νκ³ μμ΅λλ€.
μ΄ μμ λ₯Ό λ°νμΌλ‘ μΆκ°μ μΈ κΈ°λ₯(μ: λ°μ΄ν° νμΌ μ μ₯, μ¬μ©μ μΈμ¦, κ·Έλνλ₯Ό μ΄μ©ν μκ°ν λ±)μ λν΄ λκ°λ€λ©΄, λ³΄λ€ μμ±λ λμ κ°κ³λΆ μ ν리μΌμ΄μ μΌλ‘ λ°μ μν¬ μ μμ΅λλ€. λν, νμ΄μ¬μ λ€μν λΌμ΄λΈλ¬λ¦¬μ νλ μμν¬(μ: Django, Flask, Tkinter λ±)λ₯Ό νμ©νλ©΄ μΉ κΈ°λ° λλ λ°μ€ν¬ν κΈ°λ°μ κ°κ³λΆ μ±μΌλ‘ νμ₯ν μ μλ κ°λ₯μ±λ μ΄λ € μμ΅λλ€.
κ²°λ‘ μ μΌλ‘, νμ΄μ¬μ κ°λ¨ν μ½λ μμ λ₯Ό ν΅ν΄ κΈ°λ³Έμ μΈ κ°κ³λΆ κΈ°λ₯μ ꡬνν΄λ³΄λ κ²½νμ κ°λ°μλ‘μμ 첫 κ±Έμμ λ΄λλ λ° ν° λμμ΄ λ λΏ μλλΌ, μ΄ν λ³΄λ€ λ³΅μ‘ν μ ν리μΌμ΄μ κ°λ°μ μμ΄μλ μμ€ν λ°κ±°λ¦μ΄ λ κ²μ λλ€. μμΌλ‘λ λ€μν μ€μ΅ μμ λ₯Ό ν΅ν΄ νλ‘κ·Έλλ° μ€λ ₯μ ν₯μμν€κ³ , μμ λ§μ νλ‘μ νΈλ‘ λ°μ μν€μκΈΈ λ°λλλ€.
'Lect & Tip > Python' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
νμ΄μ¬ μ λΉν°μμ΄ κ²μ¬ νλ‘κ·Έλ¨ (0) | 2025.04.29 |
---|---|
νμ΄μ¬ RuntimeError: lost sys.stdin μ€λ₯ ν΄κ²° (0) | 2025.04.26 |
μΌμ©μ§ μλμΈ κ³μ°λ°©λ², νμ΄μ¬ μλ κ³μ°κΈ° λ§λ€κΈ° (0) | 2025.04.25 |
νμ΄μ¬ μΈμ€νκ·Έλ¨ μ¬μ§ λ€μ΄λ‘λ μ€ν¬λ¦½νΈ λ§λ€κΈ° (0) | 2025.04.24 |
λκΈ