1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118
|
def position(code, sequence):
"""
Tests if a sequence contains a given code and returns the
position of the first occurrence.
Input: a code and a DNA sequence
Output: the position of the beginning of the found code;
None if does not appear
Example: Position ("CCG", "CTCCGTT") returns 2
"""
if code in sequence:
for i in range(len(sequence)-len(code)):
if sequence[i] == code[0]:
code_in_sequence = sequence[i : i+len(code)]
# TEST print("V_", code_in_sequence)
if code_in_sequence == code:
return i
#============ CLUEDO ==========================
# Les ADN :
Moutarde = "CCTGGAGGGTGGCCCCACCGGCCGAGACAGCGAGCATATGCAGGAAGCGGCAGGAATAAGGAAAAGCAGC"
Rose = "CTCCTGATGCTCCTCGCTTGGTGGTTTGAGTGGACCTCCCAGGCCAGTGCCGGGCCCCTCATAGGAGAGG"
Pervenche = "AAGCTCGGGAGGTGGCCAGGCGGCAGGAAGGCGCACCCCCCCAGTACTCCGCGCGCCGGGACAGAATGCC"
Leblanc = "CTGCAGGAACTTCTTCTGGAAGTACTTCTCCTCCTGCAAATAAAACCTCACCCATGAATGCTCACGCAAG"
# Les codes :
code1 = "CATA"
code2 = "ATGC"
# Les suspects :
suspects = [Moutarde, Rose, Pervenche, Leblanc]
# Liste dans laquelle se trouvent les éloignements entre les deux
# "codes coupables" de chacun des intéressés.
# Si un suspect n'a pas l'un de ces codes, son éloignement sera égal à 0
eloignements = []
#===============================
#===============================
# Cette partie du programme trouve les ADN qui possèdent les 2 codes en passant en
# revue chacun des suspects. Si la fonction position() renvoie 'None' pour
# code1, le suspect a son éloignement égal à 0, sinon on passe au code 2 et
# on fait la même chose que pour code1.
# Si les 2 codes sont dans la séquence ADN du suspect, alors, leur éloignement
# est entré dans la liste 'eloignements'.
for i in range(len(suspects)-1):
resultat1 = position(code1, suspects[i])
if resultat1 != None:
resultat2 = position(code2, suspects[i])
if resultat2 != None:
if i == 0:
eloignementMoutarde = abs(resultat2 - resultat1)
fiche = eloignementMoutarde
elif i == 1:
eloignementRose = abs(resultat2 - resultat1)
fiche = eloignementRose
elif i == 2:
eloignementPervenche = abs(resultat2 - resultat1)
fiche = eloignementPervenche
elif i == 3:
eloignementLeblanc = abs(resultat2 - resultat1)
fiche = eloignementLeblanc
eloignements.append(fiche)
else:
if i == 0:
eloignementMoutarde = 0
fiche = eloignementMoutarde
elif i == 1:
eloignementRose = 0
fiche = eloignementRose
elif i == 2:
eloignementPervenche = 0
fiche = eloignementPervenche
elif i == 3:
eloignementLeblanc = 0
fiche = eloignementLeblanc
eloignements.append(fiche)
else:
if i == 0:
eloignementMoutarde = 0
fiche = eloignementMoutarde
elif i == 1:
eloignementRose = 0
fiche = eloignementRose
elif i == 2:
eloignementPervenche = 0
fiche = eloignementPervenche
elif i == 3:
eloignementLeblanc = 0
fiche = eloignementLeblanc
eloignements.append(fiche)
# Recherche de l'éloignement maxi qui désignera la/le coupable
Max = max(eloignements)
# Renvoi de la sentence
if eloignementMoutarde == Max:
print("Le colonel Moutarde est le coupable")
elif eloignementRose == Max:
print("Mlle Rose est la coupable")
elif eloignementPervenche == Max:
print("Mme Pervenche est la coupable")
elif eloignementLeblanc == Max:
print("Mr Leblanc est le coupable") |
Partager