Language/Python

[ Python ] 멘델의 유전 법칙 시뮬레이션 프로그램

곽수진 2021. 9. 3. 23:29
반응형
무작위로 완두콩 RR, Rr, rR, rr을 생성시켜 둥근 완두콩과 주름진 완두콩의 비율이 3:1임을 시뮬레이션하는 프로그램을 작성해보자.

 

import random

descendant = []

def make_descendant():
    h1 = random.randrange(0,2)
    h2 = random.randrange(0,2)

    if h1 == 0 and h2 == 0:
        h = 'RR'
    elif h1 == 0 and h2 == 1:
        h = 'Rr'
    elif h1 == 1 and h2 == 0:
        h = 'rR'
    else:
        h = 'rr'

    descendant.append(h)

def count_descendant(d):
    d_dict = {}
    for n in d:
        if n in d_dict:
            d_dict[n] += 1
        else:
            d_dict[n] = 1
    print(d_dict)
    cal_rate(d_dict)

def cal_rate(d):
    rate = (d['RR']+d['Rr']+d['rR'])/d['rr']
    print(rate,":1")

for n in range(100):
    make_descendant()

count_descendant(descendant)

descendant = [] : descendant라는 빈 리스트 저장

 

def make_descendant():
    h1 = random.randrange(0,2)
    h2 = random.randrange(0,2)

    if h1 == 0 and h2 == 0:
        h = 'RR'
    elif h1 == 0 and h2 == 1:
        h = 'Rr'
    elif h1 == 1 and h2 == 0:
        h = 'rR'
    else:
        h = 'rr'

    descendant.append(h)

 make_descendant() 사용자 정의 함수 생성

 random.randrange(0,2) : h1과 h2 변수에 0과 1 중 하나의 랜덤값 지정

0은 R, 1은 r로 바꿔 'RR', 'Rr', 'rR', 'rr' 생성

→ descendant 리스트에 h값을 저장

 

def count_descendant(d):
    d_dict = {}
    for n in d:
        if n in d_dict:
            d_dict[n] += 1
        else:
            d_dict[n] = 1
    print(d_dict)
    cal_rate(d_dict)

count_descendant() 사용자 정의 함수 생성

d_dict = {} : d_dict라는 빈 딕셔너리 생성

→ descendant 리스트를 전달받아 리스트에 있는 유전 형질 RR, Rr, rR, rr에 따른 개수를 세어 d_dict 딕셔너리에 저장

→ 외형에 따른 비율을 계산하는 cal_rate(d_dict)를 count_descendant() 함수에 호출

 

def cal_rate(d):
    rate = (d['RR']+d['Rr']+d['rR'])/d['rr']
    print(rate,":1")

for n in range(100):
    make_descendant()

cal_rate() 사용자 정의 함수 생성

→ 유전 형질 RR, Rr, rR, rr에 따른 빈도를 저장하고 있는 d_dict 딕셔너리를 매개변수로 받아 둥근 완두콩과 주름진 완두콩의 비율 계산

 

 

결과값 출력 모습

 

결과값 출력 모습

 

반응형