42 * 2 Mono-lignes en python
- Aristide Grange
Les mono-lignes sont des petits exercices que l'on doit à Aristide Grange. Ils permettent de se creuser un peu la tête pour écrire de façon condensé du code python. J'ai modifié le sujet initial pour qu'il puisse être fait avec une version actuelle de python (il a été fait en 2005 pour une version 2 de python) et ai supprimé quelques questions, en particulier les questions relatives aux fichiers que l'on a pas encore vu.
Sujet initial et modifications à apporter si vous voulez le faire une version actuelle de python
Sujet initial et modifications à apporter si vous voulez le faire une version actuelle de python
Ce sujet initial montre aussi en creux les évolutions de python :
- la fonction
printprend des parenthèses, - les f-string sont apparues,
chretordsont des code unicode maintenant- la fonction
raw_inputa disparu, inputn'évalue plus automatiquement les entrées,rangene rend plus une liste mais un itérateur,- la division de deux entiers rend un flottant par défaut,
- le 27e nombre de Mersenne n'est plus affichable directement car il le nombre de chiffres d'un entier est maintenant capé. Pour le calculer, il faut augmenter le nombre maximum de chiffre d'un entier de l'interpréteur.
Augmenter le nombre de chiffres maximum d'un entier :
import sys
sys.set_int_max_str_digits(15000)
Toutes les réponses tiennent en 1 seule ligne de python. À vous de les trouver !
Dans la vraie vie on préférera toujours du code explicite et facile à lire plutôt que du code compact, mais cela reste un très bon exercice pour comprendre comment fonctionne un langage informatique en général et python en particulier.
Sujet
On en a déjà vu quelques-une pendant ce cours, à vous de les retrouver.
- Évaluer le nombre d’atomes de l’univers : 1080
- Affecter le 23e nombre premier de Mersenne ($2^{11213}-1$) à une variable
m23. - Incrémenter
m23. - Décrémenter
m23(on retrouve le 23e nombre de Mersenne) - Évaluer 1000/7.
- Évaluer ⌊1000/7⌋.
- Évaluer 1000 mod 7.
- Évaluer en une seule expression le quotient entier et le reste de 1000/7.
- Affecter en une seule instruction le quotient entier et le reste de 1000/7 à deux variables
qetr. - Affecter à une variable
cle couple formé deqetr. - Faire les deux exercices précédents en une seule instruction.
- Échanger le contenu des deux variables
qetr. - Demander à l’utilisateur son âge et affecter le résultat à une variable
a. - Demander à l’utilisateur la différence entre son année de naissance et celle de son voisin, et affecter la valeur absolue à une variable
d. - Évaluer le nombre de chiffres de
m23. - Quel est le millième chiffre de
m23? - Quels sont les dix premiers chiffres de
m23? - Quel est le dernier chiffre de
m23(sans utiliser son nombre de chiffres) ? - Quel est le dernier chiffre de
m23(utiliser explicitement son nombre de chiffres) ? - Quels sont les dix derniers chiffres de
m23? - La séquence 123 apparaît-elle dans
m23? - À quelle position apparaît 1234 dans
m23? - Combien
m23contient-il de 7 ? - Remplacer tous les 2 par des 7 dans
m23(expression). - Permuter tous les 2 et les 7 dans
m23(expression). - Demander à l’utilisateur son prénom et affecter celui-ci à une variable p.
- Demander à l’utilisateur son nom complet (prénom puis nom) et affecter celui-ci à une variable nc.
- Demander à l’utilisateur son nom complet et affecter ses prénom et nom à deux variables
petn(on suppose que l’utilisateur à un nom sans espaces). - Demander à l’utilisateur son nom complet et affecter ses prénom et nom à deux variables
petn(l’utilisateur peut être noble ou plus généralement avoir un nom à plusieurs mots). - L’utilisateur a-t-il bien mis une majuscule à ses prénom et nom ?
- Afficher les prénom (initiale en majuscule) et nom (tout en majuscules).
- Affecter le résultat à une variable nc.
- Afficher « Bonsoir, Prénom NOM !, comment allez-vous ? » en substituant nc à la partie en italiques.
- Afficher « Bonsoir, Prénom NOM !, comment allez-vous ? » en substituant p et n aux parties en italiques.
- Quel est le caractère de code Unicode 126 ?
- Quel intervalle existe-t-il dans la table Unicode entre une majuscule et la minuscule correspondante d'une lettre de l'alphabet ?
- Reproduire les trois lignes ci-dessous (tabulations pour séparer les colonnes) :
20 a
100 b
32 \
- Calculer 14 répétitions de
"Developers ! ". - Calculer 14 répétitions de
"Developers ! "en supprimant l’espace final. - Utiliser la fonction
helppour afficher la documentation de la fonctionrange. - Calculer la liste $[0, 1, 2,\dots ,99]$.
- Calculer la liste $[1,2,3,\dots, 100]$.
- Calculer la liste $[1,3,5,\dots,99]$.
- Calculer la liste [100,99,98,...,1].
- Calculer $\sum_{i=1}^{100}i$.
- Affecter à une variable
lla liste $[-5, -3, -1, 1, 3, 1, 5, 9, 13, 17, 9, 6, 3, 0]$ que vous obtiendrez par concaténation de trois listes issues derangeà déterminer. - Calculer 20 répétitions de
l. - Évaluer le minimum, le maximum et la moyenne des éléments de
l. - Affecter à une variable
lmune copie del. - Supprimer le dernier élément de
lm. - Calculer le nombre de 1 de
lm. - Calculer l’indice du plus grand élément de
lm. - Supprimer le premier 1 de
lm. - Insérer la liste
["a","b","c"]après le 3e élément delm. - Supprimer cette insertion.
- Trier
lm. - Inverser
lm. - Ajouter la chaîne "fin" au bout de lm.
- Affecter à une variable
el’ensemble des éléments del. - Calculer la différence de
ed’avec l’ensemble $\{−5, 0, 5, \dots, 20\}$.\ - Retirer 13 de e.
- Ajouter "treize" à e.
- Affecter à une variable
reple répertoire téléphonique suivant : – Le numéro de Jean est 03 87 65 45 67 ; – le numéro de Pierre est 03 87 31 55 21 ; – le numéro de Michel est 03 87 12 23 52. - Quel est le numéro de Jean ?
- Modifier le numéro de Michel en 03 84 35 21 00.
- Ajouter au répertoire Paul, de numéro 03 87 24 56 79.
- Albert est-il répertorié ?
- Afficher les noms des personnes répertoriées.
- Afficher les numéros des personnes répertoriées.
- Affecter à une liste
lcles couples (nom, numéro) des personnes répertoriées. - Trier
lcpar ordre alphabétique décroissant des noms. - Supprimer Paul du répertoire.
- Supprimer un élément arbitraire du répertoire tout en renvoyant sa valeur.
- Calculer la liste des inverses des entiers naturels positifs inférieurs à 10.
- Même question pour une borne supérieure saisie par l’utilisateur.
- Afficher la liste des grains de blé à placer sur l’échiquier de Sissa.
- Évaluer le nombre total de grains de blé à placer.
- Concaténer dans l’ordre tous les caractères de codes Unicode entre 32 et 126.
- Calculer la liste des diviseurs de $170170$.
- $[[], [0], [0,1], [0,1,2], \dots, [0,1,2,...,99]]$.
- Calculer la liste $[[1], [1,2], [1,2,3], \dots, [1,2,3,...,100]]$.
- Calculer la liste $[\sum_{i=1}^{1}i, \sum_{i=1}^{2}i, \sum_{i=1}^{3}i, \dots, \sum_{i=1}^{100}i]$ (s’aider de l’exercice 45).
- Calculer l'ensemble $\{ i * j \vert 1 \leq i, j\leq 10 \}$.
- Calculer une liste de listes contenant les tables de Pythagore de 1 à 10.
Corrigé
corrigé
corrigé
print(pow(10, 80))
m23 = pow(2, 11213) - 1
m23 += 1
m23 -= 1
print(1000 / 7)
print(1000 // 7)
print(1000 % 7)
print(divmod(1000, 7))
q, r = divmod(1000, 7)
c = (q, r)
c = (q, r) = divmod(1000, 7)
q, r = r, q
a = int(input("Votre age ? :"))
d = abs(int(input("Différence de vos années de naissance ? :")))
print(len(str(m23)))
print(str(m23)[999])
print(str(m23)[:10])
print(str(m23)[-1])
print(str(m23)[len(str(m23))-1])
print(str(m23)[-10:])
print("123" in str(m23))
print(str(m23).index("1234"))
print(str(m23).count("7"))
print(str(m23).replace("2", "7"))
print(str(m23).replace("2", "x").replace("7", "2").replace("x", "7"))
p = input("Votre prénom ? :")
nc = input("Votre nom complet ? :")
p, n = input("Votre nom complet ? :").split()
p, n = input("Votre nom complet ? :").split(' ', 1)
print(p[0].isupper() and n[0].isupper())
print(p.title(), n.upper())
nc = p.title() + " " + n.upper()
print(f"Bonsoir, {nc} !, comment allez-vous ?")
print(f"Bonsoir, {p} {n} !, comment allez-vous ?")
print(chr(126))
print(ord('a') - ord('A'))
print("20\ta\n100\tb\n32\t\\")
print("Developers ! " * 14)
print(("Developers ! " * 14)[:-1])
help(range)
print(list(range(100)))
print(list(range(1, 101)))
print(list(range(1, 100, 2)))
print(list(range(100, 0, -1)))
print(sum(range(1, 101)))
l = list(range(-5, 5, 2)) + list(range(1, 20, 4)) + list(range(9, -1, -3))
print(l * 20)
print(min(l), max(l), sum(l)/len(l))
lm = l[:]
del lm[-1]
print(lm.count(1))
print(lm.index(max(lm)))
lm.remove(1)
lm[3:3] = ["a","b","c"]
del lm[3:6]
lm.sort()
lm.reverse()
lm.append("fin")
e = set(l)
print(e- set(range(-5, 21, 5)))
e.remove(13)
e.add("treize")
rep = {"Jean": "03 87 65 45 67", "Pierre": "03 87 31 55 21", "Michel": "03 87 12 23 52"}
print(rep["Jean"])
rep["Michel"] = "03 84 35 21 00"
rep["Paul"] = "03 87 24 56 79"
print("Albert" in rep)
print(list(rep.keys()))
print(list(rep.values()))
lc = list(rep.items())
lc.sort(reverse=True)
del rep["Paul"]
print(rep.popitem())
print([1/n for n in range(1, 11)])
print([1/n for n in range(1, int(input("borne sup :")))])
print([2 ** i for i in range(64)])
print(sum([2 ** i for i in range(64)]))
print("".join([chr(x) for x in range(32, 127)]))
print([x for x in range(1, 170171) if 170170 % x == 0])
print([list(range(i)) for i in range(101)])
print([list(range(1, i)) for i in range(2, 102)])
print([sum(range(1, i)) for i in range(2, 102)])
print({i * j for i in range(1, 11) for j in range(1, 11)})
print([[i * j for i in range(1, 11)] for j in range(1, 11)])