Skip to content

Instantly share code, notes, and snippets.

@johannchopin
Last active November 4, 2017 17:42
Show Gist options
  • Save johannchopin/82d1a2c652026600f806cb2b79e155eb to your computer and use it in GitHub Desktop.
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
@johannchopin
Copy link
Author

Je ne suis pas sûr que ce "compteur" va vous plaire mais je trouvais cette technique assez intuitif ;)

@laowantong
Copy link

Effectivement, je ne comprends pas trop à la première lecture.

  • Déjà à la place de la chaîne "nothing" tu devrais utiliser None, cette valeur spéciale est faite pour ça.
  • En gros tu voudrais une espèce de logique tri-valuée, True, False et None? Ç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.

@johannchopin
Copy link
Author

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 ? :)

@laowantong
Copy link

Je recommenterai quand tu auras restructuré 😃

@johannchopin
Copy link
Author

Hehe voilà un code qui passe tous les tests mais qui ne va pas vous plaire :)

@laowantong
Copy link

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).

@laowantong
Copy link

PS: ton programme échoue sur au moins un des nouveaux tests.

@johannchopin
Copy link
Author

Et le voilà qui passe tous les tests et cela sans le "compteur" qui vous a arraché les yeux :)

@laowantong
Copy link

Version très claire, et que je préfère même à la mienne (cf. commentaires du code d'Alexandre). Bravo!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment