2017-12-07 5 views
1

바이러스는 뉴클레오티드 문자열로 간주되며 함수는 동일한 양의 뉴클레오티드로 구성된 문자열을 반환해야하지만 하나는 변경됩니다.문자열의 임의 값을 임의 값으로 바꿉니다.

def mutate(virus): 
    mutations = ['A', 'T', 'C', 'G'] 
    virus.split 
    random.randrange(1, stop=len(virus), step=1) = random.choice(mutations) 

그래서 바이러스가 내가 이것에 대해 갈 수있는 방법은 ATCC 또는 GTCG 뭔가를 반환해야 ATCG 경우 예를 들어, 나는 목록에 바이러스를 만들고, 그리고 무작위로에 임의의 변수를 교체 시도 내 가능한 돌연변이 목록.

그래서 문자열 바이러스 목록을 만들어야하고, 돌연변이를 만들고, 목록을 다시 문자열에 넣고 문자열을 반환해야합니다.

+0

출력? 이것도 무작위인가요? – scharette

+0

이것이 유전자 알고리즘의 일부이고 여러 번 반복 될 경우 문자열 대신 목록을 사용하는 것을 고려하십시오. – ayhan

답변

0

당신은하고 임의의 값으로 대체하기 위해 임의의 인덱스를 생성 할 수 있습니다

import random 
def mutate(virus): 
    mutations = ['A', 'T', 'C', 'G'] 
    i = random.randint(0, len(virus)-1) 
    val = random.choice(mutations) 
    return ''.join(val if c == i else a for c, a in enumerate(virus)) 
+0

명시 적 루프 대신 범위/슬라이스 구문을 사용할 수 있습니까? '바이러스 [: i] + val + 바이러스 [1 + i :]' – user268396

1

당신은 STH 할 수 있습니다. 다음과 같이 :

def mutate(virus): 
    # choose random index to change 
    index = random.randint(0, len(virus) - 1) 

    # make sure you are not using the previous char by removing it from 
    # the mutations to choose from 
    mutations = [c for c in 'ATCG' if c != virus[index]] 

    # swap out the char at index with a random mutation 
    return virus[:index] + random.choice(mutations) + virus[index+1:] 
+0

헤이 맨, 색인을 i로 변경했습니다. 이제 작동합니다! 나는 너를 사랑해, 너의 코드를 조금 설명 할 수 있니? 네가 목록 조각을 사용한 것을 본다. –

+0

@RubenWeijers 아니요, 문자열의 조각입니다. – schwobaseggl

0

당신은 같은 것을 할 수 있습니다 : 문자열 이후

import random 
def mutate(virus): 
    mutations = ['A', 'T', 'C', 'G'] 
    r = random.randint(0, len(virus)-1) 
    virus = list(virus) 
    virus[r] = random.choice(mutations) 
    return ''.join(virus) 
0

는 불변, 나는 목록 대신 문자열로 작업 추천 할 것입니다. 가독성은 제 의견으로는 증가 할 것입니다.

import random 
def mutate(virus): 
    mutations = ['A', 'T', 'C', 'G'] 
    virus = list(virus) 
    virus[random.randint(0, len(virus)-1)] = random.choice(mutations) 
    return "".join(virus) 

얼마나 많은 문자가 변경 될 해야하는

>>> print(mutate('ATCG')) 
ATCT 

>>> print(mutate('ATCG')) 
ATTG 

>>> print(mutate('ATCG')) 
ATCC