1장 프로그래밍과 파이썬 소개
컴퓨터와 프로그램
현대의 컴퓨터는 명령어들의 리스트에 따라 데이터를 처리하는 기계이며, 특정한 작업들을 수행하도록 설계된
명령어들의 리스트가 프로그램이다.
프로그래밍의 효용성
과거에는 오랜 시간이 걸리는 단순반복 작업이나, 조건부 자동화 등을 이용하여 지루하고 시간이 오래 걸리는
일을 사람 대신 처리하도록 할 수 있다.
프로그래밍 언어
기본적으로 컴퓨터, 즉 하드웨어가 이해할 수 있는 언어는 기계어(0과 1로 이루어진 이진 코드) 뿐이다. 그러나
사람이 사용하기에는 상당히 불편하고 시간도 오래 걸리기 때문에 이를 인간의 언어에 가까운 방식으로 작성한 뒤 앞서 말했듯이 지루하고 반복되는 변환 작업은 컴파일러(또는 인터프리터)에게 맡겨 프로그래밍 후 이진 코드로 변환해 실행한다. 파이썬은 인터프리터 언어로 사용자가 입력하는 코드를 엔터 단위로 끊어 즉시 변환 후 실행한다.
파이썬 코딩
수학에서 사용하는 연산 기호를 이용해 기본적인 수 계산 또는 문자열 연산을 할 수 있고, 이때 적절한 문법을 지키지 않으면 오류가 발생해 코드가 실행되지 않을 수 있다.
대화형/스크립트 모드
대화형이란 앞서 말한 기본적인 파이썬의 방식이다. 그와 다르게 복잡한 프로그램을 작성할 때는 스크립트
모드를 사용하여 텍스트 파일을 만들어서 저장한 후에 한번에 실행하는 것이 좋다.
터틀 그래픽 이용 방법
간단한 명령어를 이용해 화면에 선을 그리는 모듈으로 import turtle을 사용해 시작할 수 있다.
2장 변수와 수식
변수
변수란 컴퓨터의 메모리 공간에 대입연산자(“=”)를 이용해 이름을 붙이는 것으로 설정한 이름을 사용해 이 공간에 여러 형태의 데이터를 이진 코드의 형태로 저장 및 제어할 수 있다. 이때 나중에 보았을 때에 변수 내 데이터의
의미를 쉽게 파악할 수 있는 이름을 붙이는 것이 좋다.
자료형
자료형이란 문자, 숫자와 같은 데이터의 종류를 의미한다. 파이썬에서의 변수 할당은 특별한 자료형인 객체가
데이터를 저장하고 변수는 이 객체를 가리키고 있어 하나의 변수가 다양한 자료형의 데이터를 표현할 수 있다.
이때 이 객체는 값이 변할 수 있는 객체와 변할 수 없는 객체로 나뉘어진다.
주석과 상수
주석은 코드에 붙이는 설명문으로 #로 시작되는 문장으로 작성한다. 주석문은 내가 작성한 코드를 다른 사람이
보았을 때 빠르게 이해할 수 있도록 한다. 또한 코드 중 예외처리하고 싶은 부분의 앞에 #를 붙여 제외하도록
할 수도 있다. 상수는 한번 값이 결정되면 바뀌지 않는 수로 일반적으로 상수를 변수로 정할 때는 가독성을 위해 대문자로 작성하는 것이 좋다. 상수를 변수화 시켜 이름을 붙이면 특정 상수에 특정한 의미를 부여해 프로그램
내에서 어떤 의미를 가지는지 한눈에 알 수 있다.
수식
기본적인 수식 기호들과 계산 순서는 일반적인 수학과 동일하지만, “/”는 결과를 실수의 형태로, “//”는 정수의
형태로 출력하고, “=”는 같다는 의미가 아닌 앞 피연산자에 뒤 피연산자의 데이터를 대입한다는 의미가 되었다.
“=”의 원래 의미는“==”으로 대신한다.
문자열
문자열은 문자들의 나열을 하나로 묶어 관리하는 것으로, 기본적으로 “”로 감싸면 모두 문자열로 취급한다.
그래서 정수 100과 문자열 “100”을 구분하여 다루어야 한다. 문자열 안의 각 글자를 따로 제어하고 싶은 경우
첫 번째 글자부터 변수명에 []를 붙여 0부터 차례대로 1씩 늘어나면 다음 글자를 의미한다. 반대로 –1은 가장 끝
글자를 의미하여 음의 방향으로 늘어나면 이전 글자를 의미하게 된다.
입력과 출력
input()함수를 사용하여 프로그램 실행 중 사용자가 입력하는 데이터를 받아 사용자와 상호작용하게 할 수 있다.
그러나 input() 함수는 기본적으로 문자열의 형태로 데이터를 입력받고 저장하기 때문에 다른 타입의 데이터로
저장하고 싶다면 예를 들어 정수형의 경우 int()안에 넣어 정수형으로 형변환을 시켜주어야 한다. 출력의 경우 print()함수를 사용하여 출력할 수 있고 데이터의 타입이 바뀌거나 변수 여러 개를 출력할 때에는 () 안에 ','를 붙여 분리해주거나 ()에 f를 붙인 후 “”안에 문자열과 {}를 녛어 {}안에는 원하는 변수의 이름을 적어 더욱 간편하게
출력할 내용을 작성할 수 있다.
3장 조건문
제어문
복잡한 문제를 처리하기 위해 조건에 따라서 코드의 동작이 바뀌어야 한다. 문장이 실행되는 순서를 제어하는
문장을 제어문이라고 한다. 제어문은 조건문과 반복문으로 나누어진다. 조건문은 조건에 따라서 코드의 실행
여부가 결정되고, 반복문은 조건에 따라 코드를 반복해서 실행하는 것이다. 제어 구조는 순차, 선택, 반복 구조로 나뉜다.
관계 연산자
조건문에서 조건을 나타내기 위한 연산자로 두 개의 피연산자를 비교할 때 쓴다. 이때 결과는 피연산자의 관계가 조건에 부합하면 참(1), 또는 거짓(0)으로 출력되고 참일 경우에만 코드가 실행된다. 이는 앞의 구조 중 선택 구조 또는 반복 구조에 포함될 수 있다. 이때 피연산자는 숫자부터 문자 등 모든 데이터가 이진 코드의 절댓값에 따라 비교된다. 다만 실수의 연산에서는 미세한 오차가 생겨 오차를 감안하여 비교하여야 한다.
조건 연산자
()안에 if ~ else 문을 변형시켜 앞에는 참일 경우의 값, 사이에는 조건식을, 뒤에는 거짓일 경우의 값을 적어
간결하게 적어낼 수 있다. ()가 없을 경우 대입이 먼저 일어나므로 ()는 필수적이다.
논리 연산자
하나의 관계연산자만으로 표현할 수 없는 복잡한 조건은 논리 연산자를 이용해서 여러 조건을 동시에 혹은
일부를 포함하는 경우에 참이 되는 조건식을 작성할 수 있다. 이 때 동시는 and 포함은 or을 사용하고 그 외에
불 값을 반전시키는 not연산자도 있다.
중첩 if문
이 경우에는 하나의 조건이 참과 거짓으로 나뉜 후에 그 결과에 따라 다음 조건이 달라질 때 쓰인다. 즉, 분기가
2배로 늘어나는 것이다. 이와 별개로 연속적으로 쓰일 때도 있는데, 이는 뒤의 조건보다 앞의 조건이 먼저
비교됨으로서 필터처럼 걸러지는 효과를 얻을 수 있다.
4장 반복문
반복문의 효용성
반복문은 조건을 두고 그 조건이 만족하거나 만족하지 못할 때까지 특정 동작을 반복하도록 하는 것으로
비슷하거나 반복되는 동작을 할 때 조건 반복을 사용하여 변하는 부분만 지정해줌으로써 중복되는 코드를
줄일 수 있다.
리스트
리스트는 여러 데이터를 모아 하나의 리스트로 만듦으로써 관리를 용이하게 할 수 있다. 앞서 나온 문자열도
일종의 리스트로, 문자열 변수의 이름은 리스트 이름으로, 문자들은 리스트 안의 원소들로 바뀐다고 생각하면
된다.
중첩 반복문
반복문 안에도 반복문을 넣어 중쳡시킬 수 있는데 단순하게는 두 개의 변수를 이용해 모든 경우의 수를 찾아
실행할 때 많이 쓰인다. 또한 반복문은 참이라는 값을 정해 무한반복하게 한 후에 특정 조건을 만족하면 탈출하게 하거나 바로 다음 반복문으로 넘어가게 할 수도 있다.
5장 함수
함수의 효용성
복잡한 프로그램을 만들 때 모든 것을 하나의 코드로 만들지 않고 기능별로 나눠 메인 코드에서 기능들을 불러와 작동하게 하는 것으로 가독성과 전체 시스템을 파악하기 쉽게 만들 수 있다. 또한 자주 쓰는 동작을 함수화시켜
코드의 중복성을 줄일 수 있고 다른 프로그램을 작성할 때도 쉽게 재활용이 가능하다. 또한 오류가 생겼을 때
문제가 되는 부분만 변경함으로써 유지보수가 간편해진다.
함수 작성 및 호출
먼저 함수를 작성하는 방법은 함수의 이름을 정한 후 호출할 코드에서 받아올 매개변수를 ()인에 타입과 함께
지정한다. 또한 함수를 호출할 때는 함수의 이름과 ()안에 함수를 정의할 때 정했던 매개변수의 타입과 개수를
맞춰 ()안에 넣어주면 된다.
여러 개의 함수가 있는 프로그램
이때 변수 이름과 함수 이름이 겹치거나 파이썬에서 이미 의미를 가지고 있는 키워드가 겹치지 않아야 한다.
또한 함수의 호출 시점이 정의 시점보다 먼저 나오지 않아야 한다.
매개 변수 전달
매개 변수는 앞서 말했던 함수가 동작하기 위해 필요한 데이터, 즉 변수이다. 매개 변수는 함수가 호출될 때마다 달라질 수 있고, 매개 변수를 넣어주지 않을 경우 자동으로 값이 입력되는 디폴트 매개변수가 있는데 이것은
함수의 정의 시점에서 정의해주어야 한다. 기본적으로 매개 변수는 입력되는 순서에 따라서 정해지지만,
매개 변수 앞에 함수 내의 변수이름을 지정해줌으로서 순서와 다르게 데이터가 입력되게 할 수도 있다.
언패킹
언패킹은 매개변수로 받은 변수, 객체나 리스트를 여러 개로 분리하는 것으로 일반적인 객체는 앞에 ‘*’를,
딕셔너리 객체는 “**”를 붙여 사용한다.
함수의 값 반환
기본적으로 함수 내에서 return을 써서 함수 호출문으로 대체될 데이터를 뒤에 적어주면 된다. 이때 여러 개를
반환하는 것도 가능하다. 또한 데이터를 반환하지 않는 함수도 있다.
순환 호출
순환 호출이란 함수 내에서 자신을 호출하여 문제를 해결하는 방식으로반복문과 동일하게 순환 호출문 안에
특정 조건을 주어 함수의 호출이 무한히 반복되지 않도록 주의하여 작성해야 한다.
변수의 범위
변수의 범위는 기본적으로 함수 내에서만 사용할 수 있는 지역변수와, 전체 프로그램에서 사용할 수 있는
전역변수로 나뉜다. 이때 변수의 이름이 겹쳐도 컴퓨터 내에서는 다른 변수로 취급되지만, 혼선을 방지하기
위해서는 전역변수를 최대한 지양하고 변수의 이름 또한 겹치지 않게 엄밀하게 정하는 것이 좋다.