Advertisement
sconetto

Python - Mutação

Oct 30th, 2017
119
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.89 KB | None | 0 0
  1. # Importando a biblioteca sys para uso de funcoes do sistema
  2. import sys
  3.  
  4. # Definindo uma funcao invertBit que ira fazer a invercao na mutacao
  5. # parametros:
  6. #   pos - posicao da mutacao
  7. #   array - vetor com a sequencia de bits
  8. # retorno:
  9. #   array - vetor com a sequencia de bits com a mutacao
  10. def invertBit(pos, array):
  11.     # Se na posicao do array o valor for 1
  12.     if array[pos] == '1':
  13.         # Uso uma lista auxiliar (cada posicao do meu array vai ser
  14.         # um valor da minha lista)
  15.         aux = list(array)
  16.         # Inverto o valor naquela posicao
  17.         aux[pos] = '0'
  18.         # Remonto o meu array a partir da lista auxiliar
  19.         array = "".join(aux)
  20.     # Se na posicao do array o valor for 0
  21.     elif array[pos] == '0':
  22.         aux = list(array)
  23.         aux[pos] = '1'
  24.         array = "".join(aux)
  25.     # Retorno meu vetor com a mutacao
  26.     return array
  27.  
  28. # Funcao principal de execucao
  29. def main():
  30.     # Leio do usuarios os dados para o cruzamento e a mutacao
  31.     print('Indique qual a posicao do ponto de cruzamento: ')
  32.     ptCruzamento = input()
  33.     print('Digite a primeira sequencia: ')
  34.     primeiraSeq = raw_input()
  35.     print('Digite a segunda sequencia: ')
  36.     segundaSeq = raw_input()
  37.     print('Digite a posicao da mutacao: ')
  38.     posMut = input()
  39.  
  40.     # Decremento o valor lido pois a maquina trabalha com o indice de 0 ate n
  41.     # e nao de 1 ate n
  42.     posMut -= 1
  43.  
  44.     # Verifico se do comeco do vetor ate a posicao do cruzamento as
  45.     # sequencias sao iguais
  46.     if primeiraSeq[0:ptCruzamento] == segundaSeq[0:ptCruzamento]:
  47.         # Caso sejam iguais eu faco o cruzamento, ou seja, comeco da primeira
  48.         # sequencia mais o final da segunda sequencia e comeco da segunda
  49.         # sequencia mais o final da primeira sequencia
  50.         primeiroCruzamento = primeiraSeq[0:ptCruzamento] + segundaSeq[ptCruzamento:(len(segundaSeq))]
  51.         segundoCruzamento = segundaSeq[0:ptCruzamento] + primeiraSeq[ptCruzamento:(len(primeiraSeq))]
  52.     else:
  53.         # Caso nao seja, imprime uma mensagem de erro no console e no sistema
  54.         # fechando a execucao
  55.         print('As sequencias nao sao iguais ate o ponto de cruzamento')
  56.         sys.exit("Erro: sequencia nao satisfatoria")
  57.  
  58.     # Imprimo o resultado sem a mutacao
  59.     print('Resultado do primeiro cruzamento (sem a mutacao): ' + primeiroCruzamento)
  60.     print('Resultado do segundo cruzamento (sem a mutacao): ' + segundoCruzamento)
  61.  
  62.     # Faco a mutacao invertendo os bits
  63.     primeiroCruzamento = invertBit(posMut, primeiroCruzamento)
  64.     segundoCruzamento = invertBit(posMut, segundoCruzamento)
  65.  
  66.     # Imprimo o resultado com a mutacao
  67.     print('Resultado do primeiro cruzamento (com a mutacao): ' + primeiroCruzamento)
  68.     print('Resultado do segundo cruzamento (com a mutacao): ' + segundoCruzamento)
  69.  
  70. # Define na execucao do script a execucao da funcao main
  71. if __name__ == '__main__':
  72.     main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement