2014-04-11 4 views
0

루프를 사용하여 비트 문자열을 변경하려고합니다 (아래 코드 참조). 입력 및 출력은 동일합니다. flipBit() 함수가 작동반복 문자열을 변형 할 수 없습니다.

bitstring = "100111001101010101010101" 
    print("old genome : " + bitstring) 
    for bit in bitstring: 

     if random.random() < 1: 
      print("old bit : " + bit) 
      bit = flipBit(bit) 
      print("new bit : " + bit) 


    bitstring= "".join(bitstring) 
    print("new genome : " + bitstring) 

이 나에게 (코드의 인쇄 문에) 내가 검사 한 출력

old genome = 100111001101010101010101 
new genome = 100111001101010101010101 

을 제공합니다. 그리고 그것은 솔기가 작동하고 ... 그러나, 입력 bitstring과 출력은 동일합니다.


내가 원하는 것은 확률을 낮추는 것입니다. 비트 중 일부만 돌연변이되도록

if random.random() < 0.05: 

. 파이썬에서

+1

은? – Selcuk

+0

죄송합니다, 오래된 var 이름으로 복사했습니다. –

답변

0

작업 구현 :

이 시도는 newGenome를 초기화 할

import random 

bitstring = "100111001101010101010101" 
print("old genome : " + bitstring) 
newGenome="".join(["10"[int(bit)] if random.random() < 0.05 else bit for bit in bitstring]) 
print("new genome : " + newGenome) 
1

, 문자열을 사용하면 다음을 수행 할 수 없음을 의미하는 불변 있습니다 : 위의 예에서

>> hello = "hello" 
>>> for letter in hello: 
    letter = 'a' 


>>> hello 
'hello' 

letter는 단순히 현재의 반복에서 문자의 값에 할당 된 새로운 식별자 단어 hello의 따라서 식별자로 원하는대로 할 수 있습니다. 즉 변경되지는 않습니다. hello. 문제는 여기에있다 즉

>>> new_word = [] 
>>> for letter in hello: 
    if letter == 'h': 
     new_word.append('a') 
    else: 
     new_word.append(letter) 


>>> print ''.join(new_word) 
aello 
+0

첫 번째 문장은 문자열이 iterable이 아니라는 것을 나타냅니다. 이것은 변경 가능한 개념과 다릅니다. – Kylotan

+0

@Kylotan iterator not iterable 미안하다. –

+0

문자열 hello가 불변이고, hello = list ("hello")'로 정의 된 경우 동일한 (즉, 아무 것도) 'hello'가되지 않는다. 두 번째 및 다음 문장은 올바른 것입니다. –

1

당신은 그것을 가입하기 전에 목록으로 문자열을 설정해야합니다

:

for bit in bitstring: 

    if random.random() < 1: 
     print("old bit : " + bit) 
     bit = flipBit(bit) 
     print("new bit : " + bit) 

당신이 수행 할 때

bit = flipBit(bit) 

당신은 bitstring의 비트를 변경하지 않고 다른 값 (에 의해 반환 된 값)을 지정합니다.)는 bit입니다. 여기, 삭제에 응답 한 후

muted_bitstring = "" 
for index, bit in enumerate(bitstring.spli()): 

    if random.random() < 1: 
     muted_bitstring += = flipBit(bit) 

bitstring = muted_bitstring 
관련 문제