Forum de mathématiques - Bibm@th.net
Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
- Accueil
- » Programmation
- » Essai de mini-tuto Python
- » Répondre
Répondre
Résumé de la discussion (messages les plus récents en premier)
- Boody
- 03-03-2022 02:12:55
Bonjour Forum,
Sympa ce tuto yoshi, ça m'a permis d'essayer mes premières lignes de Python (à partir de ton 1er exemple). :-)
Super le Online Python Code Editor.
...
On peut même gagner une ligne :
...
Fibo1,Fibo2,fibo=1,1,0
print(Fibo2,end=" ")
while fibo<100000:
fibo=Fibo1+Fibo2
Fibo1,Fibo2=Fibo2,fibo
print(fibo,end= " ")
Les deux permettent d'obtenir :
1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765 10946 17711 28657 46368 75025
...
On peut encore gagner 2 lignes et une variable ;-)
Fibo1,Fibo2=0,1
while Fibo2<100000:
print(Fibo2,end= " ")
Fibo1,Fibo2=Fibo2,Fibo1+Fibo2
Ce qui produit:
1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765 10946 17711 28657 46368 75025
Executed in: 0.038 sec(s)
Memory: 4164 kilobyte(s)
- yoshi
- 31-12-2020 12:14:45
Bonjour,
Ton sujet n'a rien à faire dans cette discussion.
Ouvre ta propre discussion en cliquant ici : Nouvelle discussion
Le principe est celui-ci (ce sont des maths) :
$PPCM(a,b)=(a\times b)/PGCD(a,b)$
@+
- jesby555
- 30-12-2020 00:10:31
Svp, besoins d'un programme batch qui calcul le ppcm de deux nombre
- Zebulor
- 26-11-2019 11:03:42
Bonjour,
@Yoshi : ne prends pas du retard dans tes explications à cause de moi (entres autres ?). Des soucis d ordi ne m’arrangent pas les choses...
en relisant tout çà, le programme sur les suites de Fibonacci me parle davantage avec cette écriture :
print(Fibo2,end=" ")
for i in range(2,25):
Fibo3=Fibo1+Fibo2
Fibo1=Fibo2
Fibo2=Fibo3
print(Fibo3,end= " ")
Le premier terme prend la place du 2e terme, le deuxième celui du 3e. D'où le Fibo3 en codage au lieu du fibo initial..
- yoshi
- 25-11-2019 11:52:06
Bonjour,
Je vois que j'ai été abandonné...
Alors
@+
- yoshi
- 02-11-2019 13:29:09
Salut,
C'est juste mais ne correspond pas tout à fait à ce que j'attendais...
Je vais devoir détailler plus dans un post à part entière !
Programme "simple" ? court, oui, mais pas si simple...
Pas si simple, surtout pour quelqu'un qui n'a jamais programmé...
C'est d'autant plus méritoire
for i in range(22,-1,-1)
c'est la traduction de
for i in range(debut,fin,pas)
Et ici on a :
debut =22
fin = -1 (exclu) donc oui, Python s'arrête à 0
pas = -1 si on ne spécifie pas qu'on va à l'envers, Python va noter que debut>fin et la boucle ne démarrera pas et pas de message d'erreur pour te le signaler...
En spécifiant pas =-1, l'analyse de Python va être qq ch comme :
une boucle for ?
ok
Est-elle correctement écrite ?
debut > fin ... pas correct, on ne peut pas créer les nombres de debut à fin=-1 sauf... si un pas négatif est spécifié
Y a-t-il un pas négatif ?
Oui.
ok, c'est bon.
Tant qu'on ne fait que compter, pas de souci, mais si le compte calcule les index de position des caractères d'une chaîne...
Notre chaîne comprend 23 lettres elles sont numérotées de 0 à 22...
Et pour rependre l'analogie des cases, si on peut écrire le nombre 23, on ne peut pas écrire par contre la lettre contenue dans la case n°23 puisque les cases étant numérotées de 0 à 22... la case n°23 n'existe pas : erreur, out of range...
Voilà pour la valeur à donner à debut.
La valeur à donner à fin serait en principe (puisqu'on compte de manière décroissante celle du plus petit numéro de case, soit 0.
Mais, la valeur donnée à fin étant toujours exclue, ici comme on va en décroissant 22, 21, 20... il faut donner à fin une valeur entière qui va plus loin et dans le même sens, donc -1, comme cela la boucle s'arrêtera à 0...
Tu as réussi à écrire sur une colonne en partant de la fin, sur une colonne à cause de l'absence de ,end=" " ou de ,end=""
C'est un détail, parce que ce n'était pas demandé.
Le but du jeu était de savoir si à l'endroit ou a l'envers on obtenait la même chaîne.
Pour ça, tu avais besoin de :
- remplir une 2e chaîne ph2 avec les lettres de ph1 dans l'ordre inverse. La chaîne ph2, avant la boucle doit être déclarée vide : ph2="".
- ph2 étant remplie, tu dois demander à Python si ph1 et ph2, c'est la même chose.
En maths, ça se traduit par ph1=ph2, en Python le "=" a le sens de mettre dedans... a=2 : je mets 2 dans a.
Par contre, pour savoir si a est égal à 2, en Python, je dois doubler le = et utiliser ==, qui est l'opérateur de comparaison d'égalité.
a=3
print(a==2)
Traduction : écris-moi si a vaut 2
réponse : False
Par contre
a==3
print(a==6//2)
renvoie : True
Voilà pourquoi il fallait savoir extraire les lettre une par une à l'envers, avant de s'attaquer aux palindromes...
@+
[EDIT]
Quand tu sera au bout de la question 2. du palindrome, je te réserverai une petite surprise (en privé) que je ne mettrai même pas en spoiler : j'attendrai que mes deux compères soient au bout pour divulguer cette fois à tous la méthode en pur Python qui va surprendre tant c'est court, et qui mettra un point final à nos jeux sur les chaînes.
J'espère que, même si tu "tires la langue", tu y prends plaisir malgré tout...
Puisqu'il va y avoir une pause forcée (le temps qu'ils te rejoignent), ça me laissera le temps de te recauser crible...
On travaille beaucoup avec les boucles; c'est nécessaire et elles seront encore là pour parler des Listes et Dictionnaires et ensuite des fonctions classiques et aussi d'autres dites anonymes.
Après quoi, chacun pourra poursuivre tout seul sa progression, le gros travail de débroussaillage étant, pour moi, terminé...
- LEG
- 02-11-2019 12:13:30
@ :
par contre pour la fin, j'ai raison
....tout dépend si on sait bien compris ...
car ce que j'ai voulu dire au point 2) suite au 18,0,-1;
si dans : range(17,0,-1): je ne risque pas d'avoir à la fin la lettre A.
exemple avec la première notation: (17,-1, -1): j'ai bien E U Q S E T N A R B A D A C A R B A
mais avec ta notation en mettent 17 au lieu de 18 soit (17,0,-1) et ben : E U Q S E T N A R B A D A C A R B le A ne peut y être; puisque son index est 0 donc il faut dans la "chaine" pour aller jusqu'au n° d'index 0, taper -1
Ceci dit: je suis très loin d'être opérationnel , mais tes explications me permettent de comprendre certaine partie de ce que fait un programme ...""simple""
pour le palindrome :
ph1="ESOPERESTEICIETSEREPOSE"
ph2= ""
lg=len(ph1)
for idx in range( 22, -1,-1):
print(ph1[idx])
résultat:
E
S
O
P
E
R
E
S
T
E
I
C
I
E
T
S
E
R
E
P
O
S
E
et len = 23
[EDIT]@yoshi
Sésolé, mon commentaire n'avait sa place dans ton post. Toutes mes excuses...
- yoshi
- 02-11-2019 11:56:39
Re,
Erreur non volontaire de ma part. Si, j'y avais pensé, je l'aurais faite volontairement...
Bravo de l'avoir repérée, ça vaut dire que tu es opérationnel, par contre pour la fin, j'ai raison
On passe au 1er cas de détection d'un palindrome
Programmer, c'est utiliser une langue étrangère avec peu de mots mais chaque mot, via des options, ayant des emplois différents mais voisins et penser d'une façon différente et ne pas aller trop vite...
Et tester, corriger, retester, recorriger...
Lorsque le programme sera au point, il vous suffira de remplacer ph1="ESOPERESTEICIETSEREPOSE",
par ph1="ETLAMARINEVAPAPAVENIRAMALTE" (en bon français avec majuscules/minuscules et ponctuation : Et la marine va, papa, venir à Malte) puis de relancer votre programme et vous saurez immédiatement, sans efforts si ph1 est un palindrome
@+
[EDIT] correction faute d'orthographe.
- LEG
- 02-11-2019 10:16:19
Salut:
@ : pourquoi tu as écrit ceci:
for element in range(18, 0,-1):
print(m[element],end="") # m, c'est la boîte, [] c'est case et [element], c'est mon "case n° element"(N-B : il manquera une lettre, à toi de rectifier.)
1) sachantt que le nombre d'éléments de la boîte contenant Abracadabrantesque est de 18,en comptant le 0, ce qui fait: que si on tape 18,0,-1 on serra out range...erreur , donc c'est 17 et non 18.
2) si je met 17,0,-1 et ben : de la fin ....> le début il me manquera la lettre A..c'est tout, je n'aurai que 17 n° d'index et l'index 0 = A représenté par -1 dans la chaine de 18 à -1ne serra affiché....
- yoshi
- 01-11-2019 21:05:17
Re,
mais pourquoi doit on dans la fonction print de m du mot ABRA....pourquoi faut il mettre element dans les crochets.
Un stock de boîtes contient des mots différents dont les lettres sont réparties dans des cases numérotées en partant de 0. Tu connais la longueur des mots... tu choisis un n° de boîte, boîte à laquelle tu devras donner un nom pour éviter les confusions.
Ici la boîte choisie a été baptisée m : elle contient le mot ABRACADABRANTESQUE et il est écrit longueur : 18.
Tu n'as pas accès à la boîte, tu as choisi sur un écran...
L'ordinateur répond à la voix et peut afficher à l'écran le contenu de la "case n° element de la boîte m"...
Si tu te contentes de demander "n° element", l'ordi affiche à l'écran le n° element.
Si tu demandes n° 18 : s'affiche 18... mais si tu demandes le contenu de "la case n° 18 de la boîte m", la machine annonce "case introuvable", efface tout et s'arrête : tout est à refaire...
- si tu veux voir à l'écran les numéros de 18 à 0 (rappel 0 exclu, Python s'arrête à 1), tu annonces :
"n° element pour element de 18 à 0" (rappel : 0 exclu), soit :
- si tu veux que s'affiche le contenu de chaque case n° element de la boîte m , il faut demander expressément le contenu de la "case n° element de la boîte m" avec element allant du dernier numéro jusqu'au premier...
soit :
for element in range(18, 0,-1):
print(m[element],end="") # m, c'est la boîte, [] c'est case et [element], c'est mon "case n° element"
(N-B : il manquera une lettre, à toi de rectifier.)
Si jécris
sac="SAKIGAWA"
et que je veux la 5e lettre, c'est à dire la n°4, je n'écris pas
sac="SAKIGAWA"
no=4
print(no)
qui affiche 4
mais
sac="SAKIGAWA"
print(sac[4])
qui affiche G.
@+
- LEG
- 01-11-2019 19:38:14
Python je vais l'exploser, heureusement que mon algorithme et Goldbach c'était moins: EUQSETNARBADACARBA
m ="ABRACADABRANTESQUE"
for element in range(17,-1,-1):
print (m[element],end="")
les elements sont les index, ok : de 17 vers 1 par la boucle range;
mais pourquoi doit on dans la fonction print de m du mot ABRA....pourquoi faut il mettre element dans les crochets..
pour que cela fonctionne , autrement dit il faut lui rappeler d'écrire à l'envers en réutilisant element
car dans la fonction print, si je ne met pas element entre crochets et que je garde uniquement m, cet abruti il va m'écrire 18 fois abraca.....tesque à la suite
Et en plus tu as joué sur les mot dans ta réponse ci dessus ....il te manque juste ....... mais je n'y ai pas fait attention, c'est en regardant maintenant ta réponse que je vois que tu as dû te fendre la gueule....
Bon maintenant je vais me faire une omelette ...
@+
bonne soirée Yoshi.
- yoshi
- 01-11-2019 18:18:05
Ave,
Tu touches au but.
Il ne te manque plus qu'un... élément !
Tu l'as fait avec des nombres !
La programmation, c'est douloureux mais quel pied quand on on arrive à plier la machine à notre volonté !!!
Courage, tu touches au but !
@+
- LEG
- 01-11-2019 15:56:50
ok à l'endroit j'y suis arrivé
mais tu as demandé d'écrire à l'envers en partant de m="ABRACADABRANTESQUE"
et lorsque je fais ce que tu m'as demandé de regarder au début je l'avais fait mais ...Nada...!
voila ce que j'avais essayé entre autre :
m ="ABRACADABRANTESQUE"
adjectif_Yoshi =m
for adjectif_Yoshi in range (0,18) :
print (adjectif_Yoshi,end= "")
résultat
01234567891011121314151617 les n° de lettres....? et à l'endroit
pas de lettres à l'envers ni les index et avec un espace : end=" "
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
alors la solution pour écrire à l'envers ??? sinon le "Boa" je vais le bouffer à la broche....
même en mettant element à la place de adjectif_Yoshi dans la boucle range , j'ai le mot écrit à l'endroit....
mais c'est vrai que :
m ="ABRACADABRANTESQUE"
debut,fin,pas=18,-1,-1
for element in range (18,-1,-1):
print (element,end= " ")
résultat à l'envers ok:
18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
- yoshi
- 01-11-2019 11:12:42
Re,
@+
- LEG
- 01-11-2019 10:15:26
avec les nombres je l'avais essayé mais avec abracadabra = NADA..!
voila ce que j'ai essayé dans tous les sens :
m="ABRACADABRANTESQUE"
for element in range (m(17,0,-1)):
print(element,end=" ")
résultat
Traceback (most recent call last):
, line 2, in <module>
for element in range (m(17,0,-1)):
TypeError: 'str' object is not callable
>>>
déjà il me répond en anglais ....! je vois que 'str' donc string est inaproprié avec des lettres...et ce n'est pas le bon module...enfin je crois...