728x90
반응형
목표
class를 사용하여 TV를 만들어 보겠습니다.
강의
TV구조
1. 전원 버튼
3. 볼륨 버튼
4. 채널 버튼
5. 화면
6. 통신사
7. 리모콘
필요 사전 지식
1. thread
- program 내부에서 기본 program 로직과 별도로 수행되는 function을 실행 시킬 때 사용하는 기술 입니다.
2. enum
- 상수 값을보기 인지 하기 편하게 만들기 위해서 사용하는 기술 입니다.
- https://docs.python.org/ko/3/library/enum.html
도식
결과물
전체 코드
import enum
import time
import os
import threading as th
"""
통신사
"""
class LGUPlus:
chanel_info = (
'안녕하세요 수푸자 여려분 반갑습니다.',
'오늘의 날씨는 맑을 예정입니다.',
'내일의 날씨는 비가올 예정입니다.',
'없는 채널 입니다.'
)
def get_chanel_content(self, number):
if (self.chanel_info.__len__() <= number):
return self.chanel_info[self.chanel_info.__len__() - 1]
return self.chanel_info[number]
"""
TV 부품들 정의
"""
class button_status(enum.IntEnum):
OFF = 0
ON = 1
CH_UP = 2
CH_DOWN = 3
VO_UP = 4
VO_DOWN = 5
class button:
value = 0
def up(self):
self.value += 1
def down(self):
if (0 < self.value):
self.value -= 1
def info(self):
return self.value
class display_panel:
broadcasting = LGUPlus()
def __init__(self) -> None:
self.made_in = "samsung"
self.serial_number = "20220506"
def display_contents(self, number):
print("-----------------------------------------------")
print("| |")
print("|", self.broadcasting.get_chanel_content(number))
print("| |")
print("-----------------------------------------------")
"""
전파
"""
power_button_signal = True
ch_button_up_signal = False
ch_button_down_signal = False
vo_button_up_signal = False
vo_button_down_signal = False
"""
TV 정의
"""
class TV:
power_flag = True
power_button = button()
channel_button = button()
volume_button = button()
display = display_panel()
def __init__(self) -> None:
th.Thread(target=remote_controller, args=(),
name='remote_controller', daemon=True).start()
def start(self):
"""
사용할 전역 변수 참조 선언
"""
global power_button_signal
global ch_button_up_signal
global ch_button_down_signal
global vo_button_up_signal
global vo_button_down_signal
while False != self.power_flag:
# 시그널 처리
if power_button_signal == False:
self.power_flag = False
elif ch_button_up_signal == True:
print("채널 업")
self.channel_button.up()
ch_button_up_signal = False
elif ch_button_down_signal == True:
print("채널 다운")
self.channel_button.down()
ch_button_down_signal = False
elif vo_button_up_signal == True:
print("볼륨 업")
self.volume_button.up()
vo_button_up_signal = False
elif vo_button_down_signal == True:
print("볼륨 다운")
self.volume_button.down()
vo_button_down_signal = False
os.system('clear')
print("made in : ", self.display.made_in,
" serial : ", self.display.serial_number)
print(
"메뉴 : 0(power OFF), 1(power ON), 2(CH UP), 3(CH DOWN), 4(VO UP), 5(VO DOWN)")
print("info : ch : ", self.channel_button.info(), "vo : ",
self.volume_button.info())
self.display.display_contents(self.channel_button.info())
time.sleep(1)
"""
리모콘
"""
def remote_controller():
while True:
str_key = input()
key = int(str_key)
global power_button_signal
global ch_button_up_signal
global ch_button_down_signal
global vo_button_up_signal
global vo_button_down_signal
if button_status['OFF'].value == key:
power_button_signal = False
elif button_status['ON'].value == key:
power_button_signal = True
elif button_status['CH_UP'].value == key:
ch_button_up_signal = True
elif button_status['CH_DOWN'].value == key:
ch_button_down_signal = True
elif button_status['VO_UP'].value == key:
vo_button_up_signal = True
elif button_status['VO_DOWN'].value == key:
vo_button_down_signal = True
"""
main 함수 정의
"""
if __name__ == "__main__":
tv = TV()
tv.start()
728x90
반응형
'강의 > python3' 카테고리의 다른 글
[project] 2강. GUI 기본 개발 (0) | 2022.05.28 |
---|---|
[project] 1강. upbit 자동화 프로그램 만들기 (0) | 2022.05.21 |
[python3] 9강. class (0) | 2022.04.29 |
[python3] 8강. programming 방법론 (0) | 2022.04.29 |
[python3] 7강. 중간 정리 (프로그램 구조, 변수, 제어문, 함수) (0) | 2022.04.23 |