Bonjour,

Voici un exercice que j'ai trouvé dans le livre "Python au Lycée" d'Arnaud Bodin chez exo7 :
Un crime est commis. Il y a 4 suspects. La police scientifique a recueilli les ADN de chacun d'eux et, sur le cadavre, deux bouts de code qui, disent-ils, sont éloignés dans la séquence ADN (je ne sais pas comment ils ont fait mais, ce sont de super scientifiques alors j'ai confiance).
Moi, en tant qu'enquêteur, je dois trouver le coupable avec tout ça.

Code 1 : CATA
Code 2 : ATGC
ADN du colonel Moutarde :
CCTGGAGGGTGGCCCCACCGGCCGAGACAGCGAGCATATGCAGGAAGCGGCAGGAATAAGGAAAAGCAGC
ADN de Mlle Rose :
CTCCTGATGCTCCTCGCTTGGTGGTTTGAGTGGACCTCCCAGGCCAGTGCCGGGCCCCTCATAGGAGAGG
ADN de Mme Pervenche :
AAGCTCGGGAGGTGGCCAGGCGGCAGGAAGGCGCACCCCCCCAGTACTCCGCGCGCCGGGACAGAATGCC
ADN de M. Leblanc :
CTGCAGGAACTTCTTCTGGAAGTACTTCTCCTCCTGCAAATAAAACCTCACCCATGAATGCTCACGCAAG


J'ai fait un code qui fonctionne, mais c'est une usine à gaz je trouve ; et s'il y avait 100 suspects par exemple, qu'est-ce que ce code prendrait comme place pour un si petit problème !

Voici mon code :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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")
Je suis sûr que quelqu'un a une solution toute simple, évidente et déprimante qui me fera rougir de honte à l'idée de vous avoir dérangé pour si peu. Mais tant-pis, j'y ai passé trop de temps !

Merci d'avance...