Différences entre versions de « 100daysofcode/R2 »
De Mi caja de notas
< 100daysofcode
(→PEMDAS) |
(→PEMDAS) |
||
Ligne 133 : | Ligne 133 : | ||
Lorsqu'il y a plus d'un opérateur dans une expression, l'ordre dans lequel les opérations doivent être effectuées dépend de ''règles de priorité''. Sous Python, les règles de priorité sont les mêmes que celles qui vous ont été enseignées au cours de mathématique. Vous pouvez les mémoriser aisément à l'aide d'un « truc » mnémotechnique, l'acronyme '''PEMDAS''' : | Lorsqu'il y a plus d'un opérateur dans une expression, l'ordre dans lequel les opérations doivent être effectuées dépend de ''règles de priorité''. Sous Python, les règles de priorité sont les mêmes que celles qui vous ont été enseignées au cours de mathématique. Vous pouvez les mémoriser aisément à l'aide d'un « truc » mnémotechnique, l'acronyme '''PEMDAS''' : | ||
− | * '''P | + | * '''P''' pour ''parenthèses''. Ce sont elles qui ont la plus haute priorité. |
+ | Elles vous permettent donc de « forcer » l'évaluation d'une expression dans l'ordre que vous voulez.<br /> | ||
+ | Ainsi `2*(3-1) = 4`>, et `(1+1)**(5-2) = 8`. | ||
− | * '''E''' pour ''exposants''. Les exposants sont évalués ensuite, avant les autres opérations.<br /> Ainsi `2**1+1 = 3`(et non 4), et `3*1**10 = 3` (et non 59049 !). | + | * '''E''' pour ''exposants''. Les exposants sont évalués ensuite, avant les autres opérations.<br /> |
+ | Ainsi `2**1+1 = 3`(et non 4), et `3*1**10 = 3` (et non 59049 !). | ||
− | * '''M''' et '''D''' pour ''multiplication'' et ''division'', qui ont la même priorité. Elles sont évaluées avant l'''addition'' `A` et la ''soustraction'' `S`, lesquelles sont donc effectuées en dernier lieu. <br />Ainsi `2-2*2` renvoie -2 et non 0 ! Et `2+4/2` renvoie 4.0 et non 3.0 | + | * '''M''' et '''D''' pour ''multiplication'' et ''division'', qui ont la même priorité. |
+ | Elles sont évaluées avant l'''addition'' `A` et la ''soustraction'' `S`, lesquelles sont donc effectuées en dernier lieu. <br /> | ||
+ | Ainsi `2-2*2` renvoie -2 et non 0 ! Et `2+4/2` renvoie 4.0 et non 3.0 | ||
− | (Rappelez-vous que / est l'opérateur de la division décimale). | + | (Rappelez-vous que `/` est l'opérateur de la division décimale). |
− | Si deux opérateurs ont la même priorité, l'évaluation est effectuée de gauche à droite. <br />Ainsi dans l'expression `59*100/60`, la multiplication est effectuée en premier, et la machine doit donc ensuite effectuer `5900/60`, ce qui donne `98.0`. Si la division était effectuée en premier, le résultat serait `59.0` (rappelez-vous ici encore qu'il s'agit d'une division ''classique''). | + | Si deux opérateurs ont la même priorité, l'évaluation est effectuée de gauche à droite. <br /> |
+ | Ainsi dans l'expression `59*100/60`, la multiplication est effectuée en premier, et la machine doit donc ensuite effectuer `5900/60`, ce qui donne `98.0`. | ||
+ | Si la division était effectuée en premier, le résultat serait `59.0` (rappelez-vous ici encore qu'il s'agit d'une division ''classique''). | ||
* '''A''' et '''S''' pour ''addition'' et ''soustraction''. | * '''A''' et '''S''' pour ''addition'' et ''soustraction''. |
Version du 5 septembre 2018 à 05:43
2ème défi 100daysofcode démarré le 2018-246
R2D1
MIT : Introduction to Computer Science and Programming Using Python
1. Param + config Python + Spyder (Environnement de dév) 1. Semaine 1 : Fondamentaux Python 1. Support Slides Partie 1 et 2 : File:lec1.pdf + File:lec2_branch_loops.pdf
Conditionnelle imbriquée :
x = int(input('Entre un nombre entier : ')) if x%2 == 0: if x%3 == 0: print('Divisible par 2 et 3') else: print('Divisible par 2 et pas par 3') elif x%3 == 0: print('Divisible par 3 et non par 2')
Indentation :
x = float(input("Entre un nombre pour x : ")) y = float(input("Entre un nombre pour y : ")) if x == y: print("x et y sont égaux") if y!= 0: print("par conséquent, x / y donne ", x/y) elif x < y: print("x est le plus petit") else: print("y est le plus petit") print("Merci !")
R2D2
Ressources
- Critique MIT 6.00.1.x review - 2017-10-21
- Livre du cours "Introduction to Computation and Programming Using Python - Guttag" File:Intro-Computation-Programming-using-Python.pdf
- Mise à jour en cours de Spyder 3.2.8 vers la 3.3.1
Ouvert Anaconda et à l'invite de mise à jour de Spyder (IDE de dév Python), fermeture de Spyder et lancement du terminal :
conda update qt pyqt conda update spyder
Note : mise à jour faite directement dans le navigateur Anaconda
cours 2
Éléments clés des programmes
- Bindings
- Strings
- Input/Output
- IDEs
- Control Flow
- Iteration
R2D3
... Suite Python comparaison avec exercice de comparaison de variables. Révision sur la priorité des opérateurs Python
Exercice vara varb
Supposons que deux variables, `varA` and `varB`, soient deux valeurs déclarées, que ce soit des nombres ou des chaînes.
Écrire un bout de code Python qui évalue `varA` et `varB`, et affiche ensuite l'un des messages suivants :
- `"string involved"` si l'une des `varA` ou `varB` sont des chaînes
- `"bigger"` si `varA` est plus grand que `varB`
- `"equal"` si `varA` est égal à `varB`
- `"smaller"` si `varA` est plus petit que `varB`
truc sur les priorités des opérateurs
Est ce que
`type(varA) == str or type(varB) == str`
est équivalent à
`type(varA) or type(varB) == str` ?
Celles-ci ne sont pas équivalentes du fait de la [priorité des opérateurs de Python](https://docs.python.org/3.5/reference/expressions.html#operator-precedence) (quelques opérateurs ont une priorité plus haute que d'autres).
Le `==` a une priorité plus haute que le `or` et sera évalué en premier.
Par conséquent :
`type(varA) or type(varB) == str`
sera évalué comme suit, si nous plaçons explicitement des parenthèses :
`type(varA) or ( type(varB) == str )`
`True or ( type(varB) == str )`
`( True )`
Parce que "n-importe-quoi" ou "True" prendra simplement la valeur de "True" (en algèbre booléen).
Et l'autre expression :
`type(varA) == str or type(varB) == str`
sera évaluée comme suit, si nous y plaçons des parenthèses :
`( type(varA) == str ) or ( type(varB) == str )`
Aussi, nous devrons vérifier que chacune des expressions entre parenthèses pour voir si elles sont vraies ou non pour déterminer le résultat final.
Par conséquent ces deux expressions ne sont pas égales.
PEMDAS
Extrait de wikibooks:Programmation_Python/Opérateurs#Priorité_des_opérations
Lorsqu'il y a plus d'un opérateur dans une expression, l'ordre dans lequel les opérations doivent être effectuées dépend de règles de priorité. Sous Python, les règles de priorité sont les mêmes que celles qui vous ont été enseignées au cours de mathématique. Vous pouvez les mémoriser aisément à l'aide d'un « truc » mnémotechnique, l'acronyme PEMDAS :
- P pour parenthèses. Ce sont elles qui ont la plus haute priorité.
Elles vous permettent donc de « forcer » l'évaluation d'une expression dans l'ordre que vous voulez.
Ainsi `2*(3-1) = 4`>, et `(1+1)**(5-2) = 8`.
- E pour exposants. Les exposants sont évalués ensuite, avant les autres opérations.
Ainsi `2**1+1 = 3`(et non 4), et `3*1**10 = 3` (et non 59049 !).
- M et D pour multiplication et division, qui ont la même priorité.
Elles sont évaluées avant l'addition `A` et la soustraction `S`, lesquelles sont donc effectuées en dernier lieu.
Ainsi `2-2*2` renvoie -2 et non 0 ! Et `2+4/2` renvoie 4.0 et non 3.0
(Rappelez-vous que `/` est l'opérateur de la division décimale).
Si deux opérateurs ont la même priorité, l'évaluation est effectuée de gauche à droite.
Ainsi dans l'expression `59*100/60`, la multiplication est effectuée en premier, et la machine doit donc ensuite effectuer `5900/60`, ce qui donne `98.0`.
Si la division était effectuée en premier, le résultat serait `59.0` (rappelez-vous ici encore qu'il s'agit d'une division classique).
- A et S pour addition et soustraction.