(Python) 리스트의 인덱스와 범위를 쉽게 이해하는 방법

리스트의 인덱스는 0부터 시작한다. 사실 많은 프로그래밍 언어에서 배열의 인덱스는 0부터 시작하기 때문에 “맨 첫원소가 0번이고 그 다음은 1번… N번째 원소는 N-1로 참조할 수 있다.”고 외워두면 그리 헷갈리지는 않는다.

그런데 이게 슬라이스 범위 문법에서는 또 헷갈린다. 그 이유는 슬라이스에서 뒤쪽 범위는 포함되지 않기 때문이다. 게다가 파이썬 리스트는 음수 인덱스를 사용해서 뒤에서부터 위치를 지정하는 것도 있다. 자, 첫번째 원소는 0번인데 뒤에서 부터 세면 -1 번부터 시작한다. 그렇다면 -5:-2는 어디서부터 어디까지일까?

(Python) 리스트의 인덱스와 범위를 쉽게 이해하는 방법 더보기

(Python) Awaitable에 대해

await 키워드를 통해서 실행이 완료되기 전에 다른 작업으로 전환이 가능한 동작을 모두 대기가능(awaitable)하다고 한다. 대기 가능한 객체 타입에는 코루틴(asycio.corutine), Task, Future가 있다.

코루틴

이 글에서 말하는 코루틴은 yield를 사용하는 전통적 의미의 코루틴이 아닌 asycio 라이브러리 내에 정의된 비동기 코루틴을 의미하며, 이는 async def 키워드를 사용하여 정의한 함수(코루틴 함수)가 리턴하는 객체이다. 아래 예제에서 #1의 코드는 실질적으로 아무일도 하지 않는데, nested()를 실행만 하면 코루틴 객체를 생성만 하고 실행(스케줄링)을 하지 않기 때문이다.

(Python) Awaitable에 대해 더보기

예제로 알아보는 argparse 사용법

몇 년 전에 argparse의 사용법을 간단하게 정리한 글을 발행했는데, 우연히 몇 가지 찾아보다 보니 기능설명의 나열만 읽어봐서는 애매한 부분도 많고 원하는 형태로 설정하는 것도 계속 헷갈려서 큰 맘 먹고 총정리 하는 마음으로 새로운 글을 하나 써보기로 마음 먹었다. 오늘은 명령줄 인자를 파싱하는 도구인 argparse를 어떻게 사용하는지, 그리고 몇몇 경우에 있어서 옵션의 동작을 어떻게 설정하는지를 좀 더 자세히 살펴보고자 한다.

예제로 알아보는 argparse 사용법 더보기

Asyncio를 사용한 비동기 소켓 통신

이 블로그에서는 파이썬으로 소켓 통신을 구현하는 몇 가지 방법을 이미 살펴본 바 있습니다. 원시 소켓인 socket.socket을 사용하는 방법zmq의 REQ-REP 패턴을 사용한 방법이 있었고, 다중 접속을 허용하도록 스레드를 통해 처리하거나, 셀렉터를 사용하여 단일 스레드에서 멀티플렉싱하는 방법도 알아보았습니다. 이번 글에서는 asyncio에서는 과연 소켓 통신을 어떤식으로 구현하는지 살펴보고 역시나 간단한 비동기 다중 접속 에코 서버를 구현하는 과정을 함께 살펴보겠습니다.

Asyncio를 사용한 비동기 소켓 통신 더보기

핵공습 – Alphabet War

https://bit.ly/353Y8ML

알파벳소문자들과 대괄호([, ]), 샵기호(#)로 구성되는 문자열을 입력받아 생존하는 문자들을 리턴하는 프로그램을 작성한다.

규칙

인자로 문자열 battlefield가 주어진다. 이 문자열은 전장의 상황을 묘사하고 있다.

  • 문자열은 영어 소문자와 대괄호, 샵으로만 구성된다.
  • 각 문자열은 1명의 사람을 표현한다, 샵 문자는 핵폭탄을 표현한다.
  • 대괄호로 둘러싸인 부분은 방공호를 의미한다.

공습이 시작되면 모든 핵폭탄이 일제히 폭파한다. 누가 살아남을 수 있을까?

  • 핵폭탄이 폭발하는 경우, 방공호 외부의 인원은 모두 사망한다.
  • 방공호는 핵폭탄 1개의 위력만 견딜 수 있다. 인접한 지형에서 핵폭탄이 2개 이상 터지만 방공호 내부의 인원도 모두 사망한다.
  • “인접한”이란 방공호와 연결된 땅이다. 방공호는 그와 인접한 다른 방공호들 너머의 핵폭탄에는 영향을 받지 않는다고 가정한다.

예시

abc[def]ghj : abcdefghj (폭탄이 없으므로 모두 살아남는다)
a#c[def]ghj : def  (폭탄이 1개이므로 외부 인원은 모두 사망한다)
a#c[def]g#j[mno]pqr (_#_[def]_#_ 왼쪽 방공호는 좌우 하나씩, 총 2개의 폭탄으로 인해 파괴된다)
핵공습 – Alphabet War 더보기