Ce comportement est correct puisque vous vérifiez les caractères majuscules contre les minuscules. Après seqDNA = seqDNA.upper()
, votre chaîne contient majuscule caractères. Par exemple:
seqDNA = 'UGCGGCGAATATTT'
Si nous itérez avec for c in seqDNA
, c
contiendra un caractère majuscule (à savoir 'C'
). Maintenant, si vous comparez c == 'C'
, vous comparez 'c' == 'C'
, et ceux-ci sont pas égale.
Vous devez modifier les tests pour:
seqDNA = input()
seqDNA = seqDNA.upper()
comp = ''
for c in seqDNA:
if c == 'A':
comp = comp + 'u'
elif c == 'T':
comp = comp + 'a'
elif c == 'G':
comp = comp + 'c'
elif c == 'C':
comp = comp + 'g'
print(comp)
Cela dit, votre code fonctionne inefficace: tout d'abord la séquence de déclarations elif
est cher, et de plus vous effectuez une opération comp = comp + 'u'
. L'ajout de chaîne s'exécute en O (n), rendant cet algorithme O().
Nous pouvons l'améliorer par en utilisant un dictionnaire, et ** utiliser ''.join(..)
en ajoutant manuellement.
seqDNA = input()
seqDNA = seqDNA.upper()
trans = { 'A': 'u', 'T': 'a', 'G': 'c', 'C': 'g' } comp = ''.join(trans[c] for c in seqDNA)
print(comp)
Cela soulèvera un KeyError
au cas où le seqDNA
contient un caractère autre que 'A'
, 'T'
, 'G'
et 'C'
. Ce qui me semble être un comportement raisonnable. Si vous voulez simplement ne pas tenir compte ces caractères, vous pouvez utiliser .get(..,'')
sur [c]
:
seqDNA = input()
seqDNA = seqDNA.upper()
trans = {
'A': 'u',
'T': 'a',
'G': 'c',
'C': 'g'
}
comp = ''.join(trans.get(c,'') for c in seqDNA)
print(comp)
Que voulez-vous dire avec * deuxième ligne *? 'seqDNA = seqDNA.upper()'? –