_won_
wonprogrammer
_won_
전체 방문자
오늘
어제
  • 분류 전체보기
    • woncoding
      • TIL
      • WIL
    • source Code
      • Python
      • Programmers
      • BAEKJOON

블로그 메뉴

  • 방명록

티스토리

Github · Wonprogrammer
hELLO · Designed By 정상우.
_won_

wonprogrammer

woncoding/TIL

TIL | 9.13.화 [Python 심화]

2022. 9. 13. 21:00

- 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
    'woncoding/TIL' 카테고리의 다른 글
    • TIL | 9.15.목 [Python 심화]
    • TIL | 9.14.수 [Python 심화]
    • TIL | 9.10.토 [Git / GitHub]
    • TIL | 9.9.금 [Git / GitHub]
    _won_
    _won_
    Coding Practice blog

    티스토리툴바