본문 바로가기

전체 글

(74)
Python - 테트리스(Tetris) 만들기 (4) - Draw Rect 이전 글에서는, Tetris를 구동하기 위한 코드 초안을 작성했습니다. import pygame as pg class Tetris: def __init__(self, width: int, height: int): self._size = self.width, self.height = width, height self._display_surf = None self._running = False def _init(self): pg.init() self._display_surf = pg.display.set_mode(self._size) self._running = True def _event(self): for event in pg.event.get(): if event.type == pg.QUIT: ## W..
Python - 테트리스(Tetris) 만들기 (3) - Pygame Library Library 설치 우선 python을 화면에 띄우기 위해서는, library가 있어야 합니다. GUI모듈을 만드는 것은 매우 어려운 일이기 때문에...누군가 잘 만든 Tool, Library, Framework가 있다면 사용해야죠. 빌딩을 크레인 없이 삽질로만 만들 수는 없지 않겠습니까? 저는 GUI Tool로 Pygame을 선택했습니다. Library를 설치해 봅시다. pip install pygame 그러면 설치가 완료됩니다. Library 사용법 확인 pygame까지 설치한 것은 좋았는데, 이제 어떻게 할까요? 새로운 library를 봤으면 유튜브나, 구글 문서를 확인해 보는 것도 좋지만, 공식 Site에서 보여주는 Tutorial을 참조하는 것도 좋은 습관입니다. 여기서 Tutorials에 들어..
Python - 테트리스(Tetris) 만들기 (2) - 환경 설정 프로그래밍을 하기위한 환경 설정은 매우 중요합니다. python을 돌아갈 수 있는 환경을 만들기 위해, vscode를 설치 하도록 합시다. vscode python 환경설정 그리고 Tetris라는 폴더를 새로 만들었습니다. Terminal을 엽니다. 단축키는 ctrl + `(1 옆에 있는 물결 키) 입니다. vscode 설치가 완료되었습니다. 혹시 python이 설치 안되신 분들은 python도 설치하도록 합시다. python 설치 방법 저는 가상환경을 만들어서 작업을 하려 합니다. 아래와 같은 명령어를 입력하도록 합시다. python -m venv .venv 그러면 다음과 같은 폴더가 생성될 것입니다. 이 폴더 안에, python 가상환경이 설치된 것입니다. 가상환경을 활성화 합시다. (윈도우 기준) ..
Python - 테트리스(Tetris) 만들기 (1) - Intro Intro(소개) 테트리스란, 블럭 4개로 이루어진 도형(Mino)를 필드에 쌓아, 줄을 지워나가는 게임입니다. 간단한 규칙에 비해, 다양한 기술들(예 : T-spin)이 있어 인기가 많은 게임입니다. 이 게임을 Python으로 구현하고자 합니다. Purpose(목적) 이 블로그에서 python으로 테트리스를 만드는 목적이 무엇일까요? 이해하기 쉬운 게임을 통해 프로그래밍의 기본적인 흐름을 보여주는 것이 주된 목적입니다. 구현을 아래 6단계로 나눠서 진행합니다. 1단계. 요구사항 문서 분석 2단계. 요구사항에 따른 언어 선택 3단계. 요구사항의 기능을 상세 분석, 구현 4단계. 기능 Test 5단계. Bug fix, 기능 확장(구현 단계인 3으로 돌아감) 6단계. 완성 보통사람들은 막연한 요구사항을 머릿..
C++에서 Compiler는 어떻게 동작할까? 컴파일러(Compiler)란? : 번역하는 프로그램. 책을 통째로 번역하는 것과 같다. 사람은 C언어를 사용하고, 컴퓨터는 이진법 언어(Binary code, Hex code, object code, machine code 등)를 사용하기에 서로의 언어를 이해하지 못합니다. 그래서 이를 해결하기 위해 필요한 것이 바로 Compiler입니다. Compiler는 C언어를 기계가 이해할 수 있도록 이진법 언어로 번역합니다. 이런 과정을 거쳐 사람은 C언어를 통해 바로 .exe와 같은 프로그램을 생성합니다. C++의 Compiler인 g++를 예시로 하여 그림으로 표현해 보았습니다. 한 단계씩 설명해 보겠습니다. Preprocessing 사람이 작성한 코드를 전처리 합니다. 이때 #include, #define..
Python - Int의 크기가 28bytes인 이유 *바쁘신 분들을 위한 3줄 요약 1. 28 bytes = refcnt (8 bytes) + Type pointer (8 bytes) + PySize (8 bytes) + digits (4 bytes) 2. refcnt는 GC를 위한 참조수, Type pointer는 Type을 표현하기 위한 포인터입니다. 3. Pysize, digits의 Array 구조 덕분에 큰 수에 대한 Overflow 걱정이 없습니다. *목차 - Python의 int는 쓸데없이 많은 메모리를 차지한다? - CPython의 코드를 살펴보자 - PyLongObject 분석 - Python의 int는 Overflow 되지 않는다 - Python에서 표현 가능한 가장 큰 숫자는? Python의 Int는 쓸데없이 많은 메모리를 차지한다? 혹..
Python - Mutable vs Immutable * 바쁘신 분들을 위한 3줄 요약 1. mutable이란, "메모리 주소를 유지한 채 값을 변경할 수 있다"란 뜻이다. 2. list, dict 등은 변경 가능(mutable)하며 3. int, float, string, tuple 등은 변경 불가능(immutable)하다. Mutable, Immutable은 무슨 뜻일까? mutable은 변경가능이란 뜻이며 immutable은 변경 불가능이란 뜻입니다. python에서 변경 가능(mutable)한 Data Type으로는 list, dict 등이 있으며, 변경 불가능(immutable)한 Data Type으로는 int, float, string, tuple 등이 있습니다. 하지만 이 정도의 설명으로는 오해를 하기 쉽습니다. int는 정말로 변경이 불가능한..
Python - 기본 문법정리 * 목차 1. 주석 2. 변수 3. 연산자 4. 변수 선언 5. 조건문 6. 반복문 7. 함수 8. 클래스 주석(Comments) python에서 지원하는 주석인 #과, 주석처럼 사용하는 Triple quotes가 있습니다. Triple quotes는 실제로는 string 객체지만, 주석으로 사용을 많이 합니다. Comment : #을 사용하며, 글자 뒤에 한 줄만 적용 됩니다. print해도 출력할 수 없습니다. # 주석1 입니다. # 주석2 입니다. Triple quotes : 큰 따옴표, 작은 따옴표를 사용하여 여러 줄에 적용합니다. print로 출력할 수 있습니다. """ document explain1 document explain2 """ ''' document explain1 document..
Python - List는 어떻게 데이터를 관리하는가? *바쁘신 분들을 위한 3줄 요약 1. List는 데이터가 저장된 주소들의 나열이다. (C언어 Level에서 이중포인터) 2. 데이터 주소만 List에 저장하기 때문에, 데이터 Type이 어떤 것이던지 List로 다룰 수 있음. 3. List는 데이터를 직접 다루는 게 아니기 때문에, Array에 비해 데이터를 다루는데 시간이 오래 걸린다. List는 어떠한 Data Type도 원소로 다룰 수 있다. Python에서 List를 다루다 보면, 다양한 Type에 대해서도 잘 동작하는 것을 경험합니다. >>> import numpy as np >>> a = [1,2.2,(3,4), "5", np.array([6,7]), {"key8": 9}, 10] >>> print(a) ## list에 int, float, ..
Python - is와 ==의 차이 * 바쁘신 분들을 위한 3줄 요약 1. is는 변수가 저장된 장소가 같은 지 확인합니다. 2. ==는 변수의 값이 같은 지 확인합니다. 3. 숫자, 글자 같은 고정값(Literal)에 is 연산자를 사용하면 SyntaxWarning을 일으킵니다. * 이 글에서 작성된 메모리 주소는 모두 가상입니다. 참고 바랍니다. 파이썬(python)에서는 "==" 연산자를 활용하여 같은 값인지 확인합니다. >>> a = 0 >>> b = 0 >>> a == b True 그런데 파이썬에는 is을 사용하는 경우도 있습니다. >>> a = 0 >>> b = 0 >>> a is b True is와 == 는 동일한 연산자일까요? ==와 is는 무엇이 다른 걸까요? is 연산자는 변수의 저장 위치가 같은지를 확인하는 연산자입니다..