Forum de mathématiques - Bibm@th.net
Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
#26 01-11-2019 09:20:05
- yoshi
- Modo Ferox
- Inscription : 20-11-2005
- Messages : 17 101
Re : Essai de mini-tuto Python
Salut,
Rooohhhh... pourquoi abandonner si vite ?
Tout ce dont tu as besoin a déjà été vu, il faut seulement recoller les morceaux...
Primo :
Relire le post #1...
J'y écrivais :
La boucle avec fin se déroule jusqu'à fin-1 !
On peut afficher les nombres de 1 à 9 en choisissant 1 pour debut, 10 pour fin, de 0 à 9 soit en spécifiant 0 pour debut, soit en écrivant seulement range(10)
on peut afficher ces mêmes nombres en décroissant avec fin<debut et pas =-1:
for i in range(9,0,-1):
print(i)Sans surprise, on aura obtenu les nombres de 9 à... 1 !
Pour avoir le 0, il faut pousser fin jusqu'à -1 :
for i in range(9,-1,-1):
print(i)
@+
Arx Tarpeia Capitoli proxima...
Hors ligne
#27 01-11-2019 10:15:26
- LEG
- Membre
- Inscription : 19-09-2012
- Messages : 698
Re : Essai de mini-tuto Python
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...
Hors ligne
#29 01-11-2019 15:56:50
- LEG
- Membre
- Inscription : 19-09-2012
- Messages : 698
Re : Essai de mini-tuto Python
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
Dernière modification par LEG (01-11-2019 16:09:21)
Hors ligne
#30 01-11-2019 18:18:05
- yoshi
- Modo Ferox
- Inscription : 20-11-2005
- Messages : 17 101
Re : Essai de mini-tuto Python
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 !
@+
Arx Tarpeia Capitoli proxima...
Hors ligne
#31 01-11-2019 19:38:14
- LEG
- Membre
- Inscription : 19-09-2012
- Messages : 698
Re : Essai de mini-tuto Python
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.
Dernière modification par LEG (01-11-2019 19:42:11)
Hors ligne
#32 01-11-2019 21:05:17
- yoshi
- Modo Ferox
- Inscription : 20-11-2005
- Messages : 17 101
Re : Essai de mini-tuto Python
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.
@+
Arx Tarpeia Capitoli proxima...
Hors ligne
#33 02-11-2019 10:16:19
- LEG
- Membre
- Inscription : 19-09-2012
- Messages : 698
Re : Essai de mini-tuto Python
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é....
Hors ligne
#34 02-11-2019 11:56:39
- yoshi
- Modo Ferox
- Inscription : 20-11-2005
- Messages : 17 101
Re : Essai de mini-tuto Python
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.
Dernière modification par yoshi (02-11-2019 12:43:04)
Arx Tarpeia Capitoli proxima...
Hors ligne
#35 02-11-2019 12:13:30
- LEG
- Membre
- Inscription : 19-09-2012
- Messages : 698
Re : Essai de mini-tuto Python
@ :
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...
Dernière modification par yoshi (03-11-2019 21:04:14)
Hors ligne
#36 02-11-2019 13:29:09
- yoshi
- Modo Ferox
- Inscription : 20-11-2005
- Messages : 17 101
Re : Essai de mini-tuto Python
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é...
Dernière modification par yoshi (03-11-2019 21:05:08)
Arx Tarpeia Capitoli proxima...
Hors ligne
#38 26-11-2019 11:03:42
- Zebulor
- Membre expert
- Inscription : 21-10-2018
- Messages : 2 139
Re : Essai de mini-tuto Python
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..
Dernière modification par Zebulor (29-11-2019 15:49:35)
En matière d'intégrales impropres les intégrales les plus sales sont les plus instructives.
Hors ligne
#40 31-12-2020 12:14:45
- yoshi
- Modo Ferox
- Inscription : 20-11-2005
- Messages : 17 101
Re : Essai de mini-tuto Python
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)$
@+
Arx Tarpeia Capitoli proxima...
Hors ligne
#41 03-03-2022 02:12:55
- Boody
- Membre
- Inscription : 31-03-2014
- Messages : 183
Re : Essai de mini-tuto Python
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)
“il n’existe que 10 sortes de personnes, celles qui comprennent le binaire et les autres.”
Bonjour (Bonsoir), Merci, S'il vous plaît... (just in case : ) )
Hors ligne