2021/05

    Python :: 5 - 여러 번 반복하는 일을 하자

    Python :: 5 - 여러 번 반복하는 일을 하자

    앞 장에서 우리는 무한 루프 구조를 살짝 경험해보았다. 프로그램에서 "반복" 이라는 것은 큰 의미를 가진다. 프로그램을 작성하는 것은 결국 우리가 직접 하기 어려운 일들을 컴퓨터에게 맡기는 것인데, 어떤 일을 반복해야 하는 횟수가 클수록 컴퓨터에게 맡겼을 때의 효율은 올라간다. "반복" 하기 위해서는 반복문을 사용하는데, 반복 구조를 사용하면 프로그램이 간결해지게 된다. 예를 들어 동일한 작업을 반복하기 위해 똑같은 문장을 복사하여 붙여넣기 하는 것보다 반복 구조를 사용하는 편이 프로그램을 간결하게 만든다. 또 프로그래밍에 필요한 시간도 단축할 수 있다. 반복문을 간단하게 맛보자. for i in range(100) : print("파이썬을 열심히 공부하자!") 뒤에서 배우겠지만 해당 코드는 문자열을 1..

    Python :: 4 - 조건을 따져 실행해보자

    Python :: 4 - 조건을 따져 실행해보자

    앞 글들을 통해 파이썬이 무엇인지, 그리고 파이썬의 변수, 연산자에 대해서 알아보았다. 이제 간단한 프로그램들을 만들어보면서 직접 실습을 해보려 한다. 프로그램을 작성할 때, 사용할 수 있는 세 가지의 기본적인 제어 구조가 있다. 순차 구조 sequence - 여러 명령이 순차적으로 실행되는 구조 선택 구조 selection - 여러 개 중 하나의 명령문을 선택하여 실행하는 구조 반복 구조 iteration - 동일한 명령이 반복되면서 실행되는 구조 우리가 앞서 만들어보았던 아주 간단한 프로그램들은 순차 구조에 속한다. 코드의 흐름이 마치 자동차가 직진만 하듯이 쭉 내려오면서 실행되는 것이다. 이제 우리는 어떠한 조건에 따라서 코드가 다르게 실행되는 "선택 구조" 를 만들어보려고 한다. 선택 구조는 질문..

    Python :: 3 - 연산자로 계산을 해 보자

    Python :: 3 - 연산자로 계산을 해 보자

    연산자란 무엇일까 ? 우리의 일상에서 "계산"은 흔하게 이루어지는 과정이다. 계산이라고 하면, 단순히 편의점에서 물건을 구입하고 돈을 거슬러 받는 것을 떠올릴 수도 있지만, 우리가 즐겨보는 영화의 컴퓨터 그래픽 장면들이 역시 계산의 영역에 속한다. 그래픽 장면들이 컴퓨터의 계산 기능을 통하여 이루어지기 때문이다. 컴퓨터는 사람이 해야 하는 계산을 대신 해주기 위해 만들어진 "전자계산기" 로 처음 만들어졌다. 이처럼 계산을 컴퓨터에게 시키는 과정에서 우리는 수식만 작성하여 컴퓨터로 넘겨주면 된다. 그러기 위해 "연산자"에 대해서 알아야 한다. 올바르게 수식을 작성하여야 계산의 효율도 높이고 코드도 간략하게 만들 수 있기 때문이다. 이제 연산자에 대해서 알아보자. 우리는 이미 파이썬을 공부하면서 연산자 하나..

    Python :: 2 - 값을 담아 다루어 보자

    Python :: 2 - 값을 담아 다루어 보자

    프로그래밍을 할 때 우리는 많은 데이터를 처리하여야 하고, 데이터를 계속해서 사용하려면 어딘가에 저장을 해두고 사용하고 싶을 때마다 꺼내서 써야 한다. 이 데이터는 메모리에 저장이 되고, 데이터가 저장된 메모리 공간에 다시 접근해서 사용하기 위해서 우리는 "변수" 를 사용한다. 변수란 메모리 공간에 이름을 붙인다고 생각하면 된다. weight = 78.2 예를 들어 자신의 몸무게를 저장해놓고, 프로그램 안에 bmi 를 구하는 등의 연산을 하기 위해 그 몸무게를 사용한다고 생각해보자. 그러면 우리는 weight 와 같은 이름의 변수를 만들고 거기다 78.2 라는 값을 저장할 수 있다. 이러한 것을 우리는 변수의 선언이라고 하고, 한 줄에 여러 개의 변수를 선언할 수도 있다. weight, height = ..

    Python :: 1 - 데이터 과학과 파이썬의 세계로

    Python :: 1 - 데이터 과학과 파이썬의 세계로

    세상에는 다양한 데이터들이 존재하고, 우리의 일상 곳곳에서 너무나 많은 데이터들이 다뤄지고 있다. 이러한 데이터들을 어떻게 가공해야 의미있는 정보를 추출할 수 있을까? 데이터 과학은 이러한 데이터들에서 과학적인 방법으로 정보나 지식을 추출하는 학문을 얘기한다. 그렇다면 데이터를 다루는 이유는 무엇인가? 가공되지 않은 수많은 정보가 일상생활 가운데 넘쳐나고 있다. 하지만 이 정보들을 우리의 삶을 편리하게 해주기 위해서는 중요한 의미를 지니는 데이터로 분석하고 가공해야 할 필요가 있다. 예를 들어 서울시의 택시 승하차 정보와 이동 통신사의 통화량 데이터를 이용하여 심야 시간에 시민들이 어떻게 이동하는지 파악할 수 있고, 이를 바탕으로 심야버스 노선을 새로 조정할 수 있다. 데이터 과학을 다루기 위해 이 카테..

    Pwnable.kr :: Toddler's Bottle - bof write up

    Pwnable.kr :: Toddler's Bottle - bof write up

    Pwnable.kr 의 세번째 문제를 풀어보자. 이번 문제는 Buffer Overflow 에 대한 문제이다. Buffer Overflow 란, 데이터를 버퍼에 저장할 때, 데이터가 지정된 범위 바깥에 저장되는 것을 의미하고, 벗어난 데이터는 인접 메모리를 덮어쓰게 된다. nc 로 접속하면 bof 파일이 바로 실행되고, 그 전에 wget 으로 bof 파일과 bof.c 소스파일을 다운받아보았다. bof.c 소스파일은 main 함수와 func 함수로 이루어져 있다. main 함수에서는 func 함수를 호출하는 거 이외에 별다른 코드가 없고, 0xdeadbeef 라는 값을 인자로 넘기면서 func 함수를 호출하고 있다. func 함수에서는 0xdeadbeef 라는 값을 int 형 변수 key 에다가 넣고, ov..