Python Programming [Exercise 6]

 Published On

[문제 1번]

(Fan 클래스) 팬을 표현하는 Fan 클래스를 설계하시오. Fan 클래스는 다음을 포함한다.

팬의 속도를 나타내는 각각의 값이 1, 2, 3 인 세 상수 SLOW, MEDIUMFAST 팬의 속도를 명시하는 private int 데이터 필드 speed 팬의 전원이 켜져 있는지 나타내는 private bool 데이터 필드 on (기본 값 False) 팬의 반지름(크기)을 나타내는 private float 데이터 필드 radius 팬의 색상을 나타내는 private string 데이터 필드 color 모든 데이터 필드에 대한 접근자와 변경자 특정 속도(기본값 SLOW), 반지름(기본값 5), 색상(기본값 blue), 그리고 전원(기본값 False)에 대한 선풍기를 생성하는 생성자

Fan 클래스에 대한 UML 다이어그램을 작성한 후 클래스를 구현하시오. 두 개의 Fan 객체를 생성하는 테스트 프로그램을 작성하시오. 첫 번째 객체에 대해 최대 속도, 크기 10, 색상 노란색 그리고 전원 켜짐을 할당하시오. 두 번째 객체에 대해 중간 속도, 크기 5, 색상 파란색 그리고 전원은 꺼짐을 할당하시오. 각 객체의 속도, 반지름, 색상 및 전원 속성을 출력하시오.

# 팬의 속도를 나타내는 speed는 SLOW = 1, MEDIUM = 2, FAST = 3인 세 상수를 가지고 있으므로
# 이를 전역변수로 선언해준다
SLOW = 1 
MEDIUM = 2
FAST = 3

class Fan:
    global SLOW, MEDIUM, FAST # 클래스 내에서도 전역변수처럼 사용하기 위한 global 예약어 
    def __init__(self, speed = SLOW, radius = 5, color = "blue", on = False): 
        # 속도 기본값 SLOW, 반지름 기본값 5, 색상 기본값 blue, 전원 기본값 False인 디폴트 생성자  
        if speed == SLOW: # speed가 SLOW이면
            self.__speed = 1 # 값을 1을 반환
        elif speed == MEDIUM: # speed가 MEDIUM이면
            self.__speed = 2 # 값을 2를 반환
        elif speed == FAST: # speed가 FAST이면
            self.__speed = 3 # 값을 3을 반환
        self.__radius = radius 
        self.__color = color 
        self.__on = on 
    def setSpeed(self, speed): # speed 변경자
        self.__speed = speed 
    def getSpeed(self): # speed 접근자
        return self.__speed
    def setRadius(self, radius): # radius 변경자
        self.__radius = radius
    def getRadius(self): # radius 접근자
        return self.__radius
    def setColor(self, color): # color 변경자
        self.__color = color
    def getColor(self): # color 접근자
        return self.__color
    def setOn(self, on): # on 설정자
        self.__on = on
    def getOn(self): # on 접근자
        return self.__on
    def PrintInfo(self): # Fan 클래스의 속성 출력 메소드
        print("속도: ", self.__speed)
        print("반지름: ", format(self.__radius, ".1f"))
        print("색상: ", self.__color)
        print("전원 속성: ", self.__on)

        
Fan1 = Fan(FAST, 10, "yellow", True)
Fan2 = Fan(MEDIUM, 5, "blue", False)

Fan1.PrintInfo()
print()
Fan2.PrintInfo()

[문제 2번]

(스톱워치) StopWatch 클래스를 설계하시오. 클래스는 다음을 포함한다.

Private 데이터 필드 startTimeendTime 및 get 메소드 현재시간으로 startTime을 초기화하는 생성자 현재시간으로 startTime을 재설정하는 start() 메소드 현재시간을 endTime으로 설정하는 stop() 메소드 스톱워치의 경과시간을 밀리초 단위로 반환하는 getElapsedTime() 메소드

StopWatch 클래스의 UML 다이어그램을 작성한 후 클래스를 구현하시오. 1부터 1,000,000 까지 숫자를 더하는 데 소요되는 실행 시간을 측정하는 테스트 프로그램을 작성하시오.

import time # time 함수를 사용하기 위해 import해준다

class StopWatch:
    def __init__(self): # startTime을 초기화하는 생성자
        self.__startTime = time.time()
    def start(self, startTime): # startTime을 재설정하는 start() 메소드
        self.__startTime = startTime
    def getStart(self): # startTime을 반환하는 get() 메소드
        return self.__startTime
    def stop(self, endTime): # endTime을 설정하는 stop() 메소드
        self.__endTime = endTime
    def getStop(self): # endTime을 반환하는 get() 메소드
        return self.__endTime
    def getElapsedTime(self): # 스톱워치의 경과시간을 밀리초 단위로 반환하는 메소드
        return (self.__endTime - self.__startTime) * 1000 # 밀리초이므로 1000을 곱해준다

watch = StopWatch() # StopWatch 클래스의 객체 생성
watch.start(time.time()) # 1부터 1,000,000 더하기 시작 
sum = 0
for i in range(1, 1000001):
    sum += i
watch.stop(time.time()) # 1부터 1,000,000 더하기 끝

print("경과시간:", watch.getElapsedTime())

[문제 3번]

(Time 클래스) Time 라는 이름의 클래스를 설계하시오. 클래스는 다음을 포함한다.

시간을 표현하는 hour, minutesecond private 데이터 필드 현재 시간을 사용하여 hour, minutesecond 를 초기화하는 Time 객체를 생성하는 생성자 각각의 hour, minutesecond 데이터 필드에 대한 get 메소드 초 단위의 소요 시간을 사용하여 객체의 새로운 시간을 설정하는 setTime(elapseTime) 메소드, 예를 들어 소요 시간 555550 초는 10 시간, 19 분, 10 초이다.

Time 클래스에 대한 UML 다이어그램을 작성한 후 클래스를 구현하시오. Time 객체를 생성하는 테스트 프로그램을 작성하고 시, 분, 초를 출력하시오. 프로그램은 사용자로부터 소요 시간을 입력 받고 Time 객체에 입력 받은 소요 시간을 설정하고 시, 분, 초를 출력한다. 실행 예는 다음과 같다.

현재 시간은 12:41:6 입니다.
소요 시간을 입력하세요: 55550505 (enter)
소요 시간의 시:분:초는 22:41:45 입니다.
(힌트: time 모듈의 time() 함수는 1970년 1월 1일 자정 이후 현재까지 소요 시간을 초 단위의 float 데이터로 반환한다. 소요 시간을 시:분:초로 변환한 위의 예는 UTC (그리니치 표준시) 기준으로 표현된 것이다. 이를 위해 time 모듈에 정의된 함수를 활용할 수 있다.)
import time

class Time:
    def __init__(self): # 현재 시간을 사용하여 초기화하는 생성자
        self.__hour = int(((time.time() / 60) / 60) % 24)
        self.__minute = int((time.time() / 60) % 60)
        self.__second = int(time.time() % 60)
    def getHour(self): # hour의 get() 메소드
        return self.__hour
    def getMinute(self): # minute의 get() 메소드
        return self.__minute
    def getSecond(self): # second의 get() 메소드
        return self.__second
    def setTime(self, elapseTime): # 초 단위의 소요 시간을 사용하여 새로운 시간 설정 메소드
        self.__hour += int((((elapseTime) // 60) // 60) % 24) 
        if self.__hour > 24:
            self.__hour %= 24
        self.__minute += int((elapseTime // 60) % 60)
        if self.__minute > 60:
            self.__minute %= 60
        self.__second += int(elapseTime % 60)
        if self.__second > 60:
            self.__second %= 60

t = Time()
print("현재 시간은 " + str(t.getHour()) + ":" + str(t.getMinute()) + ":" + str(t.getSecond()) + " 입니다.")
timer = eval(input("소요 시간을 입력하세요:"))
t.setTime(timer)
print("현재 시간은 " + str(t.getHour()) + ":" + str(t.getMinute()) + ":" + str(t.getSecond()) + " 입니다.")

[문제 4번]

(대수학: 2차 방정식) 2차 방정식 𝑎𝑥2 + 𝑏𝑥 + 𝑐 = 0에 대한 QuadraticEquation 클래스를 설계하시오. 클래스는 다음과 같이 구성된다.

세 개의 계수를 표현하는 private 데이터 필드 a, b, c a, b, c에 대한 인자를 받는 생성자 a, b, c에 대한 세 개의 get 메소드 판별식 𝑏2 − 4𝑎𝑐를 반환하는 getDiscriminant() 메소드 다음 공식을 사용하여 방정식의 두 해를 반환하기 위한 getRoot1()getRoot2() 메소드

두 메소드는 오직 판별식이 음수가 아닐 때만 유효하다. 판별식이 음수이면 두 메소드는 0을 반환한다.

QuadraticEquation 클래스의 UML 다이어그램을 작성한 후 클래스를 구현하시오.

사용자로부터 a, b와 c의 값을 입력받고 판별식에 기반하여 결과를 출력하는 테스트 프로그램을 작성하시오. 판별식이 양수이면 두 해를 출력하시오. 판별식이 0이면, 하나의 해를 출력하시오. 그렇지 않으면 “이 방정식은 해가 없습니다.”를 출력하시오.

import math # math.sqrt() 함수를 사용하기 위해 math 모듈 import

class QuadraticEquation:
    def __init__(self, a, b, c): # a,b,c를 매개변수로 받는 생성자
        self.__a = a
        self.__b = b
        self.__c = c
    def getA(self): # 데이터 필드 a 접근자
        return self.__a
    def getB(self): # 데이터 필드 b 접근자
        return self.__b
    def getC(self): # 데이터 필드 c 접근자
        return self.__c
    def getDiscriminant(self): # 판별식 반환 메소드
        return pow(self.__b, 2) - 4 * self.__a * self.__c
    def getRoot1(self, dis): # 두 해 중 하나의 해를 반환하는 메소드, dis라는 매개변수를 사용, 이 변수는 판별식이 들어온다
        r1 = (-self.__b + math.sqrt(dis)) / (2 * self.__a) # 공식 사용
        if dis < 0: # 판별식이 음수이면
            return 0 # 0으로 반환
        else: # 0 또는 양수이면 
            return r1 # 해를 반환
    def getRoot2(self, dis): # 두 해 중 나머지 하나의 해를 반환하는 메소드
        r2 = (-self.__b - math.sqrt(dis)) / (2 * self.__a) # 공식 사용
        if dis < 0: # 판별식이 음수이면 
            return 0 # 0으로 반환
        else: # 0 또는 양수이면
            return r2 # 해를 반환

a, b, c = eval(input("a,b,c 값 입력: "))
equation = QuadraticEquation(a, b, c)
discriminant = equation.getDiscriminant()
if discriminant > 0: # 만약 판별식이 양수이면 서로 다른 두 해를 출력
    print("서로 다른 두 해는:", equation.getRoot1(discriminant),",",equation.getRoot2(discriminant))
elif discriminant == 0: # 만약 판별식이 0이면 하나의 중근을 출력
    print("중근은:", equation.getRoot1(discriminant))
else: # 만약 판별식이 음수이면 해가 없음을 출력
    print("이 방정식은 해가 없습니다.")

Tags: Language

Comments:

comments powered by Disqus

© 2021 - MH.Ji. All rights reserved
Built using Jekyll