Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- sqld
- 상관관계
- 그래프시각화
- 데이터분석
- 막대그래프
- %in%
- 정보획득량
- 불순도제거
- difftime
- 단순회귀 분석
- if문 작성법
- count
- sql
- 데이터분석가
- Sum
- 히스토그램 그리기
- 팀스파르타
- merge
- 회귀분석
- 회귀분석 알고리즘
- 빅데이터분석
- 순위출력
- Intersect
- 그래프 생성 문법
- 빅데이터
- Dense_Rank
- loop 문
- 여러 데이터 검색
- max
- 총과 카드만들기
Archives
- Today
- Total
ch0nny_log
[빅데이터분석] Python_27. 인스턴스 변수와 클래스 변수 본문
# Card 클래스 정의 class Card: def __init__(self): self.money = 0 self.raise_amount = 1.1 print('카드가 발급 되었습니다.', self.money, '원이 충전되어 있습니다.') def charge(self, num2): num = int(num2 * self.raise_amount) # 충전액을 올림 self.money += num print(num, '원이 충전 되었습니다.') print('현재 카드의 충전금액은', self.money, '입니다.') def consume(self, num): if self.money >= num: self.money -= num print(num, '원이 사용되었습니다.') else: print('잔액이 부족합니다.') print('현재 잔액은', self.money, '원입니다.') # 카드 발급 및 충전 확인 card5 = Card() card5.charge(10000) # 10000원이 충전될 때, 11000원이 카드에 충전됩니다.
# Card 클래스 정의 class Card: def __init__(self): self.money = 0 self.raise_amount = 1.1 print('카드가 발급 되었습니다.', self.money, '원이 충전되어 있습니다.') def charge(self, num2): num = int(num2 * self.raise_amount) # 충전액을 올림 self.money += num print(num, '원이 충전 되었습니다.') print('현재 카드의 충전금액은', self.money, '입니다.') def consume(self, num): if self.money >= num: self.money -= num print(num, '원이 사용되었습니다.') else: print('잔액이 부족합니다.') print('현재 잔액은', self.money, '원입니다.') # 카드 발급 및 충전 확인 card6 = Card() card5.raise_amount =1.2 card5.charge(10000)
설명: 설계도를 무시하고 20% 적립이 되었습니다. (raise_amount를 인스턴트 변수로 만들었기 때문)
class Card: raise_amount = 1.1 # 클래스 변수 선언 def __init__(self): self.money = 0 print('카드가 발급 되었습니다.', self.money, '원이 충전되어 있습니다.') def charge(self, num2): num = int(num2 * Card.raise_amount) # 충전액을 올림 self.money += num print(num, '원이 충전 되었습니다.') print('현재 카드의 충전금액은', self.money, '입니다.') def consume(self, num): if self.money >= num: self.money -= num print(num, '원이 사용되었습니다.') else: print('잔액이 부족합니다.') print('현재 잔액은', self.money, '원입니다.') class VIPCard(Card): def __init__(self): super().__init__() self.raise_amount = 1.2 # VIP 고객은 20% 적립 def charge(self, num2): num = int(num2 * self.raise_amount) # VIP 적립 비율 적용 self.money += num print(num, '원이 충전 되었습니다.') print('현재 카드의 충전금액은', self.money, '입니다.') # 카드발급 card7 = Card() card7.raise_amount =1.2 card7.charge(10000) # 10000원이 충전될 때, 11000원이 카드에 충전됩니다.
인스턴스 변수는 함수 변경이 가능한데 클래스 변수는 변경이 안됨.
card8 = Card() card8.raise_amount = 1.2 card8.charge(10000) card8 = Card() Card.raise_amount = 1.2 card8.charge(10000) #클래스 변수로 클래스를 생성했다면 #객체 생성 이후에 클래스 변수를 수정하고 싶을 때 위와 같이 클래스 이름.변수를 쓰면 됨 #class 명을 쓰니 다시 값이 바뀌는 것을 확인할 수 있음 card9 = Card() card9.charge(10000) #클래스 변수를 수정했기 때문에 모든 객체(카드 발급자들)들이 다 적용됨
class PointCard:
def __init__(self, name, phone_number): # 클래스 객체를 만들면 반드시 실행
self.name = name # 인스턴스 변수 # 되는 함수
self.phone_number = phone_number # 인스턴스 변수
self.points = 0 # 인스턴스 변수
self.raise_amount = 0.01
print(f'{self.name}님, 르봉르쥬 빵집 포인트 적립회원으로 등록되었습니다. 핸드폰 번호: {self.phone_number}')
print('현재 적립된 포인트는', int(self.points), '포인트입니다.')
def charge(self, amount):
points = amount * self.raise_amount # 클래스 변수를 사용
print( int(points), '포인트가 적립 되었습니다.')
self.points += points
print('현재 적립된 포인트는', int(self.points), '입니다.')
def consume(self, amount):
self.points -= amount
if self.points >= 0:
print(amount, '포인트가 사용되었습니다.')
else:
print('잔액이 부족합니다.')
print(self.points, '포인트 남았습니다.')
import tkinter as tk
from tkinter import messagebox
class PointCard:
raise_amount = 0.01 # 클래스 변수
def __init__(self, phone_number):
self.phone_number = phone_number # 인스턴스 변수
self.points = 0 # 인스턴스 변수
print(f'{self.phone_number} 번호로 르봉르쥬 빵집 포인트 적립회원으로 등록되었습니다.')
print('현재 적립된 포인트는', self.points, '포인트입니다.')
def charge(self, amount):
points = amount * PointCard.raise_amount # 클래스 변수를 사용
print(points, '포인트가 적립 되었습니다.')
self.points += points
print('현재 적립된 포인트는', self.points, '입니다.')
def consume(self, amount):
self.points -= amount
if self.points >= 0:
print(amount, '포인트가 사용되었습니다.')
else:
print('잔액이 부족합니다.')
print(self.points, '포인트 남았습니다.')
# GUI 코드 시작
def register_customer():
phone = phone_entry.get()
if phone:
customers[phone] = PointCard(phone)
messagebox.showinfo("회원 등록", f"{phone} 번호로 등록되었습니다.")
else:
messagebox.showwarning("입력 오류", "핸드폰 번호를 입력해주세요.")
def charge_points():
phone = phone_entry.get()
amount = amount_entry.get()
if phone in customers and amount.isdigit():
amount = int(amount)
customer = customers[phone]
customer.charge(amount)
points_label.config(text=f"현재 포인트: {customer.points:.1f}")
else:
messagebox.showwarning("입력 오류", "유효한 핸드폰 번호와 금액을 입력해주세요.")
root = tk.Tk()
root.title("르봉르쥬 빵집 포인트 적립 시스템")
root.geometry("400x300") # 창 크기를 크게 설정
customers = {} # 고객 정보를 저장하는 딕셔너리
# 고객 정보 입력 프레임
frame1 = tk.Frame(root)
frame1.pack(pady=20)
tk.Label(frame1, text="핸드폰 번호:").grid(row=0, column=0, padx=5)
phone_entry = tk.Entry(frame1)
phone_entry.grid(row=0, column=1, padx=5)
register_button = tk.Button(frame1, text="회원 등록", command=register_customer)
register_button.grid(row=1, columnspan=2, pady=10)
# 구매 금액 입력 프레임
frame2 = tk.Frame(root)
frame2.pack(pady=20)
tk.Label(frame2, text="구매 금액:").grid(row=0, column=0, padx=5)
amount_entry = tk.Entry(frame2)
amount_entry.grid(row=0, column=1, padx=5)
charge_button = tk.Button(frame2, text="포인트 적립", command=charge_points)
charge_button.grid(row=1, columnspan=2, pady=10)
# 포인트 출력 라벨
points_label = tk.Label(root, text="현재 포인트: 0")
points_label.pack(pady=20)
root.mainloop()
구독료를 받을수 있는 빵집 적립 포인트 화면을 여러분 자유롭게 개발하시오..
import tkinter as tk
from tkinter import messagebox
class PointCard:
raise_amount = 0.01 # 클래스 변수
def __init__(self, phone_number):
self.phone_number = phone_number # 인스턴스 변수
self.points = 0 # 인스턴스 변수
print(f'{self.phone_number} 번호로 르봉르쥬 빵집 포인트 적립회원으로 등록되었습니다.')
print('현재 적립된 포인트는', self.points, '포인트입니다.')
def charge(self, amount):
points = amount * PointCard.raise_amount # 클래스 변수를 사용
print(points, '포인트가 적립 되었습니다.')
self.points += points
print('현재 적립된 포인트는', self.points, '입니다.')
def consume(self, amount):
self.points -= amount
if self.points >= 0:
print(amount, '포인트가 사용되었습니다.')
else:
print('잔액이 부족합니다.')
print(self.points, '포인트 남았습니다.')
# GUI 코드 시작
# 회원 등록 함수
def register_customer():
phone = phone_entry.get() # 입력된 핸드폰 번호를 가져옵니다.
if phone: # 만약 핸드폰 번호가 있다면
customers[phone] = PointCard(phone) # 고객 딕셔너리에 새로운 고객을 등록합니다.
messagebox.showinfo("회원 등록", f"{phone} 번호로 등록되었습니다.") #성공 메세지 출력
else:
messagebox.showwarning("입력 오류", "핸드폰 번호를 입력해주세요.") # 핸드폰 번호를
# 입력하지 않으면 경고 메세지를 출력합니다.
# 포인트 적립함수
def charge_points():
phone = phone_entry.get() # 입력 핸드폰번호를 가져옵니다.
amount = amount_entry.get() # 입력 구매 금액을 가져옵니다.
if phone in customers and amount.isdigit(): #핸드폰 번호가 등록되어있고 금액이 숫자인지 확인
amount = int(amount) # 금액을 정수고 변환합니다.
customer = customers[phone] # 고객정보를 가져옵니다.
customer.charge(amount) # 포인트를 적립합니다.
points_label.config(text=f"현재 포인트: {customer.points:.1f}") # 현재 포인트 업데이트
else:
messagebox.showwarning("입력 오류", "유효한 핸드폰 번호와 금액을 입력해주세요.")
# 입력 오류시 경고 메세지를 출력합니다.
root = tk.Tk() # tk모둘의 Tk() 클래스를 가지고 root 객체를 만듭니다.
root.title("르봉르쥬 빵집 포인트 적립 시스템") # 창의 제목을 설정합니다.
root.geometry("800x800") # 창 크기를 크게 설정
customers = {} # 고객 정보를 저장하는 딕셔너리
# 고객 정보 입력 프레임 - 핸드폰 번호를 입력받는 UI 를 구성합니다.
frame1 = tk.Frame(root, width=400, height=100) # 프레임의 크기 설정
frame1.pack(pady=20) # 입력 프레임을 화면에 셋팅
#frame1.grid_propagate(False) # 프레임 크기가 내부 위젯에 의해 변경되지 않도록 설
tk.Label(frame1, text="핸드폰 번호:").grid(row=0, column=0, padx=5) # 라벨생성
phone_entry = tk.Entry(frame1) # 핸드번호를 입력받을 entry 생성
phone_entry.grid(row=0, column=1, padx=5) # entry 배치
#회원 등록 번호 버튼 생성
register_button = tk.Button(frame1, text="회원 등록", command=register_customer)
register_button.grid(row=1, columnspan=2, pady=10) # 버튼 위치 지정해서 배치
# 구매 금액 입력 프레임 - 구매금액을 입력받아 포인트를 적립하는 UI 를 구성
frame2 = tk.Frame(root)
frame2.pack(pady=20)
tk.Label(frame2, text="구매 금액:").grid(row=0, column=0, padx=5) # 라벨 생성
amount_entry = tk.Entry(frame2) # 구매 금액을 입력받을 ENTRY 생성
amount_entry.grid(row=0, column=1, padx=5) # ENTRY 배치
# 포인트 적립 버튼 생성
charge_button = tk.Button(frame2, text="포인트 적립", command=charge_points)
charge_button.grid(row=1, columnspan=2, pady=10) # 버튼 배치
# 포인트 출력 라벨 - 현재 적립된 포인트 출력합니다.
points_label = tk.Label(root, text="현재 포인트: 0")
points_label.pack(pady=20) # 출력 라벨 배치
# 사진을 입력하기 위한 코드
from tkinter import PhotoImage
try:
bread_image = PhotoImage(file='c:\\data\\bread_image.png')
bread_label = tk.Label(root, image=bread_image)
bread_label.pack(pady=20)
except tk.TclError:
messagebox.showwarning("이미지 오류", "이미지를 열수 없습니다")
root.mainloop() # tkinter 메인 루프를 시작합니다.
'빅데이터 분석(with 아이티윌) > python' 카테고리의 다른 글
[빅데이터분석] Python_28. 파이썬 상속 (1) | 2024.08.13 |
---|---|
phython cbt 예상문제. (0) | 2024.08.12 |
[빅데이터분석] Python_26. 클래스 이해하기 (0) | 2024.08.09 |
[빅데이터분석] Python_25. 사용자 정의 예외 처리 (0) | 2024.08.08 |
[빅데이터분석] Python_24. 예외처리 이해하기 ④ (try~except Exception as e) (0) | 2024.08.08 |