부록 E03: Python 기초
이 장에서 배울 것
이번 장에서는 파이썬(Python)의 기초를 배웁니다. 파이썬은 생물정보학, 데이터 분석, 인공지능, 자동화에서 널리 쓰이는 프로그래밍 언어입니다. 문법이 비교적 읽기 쉽기 때문에 처음 프로그래밍을 배우는 사람에게도 적합합니다.
핵심 용어를 먼저 정리하겠습니다.
- 코드(code): 컴퓨터에게 내리는 지시문입니다.
- 변수(variable): 값을 담아두는 이름표입니다.
- 자료형(data type): 값의 종류입니다. 예를 들어 숫자, 문자열, 참/거짓이 있습니다.
- 문자열(string): 글자 데이터입니다. DNA 서열도 문자열로 다룰 수 있습니다.
- 숫자(number): 계산할 수 있는 값입니다.
- 조건문(if statement): 조건에 따라 다른 코드를 실행하는 문장입니다.
- 반복문(loop): 같은 일을 여러 번 반복하는 문장입니다.
- 함수(function): 자주 쓰는 코드를 이름 붙여 묶은 것입니다.
- 모듈(module): 다른 사람이 만들어 둔 기능 묶음입니다.
가장 쉬운 비유: 조리법
프로그래밍은 요리 조리법과 비슷합니다. 재료가 있고, 순서가 있고, 결과물이 있습니다.
재료: 유전자 이름과 발현량
과정: 발현량이 큰 유전자만 고르기
결과: 관심 유전자 목록
파이썬 코드는 이 과정을 컴퓨터가 알아들을 수 있게 적은 것입니다.
출력하기: print
가장 먼저 배우는 명령은 print입니다. 화면에 값을 보여줍니다.
print("Hello")
print("BRCA1")
문자열은 따옴표로 감쌉니다. 따옴표가 없으면 파이썬은 그것을 이름표, 즉 변수로 해석하려고 합니다.
변수: 값에 이름 붙이기
변수는 값에 붙이는 이름표입니다.
gene = "BRCA1"
expression = 12.5
print(gene)
print(expression)
여기서 gene이라는 이름표에는 "BRCA1"이라는 문자열이 들어 있고, expression에는 12.5라는 숫자가 들어 있습니다.
자료형: 값의 종류
파이썬에서 값은 종류를 가집니다.
name = "TP53" # 문자열
count = 120 # 정수
ratio = 0.75 # 실수
is_high = True # 참/거짓
생물정보학에서는 문자열과 숫자를 특히 많이 씁니다.
- 유전자 이름: 문자열
- DNA 서열: 문자열
- 발현량: 숫자
- 품질 점수: 숫자
- 질병 여부: 참/거짓 또는 범주
기본 연산
숫자는 계산할 수 있습니다.
a = 10
b = 3
print(a + b) # 더하기
print(a - b) # 빼기
print(a * b) # 곱하기
print(a / b) # 나누기
문자열도 일부 연산이 가능합니다.
first = "ATG"
second = "CGA"
seq = first + second
print(seq)
결과는 ATGCGA입니다. DNA 조각 두 개를 이어 붙이는 것처럼 생각할 수 있습니다.
조건문: 상황에 따라 다르게 행동하기
조건문은 “만약 ~라면”을 코드로 쓰는 방식입니다.
expression = 12
if expression >= 10:
print("high")
else:
print("low")
여기서 발현량이 10 이상이면 high, 아니면 low가 출력됩니다. 들여쓰기가 중요합니다. 파이썬은 들여쓰기로 코드 블록을 구분합니다.
반복문: 여러 값을 차례대로 처리하기
반복문은 목록에 있는 값을 하나씩 꺼내 처리합니다.
genes = ["BRCA1", "TP53", "EGFR"]
for gene in genes:
print(gene)
이 코드는 유전자 이름을 하나씩 출력합니다. 생물정보학에서는 유전자 수천 개, 샘플 수백 개를 반복 처리해야 하므로 반복문이 중요합니다.
함수: 자주 쓰는 과정을 묶기
함수는 코드를 재사용하기 위한 이름 붙은 묶음입니다.
def is_high_expression(value):
if value >= 10:
return True
else:
return False
print(is_high_expression(12))
value라는 입력을 받아 발현량이 높은지 판단합니다. 함수는 코드가 길어질수록 매우 중요해집니다.
모듈: 도구 상자 불러오기
파이썬은 기본 기능만으로도 많은 일을 할 수 있지만, 데이터 분석에는 외부 도구가 필요합니다. 이런 도구 묶음을 모듈이라고 합니다.
import math
print(math.sqrt(16))
math.sqrt는 제곱근을 계산합니다. 나중에는 pandas, numpy, BioPython 같은 모듈을 쓰게 됩니다.
에러 메시지를 두려워하지 않기
초보자는 에러 메시지를 보면 겁을 먹습니다. 하지만 에러는 컴퓨터가 “여기서 이해하지 못했다”고 알려주는 신호입니다.
예를 들어:
print(gene_name)
그런데 gene_name이라는 변수를 만든 적이 없다면 파이썬은 이름을 모른다고 말합니다. 이때는 변수를 먼저 만들었는지 확인하면 됩니다.
생물정보학에서 왜 중요한가
파이썬은 생물 데이터를 읽고, 정리하고, 계산하고, 그래프로 만드는 데 쓰입니다. 예를 들어 유전자 발현량 표에서 높은 발현량을 가진 유전자만 고르거나, FASTA 파일에서 서열 길이를 계산하거나, 분석 결과를 CSV 파일로 저장할 수 있습니다.
코드 응용: 작은 생물정보학 판단을 직접 쓰기
파이썬 기초 문법은 데이터를 규칙에 따라 나누는 데 쓰입니다. 예를 들어 발현량에 따라 유전자를 분류할 수 있습니다.
gene = "BRCA1"
expression = 12.5
if expression >= 10:
label = "high"
else:
label = "low"
print(gene, label)
출력은 BRCA1 high입니다. 이 작은 코드는 실제 분석에서 조건을 만족하는 유전자만 고르는 작업의 출발점입니다.
초보자가 특히 많이 헷갈리는 것은 문자열 숫자와 실제 숫자입니다.
value_text = "12"
value_num = 12
value_text는 글자이고 value_num은 숫자입니다. 파일에서 읽은 값은 보통 글자이므로 계산하려면 int나 float로 바꾸어야 합니다.
또 하나의 핵심은 =와 ==의 차이입니다. =는 값을 저장하고, ==는 두 값이 같은지 비교합니다. gene = "TP53"은 저장이고, gene == "TP53"은 비교입니다. 이 차이를 모르면 조건문에서 자주 막힙니다.
미니 실습 블록: Python으로 FASTA 서열 길이 계산하기
이 실습은 Python으로 FASTA 서열 길이 계산하기를 직접 손으로 확인하는 연습입니다. 왜 필요한가 하면, 생물정보학 파일 처리는 줄을 읽고, 조건으로 구분하고, 필요한 값을 누적하는 작업이 많기 때문입니다.
fasta = ">geneA\nATGCGT\n>geneB\nATGC\n"
name = ""
seq = ""
for line in fasta.splitlines():
if line.startswith(">"):
if name != "":
print(name, len(seq))
name = line[1:]
seq = ""
else:
seq = seq + line
print(name, len(seq))
각 코드 요소의 의미를 풀어보면 다음과 같습니다. startswith('>')는 FASTA header인지 확인합니다. line[1:]은 >를 뺀 이름이고, len(seq)는 서열 길이입니다.
생물정보학/계산생물학에서 쓰이는 장면은 분명합니다. FASTA에서 유전자별 서열 길이를 계산하거나 너무 짧은 contig를 걸러낼 때 쓰이는 사고방식입니다.
흔한 오해 또는 주의점도 있습니다. 새 header를 만날 때 이전 서열을 출력하는 방식이라면 반복문이 끝난 뒤 마지막 record를 한 번 더 처리해야 합니다.
핵심 정리
파이썬 코드는 컴퓨터에게 내리는 지시문입니다. 변수는 값에 붙이는 이름표이고, 자료형은 값의 종류입니다. 조건문은 상황에 따라 다르게 행동하게 하고, 반복문은 여러 값을 차례대로 처리하게 합니다. 함수와 모듈은 코드를 재사용하고 확장하는 도구입니다.
문제 풀이
Python 기초
주관식 답안은 Gemini API로 채점합니다. API 키는 이 브라우저에만 저장됩니다.
-
1. [쉬움] 객관식
파이썬 코드에서 변수(variable)의 의미는?
-
2. [쉬움] 객관식
gene = "BRCA1"에서gene은 무엇인가? -
3. [쉬움] 객관식
"TP53"처럼 따옴표로 감싼 값은 보통 무엇인가? -
4. [계산] 객관식
다음 코드의 출력은?
print(10 + 3) -
5. [코드] 객관식
다음 코드의 출력은?
print("ATG" + "CGA") -
6. [보통] 객관식
조건문
if expression >= 10:의 의미로 적절한 것은? -
7. [보통] 객관식
파이썬에서 들여쓰기가 중요한 이유는?
-
8. [코드] 객관식
다음 코드의 출력 횟수는?
for gene in ["A", "B", "C"]: print(gene) -
9. [보통] 객관식
함수(function)의 설명으로 적절한 것은?
-
10. [보통] 객관식
return의 역할로 적절한 것은? -
11. [쉬움] 객관식
import math의 의미로 적절한 것은? -
12. [코드] 객관식
다음 코드의 출력은?
value = 12; print(value >= 10) -
13. [쉬움] 객관식
count = 120에서120의 자료형으로 가장 적절한 것은? -
14. [쉬움] 객관식
ratio = 0.75에서0.75의 자료형으로 가장 적절한 것은? -
15. [계산] 객관식
다음 코드의 출력은?
a = 5; b = 2; print(a * b) -
16. [보통] 객관식
print(gene_name)에서gene_name을 만든 적이 없다면 생길 수 있는 문제는? -
17. [쉬움] 객관식
생물정보학에서 DNA 서열은 파이썬에서 보통 어떤 자료형으로 다룰 수 있는가?
-
18. [보통] 객관식
반복문이 생물정보학에서 중요한 이유는?
-
19. [코드] 객관식
다음 코드의 출력은?
gene = "TP53"; print(gene) -
20. [코드] 객관식
다음 코드의 출력은?
x = 4; x = x + 1; print(x) -
21. [중간] 객관식
다음 코드의 출력은?
gene = "TP53"; print(gene == "TP53") -
22. [중간] 객관식
value_text = "12.5"를 계산 가능한 실수로 바꾸는 코드로 맞는 것은? -
23. [중간] 객관식
다음 코드의 출력은?
seq = "ATG" + "CGA"; print(len(seq)) -
24. [중간] 객관식
다음 코드에서
high에 들어갈 값은?expression = 8; high = expression >= 10 -
25. [중간] 객관식
다음 코드의 출력 줄 수는?
genes=["A","B","C"]뒤에for g in genes: print(g)를 실행한다. -
26. [중간] 객관식
gene = "BRCA1"의 의미로 맞는 것은? -
27. [중간] 객관식
함수
def add_one(x): return x + 1에서add_one(4)의 결과는? -
28. [중간] 객관식
변수를 만든 적 없이
print(gene_name)을 실행하면 흔히 생기는 오류는? -
29. [실전] 객관식
line.startswith('>')가 FASTA 처리에서 하는 일은? -
30. [실전] 객관식
반복문 뒤의 마지막
print(name, len(seq))가 없으면 생길 수 있는 문제는? -
주관식 31. [실습] 주관식 · Gemini 채점
변수
gene에 문자열BRCA1을 저장하고 출력하는 파이썬 코드를 작성하라. -
주관식 32. [실습] 주관식 · Gemini 채점
변수
expression에 12를 저장하고, 10 이상이면high를 출력하는 코드를 작성하라. -
주관식 33. [실습] 주관식 · Gemini 채점
리스트
["BRCA1", "TP53", "EGFR"]의 값을 하나씩 출력하는 반복문을 작성하라. -
주관식 34. [실습] 주관식 · Gemini 채점
숫자
value를 입력받아 10 이상이면True, 아니면False를 돌려주는 함수is_high_expression을 작성하라. -
주관식 35. [실습] 주관식 · Gemini 채점
문자열
"ATG"와"CGA"를 이어 붙여ATGCGA를 출력하는 코드를 작성하라. -
주관식 36. [실습] 주관식 · Gemini 채점
에러 메시지를 학습 과정에서 어떻게 받아들여야 하는지 설명하라.
-
주관식 37. [실습] 주관식 · Gemini 채점
발현량 리스트
[3, 12, 8, 20]에서 10 이상인 값만 출력하는 파이썬 반복문 코드를 작성하라. -
주관식 38. [실습] 주관식 · Gemini 채점
문자열 숫자
"12.5"와 숫자12.5의 차이를 생물정보학 파일 처리 예시로 설명하라. -
주관식 39. [실습] 주관식 · Gemini 채점
seq = 'ATGCGC'의 길이를 출력하는 Python 코드를 작성하라. -
주관식 40. [실습] 주관식 · Gemini 채점
seq = 'ATGCGC'에서 길이가 5 이상이면long, 아니면short를 출력하는 조건문을 작성하라.