ROSS Rheingans-YOO: Salut, je suis Ross. Et cela est un séminaire de CS50. Il vous faudra de la programmation en C pour la programmation en Python. Python est un langage de script. Il est en grande partie comme C dans la syntaxe, bien que certains des détails techniques de comment cette syntaxe est exécuté sont légèrement différentes. Il est moins puissant que C à certains égards. Il est moins expressif pour où exactement dans votre ordinateur mémoire est aménagé, comment il se aménagé, quand il obtient la liberté, et ces sortes de choses. Il est plus utile que C, à certains égards, parce qu'il est plus facile de programmer. La langue est, dans une certaine les gens, plus intuitive. Et vraiment, l'objectif est de qu'il soit plus rapide à programmer et potentiellement plus lente à exécuter. Maintenant, si vous pensez la quantité de temps vous avez passé sur votre dernier problème posé par écrit votre code contre le quantité de temps que vous passez sur votre dernier problème définir l'exécution de votre code, vous ne l'imaginez que la langue qui était deux fois plus rapide à écrire, et deux fois plus lente à exécuter, peut- une amélioration par rapport C à certains égards. Certes, quand vous essayez d'écrire petits programmes pour faire de petites choses, Python est un langage utile de choix. A la fin de cette séminaire, je espérons que vous être capable de faire la choix dans les projets futurs sur laquelle la langue est correct à utiliser, pas l'idée qui plus est une langue corriger tout le temps. A peu de choses sur ce que le séminaire est. Ce séminaire ne vise pas à vous apprendre Python à partir de zéro. Python est très similaire à C, et je suppose que vous êtes un étudiant de CS50, ou quelqu'un avec une familiarité similaire avec C. Si vous êtes étudiant CS50 autour problème réglé 6, Donc, vous avez voir beaucoup de choses en C, je vais vous donner les principales différences, et certaines des choses qui font Python différente et spéciale et utile, mais je ne vais pas aller pour quel langage de programmation est et comment écrire des programmes. Cependant, ce séminaire va enseigner vous pour écrire un programmes Python si vous êtes l'un de ces rares groupes. Encore une fois, nous allons voir comment vous souhaitez mettre en œuvre psets-- qui devrait être dans 1-6 Python-- et fournir des pointeurs à la documentation officielle pour référence future. L'autre chose qui est important sur la façon dont ce discours est affecté, Cette vidéo sera en ligne, gracieuseté de CS50, de sorte que vous ne devriez pas sentir comme vous avez besoin de prendre des notes. Vous pouvez toujours revenir en arrière et regarder au plus tard en tant que référence. En outre, les glissières sont disponibles dès maintenant sur ce site, qui devrait prenez vous faites un Google doc. Il est une version légèrement abrégée de ce que je montre sur l'écran. Une mise en garde prudent avant nous sautons dans, Python 3 est une langue différente de Python 2. Ils ressemblent beaucoup même; il y a de très légères différences techniques qui va provoquer des programmes écrit en Python 2 ne pas être en mesure d'être exécuté dans l'environnement Python 3. L'appareil est livré avec CS50 Python, par défaut il utilise Python 2. Vous pouvez le vérifier en taper dans votre ligne de commande python --version, qui devrait afficher 2.7.6 sur l'appareil actuel. Essayez Python 3, qui fait travailler dans l'appareil, si par défaut Python à 2.X.Y, soit sur l'appareil ou sur vos propres machines. Vous devez remplacer Python 3 à tout moment Dans cet exposé, que je vous écris Python. Si votre machine est course 2 par défaut, le type Python 3 afin de pouvoir effectivement suivre et exécuter ces choses. En outre, je vous signale à des ressources officielles maintenant. docs.python.org/3--~~V attention que ce est un 3 et non pas un 2-- a des références utiles. Tutorial vous mènera à travers beaucoup des mêmes choses que je fais maintenant, sauf sous forme de texte. Référence est utile en tant que pour faire référence à la langue, et la bibliothèque standard donne vous quelques-unes des extensions avec des fonctionnalités supplémentaires. Ainsi, un premier programme Python. Sur la gauche, nous avons C standard, sur la droite, nous avons Python. Vous avez peut-être reconnu ce problème, il est l'un des premier problème ensembles dans CS50, et ceux-ci résoudre à l'aide de la même solution. Maintenant, la raison pour laquelle nous sommes En regardant ces côte à côte est si nous pouvons regarder les différences syntaxiques. Un des éléphants dans la pièce que vous avez sans doute remarqué droit la chauve-souris, est que Python n'a pas fonction principale emballage autour du code. Donc en C, vous écrivez un tas de fichiers, vous les relier entre eux, et le programme commence à exécuter à cette chose appelée int main. En Python, vous écrivez un vous déposer, exécuter le fichier, le programme commence à exécuter au début du fichier. Donc, il va commencer au sommet de fichier descendre jusqu'à trouver quelque chose d'autre. Si elle trouve une définition de fonction, il ne sera pas fait exécuter ce code, il sera tout simplement définir la fonction. Mais ici, lorsque le premier programme est n est égal à 10, la première chose que ce programme va faire est de prendre cette valeur de 10 et mettre dans une variable appelée n. Parlant de cette ligne, l'une des autre things-- sorry-- cette signifie que les programmes C, vous les écrivez, vous les faire, qui sera invoquer certaines commandes clang, puis vous exécutez une exécutable qui en résulte. Programmes Python, vous courez le texte file-- cette mario.py pourrait être ce fichier que je viens montré vous-- vous exécutez ce fichier et vous exécutez, et le contenu de celui-ci sera exécuté par l'interpréteur Python. Vous pouvez le faire dans votre IDE. Donc, si je dois un fichier Bonjour, qui a tout simplement ce contenu. Ceci est en fait python 2, pas Python 3, il ne faut pas soucier de la syntaxe pour le moment. Mais je vais courir Python, sur hello.py, et il fonctionne. Une autre façon que je peux utiliser Python Je ne traiterai pas tellement dans ce discours, est si je viens de taper Python, il me tombe dans un environnement où Je peux nourrir ligne Python par ligne. Donc, ici, si je tape Imprimer l'espace «bonjour, monde». Tapez entrer. Il me cracher que sauvegarder les résultats cette ligne individuelle immédiatement. Ceci est peut-être utile. Dans cet exposé, je vais faire des choses sur diapositives. Et ainsi vous serez en mesure de suivre long soit ici, ou en écrivant fichiers réels et les exécuter ensuite. Mais, pour en revenir à cette code, une autre chose que vous pourriez avoir noticed-- bien, il ya deux choses que vous pourriez remarquerez à propos de ces blocs. Le premier, un peu plus terre à terre, est que Python n'a pas de fuite point-virgule. Les points-virgules sont facultatifs partout et inoffensif partout. Vous pouvez les ajouter. Il pourrait rendre les gens qui écrivent Python pour un ricanement de vie à vous derrière votre dos, parce ils ne sont pas nécessaires. Ils sont souvent le signe d'être tenue au cours de C. Les concepteurs de la langue estiment qu'il est plus clair de cette façon et qu'il est pas nécessaire de déclarer chaque fois que vous finissez une ligne. Une autre chose étrange à ce sujet n est qu'il ne possède pas un type joint. Une des pièces magiques de Python-- et je vais appeler ça de la magie, mais il ya très raisons techniques pourquoi il une works-- du pièces magiques de Python est que les variables peuvent développer ou rétrécir pour contenir toutes les données types que vous voulez qu'ils. Alors ceci est un 10. Si plus tard sur je affectés à cette n 0,5, il faudrait que 0,5. Peu importe que ce est un int ici et flotter là, tout ce qui utilise ce n va, plus ou moins, être en mesure de souffler long si elle obtient l'un de ces. Sauf qu'il ya quelques très réel raison pour laquelle il ne peut pas utiliser les données de type n qui présente actuellement, à quel point ça va devenir coincée et renvoyer une erreur, et ces sortes de choses. Mais ici, Python ne se soucie pas vraiment ce que il est que je vais rester dans ce phrase, comme, vous voulez cette chose? Cette chose dans tout cela? Ouais, il est une sorte de chose. Je vais rester dans la fin. Ça va être un problème plus tard, si quelqu'un qui veut utiliser cette fin ne peut pas gérer. Ceci est l'un des principaux différences entre Python et C qui le rend facile à écrire des programmes très grand C et le rend plus facile à écrire très petit programme Python. La syntaxe est pas très différent dans ce qu'il fait. Il est un peu différent dans la façon dont il est exprimé. Donc, cela est une très, ce qui est appelé Pythonic, façon de l'écrire. la ligne de la gamme (n), tel est le plage de numéros de 0 à n, inclusif sur le fond et exclusif sur le dessus. Il est donc compris entre 0 et n-1, qui est exactement ce que le code C est en train de faire, sauf qu'il est beaucoup plus facile à regarder peut-être. Le bloc est pertinente pas mis en valeur par des accolades, à la place il est mis hors par cette indentation. Donc, toutes ces lignes sont quatre espaces plus vers la droite, ou comme sujet d'une largeur d'éléphant. Et ce sont ceux qui sont va être exécuté dans ce pour. Si je gâcher le indentation sur cela et je pousser ce imprimé retour au l'empreinte originale, que l'imprimé va quitter la boucle. Contrairement à C, où ici, je fait besoin de se déplacer que accolade fermée autour. Cela signifie que vous ne recevez pas les erreurs que sauter à vous parce que vous mettre une attelle au mauvais endroit. Cela signifie que vous obtenez des erreurs que sauter à vous parce que vous indenté une mauvaise ligne. Il est donc empreintes de super prudent. Espérons que vous étiez super- prudent avec votre empreinte de toute façon, et de sorte que ce ne sont pas beaucoup plus d'un fardeau. Mais une règle de base pour Python, et nous aurons un couple de ces que nous allons passer en revue à travers Au cours de la conversation, est d'essayer syntaxe naturelle avant de regarder quoi que ce soit vers le haut. Donc, cette syntaxe, pour ce nombre dans la gamme, est très caractéristique en termes de style. Beaucoup de choses en Python nous verrons prendre cette forme. Et si vous venez avec un nouvel objet que vous pensez que vous devriez être en mesure de itérer sur cela, dans ce format, il se révèle sans doute soutient ce format. On ne va pas aller au fond de super- les raisons techniques qui est vrai. Mais il est une intuition utile d'avoir lorsque vous vous approchez de programmes Python, que cette chose va juste travailler. Essayez-le. Démarrez la ligne de commande Interprète, voir si cela fonctionne, passer des choses, avant de vous même pas besoin d'ouvrir Google et dire, ce qui est la syntaxe pour cette chose en particulier? Beaucoup de Python, vous pourriez découvrir juste en essayant. Ce cas est encore plus proche à C, puis les fors sont. Notez qu'il n'y a pas de parenthèses. Les parenthèses sont, de nouveau, inoffensif, mais inutile. Il ya une virgule à la fin tout comme les boucles for, et encore, les blocs sont relatifs en retrait plutôt que mis en valeur par des accolades. Ce reste est à l'origine niveau d'indentation, et son bloc concerné en retrait à nouveau. Ceux fonctionnent exactement comme ils le font en C. Ceci est en fait très bien même. Encore une fois, l'impression perd un caractère hors de printf Vous passez quelques ficelles. Il se trouve cordes peut être soit délimitée par des guillemets simples ou doubles. Il n'y a pas de différence, sauf que l'intérieur de des guillemets simples, vous pouvez utiliser guillemets avec abandon, plutôt que de devoir échapper à chacun d'eux. Et à l'intérieur des guillemets, vous peuvent utiliser des guillemets simples avec abandonner sans avoir à leur échapper. Si vous voulez mélanger eux, vous pouvez certainement regarder en ligne comment faire cela. Vous remarquerez que plus ici, Je suis passé à la fin = cette chose. Ceci est un exemple d'une option argument, qui est une de ces choses que Python supporte que le rend très utile. Donc impression a effectivement beaucoup de arguments, qui sont habituellement mis à leur valeur par défaut valeur, mais ici, je l'ai décidé de remplacer celui qui est appelé fin. La raison pour laquelle je dois la remplacer par une chaîne vide est que l'impression en Python, par défaut, imprime une nouvelle ligne après la chose que vous avez dit trop. Donc ce hachage va réellement imprimer un hachage dans une nouvelle ligne. Et si je ne veux pas hachage pour imprimer une nouvelle ligne après, alors je dois dire ne pas imprimer un. Mais, pourtant si, une dernière chose que ce programme est manquant que l'on a est un comprend au sommet. Imprimer est cuit dans Python donc en gros qu'il n'y a pas en-tête ou le module que vous devez notamment, mais carrement pour inclure d'autres choses dans un script Python, Je le ferais dans un format-- très similaire les mots ne sont que légèrement différente. Je l'ai mentionné que nous ne pas avoir besoin d'une principale ici, parce que le Python commence exécuter au sommet. Si je voulais envelopper dans cette fonction, je serait faire comme je this-- dirait def nom de la fonction, arguments pourraient aller ici et nous allons voir certains de ceux plus tard, du côlon, puis de nouveau, cette tout le bloc déclenché est ce qui est opérationnel bloquer pour cette fonction. Donc ceci est la définition de la fonction. Et il ya une déclaration, puis vers le bas ici, je peux juste appeler la fonction. Et encore une fois, le programme interprète, commençant par le haut, verrez ceci est la définition. Il ne sera pas exécuter cette jusqu'à ce qu'il arriver ici, et puis il est comme, oh maintenant vous avez appelé, je suppose que je devrais exécuter. Une chose qui est très commun pour voir dans les fichiers Python, en particulier les fichiers Python qui sont libérés au public et développé et mis au point et by-- entretenu, est quelque chose de ce formulaire. Cela est ainsi parce que basically-- Python, vous commencez au sommet puis vous exécutez vers le bas, Je si je viens d'avoir Mario appelé ici, puis chaque fois que je inclus dans ce fichier un autre fichier, parce que je voulais utiliser est fonction Mario, cet autre fichier serait ont aussi cet appel à Mario en elle. Et quand je courais ce fichier, il serait appeler Mario. Donc il est possible que je ne vouloir exécuter ce si je l'ai fait exécuté ce fichier particulier. Et donc je ne peux conclure ce dans un idiome comme ça, où je dis, si le nom de cette exécution l'environnement est le principal, alors je veux faire ces choses. Sinon quelqu'un d'autre peut use-- inclure mon function-- mon dossier, et juste pour obtenir l'accès à ces fonctions sans avoir à courir les choses que je veux exécuter dans ce fichier. Ceci est, de plus, en option mais très commune. Ces choses sont entirely-- sont exactement le même entre C et Python, certainement dans 3. Je pense que dans 2, l'opérateur de division vous donne parfois de flotteurs quand que vous exploitiez sur ints, et soit vous vouliez que vous avez fait ou pas. Mais plus, moins, et les temps travailler exactement comme on pouvait s'y attendre, sauf sur un peu plus de types. Donc, vous pouvez multiplier par flotteurs ints, et ces sortes de choses. jeu fonctionne exactement de la même chose. Vous pouvez utiliser deux signes égal. inequals-- supérieur à, inférieur que, ces sortes de things-- ont les significations qui vous êtes familier avec eux. Où C utilise ces opérateurs, Python utilise un peu plus anglais ceux lisible. Ainsi, au lieu de deux, l'esperluette, vous littéralement taper le mot «et», «ou», ou pas." Comme dans votre si-- dans votre instructions conditionnelles, Nous avons vu que cette syntaxe dans C correspond à cette syntaxe en Python. Et il n'y a pas beaucoup différente là, sauf pour un peu de ponctuation sur les côtés. Encore une fois, où C serait autre si, Python utilise Elif, mais ceux-ci sont pour la plupart les variations du niveau de surface. Itération de ce genre est souvent écrit dans cet idiome en Python. Vous pouvez fabriquer ce genre de chose avec une boucle while à l'extérieur si vous voulez, mais vous certainement ne pas avoir à. Et encore une fois, si vous vouliez la imprimer éléments d'un tableau vous pourriez faire de cette façon. Une des choses amusantes à propos de Python si, est que vous ne devez pas à utiliser ce paradigme, et vous pouvez utiliser un un peu plus élégante un. Vous dites dans une aire. Ainsi, plutôt que d'aller ici et qui déborde les indices, et puis en tirant des éléments individuels, vous dites la pour réellement juste courir sur les éléments eux-mêmes. Et puis ce que vous faites à l'intérieur peut fonctionner directement sur les éléments, ce qui est assez amusant. Et nous allons see-- nous utiliserons cet idiome encore et encore que nous marchons à travers le code. Ceci est, de nouveau, par exemple, de quelque chose que je vais Python appeler la magie, mais il ya raisons très techniques pourquoi cela fonctionne. Et il ya des choses techniques qui besoin pour être vrai à propos de tableau en ordre pour que cela fonctionne dans les coulisses. Le fait est que la plupart des types que vous vous attendez que cela fonctionne avoir eu cette mise en oeuvre pour vous dans le langage intégré. Une autre chose que ce serait bien si cela a fonctionné dans toutes les langues, mais il ya quelques raisons pour lesquelles il ne peut pas, Imprimer cette chaîne fois ce nombre. Met en Python, ce fait exactement ce que vous voulez, ce qui est juste amusant, et des moyens que nous pouvons réellement réduire ce programme, nouveau mario.c. Plutôt que d'itération beaucoup, nous pouvons juste dire, je veux certains nombre de places, Je veux le nombre de tables de hachage, et quelques tables de hachage à la fin. Et encore une fois, nous utilisons ce format. Ici, nous passons en une variable de cette façon. Encore une fois, on n'a pas besoin de dire quel type de variable, il est, et la seule fois, nous allons obtenir des erreurs est au moment de l'exécution. Quand quelqu'un essaie passer quelque chose dans, ça va venir dans la fonction très bien. Si nous Wedge ici parce que ce ne sont pas la chose que vous pouvez créer des gammes plus, Je vais chercher une erreur d'exécution là, et je vais devoir déboguer cette façon. Mais en attendant, je ne ai pas être très prudent sur ce que est transmis en, tant dans le réel exécution tout cela fonctionne très proprement. Je ne pouvais même faire de cette un peu plus propre en utilisant une fonction intégrée en particulier sur les chaînes, qui est Justifier à droite. Ceci est juste une fonction utile située autour de la bibliothèque. Il est dans la documentation si vous allez chercher. Et je dis, eh bien je vais devoir cette chaîne, un certain nombre de tables de hachage, et je tiens à justifier pad droit it-- il avec espaces à cette longueur. Encore une fois, ceci est dans le la documentation, ce qui apporte us-- Je vais effectivement clic grâce these-- ce qui nous amène à notre deuxième règle pour Python-- bibliothèque standard méthodes de fonction sont vos amis. Et il est souvent utile de votre temps d'aller chercher je me demande si il ya une chose qui fait juste cela. Il est probablement. Si vous souhaitez pad sur une chaîne, si vous aviez profite de l'arrière la moitié d'une chaîne, si vous aviez tiens à chercher dans une chaîne, si vous souhaitez écraser un couple de choses ensemble avec une chaîne avec des virgules entre eux, il ya bibliothèque standard fonctions pour ce faire. Et il rend votre vie plus facile si vous les utilisez au lieu de rouler sur tout sur votre propre dans cinq lignes de code ici, cinq lignes de code ici. Cela commence vraiment à ajouter jusqu'à temps réel. Une des choses intéressantes sur comment cela est appelé. Vous remarquerez qu'il ya une chose dot. Je dois un objet sur la gauche, et puis je appelé une fonction un point. Ceci est l'un des paradigmes qui python utilise des procédés de fixation à des objets. Nous allons parler de ce que cela est très brièvement à la fin, mais nous savons que nous pouvons à la fois fonctionner sur les choses en prenant cette dot chose en disant que ce soit, ou par téléphone au une fonction qui prend cet objet et d'autres arguments. Donc, ce sont deux façons les choses se font en Python. Et si un particulier fonctionnalité est mise en oeuvre dans ce style ou ce style est quelque chose que vous devrait chercher jusqu'à ce que vous obtenez un coup pour lesquels on il est susceptible de tomber. Il ya une plus ou moins cohésive philosophie Python que vous absorbez la plupart du temps en écrivant beaucoup en elle. À un certain point, lequel de ces quelque chose va être mis en œuvre devient naturel. Pour l'instant, il est juste quelque chose vous apprenez que vous comprenez chaque chose individuelle. Bibliothèque tellement standard fonctions sont vos amis, et ils permettent d'écrire des choses qui relever ce beaucoup d'espace vraiment peu de temps, vraiment élégante. Et cela est en fait probablement plus lisibles, je dirais, que le programme C là bas. Sans parler du fait que est si bref, vous pouvez adapter à tout un éléphant dans l'espace que nous avons sauvés. Une autre chose, cette mise en œuvre est un de Mario qui est point C, qui, je pense est la plus courte, vous pouvez l'obtenir. Il n'a pas l'int get, mais il codes disques de la valeur 10 de la même manière que celui-ci ne. Avère que celui-ci horloges au 84 caractères, alors que Python est 64. Et cela est infiniment plus lisible que ces ordures ici. Donc python est plus efficace dans l'espace. Il est légèrement moins efficace dans le temps, mais pas de beaucoup. Les listes sont une chose importante en Python. Nous ne les avons pas vu, mais ils fonctionner un peu comme le font les tableaux en C. Donc, ici, vous pouvez les déclarer, vous pouvez les passer dans une chose. Maintenant carrés détient une tableau de ces choses. Encore une fois, nous ne sommes pas déclarés Type, mais si jamais nous essayons de l'utiliser, tout ce que vous vous attendez à travailler sur un tableau d'entiers va travailler sur un tableau d'entiers. Ceci est une chose qui vous ne pouvez pas absolument faire en C, parce que la mémoire, il est tellement mains sur, mais il est très facile de le faire en Python. Si je veux que mon tableau pour être plus grand, je peux ajouter un élément à lui et il est très bien. Que se passe dans les coulisses? L'interprète ira sortir et obtenir un peu de mémoire, et peut-être que ça ira un peu de mémoire supplémentaire, donc je ne pas si je ne ai pas à réallouer à chaque fois. Mais combien ont plus mémoire at-elle besoin? Ce ne sont pas des décisions que vous avez à faire, ce sont des décisions que les interprète va faire. Ici, nous pouvons voir la gamme prendre deux arguments, mais il va toujours être inclusif du haut de sorte que nous ajoutons 1 il. Ceci est une expression qui est une encore plus façon intelligente pour écrire ce genre de choses. Il a appelé compréhension de liste, et voici ce que nous disons est que je voudrais mettre en i au carré pour chaque valeur de i dans cette gamme. Cette chose sur la droite pourrait être un autre tableau, et cette chose sur la gauche être une fonction particulière qui prendrait en i comme une variable et donnez-moi sur un certain résultat. Ce que je vais faire est, Je vais construire un tableau qui est toutes ces choses pour chaque valeur dans cette gamme. Et cela est super élégant, super court, et il est très clair ce que cela signifie. Ceci est l'un des things-- cela est nouveau, un de-- très emblématique de la raisons que les gens comme Python. Si vous aimez la programmation comme cela, alors Python est une langue que vous aimeriez apprendre. Et encore, il ya technique raisons pour lesquelles cela fonctionne. Mais en ce qui nous concerne, nous avons plus ou moins ne nous soucions pas. Donc, si vous souhaitez imprimer des listes, certains des mêmes expressions idiomatiques sont utiles. Pour i dans cette gamme, nous avons pu indice par le biais de toutes les choses puis imprimez-les tous. Et vous verrez Len ici. Si vous avez toujours voulu obtenir la longueur du tableau, qui est très facile en Python, il est très difficile en C. Ce serait imprimer exactement ce que vous attendez de lui. Nous pourrions aussi, comme nous l'avons vu auparavant, itérer sur les éléments dans le tableau directement, puis seulement parler eux, plutôt que d'avoir l'indice Retour dans le tableau à chaque fois. Et cela est une chose que vous pouvez faire. Donc, dans C, si vous demandez quelque chose comme ça, impression dirait, qui est un tableau d'entiers. Voilà certainement pas un chaîne, je ne peux pas imprimer. Python plus ou moins ne se soucie pas. Il est comme, est-il un moyen que je pourrait transformer ce pour une chaîne? Ouais, je vais le faire. Et donc je vais juste imprimer cela. Cela signifie que vous pouvez faire des choses like-- ces sont la plupart des parties dures de jeu de quinze ans, écrit très brièvement en Python. Vous verrez qu'il ya un peu de-- ici Je l'ai jeté un nombre entier d'une chaîne, et je dois le faire manuellement. Et je vais ajouter à une autre chaîne, ou autrement Python se confond. Mais si quand vous êtes l'ajout d'une chaîne en entier, suis-je suppose que pour obtenir une integer dos ou une chaîne de retour? Mais encore une fois, si vous venez de appeler str sur une chose, et il ne pourrait en tout possible monde soit converti en une chaîne, il sera probablement converti en une chaîne. Ici, nous voyons l'utilisation de liste imbriquée compréhension sur la gauche, une partie d'indexation, qui est exactement comme vous seriez habitué, et certains l'impression de choses. Encore une fois, nous avons défini un certain fonctions et nous les appelons bas dans le principal lorsque nous aurons fait le fichier. retour fonctionne exactement comme vous le feriez attendre de travailler avec C Trouver, nous pouvons mettre en place des choses comme this-- voici compréhension de liste il ya une affectation à une variable, et nous pouvons réellement faire encore plus facile. On n'a pas besoin d'écrire la recherche, parce intégré à la langue est si cette chose est dans ce tableau. Return true, sinon retourne faux. Voilà donc l'intégralité de trouvaille. L'intégralité de tri implique appelant sorte, qui est-- il ya implémentations de ce construit dans certaines bibliothèques C. Si vous souhaitez que cette sorte d'arrière, vous peut remplacer cette option argument en sens inverse avec un vrai. Et si vous souhaitez trier plus cordes, qui est intégré ainsi. Donc, cela ne veut pas dire que ce sont choses que vous devez faire tous les jours, mais l'idée est que cette est la philosophie de Python, que toutes ces choses que vous feriez sorte de vouloir faire sont intégrés. Et la plupart des fonctions standard, de sorte sorte, la longueur, que ce soit, soutenir entrée plus logiquement sensible. Vous appelez len sur un tableau de la même façon dont vous appelez len sur une chaîne. Vous multiply-- vous triez les chaînes de la même manière vous triez des tableaux. La plupart des fonctions standard que les gens construisent, et la plupart des tiers bibliothèques personnes construire, parce qu'ils sont émulant la conception de la bibliothèque standard, peut être appelée sur tout ce que vous êtes comme, pourquoi cela fonctionne pas seulement, en C. Plus ou moins, il travaillera en Python parce que les gens travaillent derrière la figure ce qui est une chose et ensuite fonctionner de manière appropriée sur elle. Encore une fois, formation technique, mais il rend nos vies plus faciles que les programmeurs. Alors, voici le fichier I / O. File I / O a beaucoup de petites choses qui font qu'il est compliqué, et ainsi il existe des ressources en ligne, mais en un mot, vous appelez ouvert sur un fichier nom avec un type particulier. Voilà donc lire, lire et écrire, écrire ou ajouter. Vous avez lu un certain nombre de personnages et vous impression que ceux qui, vous aurez Bonjour! Je veux dire, comme ce fichier avait Bonjour! Dans ce document, appeler à lire, et ce que vous obtenez en retour est une chaîne qui a tout du reste de la matrice, ou la totalité du reste du fichier. Si vous appelez de relire, vous êtes à la fin du fichier, et ainsi vous ne recevez pas rien et vous aurez donc fermer. Encore une fois, cela est plutôt que .close fermer le fichier, car il serait en C. Ceci est plus ou moins parce que f est un chose, et que vous souhaitez pour f pour fermer. Mais le fichier de base I / O est pas particulièrement compliquée. Encore une fois, si vous souhaitez ouvrir un fichier, si vous souhaitez lire une ligne particulière, vous pouvez sortir de particulier line-- il ya built-ins pour cela. Si vous souhaitez écrire un chose, vous pouvez écrire cela. Si vous souhaitez écrire individuelle morsures, vous pouvez écrire les. Et si vous souhaitez parcourir sur les lignes d'un fichier individuellement, comme nous l'avons fait dans un morceau de il ya quelques semaines, vous pouvez faire ça. Encore une fois, la plupart des objets que vous auriez tiens à être en mesure de parcourir soutien itération sur eux. Dans Pythons, un fichier est peut-être une chose qui Je voudrais parcourir ligne par ligne. Si elle était un dictionnaire de mots et je étais essayer d'obtenir les particuliers mots de sortie, puis, au sein de cette boucle, ligne, il va être chaque mot à son tour et ce va être exécuté pour chaque ligne dans le fichier jusqu'à la fin du fichier. Et encore, si je imprimé sur chaque ligne, les lignes viennent avec de nouvelles lignes, donc je suis la mise la fin revenir à une chose pareille. Ensuite, je reçois le contenu de mon dossier. La deuxième chose qui fonctionne dans certains égards, comme les listes, et à certains égards comme quelque chose de sensiblement plus de puissance, sont des dictionnaires, qui sont vraiment cool d'utiliser, mais sont essentiellement hachage tables dans le déguisement. Vous créez un en utilisant exactement deux caractères, ce qui est génial si vous avez essayé de mettre en œuvre la Table hachage pour votre jeu de problème, vous savez beaucoup de douleur qui peut être. Mais les gens ont fait , et fait si bien, que vous ne devez pas vous en inquiéter plus. Ensuite, vous pouvez insérer des choses individuelles. Tables-- ou dictionnaires Hash ne sont pas particulièrement attention à ce que vous stockez en eux. Donc, si certaines entrées sont des nombres, et certaines entrées sont des listes, si certaines entrées sont d'autres dictionnaires, et certaines entrées sont des chaînes, Python fait pas beaucoup de soins. Encore une fois, si vous allez en elle attend une chaîne et ce que vous obtenez en retour est un tableau, qui est votre problème. Et peut-être il est faute de celui qui pensé qu'il était de mettre les choses dans le dictionnaire, peut-être était-vous. Si tel était quelqu'un d'autre, nous espérons qu'ils étaient bien comportés sur ce qui se passait dans le dictionnaire et ne pas laisser de pièges pour vous de tomber. Mais les fonctions standard sera vous redonner les choses bien élevés. Alors ils disent ceci retourne sauvegarder un dictionnaire de chaînes, alors tout ce que vous allez de sortir de est une chaîne. Si vous faites partie de cette et voyages vous, eh bien, que peut-être sur vous. Python vous donne certainement assez de corde pour vous pendre, si vous le souhaitez. Maintenant, nous pouvons imprimer individuelle éléments de ceci et cela retours exactement ce que vous attendez. Exactement ce que vous attendez, je suppose, est une phrase que je suis en utilisant un lot, mais cela est plus ou moins comment fonctionne Python. Si vous demandez une chose qui est pas il, Python jettera une erreur et il vous quitter sur quel que soit le programme que vous étiez dans. Il va effectivement imprimer plus d'informations que cela, il va pointer vous-- ça va ajouter une ligne, et ainsi. Et, encore une fois, peut-être que nous voulons pour itérer sur dictionnaires et de trouver toutes les choses en elle. Ici, nous sommes itération sur deux choses en même temps. Et nous allons le faire avec une clé, la valeur, mais ensuite imprimer tous ces aspects. Et si nous voulions cast-- si nous avons effectivement couru ce, nous aurions des ennuis parce on-- quand nous sommes allés avec David, il ne pouvait pas add-- si nous ne jeter à une première chaîne, nous ne pouvions pas ajouter ce tableau de chaînes sur une chaîne. Mais si nous jetons à un chaîne, nous obtenons quelque chose comme ça, qui est peut-être ce que nous aimerions lire. Et cela est Speller. Nous venons de lire dans les choses. Donc, nous pouvons lire dans mots individuels en tant que lignes. Nous couper la dernière chose, donc côlon moins 1 CHOMPS hors la dernière chose que nous-- le dernier caractère d'une chaîne. Nous dirons. OK, chacun de ceux obtient inséré dans ce dictionnaire, la cartographie à une valeur de 1. Nous ne faisons pas particulièrement soucier de celui-là, mais il est juste là pour dire, eh bien, cette chose que je vais mettre dans le dictionnaire. Parce que plus tard, ce que nous sommes va faire est que nous sommes allez dire, eh bien, si elle est dans le dictionnaire du tout. Encore une fois, ce chèque de l'adhésion est en exploitation l'aide d'un tout autre algorithme que ce sera dans une liste, mais nous appelons cela de la même manière, ce qui est une partie de cette couche de sucre de Python les choses de sorte qu'ils sont plus faciles à utiliser. Et encore une fois, nous avons vu des choses comme ça avant. Ceci est essentiellement trouver, ou il est exactement la même syntaxe que de trouver, mais est en fonctionnement sur une structure totalement différente. Et nous ne nous soucions pas particulièrement. Donc, ce sont les choses que vous ont été invités à mettre en œuvre pour Speller. À ce rythme, nous allons obtenir plus ou moins tous les psets fait. Auditoire: Alors que essentiellement vient tout juste de retour comme mal orthographié dans le cas contraire correspondre à quelque chose dans le dictionnaire? ROSS Rheingans-YOO: Oui, oui. Et oui, ceci est un l'adaptation d'un problème réglé qui vous demande de faire exactement cela. Public: Pourquoi la ligne moins 1 là-bas? ROSS Rheingans-YOO: Donc, lorsque vous itération sur un fichier demandant par des lignes, les lignes venir avec un caractère de nouvelle ligne à la fin de la it-- moins 1 est juste pour acheter ceux off. Et cela est particulièrement souple moyen de l'indexation dans les choses. Donc, si vous avez une chaîne, et vous souhaitez, eh bien je suis va commencer à trois caractères et je vais aller à la fin. 3 colon va le faire pour vous. Si vous êtes comme, je veux commencer à la début et aller à la dernière moins 1 caractère, du côlon moins 1. Et si vous vouliez aller à partir de la troisième au moins première, alors vous diriez 3 moins 1. En outre, si vous souhaitez indexer dans les choses de comptage de l'arrière, vous venez de l'indice avec les numéros de moins. Et parce que, où C exploserait ou peut-être vous nourrir autre mémoire que vous ne disposez pas accès à entendre que vous pouvez dire moins 1 signifie le dernier mais 1 caractère dans une chaîne. Les modules sont version-- sont des analogues aux bibliothèques C et sont utiles pour beaucoup de choses. A beaucoup de choses que vous feriez envie de faire en Python, en plus simples manipulation de variables, vous voulez accrocher dans le grandes bibliothèques avec plus grande interfaces et plus capacités d'interaction avec d'autres parties du monde. sys est un de ceux avec un tas d'outils qui sont utiles pour interagir avec le système lui-même et va importer comme import sys. Il ya plus de documentation que, que vous pouvez aller ici, ou vous pourriez trouver sur Google par googler sys Python. Vous tapez entrez. Le premier lien va être la documentation en Python 2, la deuxième liaison va être la documentation Python 3. Et si nous avons écrit sur un fichier qui avait l'air Si comme this-- en particulier, nous sommes regardant fonctionnant sur arguments de ligne de commande, comme nous avons appris à faire très dès le début de cette classe. Cela ne veut pas difficile. Vous pouvez sortir argv, qui est une de ces choses qui est mis en oeuvre par sys. Il est pas intégré à la forfait de base, mais encore une fois, vous peut étendre par l'importation cette fonctionnalité de sys. Vous l'appelez sys. peu importe. Ici il ya argv. Il ya en fait pas argc dans sys, parce que vous peut obtenir si facilement en appelant len. Nous avons ensuite imprimés sur, puis nous couru sur notre echo-args.py terminal. Nous revenons un tableau, qui est ce premier argument. Encore une fois, ceci est argv 0, qui est la nom de la chose qui a obtenu appelé. Si nous l'avons appelé avec supplémentaire arguments, nous obtiendrions ceux qui reviennent. Ceci est une façon de faire arguments de ligne de commande. Si vous voulez drapeaux où vous tournez choses particulières sur ou override un défaut particulier, argparse est votre ami. Et encore, vous trouverez que en ligne au python argparse chez Google. Il ya un couple d'utilité modules que vous vous trouvez à l'aide et encore, si vous passez du temps de cette langue importation jsons pour lire et sortir de json fichiers, pas si compliqué. Vous ouvrez un fichier, vous avez appelé json.load sur ce fichier et vous obtenez une chose. Quelle est cette chose? Il est un objet JSON. Où que JSON a tableau, Python a tableaux. Où que JSON a tableaux associatifs, Python dictionnaires, cordes, et des numéros, et ainsi de suite. Vous voulez vider que, vous ouvrir un nouveau fichier, vous appelez décharge, et les charges et décharges à entrer et sortir des chaînes. De même, cornichon est appelée fondamentalement de la même interface. Il est légèrement plus utile si vous êtes le dumping des objets Python. Donc, si vous avez toujours voulu sauver une version de l'état actuel d'une variable d'un avenir terme de votre programme, cornichon est Python bibliothèque pour le faire. Si vous avez toute sorte de variable qui peut être exprimé soit dans les mots et les caractères et comme bytes-- comme ce dictionnaire, nous pourrions écrire, nous pourrait écrire que comme un objet JSON, qui était littéralement ces caractères. Et puis, il serait très facile pour un être humain pour l'ouvrir up-- ouvrir et le lire. Si nous le faisions pas particulièrement soucier humains lecture, nous pourrions emballer encore plus efficacement dans des formes qui pourraient plus tard être déballés ou qui pourrait plus tard être gonflé. Et cela permet d'économiser 80% de la l'espace que vos objets pourraient prendre si vous avez écrit sur manuscrite. Vous appelez cornichon bavards même way-- décharge, charge, et puis vous obtenez vos choses en arrière. Donc, si vous écrivez très programmes Python courts vouloir sauver l'Etat, et ensuite lire les reprendre plus tard, des choses comme ça sont vos amis. Que vous pourriez très facilement les jeter comme JSON. La plupart des objets Python peut vider le JSON si il n'y a aucun espoir que structurellement qu'ils puissent être représentés de cette façon. Ce ne sont que la pointe de la iceberg sur des modules qui sont utiles. Donc sys, os, multitraitement, sont sorte de bêtes de somme de base pour des choses nous avons besoin d'interagir avec le système d'exploitation du système de fichiers., comme os.isfile, os.isdirectory, os.makefile, ce sont vos amis. Si vous souhaitez interagir avec un type de fichier particulier, JSON, cornichon, csv. Si vous voulez interagir avec Web pages, l'urllib pour obtenir http pages. bs4-- BeautifulSoup-- il est un merveilleux analyseur pour html. Vous exécutez sur un html et vous obtenir cet objet de tableau imbriqué maintenant, que vous pouvez parcourir plus Lookin, avec comme à la recherche d' si, est, dans, ce qui est fantastique. Il ya un tas de forfaits pour running-- pour faire des choses particulièrement Mathy. Donc, si vous voulez multiplier, inverser, transformer matrices, numpy est utilisé par des personnes tous partout dans le monde pour cela. scipy est encore plus utile des outils dans ce sens. sklearn-- apprentissage machine, traitement du langage naturel, super-trucs utiles, obtient mis en place tout le temps en Python. Et encore une fois, prend légèrement plus d'write-- désolé, prend un peu plus de temps à courir, mais la raison que les ingénieurs ont tendance réels l'utilisation de Python est parce que vous avez tendance à être bloqué sur vous l'écriture du code, plutôt que votre ordinateur exécutant le code. Donc, si vous allez écrire un programme, qui beaucoup d'autres personnes allez utiliser toujours, comme Linux, vous pourrait écrire en C. Si vous étiez va écrire un moteur de calcul, vous pourriez écrire en Python si vous avez besoin de le changer tous les deux mois. Certaines personnes pourraient écrire dans C parce qu'ils sont comme ça. Donc, nous avons vu import sys comme un moyen de faire avancer les choses d'obtenir module dans votre programme. Vous pouvez également importer comme un surnom, si vous le souhaitez. Encore une fois multitraitement est une douleur à taper à chaque fois, donc importer que mp puis quand vous utiliser dans le programme, vous allez dire mp.process, ou ce que vous avez. Si vous souhaitez l'importation une seule chose, afin urllib a une chose appelée demande, de sorte que vous pouvez simplement importer ce. Plus tard, vous ne serez pas invoquer comme urllib.request, mais juste comme demande par lui-même. Et vous pouvez tout importer à partir d'un module si vous souhaitez. Ceci est parfois pas une bonne idea-- ce généralement pas une bonne idée, en fait. Parce que vous very-- parce que si quoi que ce soit dans ce module a un nom que vous voulu utiliser ailleurs dans votre programme, vous ne pouvez pas. Et il est pas toujours évident que tel est le cas. Afin de faire en sorte que ce que vous faisiez était sûr, vous avez besoin d'ouvrir le module et voir tous des noms qui finissent dans there-- toutes les fonctions, toutes les variables qui vivent dans ce module, parce que vous êtes apportant tous les dans votre espace de noms local. Alors, les gens le font. Il est généralement recommandé que vous ne le faites pas. Mais les gens font ça tout le temps parce qu'ils sont paresseux et ne veulent pas taper mp. rien, jamais. Tout ce discours sur les modules apportez-moi autour d'un court exposé sur la façon dont vous concevez des programmes en Python. La première étape est de vérifier pour voir si quelqu'un d'autre a déjà fait la chose, ou fait 90% de la chose. Il ya des chances qu'ils ont probablement, et vous doivent aller chercher leur chose et géré cela. Ou écrire un wrapper autour d'elle pour l'adapter à vos besoins. Il est seulement après que a échoué que vous feriez alors continuer et commencer à penser à write-- comment vous mettriez cette chose ensemble. Il ya beaucoup de choses là-bas, et que ce l'un des plus utile choses à propos de Python. Comme la langue est élégant, la langue est facile à utiliser, mais aussi parce que il est si élégant et facile à utiliser, les gens ont utilisé pour un temps long et il ya beaucoup de choses là-bas que vous pouvez exploiter pour votre propre usage. Donc dernière règle de Python est, quelqu'un d'autre a déjà probablement écrit un module pour que, quelqu'un d'autre a déjà probablement écrit une bibliothèque pour cela. Avant d'essayer de faire une chose, regardez pour voir si elle a été mise en œuvre. Il est pas si difficile. Tous les modules que je mets en place avant, avec peut-être une exception, sont pré-installés dans tous les l'installation standard de Python. Et ainsi, avec un appel à importer que ce soit, vous avoir tout de cette fonctionnalité sur le bout de vos doigts. Prend conclure cette parler, il ya quelques choses que je l'ai laissé comme des boîtes noires et une sorte de passé sous silence, et il ya un peu blanche se trouve que je l'ai dit que, par souci d'honnêteté, Je vais au moins point ici, même si je ne veux pas aller profondes super dans tous les et leurs explications techniques. A beaucoup de choses que je l'ai appelé Magic est ce que les gens appelleraient programmation orientée objet. Donc, il ya beaucoup de things-- si les variables sont très souvent pas octets simples assis dans, mémoire, mais sont très compliquée les objets qui ont interne Etat sur les fonctions et beaucoup les variables d'cachés, beaucoup de fonctionnalité cachée, vous permet de les transformer en chaînes, qui vous permet d'itérer sur eux. Et si vous êtes writing-- et la raison pour laquelle ils avoir tout de cette riche fonctionnalité est parce que les personnes-- les architectes de la language-- ont disparu par et pour toutes les normes objet, mettre à la fonctionnalité de dire ceci est comment cela est comment cela se passe pour fonctionner si quelqu'un veut pour itérer sur elle. Donc, tout ce que quelqu'un pourrait éventuellement vouloir parcourir, a écrit dans logique manuellement sur la façon dont vous êtes censé itérer sur cet objet. Tout ce que vous pourriez peut-être voulez déversés dans une chaîne logique a écrite. Ceci est la fonction que vous appelez si vous voulez vider ceci à une chaîne. C'est pourquoi vous ne pouvez appelez len sur les choses, ce est pourquoi vous pouvez appeler dans, cela est pourquoi vous pouvez appeler en cas de sur tout que vous voudriez, parce ceux qui sont tout emportant avec eux, le savoir-faire technique pour faire cela. Ceci est quelque chose que je suis super-ne vais pas aller dans. Mais pour chose en liste est subtilement différente de style C pour les boucles, et vous pouvez lire tout sur ce que le Internet si vous êtes intéressé. Il ya un côté sombre à tous de ce que je l'ai mentionné, donc il ya deux choses. La première est que cette orienté objet programmation ajoute beaucoup de frais généraux au hasard des choses, si vous vous retrouvez en utilisant une mémoire beaucoup plus; vous vous retrouvez avec un peu plus de temps que vous ne le feraient autrement. Le other-- mais plus côté sombre à cette insidieuse est, si les choses se comportent exactement comme vous voulez qu'ils sans que vous ayez à penser super dur quant à savoir si cela devrait être un int ou si devrait y avoir une flotteur, il se pourrait que par ici vous produisez un int, mais ici vous pensent, mais ils vont always-- désolé, il se peut que ici vous produisez un flotteur, mais quand vous arrivez à la deuxième partie de votre programme, vous pensez, eh bien, mais ils vont toujours passer moi un int. Et si elles ne le font pas, il est possible que vous coincé quelque part, si vous essayez de l'utiliser à l'index dans un tableau, ou ce que vous avez. Donc, l'un des réels choses utiles à propos de C est il vous oblige à vraiment réfléchir dur avant de faire any-- avant de vous mettre toute variable à l'existence, comme ce est le type de cette variable. Et il va avoir ce type pour tous les temps. Ce n'est pas vrai Python, et en fait, vous can-- si vous êtes juste sorte d'aller à l'oreille, et vous faites certaines décisions une façon en un seul endroit, et certaines décisions d'un manière à l'autre endroit sans mettre suffisamment de choses derrière les scènes de l'autre endroit pour attraper les choses correctement, vous peut obtenir quelques erreurs étranges. Et le programme peut continuer à courir pour un temps très long, car il est faire beaucoup de travail pour dire, bien cette chose pourrait fonctionner de cette façon, donc je vais courir de cette façon. Et de fait, le fait qu'il pousse transmettre à travers un grand nombre de petites erreurs des moyens qui, lorsque souvent une erreur est réellement mauvais et que vous ne voulez vraiment régler le problème, il finit miles away-- le programme finit par arrêter miles loin à partir de quand vous avez eu votre erreur. Et si une chose que nous aimerions programmes à faire, une chose sometimes-- que nous aimerions programmes à faire quand nous le débogage est sûr très fort et très sûr rapidement lorsque quelque chose va mal. Python est très mauvais à cela. Python est très bon à pas défaillant et rouler vers l'avant à travers des choses inattendues. Donc, ce qui est utile pour quand vous écrivez de petits programmes. Lorsque vous obtenez compliquée bogues parfois prend beaucoup de temps à les démêler. Donc, il ya un côté sombre à tous De ce fait, comme il fonctionne. Il fonctionne exactement comme vous attendez de lui. Sauf que quand il ne le fait pas, vous finissez dans un endroit complètement différent et en essayant de comprendre où il était ce que vous êtes allé mal. Collecte des ordures ménagères afin est-- une chose que vous remarquerez est que l'une de ces choses qui Je l'ai amené dans existence-- ces tableaux, ces dictionnaires, ces objets, ceux-ci ne sont jamais libérés files--. Il n'y avait pas d'appel gratuit dans toute de cet exposé. Et ce fut sur le C-côté, parce nous ne sommes entrés dans ces choses. Mais en Python côté, il n'y a pas de droits. Les choses deviennent automatiquement libéré quand Python pense que vous n'êtes pas regardant. Il est vraiment bon de ne pas libérer des choses qui vous pourriez encore éventuellement être regardant, mais cela signifie que si vous étiez va affecter cette grande chose, et vous êtes comme, oh Je suis fait avec elle maintenant, il est difficile de dire à Python que vous avez fini avec lui maintenant. Vous pouvez parfois régler cette variable soit aucun, et espérer que finalement le garbage collector vient à travers et nettoie it out. Mais encore une fois, vous ne faites pas avoir le contrôle sur cela. Et l'une des raisons que les gens utilisent C pour vraiment performances choses essentielles, est cette capacité à vraiment savoir quand la mémoire est allouée et quand il est libéré, et ont beaucoup de contrôle sur disant, Je suis en utilisant pas plus de mémoire que je dois. Qui est quelque chose que Python est pas terrible au. AUDIENCE: Puis-je vous poser une question? Qu'est-ce que vous voulez dire par échouer fort? ROSS Rheingans-YOO: Donc, si quelque chose va mal et vous êtes dans le débogage mode, vous feriez bien souvent veulent votre programme pour vous dire exactement où il est allé mal, et non pas juste arrêter de courir tranquillement. Mais vous auriez fait à imprimer toutes sortes d'informations sur comme, ici était présent. Cette chose est arrivé Si vous imprimez un wen-- si vous utilisez un Server-- web AUDIENCE: [inaudible] ROSS Rheingans-YOO: Ouais, si vous utilisez un serveur Web, il est parfois mal si vous êtes toujours des erreurs de jeter, et vous dites, ainsi cela ne fonctionne pas. Je vais arrêter. Je vais juste d'ignorer et continuer sur. Parce que vous pouvez obtenir dans des centaines de ces erreurs et ne pas les voir. Il serait certainement utile à des fins de débogage si chaque fois que votre serveur web a fait une erreur, vous aviez enregistrements durables de cela. Peut-être que vous voulez, même le programme d'arrêter, de sorte que ces enregistrements ne pas se faire enterrer sous les choses. Mais encore une fois, qui est dans le mode de débogage. Souvent, dans le mode de production, le monde est un peu différent. Et dans de minuscules scripts que je suis en cours d'exécution, où la chose que je dis à faire pourrait être seulement un peu au large de ce que je voudrais qu'il fasse, puis sorte de pousser à travers erreurs est quelque chose que vous pourriez vouloir. Et dans ces cas, certainement Python gagne vraiment ses départs. La dernière chose que je ne parlais pas dans this-- que je ne parlais pas mais peut être vraiment rageant le premier fois que vous avez une de ces erreurs, et les deuxième et troisième et quatrième fois que vous avez un de ces erreurs. Python, je l'ai mentionné qu'il utilise l'espace blanc pour vous dire à quel niveau d'indentation et ce bloc fonctionnel que vous êtes, il traite des onglets et des espaces différemment. Donc, si vous onglet plus de quatre, puis la ligne suivante a quatre espaces, même si elles apparaissent comme le même montant dans votre éditeur, Python ne traite pas la même chose. En fait, Python traite onglets et des espaces comme l'huile et l'eau. Ils sont juste des choses différentes. Il n'y a pas particulier longueur qui est un onglet, il est donc pas comme un onglet égale 8 espaces, et ainsi vous obtiendraient autour d'elle de cette façon. Comme, quand il dit, ce qui niveau de l'espace blanc que je suis à, il est actuellement à la recherche d'un motif d'espaces et les onglets. Et donc, la meilleure façon de faire face à cette est de toujours utiliser des espaces tout le temps. Et en fait, dans le Cloud9 IDE et le CS50 IDE, vos inserts de touche TAB quatre espaces en place d'un onglet, ce qui est super utile. Bien plus, si vous avez écrit un Python programme avec des onglets qui serait bien, il est juste si quelqu'un entra et essayé d'ajouter une seule ligne à votre programme eu quatre espaces pour chaque onglet, elle allait se briser. Et elle allait se briser de manière qui est vraiment pas visible. Bien que l'erreur réelle message qu'il jette a à voir avec nouvelle retrait ne devrait pas ici, ou-- si elle parle tirets et il semble que ça ne va pas, il est probablement parce que il ya un problème onglet espace. Ils sont toujours rageant de débogage. Le plus grand ensemble en cet exposé, que je ne accès car il est vraiment , un sujet compliqué subtile, et n'a pas été nécessaire de faire une des choses que nous avons fait jusqu'ici, sont un concept appelé tuples. Ils sont là tout comme le tableaux que vous ne pouvez pas modifier. Ils obtiennent utilisés partout parce ils sont utiles pour beaucoup de choses que les tableaux ne sont pas utiles pour. Mais si vous souhaitez faire un tableau, et puis promettre l'interprète que vous ne vont jamais à vouloir modifier ce chose-- en fait, si vous souhaitez modifier, vous allez faire une nouvelle avec la nouvelle valeurs dans it-- ceux sont tuples. Plutôt que de produire eux avec crochets, vous les produire avec parenthèses. Pourquoi vous voulez utiliser ces choses, est un peu d'une question. . La seule chose que je vais dire à ce sujet est que vous peut utiliser uplets Les indices pour les dictionnaires. Vous ne pouvez pas utiliser des tableaux comme Les indices pour les dictionnaires. Et pourquoi est, à nouveau, technique et Je ne vais pas courir dedans. Le pset que je n'y ai pas touché dans ce discours est pset6. Donc, voici comment vous «D mettre en œuvre a-- est ici comment vous pourriez mettre en œuvre pset6 en Python. Gardant à l'esprit l'Python cycle de conception, la première chose ce que vous faites quand vous êtes l'écriture de programmes est de vérifier pour voir si quelqu'un a déjà fait. En fait, si vous voulez à serve-- Apache 50 environ ce fait, sauf qu'il ne vient pas standard installé sur des machines Linux. Python fait, et le Python simple serveur HTTP fait aussi bien. Si jamais vous êtes sur une machine Linux, ou à l'extérieur Cloud9 IDE du CS50 et vous souhaitez servir ce courant répertoire pour un port particulier, python-m SimpleHTTPServer port dessert que. Vous pouvez également importer le simple serveur HTTP et il a beaucoup de fonctionnalité si vous voulez personnaliser, ou le modifier, ou sont exploités it-- harnais à exécuter vos propres services de serveur. Voilà donc Python en un mot. Et cela a été CS50. Je vous remercie.