Bonjour je dois faire 4 exercices et je voudrais avoir de l'aide. J'ai essayer de fairela 1ière mais je ne suis même pas approché à la réponse.
Exercices: En utilisant la programmation fonctionnelle: (i.e. les compréhensions de listes ou les fonctions "map","filter","enumerate","zip")
Exo1: Donner la liste des entiers au cube inférieurs à 2000
list1=[(x**3) for x in range (1,20) if ((x**3)<2000]
print(list1)
Exo2: Donner l'ensemble des triplets pythagoriciens dont les nombres sont tous inférieurs à 100.
L'exemple le plus connu est (3,4,5) mais il y en a d'autres ... Par exemple: (9,12,15) car 9²+12²=15²
Exo3: Donner la liste des mots de 2 lettres ayant un écart de 1 par rapport à l'ordre alphabétique. Ex: "EF" ou "KJ" ...
Exo4: Trouver l'ensemble des points à coordonnées entières d'abscisse strictement inférieur à 1000 se trouvant sur la parabole d'équation p(x) = 3/5 x**2 -3x + 2/5
Par exemple, le point (16,106) a des coordonnées entières et se trouve sur cette parabole
--> savoir si sur un parabole, on remplace x et y avec le point.
mais j'ai juste une question pour la dernière. Vous pourriez juste expliquer les calculs pour l'exos 4 parce que j'ai pas vraiment compris. C'est une formule de maths que vous utiliser ?
«Exo4: Trouver l'ensemble des points à coordonnées entières d'abscisse strictement inférieur à 1000 se trouvant sur la parabole d'équation p(x) = 3/5 x**2 -3x + 2/5»
Si je reprend la formule de la fonction:
p(x) =3/5*x**2 - 3*x + 2/5
On choisit x parmi des entiers, mais comme je l'ai dit dans mon premier message, ce n'est pas certain que le résultat soit un entier.
Je remarque que le premier et le dernier terme ont un diviseur de 5.
Le deuxième terme (3*x) est entier puisque je choisis x comme entier.
Pour que 3/5*x**2 + 2/5 soit entier, il faut que (3*x**2 + 2/5) soit un entier.
Donc, il faut que (3*x**2+2) soit divisible par 5, donc que (3*x**2+2)%5 == 0.
Finalement, on peut écrire la fonction de la façon suivante:
p(x) = (3*x**2+2)/5-3*x
Mais comme on veut un résultat entier, on remplace la division flottante par la division entière:
p(x) = (3*x**2+2)//5-3*x
CQFD
@josmiley:
Pour les triplets pythagoriciens, j'ai écrit:
liste = [(i*i-j*j, 2*i*j, i*i+j*j) for j in range(1, 100) for i in range(1, 100) if j<i and (i-j)%2==1 and pgcd(i,j)==1 and i*i+j*j <= 100 ]
J'aurais voulu écrire:
liste = [(i*i-j*j, 2*i*j, i*i+j*j) for j in range(i+1, 100, 2) for i in range(1, 100) if pgcd(i,j)==1 and i*i+j*j <= 100 ]
Mais Python me dit qu'il ne reconnait pas la variable 'i', comment je ferais pour y arriver?
Il y a un truc plus compliqqué pour changer les limites des range. Je l'ai déjà fait en Fortran et en C, mais je ne me rappelle plus ce que c'est.
L'expression serait beaucoup plus simple et plus rapide et donnerait:
liste = [(i*i-j*j, 2*i*j, i*i+j*j) for j in range(i+1, limj, 2) for i in range(1, limi) if pgcd(i,j)==1 ]
- Edité par PierrotLeFou 13 septembre 2020 à 19:00:03
Le Tout est souvent plus grand que la somme de ses parties.
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard) La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)
Il faut que tu colore ton code pierrot, c'est chiant à lire...
Aussi il y a une fonction math.gcd.
Voici une solution simple pour les pythagoriciens :
from itertools import combinations
def is_pyt(a, b, c):
return a ** 2 + b ** 2 == c ** 2
liste = [c for c in combinations(range(1, 101), 3) if is_pyt(*c)]
Si je ne veux que les primitifs il suffit de changer ça
def is_pyt(a, b, c):
return math.gcd(a, b) == 1 and a ** 2 + b ** 2 == c ** 2
- Edité par thelinekioubeur 14 septembre 2020 à 8:01:58
Pour le 3 si t'as pris mon code c'est normal, j'ai mal lu l'énoncé
Pour le 4 tu as du prendre le deuxième de Pierrot ? (le liste = [(x, (3 * x ** 2 + 2) // 5 - 3 * x) for x in range(1000) if (3 * x ** 2 + 2) % 5 == 0] ?)
Je crois qu'il est tout à fait correct. Ce n'est pas parce que l'équation n'a pas de // qu"il ne faut pas l'utiliser. On ne peut pas utiliser / à cause de l'imprécision des flottants.
Exo 4: l'équation de la parabole ne contient pas de "//" et la condition "if" est à revoir.
au départ, on peut commencer par écrire:
for x in range(20):
y = (3/5)* x**2 -3*x + 2/5
print(x, y)
Comme on nous a dit que pour x = 16, on devait avoir y = 106, on peut vérifier qu'on a la sortie correspondante et être confiant sur le codage de la fonction p(x).
Reste à ajouter une condition pour filtrer les y entiers.
Ce qu'on peut faire avec y == int(y) ou en utilisant y.is_integer()
Ah désolé, j'ai pensé que tu utilisais un clavier braille ou quelque chose comme ça. Sinon, comme on l'a vu il y a plus d'un moyen d'éviter le problème des floats. Encore faut-il avoir conscience du problème, et on peut se demander si c'est le cas du professeur de @roro s'il trouve que le code est faux...
J'imagine que le 12 dans ton résultat était une erreur, ça donne donc bien la même chose avec une fonction.
PierrotLeFou a écrit:
> Pour précision, je ne peux pas colorer mon code, j'utilise une synthèse vocale (voir mon profil)
Pas de soucis concernant la coloration, on connaît tous la bonne accessibilité de ce forum.
Mais est-ce que tu aurais moyen d'espacer un peu plus, rien que délimiter les blocs de code par des lignes vides de part et d'autre aiderait beaucoup à sa lecture.
« Pas de soucis concernant la coloration, on connaît tous la bonne accessibilité de ce forum. Mais est-ce que tu aurais moyen d'espacer un peu plus, rien que délimiter les blocs de code par des lignes vides de part et d'autre aiderait beaucoup à sa lecture.»
Il arrive souvent que l'éditeur du forum me bouffe des lignes vides ou ne comportant que des espaces. C'est pourquoi je n'en mets plus.
Quand j'insère beaucoup de code, je le précède avec des tirets ('-').
Mais je ne le fais pas pour une seule ligne. Je peux le faire si ça aide les autres.
En Python, je peux également séparer les parties de mon code avec une ligne ne contenant que '#' comme commentaire vide.
#
print(...)
#
Commentaire ...
#
autre code
Le Tout est souvent plus grand que la somme de ses parties.
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Le Tout est souvent plus grand que la somme de ses parties.
Le Tout est souvent plus grand que la somme de ses parties.
Python c'est bon, mangez-en.
Python c'est bon, mangez-en.
Le Tout est souvent plus grand que la somme de ses parties.
Le Tout est souvent plus grand que la somme de ses parties.
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)
Python c'est bon, mangez-en.
Le Tout est souvent plus grand que la somme de ses parties.
Le Tout est souvent plus grand que la somme de ses parties.
Le Tout est souvent plus grand que la somme de ses parties.
Le Tout est souvent plus grand que la somme de ses parties.
entwanne — @entwanne — Un zeste de Python — La POO en Python — Notions de Python avancées — Les secrets d'un code pythonique
Le Tout est souvent plus grand que la somme de ses parties.