Python / Variables / Assignment

2주차 2교시: 변수와 대입

1교시에서 구분한 값에 나중에도 사용할 이름을 붙이고, 값의 변화가 이미지의 속성에 어떻게 반영되는지 살펴봅니다.

주간 감상 시간과 콘텐츠 평점을 막대와 원으로 표현한 데이터 프로필
숫자 값의 변화를 막대 길이와 원 크기로 표현한 결과

변수를 통한 값의 저장과 재사용

핵심 개념
값, 변수, 대입, 갱신
이전 학습
int, float, str, bool
확인 방법
print(), type()
연결 실습
자기소개 Colab 노트북

학습 목표

  1. 값, 변수, 대입의 관계 설명
  2. 변수명 = 값을 오른쪽부터 읽고 실행 결과 추적
  3. 의미가 드러나는 변수명 작성 및 print(name)print("name") 구분
  4. 변수의 값이 이미지 속성에 반영되는 과정 설명
  5. 대표적인 오류의 원인 파악과 Colab 변수 대입·갱신

학습 내용

핵심 내용

이번 교시에는 값에 의미가 드러나는 변수명을 붙여 대입문을 구성하고, 대입문과 출력문의 역할을 구분합니다. 이어서 코드와 Colab 셀의 실행 순서에 따라 현재 값을 추적하고 갱신한 뒤, 변수의 값이 막대 길이와 원 크기 같은 이미지 속성에 반영되는 과정을 살펴봅니다. 추가 오류 예시는 수업 후 복습 자료로 활용합니다.

변수의 필요성

1교시에서는 값의 표기와 type()을 이용해 int, float, str, bool을 구분했습니다. 이제 값을 한 번 확인하는 데서 나아가, 같은 값을 다시 사용하고 관리하는 방법이 필요합니다. 변수는 값을 다시 찾을 수 있도록 붙인 이름입니다.

값 반복의 한계

print("이름:", "정호")"정호"처럼 값을 코드에 직접 적는 방식을 리터럴이라고 합니다. 한 번만 사용하고 바뀔 가능성이 낮은 값이라면 리터럴로 적는 편이 간단하고 뜻도 분명합니다. 문제는 하나의 정보를 여러 곳에서 사용해야 할 때 생깁니다.

다음 예시에서는 영화, 영상, 음악 같은 콘텐츠를 한 주 동안 감상한 총시간을 다룹니다. 숫자 7은 ‘한 주에 7시간’을 뜻하며, 이를 바탕으로 4주와 8주의 감상 시간을 계산합니다.

print("1주 콘텐츠 감상 시간:", 7)
print("4주 콘텐츠 감상 시간:", 7 * 4)
print("8주 콘텐츠 감상 시간:", 7 * 8)

이 코드에 반복된 세 개의 7은 모두 ‘한 주 동안의 콘텐츠 감상 시간 7시간’을 뜻합니다. 그러나 Python은 이 값들이 같은 정보를 나타낸다는 사실을 알지 못합니다. 코드에 적힌 각 7을 서로 독립된 값으로 처리하기 때문입니다. 따라서 주간 콘텐츠 감상 시간이 7시간에서 9시간으로 바뀌면 세 위치를 모두 찾아 수정해야 합니다.

이때 한 곳을 빠뜨려도 문법 오류는 발생하지 않습니다. 코드는 실행되지만 1주 결과에는 9시간, 4주나 8주 결과에는 이전 값인 7시간을 기준으로 계산한 결과가 나타날 수 있습니다. 또한 설명 없이 숫자 7만 보면 시간, 횟수, 평점 가운데 무엇을 뜻하는지 알 수 없습니다. 이처럼 값을 직접 반복하면 수정할 위치가 늘어나고, 값의 일관성과 코드의 의미가 함께 약해집니다.

왼쪽에는 세 조명을 서로 다른 다이얼로 각각 조절해 밝기가 다르고, 오른쪽에는 하나의 중앙 다이얼이 세 조명에 연결되어 밝기가 일정한 모습
각각 조절여러 다이얼은 같은 값을 코드 곳곳에 반복해서 적는 경우와 같습니다. 한 곳에서 조절중앙 다이얼은 값을 한 번 대입하고 필요한 곳에서 변수명을 사용하는 경우와 같습니다.

변수를 통한 값 관리

다음 코드에서 weekly_content_hours = 7은 ‘한 주 콘텐츠 감상 시간 7시간’에 weekly_content_hours라는 이름을 연결합니다. 아래 세 줄은 숫자를 다시 적지 않고 그 이름을 사용합니다.

weekly_content_hours = 7
print("1주 콘텐츠 감상 시간:", weekly_content_hours)
print("4주 콘텐츠 감상 시간:", weekly_content_hours * 4)
print("8주 콘텐츠 감상 시간:", weekly_content_hours * 8)
  1. 01재사용같은 값을 필요한 여러 곳에서 변수명으로 불러옵니다.
  2. 02변경대입한 값을 한 곳에서 수정한 뒤 코드를 다시 실행합니다.
  3. 03의미weekly_content_hours처럼 값의 역할을 변수명에 드러냅니다.

조명 비유의 중앙 다이얼은 값을 대입하는 한 줄에 해당합니다. Python에서는 그 값을 바꾼 뒤 코드를 다시 실행해야, 변수를 사용하는 각 줄이 새로운 값을 읽어 결과에 반영합니다. 이제 weekly_content_hours = 7을 값, 변수, 대입으로 나누어 읽고 이 연결이 만들어지는 과정을 살펴봅니다.

변수와 대입의 구조

값·변수·대입의 관계

1. 오른쪽 값을 먼저 확인
name = "정호"

오른쪽의 "정호"를 문자열 값으로 확인합니다.

2. 이름과 값 연결
name "정호"

이후 name을 사용하면 연결된 값 "정호"를 찾습니다.

name = "정호"는 “name과 정호는 같다”보다 “정호라는 값을 name이라는 이름과 연결한다”라고 읽는 편이 정확합니다.

변수명 작성 원칙

변수명 작성 기준
기준권장피할 예
뜻이 드러나는 이름daily_music_minutesd, number
여러 단어 연결favorite_colorfavorite color
첫 글자week2_score2week_score
대소문자 일관성student_nameStudentName과 혼용

이 수업에서는 영문 소문자 단어를 밑줄로 연결하는 snake_case를 기본 규칙으로 사용합니다. 변수명에 공백은 사용할 수 없으며, 숫자로 시작할 수 없습니다.

대입과 출력의 구분

name = "정호"를 실행하면 값은 이름과 연결되지만 화면에는 아무것도 나타나지 않습니다. 값을 화면에서 확인하려면 print()를 실행해야 합니다. 각 줄이 값을 이름에 연결하는지, 화면에 출력하는지 구분해 봅시다.

대입문과 출력문의 실행 상태
실행한 줄연결된 이름화면
name = "정호"name정호없음
major = "시각디자인"name정호, major시각디자인없음
print(name)변화 없음정호
print(major)변화 없음시각디자인

값을 변수에 대입해도 자료형은 달라지지 않습니다. type(name)name에 대입된 값 "정호"의 자료형, 곧 str을 알려줍니다.

name은 값을 찾기 위한 변수명이고, "name"은 n, a, m, e라는 네 글자로 이루어진 문자열입니다. 따라서 따옴표의 유무에 따라 Python이 해석하는 대상이 달라집니다.

변수 참조 print(name)

해석name에 연결된 값 조회

출력정호

문자열 print("name")

해석따옴표 안의 글자를 그대로 사용

출력name

1교시에서 print("이름:", "정호")처럼 설명과 값을 함께 출력했습니다. 오늘은 값을 직접 적는 대신 변수명을 사용합니다. 괄호 안의 쉼표는 그대로입니다.

name = "정호"
major = "시각디자인"

print("이름:", name)
print("전공:", major)
실행 결과 이름: 정호
전공: 시각디자인

대입 전 변수 참조

코드는 위에서 아래로 실행되므로 변수를 사용하기 전에 먼저 값을 대입해야 합니다. 아직 값이 연결되지 않은 이름을 사용하면 Python은 그 이름을 찾지 못합니다.

정상 순서
name = "정호"
print(name)

결과: 먼저 값을 연결한 뒤 사용하므로 정호가 출력됩니다.

문제가 생기는 순서
print(name)
name = "정호"

결과: 첫 줄을 실행할 때 name이 아직 정의되지 않았으므로 NameError가 발생합니다.

Colab 셀 실행 순서

한 코드 셀 안의 코드는 위에서 아래로 실행됩니다. 하지만 여러 셀은 화면에 놓인 순서가 아니라 실제로 실행 버튼을 누른 순서로 처리됩니다. 예를 들어 name = "정호"가 있는 셀을 먼저 실행해야 다른 셀의 print(name)이 그 값을 사용할 수 있습니다.

노트북의 코드가 위에서 아래로 다시 실행해도 같은 결과를 내도록 작성하면, 현재 어떤 값이 변수에 연결되어 있는지 혼동하는 일을 줄일 수 있습니다.

노트북 파일과 런타임 상태
구분남는 것런타임을 다시 시작하면
Colab 노트북 파일텍스트 셀, 코드 셀, 저장된 출력Google Drive에 저장된 문서 내용은 남습니다.
Python 런타임변수에 연결된 값과 현재 실행 상태상태가 사라지므로 코드를 처음부터 다시 실행해야 합니다.

값이 이름과 연결되는 순서와 Colab의 실행 상태를 확인했습니다. 이제 같은 변수에 새로운 값을 다시 대입하면 상태가 어떻게 달라지는지 살펴봅니다.

변수의 갱신

변수에는 실행 중에도 새로운 값을 다시 대입할 수 있습니다. 다시 대입한 뒤에는 그 이름이 새 값을 가리킵니다.

score의 갱신 과정
순서실행한 줄오른쪽 해석실행 후 상태화면
1score = 1010score10없음
2score = score + 510 + 515score15없음
3print(score)score의 현재 값 조회변화 없음15

두 번째 줄에서는 오른쪽의 기존 score 값으로 10 + 5를 먼저 계산한 뒤, 결과 15를 같은 이름에 다시 대입합니다.

대입과 등식의 차이

score = score + 5는 일반적인 수학 등식으로는 성립하지 않지만, 프로그램의 대입문에는 실행 순서가 있습니다. 오른쪽을 먼저 계산하고 그 결과를 왼쪽 이름에 다시 대입하므로 올바른 명령입니다.

연속 갱신과 상태 추적

앞에서는 값을 한 번 갱신했습니다. 아래 코드는 minutes에 값을 처음 대입한 뒤 두 번 갱신합니다. 각 줄을 실행한 뒤의 상태를 따라가며 마지막 출력을 확인합니다.

minutes = 30
minutes = minutes * 2
minutes = minutes + 15
print(minutes)
minutes의 갱신 상태
실행한 줄연결된 이름화면
minutes = 30minutes30없음
minutes = minutes * 2minutes60없음
minutes = minutes + 15minutes75없음
print(minutes)그대로75

변수와 이미지 속성

변수의 값이 저절로 이미지로 바뀌는 것은 아닙니다. 프로그램에는 어떤 변수의 값을 이미지의 어떤 속성에 사용할지 정하는 규칙이 필요합니다. 예를 들어 weekly_content_hours를 막대 길이에 연결하고 average_rating을 원 크기에 연결하면, 그리기 코드는 각 변수의 현재 값을 읽어 해당 속성을 계산합니다.

화면 반영 과정

  1. 값 준비: 변수에 현재 데이터를 대입합니다.
  2. 속성 연결: 각 변수를 길이, 크기, 설명, 표시 상태 같은 이미지 속성과 연결합니다.
  3. 화면 반영: 그리기 코드가 값을 읽어 시각 요소를 표시합니다. 값을 갱신하고 다시 실행하면 연결된 요소도 달라집니다.

아래 STATE A와 STATE B는 같은 변수와 같은 연결 규칙을 사용한 두 상태입니다. 달라진 것은 weekly_content_hoursaverage_rating의 값뿐이므로, 각각과 연결된 막대 길이와 원 크기만 달라집니다. 두 이미지는 이 원리를 설명하기 위한 수업용 개념 시안이며 Python 코드의 실제 실행 화면은 아닙니다.

favorite_content카드의 설명
weekly_content_hours막대 길이
average_rating원 크기
wants_to_create상태 타일 표시
STATE A / LOWER VALUES
favorite_content = "데이터 아트"
weekly_content_hours = 4
average_rating = 3.0
wants_to_create = True
짧은 초록 막대와 중간 크기의 파란 원으로 표현한 낮은 변수값 데이터 프로필
weekly_content_hours = 4, average_rating = 3.0: 막대가 짧고 원이 비교적 작습니다.
STATE B / HIGHER VALUES
favorite_content = "데이터 아트"
weekly_content_hours = 12
average_rating = 4.8
wants_to_create = True
긴 초록 막대와 큰 파란 원으로 표현한 높은 변수값 데이터 프로필
weekly_content_hours = 12, average_rating = 4.8: 막대가 길어지고 원이 커집니다.

학습 범위

이번 2교시의 목표는 값의 변화가 연결된 시각 속성에 반영되는 관계를 이해하는 것입니다. 이미지를 그리는 함수와 문법은 이번 시간의 학습 범위가 아닙니다. 3주차부터 픽셀, 좌표, RGB, 도형 그리기를 배우며 직접 구현합니다.

이미지 상태 비교

weekly_content_hours가 4에서 12로 바뀌며 초록 막대가 길어졌고, average_rating이 3.0에서 4.8로 바뀌며 파란 원이 커졌습니다. 문자열 favorite_content와 불리언 wants_to_create는 같으므로 설명과 상태 타일은 그대로입니다. 이처럼 어떤 시각 요소가 바뀌는지는 그 요소와 연결된 값에 달려 있습니다.

지금까지 변수의 값을 대입하고 갱신하는 방법과, 그 값을 이미지 속성에 연결하는 원리를 살펴보았습니다. 다음 실습에서는 변수의 대입과 갱신을 하나의 코드에서 직접 확인합니다.

Colab 실행 실습

1교시 노트북에 새 셀을 추가하거나 새 노트북을 만듭니다. 오늘은 변수의 대입과 갱신을 직접 실행하며 확인합니다. 3교시 미션은 아직 시작하지 않습니다.

변수 대입과 갱신

  1. 1교시 노트북을 열거나 새 노트북을 만듭니다.
  2. 아래 코드를 새 셀에 적고 Shift+Enter로 실행합니다.
  3. print(name)의 출력과, 같은 셀에서 print("name")을 추가했을 때의 차이를 확인합니다.
  4. weekly_content_hours 값을 바꾼 뒤 같은 셀을 다시 실행해, four_week_content_hours가 바뀌는지 확인합니다.
name = "정호"
weekly_content_hours = 7
likes_data_art = True
four_week_content_hours = weekly_content_hours * 4

print("이름:", name)
print(type(weekly_content_hours))
print("4주 콘텐츠 감상 시간:", four_week_content_hours)
print("관심 여부:", likes_data_art)

실습 점검

  • NameError가 나면 변수에 값을 대입하기 전에 사용하지 않았는지 확인합니다.
  • TypeError가 나면 문자열과 숫자를 바로 더하지 않았는지 확인합니다.
  • 노트북을 저장해도 런타임을 다시 시작하면 실행 상태는 사라집니다. 대입문이 있는 셀을 다시 실행하세요.
  • 3교시 미션 노트북은 아직 열지 않습니다.

핵심 정리

  • =을 오른쪽부터 읽을 수 있습니다.
  • print(name)print("name")의 출력이 다른 이유를 말할 수 있습니다.
  • weekly_content_hours를 바꾸고 계산식을 다시 실행하면 four_week_content_hours도 바뀐다는 점을 확인했습니다.

학습 내용 점검

새로운 내용을 추가로 배우는 구간이 아니라, 이번 교시의 핵심 내용을 세 단계로 확인하는 구간입니다. 각 단계의 완료 기준을 먼저 확인한 뒤 순서대로 진행합니다.

학습 내용 점검 기준
단계점검 내용완료 기준
01개념 이해값·변수·대입·출력·갱신의 관계를 자신의 말로 설명
02개념 적용정보의 맥락에 맞는 변수명을 작성하고 자료형을 구분
03오류 해석오류 이름, 발생 원인, 먼저 확인할 항목을 순서대로 파악

01 핵심 개념 이해

코드를 실행하지 않고 각 질문의 답을 먼저 정합니다. 이후 질문을 열어 자신의 설명과 해설을 비교합니다.

1. name = "정호"에서 값, 변수, 대입 기호는 각각 무엇인가?

값은 "정호", 변수 이름은 name, 대입 기호는 =입니다. 오른쪽 값을 먼저 확인한 뒤 왼쪽 이름과 연결합니다.

2. name = "정호" 다음에 print("name")을 실행하면 무엇이 나오는가?

name이 출력됩니다. 따옴표 안의 내용은 이름을 찾아보라는 표시가 아니라 글자 그대로의 데이터입니다. 연결된 값 정호를 출력하려면 print(name)을 사용합니다.

3. print(name)을 먼저 실행하고 다음 줄에서 name = "정호"를 실행하면 왜 오류가 나는가?

첫 줄을 실행하는 시점에는 name = "정호"가 아직 실행되지 않아 name이 정의되어 있지 않기 때문입니다.

4. score = 10 다음에 score = score + 5를 실행하면 score는 얼마인가?

15입니다. 오른쪽의 기존 값 10에 5를 더한 뒤, 계산 결과 15를 같은 이름 score에 다시 대입합니다.

02 변수명과 자료형 적용

값만 보아서는 그 값의 의미를 알 수 없습니다. 다음처럼 값의 맥락이 주어졌을 때, 각 정보를 나타내는 변수명을 작성하고 자료형을 구분합니다.

  1. 이미지 개수: 27
  2. 콘텐츠 평균 평점: 3.5
  3. 좋아하는 색: "blue"
  4. 데이터 아트 관심 여부: False

작성 형식: 변수명 = 값을 적은 뒤 자료형을 옆에 표시합니다.

변수명 작성 예시

image_count = 27int, average_rating = 3.5float, favorite_color = "blue"str, likes_data_art = Falsebool입니다.

03 오류 메시지 해석

오류 화면 전체를 한 번에 이해하려고 하지 않습니다. 우선 마지막 줄에서 오류 이름오류 설명을 찾고, 그 위에서 문제가 발생한 코드 줄을 확인합니다.

print(name)
NameError: name 'name' is not defined
오류 이름NameError는 정의되지 않은 이름을 사용했음을 알립니다. 문제의 이름name이 이 줄을 실행하는 시점에 연결되어 있지 않습니다. 확인할 질문대입이 이 줄보다 앞에 있는가, 철자와 대소문자가 같은가?
오류 메시지는 오류의 종류와 다시 확인해야 할 내용을 알려줍니다.

1교시에서 본 "20" + 1TypeError도 같은 방식으로 읽습니다. 마지막 줄의 오류 이름부터 확인한 뒤, 양쪽 값의 자료형을 봅니다. 다음 표의 나머지 오류는 수업 후 개별 복습에 활용합니다.

대표 오류 유형
오류예시 원인먼저 확인할 것
NameErrorblue를 따옴표 없이 사용하거나 정의하지 않은 변수를 사용철자, 대소문자, 먼저 대입했는지 확인
SyntaxError따옴표나 괄호가 닫히지 않음오류가 표시된 줄의 기호 짝 확인
TypeError"20" + 1처럼 서로 호환되지 않는 자료형을 함께 연산type()으로 양쪽 값의 자료형 확인

3교시 연계

3교시에는 1·2교시에서 익힌 자료형, 변수, 대입, 출력을 활용해 자신의 정보를 담은 작은 자기소개 프로그램을 완성합니다. 구체적인 코드와 제출 방법은 3교시 자료에서 확인합니다.

참고 자료