파이썬 개발 환경부터 조건문·반복문까지
오늘은 본격적으로 파이썬 기초 학습을 시작했다. 단순히 문법만 외우는 것이 아니라, 프로젝트마다 개발 환경을 분리하는 이유부터 파이썬 코드가 위에서 아래로 실행되는 과정, 변수와 문자열, 조건문과 반복문까지 전체적인 흐름을 배웠다.
낯선 용어가 많았지만, 하나씩 생활 속 예시와 연결해서 생각하니 조금씩 이해되기 시작했다.
1교시 — 프로젝트별 가상환경 만들기
가장 먼저 앞으로 사용할 전체 수업 자료인 AIDVS 프로젝트를 준비했다. 폴더 안에는 각 과정의 예제 코드와 설명 문서가 들어 있었다.
각 단원을 공부할 때는 먼저 다음 문서를 확인하면 된다.
- README.md: 이번 단원에서 무엇을 배우는지 설명
- SETUP.md: 환경을 어떻게 설정하는지 설명
- 실습용 파이썬 파일과 과제
그동안은 코드 파일만 바로 열어보려고 했는데, 앞으로는 먼저 README.md에서 학습 목표를 확인하고 문제가 생기면 SETUP.md를 확인하는 습관을 들여야겠다.
프로젝트마다 가상환경을 따로 만드는 이유
01, 02, 03처럼 프로젝트가 여러 개 있을 때는 각각의 폴더에 .venv라는 가상환경을 만들었다.
python -m venv .venv
가상환경은 쉽게 말하면 프로젝트마다 따로 사용하는 파이썬 도구 상자다.
예를 들어 다음처럼 프로젝트마다 필요한 패키지가 다를 수 있다.
01 프로젝트 → 파이썬 기초용 패키지
02 프로젝트 → 백엔드 개발용 패키지
03 프로젝트 → 프론트엔드 연동용 패키지
모든 패키지를 한곳에 설치하면 버전이 충돌할 수 있기 때문에, 프로젝트마다 독립된 환경을 사용하는 것이다.
가상환경이 제대로 연결되었는지는 다음 코드로 확인할 수 있다.
import sys
print(sys.executable)
출력된 경로에 현재 프로젝트의 .venv가 들어 있다면 정상적으로 연결된 것이다.
VS Code가 계속 01 가상환경을 사용했던 이유
실습 중 02_supabase-ai-backend 폴더에서 터미널을 열었는데도 계속 01 프로젝트의 가상환경이 연결되는 문제가 있었다.
처음에는 다음 명령으로 직접 변경했다.
deactivate
cd C:\aidevs\02_supabase-ai-backend
.\.venv\Scripts\Activate.ps1
이렇게 하면 현재 터미널에서는 02 가상환경이 정상적으로 활성화됐다.
하지만 새 터미널을 열면 다시 01 가상환경이 연결됐다. 그 이유는 VS Code가 AIDEVS 전체를 하나의 큰 프로젝트로 보고 있었기 때문이다.
각 폴더에서 다음 기능을 실행해 문제를 해결했다.
폴더 우클릭
→ Add as Python Project
이 설정을 하자 VS Code가 각 폴더를 서로 다른 파이썬 프로젝트로 인식했다.
01 폴더 → 01의 .venv
02 폴더 → 02의 .venv
03 폴더 → 03의 .venv
쉽게 말하면 각 교실에 이름표를 붙이고, 그 교실 전용 도구 상자를 연결해준 것이다.
2교시 — 패키지 설치와 파이썬 실행 흐름
파이썬 프로젝트에서는 기본으로 제공되지 않는 외부 패키지를 설치해야 할 때가 있다. 필요한 패키지 목록은 보통 requirements.txt 파일에 적어둔다.
패키지를 설치하기 전에는 먼저 pip 버전을 확인하고 업그레이드했다.
python -m pip --version
python -m pip install --upgrade pip
그다음 requirements.txt에 적힌 패키지를 한 번에 설치했다.
python -m pip install -r requirements.txt
-r은 파일을 읽어서 그 안에 적힌 패키지를 설치하라는 의미다.
패키지 설치가 심하게 꼬였을 때는 오류를 하나씩 해결하는 것보다 다음 순서로 다시 만드는 것이 더 빠를 수도 있다.
기존 .venv 삭제
→ 새 가상환경 생성
→ pip 업그레이드
→ requirements.txt 재설치
print()와 input()
파이썬에서 화면에 값을 출력할 때는 print()를 사용한다.
print("Hello Python")
큰따옴표와 작은따옴표를 모두 사용할 수 있다.
print("안녕하세요")
print('반갑습니다')
여러 값을 쉼표로 나누면 값 사이에 자동으로 공백이 들어간다.
print("Hello", "Python")
Hello Python
공백 없이 붙이고 싶다면 sep을 사용할 수 있다.
print(2 + 3, "OK", sep="")
5OK
사용자에게 값을 입력받을 때는 input()을 사용한다.
name = input("이름을 입력하세요: ")
print(name)
파이썬 코드는 기본적으로 위에서 아래로 실행되지만, input()을 만나면 사용자가 값을 입력할 때까지 잠시 멈춘다.
3교시 — 변수와 자료형
변수는 값을 잠시 담아두는 상자와 같다.
name = "민수"
age = 20
name 상자에는 글자가 들어 있고, age 상자에는 숫자가 들어 있다.
파이썬에서 자주 사용하는 기본 자료형은 다음 네 가지다.
자료형의미예시
| str | 문자열 | "Python" |
| int | 정수 | 100 |
| float | 실수 | 3.14 |
| bool | 참과 거짓 | True, False |
불리언은 반드시 첫 글자를 대문자로 작성해야 한다.
is_student = True
is_logged_in = False
소문자로 true라고 작성하면 파이썬은 이를 변수 이름으로 생각하기 때문에 오류가 발생한다.
type()으로 자료형 확인하기
변수에 어떤 종류의 값이 들어 있는지 확인할 때는 type()을 사용한다.
name = "민수"
age = 20
print(type(name))
print(type(age))
<class 'str'>
<class 'int'>
type()은 변수 상자 안에 무엇이 들어 있는지 확인하는 돋보기와 비슷하다.
타입 힌트
변수에 어떤 값이 들어갈 예정인지 미리 표시할 수도 있다.
name: str = "민수"
age: int = 20
height: float = 175.5
이것을 타입 힌트라고 한다.
타입 힌트는 다른 개발자에게 다음과 같이 알려주는 이름표다.
name에는 문자열이 들어갑니다.
age에는 정수가 들어갑니다.
하지만 타입 힌트를 작성했다고 해서 파이썬이 다른 값의 입력을 완전히 막는 것은 아니다.
age: int = 20
age = "스무 살"
이 코드도 실행될 수 있다. 따라서 타입 힌트는 자물쇠라기보다 개발자끼리 지켜야 하는 안내문에 가깝다.
문자열과 숫자 변환
다음 값은 숫자처럼 보이지만 따옴표가 있으므로 문자열이다.
price = "1000"
따라서 바로 숫자와 더할 수 없다.
print(price + 500)
문자열을 실제 정수로 바꾸려면 int()를 사용한다.
price = int("1000")
print(price + 500)
1500
실수로 바꾸려면 float()를 사용한다.
price = float("1000")
문자열에 숫자를 곱하면 해당 문자열이 반복된다.
print("안녕" * 3)
안녕안녕안녕
f-string으로 문장 안에 변수 넣기
문자열 안에 변수 값을 넣고 싶을 때는 f-string을 사용할 수 있다.
name = "민수"
print(f"안녕하세요. 저는 {name}입니다.")
안녕하세요. 저는 민수입니다.
문자열 앞에 f를 붙이고, 넣고 싶은 변수는 중괄호 {} 안에 작성한다.
AI에게 보낼 프롬프트도 같은 방식으로 만들 수 있다.
question = "변수가 무엇인가요?"
prompt = f"""
너는 친절한 파이썬 선생님이야.
질문:
{question}
아주 쉽게 설명해줘.
"""
여기서 f는 변수 값을 넣기 위한 표시이고, """는 여러 줄의 문자열을 작성하기 위한 표시다.
이 코드는 AI에게 바로 질문을 전송하는 것이 아니라, AI에게 보낼 최종 질문 문장을 만드는 과정이다.
문자열 인덱싱과 슬라이싱
파이썬에서 문자열의 첫 번째 위치는 1이 아니라 0이다.
word = "Python"
문자Python
| 위치 | 0 | 1 | 2 | 3 | 4 | 5 |
첫 번째 글자를 가져오려면 다음처럼 작성한다.
print(word[0])
마지막 글자는 -1로 가져올 수 있다.
print(word[-1])
문자열의 일부를 가져오는 것을 슬라이싱이라고 한다.
message = "Python Basic"
print(message[0:6])
print(message[7:])
Python
Basic
슬라이싱에서는 시작 위치는 포함하지만, 끝 위치는 포함하지 않는다.
문자열[시작 위치:끝 위치]
문자열을 잘라서 출력한다고 원래 문자열이 바뀌는 것은 아니다. 잘라낸 값을 계속 사용하려면 새로운 변수에 저장해야 한다.
new_message = message[7:]
4교시 — 문자열 데이터 정리하기
실제 사용자가 입력한 데이터에는 불필요한 공백이나 쉼표가 포함될 수 있다.
price = " 12,000 "
이 값을 계산에 사용하려면 먼저 정리해야 한다.
price = price.strip()
price = price.replace(",", "")
price = int(price)
처리 순서는 다음과 같다.
앞뒤 공백 제거
→ 쉼표 제거
→ 숫자로 변환
→ 계산
자주 사용한 문자열 함수
text.strip()
문자열 양쪽의 공백을 제거한다.
text.lstrip()
왼쪽 공백만 제거한다.
text.rstrip()
오른쪽 공백만 제거한다.
text.replace(",", "")
특정 문자를 다른 문자로 바꾼다. 빈 문자열로 바꾸면 삭제하는 것과 같다.
text.upper()
text.lower()
영문자를 대문자 또는 소문자로 바꾼다.
이메일 아이디와 도메인 분리하기
다음 이메일을 아이디와 도메인으로 나누는 실습도 했다.
email = "python@example.com"
@의 위치를 찾고 슬라이싱할 수 있다.
at_position = email.find("@")
user_id = email[:at_position]
domain = email[at_position + 1:]
결과는 다음과 같다.
아이디: python
도메인: example.com
split()을 사용하면 더 간단하게 나눌 수도 있다.
user_id, domain = email.split("@")
AI가 자동으로 이런 코드를 만들어주더라도 각 코드가 어떤 의미인지, 예외적인 입력에도 제대로 동작하는지 직접 확인해야 한다.
5교시 — 조건문으로 프로그램의 길 나누기
조건문은 상황에 따라 서로 다른 코드를 실행하도록 만드는 문법이다.
score = 85
if score >= 80:
print("합격입니다.")
else:
print("불합격입니다.")
점수가 80점 이상이면 첫 번째 코드가 실행되고, 그렇지 않으면 else가 실행된다.
독립적인 if
잘못된 입력을 초반에 걸러낼 때 사용할 수 있다.
import sys
card = "sports_card"
if card != "bank_card":
print("은행 카드가 아닙니다.")
sys.exit()
print("카드 업무를 진행합니다.")
은행 카드가 아니면 프로그램을 바로 종료한다. 정상적인 값만 아래 코드로 내려가게 만드는 것이다.
if-elif-else
조건이 여러 개일 때 사용한다.
if card == "card1":
print("1번 카드 업무")
elif card == "card2":
print("2번 카드 업무")
elif card == "card3":
print("3번 카드 업무")
else:
print("사용할 수 없는 카드")
파이썬은 위에서부터 조건을 확인하고 처음으로 참이 된 부분 하나만 실행한다.
match-case
하나의 값을 여러 경우와 비교할 때 사용할 수 있다.
menu = input("메뉴를 선택하세요: ")
match menu:
case "1":
print("1번 메뉴")
case "2":
print("2번 메뉴")
case "3":
print("3번 메뉴")
case _:
print("알 수 없는 메뉴")
마지막의 _는 앞의 어떤 경우에도 해당하지 않는 모든 값을 의미한다.
논리 연산자와 비트 연산자
숫자 범위를 검사하는 코드에서 or 대신 |를 사용해 프로그램이 제대로 종료되지 않는 문제도 있었다.
잘못된 코드:
if num < 1 | num > 10:
sys.exit()
올바른 코드:
if num < 1 or num > 10:
sys.exit()
논리 연산자는 조건의 참과 거짓을 연결한다.
and → 두 조건이 모두 참
or → 두 조건 중 하나라도 참
not → 참과 거짓을 반대로 변경
비트 연산자는 정수를 컴퓨터의 0과 1 형태로 바꿔 계산한다.
& | ^
숫자가 들어간다고 무조건 비트 연산자를 쓰는 것은 아니다.
숫자의 크기나 범위를 판단
→ and, or, not
숫자의 2진수 비트를 계산
→ &, |, ^
6교시 — 반복문으로 합계와 평균 구하기
반복문은 같은 작업을 여러 번 실행할 때 사용한다.
students = ["지민", "서현", "민준"]
for student in students:
print(f"{student} 출석했습니다.")
리스트에서 학생 이름을 하나씩 꺼내 같은 코드를 반복한다.
합계 구하기
숫자 리스트의 합계를 구하려면 계산 결과를 저장할 변수가 필요하다.
numbers = [1, 2, 3, 4, 5]
total_number = 0
for number in numbers:
total_number += number
print(total_number)
15
total_number를 0으로 먼저 만드는 것을 초기화라고 한다.
변수를 초기화하지 않고 사용하면 파이썬은 해당 변수가 무엇인지 알 수 없어 오류가 발생한다.
또한 sum은 파이썬에 이미 존재하는 함수 이름이므로 변수 이름으로 사용하지 않는 것이 좋다.
total_number = 0
total_score = 0
total_price = 0
평균 구하기
평균은 합계를 데이터의 개수로 나누면 된다.
average = total_number / len(numbers)
전체 코드는 다음과 같다.
numbers = [1, 2, 3, 4, 5]
total_number = 0
for number in numbers:
total_number += number
average = total_number / len(numbers)
print(f"합계: {total_number}")
print(f"평균: {average}")
while문과 무한 반복
while문은 조건이 참인 동안 계속 반복한다.
while True:
command = input("명령어를 입력하세요: ")
print(command)
True는 항상 참이므로 이 코드는 끝없이 반복된다.
사용자가 q를 입력했을 때 종료하도록 만들 수 있다.
while True:
command = input("명령어를 입력하세요(q: 종료): ")
if command == "q":
break
print(command)
break는 현재 반복문만 종료한다.
반면 sys.exit()은 프로그램 전체를 종료한다.
break
→ 반복문만 종료
→ 아래 코드는 계속 실행
sys.exit()
→ 프로그램 전체 종료
오늘 함께 해결한 VS Code 사용법
수업 중 자주 사용한 VS Code 기능도 정리했다.
파이썬 파일을 디버깅 없이 실행:
Ctrl + F5
선택한 코드 또는 현재 줄 실행:
Shift + Enter
모든 터미널 한 번에 종료:
Ctrl + Shift + P
→ Terminal: Kill All Terminals
Developer: Reload Window 실행:
Ctrl + Shift + P
→ Developer: Reload Window
현재 사용하는 파이썬 경로 확인:
python -c "import sys; print(sys.executable)"
오늘 배운 전체 흐름
오늘 배운 내용을 하나의 프로그램 흐름으로 연결하면 다음과 같다.
프로젝트별 가상환경 준비
→ 필요한 패키지 설치
→ 사용자에게 값 입력받기
→ 변수에 값 저장하기
→ 문자열과 숫자 구분하기
→ 입력값의 공백과 특수문자 정리하기
→ 조건문으로 올바른 값인지 검사하기
→ 반복문으로 여러 데이터를 처리하기
→ 결과 출력하기
처음에는 if, for, while, venv, requirements.txt처럼 낯선 단어가 많아 복잡하게 느껴졌다.
하지만 하나씩 쉽게 생각하면 다음과 같았다.
변수 → 값을 담는 상자
자료형 → 상자 안에 들어 있는 값의 종류
타입 힌트 → 상자에 붙이는 이름표
조건문 → 어느 길로 갈지 정하는 갈림길
반복문 → 같은 일을 여러 번 해주는 직원
가상환경 → 프로젝트 전용 도구 상자
2일차를 마치며
오늘은 개발 환경 설정부터 파이썬의 변수, 문자열, 조건문, 반복문까지 많은 내용을 배웠다.
아직 모든 코드를 외워서 작성할 수 있는 수준은 아니지만, 코드를 봤을 때 어떤 순서로 실행되는지 조금씩 따라갈 수 있게 되었다.
특히 AI가 코드를 자동으로 작성해주더라도 다음 내용은 직접 이해해야 한다는 점이 인상적이었다.
왜 이 조건을 사용했는가?
변수에는 지금 어떤 값이 들어 있는가?
반복문은 몇 번 실행되는가?
프로그램은 언제 종료되는가?
AI가 만든 코드가 요구사항에 맞는가?
앞으로는 AI가 만들어준 코드를 그대로 복사하는 것보다, 직접 실행해보고 입력값을 바꿔보면서 각 줄의 의미를 설명할 수 있도록 연습해야겠다.
오늘 배운 문법은 앞으로 진행할 백엔드, 프론트엔드, AI 애플리케이션 개발의 가장 기본적인 재료이기 때문에 완벽하게 외우려고 조급해하기보다 반복해서 사용하며 익숙해져야겠다.
댓글