파이썬 클래스와 객체개념을 숙달하기 위해 n면체 주사위 클래스를 만들고, 랜덤으로 값을 받는 프로그램을 짜보았다.
먼저 main함수를 만들어, 실제 함수가 실행되는 부분을 만들었다
사용자가 직접 주사위의 면 수를 입력할 수 있게 input 함수를 사용했고
mydice라는 변수에 FunnyDice 인스턴스를 할당해 주사위 로직을 실행할 객체를 생성했다.
아래는 해당 코드이다.
from random import randrange
def main():
n = get_inputs()
mydice = FunnyDice(n)
mydice.throw()
print(f"행운의 숫자는? {mydice.getval()}")
class FunnyDice:
def __init__(self, n = 6): # default of n = 6
self.n = int(n)
self.numbers = list(range(1, n+1)) # n = 1일때는 (1,7)의 리스트 생성
self.index = randrange(0, self.n) # randrange(0,6) = 범위 0~6사이 값중 랜덤값 하나 뽑음
#self.numbers의 index - 주사위 던지기 전 눈의 수
self.val = self.numbers[self.index]
#주사위 눈의 값
#주사위 면 수를 입력하고 인스턴트화를 하면, 생성자부분에
#주사위 면 수만큼의 리스트가 생성됨
#주사위가 생성자에 의해 생성된 후, 초기 index값이 있고,
#그 인덱스에 따른 초기 주사위 눈의 값을 존재시킴
def throw(self): #던졌을때 값 지정(랜덤으로 주사위 눈 나오게)
self.index = randrange(0, self.n)
self.val = self.numbers[self.index]
#throw를 하면, index값이 랜덤으로 다시 생성되고
#그에 따른 val값이 다시 산출됨
def getval(self):
return self.val
#나온 주사위 눈의 수를 보는 함수. 주사위 생성후 바로 본 값과
#THROW를 통해 던지고 난 후의 값이 매번 다름
def setval(self, val): #사용자가 주사위 눈을 세팅할 수 있게끔 하는 로직
if val <= self.n:
self.val = val
else: #예외처리 - 구간 밖 숫자 입력시
msg = "주사위에 없는 숫자입니다. 주사위는 1 ~ {0}까지 있습니다. ".format(self.n)
raise ValueError(msg)
#치트키, setval(val) 메서드에 val에 전달인자로
#들어온 값을 self.val값으로 지정
#setval 하고 getval하면 당연히 그 값이 나올것이다.
def get_inputs():
n = int(input("주사위 면의 개수를 입력하세요: "))
return n
def main():
n = get_inputs() #사용자에게 인풋을 받음
mydice = FunnyDice(n) #mydice라는 변수에 FunnyDice()라는 인스턴트를 할당
mydice.throw() #FunnyDice class 안의 메서드 throw 이용
print(f"행운의 숫자는? {mydice.getval()}") #unnyDice class 안의 메서드 getval()함수 이용
mydice.setval(7) #unnyDice class 안의 메서드 setval 이용, 숫자 치팅
print(f"니가 치팅한 숫자는? {mydice.getval()}") #setting 후 다시 결과값 받아보기
if __name__ == '__main__':
main() #코드가 짜여진 곳 바로 아래라면, main()함수를 실행하라는 말 - 오직 이 모듈 내에서만 작동
결괏값
주사위 면의 개수를 입력하세요: 100
행운의 숫자는? 59
니가 치팅한 숫자는? 7
'Computer Technology 기록부 > 코딩기록부 : Python' 카테고리의 다른 글
LSTM 모델을 이용한 인공지능 작사가 구축 (2) | 2022.07.05 |
---|---|
MNIST Dataset 이용한 CNN 모델 구축 (0) | 2022.07.05 |
[최종] 카메라 스티커 만들기 - 예외처리 포함 (0) | 2022.01.13 |
카메라 스티커 만들기 (0) | 2022.01.11 |
객체지향프로그래밍(OPP)이란? (0) | 2022.01.10 |
댓글