-
-
Save johannchopin/82d1a2c652026600f806cb2b79e155eb to your computer and use it in GitHub Desktop.
LOWER_CASE_TO_CAPITAL = ord('a') - ord('A') | |
def my_title(title): | |
acc = "" | |
previous_letter = "" | |
for letter in title: | |
if ("a" <= letter <= "z") and not("a" <= previous_letter <= "z") and not("A" <= previous_letter <= "Z"): | |
letter = chr(ord(letter) - LOWER_CASE_TO_CAPITAL) | |
previous_letter = letter | |
acc += letter | |
return acc |
Première révision avant de revoir entièrement sa structure. Je ne sais pas si ça le rend plus claire mais la logique y est non ? :)
Je recommenterai quand tu auras restructuré 😃
Hehe voilà un code qui passe tous les tests mais qui ne va pas vous plaire :)
Déjà, bravo d'avoir passé tous les tests, y compris les nouveaux !
Ceci dit, en effet, ton code ne me plaît pas vraiment, pour deux raisons:
- Il contient plusieurs maladresses d'expression, qui peuvent facilement se simplifier. Par exemple la ligne 11 devrait s'écrire:
if not "a" <= letter <= "z":
J'ai fait plusieurs simplifications de ce type dans ton code (y compris dans les structures de contrôle), pour obtenir un code strictement équivalent, et qui ne contient plus que deux expressions booléennes (ce qui est optimal) mais:
- Il y a toujours ce
counter
de logique tri-valuée dont la sémantique n'est pas claire (et je ne suis pas sûr qu'elle le soit pour toi).
PS: ton programme échoue sur au moins un des nouveaux tests.
Et le voilà qui passe tous les tests et cela sans le "compteur" qui vous a arraché les yeux :)
Version très claire, et que je préfère même à la mienne (cf. commentaires du code d'Alexandre). Bravo!
Effectivement, je ne comprends pas trop à la première lecture.
"nothing"
tu devrais utiliserNone
, cette valeur spéciale est faite pour ça.True
,False
etNone
? Ça existe en SQL, mais ici j'ai un doute.i
que dans ton autre programme.LOWERCASE_TO_CAPITAL
pourrait être calculé.En tout cas, la logique de ton programme est difficile à suivre. J'avoue que je ne comprends pas ta technique. Comparer deux fois
i
à" "
est certainement une maladresse. Répéter les lignes 10-11 en lignes 17-18 également. Donc même si ton programme marche tu devrais profondément revoir sa structure. Tu peux réfléchir en étant guidé par les résultats: quels sont les différents traitements possibles pour un caractère (modifications dei
et decounter
, mauvais noms, mais bon)? Une fois que tu les as identifiés, tu énumères les conditions qui y mènent. Enfin, tu les structures en conditionnelles de façon à éviter les répétitions.