-
-
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 |
Effectivement, je ne comprends pas trop à la première lecture.
- Déjà à la place de la chaîne
"nothing"
tu devrais utiliserNone
, cette valeur spéciale est faite pour ça. - En gros tu voudrais une espèce de logique tri-valuée,
True
,False
etNone
? Ça existe en SQL, mais ici j'ai un doute. - Même remarque pour
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 de i
et de counter
, 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.
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!
Je ne suis pas sûr que ce "compteur" va vous plaire mais je trouvais cette technique assez intuitif ;)