Les instructions.
Un programme Python est composé d'instructions. Une instruction est un ordre unitaire donné à un programme. Par exemple "afficher Bonjour" est une instruction, de même que "calculer un plus un". 
La structure d'un programme Python est certainement ce qui étonne le plus le programmeur ayant l'habitude d'un langage plus traditionnel comme le C : en Python les limites des instructions et des blocs sont définies par la mise en page.
En définitive, Python oblige à écrire du code lisible, et à prendre de bonnes habitudes conservables dans d'autres langages, ce qui en fait un langage idéal pour apprendre la programmation.
Les espaces sont ignorés.
À part ceux qui servent à l'indentation, en début de ligne, les espaces placés à l'intérieur des instructions sont ignorés, sauf s'ils font partie d'une chaîne de caractères.
L'interpréteur Python commence par analyser la première ligne : 
Notion de bloc d'instructions.
Un bloc d'instructions est une suite d'instructions qui est alignée sur la même tabulation. Les blocs d'instructions sont créés par les instructions de contrôles comme "if", "while" et "for", ainsi que par les instructions permettant de déclarer des fonctions.
Sous Python, toutes les instructions composées ont toujours la même structure : une ligne d'en-tête terminée par un double point, suivie d'une ou de plusieurs instructions indentées sous cette ligne d'en-tête.
Il y a deux solutions pour indenter : utiliser quatre espaces ou un seul caractère tabulation, mais jamais un mélange des deux sous peine d'erreurs "IndentationError: unindent does not match any outer indentation level". En effet, et même si le résultat paraît identique à l'écran, espaces et tabulations sont des codes binaires distincts : Python considérera donc que ces lignes indentées différemment font partie de blocs différents.
La tabulation est notamment la convention utilisée pour la librairie standard de Python, mais les espaces ont l'avantage de fonctionner avec tous les éditeurs (et ainsi, de pouvoir être plusieurs sur le même projet avec des éditeurs différents). On préférera donc se passer des tabulations : si vous utilisez un éditeur "intelligent", vous pouvez escamoter le problème en activant l'option "Remplacer les tabulations par des espaces", qui modifie ce que produit la touche tab.
S'il y a plusieurs instructions indentées sous la ligne d'en-tête, "elles doivent l'être exactement au même niveau". Ces instructions indentées constituent ce que nous appellerons désormais un "bloc d'instructions". Un bloc d'instructions est une suite d'instructions formant un ensemble logique, qui n'est exécuté que dans certaines conditions définies dans la ligne d'en-tête.

Programmation Python/Opérateurs
Définition.
Un "opérateur" est un symbole (ou un mot réservé) utilisé pour effectuer une "opération" entre des "opérandes".
Une opérande est une variable, un littéral ou bien une expression.
Une expression est une suite valide d'opérateurs et d'opérandes.
Par exemple, dans l'expression :
 x = y + 1
Il y a deux opérateurs ( = et +) et trois opérandes (x, y et 1).
Certains opérateurs peuvent avoir des comportements différents en fonction des types d'opérandes sur lesquels ils agissent : on parle alors de "surcharge des opérateurs". Exemple :
Il existe différentes catégories d'opérateur :
Présentation des différents opérateurs.
les opérateurs d'affectation.
a = 5
a *= 2 # 10
a += 1 # 11
a /= 4 # 2.75
:=.
Depuis Python 3.8, l' réalise une affectation dans une expression.
les opérateurs logiques.
Les expressions avec un opérateur logique sont évaluées à 0 ou 1 pour chaque bit des opérandes entiers.
Pour chaque bit des opérandes X et Y :
les opérateurs booléens.
Les expressions avec un opérateur booléen sont évaluées à codice_1 ou codice_2.
En fait, ces opérateurs supportent n'importe quel type d'opérandes car ils sont convertis implicitement en valeur booléenne pour l'évaluation :
»> not " # Chaîne vide
True
»> not 'abc' # Chaîne non vide
False
»> not 'False' # Chaîne non vide
False
»> not 'True' # Chaîne non vide
False
Pour les opérateurs codice_12 et codice_13 avec des opérandes non-booléens, le comportement est donc le suivant
»> 0 or 1
1
»> 0 and 1
0
les opérateurs de comparaisons.
Tout comme les opérateurs logiques, les opérateurs de comparaison renvoient une valeur booléenne "True" ou "False". Les opérateurs de comparaisons s'appliquent sur tous les types de base.
Il est possible d'enchaîner les opérateurs : X < Y < Z, dans ce cas, c'est Y qui est pris en compte pour la comparaison avec Z et non pas l'évaluation de (X < Y) comme on pourrait s'y attendre dans d'autres langages.
les opérateurs mathématiques.
La division entre deux entiers produit un entier en Python 2, et un nombre à virgule flottante en Python 3.
Opérateurs et expressions.
On manipule les valeurs et les variables qui les référencent, en les combinant avec des opérateurs pour former des expressions. Exemple :
codice_16
codice_17
Dans cet exemple, nous commençons par affecter aux variables "codice_18" et "codice_19" les valeurs "codice_20" et "codice_21". Python assigne automatiquement le type « réel » à la variable "codice_18", et le type « entier » à la variable "codice_19".
La seconde ligne de l'exemple consiste à affecter à une nouvelle variable "codice_24" le résultat d'une expression qui combine les "opérateurs" "*", "+" et "/" avec les "opérandes" "codice_18", "codice_19", "codice_27" et "codice_28". Les opérateurs sont les symboles spéciaux utilisés pour représenter des opérations mathématiques simples, telles l'addition ou la multiplication. Les opérandes sont les valeurs combinées à l'aide des opérateurs.
Python évalue chaque expression qu'on lui soumet, aussi compliquée soit-elle, et le résultat de cette évaluation est toujours lui-même une valeur. À cette valeur, il attribue automatiquement un type, lequel dépend de ce qu'il y a dans l'expression. Dans l'exemple ci-dessus, la variable "codice_24" sera du type réel, parce que l'expression évaluée pour déterminer sa valeur contient elle-même au moins un réel.
Les opérateurs Python ne sont pas seulement les quatre opérateurs mathématiques de base. Il faut leur ajouter l'opérateur "**" pour l'exponentiation, ainsi qu'un certain nombre d'opérateurs logiques, des opérateurs agissant sur les chaînes de caractères, des opérateurs effectuant des tests d'identité ou d'appartenance, etc.
Signalons au passage la disponibilité de l'opérateur modulo, représenté par le symbole "%".
Cet opérateur fournit le reste de la division entière d'un nombre par un autre. Essayez par exemple :
Cet opérateur pourra être utile notamment pour tester si un nombre "a" est divisible par un nombre "b". Il suffira en effet de vérifier que "a % b" donne un résultat égal à zéro.
On constate qu'une variable appartenant à l'ensemble des nombres entiers, multipliée par un nombre décimal, donne un décimal.
Composition.
Jusqu'ici nous avons examiné les différents éléments d'un langage de programmation, à savoir : les "variables", les "expressions" et les "instructions", mais sans traiter de la manière dont nous pouvons les combiner les unes avec les autres.
Or l'une des grandes forces d'un langage de programmation de haut niveau est qu'il permet de construire des instructions complexes par assemblage de fragments divers. Ainsi par exemple, si vous savez comment additionner deux nombres et comment afficher une valeur, vous pouvez combiner ces deux instructions en une seule :
Cela n'a l'air de rien, mais cette fonctionnalité qui paraît si évidente va vous permettre de programmer des algorithmes complexes de façon claire et concise. Exemple :
Attention :
Il y a une limite à ce que vous pouvez combiner ainsi. Le symbole pour l'égalité en mathématique est '='. Le symbole pour l'égalité en programmation Python est '=='
Ainsi par exemple,
Nous aurons l'occasion de revenir bientôt sur ce sujet. Mais auparavant, il nous faut encore aborder un autre concept de grande importance.