본문 바로가기

전체 글

(73)
valueerror: exceeds the limit (4300 digits) for integer string conversion; use sys.set_int_max_str_digits() to increase the limit * 바쁘신 분들을 위한 빠른 해결법 import sys sys.set_int_max_str_digits(7000) ## 7000보다 더 높은 숫자 입력도 가능 Python의 int는 overflow되지 않는다? Python의 int는 보통의 상식선인 4bytes 크기가 아닌 28bytes나 소모하고 있습니다. 메모리 공간을 많이 차지하는 대신에 overflow에 걱정이 없다는 사실 알고 계셨나요?? * 자세한 글은 https://tyoon9781.tistory.com/entry/python-int-size-28bytes를 참조해 주세요 python의 int는 C/C++의 int와는 비교가 안될 정도로 큰 수를 다룰 수 있습니다. 그렇지만 혹시 의도적이지 않게 큰 숫자를 만들어 버리고 출력하면 시스템에 무..
React란? * 바쁘신 분들을 위한 3줄 요약 1. React는 Meta(Facebook)에서 만든 Javascript 라이브러리이다. 2. JSX 문법을 지원하여 html tag를 마치 프로그래밍 하듯이 작성할 수 있다. 3. Hook, 가상 DOM을 통해 Web application을 효율적으로 개발, 관리, rendering 할 수 있다. * 목차 1. 소개 (Introduce) 2. 언어 (Language) 3. Hook 4. 가상 돔 (Virtual DOM) 소개 (Introduce) React(React.js 또는 ReactJS)는 Component 기반으로 User interface를 구축하기 위한 Frontent Javascript 라이브러리입니다. 이 설명이 어려우신 분들은, "React란 웹페이지를..
Python - List Comprehension *바쁘신 분들을 위한 3줄 요약 1. List생성 code를 한 줄로 표현 가능한 문법입니다. 2. 어려워 보이지만 사실상 python의 문법을 거의 유지하고 있습니다. 3. 속도측면에서 유리할 때도 있지만 주의해서 사용해야 합니다. Introduce(소개) List Comprehension를 한국어로 직역하면 "목록 표현식"이라 할 수 있습니다. python에서는 List 객체를 한 줄로 표현할 수 있는 고유한 문법을 뜻합니다. 이 문법을 사용하면 List를 작성할 때 보다 간결하게 작성이 가능합니다. 예를 들어, 0~9까지의 수 중, 3의 배수가 아닌 것만 list에 담고 싶을 때, 기존 방식으로는 이렇게 작성합니다. a = [] for i in range(10): if i % 3 != 0: a.ap..
Python - np.array vs list python에는 데이터를 다루기 위해 주요 쓰이는 주요한 자료구조가 있습니다. ## 서로의 동작이 사실 좀 다릅니다. 자세한 내용은 다음에... ## list 선언. a = list([1, 2, 3]) a = [1, 2, 3] ## set 선언. b = set([1, 2, 3]) b = {1, 2, 3} ## tuple 선언. c = tuple([1, 2, 3]) c = (1, 2, 3) ## dict 선언 d = dict(k1=1, k2=2, k3=3) d = {"k1": 1, "k2": 2, "k3": 3} List, set, tuple, dict은 다음과 같은 특징을 가지고 있습니다. Type 특징 List 수정, 중복데이터를 허용한다. Set 중복데이터는 허용하지 않는다. Tuple 수정이 불가능..
Python - 테트리스(Tetris) 만들기 (9) - Refactoring *이번 시간은 설계를 제대로 하지 않은 업보를 확인하는 시간입니다. 전체적인 설계 없이 4(Draw rect) ~ 8(Field)까지 기능 구현만 집중했더니 Refactoring이 얼마나 힘들어 졌는지 확인해 보세요. 이번 글에서는 Refactoring을 진행해보도록 하겠습니다. Refactoring을 할 코드는 아래와 같습니다. * Tetris 객체 안에서 요소들이 혼잡한 형태라는 것만 파악하셔도 충분합니다. import pygame as pg from typing import List from copy import deepcopy class Mino: def __init__(self, name:str, blocks:List[List], color:tuple): self.name = name self...
Python - 테트리스(Tetris) 만들기 (8) - Field 이전 시간에서의 문제점은, current mino가 drop까지는 되었는데, Field에 남지 않는 문제가 있었습니다. 이렇게 된 원인은 2가지가 있습니다. 1. field 자체가 정의되어 있지 않다. 2. mino를 field에 남기는 함수가 없다. 그래서, 이번시간에는 field를 제대로 만들어 보고자 합니다. 1. Field를 만들어보자. 이전에 처음 field를 표현할 때는 10 x 20으로 보인다 그래서 사각형을 해당 크기만큼 그렸었습니다. 실제 게임상에서 요구하는 Field도 10 x 20일까요? 10 x 40을 안내하면서 20만 보인다고 하고 있습니다. 즉 이런 그림의 형태로 필드라고 생각할 수 있습니다. 이해가 어려우신 분들은 아래 영상까지 같이 참고 바랍니다. 10 x 40 Field 크..
Python - 테트리스(Tetris) 만들기 (7) - Drop Timer 이전 시간에는 mino를 경계선 안에서 자유자재로 움직일 수 있도록 했습니다. 하지만 다음 블럭이 나오는 일은 없었죠. 이번 글에서는, 블럭이 놓이는 조건을 작성하고, 블럭이 놓인 후 다음 블럭이 나올 수 있도록 해보겠습니다. 블럭이 놓이는 조건이 뭘까요? 문서를 찾아보니 Lock Delay라는 문서가 있습니다. 미노가 놓인다고 바로 멈추는 것이 아니라, 적절한 시간이 지나는 동안에도 움직임이 없으면 (보통은 0.5초) 멈춥니다. 이 동작을 만들기 위해서는 타이머를 동작시킬 조건 (더 이상 밑으로 내려가지 못함) 타이머가 필요 (0.5초를 재야 함) 타이머가 0.5초동안 움직인 후 다음 블럭 생성 위 3동작이 있어야 할 것입니다. 바로 작성해 봅시다. 1. 더 이상 밑으로 내려가지 못하는 조건 생성 먼저..
Python - 테트리스(Tetris) 만들기 (6) - Tetriminos 지난 시간에는 키보드에 따라 한 칸씩 움직이는 사각형을 만들었습니다. 이번에는 그 사각형을 Tetriminos(이하 미노라 하겠습니다)로 만들어보겠습니다. 오랜만에 공식 문서 https://tetris.fandom.com/wiki/Tetromino를 확인해 보겠습니다. 미노는 총 7가지가 있습니다. 이 미노를 어떻게 python에서 작성할 수 있을까요? 우선 간단하게 미노를 눈으로 보니 7개의 미노가 존재합니다. I, O, T, S, Z, J, L로 각각 이름이 있으며 모양과 색깔도 있습니다. 이 정보를 가지고 class로 작성해 보았습니다. Mino를 Class로 작성. name에는 string을 작성, blocks에는 x, y가 들어갈 좌표 list를 작성, rgb 숫자를 저장할 tuple를 작성합니..
Python - 테트리스(Tetris) 만들기 (5) - Event Event Handling Event란 무엇일까요? 다양한 뜻이 있지만, 보통은 사건 발생을 의미하며, 게임에서는 사용자의 입력을 의미하기도 합니다. 이런 Event 처리를 Event Handling이라 합니다. pygame에서는 어떤 식으로 event handling을 할지 살펴봅시다. def _event(self): for event in pg.event.get(): if event.type == pg.QUIT: ## Window 상단 X버튼 self._running = False 이전에 봤던 함수죠? pg.QUIT가 없으면 종료조차 못하는 pygame을 확인했던 그 함수입니다. 이 pg.event.get()을 통해, 움직이는 물체를 만들어 보겠습니다. 움직이는 물체를 만들기 위해선 다음과 같은 동작..
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..