기초생물학 개념 20개와 파이썬 코드

주석 포함 코드 · 한 줄씩 상세 설명 · OX 개념 퀴즈 · 5지선다형 문제

학습 목표

이 수업자료는 기초생물학 개념을 파이썬 기본 문법으로 계산하고 모의실험하는 자료입니다.
사용 문법: 변수, 문자열, 리스트, if, for, count(), len()

1. 기초생물학 개념 20개와 파이썬 코드

1. 세포 수 증가

세포는 분열을 통해 개수가 증가할 수 있습니다.

cells = 1  # 처음 세포 수
division = 5  # 분열 횟수

for i in range(division):  # 분열 횟수만큼 반복한다.
    cells *= 2  # 한 번 분열할 때마다 세포 수가 2배가 된다.

print("최종 세포 수 =", cells)
한 줄씩 코드 상세 설명
1. cells = 1: 처음 세포 수를 1개로 둡니다.
2. division = 5: 세포 분열을 5번 한다고 정합니다.
3. for i in range(division): 5번 반복합니다.
4. cells *= 2: 세포 수를 2배로 늘립니다.
5. print(): 최종 세포 수를 출력합니다.

2. DNA 염기 개수 세기

DNA는 A, T, G, C 네 종류의 염기로 이루어져 있습니다.

dna = "ATGCGATTA"  # DNA 염기서열

a = dna.count("A")  # A의 개수
t = dna.count("T")  # T의 개수
g = dna.count("G")  # G의 개수
c = dna.count("C")  # C의 개수

print("A:", a)
print("T:", t)
print("G:", g)
print("C:", c)
한 줄씩 코드 상세 설명
1. dna: DNA 염기서열을 문자열로 저장합니다.
2. count('A'): A가 몇 번 나오는지 셉니다.
3. count('T'): T의 개수를 셉니다.
4. count('G'): G의 개수를 셉니다.
5. count('C'): C의 개수를 셉니다.

3. DNA 상보적 염기쌍

DNA에서 A는 T와, G는 C와 상보적으로 결합합니다.

dna = "ATGCCGTA"  # 원래 DNA 가닥
pair = ""  # 상보적 DNA 가닥을 저장할 문자열

for base in dna:  # 염기를 하나씩 확인한다.
    if base == "A":
        pair += "T"
    elif base == "T":
        pair += "A"
    elif base == "G":
        pair += "C"
    elif base == "C":
        pair += "G"

print("원래 가닥:", dna)
print("상보 가닥:", pair)
한 줄씩 코드 상세 설명
1. pair = '': 상보 가닥을 저장할 빈 문자열입니다.
2. for base in dna: 염기를 하나씩 꺼냅니다.
3. A이면 T를 붙입니다.
4. T이면 A를 붙입니다.
5. G이면 C, C이면 G를 붙입니다.

4. RNA 전사

DNA의 정보를 RNA로 옮길 때 T 대신 U가 사용됩니다.

dna = "ATGCTTACG"  # DNA 염기서열
rna = ""  # RNA 염기서열

for base in dna:
    if base == "T":
        rna += "U"  # DNA의 T는 RNA에서 U로 바뀐다.
    else:
        rna += base  # 나머지 염기는 그대로 둔다.

print("DNA:", dna)
print("RNA:", rna)
한 줄씩 코드 상세 설명
1. dna: DNA 염기서열입니다.
2. rna: RNA 결과를 저장합니다.
3. T이면 U로 바꿉니다.
4. 나머지 A, G, C는 그대로 추가합니다.
5. 결과 RNA를 출력합니다.

5. 코돈 나누기

RNA는 세 염기씩 묶인 코돈 단위로 해석됩니다.

rna = "AUGGCUUAA"  # RNA 염기서열

for i in range(0, len(rna), 3):  # 3칸씩 건너뛰며 반복한다.
    codon = rna[i:i+3]  # 세 글자를 잘라 코돈으로 만든다.
    print(codon)
한 줄씩 코드 상세 설명
1. range(0, len(rna), 3): 0부터 시작해 3씩 증가합니다.
2. rna[i:i+3]: i부터 i+2까지 세 글자를 자릅니다.
3. codon: 세 염기로 된 단위입니다.
4. print(codon): 코돈을 출력합니다.

6. 멘델 유전 확률

Aa와 Aa가 교배할 때 유전자형 비율을 계산할 수 있습니다.

parent1 = ["A", "a"]  # 첫 번째 부모가 만들 수 있는 생식세포
parent2 = ["A", "a"]  # 두 번째 부모가 만들 수 있는 생식세포
children = []  # 자손 유전자형 저장

for g1 in parent1:
    for g2 in parent2:
        children.append(g1 + g2)  # 두 생식세포 조합

print(children)
한 줄씩 코드 상세 설명
1. parent1: 첫 번째 부모의 생식세포입니다.
2. parent2: 두 번째 부모의 생식세포입니다.
3. 이중 for문으로 모든 조합을 만듭니다.
4. g1 + g2: 자손의 유전자형입니다.
5. children 리스트에 저장합니다.

7. 우성 표현형 비율

우성 대립유전자 A가 하나라도 있으면 우성 형질이 나타난다고 가정합니다.

children = ["AA", "Aa", "aA", "aa"]
dominant = 0

for genotype in children:
    if "A" in genotype:  # A가 하나라도 있으면 우성 표현형
        dominant += 1

ratio = dominant / len(children)

print("우성 표현형 비율 =", ratio)
한 줄씩 코드 상세 설명
1. children: 가능한 자손 유전자형입니다.
2. dominant: 우성 표현형 개수입니다.
3. 'A' in genotype: A가 포함되어 있는지 확인합니다.
4. dominant += 1: 우성 표현형이면 개수를 늘립니다.
5. 비율은 dominant / 전체 개수입니다.

8. 개체군 증가

개체군은 출생과 사망에 따라 증가하거나 감소합니다.

population = 100  # 처음 개체 수
birth = 30  # 태어난 개체 수
death = 10  # 죽은 개체 수

population = population + birth - death  # 개체군 변화

print("현재 개체 수 =", population)
한 줄씩 코드 상세 설명
1. population: 처음 개체 수입니다.
2. birth: 새로 태어난 개체 수입니다.
3. death: 죽은 개체 수입니다.
4. population + birth - death: 개체군 변화를 계산합니다.
5. 현재 개체 수를 출력합니다.

9. 지수적 개체군 증가

환경 제한이 없으면 개체군은 일정 비율로 빠르게 증가할 수 있습니다.

population = 100  # 처음 개체 수
rate = 0.2  # 증가율 20%
years = 5  # 기간

for year in range(1, years + 1):
    population = population * (1 + rate)  # 매년 20% 증가
    print(year, "년 후:", int(population))
한 줄씩 코드 상세 설명
1. population: 초기 개체 수입니다.
2. rate: 증가율입니다.
3. years: 관찰 기간입니다.
4. population * (1 + rate): 일정 비율로 증가합니다.
5. int(): 정수 형태로 보기 쉽게 출력합니다.

10. 먹이사슬 에너지 전달

먹이사슬에서 다음 영양 단계로 전달되는 에너지는 일부입니다.

energy = 10000  # 생산자의 에너지
rate = 0.1  # 10%만 다음 단계로 전달
levels = 4  # 영양 단계 수

for level in range(1, levels + 1):
    print(level, "단계 에너지:", energy)
    energy *= rate  # 다음 단계로 10% 전달
한 줄씩 코드 상세 설명
1. energy: 시작 에너지입니다.
2. rate: 에너지 전달 효율입니다.
3. levels: 영양 단계 수입니다.
4. 각 단계의 에너지를 출력합니다.
5. energy *= rate: 다음 단계 에너지를 계산합니다.

11. 효소 반응 속도

효소 반응은 기질 농도가 증가하면 반응 속도가 증가하다가 포화됩니다.

substrate = 10  # 기질 농도
vmax = 100  # 최대 반응 속도
km = 5  # 반응 속도가 절반이 되는 농도

velocity = vmax * substrate / (km + substrate)  # 간단한 효소 반응식

print("반응 속도 =", velocity)
한 줄씩 코드 상세 설명
1. substrate: 기질 농도입니다.
2. vmax: 최대 반응 속도입니다.
3. km: 반응 속도 특성을 나타내는 값입니다.
4. velocity: 효소 반응 속도입니다.
5. 기질이 많아질수록 속도는 vmax에 가까워집니다.

12. 확산

물질은 농도가 높은 곳에서 낮은 곳으로 이동하는 경향이 있습니다.

left = 100  # 왼쪽 농도
right = 20  # 오른쪽 농도

diffusion = (left - right) * 0.1  # 농도 차이의 일부가 이동한다고 가정
left -= diffusion  # 왼쪽 농도 감소
right += diffusion  # 오른쪽 농도 증가

print("왼쪽 농도:", left)
print("오른쪽 농도:", right)
한 줄씩 코드 상세 설명
1. left: 왼쪽 농도입니다.
2. right: 오른쪽 농도입니다.
3. left - right: 농도 차이입니다.
4. diffusion: 이동한 양입니다.
5. 왼쪽은 줄고 오른쪽은 증가합니다.

13. 삼투

물은 용질 농도가 낮은 곳에서 높은 곳으로 이동합니다.

inside = 30  # 세포 안 용질 농도
outside = 80  # 세포 밖 용질 농도

if outside > inside:
    print("물이 세포 밖으로 이동")
elif outside < inside:
    print("물이 세포 안으로 이동")
else:
    print("물의 순이동 없음")
한 줄씩 코드 상세 설명
1. inside: 세포 안 용질 농도입니다.
2. outside: 세포 밖 용질 농도입니다.
3. 밖의 농도가 높으면 물이 밖으로 이동합니다.
4. 안의 농도가 높으면 물이 안으로 이동합니다.
5. 농도가 같으면 순이동이 없습니다.

14. 체온 항상성

생물은 체내 환경을 일정하게 유지하려고 합니다.

body_temp = 38.5  # 현재 체온
normal = 37.0  # 정상 체온

if body_temp > normal:
    print("땀을 흘려 체온을 낮춘다.")
elif body_temp < normal:
    print("몸을 떨어 체온을 높인다.")
else:
    print("정상 체온 유지")
한 줄씩 코드 상세 설명
1. body_temp: 현재 체온입니다.
2. normal: 정상 체온입니다.
3. 현재 체온이 높으면 낮추는 반응이 나타납니다.
4. 현재 체온이 낮으면 높이는 반응이 나타납니다.
5. 같으면 정상 상태입니다.

15. 혈당 조절

혈당은 인슐린과 글루카곤 등에 의해 조절됩니다.

blood_sugar = 160  # 혈당 수치
normal = 100  # 기준 혈당

if blood_sugar > normal:
    print("인슐린 분비 증가")
elif blood_sugar < normal:
    print("글루카곤 분비 증가")
else:
    print("혈당 정상")
한 줄씩 코드 상세 설명
1. blood_sugar: 현재 혈당입니다.
2. normal: 기준 혈당입니다.
3. 혈당이 높으면 인슐린이 증가합니다.
4. 혈당이 낮으면 글루카곤이 증가합니다.
5. 혈당이 기준과 같으면 정상입니다.

16. 심박수 평균

여러 번 측정한 심박수의 평균을 계산할 수 있습니다.

heart_rates = [72, 75, 70, 78, 74]  # 측정한 심박수
total = 0

for h in heart_rates:
    total += h  # 심박수를 모두 더한다.

average = total / len(heart_rates)  # 평균 계산

print("평균 심박수 =", average)
한 줄씩 코드 상세 설명
1. heart_rates: 여러 번 측정한 심박수입니다.
2. total: 합계를 저장합니다.
3. for h in heart_rates: 값을 하나씩 꺼냅니다.
4. average: 합계를 개수로 나눈 값입니다.
5. 평균 심박수를 출력합니다.

17. 돌연변이 찾기

DNA 염기서열에서 원래 서열과 다른 위치를 찾을 수 있습니다.

normal = "ATGCCGTA"  # 정상 DNA
mutant = "ATGACGTA"  # 변이 DNA

for i in range(len(normal)):
    if normal[i] != mutant[i]:  # 같은 위치의 염기가 다르면
        print(i + 1, "번째 염기 변이:", normal[i], "->", mutant[i])
한 줄씩 코드 상세 설명
1. normal: 정상 DNA입니다.
2. mutant: 변이 DNA입니다.
3. range(len(normal)): 모든 위치를 검사합니다.
4. normal[i] != mutant[i]: 염기가 다른지 확인합니다.
5. 다른 위치와 변화 내용을 출력합니다.

18. GC 함량

DNA에서 G와 C의 비율은 생물학적 특성을 이해하는 데 사용됩니다.

dna = "ATGCGCGTTA"  # DNA 염기서열

g = dna.count("G")  # G 개수
c = dna.count("C")  # C 개수
gc = (g + c) / len(dna) * 100  # GC 함량 백분율

print("GC 함량 =", gc, "%")
한 줄씩 코드 상세 설명
1. G와 C의 개수를 각각 셉니다.
2. g + c: GC 염기의 총개수입니다.
3. len(dna): 전체 염기 수입니다.
4. 비율에 100을 곱해 백분율로 만듭니다.
5. GC 함량을 출력합니다.

19. 생존율

생존율은 처음 개체 중 살아남은 개체의 비율입니다.

start = 200  # 처음 개체 수
survived = 150  # 살아남은 개체 수

survival_rate = survived / start * 100  # 생존율 계산

print("생존율 =", survival_rate, "%")
한 줄씩 코드 상세 설명
1. start: 처음 개체 수입니다.
2. survived: 살아남은 개체 수입니다.
3. survived / start: 생존 비율입니다.
4. 100을 곱해 퍼센트로 나타냅니다.
5. 생존율을 출력합니다.

20. 광합성 산물 계산

광합성은 빛을 이용해 이산화탄소와 물로 포도당을 만드는 과정입니다.

co2 = 6  # 이산화탄소 분자 수
water = 6  # 물 분자 수

if co2 >= 6 and water >= 6:
    glucose = min(co2 // 6, water // 6)  # 만들 수 있는 포도당 분자 수
    print("포도당 생성 가능:", glucose, "개")
else:
    print("재료 부족")
한 줄씩 코드 상세 설명
1. co2: 이산화탄소 개수입니다.
2. water: 물 개수입니다.
3. 포도당 1개에는 CO2 6개와 물 6개가 필요하다고 단순화합니다.
4. //는 만들 수 있는 묶음 수를 계산합니다.
5. min(): 부족한 재료를 기준으로 생성량을 정합니다.

2. OX 개념 퀴즈 10개

1. DNA는 A, T, G, C 네 종류의 염기로 이루어진다.
정답: O
2. DNA에서 A는 G와 상보적으로 결합한다.
정답: X
3. RNA에서는 T 대신 U가 사용된다.
정답: O
4. 코돈은 보통 염기 3개로 이루어진다.
정답: O
5. 세포 분열을 한 번 하면 세포 수가 항상 3배가 된다고 단순화한다.
정답: X
6. 개체군은 출생과 사망에 의해 변할 수 있다.
정답: O
7. 먹이사슬에서 에너지는 다음 단계로 100% 모두 전달된다.
정답: X
8. 항상성은 몸속 환경을 일정하게 유지하려는 성질이다.
정답: O
9. GC 함량은 DNA에서 G와 C가 차지하는 비율이다.
정답: O
10. 생존율은 살아남은 개체 수를 처음 개체 수로 나누어 구할 수 있다.
정답: O

3. 5지선다형 문제 10개

1. DNA의 염기가 아닌 것은?
① A ② T ③ G ④ C ⑤ U
정답: ⑤ U
2. DNA에서 A와 상보적으로 결합하는 염기는?
① A ② T ③ G ④ C ⑤ U
정답: ② T
3. RNA 전사에서 DNA의 T는 무엇으로 바뀌는가?
① A ② T ③ G ④ C ⑤ U
정답: ⑤ U
4. 코돈은 보통 몇 개의 염기로 이루어지는가?
① 1개 ② 2개 ③ 3개 ④ 4개 ⑤ 5개
정답: ③ 3개
5. Aa와 Aa의 교배에서 가능한 자손 유전자형으로 알맞지 않은 것은?
① AA ② Aa ③ aA ④ aa ⑤ GG
정답: ⑤ GG
6. 개체군 변화를 계산하는 기본 식으로 가장 알맞은 것은?
① 처음 개체 수 + 출생 - 사망 ② 처음 개체 수 - 출생 - 사망 ③ 출생 ÷ 사망 ④ 사망 ÷ 출생 ⑤ 처음 개체 수 × 0
정답: ① 처음 개체 수 + 출생 - 사망
7. 먹이사슬 에너지 전달에서 일반적으로 다음 단계로 전달되는 에너지는?
① 전부 ② 일부 ③ 항상 0 ④ 항상 50배 ⑤ 무한대
정답: ② 일부
8. 혈당이 높을 때 분비가 증가하는 호르몬은?
① 인슐린 ② 글루카곤 ③ 아드레날린 ④ 멜라토닌 ⑤ 티록신
정답: ① 인슐린
9. GC 함량 계산에 필요한 염기는?
① A와 T ② A와 G ③ G와 C ④ T와 U ⑤ A와 U
정답: ③ G와 C
10. 생존율 공식으로 알맞은 것은?
① 처음 개체 수 ÷ 살아남은 개체 수 × 100 ② 살아남은 개체 수 ÷ 처음 개체 수 × 100 ③ 죽은 개체 수 × 처음 개체 수 ④ 출생 수 ÷ 사망 수 ⑤ GC ÷ AT
정답: ② 살아남은 개체 수 ÷ 처음 개체 수 × 100

4. 수업 정리

생물학 개념도 파이썬으로 간단히 모의실험할 수 있습니다.

핵심 코드 패턴
· DNA 염기 개수: dna.count("A")
· RNA 전사: T → U
· 코돈 나누기: range(0, len(rna), 3)
· 개체군 변화: population + birth - death
· 생존율: survived / start * 100