Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

1 변수 할당

Updated: 10 mrt 2026

1.1Hello, world! 출력 명령문

많은 프로그래밍 입문서가 아래 문장을 화면에 출력하는 명령문을 실행하는 내용으로 시작한다.

Hello, world!

컴퓨터 프로그램은 명령문statement들의 목록으로 구성된다. 각각의 프로그래밍 언어는 구문syntax이라 불리는 프로그래밍 언어 고유의 명령문 작성법을 제공한다.

파이썬을 포함한 대다수의 프로그래밍 언어에서 다음 네 개의 기초 명령문의 조합으로 명령문을 생성한다.

  • 변수 할당문

  • if 조건문

  • for 반복문

  • while 반복문

프로그래밍 언어 구문의 엄밀한 정의는 일반적으로 매우 복잡하기에 초보자가 이해하기 어렵다. 특히 프로그래밍에 입문하는 경우 언어의 구문을 정확히 아는 것보다는 원하는 기능을 올바르게 수행하는 프로그램을 구현하는 훈련이 보다 중요하다.

앞으로 다양한 파이썬 명령문을 작성하는 방식을 하나씩 소개한다. 프로그래밍을 잘한다 함은 바로 문제 해결에 적절한 명령문을 작성한다는 의미이다. 여기서는 자세한 설명 없이 간단하지만 매우 기본적인 변수 할당 명령문을 소개하면서 파이썬 프로그래밍의 특징을 간략하게 살펴본다.

문자열

"Hello, world!"처럼 문자와 기호의 나열로 구성된 문장을 프로그래밍 분야에서는 문자열string이라 부른다. 문자열은 아래에 언급된 것들처럼 일반적으로 임의의 기호로 구성될 수 있다.

"^_^;;;"
"우.... ㅎㅎㅎ"
'영어 ㅠㅠㅠ English!!!'
'+++---+++...+++'

문자열은 그 자체로 어떤 의미도 갖지 않는다. 예를 들어 숫자 3과 숫자 기호 3으로 구성된 문자열 '3'은 엄연히 다르다. 숫자 3은 일반적인 연산에 사용되지만 문자열 '3'은 다르게 활용된다. 문자열에 대해 앞으로 자세히 살펴볼 예정이다.

print() 함수

파이썬은 아래와 같이 매우 단순한 명령문statement을 이용하여 위 문장을 화면에 출력시킬 수 있다. 다만 문장을 큰따옴표 또는 작은따옴표로 감싸야 한다. 따옴표의 종류는 상관 없지만 동일한 종류의 따옴표로 감싸야 함에 주의한다.

print("Hello, world!")
Hello, world!

또는

print('Hello, world!')
Hello, world!

위 코드에 사용된 print는 괄호 안에 인자로 지정된 문장을 화면에 출력하도록 하는 명령 기능을 수행하는 함수다. 여기서는 print 함수의 기초 사용법만 기억해둔다.

print() 함수를 실행했을 때 문장과 함께 사용된 따옴표 기호는 함께 출력되지 않는다. 하지만 그렇다고 해서 사용된 따옴표가 컴퓨터에서 사라지는 것은 아니고 편의상 화면에 보이지 않을 뿐이다.

print() 함수는 두 개 이상의 문장, 숫자 등을 인자로 받아 동시에 출력할 수 있다. 아래 코드는 Helloworld!(느낌표) 세 단어를 차례대로 한 줄에 출력한다. 각 단어가 공백(스페이스)으로 구분되어 출력됨에 주의해야 한다.

print('Hello', 'world', '!')
Hello world !

1.1.1예제

아래 명령문들을 실행해서 오류가 발생하는 경우 오류의 종류와 원인을 설명하고 수정하라. 오류가 발생하지 않으면 실행 결과를 설명한다.

(1) 오류 수정 또는 실행 결과 설명

print("Hello World"
  Cell In[4], line 1
    print("Hello World"
                       ^
SyntaxError: incomplete input

답:

  • 오류 발생 위치: 코드셀에 작성된 코드의 1번 줄(line 1)의 print("Hello World" 에서 오류 발생. 특히 캐럿(^) 기호로 적시된 큰따옴표 오른편이 문제.

  • 오류 종류: SyntaxError. 구문 오류, 즉 명령문 작성 규칙에 위배됨을 의미.

  • 오류 발생 원인: incomplete input. print() 함수의 인자(input)는 소괄호로 감싸져야 하는데 닫는 괄호가 없어서 문제라는 의미.

아래처럼 닫는 괄호를 추가하면 오류가 발생하지 않는다.

# 오류가 수정된 코드

print("Hello World")
Hello World

(2) 오류 수정 또는 실행 결과 설명

print('Hello World")
  Cell In[6], line 1
    print('Hello World")
          ^
SyntaxError: unterminated string literal (detected at line 1)

답:

  • 오류 발생 위치: 코드셀에 작성된 코드의 1번 줄(line 1)의 print('Hello World") 에서 오류 발생. 특히 캐럿(^) 기호로 적시된 작은따옴표의 위치가 문제.

  • 오류 종류: SyntaxError. 구문 오류, 즉 명령문 작성 규칙에 위배됨을 의미.

  • 오류 발생 원인: unterminated string literal (detected at line 1). 1번 줄에서 작성된 문자열의 끝이 불명확하다는 의미. 문자열을 감싸는 인용부호가 작은따옴표로 시작하면 작은따옴표로 마무리 되어야 하는데 그렇지 않음. 즉, 문자열을 감싸는 따옴표의 종류가 동일해야 함.

아래처럼 큰따옴표를 작은따옴표로 대체하면 오류가 발생하지 않는다. 우물정

# 오류가 수정된 코드

print('Hello World')
Hello World

또는 작은따옴표를 큰따옴표로 대체해도 오류가 발생하지 않는다.

print("Hello World")
Hello World

(3) 오류 수정 또는 실행 결과 설명

print(+2)
2

답:

오류가 발생하지 않는다. 이유는 +2는 양의 정수 2로 처리되기 때문이다. 즉 다음과 동일한 결과를 얻는다.

print(2)
2

(4) 오류 수정 또는 실행 결과 설명

print(023)
  Cell In[11], line 1
    print(023)
          ^
SyntaxError: leading zeros in decimal integer literals are not permitted; use an 0o prefix for octal integers

답:

  • 오류 발생 위치: 코드셀에 작성된 코드의 1번 줄(line 1)의 print(023) 에서 오류 발생. 특히 캐럿(^) 기호로 적시된 숫자 0의 위치가 문제.

  • 오류 종류: SyntaxError. 구문 오류, 즉 명령문 작성 규칙에 위배됨을 의미.

  • 오류 발생 원인: leading zeros in decimal integer literals are not permitted; use an 0o prefix for octal integers. 정수가 0으로 시작하는 게 문제. 0으로 시작하려면 바로 뒤에 영어 알파벳 o 또는 x가 붙어야 함. 하지만 이는 8진법 또는 16진법의 숫자를 의미하게 됨.

일반적으로 사용하는 십진법 정수 23을 출력하려면 맨 왼편에 위치한 0을 제거해야 오류가 발생하지 않는다.

print(23)
23

또는 숫자가 아닌 문자열 "023"을 의도했지만 미처 따옴표를 사용하지 않은 경우라면 아래처럼 작은따옴표 또는 큰따옴표로 감싸면 된다. 단, 이때는 023 이라는 세 개의 숫자로 구성된 문자열이지 정수 23을 의미하지는 않음에 주의한다. 프로그래밍에서 문자열과 정수는 엄연히 다르게 처리된다.

# 오류가 수정된 코드

print('023')
023

1.1.2연습문제

아래 명령문들을 실행해서 오류가 발생하는 경우 오류의 종류와 원인을 설명하고 수정하라. 오류가 발생하지 않으면 실행 결과를 설명한다.

(1) 오류 수정 또는 실행 결과 설명

print("Hello World)
  Cell In[14], line 1
    print("Hello World)
          ^
SyntaxError: unterminated string literal (detected at line 1)

(2) 오류 수정 또는 실행 결과 설명

print(21 8)
  Cell In[15], line 1
    print(21 8)
          ^
SyntaxError: invalid syntax. Perhaps you forgot a comma?

(3) 오류 수정 또는 실행 결과 설명

print(2++2)
4

1.2변수 할당문

컴퓨터 프로그램은 단순하게 말해 값을 저장하고 조작하여 새로운 값을 계산하여 활용하는 방법을 묘사한다. 이런 의미에서 값을 컴퓨터에 저장하는 변수 할당 명령문이 프로그램의 기초중에 기초라고 말한다.

변수

컴퓨터 프로그램은 값의 저장과 활용을 위해 변수variable를 이용한다. 변수는 저장된 값을 가리키는 일종의 이름표이며, 프로그램 어디에서든 변수 자신이 가리키는 값을 대신하여 활용될 수 있다.

변수 할당과 변수 정의

특정 값을 컴퓨터에 저장한 다음에 활용하려면 저장할 값을 가리키는 변수를 정의해야 하며, 이 과정은 변수를 할당하는 명령문에 의해 수행된다. 예를 들어 아래 코드는 3을 변수 a에 할당하며 이를 통해 3을 가리키는 a라는 변수가 정의된다.

a = 3

이제 변수 a가 가리키는 값을 print() 함수를 이용하여 확인하면 3이 출력된다.

print(a)
3

이처럼 변수와 값을 연결시키는 명령문이 변수 할당문variable assignment statement이다. 변수는 저장된 값을 대신하여 활용된다. 예를 들어 아래 코드는 변수 a가 가리키는 값에 2를 곱한 결과를 변수 b에 할당한다.

b = 2 * a

변수 b가 가리키는 값을 확인하면 6이 출력된다.

print(b)
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

1.2.1예제

(1) 변수 greeting에 문자열 "반갑다, 파이썬!"을 할당하고, print() 함수를 이용하여 변수에 저장된 값을 화면에 출력하라.

답:

greeting = "반갑다, 파이썬!"
print(greeting)
반갑다, 파이썬!

(2) 가로가 20, 세로가 10인 사각형의 넓이를 계산하여 area 변수에 할당하고 출력하라. 단, 가로와 세로를 각각 width, height 변수에 할당하여 활용하라.

답:

width = 20
height = 10
area = width * height
print(area)
200

(3) 아파트의 면적을 나타내는 단위인 '평’은 3.3058 제곱미터(m2m^2)에 해당한다. 25.7평이 몇 제곱미터인지 계산하여 space_m2 변수에 할당하고 출력하라.

답:

one_pyung = 3.3058
space_pyung = 25.7

space_m2 = space_pyung * one_pyung
print(space_m2)
84.95906

1.2.2연습문제

(1) 서점에 가서 15,000원짜리 책 한 권과 23,000원짜리 책 한 권을 샀다. 이 서점은 현재 10% 할인을 행사 중이다. 아래 단계에 따라 최종 결제 금액을 계산하고 출력하는 코드를 작성하라.

  • book1 변수에 첫 번째 책 가격 15000 할당

  • book2 변수에 두 번째 책 가격 23000 할당

  • total 변수에 두 책의 합계 금액 할당

  • discount_rate 변수에 할인율 0.1 할당

  • final_price 변수에 할인율이 적용된 최종 결제 금액 할당 (공식: total - (total * discount_rate))

  • 최종 금액 출력

book1 = 15000
book2 = 23000
total = book1 + book2
discount_rate = 0.1

final_price = total - (total * discount_rate)
print(final_price)
34200.0

(2) 현재 1달러(USD)는 1350원(KRW)이라고 가정하자. 보유하고 있는 100달러가 한화로 얼마인지 계산하여 krw_money 변수에 할당하고 출력하라. (힌트: usd_rate = 1350, usd_money = 100 변수 활용)

usd_rate = 1350
usd_money = 100
krw_money = usd_money * usd_rate
print(krw_money)
135000

(3) "2시간 30분 15초"가 총 몇 초인지 계산하여 total_seconds 변수에 할당하고 출력하라. (힌트: 1시간 = 60분, 1분 = 60초)

hour = 2
minute = 30
second = 15

total_seconds = (hour * 60 * 60) + (minute * 60) + second
print(total_seconds)
9015

1.3변수 작성법

변수는 할당되는 값과 연관된 이름을 사용하는 게 좋다. 예를 들어, 농구 시합에서 A 팀의 점수 72와 B 팀의 점수 80을 가리키는 두 개의 변수를 아래와 같이 a, b, c 등으로 하면 코드만 보고서는 변수의 의미를 파악하기 어렵다.

a = 72
b = 80
c = a + b
print("합계:", c)
합계: 152

반면에 아래처럼 score_a, score_b, total_score 등으로 변수를 정하면 코드에 사용된 변수의 의미를 보다 잘 이해할 수 있다.

score_a = 72
score_b = 80
total_score = score_a + score_b
print("합계:", total_score)
합계: 152

변수 작성 관례

문법적으로 강제되지는 않지만, 파이썬 프로그래머들은 변수 이름을 지을 때 뱀 표기법snake_case을 따른다. 뱀 표기법은 여러 개의 단어를 밑줄 _로 연결하는 방식이며, 각 단어는 특별한 경우를 제외하고는 일반적으로 소문자로 시작한다. 뱀 표기법 이외에 첫단어를 제외한 다른 단어를 대문자로 두면서 이어붙이는 방식을 따르는 낙타 표기법도 있으나 파이썬에서는 잘 활용되지 않는다.

  • 뱀 표기법 예제: score_a, score_b, total_score 등등

  • 낙타 표기법 예제: scoreA, scoreB, totalScore 등등

파이썬 프로그래머는 협업, 검색, 도구 호환을 위해 보통 영어 알파벳과 뱀 표기법을 활용한다.

변수 작성 규칙

변수를 지정할 때 지켜야 하는 몇 가지 규칙이 있다.

  • 알파벳, 숫자, 밑줄 기호 _ 등을 임의로 조합한다.

  • 다음 기호들은 사용할 수 없다.

    ., !, +, -, *, /, %, @, ~
  • 공백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

변수로 허용되지 않는 사례

명령문을 실행하다가 오류가 발생하면 파이썬 실행기는 오류의 발생 위치, 종류, 발생 원인 등을 화면에 출력한다. 오류의 종류와 발생 원인에 따라 화면에 출력되는 내용이 달라지며, 특히 오류를 처음 접하는 경우 이해가 어려울 수 있다. 여기서는 허용되지 않는 방식으로 변수명을 사용할 때 발생하는 오류를 이용하여 오류 메시지를 이해하는 방법을 소개한다.

사례1) 숫자로 시작하면 안된다는 규칙을 어긴다.

3dogs = '강아지 세 마리'
  Cell In[31], line 1
    3dogs = '강아지 세 마리'
    ^
SyntaxError: invalid decimal literal

여기서 발생하는 오류의 발생 위치, 종류, 발생 원인은 다음과 같다.

  • 오류 발생 위치: 코드셀에 작성된 코드의 1번 줄(line 1)의 3dogs = '강아지 세 마리' 에서 오류 발생. 특히 캐럿(^) 기호로 적시된 숫자 3의 위치가 문제. 셀 번호를 가리키는 Cell In[4]는 코드가 포함된 셀의 번호이며 여기서는 의미 없음.

  • 오류 종류: SyntaxError. 구문 오류, 즉 명령문 작성 규칙에 위배됨을 의미.

  • 오류 발생 원인: invalid decimal literal. 변수명이 숫자로 시작해서 문제.

사례 2) 변수명에 허용되지 않는 마침표를 사용한다.

first.second = "1, 2"
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
Cell In[32], line 1
----> 1 first.second = "1, 2"

NameError: name 'first' is not defined
  • 오류 발생 위치: 코드셀에 작성된 코드의 1번 줄(line 1)의 first.second = "1, 2" 에서 오류 발생.

  • 오류 종류: NameError. 이름 오류.

  • 오류 발생 원인: name 'first' is not defined. first 라는 변수가 정의되지 않았다는 의미. 파이썬에서 마침표 기호는 특별한 기능 수행하기 때문임. 따라서 마침표 이전에 위치한 first 변수의 의미를 먼저 확인하지만 알려지지 않았다는 오류가 발생. 여기서는 변수 이름에 마침표는 허용되지 않는다는 사실만 기억해둘 것.

사례 3) 변수에 공백이 허용되지 않기에 구문 오류(SyntaxError)가 발생한다.

big number = 100000000
  Cell In[33], line 1
    big number = 100000000
        ^
SyntaxError: invalid syntax
  • 오류 발생 위치: 코드셀에 작성된 코드의 1번 줄(line 1)의 big number = 100000000 에서 오류 발생. 특히 캐럿(^) 기호로 적시된 영어 알파벳 n의 위치가 문제.

  • 오류 종류: SyntaxError. 구문 오류, 즉 명령문 작성 규칙에 위배됨을 의미.

  • 오류 발생 원인: invalid syntax. 단순히 '구문 오류’라고만 명시됨. 구체적으로는 공백이 사용되었기 때문임.

사례 4) False는 거짓을 나타내는 값을 가리키는 키워드가 사용되어 오류가 발생한다.

False = 0
  Cell In[34], line 1
    False = 0
    ^
SyntaxError: cannot assign to False
  • 오류 발생 위치: 코드셀에 작성된 코드의 1번 줄(line 1)의 False = 0 에서 오류 발생. 특히 캐럿(^) 기호로 적시된 영어 알파벳 F의 위치가 문제.

  • 오류 종류: SyntaxError. 구문 오류, 즉 명령문 작성 규칙에 위배됨을 의미.

  • 오류 발생 원인: cannot assign to False. False 키워드를 변수 할당에 사용할 수 없음을 의미.

소문자와 대문자 구분

프로그래밍에서 영어 알파벳의 소문자와 대문자는 엄연히 구분된다. 예를 들어, 아래 두 개의 변수는 서로 다른 값을 가리킨다.

lower_a = 'a'
upper_a = 'A'
print("소문자:", lower_a)
print("대문자:", upper_a)
소문자: a
대문자: A

1.3.1예제

(1) 변수 할당 명령문과 관련하여 주의해야할 점들을 다룬다. 명령문들을 실행해서 오류가 발생하는 경우 오류의 종류와 원인을 설명한 다음에 오류가 발생하지 않도록 적절하게 수정하라.

가. 오류 수정 또는 실행 결과 설명

23 = n
  Cell In[37], line 1
    23 = n
    ^
SyntaxError: cannot assign to literal here. Maybe you meant '==' instead of '='?

답:

  • 오류 종류: SyntaxError(구문 오류)

  • 오류 발생 원인:

    • cannot assign to literal here: 23은 변수가 아닌 정수 23, 즉 고정된 값인 리터럴literal임. 변수 할당 명령문의 등호 기호 왼쪽에 변수가, 오른쪽에 할당되는 값이 위치해야 함.

    • Maybe you meant '==' instead of '='?: 변수 할당 명령문이 될 수 없기에 혹시 두 값을 비교하는 연산자인 == 인지 확인해보라는 설명임.

변수 n에 정수 23을 할당하려면 다음과 같이 수정해야 한다.

n = 23

나. 오류 수정 또는 실행 결과 설명

x = y = 1

답:

오류가 발생하지 않으며, 두 변수 x, y 모두 1을 할당 받는다. 즉 아래 코드를 간단하게 표현한 명령문이다.

x = 1
y = 1

하지만 이 방식은 추천되지 않는다. 이유는 한 줄에 하나의 변수를 정의하면 나중에 코드를 이해할 때 보다 쉽게 이해될 수 있으며, 할당된 값이 숫자가 아닌 보다 복잡한 값이 경우엔 혼돈이 발생할 수 있기 때문이다. 즉, 한줄에 하나의 변수 할당 명령문만 사용할 것을 강력히 권고한다.

다. 오류 수정 또는 실행 결과 설명

y = k + 1.
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
Cell In[41], line 1
----> 1 y = k + 1.

NameError: name 'k' is not defined

답:

  • 오류 종류: NameError(이름 오류)

  • 오류 발생 원인: 아직 정의되지 않은 변수 k 가 사용됨. 즉 k 가리키는 값이 지정되지 않았음.

k를 먼저 정의하면 해결된다. 예를 들어 아래 코드는 변수 k가 3을 가리키도록 한다.

k = 3

y = k + 1

라. 오류 수정 또는 실행 결과 설명

class = 35
  Cell In[43], line 1
    class = 35
          ^
SyntaxError: invalid syntax

답:

  • 오류 종류: SyntaxError(구문 오류)

  • 오류 발생 원인: 파이썬 키워드인 class를 변수명으로 사용함. 키워드는 변수명으로 사용할 수 없음.

키워드 아닌 다른 변수명을 사용하면 된다.

class_count = 35

(2) 아래 변수는 자바 등의 언어에서 주로 사용하는 낙타 표기법으로 작성되었다. 이를 파이썬의 관례인 뱀 표기법으로 수정한 코드를 작성하라.

(힌트: 대문자를 소문자로 바꾸고 단어 사이를 밑줄 _로 연결한다.)

myPhoneNumber = "010-1234-5678"

답:

my_phone_number = "010-1234-5678"

1.3.2연습문제

(1) 아래 명령문들을 실행해서 오류가 발생하는 경우 오류의 종류와 원인을 설명하고 수정하라. 오류가 발생하지 않으면 실행 결과를 설명한다.

가. 오류 발생 원인 또는 실행 결과 설명

x = 2;

나. 오류 발생 원인 또는 실행 결과 설명

y = 3
z = x y
  Cell In[1], line 2
    z = x y
          ^
SyntaxError: invalid syntax

다. 오류 발생 원인 또는 실행 결과 설명

even = 3
odd = 17
print(even + oddd)
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
Cell In[48], line 3
      1 even = 3
      2 odd = 17
----> 3 print(even + oddd)

NameError: name 'oddd' is not defined

라. 오류 발생 원인 또는 실행 결과 설명

money! = 1000
  Cell In[49], line 1
    money! = 1000
         ^
SyntaxError: invalid syntax

(2) 아래 낙타 표기법 변수를 뱀 표기법 변수로 대체하라.

TopScore = 100

1.4변수 재할당

변수는 값을 가리키는 이름이며 언제든지 가리키는 값을 바꿀 수 있다. 이런 의미에서 등호 기호 =의 의미에 주의해야 한다. 즉, =는 수학의 ‘같다’가 아니라 ‘할당(대입)’을 의미한다.

예를 들어 아래처럼 변수 int_x에 정수 5를 할당하자.

int_x = 5

위 명령문은 "변수 int_x가 컴퓨터 어딘가에 저장된 정수 5를 가리킨다"고 말하지 "int_x는 5이다"라고 말하지 않는다. 이유는 변수 int_x와 가리키는 값 5가 별도의 존재로 간주되기 때문이다. 실제로 변수 int_x가 가리키는 값을 원할 때 언제든지 다른 값으로 대체할 수 있다.

변수가 가리키는 값을 변경하는 일을 변수 재할당이라 한다. 예를 들어 변수 할당 명령문을 아래처럼 다시 실행해본다.

int_x = 7

그러면 변수 int_x는 더 이상 정수 5가 아닌 정수 7을 가리킨다.

print(int_x)
7

1.4.1예제

(1) 다음 코드를 실행했을 때 최종적으로 변수 score가 가리키는 값은 무엇인지 설명하라.

score = 100
score = 200

답:

변수는 마지막에 할당된 값을 가리킨다. 처음에 100이 할당되었지만, 두 번째 줄에서 200이 재할당되었으므로 최종적으로 score는 200을 가리킨다.

(2) 다음 코드를 실행했을 때 변수 a와 b가 가리키는 값을 순서대로 설명하라.

a = 15
b = a
a = 20

답:

  • a = 15: a는 15를 가리킨다.

  • b = a: ba가 가리키는 값인 15가 할당된다. (b는 15를 가리킴)

  • a = 20: a에 20이 재할당된다. (a는 20을 가리킴)

  • 결과적으로 b는 여전히 처음에 할당받은 15를 유지한다. 따라서 a는 20, b는 15다.

1.4.2연습문제

(1) 다음 코드의 실행 결과를 예측하라.

box = '사과'
box = '귤'
box = '배'
print(box)

(2) 세 변수가 다음과 같이 주어졌다.

x = 5
y = 9
z = 2

아래 재할당을 순서대로 실행했을 때 세 x, y, z에 최종적으로 할당된 값을 예측하라.

x = y + z
y = x * 2
z = y - 3

1.5변수 업데이트

변수 업데이트variable update는 이미 선언된 변수에 대해 재할당을 수행할 때, 기존에 할당된 값을 활용하는 방식이다. 예를 들어 아래 코드는 변수 x가 기존에 가리키던 값 7에 1을 더한 값 8을 다시 x에 재할당한다.

x = 7
x = x + 1
print(x)
8

반면에 아래 명령문은 변수 x가 가리키던 값 8에서 1을 뺀 값인 7을 다시 변수 x에 할당한다.

x = x - 1
print(x)
7

변수 업데이트 명령문을 보다 간편하게 표현할 수 있다. 예를 들어 아래 명령문은 x = x + 1을 대신한다.

x += 1
print(x)
8

반면에 아래 명령문은 x = x / 2를 대신한다.

x /= 2
print(x)
4.0

프로그래밍에서 많이 사용되는 간편한 변수 업데이트 형식은 다음과 같다.

변수 업데이트실제 의미
x += kx = x + k
x -= kx = x - k
x *= kx = x * k
x /= kx = x / k
x **= kx = x ** k
x //= kx = x // k
x %= kx = x % k

1.5.1예제

(1) 다음 코드를 실행했을 때 a, b, c 세 변수가 가리키는 값의 변화를 설명하라.

a = 4
b = 9
c = 1

a = a + (b - c)
b = b * 3
c = c + a
a = a - b

답:

print('a:', a)
print('b:', b)
print('c:', c)
a: -15
b: 27
c: 13

풀이 과정:

  • 시작: a=4, b=9, c=1

  • a = a + (b - c)a = 4 + (9 - 1) = 12

  • b = b * 3b = 9 * 3 = 27

  • c = c + ac = 1 + 12 = 13

  • a = a - ba = 12 - 27 = -15

  • 최종: a=-15, b=27, c=13

(2) 두 변수가 다음과 같이 주어졌다.

a = 5
b = 2

아래 코드의 실행했을 때 두 변수 a, b에 최종 할당된 값을 예측하라.

a += b
b *= 3
a -= b
b //= 2

답:

print('a:', a)
print('b:', b)
a: 1
b: 3

1.5.2연습문제

(1) 변수 price가 처음에는 1000이었다가, 10% 가격이 인상된 후의 값을 가지도록 재할당하는 코드를 작성하라.

(힌트: price = price * ... 형태 활용)

(2) 두 변수가 다음과 같이 주어졌다.

x = 10
y = 3

다음 코드가 실행된 뒤 x, y가 최종적으로 가리키는 값을 예측하라.

x %= y
y += x
x **= 2
y -= 1

1.6자료형 확인

파이썬의 모든 값은 고유한 자료형data type을 가진다. 자료형은 주어진 값이 어떤 속성과 기능을 갖는지를 정의한다는 정도로만 일단 기억해둔다. 예를 들어 정수 3은 int 자료형, 유한소수 3.0은 float 자료형, 문자열 'Hello’는 str 자료형의 값이다. float는 부동소수점floating point number을 가리키며 프로그래밍 분야에서는 유한소수를 부동소수점이라 부르며, 이에 대해 다음 장에서 좀 더 자세하게 설명한다.

값의 자료형은 type() 함수를 사용하여 확인할 수 있다.

print(type(3))
print(type(3.0))
print(type("3"))
<class 'int'>
<class 'float'>
<class 'str'>

정수를 가리키는 변수에 점을 찍어 부동소수점으로 강제로 계산되도록 하는 일은 허용되지 않는다. 아래 코드를 실행하면 변수에 점을 찍는 일은 문법적으로 허용되지 않는다는 의미의 SyntaxError 라는 구문 오류가 발생한다.

d = 7
print(a * d.)
  Cell In[62], line 2
    print(a * d.)
                ^
SyntaxError: invalid syntax
  • 오류 발생 위치: 코드셀에 작성된 코드의 2번 줄(line 2)의 print(a * d.) 에서 오류 발생. 특히 캐럿(^) 기호로 적시된 마침표 오른편의 위치에서 문제 발생.

  • 오류 종류: SyntaxError. 구문 오류, 즉 명령문 작성 규칙에 위배됨을 의미.

  • 오류 발생 원인: invalid syntax. 구문 규칙에 어긋남을 의미. 파이썬에서 마침표 기호는 특별한 기능을 수행함. 따라서 여기서는 마침표 이후에 다른 무언가가 위치해야 하는 것으로 추정하지만 아무 것도 없기에 오류 발생 시킴.

1.6.1예제

(1) 아래 코드의 실행 결과를 설명하라.

3 + 3.0
6.0

답:

3은 정수 자료형, 3.0은 부동소수점 자료형이지만 정수와 부동소수점을 연산에 함께 사용하면 정수를 부동소수점으로 간주한다. 보다 구체적으로는 3이 3.0으로 변환되어 3.0 + 3.0으로 계산된다.

(2) 아래 표현식을 실행하면 오류가 발생하는 이유를 설명하라.

3 + '3.0'
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
Cell In[64], line 1
----> 1 3 + '3.0'

TypeError: unsupported operand type(s) for +: 'int' and 'str'

답:

  • 오류 종류: TypeError. 자료형 오류.

  • 오류 발생 원인: unsupported operand type(s) for +: 'int' and 'str'. 정수와 문자열에 대해 덧셈 연산자를 적용할 수 없다는 의미.

정수 또는 부동소수점, 즉 숫자와 문자열을 더하는 연산은 지원되지 않기에 오류가 발생하였다.

(3) type() 함수를 사용하여 정수 6을 2로 나눈 결과의 자료형을 확인하고 설명하라.

답:

type(6 / 2)
float

1.6.2연습문제

(1) 아래 코드의 실행 결과를 설명하라.

5.2 * 7
36.4

(2) 아래 표현식을 실행하면 오류가 발생하는 이유를 설명하라.

2.0 * "7.18"
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
Cell In[69], line 1
----> 1 2.0 * "7.18"

TypeError: can't multiply sequence by non-int of type 'float'

(3) 정수 10과 부동소수점 2.0을 더한 결과의 자료형이 무엇인지 type() 함수를 사용하여 확인하고 설명하라.

1.7파이썬 계산기

파이썬을 계산기로 활용할 수 있다. 또한 변수를 연산에 사용할 수 있고, 변수에 저장된 값을 조작하여 다른 값을 계산할 수도 있다. 파이썬이 제공하는 기초 연산을 정리하면 아래와 같다.

연산자의미
+덧셈
-뺄셈
*곱셈
/나눗셈
**거듭제곱
//
%나머지

다음 두 개의 변수를 이용하여 각 연산자의 사용법을 확인한다.

a = 7
b = 3
  • 덧셈: 표현식 a + ba 가 가리키는 7과 b가 가리키는 3이 더해진 값인 10을 표현한다.

print(a + b)
10

a + b 가 표현하는 값을 새로운 변수에 저장할 수도 있다. 아래 코드에서 변수 c는 10을 가리키게 된다.

c = a + b
print(c)
10

반면에 아래 코드에서 변수 d에는 3 + 4 즉 7이 할당된다.

d = b + 4
print(d)
7
  • 뺄셈: 표현식 b - ab 가 가리키는 3에서 a가 가리키는 7을 뺀 값인 -4를 표현한다.

print(b - a)
-4

물론 변수 할당에 바로 사용될 수 있다.

e = b - a
print(e)
-4
  • 곱셈

print(a * b)
21
d = a * b
print(d)
21
  • 나눗셈

print(b / a)
0.42857142857142855
e = b / a
print(e)
0.42857142857142855
  • 거듭제곱

print(a ** 2 + 1)
50
f = a ** 2 + 1 
print(f)
50
  • 정수 나눗셈의 몫: //은 몫 계산

print(8 // b + 3//2)
3
f = 8 // b + 3//2
print(f)
3
  • 정수 나눗셈의 나머지: %는 나머지 계산

print(c % b + f)
4
g = c % b + f 
print(g)
4

몫 연산 vs. 나눗셈 연산:정수 vs. 부동소수점

몫 연산과 나눗셈 연산은 다름에 주의한다. 몫 연산의 결과는 정수인 반면에 나눗셈의 결과는 유리수로 표현된다. 프로그래밍 분야에서 유리수는 부동소수점floating point이라 불린다.

print(c / b)
3.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

1.7.1예제

(1) 아래 문장들을 적절한 표현식으로 작성하여 실행한 다음 결과를 확인하라.

가. 정수 25와 정수 12 더하기

답:

덧셈 연산자를 활용한다.

25 + 12
37

나. 정수 92와 부동소수점 8.0 곱하기

답:

곱셈 연산자를 활용한다. 정수와 부동소수점의 곱셈은 부동소수점으로 계산된다.

92 * 8.0
736.0

다. 정수 81을 정수 3으로 나누기

답:

나눗셈 연산자를 활용한다. 정수들의 나눗셈이더라도 결과는 항상 부동소수점으로 계산된다. 따라서 81/3은 27이 아니라 27.0으로 표시된다.

81 / 3
27.0

라. 정수 7을 5로 나눴을 때의 몫

답:

몫 연산자를 활용한다. 결과는 항상 정수다.

7 // 5
1

(2) 먼저 아래와 같이 변수를 정의한다.

number = 17

언급된 값을 표현하는 수식을 number 변수를 이용하여 표현한 다음에 실행하여라.

가. number 더하기 2

답:

number + 2
19

나. number 빼기 2.0

답:

number - 2.0
15.0

다. number 나누기 7

답:

number / 7
2.4285714285714284

라. number를 7로 나눴을 때의 몫

답:

number // 7
2

마. number를 7로 나눴을 때의 나머지

답:

number % 7
3

바. number의 세제곱을 2 + 3으로 나누기

답:

number**3 / (2 + 3)
982.6

(3) 평수와 제곱미터 사이의 변환 관계를 다루는 코드를 작성한다.

가. 1 m2\text{m}^2는 0.3025평이다. 84 m2\text{m}^2는 몇 평인가?

힌트: 유용하게 활용할 수 있는 변수를 정의한다. 어떤 변수가 필요한지, 왜 필요한지를 판단하는 일이 중요하다.

답:

예를 들어 아래 변수들을 사용할 수 있다.

  • one_squaremeter: 1 제곱미터에 해당하는 평수

  • eightyfour_squaremeter: 84 제곱미터에 해당하는 평수

one_squaremeter = 0.3025
eightyfour_squaremeter = 84 * one_squaremeter

정의된 변수를 이용하여 아래와 같이 화면에 출력할 수 있다.

print("84 제곱미터:", eightyfour_squaremeter, '평')
84 제곱미터: 25.41 평

나. 30평은 몇 m2\text{m}^2인지 계산하는 코드를 다양한 변수를 이용하여 구현한다.

답:

아래 변수들을 사용할 수 있다.

one_pyeong = 1 / one_squaremeter
thirty_pyeong = 30 * one_pyeong

화면에 출력하면 다음과 같다.

print("30 평:", thirty_pyeong, '제곱미터')
30 평: 99.17355371900827 제곱미터

(4) 연이자 5%인 정기예금에 1천만원을 10년간 은행에 맡겼을 때 10년 후에 수령할 금액을 계산하는 코드를 다양한 변수를 활용하여 구현한다. 단, 다음 형식으로 출력하라.

10년 후 받을 원금 + 이자는 OOO 원입니다.

원리합계 계산은 아래 식을 따른다.

원리합계 = 원금 *  (1 + 연금리 * 기간)

힌트:

아래 변수를 활용해서 원리합계 수식을 간단하게 구현할 수 있다.

  • principal = 원금

  • rate = 연이자율

  • period = 저축기간(년)

  • savings = 원리합계

답:

principal = 10000000
rate = 0.05
period = 10

savings = principal * (1 + rate * period)

print("10년 후 받는 원금 + 이자는", savings, "원입니다.")
10년 후 받는 원금 + 이자는 15000000.0 원입니다.

1.7.2연습문제

(1) 먼저 아래와 같이 두 개의 변수를 정의한다.

width = 17
height = 12.0

두 변수를 이용하여 아래에 지정된 값을 가리키는 표현식을 작성한 다음에 실행 결과를 확인하라.

가. width를 3으로 나눈 나머지

나. width 나누기 3.0

다. height 빼기 3

라. height 곱하기 5에 7 더하기

마. height 곱하기 5에 7.0 더하기

(2) 오전 6시 52분에 집을 떠나서, 초반에는 km당 8분 15초의 속력으로 1km를 뛰고, 이어서 km당 7분 12초의 속력으로 3km를 뛴 후, 초반 속력으로 1km를 마저 달려 집으로 돌아왔을 때의 도착시간을 계산하는 코드를 작성하라. 단 집에 도착하는 시간을 아래와같이 출력되도록 해야 한다.

집에 도착 시간: 7 시 30 분 6 초

힌트: 시, 분, 초를 동시에 다루기 위해 계산을 초 단위로 통일시킨 후 아래 변수들을 정의하고 최종적으로 도착 시간을 지정된 형식으로 출력한다.

  • start: 자정 기준 출발 시간까지 지난 시간

  • running_time: 달린 시간

  • arrival_time: 자정 기준 도착 시간까지 지난 시간

(3) 100만원을 복리로 연이자 5%인 예금에 3년간 은행에 맡겼을 때 3년 후에 수령할 금액을 계산하는 코드를 다양한 변수를 활용하여 구현하라. 단, 다음 형식으로 출력한다.

3년 후 받을 원금 + 이자는 OOO 원입니다.

복리계산은 아래 식을 따른다.

원리합계 = 원금 * (1 + 연금리/일년에 이자받는횟수) ** (일년에 이자받는횟수 * 기간)

아래 변수를 활용한다.

  • principal: 원금

  • rate: 연이자율

  • frequency: 이자 지급 횟수 (연단위)

  • period: 저축기간 (년)

  • savings: 원리합계