본문 바로가기
자격증·공부 아카이브/Python 기초

Python 주피터 노트북 입문: 변수·문자열·조건문·리스트·튜플

by 쑥쑥자라나라 2026. 7. 28.
728x90

Python과 주피터 노트북을 처음 배우면 변수, 문자열, 연산자, 조건문, 리스트가 서로 다른 단원처럼 보인다. 하지만 실제 코드는 값을 저장하고, 필요한 형태로 바꾸고, 조건에 따라 처리한 뒤, 여러 결과를 리스트에 모으는 한 흐름으로 움직인다.

이 글의 목표: 주피터 노트북 조작법부터 문자열·조건문·리스트까지 연결하고, 마지막에는 입력값을 검증하는 음료 자판기 프로그램을 완성한다.

셀 입력부터 실행 결과까지 이어지는 Python 주피터 노트북 학습 흐름

1. 주피터 노트북은 셀 단위로 실행한다

주피터 노트북은 하나의 파일 안에 설명과 실행 코드를 함께 남길 수 있다. 코드 셀을 실행하면 결과가 바로 아래에 표시되므로, 값을 조금씩 바꾸며 동작을 확인하기 좋다. 다만 위쪽 셀을 수정한 뒤 다시 실행하지 않으면 화면의 코드와 메모리 속 값이 달라질 수 있다.

단축키동작사용 상황
Shift + Enter현재 셀 실행 후 다음 셀로 이동위에서 아래로 실습을 이어갈 때
Ctrl + Enter현재 셀만 실행같은 셀을 값만 바꿔 반복할 때
Tab변수·함수 이름 자동완성str. 뒤에서 사용 가능한 메서드를 찾을 때
Shift + Tab함수 설명 표시매개변수 순서를 확인할 때
A / B위 / 아래에 셀 추가명령 모드에서 셀을 끼워 넣을 때
M / Y마크다운 / 코드 셀로 변경설명과 실행 코드를 구분할 때
D, D선택한 셀 삭제명령 모드에서 불필요한 셀을 지울 때

실행 순서가 꼬였을 때: 커널을 다시 시작한 뒤 위에서 아래로 모든 셀을 실행한다. 특정 셀만 여러 번 실행해 생긴 숨은 상태를 제거할 수 있다.

셀 입력, 변수·문자열 처리, 조건 판단, 결과 출력으로 이어지는 기본 실행 흐름

2. 변수는 값에 이름을 붙이는 저장 공간이다

Python 변수는 별도의 자료형 선언 없이 값을 대입한다. 같은 변수에 다른 자료형을 다시 넣을 수도 있지만, 코드의 의미를 쉽게 추적하려면 한 변수의 역할을 자주 바꾸지 않는 편이 좋다.

name = "하나"        # str
age = 27             # int
height = 168.5       # float
is_student = True    # bool

print(type(name))
print(f"{name}님의 나이는 {age}세입니다.")

문자열 안의 특수 문자는 이스케이프 문자로 표현한다

message = "첫째 줄\n둘째 줄"
tabbed = "이름\t점수"
quote = "그는 \"Python\"이라고 말했다."
path = r"C:\new_folder\test"

\n은 줄바꿈, \t는 탭이다. Windows 경로처럼 역슬래시가 많은 문자열은 앞에 r을 붙인 원시 문자열로 쓰면 의도하지 않은 이스케이프 처리를 줄일 수 있다.

자주 쓰는 문자열 메서드

text = "  python very easy  "

clean = text.strip()
print(clean.upper())               # PYTHON VERY EASY
print(clean.replace(" ", "-"))     # python-very-easy
print(clean.split())               # ['python', 'very', 'easy']
print(clean.count("p"))            # 1
print(clean.find("z"))             # -1

find()는 문자를 찾지 못하면 -1을 반환하지만, index()ValueError를 발생시킨다. 존재 여부가 확실하지 않다면 find()in을 먼저 사용한다.

3. 연산 결과의 자료형까지 확인한다

표현103의 결과
a + b덧셈13
a / b실수 나눗셈3.333…
a // b3
a % b나머지1
a ** b거듭제곱1000

input()의 반환값은 항상 문자열이다. 숫자 계산에 사용하려면 int()float()로 변환해야 한다.

price_text = "700"
price = int(price_text)

print(price + 300)         # 1000
print(price_text + "원")   # 700원

비교 연산의 결과는 True 또는 False다. Python에서는 소문자 true, false가 아니라 첫 글자가 대문자인 값을 사용한다.

4. 조건문은 입력값에 따라 실행 경로를 나눈다

조건은 위에서부터 검사하며 처음 참인 블록 하나만 실행한다. 학점 프로그램은 100점처럼 몫이 10이 되는 경우와 범위를 벗어난 입력도 처리해야 한다.

score = int(input("점수: "))

if not 0 <= score <= 100:
    print("0점부터 100점 사이를 입력하세요.")
elif score >= 90:
    print("A학점")
elif score >= 80:
    print("B학점")
elif score >= 70:
    print("C학점")
elif score >= 60:
    print("D학점")
else:
    print("F학점")
728x90

잔돈 계산까지 정확한 자판기 예제

원문의 자판기 코드는 정확한 금액을 넣었을 때도 부족하다고 표시되고, 100원 동전 개수 계산에서 나누기가 빠져 있었다. 다음 코드는 메뉴와 투입 금액을 먼저 검증한 뒤 큰 화폐부터 잔돈을 계산한다.

입력 검증, 메뉴 선택, 잔돈 계산으로 이어지는 자판기 조건문 흐름

prices = {1: 600, 2: 800, 3: 1000}

coin = int(input("투입 금액: "))
menu = int(input("메뉴 선택(1:콜라, 2:사이다, 3:물): "))

if menu not in prices:
    print("없는 메뉴입니다.")
else:
    price = prices[menu]
    if coin < price:
        print(f"금액이 {price - coin}원 부족합니다.")
    else:
        change = coin - price
        won1000, change = divmod(change, 1000)
        won500, change = divmod(change, 500)
        won100, change = divmod(change, 100)

        print(f"잔돈: 1000원 {won1000}개, "
              f"500원 {won500}개, 100원 {won100}개")

5. 리스트는 바꿀 수 있고 튜플은 바꿀 수 없다

리스트와 튜플은 여러 값을 순서대로 저장한다. 둘 다 인덱싱과 슬라이싱을 지원하지만, 리스트는 요소를 추가·수정·삭제할 수 있고 튜플은 생성 후 요소를 바꿀 수 없다.

scores = [82, 95, 71, 88]

print(scores[0])       # 82
print(scores[-1])      # 88
print(scores[1:3])     # [95, 71]

scores.append(90)
scores.remove(71)      # 값으로 삭제
last = scores.pop()    # 마지막 값을 꺼내며 삭제
scores.sort(reverse=True)

point = (127, 64)
print(point[0])        # 127
작업표현주의점
인덱스로 삭제del values[1]두 번째 위치의 값을 지운다.
값으로 삭제values.remove(10)첫 번째 10을 지우며, 없으면 오류가 난다.
값 꺼내기values.pop()기본값은 마지막 요소다.
오름차순 정렬values.sort()원본 리스트를 바꾼다.
내림차순 정렬values.sort(reverse=True)reserve가 아니라 reverse다.

6. 입력부터 결과 정리까지 한 번에 연결한다

쉼표로 입력한 점수를 정수 리스트로 바꾸고, 유효한 점수만 남긴 뒤 평균과 합격 여부를 계산하는 예제다. 문자열, 형변환, 리스트, 조건문이 한 흐름으로 연결된다.

raw = input("점수를 쉼표로 입력하세요: ")

scores = []
for token in raw.split(","):
    token = token.strip()
    if token.isdigit():
        score = int(token)
        if 0 <= score <= 100:
            scores.append(score)

if scores:
    average = sum(scores) / len(scores)
    result = "합격" if average >= 60 else "불합격"
    print(f"유효 점수: {scores}")
    print(f"평균: {average:.1f}점 / {result}")
else:
    print("계산할 수 있는 점수가 없습니다.")

7. 직접 풀어보는 실습 5개

답을 바로 펼치기 전에 주피터 노트북에 코드를 먼저 입력해 본다. 틀렸다면 정답만 복사하지 말고, 실제 값과 자료형을 print()로 확인하는 편이 오래 기억에 남는다.

실습 1. 셀 번호가 [3]과 [7]이라면 현재 price는 얼마일까?
# [3]
price = 800

# [7]
price = 1200

print(price)

정답: 1200. 화면에서 위에 있는 셀이 아니라 마지막으로 실행된 대입문이 현재 값을 결정한다. 실행 번호가 커질수록 나중에 실행된 셀이다.

실습 2. 양쪽 공백을 없애고 쉼표 기준으로 두 과목을 나눠보자
subjects = "  Python,Java  "
result = subjects.strip().split(",")
print(result)

결과: ['Python', 'Java']. strip()이 문자열 바깥 공백을 제거하고, split(",")이 쉼표를 기준으로 리스트를 만든다.

실습 3. 95점이 B학점으로 잘못 분류되지 않게 조건 순서를 고쳐보자
score = 95

if score >= 90:
    grade = "A"
elif score >= 80:
    grade = "B"
else:
    grade = "C 이하"

print(grade)

정답: 큰 기준부터 검사한다. 80점 이상을 먼저 검사하면 95도 그 조건에서 멈추므로 A학점 분기까지 도달하지 못한다.

실습 4. 1,000원을 넣고 800원 메뉴를 골랐을 때 잔돈은?
change = 1000 - 800
won500, change = divmod(change, 500)
won100, change = divmod(change, 100)

print(won500, won100)

정답: 500원 0개, 100원 2개. divmod(a, b)는 몫과 나머지를 한 번에 돌려주므로 큰 화폐부터 계산하기 좋다.

실습 5. 리스트와 튜플의 첫 값을 각각 바꾸면 어떻게 될까?
colors = ["red", "blue"]
point = (10, 20)

colors[0] = "green"   # 정상
point[0] = 30         # TypeError

정답: 리스트만 변경된다. 리스트는 가변 객체지만 튜플은 생성 후 요소를 바꿀 수 없다. 좌표처럼 한 묶음의 값이 유지돼야 할 때 튜플이 잘 맞는다.

8. 처음 배울 때 자주 틀리는 부분

셀 실행 순서와 화면 순서를 같다고 생각한다

아래 셀에서 만든 변수가 위쪽 셀에서도 남아 있을 수 있다. 제출하거나 공유하기 전에는 커널 재시작 후 전체 실행으로 재현성을 확인한다.

===를 혼동한다

=는 값을 저장하고 ==는 두 값이 같은지 비교한다. 조건식에는 비교 결과가 필요하다.

슬라이싱의 끝 인덱스까지 포함한다고 생각한다

values[start:end]start 이상, end 미만이다. values[1:3]은 인덱스 1과 2만 가져온다.

문자열과 숫자가 자동으로 더해진다고 생각한다

"7" + 10은 오류다. 계산은 int("7") + 10, 문자열 연결은 "7" + str(10)처럼 의도를 명확히 한다.

공식 문서로 더 확인하기: Python 공식 튜토리얼에서 문자열·리스트·조건문 예제를, Jupyter Notebook 기본 안내에서 셀과 실행 방식을 확인할 수 있다.

핵심 요약

  • 주피터 노트북은 셀 실행 순서가 상태를 결정한다.
  • input()은 문자열이므로 숫자 계산 전 형변환한다.
  • find()index()는 검색 실패 처리 방식이 다르다.
  • 조건문은 범위와 잘못된 입력까지 함께 처리한다.
  • 리스트는 변경 가능하고 튜플은 변경 불가능하다.
  • 내림차순 정렬은 sort(reverse=True)다.
728x90