2. 프로그래밍 맛보기#
2.1. Hello, world! 문자열 출력#
많은 프로그래밍 입문서가 아래 문장을 화면에 출력하는 것으로 시작한다.
Hello, world!
이유는 위 문장을 출력하는 코드를 작성할 때 주요 프로그램 요소를 함께 소개할 수 있기 때문이다.
print() 함수
파이썬은 아래와 같이 매우 단순한 명령문을 이용하여 위 문장을 화면에 출력시킬 수 있다. 다만 문장을 큰따옴표 또는 작은 따옴표로 감싸야 한다. 따옴표의 종류는 상관 없지만 동일한 종류의 따옴표로 감싸야 함에 주의한다.
print("Hello, world!")
Hello, world!
또는
print('Hello, world!')
Hello, world!
위 코드에 사용된 print는 괄호 안에 인자로 지정된 문장을 화면에 출력하도록 하는 명령문 기능을 갖는 함수다.
프로그래밍에서의 함수는 매우 중요하기에 나중에 자세히 소개한다.
여기서는 print 함수의 기초 사용법만 기억해둔다.
앞으로 다양한 함수를 소개할 예정인데
함수는 print() 처럼 함수 이름과 괄호를 함께 표기하는 방식으로 언급될 것이다.
주의사항
print() 함수를 실행했을 때
문장과 함께 사용된 따옴표 기호는 함께 출력되지 않는다.
하지만 그렇다고 해서 사용된 따옴표가 컴퓨터에서 사라지는 것은 아니고 편의상 화면에 보이지 않을 뿐이다.
문자열
"Hello, world!"처럼 문자와 기호의 나열로 구성된 문장을 프로그래밍 분야에서는 문자열string이라 부른다.
문자열은 아래에 언급된 것들처럼 일반적으로 임의의 기호로 구성될 수 있다.
"^_^;;;"
"우.... ㅎㅎㅎ"
'영어 ㅠㅠㅠ English!!!'
'+++---+++...+++'
문자열은 그 자체로 어떤 의미도 갖지 않는다.
예를 들어 숫자 3과 숫자 기호 3으로 구성된 문자열 '3'은 엄연히 다르다.
숫자 3은 연산에 사용되지만 문자열 '3'은 일반적으로 연산에 허용되지 않는다.
2.2. 기초 명령문: 변수 할당#
컴퓨터 프로그램은 명령문statement들의 목록으로 구성된다. 각각의 프로그래밍 언어는 구문syntax이라 불리는 프로그래밍 언어 고유의 명령문 작성법을 제공한다.
파이썬을 포함한 대다수의 프로그래밍 언어에서 다음 네 개의 기초 명령문의 조합으로 명령문을 생성한다.
변수 할당
if조건문for반복문while반복문
프로그래밍 언어 구문의 엄밀한 정의는 일반적으로 매우 복잡하기에 초보자가 이해하기 어렵다. 특히 프로그래밍에 입문하는 경우 언어의 구문을 정확히 아는 것보다는 원하는 기능을 올바르게 수행하는 프로그램을 구현하는 훈련이 보다 중요하다.
앞으로 다양한 파이썬 명령문을 작성하는 방식을 하나씩 소개한다. 프로그래밍을 잘한다 함은 바로 문제 해결에 적절한 명령문을 작성한다는 의미이다. 여기서는 자세한 설명 없이 간단하지만 매우 기본적인 변수 할당 명령문의 활용법을 살펴본다.
변수
단순하게 말해 컴퓨터 프로그램은 값을 저장하고 조작하여 새로운 값을 계산하여 활용하는 방법을 묘사한다. 이런 의미에서 값을 컴퓨터에 저장하는 기능이 프로그램의 기본이다. 값의 저장과 활용은 반드시 변수variable를 이용해야 한다. 변수는 저장된 값을 가리키는 일종의 이름이며, 코드 어디에서든 자신이 가리키는 값을 대신하여 활용될 수 있다.
변수는 컴퓨터 키보드에서 사용할 수 있는 한글 문자, 영어 문자, 숫자, 밑줄 기호 _를 이용한 임의의 조합으로 지정될 수 있다.
앞서 사용한 love_python 또한 하나의 변수이며 참을 의미하는 True라는 값을 가리킨다.
변수 할당 명령문
값을 저장하고 저장된 값을 가리키는 변수를 선언하는 과정은 변수 할당 명령문을 지정하는 방식으로 이뤄진다.
예를 들어 아래 코드는 3을 저장하면서 동시에 변수 a가 저장된 값 3을 가리키도록 한다.
a = 3
이처럼 변수와 값을 연결시키는 명령문이 변수 할당variable assignment 명령문이다.
이제 변수 a가 가리키는 값을 print() 함수를 이용하여 확인하면 3이 출력된다.
print(a)
3
변수는 저장된 값을 대신하여 활용될 수 있다.
예를 들어 아래 코드는 변수 a가 가리키는 값에 2를 곱한 결과를 변수 b가 가리키도록 한다.
b = 2 * a
변수 b가 가리키는 값을 확인하면 6이 출력된다.
print(b)
6
print() 함수는 두 개 이상의 값을 동시에 출력할 수 있다.
아래 코드는 a와 b 두 변수가 가리키는 값을 공백(스페이스)으로 구분하여 출력한다.
print(a, b)
3 6
변수 할당을 포함한 모든 명령문을 줄바꿈을 이용하여 동시에 실행시킬 수 있다.
예를 들어 아래 코드는 변수 a가 가리키는 값과 변수 b가 가리키는 값을 이용하여
두 개의 새로운 변수를 선언한다.
아래 코드에서는 한글 문자 또한 변수를 지정할 때 사용될 수 있다는 것을 보여주기 위해 일부러 한글과 영어를 섞어 변수를 선언하였다. 하지만 한글 문자를 변수 선언에 활용하는 경우는 많지 않다.
a빼기b = a - b
b곱하기a = b * a
print(a빼기b, b곱하기a)
-3 18
print() 함수의 인자는 변수, 문자열, 수식 등이 동시에 사용될 수 있다.
print("a 빼기 b:", a빼기b)
print("b 곱하기 a:", b곱하기a)
a 빼기 b: -3
b 곱하기 a: 18
여러 줄의 코드 실행
파이썬에서 명령문은 줄바꿈으로 구분한다. 여러 줄의 명령문으로 구성된 코드는 맨 윗줄의 명령문부터 차례대로 실행된다. 또한 윗 줄에서 실행된 명령문의 결과는 아랫 줄의 명령문에서 활용될 수 있다.
2.3. 변수 작성법#
변수는 할당되는 값과 연관된 이름을 사용하는 게 좋다.
예를 들어, 농구 시합에서 A 팀의 점수 72와 B 팀의 점수 80을
가리키는 두 개의 변수를 아래와 같이 x와 y로 하면
코드만 보고서는 변수의 의미를 파악하기 어렵다.
x = 72
y = 80
반면에 아래처럼 A_score, B_score 등으로 변수를 정하면
코드에 사용된 변수의 의미를 보다 잘 이해할 수 있다.
A_score = 72
B_score = 80
변수 작성 규칙
변수을 지정할 때 지켜야 하는 몇 가지 규칙이 있다.
알파벳, 숫자, 밑줄 기호
_등을 임의로 조합한다.다음 기호들은 사용할 수 없다.
., !, +, -, *, /, %, @, ~
공백space을 포함할 수 없다.
숫자로 시작할 수 없다.
파이썬에서 특별한 역할을 수행하는 아래 키워드keyword를 그대로 변수로 사용할 수 없다. 파이썬 프로그래밍 언어의 키워드는 파이썬 최신 버전 기준으로 총 35개이다. 각 키워드의 역할은 필요할 때마다 설명될 것이다.
False await else import pass None break except in raise True class finally is return and continue for lambda try as def from nonlocal while assert del global not with async elif if or yield
변수로 허용되지 않는 사례
숫자로 시작: 숫자로 시작하면 안된다는 규칙을 어겼기에 구문 오류(
SyntaxError)가 발생한다.
3dogs = '강아지 세 마리'
Cell In[12], line 1
3dogs = '강아지 세 마리'
^
SyntaxError: invalid decimal literal
마침표 활용:
first.second를 변수로 지정하면 마침표로 인해first와second가 구분된다. 그런데first의 의미가 미리 지정되지 않았다는 의미의 이름 오류(NameError)가 발생한다.
first.second = "1, 2"
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
Cell In[13], line 1
----> 1 first.second = "1, 2"
NameError: name 'first' is not defined
공백 사용: 변수에 공백이 허용되지 않기에 구문 오류(
SyntaxError)가 발생한다.
big number = 100000000
Cell In[14], line 1
big number = 100000000
^
SyntaxError: invalid syntax
파이썬 키워드 사용: 예를 들어,
False는 거짓을 나타내는 부울값(진릿값)이기에 다른 의미로 사용되어서는 안된다. 따라서 구문 오류(SyntaxError)가 발생한다.
False = 0
Cell In[15], line 1
False = 0
^
SyntaxError: cannot assign to False
소문자와 대문자
프로그래밍에서 영어 알파벳의 소문자와 대문자는 엄연히 구분된다. 예를 들어, 아래 두 개의 변수는 서로 다른 값을 가리킨다.
v = 'v'
V = 'V'
print("소문자 브이:", v)
print("대문자 브이:", V)
소문자 브이: v
대문자 브이: V
2.4. 변수 재할당#
변수는 값을 가리키는 이름이며 언제든지 가리키는 값을 바꿀 수 있다.
이런 의미에서 =의 의미에 주의해야 한다.
예를 들어 아래처럼 변수 x에 정수 5를 할당하자.
x = 5
위 명령문은 “변수 x가 컴퓨터 어딘가에 저장된 정수 5를 가리킨다”고 말하지
“x는 5이다”라고 말하지 않는다.
이유는 변수 x와 가리키는 값 5가 별도의 존재로 간주되기 때문이다.
실제로 변수 x가 가리키는 값을 원할 때 언제든지 다른 값으로 대체할 수 있다.
변수가 가리키는 값을 변경하는 일을 변수 재할당이라 한다. 예를 들어 변수 할당 명령문을 아래처럼 다시 실행해본다.
x = 7
그러면 변수 x는 더 이상 정수 5가 아닌 정수 7을 가리킨다.
print(x)
7
2.5. 파이썬 계산기#
파이썬을 계산기로 활용할 수 있다. 또한 변수를 연산에 사용할 수 있고, 변수에 저장된 값을 조작하여 다른 값을 계산할 수도 있다. 파이썬이 제공하는 기초 연산을 정리하면 아래와 같다.
연산자 |
의미 |
|---|---|
|
덧셈 |
|
뺄셈 |
|
곱셈 |
|
나눗셈 |
|
거듭제곱 |
|
몫 |
|
나머지 |
다음 세 개의 변수를 이용하여 각 연산자의 사용법을 확인한다.
a = 7
b = 3
c = b + 4
사칙연산을 자유롭게 사용할 수 있으며 연산 결과를 변수에 할당할 수도 있다.
덧셈
a + b
10
d = a + b
print(d)
10
뺄셈
b - a
-4
e = b - a
print(e)
-4
곱셈
a * b
21
d = a * b
print(d)
21
나눗셈
b / a
0.42857142857142855
e = b / a
print(e)
0.42857142857142855
거듭제곱
a ** 2 + 1
50
f = a ** 2 + 1
print(f)
50
정수 나눗셈의 몫:
//은 몫 계산
8 // b + 3//2
3
f = 8 // b + 3//2
print(f)
3
정수 나눗셈의 나머지:
%는 나머지 계산
c % b + f
4
g = c % b + f
print(g)
4
몫 연산 vs. 나눗셈 연산:정수 vs. 부동소수점
몫 연산과 나눗셈 연산은 다름에 주의한다. 몫 연산의 결과는 정수인 반면에 나눗셈의 결과는 유리수로 표현된다. 프로그래밍 분야에서 유리수는 부동소수점floating point이라 불린다.
c / b
2.3333333333333335
나눗셈을 제외하고 정수를 이용한 다른 연산은 기본적으로 정수로 계산된다.
하지만 정수에 점 .을 찍으면 유리수, 즉 부동소수점으로 취급되어 모든 연산의 결과가 부동소수점으로 계산된다.
예를 들어 아래 코드에서 3.은 정수 3이 아닌 부동소수점 3.0으로 취급되어
관련된 모든 연산이 부동소수점으로 표현된다.
print(a + 3.)
print(a - 3.)
print(a * 3.)
print(a / 3.)
10.0
4.0
21.0
2.3333333333333335
주의사항
정수를 가리키는 변수에 점을 찍어 부동소수점으로 강제로 계산되도록 하는 일은 허용되지 않는다.
아래 코드를 실행하면 변수에 점을 찍는 일은 문법적으로 허용되지 않는다는 의미의
SyntaxError 라는 구문 오류가 발생한다.
오류 메시지에 포함된 내용은 다음과 같다.
Cell In[00], line 2: 코드의 2번 줄에 위치한 명령문에서 오류가 발생^: 오류가 발생한 명령문의 위치 표시SyntaxError: invalid syntax: 허용되지 않은 구문이 사용되었다는 의미의 구문 오류를 가리키는SyntaxError정보 표기
d = 7
a * d.
Cell In[35], line 2
a * d.
^
SyntaxError: invalid syntax
2.6. 예제#
예제 1
아래 문장들을 적절한 수식으로 작성한 다음 실행 결과를 확인한다.
(1) 정수 25와 정수 12 더하기
답:
덧셈 연산자를 활용한다.
25 + 12
37
(2) 정수 92와 부동소수점 8.0 곱하기
답:
곱셈 연산자를 활용한다. 정수와 부동소수점의 곱셈은 부동소수점으로 계산된다.
92 * 8.0
736.0
(3) 정수 7을 5로 나눴을 때의 몫
답:
몫 연산자를 활용한다. 결과는 항상 정수다.
7 // 5
1
예제 2
아래 명령문들을 실행해서 오류가 발생하는 경우 오류의 종류와 원인을 설명하고 수정한다. 오류가 발생하지 않으면 실행 결과를 설명한다.
(1)
print("Hello World"
Cell In[36], line 1
print("Hello World"
^
SyntaxError: incomplete input
답
오류 종류: SyntaxError(구문 오류)
오류 원인: print() 함수의 인자는 소괄호로 감싸져야 하는데 닫는 괄호가 없음.
# 오류가 수정된 코드
print("Hello World")
Hello World
(2)
print('Hello World")
Cell In[38], line 1
print('Hello World")
^
SyntaxError: unterminated string literal (detected at line 1)
답
오류 종류: SyntaxError(구문 오류)
오류 원인: 문자열은 동일한 따옴표로 감싸져야 함. 여는 따옴표는 작은따옴표인데 닫는 따옴표는 큰따옴표임. 동일한 따옴표를 사용해야 함.
# 오류가 수정된 코드
print('Hello World')
Hello World
또는
print("Hello World")
Hello World
(3)
print(+2)
2
답
오류가 발생하지 않음. +2는 양의 정수 2로 처리됨.
(4)
print(023)
Cell In[42], line 1
print(023)
^
SyntaxError: leading zeros in decimal integer literals are not permitted; use an 0o prefix for octal integers
답
오류 종류: SyntaxError(구문 오류)
오류 원인: 정수, 부동소수점 등은 0으로 시작할 수 없음.
# 오류가 수정된 코드
print(23)
23
또는 숫자가 아닌 기호들의 나열인 "023"을 의도했지만 미처 따옴표를 사용하지 않은 경우일 수도 있음.
이처럼 따옴표로 감싸이면 어떠한 기호의 나열도 허용됨.
# 오류가 수정된 코드
print('023')
023
예제 3
변수 할당 명령문과 관련하여 주의해야할 점들을 다룬다. 아래 명령문들을 실행해서 오류가 발생하는 경우 오류의 종류와 원인을 설명하고 수정한다.
(1)
23 = n
Cell In[45], line 1
23 = n
^
SyntaxError: cannot assign to literal here. Maybe you meant '==' instead of '='?
답
오류 종류: SyntaxError(구문 오류)
오류 원인: 변수 할당 명령문의 등호 기호 왼쪽에 변수가, 오른쪽에 할당되는 값이 위치해야 함. 변수는 숫자로 시작할 수 없음.
# 오류가 수정된 코드 작성
n = 23
(2)
x = y = 1
답
오류 발생하지 않음. x, y 모두 1을 할당 받음. 즉 아래 코드를 간단하게 표현한 것임. 하지만 추천되지 않음. 이유는 한줄에 하나의 변수를 선언하면 나중에 코드를 이해할 때 보다 쉽게 이해됨. 즉, 한줄에 하나의 명령문만 사용하기 추천.
x = 1
y = 1
(3)
y = k + 1.
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
Cell In[49], line 1
----> 1 y = k + 1.
NameError: name 'k' is not defined
답
오류 종류: NameError(이름 오류)
오류 원인: 선언되지 않은 변수
k가 사용됨. 즉k가리키는 값이 지정되지 않았음.
k를 먼저 선언하면 해결된다.
예를 들어 아래 코드는 변수 k가 3을 가리키도록 한다.
# 오류가 수정된 코드 작성
# k를 먼저 선언
k = 3
y = k + 1
예제 4
아래 코드에서처럼 3과 3.0을 수식에 함께 사용해도 된다.
3 + 3.0
6.0
반면에 아래 수식을 계산하려 하면 오류가 발생한다. 이유는 따옴표로 감싸인 숫자 기호는 기본적으로 연산에 사용될 수 없기 때문이다.
3 + '3.0'
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
Cell In[61], line 1
----> 1 3 + '3.0'
TypeError: unsupported operand type(s) for +: 'int' and 'str'
반면에 아래 수식은 계산이 허용된다.
다만 9.0이 아닌 따옴표로 감싸인 이상한 숫자 기호들의 나열이 계산된다.
실제로 네 개의 기호 3, ., 0으로 구성된 문자열 '3.0'이 세 번 단순 반복된다.
3 * '3.0'
'3.03.03.0'
숫자와 숫자가 아닌 것의 연산이 언제 어떤 방식으로 허용되는지에 대해서는 나중에 자세히 다룬다.
예제 5
1\(\text{m}^2\)는 0.3025평이다. 84\(\text{m}^2\)는 몇 평인가? 반대로 30평은 몇 \(\text{m}^2\)인지 계산하는 코드를 다양한 변수를 이용하여 구현한다.
힌트:
유용하게 활용할 수 있는 변수를 선언한다. 어떤 변수가 필요한지, 왜 필요한지를 판단하는 일이 중요하다.
one_squaremeter: 1 제곱미터에 해당하는 평수eightyfour_squaremeter: 84 제곱미터에 해당하는 평수one_pyeong: 1 평에 해당하는 제곱미터thirty_pyeong: 30평에 해당하는 제곱미터
답
one_squaremeter = 0.3025
eightyfour_squaremeter = 84 * one_squaremeter
one_pyeong = 1 / one_squaremeter
thirty_pyeong = 30 * one_pyeong
선언된 변수를 이용하여 아래와 같이 문자열을 출력한다.
print("84제곱미터:", eightyfour_squaremeter, '평')
print("30평:", thirty_pyeong, '제곱미터')
84제곱미터: 25.41 평
30평: 99.17355371900827 제곱미터
2.7. 연습문제#
아래 사이트에서 파이썬 프로그래밍을 진행하는 방식을 확인하세요.
위 각각의 사이트에서 (연습) 프로그래밍 맛보기에 포함된 문제들을 풀어보세요.