Skip to content

Instantly share code, notes, and snippets.

@olberger
Last active December 16, 2015 03:49
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save olberger/5372553 to your computer and use it in GitHub Desktop.
Save olberger/5372553 to your computer and use it in GitHub Desktop.
Chapitre "3. Introduction informelle à Python" du Tutoriel Python officiel (traduit en français), repris de http://www.afpy.org/doc/python/2.7/tutorial/introduction.html
Display the source blob
Display the rendered blob
Raw
{
"metadata": {
"name": "Tutoriel - Introduction informelle"
},
"nbformat": 3,
"nbformat_minor": 0,
"worksheets": [
{
"cells": [
{
"cell_type": "heading",
"level": 1,
"metadata": {},
"source": [
"3. Introduction informelle \u00e0 Python"
]
},
{
"cell_type": "heading",
"level": 2,
"metadata": {},
"source": [
"Commentaires"
]
},
{
"cell_type": "code",
"collapsed": true,
"input": [
"# Ceci est le premier commentaire\n",
"SPAM = 1 # Et ceci est le suivant\n",
" # ... Et un troisi\u00e8me !\n",
"CHAINE = \"# Ceci n'est pas un commentaire.\"\n"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 1
},
{
"cell_type": "heading",
"level": 2,
"metadata": {},
"source": [
"Utiliser Python comme une calculatrice"
]
},
{
"cell_type": "heading",
"level": 3,
"metadata": {},
"source": [
"Les nombres"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"L\u2019interpr\u00e9teur agit comme une simple calculatrice : vous pouvez lui entrer une expression et il vous affiche la valeur. La syntaxe des expressions est simple : les op\u00e9rateurs +, -, * et / fonctionnent comme dans la plupart des langages (par exemple, Pascal ou C) ; les parenth\u00e8ses peuvent \u00eatre utilis\u00e9es pour faire des regroupements. Par exemple"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
">>> 2+2"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "pyout",
"prompt_number": 2,
"text": [
"4"
]
}
],
"prompt_number": 2
},
{
"cell_type": "code",
"collapsed": false,
"input": [
">>> # Ceci est un commentaire\n",
"... 2+2"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "pyout",
"prompt_number": 3,
"text": [
"4"
]
}
],
"prompt_number": 3
},
{
"cell_type": "code",
"collapsed": false,
"input": [
">>> 2+2 # Et un commentaire sur la m\u00eame ligne que du code"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "pyout",
"prompt_number": 4,
"text": [
"4"
]
}
],
"prompt_number": 4
},
{
"cell_type": "code",
"collapsed": false,
"input": [
">>> (50-5*6)/4"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "pyout",
"prompt_number": 5,
"text": [
"5"
]
}
],
"prompt_number": 5
},
{
"cell_type": "code",
"collapsed": false,
"input": [
">>> # La division enti\u00e8re renvoie le quotient :\n",
"... 7/3"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "pyout",
"prompt_number": 6,
"text": [
"2"
]
}
],
"prompt_number": 6
},
{
"cell_type": "code",
"collapsed": false,
"input": [
">>> 7/-3"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "pyout",
"prompt_number": 7,
"text": [
"-3"
]
}
],
"prompt_number": 7
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Le signe \u00e9gal ('=') est utilis\u00e9 pour affecter une valeur \u00e0 une variable. Apr\u00e8s cela, aucun r\u00e9sultat n\u2019est affich\u00e9 avant l\u2019invite suivante"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
">>> largeur = 20\n",
">>> hauteur = 5*9\n",
">>> largeur * hauteur"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "pyout",
"prompt_number": 8,
"text": [
"900"
]
}
],
"prompt_number": 8
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Une valeur peut \u00eatre affect\u00e9e \u00e0 plusieurs variables simultan\u00e9ment"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
">>> x = y = z = 0 # Mettre \u00e0 z\u00e9ro x, y et z"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 9
},
{
"cell_type": "code",
"collapsed": false,
"input": [
">>> x"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "pyout",
"prompt_number": 10,
"text": [
"0"
]
}
],
"prompt_number": 10
},
{
"cell_type": "code",
"collapsed": false,
"input": [
">>> y"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "pyout",
"prompt_number": 11,
"text": [
"0"
]
}
],
"prompt_number": 11
},
{
"cell_type": "code",
"collapsed": false,
"input": [
">>> z"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "pyout",
"prompt_number": 12,
"text": [
"0"
]
}
],
"prompt_number": 12
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Les variables doivent \u00eatre \u201cd\u00e9finies\u201d (une valeur doit leur \u00eatre affect\u00e9e) pour qu\u2019elles puissent \u00eatre utilis\u00e9es, sans quoi une erreur interviendra"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"n # essayer d'acc\u00e9der \u00e0 une variable non-d\u00e9finie"
],
"language": "python",
"metadata": {},
"outputs": [
{
"ename": "NameError",
"evalue": "name 'n' is not defined",
"output_type": "pyerr",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m<ipython-input-13-c0039267bd2e>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mn\u001b[0m \u001b[0;31m# essayer d'acc\u00e9der \u00e0 une variable non-d\u00e9finie\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[0;31mNameError\u001b[0m: name 'n' is not defined"
]
}
],
"prompt_number": 13
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Il y a un support complet des nombres \u00e0 virgule flottante ; les op\u00e9rateurs avec des types d\u2019op\u00e9randes m\u00e9lang\u00e9s convertissent l\u2019op\u00e9rande entier en virgule flottante"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
">>> 3 * 3.75 / 1.5"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "pyout",
"prompt_number": 14,
"text": [
"7.5"
]
}
],
"prompt_number": 14
},
{
"cell_type": "code",
"collapsed": false,
"input": [
">>> 7.0 / 2"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "pyout",
"prompt_number": 15,
"text": [
"3.5"
]
}
],
"prompt_number": 15
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Les nombres complexes sont aussi support\u00e9s ; les nombres imaginaires sont \u00e9crits avec un suffixe j ou J. Les nombres complexes avec une composante r\u00e9elle diff\u00e9rente de z\u00e9ro sont \u00e9crits sous la forme (real+imagj), ou peuvent \u00eatre cr\u00e9\u00e9s avec la fonction complex(real, imag)."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
">>> 1j * 1J"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "pyout",
"prompt_number": 16,
"text": [
"(-1+0j)"
]
}
],
"prompt_number": 16
},
{
"cell_type": "code",
"collapsed": false,
"input": [
">>> 1j * complex(0,1)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "pyout",
"prompt_number": 17,
"text": [
"(-1+0j)"
]
}
],
"prompt_number": 17
},
{
"cell_type": "code",
"collapsed": false,
"input": [
">>> 3+1j*3"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "pyout",
"prompt_number": 18,
"text": [
"(3+3j)"
]
}
],
"prompt_number": 18
},
{
"cell_type": "code",
"collapsed": false,
"input": [
">>> (3+1j)*3"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "pyout",
"prompt_number": 19,
"text": [
"(9+3j)"
]
}
],
"prompt_number": 19
},
{
"cell_type": "code",
"collapsed": false,
"input": [
">>> (1+2j)/(1+1j)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "pyout",
"prompt_number": 20,
"text": [
"(1.5+0.5j)"
]
}
],
"prompt_number": 20
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Les nombres complexes sont toujours repr\u00e9sent\u00e9s comme deux nombres \u00e0 virgule flottante, la partie r\u00e9elle et la partie imaginaire. Pour extraire ces deux parties d\u2019un nombre complexe z, utilisez z.real et z.imag."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
">>> a=1.5+0.5j\n",
">>> a.real"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "pyout",
"prompt_number": 21,
"text": [
"1.5"
]
}
],
"prompt_number": 21
},
{
"cell_type": "code",
"collapsed": false,
"input": [
">>> a.imag"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "pyout",
"prompt_number": 22,
"text": [
"0.5"
]
}
],
"prompt_number": 22
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Les fonctions de conversion en nombres \u00e0 virgule flottante et en entiers float(), int() et long()) ne fonctionnent pas pour les nombres complexes \u2014 il n\u2019y a pas de mani\u00e8re correcte de convertir un nombre complexe en nombre r\u00e9el. Utilisez abs(z) pour obtenir sa magnitude (de type flottant) ou z.real pour obtenir sa partie r\u00e9elle"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
">>> a=3.0+4.0j\n",
">>> float(a)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"ename": "TypeError",
"evalue": "can't convert complex to float",
"output_type": "pyerr",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m<ipython-input-23-f8309fbaf66a>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0ma\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m3.0\u001b[0m\u001b[0;34m+\u001b[0m\u001b[0;36m4.0j\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0mfloat\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0ma\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[0;31mTypeError\u001b[0m: can't convert complex to float"
]
}
],
"prompt_number": 23
},
{
"cell_type": "code",
"collapsed": false,
"input": [
">>> a.real"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "pyout",
"prompt_number": 24,
"text": [
"3.0"
]
}
],
"prompt_number": 24
},
{
"cell_type": "code",
"collapsed": false,
"input": [
">>> a.imag"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "pyout",
"prompt_number": 25,
"text": [
"4.0"
]
}
],
"prompt_number": 25
},
{
"cell_type": "code",
"collapsed": false,
"input": [
">>> abs(a) # sqrt(a.real**2 + a.imag**2)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "pyout",
"prompt_number": 26,
"text": [
"5.0"
]
}
],
"prompt_number": 26
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"En mode interactif, la derni\u00e8re expression affich\u00e9e est affect\u00e9e \u00e0 la variable _. Ce qui signifie que lorsque vous utilisez Python comme calculatrice, il est parfois plus simple de continuer des calculs, par exemple"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
">>> taxe = 12.5 / 100\n",
">>> prix = 100.50\n",
">>> prix * taxe"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "pyout",
"prompt_number": 27,
"text": [
"12.5625"
]
}
],
"prompt_number": 27
},
{
"cell_type": "code",
"collapsed": false,
"input": [
">>> prix + _"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "pyout",
"prompt_number": 28,
"text": [
"113.0625"
]
}
],
"prompt_number": 28
},
{
"cell_type": "code",
"collapsed": false,
"input": [
">>> round(_, 2)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "pyout",
"prompt_number": 29,
"text": [
"113.06"
]
}
],
"prompt_number": 29
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Cette variable doit \u00eatre consid\u00e9r\u00e9e comme une variable en lecture seule par l\u2019utilisateur. Ne lui affectez pas de valeur explicitement \u2014 vous cr\u00e9eriez ainsi une variable locale ind\u00e9pendante avec le m\u00eame nom qui masquerait la variable native et son fonctionnement magique."
]
},
{
"cell_type": "heading",
"level": 3,
"metadata": {},
"source": [
"Les cha\u00eenes de caract\u00e8res"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Au del\u00e0 des nombres, Python peut aussi manipuler des cha\u00eenes de caract\u00e8res, qui peuvent \u00eatre exprim\u00e9s de diff\u00e9rentes mani\u00e8res. Elles peuvent \u00eatre \u00e9crites entre apostrophes ou entre guillemets."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
">>> 'spam oeufs'"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "pyout",
"prompt_number": 30,
"text": [
"'spam oeufs'"
]
}
],
"prompt_number": 30
},
{
"cell_type": "code",
"collapsed": false,
"input": [
">>> 'm\\'enfin'"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "pyout",
"prompt_number": 31,
"text": [
"\"m'enfin\""
]
}
],
"prompt_number": 31
},
{
"cell_type": "code",
"collapsed": false,
"input": [
">>> \"m'enfin\""
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "pyout",
"prompt_number": 32,
"text": [
"\"m'enfin\""
]
}
],
"prompt_number": 32
},
{
"cell_type": "code",
"collapsed": false,
"input": [
">>> '\"Oui,\" dit-il.'"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "pyout",
"prompt_number": 33,
"text": [
"'\"Oui,\" dit-il.'"
]
}
],
"prompt_number": 33
},
{
"cell_type": "code",
"collapsed": false,
"input": [
">>> \"\\\"Oui,\\\" dit-il.\""
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "pyout",
"prompt_number": 34,
"text": [
"'\"Oui,\" dit-il.'"
]
}
],
"prompt_number": 34
},
{
"cell_type": "code",
"collapsed": false,
"input": [
">>> '\"M\\'enfin,\" dit-elle.'"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "pyout",
"prompt_number": 35,
"text": [
"'\"M\\'enfin,\" dit-elle.'"
]
}
],
"prompt_number": 35
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"L\u2019interpr\u00e9teur affiche les cha\u00eenes de caract\u00e8res de la m\u00eame mani\u00e8re qu\u2019elles s\u2019\u00e9crivent : entre guillemets et en prot\u00e9gant les guillemets et autres caract\u00e8res sp\u00e9ciaux avec des antislash, afin d\u2019afficher une repr\u00e9sentation pr\u00e9cise. La cha\u00eene est affich\u00e9e entre guillemets si elle contient un guillemet simple mais aucun guillemet, sinon elle est affich\u00e9e entre guillemets simples.print statement produces a more readable output for such input strings.\n",
"Les cha\u00eenes litt\u00e9rales peuvent \u00eatre r\u00e9parties sur plusieurs lignes de plusieurs fa\u00e7ons. On peut utiliser des lignes de continuation, un antislash en derni\u00e8re position d\u2019une ligne indiquant que celle-ci se continue sur la ligne suivante\n"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"hello = \"Ceci est une cha\u00eene assez longue qui contient\\n\\\n",
"plusieurs lignes de texte comme vous le feriez en C.\\n\\\n",
" Notez que les espacesments au d\u00e9but de la ligne sont\\\n",
" significatifs.\""
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 36
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Notez que les caract\u00e8res de retour \u00e0 la ligne sont toujours \u00e0 \u00e9crire en utilisant \\n \u2013 la fin de ligne pr\u00e9c\u00e9d\u00e9e d\u2019un antislash est ignor\u00e9e. Cet exemple affichera :"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"print hello"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Ceci est une cha\u00eene assez longue qui contient\n",
"plusieurs lignes de texte comme vous le feriez en C.\n",
" Notez que les espacesments au d\u00e9but de la ligne sont significatifs.\n"
]
}
],
"prompt_number": 37
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Aussi, les cha\u00eenes de caract\u00e8res peuvent \u00eatre entour\u00e9es de trois guillemets \"\"\" ou '''. Il n\u2019est pas n\u00e9cessaire de prot\u00e9ger avec un antislash les fins de lignes en utilisant les triple guillemets, mais il seront inclus dans la cha\u00eene."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"print \"\"\"\n",
"Usage: bidule [OPTIONS]\n",
" -h Affiche ce message d'aide\n",
" -H hostname Machine \u00e0 laquelle se connecter\n",
"\"\"\""
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"Usage: bidule [OPTIONS]\n",
" -h Affiche ce message d'aide\n",
" -H hostname Machine \u00e0 laquelle se connecter\n",
"\n"
]
}
],
"prompt_number": 38
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"produit l\u2019affichage attendu."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"En utilisant une cha\u00eene de caract\u00e8re brute, (\u201craw\u201d string), les s\u00e9quence d\u2019\u00e9chappement``n`` ne sont pas convertis en retour \u00e0 la ligne, mais l\u2019antislash en fin de ligne et le retour \u00e0 la ligne pr\u00e9sent dans le code source sont tous les deux inclus dans la cha\u00eene de caract\u00e8re. Par exemple:"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"hello = r\"Ceci est une assez longue cha\u00eene contenant\\n\\\n",
"plusieurs lignes de texte un peu comme vous le feriez en C.\"\n",
"print hello\n"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Ceci est une assez longue cha\u00eene contenant\\n\\\n",
"plusieurs lignes de texte un peu comme vous le feriez en C.\n"
]
}
],
"prompt_number": 39
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"imprimerait :\n",
"Ceci est une assez longue cha\u00eene contenant\\n\\\n",
"plusieurs lignes de texte un peu comme vous le feriez en C.\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Les chaines peuvent \u00eatre concat\u00e9n\u00e9es (coll\u00e9es ensemble) avec l\u2019op\u00e9rateur +, et r\u00e9p\u00e9t\u00e9es avec l\u2019op\u00e9rateur *:"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
">>> mot = 'Help' + 'A'\n",
">>> mot"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "pyout",
"prompt_number": 40,
"text": [
"'HelpA'"
]
}
],
"prompt_number": 40
},
{
"cell_type": "code",
"collapsed": false,
"input": [
">>> '<' + mot*5 + '>'"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "pyout",
"prompt_number": 41,
"text": [
"'<HelpAHelpAHelpAHelpAHelpA>'"
]
}
],
"prompt_number": 41
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Deux cha\u00eenes de caract\u00e8res l\u2019une \u00e0 c\u00f4t\u00e9 de l\u2019autre sont automatiquement concat\u00e9n\u00e9es ; la premi\u00e8re ligne ci-dessous aurait \u00e9galement pu \u00eatre \u00e9crite mot = 'Help' 'A' ; ceci ne fonctionne qu\u2019avec deux cha\u00eenes litt\u00e9rales, pas avec des expressions arbitraires"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
">>> 'cha' 'ine' # <- C'est bon"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "pyout",
"prompt_number": 42,
"text": [
"'chaine'"
]
}
],
"prompt_number": 42
},
{
"cell_type": "code",
"collapsed": false,
"input": [
">>> 'cha'.strip() + 'ine' # <- C'est bon"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "pyout",
"prompt_number": 43,
"text": [
"'chaine'"
]
}
],
"prompt_number": 43
},
{
"cell_type": "code",
"collapsed": false,
"input": [
">>> 'cha'.strip() 'ine' # <- Pas bon"
],
"language": "python",
"metadata": {},
"outputs": [
{
"ename": "SyntaxError",
"evalue": "invalid syntax (<ipython-input-44-b3d0a7b28f9b>, line 1)",
"output_type": "pyerr",
"traceback": [
"\u001b[0;36m File \u001b[0;32m\"<ipython-input-44-b3d0a7b28f9b>\"\u001b[0;36m, line \u001b[0;32m1\u001b[0m\n\u001b[0;31m 'cha'.strip() 'ine' # <- Pas bon\u001b[0m\n\u001b[0m ^\u001b[0m\n\u001b[0;31mSyntaxError\u001b[0m\u001b[0;31m:\u001b[0m invalid syntax\n"
]
}
],
"prompt_number": 44
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Les cha\u00eenes de caract\u00e8res peuvent \u00eatre index\u00e9es ; comme en C, le premier caract\u00e8re d\u2019une cha\u00eene est \u00e0 la position 0. Il n\u2019existe pas de type distinct pour les caract\u00e8res ; un caract\u00e8re est simplement une cha\u00eene de longueur 1. Comme dans Icon, des sous-cha\u00eenes peuvent \u00eatre sp\u00e9cifi\u00e9es via une slice notation : deux indices s\u00e9par\u00e9s par deux points"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
">>> mot[4]"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "pyout",
"prompt_number": 45,
"text": [
"'A'"
]
}
],
"prompt_number": 45
},
{
"cell_type": "code",
"collapsed": false,
"input": [
">>> mot[0:2]"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "pyout",
"prompt_number": 46,
"text": [
"'He'"
]
}
],
"prompt_number": 46
},
{
"cell_type": "code",
"collapsed": false,
"input": [
">>> mot[2:4]"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "pyout",
"prompt_number": 47,
"text": [
"'lp'"
]
}
],
"prompt_number": 47
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Les indices par tranches ont des valeurs par d\u00e9faut utiles ; le premier indice lorsqu\u2019il est omis \u00e9quivaut \u00e0 z\u00e9ro, le second \u00e0 la taille de la cha\u00eene de caract\u00e8res"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
">>> mot[:2] # Les deux premiers caract\u00e8res"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "pyout",
"prompt_number": 48,
"text": [
"'He'"
]
}
],
"prompt_number": 48
},
{
"cell_type": "code",
"collapsed": false,
"input": [
">>> mot[2:] # Tout sauf les deux premiers caract\u00e8res"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "pyout",
"prompt_number": 49,
"text": [
"'lpA'"
]
}
],
"prompt_number": 49
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\u00c0 la diff\u00e9rence des cha\u00eenes de caract\u00e8res en C, les cha\u00eenes Python ne peuvent pas \u00eatre modifi\u00e9es. Affecter une nouvelle valeur \u00e0 un indice d\u2019une cha\u00eene produit une erreur"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
">>> mot[0] = 'x'"
],
"language": "python",
"metadata": {},
"outputs": [
{
"ename": "TypeError",
"evalue": "'str' object does not support item assignment",
"output_type": "pyerr",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m<ipython-input-50-349fd7bea303>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mmot\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m'x'\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[0;31mTypeError\u001b[0m: 'str' object does not support item assignment"
]
}
],
"prompt_number": 50
},
{
"cell_type": "code",
"collapsed": false,
"input": [
">>> mot[:1] = 'Splat'"
],
"language": "python",
"metadata": {},
"outputs": [
{
"ename": "TypeError",
"evalue": "'str' object does not support item assignment",
"output_type": "pyerr",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m<ipython-input-51-a707cf281475>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mmot\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m'Splat'\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[0;31mTypeError\u001b[0m: 'str' object does not support item assignment"
]
}
],
"prompt_number": 51
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Par contre, cr\u00e9er une nouvelle cha\u00eene avec le contenu combin\u00e9 est simple et efficace"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
">>> 'x' + mot[1:]"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "pyout",
"prompt_number": 52,
"text": [
"'xelpA'"
]
}
],
"prompt_number": 52
},
{
"cell_type": "code",
"collapsed": false,
"input": [
">>> 'Splat' + mot[4]"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "pyout",
"prompt_number": 53,
"text": [
"'SplatA'"
]
}
],
"prompt_number": 53
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Voici un invariant utile des op\u00e9rations par tranches : s[:i] + s[i:] est \u00e9gal \u00e0 s."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
">>> mot[:2] + mot[2:]"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "pyout",
"prompt_number": 54,
"text": [
"'HelpA'"
]
}
],
"prompt_number": 54
},
{
"cell_type": "code",
"collapsed": false,
"input": [
">>> mot[:3] + mot[3:]"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "pyout",
"prompt_number": 55,
"text": [
"'HelpA'"
]
}
],
"prompt_number": 55
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Des indices de tranches erron\u00e9s sont \u00e9galement g\u00e9r\u00e9s gracieusement : un indice trop \u00e9lev\u00e9 est remplac\u00e9 par la taille de la cha\u00eene, un indice de fin plus petit que l\u2019indice de d\u00e9but retourne une cha\u00eene vide"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
">>> mot[1:100]"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "pyout",
"prompt_number": 56,
"text": [
"'elpA'"
]
}
],
"prompt_number": 56
},
{
"cell_type": "code",
"collapsed": false,
"input": [
">>> mot[10:]"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "pyout",
"prompt_number": 57,
"text": [
"''"
]
}
],
"prompt_number": 57
},
{
"cell_type": "code",
"collapsed": false,
"input": [
">>> mot[2:1]"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "pyout",
"prompt_number": 58,
"text": [
"''"
]
}
],
"prompt_number": 58
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Les indices peuvent \u00e9galement \u00eatre n\u00e9gatifs, pour effectuer un d\u00e9compte en partant de la droite. Par exemple"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
">>> mot[-1] # Le dernier caract\u00e8re"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "pyout",
"prompt_number": 59,
"text": [
"'A'"
]
}
],
"prompt_number": 59
},
{
"cell_type": "code",
"collapsed": false,
"input": [
">>> mot[-2] # L'avant-dernier caract\u00e8re"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "pyout",
"prompt_number": 60,
"text": [
"'p'"
]
}
],
"prompt_number": 60
},
{
"cell_type": "code",
"collapsed": false,
"input": [
">>> mot[-2:] # Les deux derniers caract\u00e8res"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "pyout",
"prompt_number": 61,
"text": [
"'pA'"
]
}
],
"prompt_number": 61
},
{
"cell_type": "code",
"collapsed": false,
"input": [
">>> mot[:-2] # Tout jusqu'\u00e0 l'avant-dernier caract\u00e8re"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "pyout",
"prompt_number": 62,
"text": [
"'Hel'"
]
}
],
"prompt_number": 62
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Mais notez bien que -0 est vraiment la m\u00eame chose que 0, et n\u2019effectue donc pas son d\u00e9compte \u00e0 partir de la droite !"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
">>> mot[-0] # (car -0 est \u00e9gal \u00e0 0)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "pyout",
"prompt_number": 63,
"text": [
"'H'"
]
}
],
"prompt_number": 63
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Des tranches avec des indices n\u00e9gatifs en dehors des valeurs autoris\u00e9es sont tronqu\u00e9es, mais n\u2019essayez pas de les utiliser avec des indices pour des valeurs isol\u00e9es (hors tranches)"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
">>> mot[-100:]"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "pyout",
"prompt_number": 64,
"text": [
"'HelpA'"
]
}
],
"prompt_number": 64
},
{
"cell_type": "code",
"collapsed": false,
"input": [
">>> mot[-10] # erreur"
],
"language": "python",
"metadata": {},
"outputs": [
{
"ename": "IndexError",
"evalue": "string index out of range",
"output_type": "pyerr",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[0;31mIndexError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m<ipython-input-65-19c788073222>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mmot\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m10\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;31m# erreur\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[0;31mIndexError\u001b[0m: string index out of range"
]
}
],
"prompt_number": 65
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Une fa\u00e7on de m\u00e9moriser la fa\u00e7on dont les tranches fonctionnent est de penser que les indices pointent between les caract\u00e8res, le c\u00f4t\u00e9 gauche du premier caract\u00e8re ayant la position 0. Le c\u00f4t\u00e9 droit du dernier caract\u00e8re d\u2019une cha\u00eene de n caract\u00e8res a alors pour indice n, par exemple"
]
},
{
"cell_type": "raw",
"metadata": {},
"source": [
" +---+---+---+---+---+\n",
" | H | e | l | p | A |\n",
" +---+---+---+---+---+\n",
" 0 1 2 3 4 5\n",
"-5 -4 -3 -2 -1"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"La premi\u00e8re ligne de nombres donne la position des indices 0...5 dans la cha\u00eene ; la deuxi\u00e8me ligne donne l\u2019indice n\u00e9gatif correspondant. La tranche de i \u00e0 j est constitu\u00e9e de tous les caract\u00e8res situ\u00e9s entre les bords libell\u00e9s i et j, respectivement.\n",
"\n",
"Pour des indices non n\u00e9gatifs, la longueur d\u2019une tranche est la diff\u00e9rence entre ces indices, si les deux sont entre les bornes. Par exemple, la longue de mot[1:3] est 2.\n",
"\n",
"La fonction native len() renvoie la longue d\u2019une cha\u00eene"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
">>> s = 'anticonstitutionnellement'\n",
">>> len(s)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "pyout",
"prompt_number": 66,
"text": [
"25"
]
}
],
"prompt_number": 66
}
],
"metadata": {}
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment