Je trouve ce script qui fonctionne très bien et qui est en accord avec
(n²+n)/2 :
def addition(x):
return sum([i for i in range(0,x+1)])
print (addition(int(input('Fin de la sommielle '))))
Est-ce propre ?
Chercher la concision Í tout prix est-ce un bon pari ? Je suis de
l'ancienne école : j'ai commencé Í programmer avec un Sharp PC1211 qui
avait 1 KO de RAM. On apprenait Í compacter...
Le 22/05/2022 Í 17:00, Dominique a écrit : Inutile de passer par une composition de liste : def addition(x): return sum(range(x+1)) print (addition(int(input('Fin de la sommielle ')))) Difficile sans doute d'être plus concis...
Le 22/05/2022 Í 17:00, Dominique a écrit :
Inutile de passer par une composition de liste :
def addition(x):
return sum(range(x+1))
print (addition(int(input('Fin de la sommielle '))))
Le 22/05/2022 Í 17:00, Dominique a écrit : Inutile de passer par une composition de liste : def addition(x): return sum(range(x+1)) print (addition(int(input('Fin de la sommielle ')))) Difficile sans doute d'être plus concis...
Damien Wyart
* Dominique in fr.comp.lang.python:
Inutile de passer par une composition de liste : def addition(x): return sum(range(x+1)) print (addition(int(input('Fin de la sommielle ')))) Difficile sans doute d'être plus concis...
Je trouve qu'imbriquer tous les appels n'est pas très lisible ; je proposerais plutÍ´t : def sum_of_first_ints(n): return sum(range(n+1)) N = int(input("Please enter an integer: ")) print("The sum from 1 to", N, "is", sum_of_first_ints(N)) -- DW
* Dominique <zzz@aol.com.invalid> in fr.comp.lang.python:
Inutile de passer par une composition de liste :
def addition(x):
return sum(range(x+1))
print (addition(int(input('Fin de la sommielle '))))
Difficile sans doute d'être plus concis...
Je trouve qu'imbriquer tous les appels n'est pas très lisible ; je
proposerais plutÍ´t :
def sum_of_first_ints(n):
return sum(range(n+1))
N = int(input("Please enter an integer: "))
print("The sum from 1 to", N, "is", sum_of_first_ints(N))
Inutile de passer par une composition de liste : def addition(x): return sum(range(x+1)) print (addition(int(input('Fin de la sommielle ')))) Difficile sans doute d'être plus concis...
Je trouve qu'imbriquer tous les appels n'est pas très lisible ; je proposerais plutÍ´t : def sum_of_first_ints(n): return sum(range(n+1)) N = int(input("Please enter an integer: ")) print("The sum from 1 to", N, "is", sum_of_first_ints(N)) -- DW
Benoit Izac
Bonjour, Le 22/05/2022 Í 17:11, Dominique a écrit dans le message <t6djq7$1570$Â :
Inutile de passer par une composition de liste : def addition(x): return sum(range(x+1)) print (addition(int(input('Fin de la sommielle ')))) Difficile sans doute d'être plus concis...
Mais on peut faire mieux en terme d'algorithme : def accumulate_sum_of(n): return (n + 1) // 2 * (n + (n + 1) % 2) Ce qui fait du O(1) au lieu du O(n). -- Benoit Izac
Bonjour,
Le 22/05/2022 Í 17:11, Dominique a écrit dans le message
<t6djq7$1570$1@gioia.aioe.org>Â :
Inutile de passer par une composition de liste :
def addition(x):
return sum(range(x+1))
print (addition(int(input('Fin de la sommielle '))))
Bonjour, Le 22/05/2022 Í 17:11, Dominique a écrit dans le message <t6djq7$1570$Â :
Inutile de passer par une composition de liste : def addition(x): return sum(range(x+1)) print (addition(int(input('Fin de la sommielle ')))) Difficile sans doute d'être plus concis...
Mais on peut faire mieux en terme d'algorithme : def accumulate_sum_of(n): return (n + 1) // 2 * (n + (n + 1) % 2) Ce qui fait du O(1) au lieu du O(n). -- Benoit Izac
Alain Ketterlin
Benoit Izac writes:
Le 22/05/2022 Í 17:11, Dominique a écrit dans le message <t6djq7$1570$Â :
Inutile de passer par une composition de liste : def addition(x): return sum(range(x+1)) print (addition(int(input('Fin de la sommielle ')))) Difficile sans doute d'être plus concis...
Mais on peut faire mieux en terme d'algorithme : def accumulate_sum_of(n): return (n + 1) // 2 * (n + (n + 1) % 2)
Hmm, pourquoi pas simplement n * (n+1) // 2 ? (Ou (n+1)*(n+2)//2 si on veut la somme jusqu'Í n+1.) -- Alain.
Le 22/05/2022 Í 17:11, Dominique a écrit dans le message <t6djq7$1570$Â :
Inutile de passer par une composition de liste : def addition(x): return sum(range(x+1)) print (addition(int(input('Fin de la sommielle ')))) Difficile sans doute d'être plus concis...
Mais on peut faire mieux en terme d'algorithme : def accumulate_sum_of(n): return (n + 1) // 2 * (n + (n + 1) % 2)
Hmm, pourquoi pas simplement n * (n+1) // 2 ? (Ou (n+1)*(n+2)//2 si on veut la somme jusqu'Í n+1.) -- Alain.
Benoit Izac
Bonjour, Le 23/05/2022 Í 12:56, Alain Ketterlin a écrit dans le message  :
Inutile de passer par une composition de liste : def addition(x): return sum(range(x+1)) print (addition(int(input('Fin de la sommielle ')))) Difficile sans doute d'être plus concis...
Mais on peut faire mieux en terme d'algorithme : def accumulate_sum_of(n): return (n + 1) // 2 * (n + (n + 1) % 2)
Hmm, pourquoi pas simplement n * (n+1) // 2 ? (Ou (n+1)*(n+2)//2 si on veut la somme jusqu'Í n+1.)
Parce que c'est toujours plus compliqué de faire simple. ;-) -- Benoit Izac qui n'a s'en doute pas assez réfléchi au problème
Bonjour,
Le 23/05/2022 Í 12:56, Alain Ketterlin a écrit dans le message
<877d6czfdn.fsf@universite-de-strasbourg.fr.invalid>Â :
Inutile de passer par une composition de liste :
def addition(x):
return sum(range(x+1))
print (addition(int(input('Fin de la sommielle '))))
Bonjour, Le 23/05/2022 Í 12:56, Alain Ketterlin a écrit dans le message  :
Inutile de passer par une composition de liste : def addition(x): return sum(range(x+1)) print (addition(int(input('Fin de la sommielle ')))) Difficile sans doute d'être plus concis...
Mais on peut faire mieux en terme d'algorithme : def accumulate_sum_of(n): return (n + 1) // 2 * (n + (n + 1) % 2)
Hmm, pourquoi pas simplement n * (n+1) // 2 ? (Ou (n+1)*(n+2)//2 si on veut la somme jusqu'Í n+1.)
Parce que c'est toujours plus compliqué de faire simple. ;-) -- Benoit Izac qui n'a s'en doute pas assez réfléchi au problème
Dominique
Le 23/05/2022 Í 14:20, Benoit Izac a écrit :
Bonjour, Le 23/05/2022 Í 12:56, Alain Ketterlin a écrit dans le message  :
Inutile de passer par une composition de liste : def addition(x): return sum(range(x+1)) print (addition(int(input('Fin de la sommielle ')))) Difficile sans doute d'être plus concis...
Mais on peut faire mieux en terme d'algorithme : def accumulate_sum_of(n): return (n + 1) // 2 * (n + (n + 1) % 2)
Hmm, pourquoi pas simplement n * (n+1) // 2 ? (Ou (n+1)*(n+2)//2 si on veut la somme jusqu'Í n+1.)
Parce que c'est toujours plus compliqué de faire simple. ;-)
J'avais bien pensé Í aller au plus court avec (n2+n)/2. Mais l'exercice voulait qu'on balaye la plage de 1 Í n :-)
Le 23/05/2022 Í 14:20, Benoit Izac a écrit :
Bonjour,
Le 23/05/2022 Í 12:56, Alain Ketterlin a écrit dans le message
<877d6czfdn.fsf@universite-de-strasbourg.fr.invalid>Â :
Inutile de passer par une composition de liste :
def addition(x):
return sum(range(x+1))
print (addition(int(input('Fin de la sommielle '))))
Bonjour, Le 23/05/2022 Í 12:56, Alain Ketterlin a écrit dans le message  :
Inutile de passer par une composition de liste : def addition(x): return sum(range(x+1)) print (addition(int(input('Fin de la sommielle ')))) Difficile sans doute d'être plus concis...
Mais on peut faire mieux en terme d'algorithme : def accumulate_sum_of(n): return (n + 1) // 2 * (n + (n + 1) % 2)
Hmm, pourquoi pas simplement n * (n+1) // 2 ? (Ou (n+1)*(n+2)//2 si on veut la somme jusqu'Í n+1.)
Parce que c'est toujours plus compliqué de faire simple. ;-)
J'avais bien pensé Í aller au plus court avec (n2+n)/2. Mais l'exercice voulait qu'on balaye la plage de 1 Í n :-)
Dominique
Le 23/05/2022 Í 09:36, Damien Wyart a écrit :
print("The sum from 1 to", N, "is", sum_of_first_ints(N))
Cette présentation est intéressante. Je me la garde :-) Merci, Dominique
Le 23/05/2022 Í 09:36, Damien Wyart a écrit :
print("The sum from 1 to", N, "is", sum_of_first_ints(N))
Cette présentation est intéressante. Je me la garde :-)
print("The sum from 1 to", N, "is", sum_of_first_ints(N))
Cette présentation est intéressante. Je me la garde :-) Merci, Dominique
Dominique
Le 23/05/2022 Í 12:56, Alain Ketterlin a écrit :
Hmm, pourquoi pas simplement n * (n+1) // 2 ? (Ou (n+1)*(n+2)//2 si on veut la somme jusqu'Í n+1.)
J'y ai bien pensé, mais l'exercice ne voulait pas de cette solution :-) Au passage, elle ne fonctionne que pour une plage de 1 Í n, pas de x (1<x<n) jusqu'Í n. De plus, elle est plus compliquée Í gérer si on veut ne travailler que sur une valeur sur deux : 1, 3, 5 ou 2, 4, 6... Merci Í vous tous, Dominique
Le 23/05/2022 Í 12:56, Alain Ketterlin a écrit :
Hmm, pourquoi pas simplement n * (n+1) // 2 ? (Ou (n+1)*(n+2)//2 si on
veut la somme jusqu'Í n+1.)
J'y ai bien pensé, mais l'exercice ne voulait pas de cette solution :-)
Au passage, elle ne fonctionne que pour une plage de 1 Í n, pas de x
(1<x<n) jusqu'Í n. De plus, elle est plus compliquée Í gérer si on veut
ne travailler que sur une valeur sur deux : 1, 3, 5 ou 2, 4, 6...
Hmm, pourquoi pas simplement n * (n+1) // 2 ? (Ou (n+1)*(n+2)//2 si on veut la somme jusqu'Í n+1.)
J'y ai bien pensé, mais l'exercice ne voulait pas de cette solution :-) Au passage, elle ne fonctionne que pour une plage de 1 Í n, pas de x (1<x<n) jusqu'Í n. De plus, elle est plus compliquée Í gérer si on veut ne travailler que sur une valeur sur deux : 1, 3, 5 ou 2, 4, 6... Merci Í vous tous, Dominique
Parce que c'est toujours plus compliqué de faire simple. ;-)
Cela étant, ta version est mieux adaptée aux contextes o͹ la précision est limitée, parce qu'elle évite les overflows quand n*(n+1) n'est pas représentable mais que n*(n+1)/2 l'est. (Ça ne concerne pas Python, mais c'est la même idée qu'un bug qui a été célèbre en Java, dont la correction a consisté Í remplacer (a+b)/2 par a + (b-a)/2.) -- Alain.
Parce que c'est toujours plus compliqué de faire simple. ;-)
Cela étant, ta version est mieux adaptée aux contextes o͹ la précision
est limitée, parce qu'elle évite les overflows quand n*(n+1) n'est pas
représentable mais que n*(n+1)/2 l'est.
(Ça ne concerne pas Python, mais c'est la même idée qu'un bug qui a été
célèbre en Java, dont la correction a consisté Í remplacer (a+b)/2 par
a + (b-a)/2.)
Parce que c'est toujours plus compliqué de faire simple. ;-)
Cela étant, ta version est mieux adaptée aux contextes o͹ la précision est limitée, parce qu'elle évite les overflows quand n*(n+1) n'est pas représentable mais que n*(n+1)/2 l'est. (Ça ne concerne pas Python, mais c'est la même idée qu'un bug qui a été célèbre en Java, dont la correction a consisté Í remplacer (a+b)/2 par a + (b-a)/2.) -- Alain.
Benoit Izac
Bonjour, Le 24/05/2022 Í 14:33, Alain Ketterlin a écrit dans le message  :
(Ça ne concerne pas Python, mais c'est la même idée qu'un bug qui a été célèbre en Java, dont la correction a consisté Í remplacer (a+b)/2 par a + (b-a)/2.)
Il y a intérêt a avoir un beau commentaire juste Í cÍ´té car il y a fort Í parier que quelqu'un qui passe sur le code sans être courant risque de simplifier (et c'est logique). Question bête : si c'est (a+b) qui provoque le dépassement, pourquoi pas «Â a/2 + b/2 »Â ? Perte de précision ? Et pour ma culture, il vient d'o͹ ce bug ? -- Benoit Izac
Bonjour,
Le 24/05/2022 Í 14:33, Alain Ketterlin a écrit dans le message
<87zgj7xg89.fsf@universite-de-strasbourg.fr.invalid>Â :
(Ça ne concerne pas Python, mais c'est la même idée qu'un bug qui a été
célèbre en Java, dont la correction a consisté Í remplacer (a+b)/2 par
a + (b-a)/2.)
Il y a intérêt a avoir un beau commentaire juste Í cÍ´té car il y a fort
Í parier que quelqu'un qui passe sur le code sans être courant risque de
simplifier (et c'est logique).
Question bête : si c'est (a+b) qui provoque le dépassement, pourquoi pas
«Â a/2 + b/2 »Â ? Perte de précision ?
Bonjour, Le 24/05/2022 Í 14:33, Alain Ketterlin a écrit dans le message  :
(Ça ne concerne pas Python, mais c'est la même idée qu'un bug qui a été célèbre en Java, dont la correction a consisté Í remplacer (a+b)/2 par a + (b-a)/2.)
Il y a intérêt a avoir un beau commentaire juste Í cÍ´té car il y a fort Í parier que quelqu'un qui passe sur le code sans être courant risque de simplifier (et c'est logique). Question bête : si c'est (a+b) qui provoque le dépassement, pourquoi pas «Â a/2 + b/2 »Â ? Perte de précision ? Et pour ma culture, il vient d'o͹ ce bug ? -- Benoit Izac