- Python 강의 | 4. Python 심화 [class에 대한 이해 / mutable 자료형과 immutable 자료형 ]
1. Class에 대한 이해
class = 틀
틀안에 재료들을 사용해 무언가를 만든다 → instance(객체)
[class와 def의 차이]
| class 안 함수선언 | class 밖 함수선언 |
| Method | def |
| Method는 선언만으로는 사용이 불가능하다. | 함수는 선언만으로 호출해서 사용이 가능하다. |
| class 안에만 있다면 변수는 전역변수처럼 사용이 가능하다. (method끼리 변수 사용이 자유로움) |
def안 변수는 지역변수로만 사용 가능하다. (global 선언시 전역변수 가능하지만 비추) |
[class 기본구조]
class CookieFrame(): # CookieFrame이라는 이름의 class 선언
def set_cookie_name(self, name):
self.name = name
cookie = CookieFrame()
cookie.set_cookie_name("my cookie") # 메소드의 첫 번째 인자 self는 무시된다.
print(cookie.name) # 결과값 : my cookie
self 는 class안 변수, 함수 등의 정보를 담고 있기 때문에 항상 첫 번째 인자로 self를 넣어줘야 한다.
1️⃣ class 생성 → 변수에 클래스 적용 : class안 모든 method 사용 가능 | cookie에 CookieFrame()을 적용
2️⃣ 생성된 클래스를 적용한 변수에 .method명("설정값") | CookieFrame안에 있는 set_cookie_name 메서드(name인자에 들어갈 값)를 이용해 cookie의 name을 'my cookie' 로 선언
3️⃣ 해당 변수의 method명 값이 설정값으로 변경 | cookie의 set_cookie_name이 'my cookie' 로 변경
[ __init__ 함수]
__init__ 은 생성자 함수로 객체 생성시 자동 실행된다.
(+ 언더바가 2개씩 붙는 이유는 파이선의 기본선언으로 꼭 지켜줘야 한다.)
📍class에 __init__메소드를 사용할 경우 인스턴스 생성 시 해당 메소드가 실행된다.
class CookieFrame():
def __init__(self, name):
print(f"생성 된 과자의 이름은 {name} 입니다!")
self.name = name
cookie = CookieFrame("my cookie") # 생성 된 과자의 이름은 cookie 입니다!
2. muteble 자료형과 immutable 자료형
| muteble 자료형 | immutable 자료형 |
| muteble은 값이 변한다는 의미 | immutable은 값이 변하지 않는다는 의미 |
| list / dict | int / float / str / tuple |
- mutable 속성의 예)
from logging.config import listen
mutable = ['list is mutable']
list = mutable 👉 같은 Memory 주소값 공유
list.append('append mutable')
print(mutable)
print(list)
👉 list에 append를 했지만 mutable 또한 list와 같은 Memory 주소값을 가지고 있기때문에 결과값은 동일하다.
- immutable 속성의 예)
a = 10
b = a 👉 a는 b에게 본인이 가진 값을 줬을 뿐 고유한 본인의 Memory 주소값이 있으므로 a = 10으로 고정
b += 5
print(a) 🟰 10
print(b) 🟰 15
- 숫자 야구 게임 | 9_7_task
1. 사용자의 입력을 받아 n개의 중복되지 않는 랜덤한 숫자를 생성한다.
2. 프로그램이 시작 된 시간을 기록한다.
3. 사용자의 입력을 받고, 입력을 받을 때마다 try count를 1씩 더해준다.
4. 사용자 입력 x와 랜덤하게 생성 된 y 두 숫자를 비교한다.
4-a. x의 첫 번째 숫자가 y에 포함되어 있는지 확인한다.
* 포함되어 있지 않다면 out count + 1
4-b. x의 첫 번째 숫자가 y에 포함되어 있다면 x의 첫 번째 숫자와 y의 첫 번쨰 숫자가 일치하는지 확인한다.
* 일치하는 경우 strike count + 1
* 일치하지 않는 경우 ball count + 1
4-c. 4-a ~ 4-b를 x의 모든 자릿수를 돌 때까지 반복한다.
5. 사용자가 exit을 입력하거나 정답을 맞출 때까지 3~4의 동작을 무한하게 반복한다.
6. 사용자의 입력이 1번에서 생성한 숫자와 일치 할 경우 필요한 정보를 출력하고 프로그램을 종료한다.
6-a. try count를 출력한다.
6-b. 프로그램이 종료 된 시간과 프로그램이 시작 된 시간의 차를 계산해 프로그램의 실행 시간을 출력한다.
6-c. 게임이 종료 된 시점의 날짜와 시각을 출력한다.
import random
import time
import datetime
def baseball_game():
length = int(input('자릿수 설정 (입력해 주세요) : ')) # 몇 자릿수로 게임할건지?
# 1.우리가 맞춰야 하는 숫자 : 중복되지 않은 랜덤한 숫자 생성
random_numbers = set()
while len(random_numbers) < length:
random_numbers.add(random.randint(0,9))
random_numbers = list(random_numbers)
random.shuffle(random_numbers)
# print(random_numbers) : 정답
# 2.import time 선언 후 시간 기록
start_time = time.time()
try_count = 0
# 5. 사용자가 exit 누르기 전까지 3~4 게임동작을 반복
while True:
input_number = input('값을 입력해 주세요 : ')
if input_number == 'exit':
return
# 3.위에서 입력을 받을때마다 try 횟수 +1
try_count += 1
ball_count = 0
strike_count = 0
out_count = 0
# 4.input 넘버의 index 0~(n)와 입력된 숫자~(m) 변수 선언
# 4-c. 4-a ~ 4-b 입력된 숫자를 모두 확인하는동안 반복
for n,m in enumerate(input_number):
m = int(m)
# 4-a. 입력된 숫자(m)가 맞춰야 하는 숫자에 존재하는가?
if m not in random_numbers:
out_count += 1
# 4-b. 존재한다면 index(n)과 자릿수를 비교하면서 자릿수 까지 맞는지 확인
else:
if random_numbers[n] == m:
strike_count += 1
else:
ball_count += 1
# 6. 사용자의 입력이 맞춰야 하는 수와 동일하다면 아래의 정보들을 출력
if strike_count == length:
print('###########################################')
print('성공')
print(f'소요시간 : {time.time() - start_time:.2f}')
print(f'시도 홧수 : {try_count}')
print('###########################################')
return
# 6-a. out / strike / ball 카운트는 게임 성공과 상관없이 사용자 입력 마다 알려줘야 하기때문에 6번의 if문 바깥에 선언
print(f'out = {out_count} / strike = {strike_count} /ball = {ball_count}')
# 야구 게임 호출
baseball_game()
'woncoding > TIL' 카테고리의 다른 글
| TIL | 9.15.목 [Python 심화] (1) | 2022.09.16 |
|---|---|
| TIL | 9.14.수 [Python 심화] (0) | 2022.09.14 |
| TIL | 9.10.토 [Git / GitHub] (0) | 2022.09.12 |
| TIL | 9.9.금 [Git / GitHub] (0) | 2022.09.11 |
| TIL | 9.8.목 [Git / GitHub] (0) | 2022.09.09 |