Bibm@th

Forum de mathématiques - Bibm@th.net

Bienvenue dans les forums du site BibM@th, des forums où on dit Bonjour (Bonsoir), Merci, S'il vous plaît...

Vous n'êtes pas identifié(e).

#26 01-11-2019 08:20:05

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 16 946

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)
Secondo. Coup de couce n°2

- Le problème technique de la boucle décroissante est réglé ci-dessus
- Rappel : la longueur de la chaîne "ABRACADABRANTESQUE" est 18
  Python est tolérant, mais  ce serait donner unr mauvaise habitude d'utiliser un mot-clé comme compteur :
  employer i, j, k ... no... ce que tu veux
- Pour accéder à cette dernière lettre on tape print(m[17]) et pour la première print(m[0])...
- Tu as donc le début : 17 .
   ET la fin ?
   Premier réflexe : 0... Tu testes : la boucle s'arrête à 1..
   La solution pour aller jusqu'à m[0] se trouve ci-dessus, dans le rappel du post #1...
- Pour écrire sur la même ligne, préciser dans le print : , end=...
  Si tu utilises print(m[no],end=" "), tu vas être sur la même ligne mais avec une espace entre les lettres...
  Sans surprise, la solution est donc  de ne pas mettre d'espace, donc de mettre du... vide : print(m[index],end="")

Voilà !
Yapluka emboîter les morceaux du puzzle

@+


Arx Tarpeia Capitoli proxima...

Hors ligne

#27 01-11-2019 09:15:26

LEG
Membre
Inscription : 19-09-2012
Messages : 690

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

#28 01-11-2019 10:12:42

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 16 946

Re : Essai de mini-tuto Python

Re,

Je corrige et explique les fautes

1. for element in range (m(17,0,-1)):
    Niet !
    Ici : range(17,-1,-1):
    Là, tu mélangeais 2 techniques
   


    m ="ABRACADABRANTESQUE"
    for element in m :
         print(element,end= " ")

    qui parcourait le mot lettre après lettre en ajoutant une espace après chaque lettre du début à la fin...
    Et nous, on n'avait pas à soucier de l'index, Python gérait ça tout seul. Résultat :
    A B R A C A D A B R A N T E S Q U E
    Si on ne veut pas d'espace mais, par ex, "_$£" à la place (ou toute autre chose) :
   


    m ="ABRACADABRANTESQUE"
    for element in m :
         print(element,end= "_$£")

    Résultat :
    A_$£B_$£R_$£A_$£C_$£A_$£D_$£A_$£B_$£R_$£A_$£N_$£T_$£E_$£S_$£Q_$£U_$£E_$£
    Pour coller les lettres, garder un end= vide et le vide c'est "" (2 guillemets anglais accolés)
       


    m ="ABRACADABRANTESQUE"
    for element in m :
         print(element,end= "'")

    Résultat : ABRACADABRANTESQUE

   2e technique pour ton mélange : avec les nos d'index :
   


    m ="ABRACADABRANTESQUE"
    for idx  in range(0,18) :  # Rappel : 18 exclu, Python s'arrête à 17
         print (m[idx],end= "*")

    qui te donne :
    A*B*R*A*C*A*D*A*B*R*A*N*T*E*S*Q*U*E*
    Si j'écris end="" au lieu de end="*", on retrouve : ABRACADABRANTESQUE

--> range(0,18) fabrique ici l'un après l'autre les nombres de 0 à 17 inclus : on peut utiliser simplement range(18) puisqu'on démarre à 0...
      Toi, tu as demandé range(m(17,0,-1))...
--> m(17,0,-1)
      Il te suffirait de demander simplement print(m(17,0,-1)) pour déclencher une erreur..
      En effet, m est une chaîne de lettres et :
      1. Déjà, l'opérateur de chaîne est [] et non ()
      2. Le séparateur y est : (deux points)
      3. Si tu utilises m[17:0:-1] tu n'obtiendras pas des nombres, mais des lettres (qui ne sont même pas des variables)
      4. En conséquence comme dans range(), il faut des valeurs numériques, ou de variables contenant des valeurs numériques : boum !

En résumé, la syntaxe correcte  pour afficher à l'endroit une lettre après l'autre, en utilisant les index et sans espace est :


m ="ABRACADABRANTESQUE"
for idx  in range(0,18) :  # Rappel : 18 exclu, Python s'arrête à 17
     print (m[idx],end= "*")
 

syntaxe de range() : range (debut, fin, pas)
Maintenant yapluka retoucher le range pour avoir le bon index de debut, le bon index de fin et le bon pas...
Et après ça baigne...

@+


Arx Tarpeia Capitoli proxima...

Hors ligne

#29 01-11-2019 14:56:50

LEG
Membre
Inscription : 19-09-2012
Messages : 690

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 15:09:21)

Hors ligne

#30 01-11-2019 17:18:05

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 16 946

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 !

Il te reste à passer des nombres aux lettres...

Tu as testé :


m ="ABRACADABRANTESQUE"
adjectif_Yoshi =m
for adjectif_Yoshi in range (0,18) :
     print (adjectif_Yoshi,end= "")

1. Tu as oublié que le typage des variables est un typage dynamique...
    Regarde ça :

   
    mot="BOA"
    print(mot)

    Tu obtiens : BOA
    Je reprends et j'ajoute une autre variable truc:

   
    mot="BOA"
    print("mot =",mot)
    truc =mot
    print("truc =",truc)
 

    Tu obtiens :
    mot = BOA
    truc = BOA

    Elle sert à quoi la variable truc puisqu'elle contient aussi BOA ? C'est juste une copie de la variable mot...
    Et maintenant que fais-tu ?
    Mais ça (et j'ajoute un petit qq ch en plus pour te montrer, et j'abrège l'énumération) :

   
    mot="BOA"
    print"mot =",mot)
    truc =mot
    print("truc =",truc)
    for truc in range(18, 16,-3):
        print(truc =", truc)
 

Ce qui donne :

mot = BOA
    truc = BOA
    truc = 18
    truc = 17

Recommence la même chose uniquement en écrivant "Yoshi" à la place de "BOA" : mot ="Yoshi" dans le code ci-dessus :

   
    mot="Yoshi"
    print"mot =",mot)
    truc =mot
    print("truc =",truc)
    for truc in range(18, 16,-3):
        print(truc =", truc)
 

Ce qui donne :

mot = Yoshi
    truc = Yoshi
    truc = 18
    truc = 17

Tu commences à comprendre ?

Alors, tu as fait :


m ="ABRACADABRANTESQUE"
adjectif_Yoshi =m
for adjectif_Yoshi in range (18,-1,-1)) :
     print (adjectif_Yoshi,end= " ")

qui te donne
18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Si au lieu de end=" ", tu écris end="" :
1817161514131211109876543210
Rageant, s'pas ?

Tiens, supprimons la 2e ligne :


m ="ABRACADABRANTESQUE"
for adjectif_Yoshi in range (18,-1,-1) :
     print (adjectif_Yoshi,end= "")

et tu obtiens :
1817161514131211109876543210 : la même chose...
A quoi a servi d'écrire adjectif_Yoshi = m ?
A rien !
Pourquoi ?
juste avant ta boucle,  adjectif_Yoshi contenait la chaine de caractères "ABRACADABRANTESQUE"
Puis tu déclares la boucle :

for adjectif_Yoshi in range (18,-1,-1):

Qui veut dire quoi  en français ?
Mais ceci : Pour adjectif_Yoshi allant de 18 à -1 (exclu)

Et alors ?
Sur la ligne 2, tu écris que adjectif_Yoshi ="ABRACADABRANTESQUE", c'est une chaîne.
Sur la ligne 3, tu écris que adjectif_Yoshi est un nombre pris entre 18 et -1 (exclu)...
C'est normal que l'affichage donne des nombres !
D'une ligne à la suivante tu as changé le type de adjectif_Yoshi : il est passé de str (string) à int (integer)..

Reprenons :
Ça, tu as su le faire :


for element in range (18,-1,-1):
     print (element,end= " ")

Résultat : 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 

Que faire ?
1. Supprimer les espaces en utilisant end="" :


    for element in range (18,-1,-1):
        print (element,end= " ")

    Résultat : 1817161514131211109876543210

2. On rajoute m="ABRACADABRANTESQUE" :


    m="ABRACADABRANTESQUE"
    for element in range (18,-1,-1):
        print (element,end= " ")

    Résultat : 1817161514131211109876543210
    C'est normal, ici m ne sert à rien, puisqu'on ne s'en sert pas..
    C'est dans la boucle que ça se passe maintenant...
    Parce que element est ici plus qu'un simple compte-tours, c'est un calculateur d'index...
    Tout ce dont tu as besoin,  c'est à partir d'un index donné, comment extraire de la chaîne m la lettre dont la position est donnée par cet index...
    Et ce comment faire est expliqué en #22, entre le début du post et la première ligne bleue(exclue)

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 18:38:14

LEG
Membre
Inscription : 19-09-2012
Messages : 690

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 18:42:11)

Hors ligne

#32 01-11-2019 20:05:17

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 16 946

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 09:16:19

LEG
Membre
Inscription : 19-09-2012
Messages : 690

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 10:56:39

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 16 946

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

Solution sans faute...

m="ABRACADABRANTESQUE"
for  element in range(17,-1,-1):
    print(m[element],end=" ") #  espace volontairement mis pour épeler le mot : je vous demandais end=""
 

-1 c'est la fin, etr la fin étrant exvlue Python s'arrête à 0 et
m[0], existe c'est A.
Voilà ce que donne l'exécution avec end=" " :
E U Q S E T N A R B A D A C A R B A
et si j'utilise end="" :
EUQSETNARBADACARBA

On passe au 1er cas de détection d'un palindrome

Si nécessaire, voilà le plan..

Après avoir enlevé les espaces de la phrase ESOPE RESTE ICI ET SE REPOSE, j'ai
ph1="ESOPERESTEICIETSEREPOSE"
1. Si c'est un palindrome, que je lise ph1 à l'endroit ou à l'envers,  je dois obtenir la même chaîne.
2. J'ai donc besoin d'une 2e chaine ph2 qui contiendra le mot lu à l'envers.
3. Je pars donc d'une 2e chaîne ph2 vide au départ que je vais remplir lettre après lettre avec chaque lettre de ph1 obtenue en allant du E final de REPOSE au E de ESOPE.
4. Lire ph1 à l'envers, ça c'était l'objet de l'exercice précédent.
5. La chaîne ph2 se remplit lettre à lettre. Comment ? C'est expliqué dans les posts précédents : 
    Supposons que ph1="LEG"  :  3 lettres, donc 3 tours de boucle.
    ph1="LEG"
    ph2=""
    ph2 = ph2 + ph1[2] ("G") --> on a donc ph2 = "G"
    ph2 = ph2 + ph1[1] ("E") --> on a donc ph2 = "GE"
    ph2 = ph2 + ph1[0] ("L") --> on a donc ph2 = "GEL"
    Mais ça, c'est sans boucle, pas grave  3 lettres seulement...
    Mais combien dans "ESOPERESTEICIETSEREPOSE"... On va les compter ?
    Nan... c'est Python qui va le faire lg=len(ph1) (len, de l'anglais length = longueur), soit lg = 23
5. Pour savoir si c'est le même mot, il faut demander à Python c'est le cas.
6. Pour cela il faut utiliser le comparateur d'égalité == et Python ne pourra répondre que True ou False
    Donc, j'amorce le code :
   


    ph1="ESOPERESTEICIETSEREPOSE"
    ph2= ""
    lg=len(ph1)
    for idx in range( ?, -1,-1): # ? est à remplacer par une expression algébrique utilisant lg
        ................................

    A compléter
    La boucle ne sert qu'a obtenir ph2
8. Comparer ph1 et ph2 ne doit se faire qu'une fois les 20 tours effectués, une fois sortis de la boucle (indentation !)

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 11:43:04)


Arx Tarpeia Capitoli proxima...

Hors ligne

#35 02-11-2019 11:13:30

LEG
Membre
Inscription : 19-09-2012
Messages : 690

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 20:04:14)

Hors ligne

#36 02-11-2019 12:29:09

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 16 946

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 20:05:08)


Arx Tarpeia Capitoli proxima...

Hors ligne

#37 25-11-2019 10:52:06

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 16 946

Re : Essai de mini-tuto Python

Bonjour,

Je vois que j'ai été abandonné...
Alors

Solution définitive... sans boucle !

:
Voyez, l'opérateur des chaînes de caractère et des listes, possède un 3e paramètre:
print("Truc"[::-1]) donne curT

ph1="ESOPRERESTEICIETSEREPOSE"
print(ph1[::-1]==ph1)

renvoie

True

Ce print est à interpréter comme une question dont le résultat sera True ou False :
si je dis que ph1 lu à l'envers est égal à ph1, est-ce Vrai ou Faux ?

En ce qui concerne l'opérateur :
[début: fin: pas]
Quand je ne renseigne ni le début ni la fin, c'est Python qui, gérant seul le nombre de caractères,  détermine l'indice de fin, et par défaut, il prend 0 comme indice de début :

print ("ABCDEFGHIJKLMNOPQ"[::2])

renvoie

ACEGIKMOQ

ou encore

print ("ABCDEFGHIJKLMNOPQ"[::-2])

renvoie

QOMKIGECA

@+


Arx Tarpeia Capitoli proxima...

Hors ligne

#38 26-11-2019 10:03:42

Zebulor
Membre expert
Inscription : 21-10-2018
Messages : 2 073

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 :

Fibo1,Fibo2=1,1
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 14:49:35)


En matière d'intégrales impropres les intégrales les plus sales sont les plus instructives.

Hors ligne

#39 29-12-2020 23:10:31

jesby555
Membre
Inscription : 29-12-2020
Messages : 1

Re : Essai de mini-tuto Python

Svp, besoins d'un programme batch qui calcul le ppcm de deux nombre

Hors ligne

#40 31-12-2020 11:14:45

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 16 946

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 01: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.

yoshi a écrit :

...
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

Réponse rapide

Veuillez composer votre message et l'envoyer
Nom (obligatoire)

E-mail (obligatoire)

Message (obligatoire)

Programme anti-spam : Afin de lutter contre le spam, nous vous demandons de bien vouloir répondre à la question suivante. Après inscription sur le site, vous n'aurez plus à répondre à ces questions.

Quel est le résultat de l'opération suivante (donner le résultat en chiffres)?
vingt neuf plus seize
Système anti-bot

Faites glisser le curseur de gauche à droite pour activer le bouton de confirmation.

Attention : Vous devez activer Javascript dans votre navigateur pour utiliser le système anti-bot.

Pied de page des forums