[
  {
    "path": "LICENSE",
    "content": "Copyright (c) 2020 Mathematics and Informatics Center, The University of Tokyo.\n\nAttribution-NonCommercial-NoDerivatives 4.0 International\n\n=======================================================================\n\nCreative Commons Corporation (\"Creative Commons\") is not a law firm and\ndoes not provide legal services or legal advice. Distribution of\nCreative Commons public licenses does not create a lawyer-client or\nother relationship. Creative Commons makes its licenses and related\ninformation available on an \"as-is\" basis. Creative Commons gives no\nwarranties regarding its licenses, any material licensed under their\nterms and conditions, or any related information. Creative Commons\ndisclaims all liability for damages resulting from their use to the\nfullest extent possible.\n\nUsing Creative Commons Public Licenses\n\nCreative Commons public licenses provide a standard set of terms and\nconditions that creators and other rights holders may use to share\noriginal works of authorship and other material subject to copyright\nand certain other rights specified in the public license below. The\nfollowing considerations are for informational purposes only, are not\nexhaustive, and do not form part of our licenses.\n\n     Considerations for licensors: Our public licenses are\n     intended for use by those authorized to give the public\n     permission to use material in ways otherwise restricted by\n     copyright and certain other rights. Our licenses are\n     irrevocable. Licensors should read and understand the terms\n     and conditions of the license they choose before applying it.\n     Licensors should also secure all rights necessary before\n     applying our licenses so that the public can reuse the\n     material as expected. Licensors should clearly mark any\n     material not subject to the license. This includes other CC-\n     licensed material, or material used under an exception or\n     limitation to copyright. More considerations for licensors:\n    wiki.creativecommons.org/Considerations_for_licensors\n\n     Considerations for the public: By using one of our public\n     licenses, a licensor grants the public permission to use the\n     licensed material under specified terms and conditions. If\n     the licensor's permission is not necessary for any reason--for\n     example, because of any applicable exception or limitation to\n     copyright--then that use is not regulated by the license. Our\n     licenses grant only permissions under copyright and certain\n     other rights that a licensor has authority to grant. Use of\n     the licensed material may still be restricted for other\n     reasons, including because others have copyright or other\n     rights in the material. A licensor may make special requests,\n     such as asking that all changes be marked or described.\n     Although not required by our licenses, you are encouraged to\n     respect those requests where reasonable. More considerations\n     for the public:\n    wiki.creativecommons.org/Considerations_for_licensees\n\n=======================================================================\n\nCreative Commons Attribution-NonCommercial-NoDerivatives 4.0\nInternational Public License\n\nBy exercising the Licensed Rights (defined below), You accept and agree\nto be bound by the terms and conditions of this Creative Commons\nAttribution-NonCommercial-NoDerivatives 4.0 International Public\nLicense (\"Public License\"). To the extent this Public License may be\ninterpreted as a contract, You are granted the Licensed Rights in\nconsideration of Your acceptance of these terms and conditions, and the\nLicensor grants You such rights in consideration of benefits the\nLicensor receives from making the Licensed Material available under\nthese terms and conditions.\n\n\nSection 1 -- Definitions.\n\n  a. Adapted Material means material subject to Copyright and Similar\n     Rights that is derived from or based upon the Licensed Material\n     and in which the Licensed Material is translated, altered,\n     arranged, transformed, or otherwise modified in a manner requiring\n     permission under the Copyright and Similar Rights held by the\n     Licensor. For purposes of this Public License, where the Licensed\n     Material is a musical work, performance, or sound recording,\n     Adapted Material is always produced where the Licensed Material is\n     synched in timed relation with a moving image.\n\n  b. Copyright and Similar Rights means copyright and/or similar rights\n     closely related to copyright including, without limitation,\n     performance, broadcast, sound recording, and Sui Generis Database\n     Rights, without regard to how the rights are labeled or\n     categorized. For purposes of this Public License, the rights\n     specified in Section 2(b)(1)-(2) are not Copyright and Similar\n     Rights.\n\n  c. Effective Technological Measures means those measures that, in the\n     absence of proper authority, may not be circumvented under laws\n     fulfilling obligations under Article 11 of the WIPO Copyright\n     Treaty adopted on December 20, 1996, and/or similar international\n     agreements.\n\n  d. Exceptions and Limitations means fair use, fair dealing, and/or\n     any other exception or limitation to Copyright and Similar Rights\n     that applies to Your use of the Licensed Material.\n\n  e. Licensed Material means the artistic or literary work, database,\n     or other material to which the Licensor applied this Public\n     License.\n\n  f. Licensed Rights means the rights granted to You subject to the\n     terms and conditions of this Public License, which are limited to\n     all Copyright and Similar Rights that apply to Your use of the\n     Licensed Material and that the Licensor has authority to license.\n\n  g. Licensor means the individual(s) or entity(ies) granting rights\n     under this Public License.\n\n  h. NonCommercial means not primarily intended for or directed towards\n     commercial advantage or monetary compensation. For purposes of\n     this Public License, the exchange of the Licensed Material for\n     other material subject to Copyright and Similar Rights by digital\n     file-sharing or similar means is NonCommercial provided there is\n     no payment of monetary compensation in connection with the\n     exchange.\n\n  i. Share means to provide material to the public by any means or\n     process that requires permission under the Licensed Rights, such\n     as reproduction, public display, public performance, distribution,\n     dissemination, communication, or importation, and to make material\n     available to the public including in ways that members of the\n     public may access the material from a place and at a time\n     individually chosen by them.\n\n  j. Sui Generis Database Rights means rights other than copyright\n     resulting from Directive 96/9/EC of the European Parliament and of\n     the Council of 11 March 1996 on the legal protection of databases,\n     as amended and/or succeeded, as well as other essentially\n     equivalent rights anywhere in the world.\n\n  k. You means the individual or entity exercising the Licensed Rights\n     under this Public License. Your has a corresponding meaning.\n\n\nSection 2 -- Scope.\n\n  a. License grant.\n\n       1. Subject to the terms and conditions of this Public License,\n          the Licensor hereby grants You a worldwide, royalty-free,\n          non-sublicensable, non-exclusive, irrevocable license to\n          exercise the Licensed Rights in the Licensed Material to:\n\n            a. reproduce and Share the Licensed Material, in whole or\n               in part, for NonCommercial purposes only; and\n\n            b. produce and reproduce, but not Share, Adapted Material\n               for NonCommercial purposes only.\n\n       2. Exceptions and Limitations. For the avoidance of doubt, where\n          Exceptions and Limitations apply to Your use, this Public\n          License does not apply, and You do not need to comply with\n          its terms and conditions.\n\n       3. Term. The term of this Public License is specified in Section\n          6(a).\n\n       4. Media and formats; technical modifications allowed. The\n          Licensor authorizes You to exercise the Licensed Rights in\n          all media and formats whether now known or hereafter created,\n          and to make technical modifications necessary to do so. The\n          Licensor waives and/or agrees not to assert any right or\n          authority to forbid You from making technical modifications\n          necessary to exercise the Licensed Rights, including\n          technical modifications necessary to circumvent Effective\n          Technological Measures. For purposes of this Public License,\n          simply making modifications authorized by this Section 2(a)\n          (4) never produces Adapted Material.\n\n       5. Downstream recipients.\n\n            a. Offer from the Licensor -- Licensed Material. Every\n               recipient of the Licensed Material automatically\n               receives an offer from the Licensor to exercise the\n               Licensed Rights under the terms and conditions of this\n               Public License.\n\n            b. No downstream restrictions. You may not offer or impose\n               any additional or different terms or conditions on, or\n               apply any Effective Technological Measures to, the\n               Licensed Material if doing so restricts exercise of the\n               Licensed Rights by any recipient of the Licensed\n               Material.\n\n       6. No endorsement. Nothing in this Public License constitutes or\n          may be construed as permission to assert or imply that You\n          are, or that Your use of the Licensed Material is, connected\n          with, or sponsored, endorsed, or granted official status by,\n          the Licensor or others designated to receive attribution as\n          provided in Section 3(a)(1)(A)(i).\n\n  b. Other rights.\n\n       1. Moral rights, such as the right of integrity, are not\n          licensed under this Public License, nor are publicity,\n          privacy, and/or other similar personality rights; however, to\n          the extent possible, the Licensor waives and/or agrees not to\n          assert any such rights held by the Licensor to the limited\n          extent necessary to allow You to exercise the Licensed\n          Rights, but not otherwise.\n\n       2. Patent and trademark rights are not licensed under this\n          Public License.\n\n       3. To the extent possible, the Licensor waives any right to\n          collect royalties from You for the exercise of the Licensed\n          Rights, whether directly or through a collecting society\n          under any voluntary or waivable statutory or compulsory\n          licensing scheme. In all other cases the Licensor expressly\n          reserves any right to collect such royalties, including when\n          the Licensed Material is used other than for NonCommercial\n          purposes.\n\n\nSection 3 -- License Conditions.\n\nYour exercise of the Licensed Rights is expressly made subject to the\nfollowing conditions.\n\n  a. Attribution.\n\n       1. If You Share the Licensed Material, You must:\n\n            a. retain the following if it is supplied by the Licensor\n               with the Licensed Material:\n\n                 i. identification of the creator(s) of the Licensed\n                    Material and any others designated to receive\n                    attribution, in any reasonable manner requested by\n                    the Licensor (including by pseudonym if\n                    designated);\n\n                ii. a copyright notice;\n\n               iii. a notice that refers to this Public License;\n\n                iv. a notice that refers to the disclaimer of\n                    warranties;\n\n                 v. a URI or hyperlink to the Licensed Material to the\n                    extent reasonably practicable;\n\n            b. indicate if You modified the Licensed Material and\n               retain an indication of any previous modifications; and\n\n            c. indicate the Licensed Material is licensed under this\n               Public License, and include the text of, or the URI or\n               hyperlink to, this Public License.\n\n          For the avoidance of doubt, You do not have permission under\n          this Public License to Share Adapted Material.\n\n       2. You may satisfy the conditions in Section 3(a)(1) in any\n          reasonable manner based on the medium, means, and context in\n          which You Share the Licensed Material. For example, it may be\n          reasonable to satisfy the conditions by providing a URI or\n          hyperlink to a resource that includes the required\n          information.\n\n       3. If requested by the Licensor, You must remove any of the\n          information required by Section 3(a)(1)(A) to the extent\n          reasonably practicable.\n\n\nSection 4 -- Sui Generis Database Rights.\n\nWhere the Licensed Rights include Sui Generis Database Rights that\napply to Your use of the Licensed Material:\n\n  a. for the avoidance of doubt, Section 2(a)(1) grants You the right\n     to extract, reuse, reproduce, and Share all or a substantial\n     portion of the contents of the database for NonCommercial purposes\n     only and provided You do not Share Adapted Material;\n\n  b. if You include all or a substantial portion of the database\n     contents in a database in which You have Sui Generis Database\n     Rights, then the database in which You have Sui Generis Database\n     Rights (but not its individual contents) is Adapted Material; and\n\n  c. You must comply with the conditions in Section 3(a) if You Share\n     all or a substantial portion of the contents of the database.\n\nFor the avoidance of doubt, this Section 4 supplements and does not\nreplace Your obligations under this Public License where the Licensed\nRights include other Copyright and Similar Rights.\n\n\nSection 5 -- Disclaimer of Warranties and Limitation of Liability.\n\n  a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE\n     EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS\n     AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF\n     ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS,\n     IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION,\n     WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR\n     PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS,\n     ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT\n     KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT\n     ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU.\n\n  b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE\n     TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION,\n     NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT,\n     INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES,\n     COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR\n     USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN\n     ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR\n     DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR\n     IN PART, THIS LIMITATION MAY NOT APPLY TO YOU.\n\n  c. The disclaimer of warranties and limitation of liability provided\n     above shall be interpreted in a manner that, to the extent\n     possible, most closely approximates an absolute disclaimer and\n     waiver of all liability.\n\n\nSection 6 -- Term and Termination.\n\n  a. This Public License applies for the term of the Copyright and\n     Similar Rights licensed here. However, if You fail to comply with\n     this Public License, then Your rights under this Public License\n     terminate automatically.\n\n  b. Where Your right to use the Licensed Material has terminated under\n     Section 6(a), it reinstates:\n\n       1. automatically as of the date the violation is cured, provided\n          it is cured within 30 days of Your discovery of the\n          violation; or\n\n       2. upon express reinstatement by the Licensor.\n\n     For the avoidance of doubt, this Section 6(b) does not affect any\n     right the Licensor may have to seek remedies for Your violations\n     of this Public License.\n\n  c. For the avoidance of doubt, the Licensor may also offer the\n     Licensed Material under separate terms or conditions or stop\n     distributing the Licensed Material at any time; however, doing so\n     will not terminate this Public License.\n\n  d. Sections 1, 5, 6, 7, and 8 survive termination of this Public\n     License.\n\n\nSection 7 -- Other Terms and Conditions.\n\n  a. The Licensor shall not be bound by any additional or different\n     terms or conditions communicated by You unless expressly agreed.\n\n  b. Any arrangements, understandings, or agreements regarding the\n     Licensed Material not stated herein are separate from and\n     independent of the terms and conditions of this Public License.\n\n\nSection 8 -- Interpretation.\n\n  a. For the avoidance of doubt, this Public License does not, and\n     shall not be interpreted to, reduce, limit, restrict, or impose\n     conditions on any use of the Licensed Material that could lawfully\n     be made without permission under this Public License.\n\n  b. To the extent possible, if any provision of this Public License is\n     deemed unenforceable, it shall be automatically reformed to the\n     minimum extent necessary to make it enforceable. If the provision\n     cannot be reformed, it shall be severed from this Public License\n     without affecting the enforceability of the remaining terms and\n     conditions.\n\n  c. No term or condition of this Public License will be waived and no\n     failure to comply consented to unless expressly agreed to by the\n     Licensor.\n\n  d. Nothing in this Public License constitutes or may be interpreted\n     as a limitation upon, or waiver of, any privileges and immunities\n     that apply to the Licensor or You, including from the legal\n     processes of any jurisdiction or authority.\n\n=======================================================================\n\nCreative Commons is not a party to its public\nlicenses. Notwithstanding, Creative Commons may elect to apply one of\nits public licenses to material it publishes and in those instances\nwill be considered the “Licensor.” The text of the Creative Commons\npublic licenses is dedicated to the public domain under the CC0 Public\nDomain Dedication. Except for the limited purpose of indicating that\nmaterial is shared under a Creative Commons public license or as\notherwise permitted by the Creative Commons policies published at\ncreativecommons.org/policies, Creative Commons does not authorize the\nuse of the trademark \"Creative Commons\" or any other trademark or logo\nof Creative Commons without its prior written consent including,\nwithout limitation, in connection with any unauthorized modifications\nto any of its public licenses or any other arrangements,\nunderstandings, or agreements concerning use of licensed material. For\nthe avoidance of doubt, this paragraph does not form part of the\npublic licenses.\n\nCreative Commons may be contacted at creativecommons.org.\n\n"
  },
  {
    "path": "README.md",
    "content": "# Pythonプログラミング入門の教材\n\n東京大学における[「Pythonプログラミング入門」](https://utokyo-ipp.github.io/course/)の教材を提供する公開レポジトリ．\n\n## 4つの形式\n\n* HTML版: <https://utokyo-ipp.github.io/>\n* PDF版: <https://utokyo-ipp.github.io/IPP_textbook.pdf>\n* Colab版: <https://colab.research.google.com/github/utokyo-ipp/utokyo-ipp.github.io/blob/master/colab/index.ipynb>\n  * HTML版にある ![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg) から対応するノートブックを開ける．\n* Jupyter版: <https://utokyo-ipp.github.io/IPP_textbook.zip>\n  * ローカルでipynbを実行するためのファイル一式．\n\n## 本レポジトリの管理ポリシー\n\n* 本レポジトリは，最新公開版の提供を目的としており，改訂履歴の提供は目的としていない．\n  * 履歴は予告なく削除されることがある．\n* 著作権管理の都合で，全てのpull requestは機械的にrejectされる．\n  * ただし，提案を例示する手段として，pull requestを作成することは止めない．\n* 誤植等の報告として，issueの作成は歓迎する．\n  * 教材改訂の際に適宜反映する予定．\n\n## ビルドとデプロイ\n\nJupyter版をソースとして，他の形式がビルドされている．\nビルドとデプロイは，[ipynb_deployer](https://github.com/satoshigeyuki/ipynb_deployer)によって自動化されている．\n"
  },
  {
    "path": "colab/1/1-0.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# 1-0. Colaboratory (Colab) の使い方\\n\",\n    \"\\n\",\n    \"Colaboratory（通称 Colab）によるノートブックの操作方法について説明します。\\n\",\n    \"\\n\",\n    \"## Colaboratoryの立ち上げ\\n\",\n    \"\\n\",\n    \"ブラウザにGoogleアカウント（個人でもECCSでもどちらでもよい）でログインした後に、以下のURLを開いてください。\\n\",\n    \"    \\n\",\n    \"- https://colab.research.google.com/\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 教材のオープン\\n\",\n    \"\\n\",\n    \"HTML版の教材の「Open in Colab」をクリックしたり、\\n\",\n    \"Google Drive上の教材を直接Colabratoryでオープンした場合、\\n\",\n    \"指定したノートブックがオープンされますが、ノートブックを操作した結果は\\n\",\n    \"Google Drive上に保存されません。\\n\",\n    \"ノートブックの上方にある「ドライブにコピー」のボタンを押せば、\\n\",\n    \"自分のGoogle Drive上にノートブックのコピーが作られてオープンされます。\\n\",\n    \"ノートブックを操作した結果はコピーに保存されます。\\n\",\n    \"\\n\",\n    \"なお、ノートブックには `ipynb` という拡張子（エクステンション）が付いています。\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## ノートブックの操作\\n\",\n    \"\\n\",\n    \"ノートブックの上方のタイトルの下には、「ファイル」や「編集」などのメニュー、\\n\",\n    \"その下には「+ コード」と「+ テキスト」というボタンが表示されています。\\n\",\n    \"\\n\",\n    \"Ctrl+s（Macの場合は Cmd+s）を入力することによって、\\n\",\n    \"編集・操作中のノートブックを Google Drive のファイルにセーブできます。\\n\",\n    \"なお、ノートブックは適当なタイミングでオートセーブされます。\\n\",\n    \"ファイルメニューの右に「すべての変更を保存しました」と表示されていれば、\\n\",\n    \"Ctrl+s を入力する必要はありません。\\n\",\n    \"\\n\",\n    \"以下の参考文献は、Jupyter Notebook に関する一般的な解説です。\\n\",\n    \"jupyterコマンドを起動してブラウザでノートブックを使うのと、\\n\",\n    \"Google Colaboratory によりノートブックを使うのでは、\\n\",\n    \"インタフェースが大分異なっていることに注意してください。\\n\",\n    \"\\n\",\n    \"- https://jupyter.readthedocs.io/en/latest/\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## セル\\n\",\n    \"\\n\",\n    \"ノートブックはセルから成り立っています。\\n\",\n    \"\\n\",\n    \"主に次の二種類のセルを使います。\\n\",\n    \"\\n\",\n    \"* Codeセル（コードセル）：\\n\",\n    \"Pythonのコードが書かれたセルです。\\n\",\n    \"Codeセルの左端には `[ ]` と表示されています。\\n\",\n    \"Codeセルの中のコードを実行するには、\\n\",\n    \"`[ ]` のところにマウスカーソルを移動してクリックします。\\n\",\n    \"`[ ]` のところにマウスカーソルを移動すると、●の中に▷が表示されます。\\n\",\n    \"これはプレイボタンを意味します。\\n\",\n    \"プレイボタンを押すとコードが実行され、その結果がセルの下部に挿入されます。\\n\",\n    \"（Shiftを押しながらEnterを押しても実行できます。）\\n\",\n    \"* Markdownセル（テキストセル）：\\n\",\n    \"説明が書かれたセルです。\\n\",\n    \"このセル自身はMarkdownセルです。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"1+1\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## セルの編集\\n\",\n    \"\\n\",\n    \"Codeセル上のプレイボタンでないところにマウスカーソルを移動しクリックすると、\\n\",\n    \"Codeセルが選択され、文字カーソルが表示されて、セルの編集が可能になります。\\n\",\n    \"Ctrlの付かない文字はそのまま挿入されます。\\n\",\n    \"\\n\",\n    \"以下のような編集コマンドが使えます。\\n\",\n    \"\\n\",\n    \"* Ctrl+c: copy\\n\",\n    \"* Ctrl+x: cut\\n\",\n    \"* Ctrl+v: paste\\n\",\n    \"* Ctrl+z: undo\\n\",\n    \"* …\\n\",\n    \"\\n\",\n    \"Codeセルが選択されているとき、Shift+Enter（もしくはShift+Return）を入力すると、\\n\",\n    \"セルの中のコードが実行されて、次のセルが選択されます。\\n\",\n    \"\\n\",\n    \"## 練習\\n\",\n    \"\\n\",\n    \"次のCodeセルを選択して `10/3` と入力して実行してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": []\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"Codeセルの実行が終了し、別のセルが選択されると、\\n\",\n    \"セルの左端は `[2]` のようになり、`[ ]` の中に番号が入ります。\\n\",\n    \"この番号は、そのCodeセルが何番目に実行されたかを示すもので、\\n\",\n    \"Codeセルが実行されるたびに1ずつ増えます。\\n\",\n    \"同じセルを続けて実行すれば、この番号は1ずつ増えるでしょう。\\n\",\n    \"\\n\",\n    \"## セルの挿入\\n\",\n    \"\\n\",\n    \"Codeセルを新たに挿入するには、\\n\",\n    \"ファイルメニューの下の「+ コード」ボタンを押します。\\n\",\n    \"現在選択されているセルの下にCodeセルが挿入されます。\\n\",\n    \"\\n\",\n    \"たとえば、このMarkdownセルを選択してから、\\n\",\n    \"「+ コード」ボタンを押してみてください。\\n\",\n    \"このMarkdownセルを選択するには、マウスカーソルをここに持って来て\\n\",\n    \"クリックすればよいです。説明の全体が四角で囲まれるはずです。\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"Markdownセルを新たに挿入するには、\\n\",\n    \"ファイルメニューの下の「+ テキスト」ボタンを押します。\\n\",\n    \"なお、ここではMarkdownセルの説明は行っていません。\\n\",\n    \"\\n\",\n    \"## セルの実行が止まらないとき\\n\",\n    \"\\n\",\n    \"Codeセルの左端の●の中に□が表示され、\\n\",\n    \"その周りをノの字が回り続けているならば、セルのコードは実行中です。\\n\",\n    \"いつまでたってもコードの実行が終了しない場合は、\\n\",\n    \"そのアイコンを押して、コードの実行を強制終了してください。\\n\",\n    \"●の中に□が表示されたアイコンはストップボタンを意味します。\\n\",\n    \"\\n\",\n    \"たとえば、次のような例です。\\n\",\n    \"プレイボタンを押し実行中であることを確かめてから、\\n\",\n    \"ストップボタンを押してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"while True:\\n\",\n    \"    pass\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## セルの操作\\n\",\n    \"\\n\",\n    \"セルを選択するとセルの右上に色々なボタンが表示されます。\\n\",\n    \"これらを押すことにより、セルの削除、セルの移動、コピーペーストなど、\\n\",\n    \"セルに対する各種の操作を行うことができます。\\n\",\n    \"\\n\",\n    \"## ノートブックの参照\\n\",\n    \"\\n\",\n    \"Colaboratoryが使用するノードブックは Google Drive 上にあります。\\n\",\n    \"右上の「共有」のボタンを押すことにより、\\n\",\n    \"ノートブックの共有設定を変えることができます。\\n\",\n    \"その上で、ノートブックが表示されているブラウザ上のURLを伝えることにより、\\n\",\n    \"教員やTAにノートブックを見せることができます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## ノートブックのダウンロード\\n\",\n    \"\\n\",\n    \"Google Drive 上のノートブックをパソコンにダウンロードするには、\\n\",\n    \"Colaboratoryのファイルメニューで「.ipynb をダウンロード」を選択します。\\n\",\n    \"\\n\",\n    \"![](https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/./1/colab4.png)\"\n   ]\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"Python 3 (ipykernel)\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"codemirror_mode\": {\n    \"name\": \"ipython\",\n    \"version\": 3\n   },\n   \"file_extension\": \".py\",\n   \"mimetype\": \"text/x-python\",\n   \"name\": \"python\",\n   \"nbconvert_exporter\": \"python\",\n   \"pygments_lexer\": \"ipython3\",\n   \"version\": \"3.12.4\"\n  },\n  \"nbsphinx\": {\n   \"execute\": \"never\"\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 4\n}\n"
  },
  {
    "path": "colab/1/1-1.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# 1-1. 数値演算\\n\",\n    \"数値演算について説明します。\\n\",\n    \"\\n\",\n    \"参考\\n\",\n    \"\\n\",\n    \"- https://docs.python.org/ja/3/tutorial/introduction.html#using-python-as-a-calculator\\n\",\n    \"- https://docs.python.org/ja/3/tutorial/modules.html\\n\",\n    \"- https://docs.python.org/ja/3/library/numeric.html\\n\",\n    \"- https://docs.python.org/ja/3/library/math.html\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 簡単な算術計算\\n\",\n    \"\\n\",\n    \"CodeセルにPythonの式を入力して、プレイボタンを押すか、\\n\",\n    \"Shiftを押しながらEnterを押すと、式が評価され、その結果の値がセルの下に挿入されます。\\n\",\n    \"\\n\",\n    \"1+1 の計算をしてみましょう。次のセルに `1+1` と入力して、\\n\",\n    \"Shiftを押しながらEnterを押してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": []\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"このようにして、電卓の代わりにPythonを使うことができます。**`+`** は言うまでもなく**足し算**を表しています。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"7-2\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"7*2\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"7**2\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"**`-`** は**引き算**、**`*`** は**掛け算**、**`**`** は**べき乗**を表しています。\\n\",\n    \"\\n\",\n    \"式を適当に書き換えてから、Shiftを押しながらEnterを押すと、\\n\",\n    \"書き換えた後の式が評価されて、セルの下の値はその結果で置き換わります。\\n\",\n    \"たとえば、上の `2` を `100` に書き換えて、7の100乗を求めてみてください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"割り算はどうなるでしょうか。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"7/2\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"7//2\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"Pythonでは、**割り算**（**除算**）は **`/`** で表され、**整数除算**は **`//`** で表されます。\\n\",\n    \"`//` は小数部を切り捨てた整数値（**商**）を返します。\\n\",\n    \"\\n\",\n    \"整数同士の `//` の結果は整数になります。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"7/1\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"7//1\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"整数除算の**余り**（**剰余**）を求めたいときは、別の演算子 **`%`** を用います。\\n\",\n    \"\\n\",\n    \"整数同士の `%` の結果は整数になります。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"7%2\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## コメント\\n\",\n    \"Pythonでは一般に、コードの中に **`#`** が出現すると、それ以降、その行の終わりまでが**コメント**になります。\\n\",\n    \"コメントは行頭からも、行の途中からでも始めることができます。\\n\",\n    \"\\n\",\n    \"プログラムの実行時には、コメントは無視されます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"# このように行頭に '#' をおけば、行全体をコメントとすることができます。\\n\",\n    \"\\n\",\n    \"# 次のようにコード行に続けて直前のコードについての説明をコメントとして書くこともできます。\\n\",\n    \"2**10  # 2の10乗を計算します\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"# 次のようにコード行自体をコメントとすることで、その行を無視させる（コメントアウトする）こともよく行われます。\\n\",\n    \"# 2**10  # 2の10乗を計算します この行が「コメントアウト」された\\n\",\n    \"2**12  # 実は計算したいのは2の12乗でした\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 整数と実数\\n\",\n    \"Pythonでは、**整数**と小数点のある数（**実数**）は、数学的に同じ数を表す場合でも、\\n\",\n    \"コンピュータの中で異なる形式で記憶されますので、表示は異なります。\\n\",\n    \"（実数は**浮動小数点数**ともいいます。）\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"7/1\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"7//1\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"しかし、以下のように、比較を行うと両者は等しいものとして扱われます。\\n\",\n    \"値同士が等しいかどうかを調べる `==` という演算子については、後で紹介します。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"7/1 == 7//1\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"`+` と `-` と `*` と `//` と `%` と `**` では、2つの数が整数ならば結果も整数になります。\\n\",\n    \"2つの数が実数であったり、整数と実数が混ざっていたら、結果は実数になります。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"2+5\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"2+5.0\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"`/` の結果は必ず実数となります。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"7/1\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"ここで、自分で色々と式を入力してみてください。\\n\",\n    \"以下に、いくつかセルを用意しておきます。\\n\",\n    \"足りなければ、Insertメニューを使ってセルを追加することができます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": []\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": []\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": []\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### 実数のべき表示\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"2.0**1000\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"非常に大きな実数は、10のべきとともに表示（**べき表示**）されます。\\n\",\n    \"`e+301` は10の301乗を意味します。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"2.0**-1000\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"非常に小さな実数も、10のべきとともに表示されます。\\n\",\n    \"`e-302` は10の-302乗を意味します。\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### いくらでも大きくなる整数\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"2**1000\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"このように、Pythonでは整数はいくらでも大きくなります。\\n\",\n    \"もちろん、コンピュータのメモリに納まる限りにおいてですが。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"2**2**2**2**2\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### 整数と実数の間の変換\\n\",\n    \"\\n\",\n    \"実数を整数に変換するには、**`int`** という関数を用います。\\n\",\n    \"（関数に関する一般的な説明は1-2を参照してください。）\\n\",\n    \"`int(x)` は、実数 `x` を（`0` の方向に）切り下げた結果を返します。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"int(2.9)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"int(-2.9)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"逆に、整数を実数に変換するには、**`float`** という関数を用います。\\n\",\n    \"`float(i)` は、整数 `i` を実数に変換した結果を返します。\\n\",\n    \"たとえば `i+0.0` としても、`i` を実数に変換できます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"float(2)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"2+0.0\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### 数値誤差\\n\",\n    \"\\n\",\n    \"浮動小数点数には、**数値誤差**が不可避です。\\n\",\n    \"これは、有限のビット数で、無限に小さくなり得る小数刻みを表現しようとするためです。\\n\",\n    \"（参照：[Wikipedia - 浮動小数点数](https://ja.wikipedia.org/wiki/%E6%B5%AE%E5%8B%95%E5%B0%8F%E6%95%B0%E7%82%B9%E6%95%B0#%E3%82%A8%E3%83%A9%E3%83%BC%EF%BC%88%E8%AA%A4%E5%B7%AE%EF%BC%89)）\\n\",\n    \"\\n\",\n    \"Pythonでは、整数は無限桁で表現されるため、整数演算には誤差が生じません。\\n\",\n    \"しかし、整数を実数に変換したときには、一般に誤差が生じます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"10**60\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"float(10**60)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"int(float(10**60))\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"数え上げのような離散的な値を扱う時には、実数を経由せずに、整数のみで演算するようにしましょう。\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 演算子の優先順位と括弧\\n\",\n    \"掛け算や割り算は足し算や引き算よりも先に評価されます。\\n\",\n    \"すなわち、掛け算や割り算の方が足し算や引き算よりも**優先順位**が高いと定義されています。\\n\",\n    \"\\n\",\n    \"**括弧**を使って式の評価順序を指定することができます。\\n\",\n    \"\\n\",\n    \"なお、数式 $a(b-c)$、$(a-b)(c-d)$ は、それぞれ $a$ と $b-c$、$a-b$ と $c-d$ の積を意味しますが、\\n\",\n    \"コードでは、`a*(b-c)` や `(a-b)*(c-d)` のように積の演算子である `*` を明記する必要があることに注意してください。\\n\",\n    \"\\n\",\n    \"また、数や演算子の間には、自由に空白を入れることができます。（後でもう一度説明します。）\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"7 - 2 * 3\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"(7 - 2) * 3\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"17 - 17//3*3\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"56 ** 4 ** 2\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"56 ** 16\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"上の例では、`4**2` が先に評価されて、`56**16` が計算されます。\\n\",\n    \"つまり、`x**y**z` = `x**(y**z)` が成り立ちます。\\n\",\n    \"このことをもって、`**` は右に結合するといいます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"16/8/2\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"(16/8)/2\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"上の例では、`16/8` が先に評価されて、`2/2` が計算されます。\\n\",\n    \"つまり、`x/y/z` = `(x/y)/z` が成り立ちます。\\n\",\n    \"このことをもって、`/` は左に結合するといいます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"`*` と `/` をまぜても左に結合します。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"10/2*3\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"以上のように、演算子によって式の評価の順番がかわりますので注意してください。\\n\",\n    \"\\n\",\n    \"ではまた、自分で色々と式を入力してみてください。\\n\",\n    \"以下に、いくつかセルを用意しておきます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": []\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": []\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": []\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### 単項の `+` と `-`\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"**`+`** と **`-`** は、単項の演算子（**単項演算子**）としても使えます。\\n\",\n    \"（これらの演算子の後に1つだけ数が書かれます。\\n\",\n    \"前と後の両方に数が書かれる演算子は**2項演算子**と言います。）\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"-3\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"+3\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 算術演算子のまとめ\\n\",\n    \"\\n\",\n    \"算術演算子を、評価の優先順位にしたがって、すなわち結合力の強い順にまとめておきましょう。\\n\",\n    \"\\n\",\n    \"まず、2項のべき演算子 `**` が最も強く結合します。\\n\",\n    \"`**` は右の方から計算され、このことを「右に結合する」と表します。\\n\",\n    \"\\n\",\n    \"次に、単項の `+` と `-` が強く結合します。\\n\",\n    \"なお、 `**` の右側に単項の `+` や `-` がある場合は、`+` と `-` がより強く結合します。\\n\",\n    \"例えば、 `-10 ** 2` では `**` がより強く結合し `-100` となり、 `10 ** -2` では `-` がより強く結合し `0.01` となります。\\n\",\n    \"\\n\",\n    \"その次に、2項の `*` と `/` と `//` と `%` が強く結合します。これらは左に結合します。\\n\",\n    \"\\n\",\n    \"最後に、2項の `+` と `-` は最も弱く結合します。これらも左に結合します。\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 空白\\n\",\n    \"既に `7 - 2 * 3` のような例が出てきましたが、\\n\",\n    \"演算子と数の間や、演算子と変数（後述）の間には、空白を入れることができます。\\n\",\n    \"ここで**空白**とは、**半角の空白**のことで、英数字と同様に1バイトの文字コードに含まれているものです。\\n\",\n    \"\\n\",\n    \"複数の文字から成る演算子、たとえば `**` や `//` の間に空白を入れることはできません。\\n\",\n    \"エラーになることでしょう。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"7 **2\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {\n    \"tags\": [\n     \"raises-exception\"\n    ]\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"7* *2\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### 全角の空白\\n\",\n    \"日本語文字コードである***全角の空白***は、空白とはみなされませんので注意してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {\n    \"tags\": [\n     \"raises-exception\"\n    ]\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"7　**2\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## エラー\\n\",\n    \"色々と試していると、**エラー**が起こることもあったでしょう。\\n\",\n    \"以下は典型的なエラーです。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {\n    \"tags\": [\n     \"raises-exception\"\n    ]\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"10/0\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"このエラーは、ゼロによる割り算を行ったためです。\\n\",\n    \"**実行時エラー**の典型的なものです。\\n\",\n    \"\\n\",\n    \"エラーが起こった場合は、修正して評価し直すことができます。\\n\",\n    \"上の例で、0 をたとえば 3 に書き換えて評価し直してみてください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {\n    \"tags\": [\n     \"raises-exception\"\n    ]\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"10/\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"こちらのエラーは**構文エラー**です。\\n\",\n    \"つまり、入力がPythonの構文に違反しているため実行できなかったのです。\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 数学関数（モジュールのインポート）\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"import math\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"math.sqrt(2)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"数学関係の各種の関数は、**モジュール**（**ライブラリ**）として提供されています。\\n\",\n    \"これらの関数を使いたいときは、上のように、**`import`** で始まる\\n\",\n    \"`import math` というおまじないを一度唱えます。\\n\",\n    \"そうしますと、**`math`** というライブラリが読み込まれて（**インポート**されて）、\\n\",\n    \"`math.関数名` という形で関数を用いることができます。\\n\",\n    \"上の例では、平方根を計算する **`math.sqrt`** という関数が用いられています。\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"もう少し例をあげておきましょう。sinとcosは **`math.sin`** と **`math.cos`** で求まります。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"math.sin(0)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"math.pi\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"**`math.pi`** は、円周率を値とする変数です。\\n\",\n    \"\\n\",\n    \"変数については後に説明されます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"math.sin(math.pi)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"この結果は本当は 0 にならなければならないのですが、\\n\",\n    \"数値誤差のためにこのようになっています。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"math.sin(math.pi/2)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"math.sin(math.pi/4) * 2\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 練習\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"黄金比を求めてください。黄金比とは、5 の平方根に 1 を加えて 2 で割ったものです。約 1.618 になるはずです。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": []\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"Python 3 (ipykernel)\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"codemirror_mode\": {\n    \"name\": \"ipython\",\n    \"version\": 3\n   },\n   \"file_extension\": \".py\",\n   \"mimetype\": \"text/x-python\",\n   \"name\": \"python\",\n   \"nbconvert_exporter\": \"python\",\n   \"pygments_lexer\": \"ipython3\",\n   \"version\": \"3.12.4\"\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 4\n}\n"
  },
  {
    "path": "colab/1/1-2.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# 1-2. 変数と関数の基礎\\n\",\n    \"変数と関数の基礎について説明します。\\n\",\n    \"\\n\",\n    \"参考\\n\",\n    \"\\n\",\n    \"- https://docs.python.org/ja/3/tutorial/introduction.html#first-steps-towards-programming\\n\",\n    \"- https://docs.python.org/ja/3/tutorial/controlflow.html#defining-functions\\n\",\n    \"- https://docs.python.org/ja/3/library/functions.html#print\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 変数\\n\",\n    \"プログラミング言語における**変数**とは、値に名前を付ける仕組みであり、名前はその値を指し示すことになります。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"h = 188.0\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"以上のように **`=`** を用いる構文によって、`188.0` という値に `h` という名前が付きます。これを**変数定義**と呼びます。\\n\",\n    \"\\n\",\n    \"定義された変数は、式の中で使うことができます。`h` という変数自体も式なので、`h` という式を評価することができ、変数が指し示す値が返ります。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"h\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"異なる変数は、いくらでも導入できます。たとえば、以下では `w` を変数定義します。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"w = 104.0\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"ここで、`h` を身長 (cm)、`w` を体重 (kg) の意味と考えると、次の式によってBMI（ボディマス指数）を計算できます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"w / (h/100.0) ** 2\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"なお、演算子 `**` の方が `/` よりも先に評価されることに注意してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"変数という名前の通り、変数が指し示す値を変えることもできます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"w = 104.0-10\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"このように変数を再定義すれば、元々 `w` が指し示していた値 `104.0` を忘れて、新たな値 `94.0` を指し示すようになります。\\n\",\n    \"この後で、前と同じBMIの式を評価してみると、`w` の値の変化に応じて、BMIの計算結果は変わります。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"w / (h/100.0) ** 2\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"なお、未定義の変数（たとえば `BMI`）を式の中で用いると、次のようにエラーが生じます。\\n\",\n    \"\\n\",\n    \"```\\n\",\n    \"---------------------------------------------------------------------------\\n\",\n    \"NameError                                 Traceback (most recent call last)\\n\",\n    \"<ipython-input-1-b910749d4383> in <module>\\n\",\n    \"----> 1 BMI  # 未定義の変数\\n\",\n    \"\\n\",\n    \"NameError: name 'BMI' is not defined\\n\",\n    \"```\\n\",\n    \"\\n\",\n    \"次のセルの行頭にある `#` を削除して実行してみましょう。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"# BMI  # 未定義の変数\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"以降では、単純のため、変数が指し示す値を、変数の値として説明していきます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### 代入文\\n\",\n    \"変数定義に用いた **`=`** による構文を、Pythonでは**代入文** (**assignment statement**) と呼びます。\\n\",\n    \"そして、代入文を実行することを**代入** (**assignment**) と言います。\\n\",\n    \"代入文は、`=` の左辺に右辺の式の評価結果の値を割り当てる文です。\\n\",\n    \"上記の例のように、左辺が変数の場合には、代入文は変数定義と解釈されます。\\n\",\n    \"\\n\",\n    \"代入文は、右辺を評価した後に左辺に割り当てるという順番に従います。右辺に出現する変数が左辺に出て来てもかまいません。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"w = w-10\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"上の代入文は、`w` の値を `10` 減らす操作となります。`=` は数学的な等号ではないことに注意してください。\\n\",\n    \"\\n\",\n    \"もう一度BMIを計算してみると、`w` の値が減ったことで、先と結果が変わります。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"w / (h/100.0) ** 2\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"***注意***： 数学における代入は、substitution（置換）であり、プログラミング言語における代入 (assignment) とは異なります。代入という単語よりも、assignment（割り当て）という単語で概念を覚えましょう。\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### 累積代入文\\n\",\n    \"上の例のように変数の値を減らす操作は、次のような**累算代入文** (**augmented assignment statement**) を使って簡潔に記述することができます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"w -= 10\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"ここで、**`-=`** という演算子は、`-` と `=` を結合させた演算子で、`w = w - 10` という代入文と同じ意味になります。\\n\",\n    \"これは代入文と2項演算が複合したものであり、`-` に限らず、他の2項演算についても同様に複合した累算代入文が利用できます。たとえば、変数の値を増やすには **`+=`** という演算子を用いることができます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"w += 10\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"`=` も含めて、これらの演算子は**代入演算子**と呼ばれています。代入演算子によって変数の値がどのように変わるか、確かめてください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": []\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 関数の定義と返値\\n\",\n    \"前述のように、変数の値が変わるたびにBMIの式を入力するのは面倒です。以下では、身長 `height` と体重 `weight` をもらって、BMIを計算する**関数** `bmi` を定義してみましょう。関数を定義すると、BMIの式の再入力を省けて便利です。\\n\",\n    \"\\n\",\n    \"次のような形式で、**関数定義**を記述できます。\\n\",\n    \"\\n\",\n    \"関数定義など、複数行のコードセルには、**行番号**を振るのがよいかもしれません。行番号を振るかどうかは、コマンドモードでエルの文字（大文字でも小文字でもよいです）を入力することによって、スイッチできます。行番号があるかないかは、コードの実行には影響しません。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def bmi(height, weight):\\n\",\n    \"    return weight / (height/100.0) ** 2\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"Python では、**関数定義**は、上のような形をしています。\\n\",\n    \"最初の行は以下のように **`def`** で始まります。\\n\",\n    \"\\n\",\n    \"------\\n\",\n    \"```Python\\n\",\n    \"    def 関数名(引数, ...):\\n\",\n    \"```\\n\",\n    \"------\\n\",\n    \"**引数**（ひきすう）とは、関数が受け取る値を指し示す変数のことです。**仮引数**（かりひきすう）ともいいます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"`:` 以降は関数定義の本体であり、関数の処理を記述する部分として以下の構文が続きます。\\n\",\n    \"\\n\",\n    \"------\\n\",\n    \"```Python\\n\",\n    \"    return 式\\n\",\n    \"```\\n\",\n    \"------   \\n\",\n    \"\\n\",\n    \"この構文は **`return`** で始まり、**return文**と呼ばれます。return文は、`return` に続く式の評価結果を、関数の呼び出し元に返して（これを**返値**と言います）、関数を終了するという意味を持ちます。この関数を、入力となる引数とともに呼び出すと、`return` の後の式の評価結果を返値として返します。\\n\",\n    \"\\n\",\n    \"\\n\",\n    \"ここで、Pythonでは、\\n\",\n    \"`return` の前に空白が入ることに注意してください。\\n\",\n    \"このような行頭の空白を**インデント**と呼びます。\\n\",\n    \"Pythonでは、インデントの量によって、\\n\",\n    \"構文の**入れ子**を制御するようになっています。このことについては、\\n\",\n    \"より複雑な構文が出てきたときに説明しましょう。\\n\",\n    \"\\n\",\n    \"\\n\",\n    \"上記では、`def` の後に続く `bmi` が関数名です。それに続く括弧の中に書かれた `height` と `weight` は、**引数**です。また、`return` の後にBMIの計算式を記述しているので、関数の呼び出し元にはBMIの計算結果が返値として返ります。\\n\",\n    \"\\n\",\n    \"\\n\",\n    \"では、定義した関数 `bmi` を呼び出してみましょう。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"bmi(188.0,104.0)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"第1引数を身長（cm）、第2引数を体重（kg）としたときのBMIが計算されていることがわかります。\\n\",\n    \"\\n\",\n    \"関数呼び出しは演算式の一種なので、引数の位置には任意の式を記述できますし、\\n\",\n    \"関数呼び出し自体も式の中に記述できます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"1.1*bmi(174.0, 119.0 * 0.454)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"もう1つ関数を定義してみましょう。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def felt_air_temperature(temperature, humidity):\\n\",\n    \"    return temperature - 1 / 2.3 * (temperature - 10) * (0.8 - humidity / 100)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"この関数は、温度と湿度を入力として、体感温度を返します。\\n\",\n    \"このように、関数名や変数名には `_` (アンダースコア）を含めることができます。\\n\",\n    \"アンダースコアで始めることもできます。\\n\",\n    \"\\n\",\n    \"数字も関数名や変数名に含めることができますが、\\n\",\n    \"名前の最初に来てはいけません。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"felt_air_temperature(28, 50)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"なお、`return` の後に式を書かないと、何も返されなかったことを表現するために、「何もない」ことを表す **`None`** という特別な値が返ります。\\n\",\n    \"（`None` という値は色々なところで現れることでしょう。）\\n\",\n    \"\\n\",\n    \"return文に到達せずに関数定義本体の最後まで行ってしまったときも、`None` という値が返ります。\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### 予約語\\n\",\n    \"Pythonでの `def` や `return` は、関数定義やreturn文の始まりを記述するための特別な記号であり、それ以外の用途に用いることができません。\\n\",\n    \"このように構文上で役割が予約されている語は、**予約語**と呼ばれます。\\n\",\n    \"Codeセルの構文ハイライトで（太字緑色などで）強調されるものが予約語だと覚えておけば大体問題ありません。\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### 練習 `ft_to_cm`\\n\",\n    \"\\n\",\n    \"`f` フィート `i` インチをセンチメートルに変換する関数 `ft_to_cm(f,i)` を定義してください。\\n\",\n    \"ただし、1 フィート = 12 インチ = 30.48 cm としてよい。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def ft_to_cm(f, i):\\n\",\n    \"    ...\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"定義ができたら、次のセルを実行して、エラーがでないことを確認してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {\n    \"tags\": [\n     \"raises-exception\"\n    ]\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"assert round(ft_to_cm(5, 2) - 157.48, 6) == 0\\n\",\n    \"assert round(ft_to_cm(6, 5) - 195.58, 6) == 0\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### 練習 `quadratic`\\n\",\n    \"\\n\",\n    \"二次関数 $f(x) = ax^2+bx+c$ の値を求める `quadratic(a,b,c,x)` を定義してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def quadratic(a, b, c, x):\\n\",\n    \"    ...\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"定義ができたら、次のセルを実行して、エラーがでないことを確認してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"assert quadratic(1, 2, 1, 3) == 16\\n\",\n    \"assert quadratic(1, -5, -2, 7) == 12\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## ローカル変数\\n\",\n    \"次の関数は、ヘロンの公式によって、\\n\",\n    \"与えられた三辺の長さに対して三角形の面積を返すものです。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"import math\\n\",\n    \"\\n\",\n    \"def heron(a,b,c):\\n\",\n    \"    s = 0.5*(a+b+c)\\n\",\n    \"    return math.sqrt(s * (s-a) * (s-b) * (s-c))\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"`math.sqrt` を使うために `import math` を行っています。\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"次の式を評価してみましょう。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"heron(3,4,5)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"この関数の中では、まず、3辺の長さを足して 2 で割った（0.5 を掛けた）値を求めています。\\n\",\n    \"そして、その値を `s` という変数に代入しています。\\n\",\n    \"この `s` という変数は、この関数の中で代入されているので、この関数の中だけで利用可能な変数となります。\\n\",\n    \"そのような変数を**ローカル変数**と呼びます。\\n\",\n    \"\\n\",\n    \"そして、`s` を使った式が計算されてreturn文で返されます。\\n\",\n    \"ここで、関数定義のひとまとまりの本体であることを表すために、`s` への代入文もreturn文も、同じ深さでインデントされていることに注意してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"Pythonでは、関数の中で定義された変数は、その関数のローカル変数となります。関数の引数もローカル変数です。関数の外で同じ名前の変数を使っても、それは関数のローカル変数とは「別もの」と考えられます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"`heron` を呼び出した後で、関数の外で `s` の値を参照しても、以下のように、`s` が未定義という扱いになります。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {\n    \"tags\": [\n     \"raises-exception\"\n    ]\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"s\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"以下では、`heron` の中では、`s` というローカル変数の値は 3 になりますが、関数の外では、`s` という変数は別もので、その値はずっと `100` です。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"s = 100\\n\",\n    \"heron(3,4,5)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"s\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## `print`\\n\",\n    \"上の例で、ローカル変数は関数の返値を計算するのに使われますが、それが定義されている関数の外からは参照することができません。\\n\",\n    \"\\n\",\n    \"ローカル変数の値など、関数の実行途中の状況を確認するには、 **`print`** というPythonが最初から用意してくれている関数（**組み込み関数**）を用いることができます。この `print` を関数内から呼び出すことでローカル変数の値を確認できます。\\n\",\n    \"\\n\",\n    \"`print` は任意個の引数を取ることができ、コンマ `,` の区切りには空白文字が出力されます。引数を与えずに呼び出した場合には、改行のみを出力します。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def heron(a,b,c):\\n\",\n    \"    s = 0.5*(a+b+c)\\n\",\n    \"    print('The value of s is', s)\\n\",\n    \"    return math.sqrt(s * (s-a) * (s-b) * (s-c))\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"heron(1,1,1)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"このように `print` 関数を用いて変数の値を観察することは、プログラムの誤り（**バグ**）を見つけ、修正（**デバッグ**）する最も基本的な方法です。これは1-4でも改めて説明します。\\n\",\n    \"\\n\",\n    \"なお、以降の説明では、 `print` 関数を呼び出して値を出力することを「**印字**する」と表現します。\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## `print` と `return`\\n\",\n    \"関数が値を返すことを期待されている場合は、必ず `return` を使ってください。\\n\",\n    \"\\n\",\n    \"関数内で値を印字しても、関数の返値として利用することはできません。\\n\",\n    \"\\n\",\n    \"たとえば `heron` を以下のように定義すると、`heron(1,1,1) * 2` のような計算ができなくなります。\\n\",\n    \"\\n\",\n    \"---\\n\",\n    \"```Python\\n\",\n    \"def heron(a,b,c):\\n\",\n    \"    s = 0.5*(a+b+c)\\n\",\n    \"    print('The value of s is', s)\\n\",\n    \"    print(math.sqrt(s * (s-a) * (s-b) * (s-c)))\\n\",\n    \"```\\n\",\n    \"---\\n\",\n    \"\\n\",\n    \"なお、\\n\",\n    \"\\n\",\n    \"```Python\\n\",\n    \"    return print(math.sqrt(s * (s-a) * (s-b) * (s-c)))\\n\",\n    \"```\\n\",\n    \"\\n\",\n    \"のように書いても駄目です。`print` 関数は `None` という値を返しますので、これでは関数は常に `None` という値を返してしまいます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## コメントと空行\\n\",\n    \"**コメント**については既に説明しましたが、\\n\",\n    \"関数定義にはコメントを付加して、後から読んでもわかるようにしましょう。\\n\",\n    \"\\n\",\n    \"コメントだけの行は**空行**（空白のみから成る行）と同じに扱われます。\\n\",\n    \"\\n\",\n    \"関数定義の中に空行を自由に入れることができますので、\\n\",\n    \"長い関数定義には、区切りとなるところに空行を入れるのがよいでしょう。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"# heronの公式により三角形の面積を返す\\n\",\n    \"def heron(a,b,c): # a,b,c は三辺の長さ\\n\",\n    \"    \\n\",\n    \"    # 辺の合計の半分をsに置く\\n\",\n    \"    s = 0.5*(a+b+c)\\n\",\n    \"    print('The value of s is', s)\\n\",\n    \"    \\n\",\n    \"    return math.sqrt(s * (s-a) * (s-b) * (s-c))\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 関数の参照の書き方\\n\",\n    \"\\n\",\n    \"関数は、\\n\",\n    \"\\n\",\n    \"　　関数 `heron` は、三角形の三辺の長さをもらって三角形の面積を返します。\\n\",\n    \"    \\n\",\n    \"というように、名前だけで参照することもありますが、\\n\",\n    \"\\n\",\n    \"　　`heron(a,b,c)` は、三角形の三辺の長さ `a`, `b`, `c` をもらって三角形の面積を返します。\\n\",\n    \"\\n\",\n    \"というように、引数を明示して参照することもあります。\\n\",\n    \"\\n\",\n    \"ときには、\\n\",\n    \"\\n\",\n    \"　　`heron()` は三角形の面積を返します。\\n\",\n    \"    \\n\",\n    \"のように、関数名に `()` を付けて参照することがあります。\\n\",\n    \"この記法は、`heron` が関数であることを明示しています。\\n\",\n    \"\\n\",\n    \"関数には引数がゼロ個のものがあるのですが、`heron()` と参照するとき、\\n\",\n    \"`heron` は必ずしも引数の数がゼロ個ではないことに注意してください。\\n\",\n    \"\\n\",\n    \"後に学習するメソッドという関数の親戚に対しても同様の記法が用いられます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### 練習 `qe_disc` `qe_solution1` `qe_solution1`\\n\",\n    \"\\n\",\n    \"二次方程式 $ax^2 + bx + c = 0$ に関して以下のような関数を定義してください。\\n\",\n    \"\\n\",\n    \"1. 判別式 $b^2 - 4ac$ を求める `qe_disc(a,b,c)`\\n\",\n    \"2. 解のうち、大きくない方を求める `qe_solution1(a,b,c)`\\n\",\n    \"3. 解のうち、小さくない方を求める `qe_solution2(a,b,c)`\\n\",\n    \"\\n\",\n    \"ただし、`qe_solution1` と `qe_solution2` は `qe_disc` を使って定義してください。\\n\",\n    \"二次方程式が実数解を持つと仮定してよいです。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"import math\\n\",\n    \"\\n\",\n    \"def qe_disc(a, b, c):\\n\",\n    \"    ...\\n\",\n    \"\\n\",\n    \"def qe_solution1(a, b, c):\\n\",\n    \"    ...\\n\",\n    \"\\n\",\n    \"def qe_solution2(a, b, c):\\n\",\n    \"    ...\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"定義ができたら、次のセルを実行して、エラーがでないことを確認してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {\n    \"tags\": [\n     \"raises-exception\"\n    ]\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"assert qe_disc(1, -2, 1) == 0\\n\",\n    \"assert qe_disc(1, -5, 6) == 1\\n\",\n    \"assert round(qe_solution1(1, -2, 1) - 1, 6) == 0\\n\",\n    \"assert round(qe_solution2(1, -2, 1) - 1, 6) == 0\\n\",\n    \"assert round(qe_solution1(1, -5, 6) - 2, 6) == 0\\n\",\n    \"assert round(qe_solution2(1, -5, 6) - 3, 6) == 0\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## ▲グローバル変数\\n\",\n    \"\\n\",\n    \"Pythonでは、関数の中で代入が行われない変数は、グローバル変数とみなされます。\\n\",\n    \"\\n\",\n    \"**グローバル変数**とは、関数の外（**トップレベル**もしくは**モジュールレベル**と呼ばれます）で定義される変数のことです。\\n\",\n    \"\\n\",\n    \"グローバル変数は、関数の中から参照することができます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"g = 9.8\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def force(m):\\n\",\n    \"    return m*g\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"以上のように `force` を定義すると、\\n\",\n    \"`force` の中で `g` というグローバル変数を参照することができます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"force(104)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"g = g/6\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"以上のように、`g` の値を変更してから `force` を実行すると、\\n\",\n    \"変更後の値が用いられます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"force(104)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"以下はより簡単な例です。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"a = 10\\n\",\n    \"def foo():\\n\",\n    \"    return a\\n\",\n    \"def bar():\\n\",\n    \"    a = 3\\n\",\n    \"    return a\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"foo()\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"bar()\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"a\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"a = 20\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"foo()\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"`bar` の中では `a` への代入があるので、`a` はローカル変数になります。\\n\",\n    \"ローカル変数の `a` とグローバル変数の `a` は別ものと考えてください。\\n\",\n    \"ローカル変数 `a` への代入があっても、グローバル変数の `a` の値は変化しません。\\n\",\n    \"`foo` の中の `a` はグローバル変数です。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def boo(a):\\n\",\n    \"    return a\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"boo(5)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"a\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"関数の引数もローカル変数の一種と考えられ、グローバル変数とは別ものです。\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 練習の解答\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def ft_to_cm(f, i):\\n\",\n    \"    return 30.48*f + (30.48/12)*i\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def quadratic(a, b, c, x):\\n\",\n    \"    return a*x*x + b*x + c\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"import math\\n\",\n    \"\\n\",\n    \"def qe_disc(a, b, c):\\n\",\n    \"    return b*b - 4*a*c\\n\",\n    \"\\n\",\n    \"def qe_solution1(a, b, c):\\n\",\n    \"    return (-b - math.sqrt(qe_disc(a, b, c))) / (2*a)\\n\",\n    \"\\n\",\n    \"def qe_solution2(a, b, c):\\n\",\n    \"    return (-b + math.sqrt(qe_disc(a, b, c))) / (2*a)\"\n   ]\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"Python 3\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"name\": \"python\"\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 2\n}\n"
  },
  {
    "path": "colab/1/1-3.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# 1-3. 論理・比較演算と条件分岐の基礎\\n\",\n    \"論理・比較演算と条件分岐の基礎について説明します。\\n\",\n    \"\\n\",\n    \"参考\\n\",\n    \"\\n\",\n    \"- https://docs.python.org/ja/3/tutorial/controlflow.html\\n\",\n    \"- https://docs.python.org/ja/3/reference/compound_stmts.html\\n\",\n    \"- https://docs.python.org/ja/3/library/stdtypes.html\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## if文による条件分岐\\n\",\n    \"制御構造については第2回と第3回で本格的に扱いますが、\\n\",\n    \"ここでは **`if`** による**条件分岐**（**if文**）の基本的な形だけ紹介します。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def bmax(a,b):\\n\",\n    \"    if a > b: \\n\",\n    \"        return a \\n\",\n    \"    else:\\n\",\n    \"        return b\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"上の関数 `bmax` は、2つの引数の大きい方\\n\",\n    \"（正確には小さくない方）を返します。\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"ここで `if` による条件分岐が用いられています。\\n\",\n    \"\\n\",\n    \"----\\n\",\n    \"```Python\\n\",\n    \"    if a > b: \\n\",\n    \"        return a \\n\",\n    \"    else:\\n\",\n    \"        return b\\n\",\n    \"```\\n\",\n    \"----\\n\",\n    \"`a` が `b` より大きければ `a` が返され、そうでなければ、`b` が返されます。\\n\",\n    \"\\n\",\n    \"ここで、`return a` が、`if` より右にインデントされていることに注意してください。\\n\",\n    \"`return a` は、`a > b` が成り立つときのみ実行されます。\\n\",\n    \"\\n\",\n    \"**`else`** は `if` の右の条件が成り立たない場合を示しています。\\n\",\n    \"`else:` として、必ず `:` が付くことに注意してください。\\n\",\n    \"\\n\",\n    \"また、`return b` も、`else` より右にインデントされていることに注意してください。\\n\",\n    \"`if` と `else` は同じインデントになります。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"bmax(3,5)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"関数の中で `return` と式が実行されますと、関数は即座に返りますので、\\n\",\n    \"関数定義の中のその後の部分は実行されません。\\n\",\n    \"\\n\",\n    \"たとえば、上の条件分岐は以下のように書くこともできます。\\n\",\n    \"\\n\",\n    \"----\\n\",\n    \"```Python\\n\",\n    \"    if a > b: \\n\",\n    \"        return a \\n\",\n    \"    return b\\n\",\n    \"```\\n\",\n    \"----\\n\",\n    \"\\n\",\n    \"ここでは、`if` から始まる条件分岐には `else:` の部分がありません。\\n\",\n    \"条件分岐の後に `return b` が続いています。\\n\",\n    \"（`if` と `return b` のインデントは同じです。）\\n\",\n    \"\\n\",\n    \"`a > b` が成り立っていれば、`return a` が実行されて a の値が返ります。\\n\",\n    \"したがって、その次の `return b` は実行されません。\\n\",\n    \"\\n\",\n    \"`a > b` が成り立っていなければ、`return a` は実行されません。\\n\",\n    \"これで条件分岐は終わりますので、その次にある `return b` が実行されます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"なお、Pythonでは、`max` という関数があらかじめ定義されています。（すなわち、`max` は組み込み関数です。）\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"max(3,5)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 様々な条件\\n\",\n    \"`if` の右などに来る条件として様々なものを書くことができます。これらの条件には **`>`** や **`<`** などの**比較演算子**が含まれています。\\n\",\n    \"\\n\",\n    \"```Python\\n\",\n    \"    x < y         # x は y より小さい\\n\",\n    \"    x <= y        # x は y 以下\\n\",\n    \"    x > y         # x は y より大きい\\n\",\n    \"    x >= y        # x は y 以上\\n\",\n    \"    x == y        # x と y は等しい\\n\",\n    \"    x != y        # x と y は等しくない\\n\",\n    \"```\\n\",\n    \"\\n\",\n    \"特に等しいかどうかの比較には **`==`** という演算子が使われることに注意してください。\\n\",\n    \"`=` は代入の演算子です。\\n\",\n    \"\\n\",\n    \"**`<=`** は小さいか等しいか、**`>=`** は大きいか等しいかを表します。\\n\",\n    \"**`!=`** は等しくないことを表します。\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"さらに、このような基本的な条件を、\\n\",\n    \"**`and`** と **`or`** を用いて組み合わせることができます。\\n\",\n    \"\\n\",\n    \"```Python\\n\",\n    \"    i >= 0 and j > 0   # i は 0 以上で、かつ、j は 0 より大きい\\n\",\n    \"    i < 0 or j > 0     # i は 0 より小さいか、または、j は 0 より大きい\\n\",\n    \"```\\n\",\n    \"\\n\",\n    \"`i` が 1 または 2 または 3 である、という条件は以下のようになります。\\n\",\n    \"\\n\",\n    \"```Python\\n\",\n    \"    i == 1 or i == 2 or i == 3\\n\",\n    \"```\\n\",\n    \"\\n\",\n    \"これを `i == 1 or 2 or 3` と書くことはできませんので、注意してください。\\n\",\n    \"\\n\",\n    \"また、**`not`** によって条件の否定をとることもできます。\\n\",\n    \"\\n\",\n    \"```Python\\n\",\n    \"    not x < y          # x は y より小さくない（x は y 以上）\\n\",\n    \"```\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"比較演算子は、以下のように連続して用いることもできます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"1 < 2 < 3\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"3 >= 2 < 5\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### 練習 `absolute`\\n\",\n    \"\\n\",\n    \"数値 `x` の絶対値を求める関数 `absolute(x)` を定義してください。\\n\",\n    \"Pythonには `abs` という絶対値を求める組み込み関数が用意されていますが、それを使わずに定義してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def absolute(x):\\n\",\n    \"    ...\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"定義ができたら、次のセルを実行して、エラーがでないことを確認してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"assert absolute(5) == 5\\n\",\n    \"assert absolute(-5) == 5\\n\",\n    \"assert absolute(0) == 0\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {\n    \"tags\": []\n   },\n   \"source\": [\n    \"### 練習 `sign`\\n\",\n    \"\\n\",\n    \"`x` が正ならば 1、負ならば -1、ゼロならば 0 を返す関数 `sign(x)` を定義してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def sign(x):\\n\",\n    \"    ...\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"定義ができたら、次のセルを実行して、エラーがでないことを確認してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {\n    \"tags\": [\n     \"raises-exception\"\n    ]\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"assert sign(5) == 1\\n\",\n    \"assert sign(-5) == -1\\n\",\n    \"assert sign(0) == 0\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 真理値を返す関数\\n\",\n    \"ここで、真理値を返す関数について説明します。\\n\",\n    \"\\n\",\n    \"Pythonが扱うデータには様々な種類があります。\\n\",\n    \"数については既に見て来ました。\\n\",\n    \"\\n\",\n    \"**真理値**とは、 **`True`** または **`False`** のどちらかの値のことです。\\n\",\n    \"これらは変数ではなく、**組み込み定数**であることに注意してください。\\n\",\n    \"\\n\",\n    \"- `True` は、正しいこと（**真**）を表します。\\n\",\n    \"- `False` は、間違ったこと（**偽**）を表します。\\n\",\n    \"\\n\",\n    \"実は、`if` の後の条件の式は、`True` か `False` を値として持ちます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"x = 3\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"x > 1\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"上のように、`x` に 3 を代入しておくと、\\n\",\n    \"`x > 1` という条件は成り立ちます。\\n\",\n    \"したがって、`x > 1` という式の値は `True` になるのです。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"x < 1\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"x%2 == 0\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"そして、真理値を返す関数を定義することができます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def is_even(x):\\n\",\n    \"    return x%2 == 0\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"この関数は、`x` を 2 で割った余りが 0 に等しいかどうかという\\n\",\n    \"条件の結果である真理値を返します。\\n\",\n    \"\\n\",\n    \"`x == y` は、`x` と `y` が等しいかどうかという条件です。\\n\",\n    \"この関数は、この条件の結果である真理値を `return` によって返しています。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"is_even(2)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"is_even(3)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"このような関数は、`if` の後に使うことができます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def is_odd(x):\\n\",\n    \"    if is_even(x):\\n\",\n    \"        return False\\n\",\n    \"    else:\\n\",\n    \"        return True\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"このように、直接に `True` や `False` を返すこともできます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"is_odd(2)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"is_odd(3)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## オブジェクト\\n\",\n    \"\\n\",\n    \"Pythonにおける値（式の評価結果）は全て**オブジェクト**と総称されます。\\n\",\n    \"変数の値もオブジェクトです。\\n\",\n    \"\\n\",\n    \"したがって、数や真理値もオブジェクトです。\\n\",\n    \"今後、文字列やリストなど、様々な種類のデータが登場しますが、\\n\",\n    \"それらは全てオブジェクトです。\\n\",\n    \"\\n\",\n    \"今後、オブジェクトという用語がところどころで出て来ますが、\\n\",\n    \"オブジェクトとデータは同義と思って差し支えありません。\\n\",\n    \"正確には、式の評価結果や変数の値となるデータがオブジェクトです。\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## `None`\\n\",\n    \"**`None`** というデータがあります。\\n\",\n    \"\\n\",\n    \"セルの中の式を評価した結果が `None` になると、\\n\",\n    \"何も表示されません。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"None\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"`print` で無理やり表示させると以下のようになります。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"print(None)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"`None` という値は、特段の値が何もない、\\n\",\n    \"ということを表すために使われることがあります。\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"条件としては、`None` は偽と同様に扱われます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"if None:\\n\",\n    \"    print('OK')\\n\",\n    \"else:\\n\",\n    \"    print('NG')\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"`return` の後に式を書かないことがあります。\\n\",\n    \"\\n\",\n    \"---\\n\",\n    \"```Python\\n\",\n    \"    return\\n\",\n    \"```\\n\",\n    \"---\\n\",\n    \"\\n\",\n    \"この場合、以下のように `None` が指定されているとみなされます。\\n\",\n    \"\\n\",\n    \"---\\n\",\n    \"```Python\\n\",\n    \"    return None\\n\",\n    \"```\\n\",\n    \"---\\n\",\n    \"\\n\",\n    \"このようなreturn文を実行すると、関数の実行はそこで終了して `None` が返ります。\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## ▲条件として使われる他の値\\n\",\n    \"`True` と `False` の他に、他の種類のデータも、条件としても用いることができます。\\n\",\n    \"\\n\",\n    \"たとえば:\\n\",\n    \"\\n\",\n    \"- 数のうち、0 や 0.0 は偽、その他は真とみなされます。\\n\",\n    \"- 文字列では、空文字列 `''` のみ偽、その他は真とみなされます。（文字列については2-1を参照。）\\n\",\n    \"- 組み込み定数 `None` は偽とみなされます。（`None` については上記参照。）\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"if 0:\\n\",\n    \"    print('OK')\\n\",\n    \"else:\\n\",\n    \"    print('NG')\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"if -1.1:\\n\",\n    \"    print('OK')\\n\",\n    \"else:\\n\",\n    \"    print('NG')\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## ▲再帰\\n\",\n    \"\\n\",\n    \"一般に、定義しようとするもの自身を定義の中で参照することを、\\n\",\n    \"**再帰**と言います。\\n\",\n    \"再帰による定義を再帰的定義と言います。\\n\",\n    \"\\n\",\n    \"たとえば、数列の漸化式は再帰的定義と考えられます。\\n\",\n    \"実際に、`n` 番目のフィボナッチ数を `fib(n)` とおくと、\\n\",\n    \"`fib(n)` は次のような漸化式を満たします。\\n\",\n    \"\\n\",\n    \"```Python\\n\",\n    \"fib(n) = n  ただし n<2\\n\",\n    \"fib(n) = fib(n-1) + fib(n-2)  ただし n>=2\\n\",\n    \"```\\n\",\n    \"\\n\",\n    \"この漸化式を用いて以下のように実際にフィボナッチ数を計算することができます。\\n\",\n    \"```Python\\n\",\n    \"fib(0) = 0\\n\",\n    \"fib(1) = 1\\n\",\n    \"fib(2) = fib(1) + fib(0) = 1 + 0 = 1\\n\",\n    \"fib(3) = fib(2) + fib(1) = 1 + 1 = 2\\n\",\n    \"fib(4) = fib(3) + fib(2) = 2 + 1 = 3\\n\",\n    \"fib(5) = fib(4) + fib(3) = 3 + 2 = 5\\n\",\n    \"...\\n\",\n    \"```\\n\",\n    \"\\n\",\n    \"この漸化式から、以下のように `fib(n)` の再帰的定義が得られます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def fib(n):\\n\",\n    \"    if n < 2:\\n\",\n    \"        return n\\n\",\n    \"    else:\\n\",\n    \"        return fib(n-1) + fib(n-2)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"実際に、以下のように `fib(n)` の値が求まります。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"fib(10)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 練習の解答\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def absolute(x):\\n\",\n    \"    if x < 0:\\n\",\n    \"        return -x\\n\",\n    \"    else:\\n\",\n    \"        return x\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def sign(x):\\n\",\n    \"    if x < 0:\\n\",\n    \"        return -1\\n\",\n    \"    if x > 0:\\n\",\n    \"        return 1\\n\",\n    \"    return 0\"\n   ]\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"Python 3\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"name\": \"python\"\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 2\n}\n"
  },
  {
    "path": "colab/1/1-4.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# 1-4. テストとデバッグ\\n\",\n    \"\\n\",\n    \"テストとデバッグについて説明します。\\n\",\n    \"\\n\",\n    \"参考\\n\",\n    \"\\n\",\n    \"- https://docs.python.org/ja/3/tutorial/errors.html\\n\",\n    \"\\n\",\n    \"## 仕様・テスト・デバッグ\\n\",\n    \"\\n\",\n    \"プログラムを書くときに、実現しようとしている事柄を**仕様**と呼びます。\\n\",\n    \"\\n\",\n    \"対象のプログラムが仕様に適合しているかを、実際にプログラムを動作させて検査することを、**テスト**と呼びます。\\n\",\n    \"テストの際に、テスト対象に与える入出力ペアのことを、**テストケース**と呼びます。\\n\",\n    \"\\n\",\n    \"書いたプログラムが仕様に適合しているかは、一般に自明ではありません。\\n\",\n    \"テストによって、仕様に反したプログラムの振舞いが、しばしば浮き彫りになります。\\n\",\n    \"仕様に反したプログラムの振舞いの原因を、**バグ**と呼び、それを取り除くことを**デバッグ**と呼びます。\\n\",\n    \"\\n\",\n    \"プログラミングでは、典型的には\\n\",\n    \"\\n\",\n    \"* 仕様を分析する\\n\",\n    \"* プログラムを書く\\n\",\n    \"* テストする\\n\",\n    \"* デバッグする\\n\",\n    \"\\n\",\n    \"という4つの行いを、必要に応じて繰り返すことになります。\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## assert文\\n\",\n    \"\\n\",\n    \"テストとデバッグに有用なのが、**assert文**です。\\n\",\n    \"これは、`assert` の次に書かれた条件式が真であるべきだと仕様を宣言する文です。\\n\",\n    \"偽であった場合は、`AssertionError` が発生してプログラムがそこで停止します。\\n\",\n    \"\\n\",\n    \"与えられた引数を二乗する関数 `square` を用いた具体例を示します。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def square(x):\\n\",\n    \"    return x*x\\n\",\n    \"\\n\",\n    \"x = -2\\n\",\n    \"assert square(x) >= 0\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"このassert文では、仕様として条件式 `square(x) >= 0` を宣言しています。\\n\",\n    \"`square` 関数が「二乗する」という仕様に沿っているなら、その条件式は真であるべきです。\\n\",\n    \"そして、実際 `square` はその仕様に適合しているので、ここではassert文が実行されても何も起きません。\\n\",\n    \"\\n\",\n    \"しかし、`square` にバグがあった場合は、話が変わります。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {\n    \"tags\": [\n     \"raises-exception\"\n    ]\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"def square(x):\\n\",\n    \"    return x+x # バグがある\\n\",\n    \"\\n\",\n    \"x = -2\\n\",\n    \"assert square(x) >= 0\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"上のセルを実行すると、 `AssertionError` が生じます。\\n\",\n    \"\\n\",\n    \"このように、assert文は、それが存在する場所で、満たされていなければならない前提条件を記述するために用います。\\n\",\n    \"assert文で停止したら、記述された前提条件に関わる部分にバグがあることが判明します。\\n\",\n    \"\\n\",\n    \"テストケースは、テスト対象が満たすべき仕様という側面があるので、assert文はテストにも用いられます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def square(x):\\n\",\n    \"    return x*x\\n\",\n    \"\\n\",\n    \"assert square(2) == 4\\n\",\n    \"assert square(-2) == 4\\n\",\n    \"assert square(0) == 0\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"上の例では、`square`に対する3つのテストケースについて、assert文でテストしています。テストケースが満たされた（つまりassert文で停止しなかった）からと言って、テスト対象の `square` が正しいとは言えませんが、仕様への適合度が高いことから、尤もらしいとは言えます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## エラーの分類\\n\",\n    \"\\n\",\n    \"不正なプログラムからは、様々なエラーが生じます。\\n\",\n    \"\\n\",\n    \"エラーには大きく分けて、構文エラー・実行時エラー・論理エラーの3つがあります。\\n\",\n    \"以下では、それぞれの意味と、典型例を示します。\\n\",\n    \"\\n\",\n    \"### 構文エラー\\n\",\n    \"\\n\",\n    \"**構文エラー**（syntax error）とは、プログラムコードが、Pythonの構文に違反しているときに生じるエラーです。\\n\",\n    \"\\n\",\n    \"Pythonにおける構文エラーの典型例として、\\n\",\n    \"\\n\",\n    \"* クォートや括弧の閉じ忘れ\\n\",\n    \"* コロンのつけ忘れ\\n\",\n    \"* インデントの崩れ\\n\",\n    \"* 全角スペースの利用\\n\",\n    \"* `==` の代わりに `=` を使う\\n\",\n    \"* 変数の代わりに文字列を使う（Cf. [2-1 文字列](../2/2-1.ipynb)）\\n\",\n    \"\\n\",\n    \"などが挙げられます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {\n    \"tags\": [\n     \"raises-exception\"\n    ]\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"print('This is the error) # クォートの閉じ忘れ\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def f()  # コロンの付け忘れ\\n\",\n    \"   return 1\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def f():\\n\",\n    \"return 1 # インデントの崩れ\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {\n    \"tags\": [\n     \"raises-exception\"\n    ]\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"1 +　1 # 全角スペースの利用\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"上の例を実行するとわかるように、構文エラーがあると `SyntaxError` や `IndentationError` などが発生します。\\n\",\n    \"それに付随するエラーメッセージが、構文エラーの具体的内容とおおよその位置を説明してくれます。\\n\",\n    \"\\n\",\n    \"構文エラーに直面した際は、エラーメッセージをよく読んで、原因を推察しましょう。\\n\",\n    \"上の例が示すように、エラーメッセージの説明は、必ずしも分かり易くないですが、原因の位置を絞りこむには有用です。\\n\",\n    \"\\n\",\n    \"Pythonでは、構文エラーが実行時に発生しているように見えますが、実際には、実行しようとするプログラムコードの解釈に失敗することでエラーが生じています。\\n\",\n    \"つまり、構文エラーは、プログラムの実行によって生じるエラーではなく、実行できなかったことで生じるエラーです。\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### 実行時エラー\\n\",\n    \"\\n\",\n    \"**実行時エラー**（runtime error）とは、プログラムを実行した際に生じるエラー全般を指します。\\n\",\n    \"簡単に言えば、プログラムを異常停止させるエラーです。\\n\",\n    \"\\n\",\n    \"実行時エラーが生じる典型的な状況として、\\n\",\n    \"\\n\",\n    \"* 存在しない名前の利用（変数名・関数名・メソッド名の誤植）\\n\",\n    \"* グローバル変数のつもりでローカル変数を参照（Cf. [3-3 関数](../3/3-3.ipynb)）\\n\",\n    \"* ゼロによる除算\\n\",\n    \"* 辞書に登録されていないキーに対する値を取得（Cf. [3-1 辞書](../3/3-1.ipynb)）\\n\",\n    \"* 存在しないファイルの読み込み（Cf. [4-1 ファイル入出力](../4/4-1.ipynb)）\\n\",\n    \"* assert文における条件の不成立\\n\",\n    \"\\n\",\n    \"などが挙げられます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {\n    \"tags\": [\n     \"raises-exception\"\n    ]\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"undefined_variable # 未定義の変数の参照\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"x = 1\\n\",\n    \"def f():\\n\",\n    \"    x = x # グローバル変数のつもりでローカル変数を参照\\n\",\n    \"f()\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"1/0 # ゼロによる除算\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"{'a': 1}['b'] # 登録されていないキーに対する値を参照\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"open('non-existent.txt', 'r') # 存在しないファイルの読み込み\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"実行時エラーについては、送出される例外名（上の例では `NameError`・`UnboundLocalError`・`ZeroDivisionError`・`KeyError`・`FileNotFoundError`）が自己説明的であり、それに付随するエラーメッセージも、大抵原因を分かり易く説明してくれます。\\n\",\n    \"\\n\",\n    \"実行時エラーに直面した際は、発生した例外名とエラーメッセージをよく読んで、エラーに関連する言語機能（たとえば辞書やファイル）の仕組みを改めて確認しましょう。\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### 論理エラー\\n\",\n    \"\\n\",\n    \"**論理エラー**（logic error）とは、プログラムを実行できるが、意図したように動作しないことを意味します。\\n\",\n    \"これは、プログラムから発生するエラーではなく、プログラムを書いた人のエラーです。\\n\",\n    \"\\n\",\n    \"バグと呼ばれるものの多くは、論理エラーです。\\n\",\n    \"したがって、デバッグでは、プログラムを書いた人の意図と、プログラムの振舞いを比較検証することになります。\\n\",\n    \"\\n\",\n    \"assert文は、仕様違反という論理エラーを、 `AssertionError` という実行時エラーに変換していると見做すことができます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## デバッグの具体例\\n\",\n    \"\\n\",\n    \"デバッグの具体的なシナリオを説明します。\\n\",\n    \"次の関数 `median(x, y, z)` は、`x` と `y` と `z` の中央値（真ん中の値）を求めようとするものです。\\n\",\n    \"ただし、 `x` と `y` と `z` は相異なる数であると仮定します。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def median(x, y, z):\\n\",\n    \"    if x > y:\\n\",\n    \"        x = y\\n\",\n    \"        y = x\\n\",\n    \"    if z < x:\\n\",\n    \"        return x\\n\",\n    \"    if z < y:\\n\",\n    \"        return z\\n\",\n    \"    return y\\n\",\n    \"\\n\",\n    \"assert median(3, 1, 2) == 2\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"このように、この `median` は間違っています。\\n\",\n    \"\\n\",\n    \"さて、`median` は、ローカル変数の `x`・`y`・`z` のいずれかを返す関数です。\\n\",\n    \"これらの変数の値が期待通りの値であるか、 `print` を入れて印字し、観察してみましょう。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def median(x, y, z):\\n\",\n    \"    print(x, y, z)\\n\",\n    \"    if x > y:\\n\",\n    \"        x = y\\n\",\n    \"        y = x\\n\",\n    \"    print(x, y, z)\\n\",\n    \"    if z < x:\\n\",\n    \"        return x\\n\",\n    \"    if z < y:\\n\",\n    \"        return z\\n\",\n    \"    return y\\n\",\n    \"\\n\",\n    \"assert median(3, 1, 2) == 2\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"関数の入口にある最初の `print` では、期待通りに実引数となる `3`・`1`・`2` が、`x`・`y`・`z` に代入されています。\\n\",\n    \"しかし、2番目の `print` では、 `3` が消えて `1` が複製されています。\\n\",\n    \"このことから、この2つの `print` の間にあるif文が疑わしいことが分かります。\\n\",\n    \"\\n\",\n    \"問題のif文は、`x` と `y` の値を入れ替える意図があるものでした。\\n\",\n    \"その意図を正しく反映すると、次のようになります。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def median(x, y, z):\\n\",\n    \"    print(x, y, z)\\n\",\n    \"    if x > y:\\n\",\n    \"        w = x\\n\",\n    \"        x = y\\n\",\n    \"        y = w\\n\",\n    \"    print(x, y, z)\\n\",\n    \"    if z < x:\\n\",\n    \"        return x\\n\",\n    \"    if z < y:\\n\",\n    \"        return z\\n\",\n    \"    return y\\n\",\n    \"\\n\",\n    \"assert median(3, 1, 2) == 2\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"期待通りに動きました。 \\n\",\n    \"最後に、デバッグ用に導入した `print` は、`median` の仕様には含まれないので、きちんと消しましょう。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def median(x, y, z):\\n\",\n    \"    if x > y:\\n\",\n    \"        w = x\\n\",\n    \"        x = y\\n\",\n    \"        y = w\\n\",\n    \"    if z < x:\\n\",\n    \"        return x\\n\",\n    \"    if z < y:\\n\",\n    \"        return z\\n\",\n    \"    return y\\n\",\n    \"\\n\",\n    \"assert median(3, 1, 2) == 2\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## コーディングスタイル\\n\",\n    \"\\n\",\n    \"実は、生じたバグを取る対処法よりも、そもそもバグが生じにくくする予防法の方が大切です。\\n\",\n    \"Pythonにおいて特に重要視されているのが、**コーディングスタイル**、つまりコードの書き方です。\\n\",\n    \"読みにくい（可読性の低い）コードだと、些細なミスが生じやすく、また見つけにくいからです。\\n\",\n    \"\\n\",\n    \"Pythonでは[**PEP8**](https://www.python.org/dev/peps/pep-0008/)（[非公式日本語訳](http://pep8-ja.readthedocs.io/ja/latest/)）と呼ばれる公式のスタイルガイドがあります。\\n\",\n    \"PEP8には様々な側面でスタイルに関する規則があり、コードの可読性を高めることが強く推奨されています。\\n\",\n    \"ここまでに扱った言語の要素について、たとえば、\\n\",\n    \"\\n\",\n    \"* インデントは半角スペースを4つで1レベル\\n\",\n    \"* `=` `+=` `==` などの演算子の前後に半角スペースを1つ入れる\\n\",\n    \"* `*` と `+` の複合式では `+` の前後に半角スペースを1つ入れる（例：`2*x + y`）\\n\",\n    \"* 関数の開き括弧の前にスペースを入れない\\n\",\n    \"* `l` `I` `O` を変数名として使わない\\n\",\n    \"* 真理値の比較に `==` や `is` を使わない\\n\",\n    \"\\n\",\n    \"などが代表的です。\\n\",\n    \"\\n\",\n    \"PEP8に基づいたコーディングスタイルの自動検査器もあります（参照：[pycodestyle](https://pypi.org/project/pycodestyle/)）。\\n\",\n    \"オンラインサービスもいくつか利用できるので（例：[PEP8 online](http://pep8online.com/)）、適宜活用してみましょう。\\n\",\n    \"\\n\",\n    \"PEP8には陽に言及されていないものの、プログラミング一般に重要なこともあります。\\n\",\n    \"たとえば、\\n\",\n    \"\\n\",\n    \"* 自己説明的でない“マジックナンバー”ではなく記号的に意味がわかる変数を使う\\n\",\n    \"* 不要なコードは削除する\\n\",\n    \"* 1つの関数では1つのタスクだけを処理する\\n\",\n    \"\\n\",\n    \"などは、可読性を上げる代表的なポイントです。\\n\",\n    \"\\n\",\n    \"勘違いはバグを引き起こします。自らが勘違いしないコードを書くことが肝要です。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": []\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"Python 3\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"name\": \"python\"\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 2\n}\n"
  },
  {
    "path": "colab/2/2-1.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# 2-1. 文字列 (string)\\n\",\n    \"\\n\",\n    \"文書処理などに必要な文字列について説明します。\\n\",\n    \"\\n\",\n    \"参考\\n\",\n    \"\\n\",\n    \"- https://docs.python.org/ja/3/tutorial/introduction.html#strings\\n\",\n    \"\\n\",\n    \"Pythonが扱うデータには様々な種類がありますが、**文字列**はいくつかの文字の並びから構成されるデータです。\\n\",\n    \"Pythonは標準で多言語に対応しており、\\n\",\n    \"英語アルファベットだけではなく日本語をはじめとする多くの言語を取り扱えます。\\n\",\n    \"\\n\",\n    \"文字列は、文字の並びをシングルクォート `'...'`、もしくはダブルクォート `\\\"...\\\"` で囲んで記述します。\\n\",\n    \"\\n\",\n    \"以下の例では文字列をそれぞれ、変数 `word1`, `word2` に代入しています。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"word1 = 'hello'\\n\",\n    \"word1\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"word2 = 'Hello'\\n\",\n    \"word2\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"上の変数の値が確かに文字列であることは、組み込み関数 **`type`** によって確認できます。\\n\",\n    \"`type` は、任意のデータを引数として、そのデータの種類を返します。\\n\",\n    \"データの種類は、**データ型**もしくは**型**と呼ばれます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"type(word1)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"**`str`** は文字列のデータ型を意味します。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"type(word2)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"`str` は組み込み関数としても用いられます。\\n\",\n    \"組み込み関数 **`str`** を使えば、任意のデータを文字列に変換できます。\\n\",\n    \"一般に、データ型は、そのデータ型への変換を行う関数として用いられることが多いです。\\n\",\n    \"\\n\",\n    \"1-1で学んだ数値を文字列に変換したい場合、次のように行います。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"word3 = str(123)\\n\",\n    \"word3\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"逆に、`'123'` という文字列を整数に変換するには、1-1で述べた **`int`** という関数を用いることができます。\\n\",\n    \"（実は `int` は整数の型でもあります。）\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"i = int('123')\\n\",\n    \"i\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"関数 **`float`** を用いれば文字列を実数に変換できます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"f = float('123.4')\\n\",\n    \"f\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"文字列の長さは、組み込み関数 **`len`** を用いて次のようにして求めます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"len(word1)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"複数行にわたる文字列を記述するには、トリプルクォート（`'''...'''` もしくは `\\\"\\\"\\\"...\\\"\\\"\\\"`）を用いることができます。\\n\",\n    \"上記の参考URLを参照してください。\\n\",\n    \"トリプルクォートはコメントとしても用いられます。\\n\",\n    \"なお、1-4 のコーディングスタイルのところで紹介したスタイルガイドのPEP8では、\\n\",\n    \"トリプルクォートには `\\\"\\\"\\\"...\\\"\\\"\\\"` を使うのが適切と定められています。\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 文字列とインデックス\\n\",\n    \"\\n\",\n    \"文字列はいくつかの文字によって構成されています。\\n\",\n    \"\\n\",\n    \"文字列 `'hello'` の3番目の文字を得たい場合は、以下のような記法を用います。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"'hello'[2]\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"文字列を値とする変数に対しても同様の記法を用います。多くの場合は変数に対してこの記法を用います。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"word1 = 'hello'\\n\",\n    \"word1[2]\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"この括弧内の数値のことを**インデックス**と呼びます。インデックスは `0` から始まるので、\\n\",\n    \"ある文字列の `x` 番目の要素を得るには、インデックスとして `x-1` を指定する必要があります。\\n\",\n    \"\\n\",\n    \"こうして取得した文字は、Pythonでは長さが 1 の文字列として扱われます。\\n\",\n    \"（プログラミング言語によっては、文字列ではなく別の型のデータとして扱われるものもありますので注意してください。）\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"文字列に対して、インデックスを指定してその要素を変更することはできません。（次のセルはエラーとなります）\\n\",\n    \"Pythonのデータは、大きく、変更可能なものと変更不可能なものに分類できますが、\\n\",\n    \"文字列は変更不可能なデータです。\\n\",\n    \"したがって、文字列を加工する場合は、新たに別の文字列を作成します。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {\n    \"tags\": [\n     \"raises-exception\"\n    ]\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"word1 = 'hello'\\n\",\n    \"word1[0] = 'H'\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"また、文字列の長さ以上のインデックスを指定することはできません。（次はエラーとなります）\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {\n    \"tags\": [\n     \"raises-exception\"\n    ]\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"word1[100]\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"インデックスに負数を指定すると、\\n\",\n    \"文字列を後ろから数えた順序に従って文字列を構成する文字を得ます。\\n\",\n    \"たとえば、文字列の最後の文字を取得するには、`-1` を指定します。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"word1[-1]\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"まとめると文字列 `hello` の正負のインデックスは以下の表の関係になります。  \\n\",\n    \"\\n\",\n    \"|インデックス|h|e|l|l|o|\\n\",\n    \"|-|--|--|--|--|--|\\n\",\n    \"|0か正|0|1|2|3|4|\\n\",\n    \"|負|-5|-4|-3|-2|-1|\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 文字列とスライス\\n\",\n    \"**スライス**と呼ばれる機能を利用して、文字列の一部（部分文字列）を取得できます。\\n\",\n    \"\\n\",\n    \"具体的には、取得したい部分文字列の先頭の文字のインデックスと最後の文字のインデックスに\\n\",\n    \"`1` を加えた値を指定します。\\n\",\n    \"たとえば、ある文字列の2番目の文字から4番目までの文字の部分文字列を得るには次のようにします。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"digits1='0123456789'\\n\",\n    \"digits1[1:4]\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"文字列の先頭（すなわち、インデックスが `0` の文字）を指定する場合、次のように行えます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"digits1[0:3]\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"しかし、最初の `0` は省略しても同じ結果となります。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"digits1[:3]\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"同様に、最後尾の文字のインデックスも、値を省略することもできます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"digits1[3:]\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"digits1[3:5]\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"スライスにおいても負数を指定して、\\n\",\n    \"文字列の最後の方から部分文字列を取得できます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"digits1[-4:-1]\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"スライスでは3番目の値を指定することで、とびとびの文字を指定できます。次のように `digits1[3:9:2]` と指定すると、インデックス `3` から2文字おきにインデックス `9` より小さい文字を並べた部分文字列を得ます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"digits1[3:9:2]\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"3番目の値に `-1` を指定することもできます。これを使えば元の文字列の逆向きの文字列を得ることができます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"digits1[8:4:-1]\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 空文字列\\n\",\n    \"シングルクォート（もしくはダブルクォート）で、何も囲まない場合、長さ 0 の文字列（**空文字列**（くうもじれつ）もしくは、**空列**（くうれつ））となります。\\n\",\n    \"具体的には、下記のように使用します。\\n\",\n    \"\\n\",\n    \"---\\n\",\n    \"```Python\\n\",\n    \"blank = ''\\n\",\n    \"```\\n\",\n    \"---\\n\",\n    \"\\n\",\n    \"空文字列は、次のように、たとえば文字列中からある部分文字列を取り除くのに使用します。\\n\",\n    \"（`replace` は後で説明します。）\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"price = '2,980円'\\n\",\n    \"price.replace(',', '')\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"文字列のスライスにおいて、指定したインデックスの範囲に文字列が存在しない場合、\\n\",\n    \"たとえば、最初に指定したインデックス `x` に対して、\\n\",\n    \"2番目のインデックスの値に `x` 以下のインデックスの値を指定するとどうなるでしょうか？\\n\",\n    \"（ただし、2つのインデックスは同じ符号を持つとし、スライスの3番目の値は用いないとします。）\\n\",\n    \"このような場合、結果は次のように空文字列となります（エラーが出たり、結果が `None` にはならないことに注意してください）。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"digits1='0123456789'\\n\",\n    \"print('空文字列1 = ', digits1[4:2])\\n\",\n    \"print('空文字列2 = ', digits1[-1:-4])\\n\",\n    \"print('空文字列3 = ', digits1[3:3])\\n\",\n    \"print('空文字列ではない = ', digits1[3:-1])\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 文字列の検索\\n\",\n    \"\\n\",\n    \"`文字列A` が `文字列B` を含むかどうかを調べるには、**`in`** 演算子を使います。\\n\",\n    \"具体的には、次のように使用します。\\n\",\n    \"\\n\",\n    \"---\\n\",\n    \"```Python\\n\",\n    \"文字列B in 文字列A\\n\",\n    \"```\\n\",\n    \"---\\n\",\n    \"\\n\",\n    \"調べたい `文字列B` が含まれていれば `True` が、そうでなければ `False` が返ります。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"'lo' in 'hello'\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"'z' in 'hello'\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"実際のプログラムでは文字列を値とする変数を用いることが多いでしょう。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"word1 =  'hello'\\n\",\n    \"substr1 = 'lo'\\n\",\n    \"substr1 in word1\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"substr2 = 'z'\\n\",\n    \"substr2 in word1\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"**`not in`** 演算子は、`in` 演算子の逆を意味します。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"word1 =  'hello'\\n\",\n    \"substr2 = 'z'\\n\",\n    \"substr2 not in word1\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## ▲エスケープシーケンス\\n\",\n    \"文字列を作成するにはシングル `'` あるいはダブルクォート `\\\"` で囲むと説明しました。\\n\",\n    \"これらの文字を含む文字列を作成するには、**エスケープシーケンス**と呼ばれる特殊な文字列を使う必要があります。\\n\",\n    \"\\n\",\n    \"たとえば、下のように文字列に `'` を含む文字列を `'` で囲むと文字列の範囲がずれてエラーとなります。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {\n    \"tags\": [\n     \"raises-exception\"\n    ]\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"non_escaped = 'This is 'MINE''\\n\",\n    \"non_escaped\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"エラーを避けるには、エスケープシーケンスで `'` を記述します、具体的には `'` の前に `\\\\` と記述すると、`'` を含む文字列を作成できます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"escaped1 = 'This is \\\\'MINE\\\\''\\n\",\n    \"escaped1\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"実は、シングルクォートで囲む代わりにダブルクォートを使えばエスケープシーケンスを使わずに記述できます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"doublequated = \\\"This is 'MINE'\\\"\\n\",\n    \"doublequated\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"他にも、ダブルクォートを表す `\\\\\\\"`、`\\\\` を表す `\\\\\\\\` 、改行を表す `\\\\n` など、様々なエスケープシーケンスがあります。 \"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"escaped2 = \\\"時は金なり\\\\n\\\\\\\"Time is money\\\\\\\"\\\\nTime is \\\\\\\\\\\"\\n\",\n    \"print(escaped2)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"3連のシングルクォート、もしくはダブルクォートを利用すれば、 `\\\\\\\"` や `\\\\n` を使わずに記述できます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"triple_single_quated = '''時は金なり\\n\",\n    \"'Time is money'\\n\",\n    \"Time is \\\\\\\\''' \\n\",\n    \"print(triple_single_quated)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"triple_double_quated = \\\"\\\"\\\"時は金なり\\n\",\n    \"'Time is money'\\n\",\n    \"Time is \\\\\\\\\\\"\\\"\\\" \\n\",\n    \"print(triple_single_quated)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"なお、プログラムの一部を無効に（コメントアウト）したいとき、\\n\",\n    \"3連のクォートで囲んで文字列にしてしまうことがあります。\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## バックスラッシュの表示と入力\\n\",\n    \"\\n\",\n    \"エスケープシーケンスの先頭にある文字は、バックスラッシュ `\\\\`（Unicode `U+005C`）です。\\n\",\n    \"これはPythonに限った話ではないですが、バックスラッシュは環境（正確にはフォント）によって見え方が異なります。\\n\",\n    \"Windows上のフォントでは、円記号 `¥` として見えることが多いです。\\n\",\n    \"macOS上のフォントでは、そのままバックスラッシュとして見えることが多いです。\\n\",\n    \"\\n\",\n    \"JIS配列キーボードでは、バックスラッシュキーがないことがあります。\\n\",\n    \"Windows上では、円記号 `¥` キーでバックスラッシュが入力できます。\\n\",\n    \"macOS上では、`Alt` + `¥` キーでバックスラッシュが入力できます。\\n\",\n    \"ただし、IME設定によっても入力方法は変わるので注意してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"print('\\\\n') # 改行文字（バックスラッシュ + n）\\n\",\n    \"print('¥n') # 改行文字でない（円記号 + n）\\n\",\n    \"print('⧵n') # 改行文字でない（Unicode U+29F5 のバックスラッシュ演算子 + n）\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 文字列の連結\\n\",\n    \"**`+`** 演算子を用いれば文字列同士を**連結**できます。\\n\",\n    \"この演算では新しい文字列が作られ、元の文字列は変化しません。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"word1 = 'hello'\\n\",\n    \"word2 = ' world'\\n\",\n    \"text1 = word1 + word2\\n\",\n    \"text1\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"**`*`** 演算子で文字列の繰り返し回数を指定できます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"word1 = 'hello'\\n\",\n    \"word1 * 3\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 文字列とメソッド\\n\",\n    \"文字列に対する操作を行うため、様々な**メソッド**（関数のようなもの）が用意されています。\\n\",\n    \"\\n\",\n    \"メソッドは必要に応じて `(...)` 内に引数を与え、以下のように使用します。\\n\",\n    \"\\n\",\n    \"---\\n\",\n    \"```Python\\n\",\n    \"文字列.メソッド名(式, ...)\\n\",\n    \"# あるいは\\n\",\n    \"文字列変数.メソッド名(式, ...)\\n\",\n    \"```\\n\",\n    \"---\\n\",\n    \"\\n\",\n    \"文字列には以下のようなメソッドが用意されています。\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### **置換**\\n\",\n    \"\\n\",\n    \"**`replace`** メソッドは、指定した `部分文字列A` を、別に指定した `文字列B` で置き換えた文字列を作成します。\\n\",\n    \"この操作では、元の文字列は変化しません。具体的には、次のように使用します。\\n\",\n    \"\\n\",\n    \"---\\n\",\n    \"```Python\\n\",\n    \"文字列.replace(部分文字列A, 文字列B)\\n\",\n    \"```\\n\",\n    \"---\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"word1 = 'hello'\\n\",\n    \"word1.replace('l', '123')\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"word1\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### 練習\\n\",\n    \"\\n\",\n    \"英語の文章からなる文字列 `str_engsentences` が引数として与えられたとき、`str_engsentences` 中に含まれる全ての句読点（`.`, `,`, `:`, `;`, `!`, `?`）を削除した文字列を返す関数 `remove_punctuations` を作成してください。\\n\",\n    \"（練習の解答はこのノートブックの一番最後にあります。）\\n\",\n    \"\\n\",\n    \"次のセルの `...` のところを書き換えて `remove_punctuations(str_engsentences)` を作成してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def remove_punctuations(str_engsentences):\\n\",\n    \"    ...\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"上のセルで解答を作成した後、以下のセルを実行し、実行結果が `True` になることを確認してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {\n    \"tags\": [\n     \"raises-exception\"\n    ]\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"print(remove_punctuations('Quiet, uh, donations, you want me to make a donation to the coast guard youth auxiliary?') == 'Quiet uh donations you want me to make a donation to the coast guard youth auxiliary')\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### 練習\\n\",\n    \"\\n\",\n    \"ATGCの4種類の文字から成る文字列 `str_atgc` が引数として与えられたとき、文字列 `str_pair` を返す関数 `atgc_bppair` を作成してください。ただし、`str_pair` は、`str_atgc` 中の各文字列に対して、\\n\",\n    \"`A` を `T` に、`T` を `A` に、`G` を `C` に、`C` を `G` に置き換えたものです。\\n\",\n    \"\\n\",\n    \"次のセルの `...` のところを書き換えて `atgc_bppair(str_atgc)` を作成してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def atgc_bppair(str_atgc):\\n\",\n    \"    ...\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"上のセルで解答を作成した後、以下のセルを実行し、実行結果が `True` になることを確認してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {\n    \"tags\": [\n     \"raises-exception\"\n    ]\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"print(atgc_bppair('AAGCCCCATGGTAA') == 'TTCGGGGTACCATT')\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### **検索**\\n\",\n    \"\\n\",\n    \"**`index`** メソッドにより、指定した `部分文字列B` が `文字列A` のどこに存在するか調べることができます。具体的には、次のように使用します。\\n\",\n    \"\\n\",\n    \"---\\n\",\n    \"```Python\\n\",\n    \"文字列A.index(部分文字列B)\\n\",\n    \"```\\n\",\n    \"---\\n\",\n    \"\\n\",\n    \"ただし、指定した部分文字列が文字列に複数回含まれる場合、最初のインデックスが返されます。また、指定した部分文字列が文字列に含まれない場合は、エラーとなります。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"word1 = 'hello'\\n\",\n    \"word1.index('lo')\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"word1.index('l')\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"以下はエラーとなります。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {\n    \"tags\": [\n     \"raises-exception\"\n    ]\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"word1.index('a')\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"**`find`** メソッドも `index` と同様に部分文字列を検索し、最初に出現するインデックスを返します。\\n\",\n    \"\\n\",\n    \"`index` との違いは、部分文字列が含まれない場合エラーとはならず `-1` が返されることです。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"word1 = 'hello'\\n\",\n    \"word1.find('a')\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### 練習\\n\",\n    \"\\n\",\n    \"コロン (`:`) を1つだけ含む文字列 `str1` を引数として与えると、コロンの左右に存在する文字列を入れ替えた文字列を返す関数 `swap_colon(str1)` を作成してください。\\n\",\n    \"\\n\",\n    \"次のセルの `...` のところを書き換えて `swap_colon(str1)` を作成してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def swap_colon(str1):\\n\",\n    \"    ...\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"上のセルで解答を作成した後、以下のセルを実行し、実行結果が `True` になることを確認してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {\n    \"tags\": [\n     \"raises-exception\"\n    ]\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"print(swap_colon('hello:world') == 'world:hello')\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### **数え上げ**\\n\",\n    \"\\n\",\n    \"**`count`** メソッドにより、指定した `部分文字列B` が `文字列A` にいくつ存在するか調べることができます。\\n\",\n    \"\\n\",\n    \"---\\n\",\n    \"```Python\\n\",\n    \"文字列A.count(部分文字列B)\\n\",\n    \"```\\n\",\n    \"---\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"word1 = 'hello'\\n\",\n    \"word1.count('l')\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"'aaaaaaa'.count('aa')\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### 練習\\n\",\n    \"\\n\",\n    \"ATGCの4種類の文字から成る文字列 `str_atgc` と塩基名（`A`, `T`, `G`, `C` のいずれか）を指定する文字列 `str_bpname` が引数として与えられたとき、`str_atgc` 中に含まれる塩基 `str_bpname` の数を返す関数 `atgc_count` を作成してください。\\n\",\n    \"\\n\",\n    \"次のセルの `...` のところを書き換えて `atgc_count(str_atgc, str_bpname)` を作成してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def atgc_count(str_atgc, str_bpname):\\n\",\n    \"    ...\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"上のセルで解答を作成した後、以下のセルを実行し、実行結果が `True` になることを確認してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {\n    \"tags\": [\n     \"raises-exception\"\n    ]\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"print(atgc_count('AAGCCCCATGGTAA', 'A') == 5)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### **大文字**・**小文字**\\n\",\n    \"**`lower`**, **`capitalize`**, **`upper`** メソッドを用いると、文字列の中の英文字を小文字に変換したり、大文字に変換したりすることができます。\\n\",\n    \"\\n\",\n    \"これらの操作では、元の文字列は変化しません。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"upper_dna = 'DNA'\\n\",\n    \"upper_dna.lower() # 全ての文字を小文字にする\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"upper_dna\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"lower_text = 'hello world!'\\n\",\n    \"lower_text.capitalize() # 先頭文字を大文字にする\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"lower_text\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"lower_text.upper() #全ての文字を大文字にする\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"lower_text\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### ▲空白文字の削除\\n\",\n    \"\\n\",\n    \"半角スペース `' '`・改行文字 `'\\\\n'`・タブ文字 `'\\\\t'`・全角スペース `'　'` などを総称して**空白文字**と呼びます。\\n\",\n    \"\\n\",\n    \"`strip` メソッドを用いると、文字列の前後にある連続した空白文字を削除した文字列を取得できます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"'  abc\\\\n'.strip()\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"'　a b c　\\\\n'.strip()\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"左側の空白だけ削除する `lstrip` と右側の空白だけ削除する `rstrip` もあります。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"'  abc\\\\n'.lstrip()\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"'  abc\\\\n'.rstrip()\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## **文字列の比較演算**\\n\",\n    \"\\n\",\n    \"比較演算子、`==`, `<`, `>` などを用いて、2つの文字列を比較することもできます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"print('abc' == 'abc')\\n\",\n    \"print('ab' == 'abc')\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"print('abc' != 'abc')\\n\",\n    \"print('ab' != 'abc')\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"文字列の大小の比較は、いわゆる辞書式による比較で、文字列の最初の文字から順に比較して大小を決めます。\\n\",\n    \"片方がもう片方を拡張したものであれば、拡張した方を大きいとします。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"print('abc' <= 'abc')\\n\",\n    \"print('abc' < 'abc')\\n\",\n    \"print('abc' < 'abd')\\n\",\n    \"print('ab' < 'abc')\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 練習\\n\",\n    \"\\n\",\n    \"英語の文字列 `str_engsentences` が引数として与えられたとき、それが全て小文字である場合、`True` を返し、そうでない場合、 `False` を返す関数 `check_lower` を作成してください。\\n\",\n    \"\\n\",\n    \"次のセルの `...` のところを書き換えて `check_lower(str_engsentences)` を作成してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def check_lower(str_engsentences):\\n\",\n    \"    ...\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"上のセルで解答を作成した後、以下のセルを実行し、実行結果が全て `True` になることを確認してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {\n    \"tags\": [\n     \"raises-exception\"\n    ]\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"print(check_lower('down down down') == True)\\n\",\n    \"print(check_lower('There were doors all round the hall, but they were all locked') == False)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 初心者によくある誤解 --- **変数**と**文字列**の混乱\\n\",\n    \"\\n\",\n    \"初心者によくある誤解として、変数と文字列を混乱する例が見られます。たとえば、文字列を引数に取る次のような関数 `func` を考えます（ `func` は引数として与えられた文字列を大文字にして返す関数です）。　\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def func(str1):\\n\",\n    \"    return str1.upper()\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"ここで変数 `str2` を引数として `func` を呼ぶと、`str2` に格納されている文字列が大文字になって返ってきます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"str2 = 'abc'\\n\",\n    \"func(str2)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"次のように `func` を呼ぶと上とは結果が異なります。次の例では変数 `str2` （に格納されている文字列 `abc`）ではなく、文字列 `'str2'` を引数として `func` を呼び出しています。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"str2 = 'abc'\\n\",\n    \"func('str2')\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 練習\\n\",\n    \"\\n\",\n    \"コンマ (`,`) を含む英語の文章からなる文字列 `str_engsentences` が引数として与えられたとき、`str_engsentences` 中の一番最初のコンマより後の文章のみかならなる文字列 `str_res` を返す関数 `remove_clause` を作成してください。ただし、 `str_res` の先頭は大文字のアルファベットとしてください。\\n\",\n    \"\\n\",\n    \"次のセルの `...` のところを書き換えて `remove_clause(str_engsentences)` を作成してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def remove_clause(str_engsentences):\\n\",\n    \"    ...\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"上のセルで解答を作成した後、以下のセルを実行し、実行結果が `True` になることを確認してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {\n    \"tags\": [\n     \"raises-exception\"\n    ]\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"print(remove_clause(\\\"It's being seen, but you aren't observing.\\\") == \\\"But you aren't observing.\\\")\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 練習の解答\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def remove_punctuations(str_engsentences):\\n\",\n    \"    str1 = str_engsentences.replace('.', '') # 指定の文字を空文字に置換\\n\",\n    \"    str1 = str1.replace(',', '')\\n\",\n    \"    str1 = str1.replace(':', '')\\n\",\n    \"    str1 = str1.replace(';', '')\\n\",\n    \"    str1 = str1.replace('!', '')\\n\",\n    \"    str1 = str1.replace('?', '')\\n\",\n    \"    return str1\\n\",\n    \"#remove_punctuations('Quiet, uh, donations, you want me to make a donation to the coast guard youth auxiliary?')\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def atgc_bppair(str_atgc):\\n\",\n    \"    str_pair = str_atgc.replace('A', 't')# 指定の文字に置換。ただし全て小文字\\n\",\n    \"    str_pair = str_pair.replace('T', 'a')\\n\",\n    \"    str_pair = str_pair.replace('G', 'c')\\n\",\n    \"    str_pair = str_pair.replace('C', 'g')\\n\",\n    \"    str_pair = str_pair.upper() # 置換済みの小文字の列を大文字に変換\\n\",\n    \"    return str_pair\\n\",\n    \"#atgc_bppair('AAGCCCCATGGTAA') \"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def swap_colon(str1):\\n\",\n    \"    #コロンの位置を取得する # findでもOK\\n\",\n    \"    col_index = str1.index(':')\\n\",\n    \"    #コロンの位置を基準に前半と後半の部分文字列を取得する\\n\",\n    \"    str2, str3 = str1[:col_index], str1[col_index+1:]\\n\",\n    \"    #部分文字列の順序を入れ替えて結合する\\n\",\n    \"    str4 = str3 + ':' + str2\\n\",\n    \"    return str4\\n\",\n    \"#swap_colon('hello:world')\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def atgc_count(str_atgc, str_bpname):\\n\",\n    \"    return str_atgc.count(str_bpname)\\n\",\n    \"#atgc_count('AAGCCCCATGGTAA', 'A') \"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def check_lower(str_engsentences):\\n\",\n    \"    if str_engsentences == str_engsentences.lower():#元の文字列と小文字に変換した文字列を比較する\\n\",\n    \"        return True\\n\",\n    \"    return False\\n\",\n    \"#check_lower('down down down')\\n\",\n    \"#check_lower('There were doors all round the hall, but they were all locked')\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def remove_clause(str_engsentences):\\n\",\n    \"    int_index = str_engsentences.find(',')\\n\",\n    \"    str1 = str_engsentences[int_index+2:]\\n\",\n    \"    return str1.capitalize()\\n\",\n    \"#remove_clause(\\\"It's being seen, but you aren't observing.\\\")\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": []\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"Python 3\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"name\": \"python\"\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 2\n}\n"
  },
  {
    "path": "colab/2/2-2.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# 2-2. リスト (list)\\n\",\n    \"\\n\",\n    \"複数のデータを要素としてまとめて取り扱うデータとして、リストとタプルについて説明します。\\n\",\n    \"\\n\",\n    \"参考\\n\",\n    \"\\n\",\n    \"- https://docs.python.org/ja/3/tutorial/introduction.html#lists\\n\",\n    \"- https://docs.python.org/ja/3/tutorial/datastructures.html#tuples-and-sequences\\n\",\n    \"\\n\",\n    \"文字列を構成する要素は文字のみでしたが、**リスト**では構成する要素としてあらゆる型のデータを指定できます。\\n\",\n    \"他のプログラミング言語では、リストに相当するものとして**配列**（もしくはアレイ）やベクターなどがあります。\\n\",\n    \"\\n\",\n    \"リストを作成するには、リストを構成する要素をコンマで区切り全体をかぎ括弧 `[...]` で囲みます。  \\n\",\n    \"\\n\",\n    \"以下のセルでは数値を要素とするリストを作成して、変数に代入しています。\\n\",\n    \"さらに、文字列と同様に組み込み関数 `type` を用いて、変数の値がリストであることを確認しています。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"numbers = [0, 10, 20, 30, 40, 50]\\n\",\n    \"numbers\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"type(numbers)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"リストのデータ型は **`list`** です。\\n\",\n    \"（なお、後で見るように、`list` は他のデータをリストに変換する関数としても用いられます。）\\n\",\n    \"\\n\",\n    \"次に文字列を構成要素とするリストを作成してみます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"fruits = ['apple', 'banana', 'chelly']\\n\",\n    \"fruits\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"リストの要素としてあらゆる型のデータを指定でき、それらは混在してもかまいません。\\n\",\n    \"以下のセルでは、数値と文字列が混在しています。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"numbers_fruits = [10, 'apple', 20, 'banana', 30]\\n\",\n    \"numbers_fruits\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"次のように、何も要素を格納していないリスト（**空リスト**）を作成できます。\\n\",\n    \"空リストはプログラム実行の途中結果を記録する場合などによく使われています。\\n\",\n    \"具体的な例については、後述する `append` メソッドの項を参照してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"empty=[]\\n\",\n    \"empty\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"なお、`[]` を用いて空リストを作成するたびに、\\n\",\n    \"常に新しいオブジェクト（それまでに作られたオブジェクトとは同一でないオブジェクト）が生成されます。\\n\",\n    \"詳しくは「▲オブジェクトの等価性と同一性」を参照してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## リストとインデックス\\n\",\n    \"文字列の場合と同様に、インデックスを指定してリストの要素を取り出せます。\\n\",\n    \"リストの `x` 番目の要素を取得するには次のような記法を用います。\\n\",\n    \"インデックスは 0 から始まることに注意してください。\\n\",\n    \"\\n\",\n    \"```Python\\n\",\n    \"リスト[x-1]\\n\",\n    \"```\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"abcd = ['a', 'b', 'c', 'd']\\n\",\n    \"abcd[2]\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"文字列の場合とは異なり、リストは変更可能なデータです。\\n\",\n    \"すなわちインデックスで指定されるリストの要素は、代入によって変更できます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"abcd = ['a', 'b', 'c', 'd']\\n\",\n    \"abcd[2] = 'hello'\\n\",\n    \"abcd\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"文字列と同様に、スライスを使った範囲指定も可能です。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"abcd = ['a', 'b', 'c', 'd']\\n\",\n    \"abcd[1:3]\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"abcd = ['a', 'b', 'c', 'd']\\n\",\n    \"abcd[0:4:2]\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"リストのスライスに対しては、代入も可能です。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"abcd = ['a', 'b', 'c', 'd']\\n\",\n    \"abcd[1:3] = ['x', 'y', 'z']\\n\",\n    \"abcd\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 練習\\n\",\n    \"リスト `ln` を引数として取り、`ln` の偶数番目のインデックスの値を削除したリストを返す関数 `remove_evenindex` を作成してください（ただし、0 は偶数として扱うものとします）。\\n\",\n    \"\\n\",\n    \"ヒント：スライスを使います。\\n\",\n    \"\\n\",\n    \"以下のセルの `...` のところを書き換えて `remove_evenindex(ln)` を作成してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def remove_evenindex(ln):\\n\",\n    \"    ...\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"上のセルで解答を作成した後、以下のセルを実行し、実行結果が全て `True` になることを確認してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {\n    \"tags\": [\n     \"raises-exception\"\n    ]\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"print(remove_evenindex(['a', 'b', 'c', 'd', 'e', 'f', 'g']) == ['b', 'd', 'f'] )\\n\",\n    \"print(remove_evenindex([1, 2, 3, 4, 5]) == [2, 4])\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## **多重リスト**\\n\",\n    \"リストの要素としてリストを指定することもできます。\\n\",\n    \"リストを要素とするリストは多重リストと呼ばれます。\\n\",\n    \"次は二重リストの例です。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"lns = [[1, 2, 3], [10, 20, 30], ['a', 'b', 'c']]\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"多重リストの要素指定は複数のインデックスで行います。\\n\",\n    \"前の例で外側の `[]` で示されるリストの2番目の要素のリスト、\\n\",\n    \"すなわち `[10, 20, 30]` の最初の要素は次のように指定します。 \"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"lns[1][0]\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"3番目のリストそのものを取り出したいときは、次のように指定します。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"lns[2]\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"以下のようにリストの要素として、リストを値とする変数を指定することもできます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"lns2 = [lns, ['x', 1, [11, 12, 13]], ['y', [100, 120, 140]] ]\\n\",\n    \"lns2\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"lns2[0]\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## リストに対する関数・演算子・メソッド\\n\",\n    \"\\n\",\n    \"### リストの要素数\\n\",\n    \"\\n\",\n    \"組み込み関数 **`len`** はリストの長さ、すなわち要素数、を返します。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"numbers = [0, 10, 20, 30, 40, 50]\\n\",\n    \"len(numbers)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### `max` と `min`\\n\",\n    \"\\n\",\n    \"リストを引数とする関数は色々とあります。\\n\",\n    \"関数 **`max`** は、数のリストが与えられると、その中の最大値を返します。\\n\",\n    \"同様に関数 **`min`** はリストの中の最小値を返します。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"numbers = [30, 50, 10, 20, 40, 60]\\n\",\n    \"max(numbers)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"numbers = [30, 50, 10, 20, 40, 60]\\n\",\n    \"min(numbers)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"`max` と `min` は文字列のリストに対しても適用できます。文字列の比較は、いわゆる辞書順で行われます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"characters = ['e', 'd', 'a', 'c', 'f', 'b']\\n\",\n    \"min(characters)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### `sum`\\n\",\n    \"\\n\",\n    \"関数 **`sum`** は、数のリストが与えられると、その要素の総和を返します。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"numbers = [30, 50, 10, 20, 40, 60]\\n\",\n    \"sum(numbers)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"sum([])\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### リストと演算子\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"演算子 **`+`** によってリストの連結、**`*`** によって連結における繰り返し回数を指定することができます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"numbers = [0, 10, 20, 30, 40, 50]\\n\",\n    \"numbers + ['a', 'b', 'c']\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"numbers*3\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"要素が全て同じ値（たとえば、`0` ）のリストを作る最も簡単な方法は、この `*` 演算子を使う方法です。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"zero10 = [0] * 10\\n\",\n    \"zero10\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"`*` は `+` を繰り返し行うのと同じ結果を返します。\\n\",\n    \"たとえば、`x*3` は `x+x+x` と同じ結果を返します。\\n\",\n    \"\\n\",\n    \"`x` が多重リストのとき、`x` の要素であるリストが `y` の中に複数回現れます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"x = [[0, 1], [2, 3]]\\n\",\n    \"y = x*3\\n\",\n    \"y\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"このとき、`x` の要素が変更されると、`y` の中では複数箇所に変化が起こるので、注意してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"x[0][0] = 99\\n\",\n    \"y\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"これは、`y` の中の複数個所にあるオブジェクトが同一だからです。\\n\",\n    \"詳しくは、以下の「▲オブジェクトの等価性と同一性」を参照してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"演算子 **`in`** は、左辺の要素がリストに含まれれば `True` を、それ以外では `False` を返します。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"10 in numbers\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"リストに対する `in` 演算子は、論理演算 `or` を簡潔に記述するのに用いることもできます。 たとえば、\\n\",\n    \"\\n\",\n    \"---\\n\",\n    \"```Python\\n\",\n    \"a1 == 1 or a1 == 3 or a1 == 7:\\n\",\n    \"```\\n\",\n    \"---\\n\",\n    \"\\n\",\n    \"は\\n\",\n    \"\\n\",\n    \"---\\n\",\n    \"```Python\\n\",\n    \"a1 in [1, 3, 7]:\\n\",\n    \"```\\n\",\n    \"---\\n\",\n    \"\\n\",\n    \"と同じ結果を得られます。 `or` の数が多くなる場合は、`in` を用いた方がより読みやすいプログラムを書くことができます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"a1 = 1\\n\",\n    \"print(a1 == 1 or a1 == 3 or a1 == 7, a1 in [1, 3, 7])\\n\",\n    \"a1 = 3\\n\",\n    \"print(a1 == 1 or a1 == 3 or a1 == 7, a1 in [1, 3, 7])\\n\",\n    \"a1 = 5\\n\",\n    \"print(a1 == 1 or a1 == 3 or a1 == 7, a1 in [1, 3, 7])\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"`in` 演算子は、左辺の要素がリストに含まれるかどうかを、\\n\",\n    \"リストの要素を最初から順に調べることで判定しています。\\n\",\n    \"したがって、リストの長さに比例した時間がかかります。\\n\",\n    \"つまり、リストの長さが大きければ、それなりの時間がかかることに注意してください。\\n\",\n    \"\\n\",\n    \"**`not in`** 演算子は、`in` 演算子の逆を意味します。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"10 not in numbers\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"11 not in numbers\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### 指定した要素のインデックス取得と数えあげ\\n\",\n    \"\\n\",\n    \"**`index`** メソッドは引数で指定した要素のインデックスの番号を返します。\\n\",\n    \"文字列には `index` に加えてこれと似た `find` メソッドもありましたが、リストでは使えません。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"numbers = [0, 10, 20, 30, 40, 50]\\n\",\n    \"numbers.index(20) \"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"**`count`** メソッドは指定した要素の数を返します。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"all20 = [20]*3\\n\",\n    \"all20.count(20) # 指定した要素のリスト内の数\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### 並べ替え（**`sort`** メソッド）\\n\",\n    \"\\n\",\n    \"`sort` メソッドはリスト内の要素を並べ替えます。\\n\",\n    \"引数に何も指定しなければ昇順でとなります。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"numbers = [30, 50, 10, 20, 40, 60]\\n\",\n    \"numbers.sort()\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"numbers\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"characters = ['e', 'd', 'a', 'c', 'f', 'b']\\n\",\n    \"characters.sort()\\n\",\n    \"characters\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"`reverse = True` オプションを指定すれば、要素を降順に並べ替えることもできます。\\n\",\n    \"（これは 3.3 のキーワード引数と呼ばれるものですが、ここでは天下り的に、\\n\",\n    \"並べ替えの方法を指定する情報と理解しておいてください。）\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"numbers = [30, 50, 10, 20, 40, 60]\\n\",\n    \"numbers.sort(reverse = True)\\n\",\n    \"numbers\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### 並べ替え（**`sorted`** 組み込み関数）\\n\",\n    \"\\n\",\n    \"関数 `sorted` ではリストを引数に取って、そのリスト内の要素を昇順に並べ替えた結果をリストとして返します。\\n\",\n    \"\\n\",\n    \"---\\n\",\n    \"```Python\\n\",\n    \"sorted(リスト)\\n\",\n    \"```\\n\",\n    \"---\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"numbers = [30, 50, 10, 20, 40, 60]\\n\",\n    \"sorted(numbers)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"文字列の比較は、いわゆる辞書順で行われます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"characters = ['e', 'd', 'a', 'c', 'f', 'b']\\n\",\n    \"sorted(characters)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"`sorted` においても、 `reverse = True` と記述することで要素を降順に並べ替えることができます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"numbers = [30, 50, 10, 20, 40, 60]\\n\",\n    \"sorted(numbers, reverse=True)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"ついでですが、多重リストをソートするとどのような結果が得られるか確かめてみてください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"lns = [[20, 5], [10, 30], [40, 20], [30, 10]]\\n\",\n    \"lns.sort()\\n\",\n    \"lns\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 破壊的（インプレース）な操作と非破壊的な生成\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"上記では、`sort` メソッドと `sorted` 関数を紹介しましたが、両者の使い方が異なることに気が付きましたか？\\n\",\n    \"\\n\",\n    \"具体的には、` sort` メソッドでは元のリストが変更されています。\\n\",\n    \"一方、`sorted` 関数では元のリストはそのままになっています。もう一度確認してみましょう。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"numbers = [30, 50, 10, 20, 40, 60]\\n\",\n    \"numbers.sort()\\n\",\n    \"print('sortメソッドの実行後の元のリスト:', numbers)\\n\",\n    \"numbers = [30, 50, 10, 20, 40, 60]\\n\",\n    \"sorted(numbers)\\n\",\n    \"print('sorted関数の実行後の元のリスト:', numbers)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"このように、`sort` メソッドは元のリストを変更してしまいます。\\n\",\n    \"このような操作を**破壊的**あるいは**インプレース** (**in-place**) であるといいます。\\n\",\n    \"\\n\",\n    \"一方、`sorted` 関数は新しいリストを生成し元のリストを破壊しません、このような操作は**非破壊的**であるといいます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"`sorted` 関数を用いた場合、その返値（並べ替えの結果）は新しい変数に代入して使うことができます。  \\n\",\n    \"\\n\",\n    \"一方、`sort` メソッドはリストを返さないためそのような使い方はできません。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"numbers = [30, 50, 10, 20, 40, 60]\\n\",\n    \"numbers1 = sorted(numbers)\\n\",\n    \"print('sorted関数の返値:', numbers1)\\n\",\n    \"\\n\",\n    \"numbers = [30, 50, 10, 20, 40, 60]\\n\",\n    \"numbers2 = numbers.sort()\\n\",\n    \"print('sortメソッドの返値:', numbers2)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## リストを操作するメソッドなど\\n\",\n    \"\\n\",\n    \"ここからはリストを操作するためのメソッドなどを紹介していきます。\\n\",\n    \"\\n\",\n    \"メソッドや組み込み関数が破壊的であるかどうかは、一般にその名称などからは判断できません。\\n\",\n    \"それぞれ破壊的かどうか理解してから利用しなければなりません。\\n\",\n    \"\\n\",\n    \"なお、次の `append` メソッド以外は、必要に応じて参照すればよく、\\n\",\n    \"それ以降タプルの項まで飛ばして構いません。\\n\",\n    \"\\n\",\n    \"### リストに要素を追加する\\n\",\n    \"\\n\",\n    \"**`append`** メソッドはリストの最後尾に指定した要素を付け加えます。\\n\",\n    \"\\n\",\n    \"---\\n\",\n    \"```Python\\n\",\n    \"リスト.append(追加する要素) \\n\",\n    \"```\\n\",\n    \"---\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"numbers = [10, 20, 30, 40, 50]\\n\",\n    \"numbers.append(100)\\n\",\n    \"numbers\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"`append` は、上述した空のリストと組み合わせて、あるリストから特定の条件を満たす要素のみからなる新たなリストを構成する、というような状況でしばしば用いられます。たとえば、リスト `numbers1 = [10, -10, 20, 30, -20, 40, -30]` から `0` より大きい要素のみを抜き出したリスト `positives` は次のように構成することができます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"numbers1 = [10, -10, 20, 30, -20, 40, -30] \\n\",\n    \"positives = [] # 空のリストを作成する\\n\",\n    \"positives.append(numbers1[0])\\n\",\n    \"positives.append(numbers1[2])\\n\",\n    \"positives.append(numbers1[3])\\n\",\n    \"positives.append(numbers1[5])\\n\",\n    \"positives\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### ▲リストにリストの要素を追加する\\n\",\n    \"\\n\",\n    \" **`extend`** メソッドはリストの最後尾に指定したリストの要素を付け加えます。\\n\",\n    \"\\n\",\n    \"---\\n\",\n    \"```Python\\n\",\n    \"リスト.extend(追加するリスト) \\n\",\n    \"```\\n\",\n    \"---\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"numbers = [10, 20, 30, 40, 50]\\n\",\n    \"numbers.extend([200, 300, 400, 200]) # numbers += [200, 300, 400, 200] と同じ\\n\",\n    \"numbers\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### ▲リストに要素を挿入する\\n\",\n    \"\\n\",\n    \"**insert** メソッドはリストのインデックスを指定した位置に新しい要素を挿入します。  \\n\",\n    \"\\n\",\n    \"---\\n\",\n    \"```Python\\n\",\n    \"リスト.insert(インデックス, 新しい要素)\\n\",\n    \"```\\n\",\n    \"---\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"numbers = [10, 20, 30, 40, 50]\\n\",\n    \"numbers.insert(1, 1000)\\n\",\n    \"numbers\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### ▲リストから要素を削除する\\n\",\n    \"\\n\",\n    \"**`remove`** メソッドは指定した要素をリストから削除します。  \\n\",\n    \"\\n\",\n    \"---\\n\",\n    \"```Python\\n\",\n    \"リスト.remove(削除したい要素)\\n\",\n    \"```\\n\",\n    \"---\\n\",\n    \"\\n\",\n    \"ただし、指定した要素が複数個リストに含まれる場合、一番最初の要素が削除されます。また、指定した値がリストに含まれない場合はエラーとなります。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"numbers = [10, 20, 30, 40, 20] \\n\",\n    \"numbers.remove(30) # 指定した要素を削除\\n\",\n    \"numbers\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"numbers.remove(20) # 指定した要素が複数個リストに含まれる場合、一番最初の要素を削除\\n\",\n    \"numbers\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {\n    \"tags\": [\n     \"raises-exception\"\n    ]\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"numbers.remove(100) # リストに含まれない値を指定するとエラー\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### ▲リストからインデックスで指定した要素を削除する\\n\",\n    \"\\n\",\n    \"**`pop`** メソッドはリストから指定したインデックスを削除し、その要素を返します。\\n\",\n    \"\\n\",\n    \"---\\n\",\n    \"```Python\\n\",\n    \"リスト.pop(削除したい要素のインデックス)\\n\",\n    \"```\\n\",\n    \"---\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"numbers = [10, 20, 20, 30, 20, 40]\\n\",\n    \"print(numbers.pop(3))\\n\",\n    \"print(numbers)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"インデックスを指定しない場合、最後尾の要素を削除して返します。\\n\",\n    \"\\n\",\n    \"---\\n\",\n    \"```Python\\n\",\n    \"リスト.pop()\\n\",\n    \"```\\n\",\n    \"---\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"ln = [10, 20, 30, 20, 40]\\n\",\n    \"print(ln.pop())\\n\",\n    \"print(ln)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### ▲リスト要素を削除する\\n\",\n    \"\\n\",\n    \"**`del`** 文は指定するリストの要素を削除します。具体的には以下のように削除したい要素をインデックスで指定します。  \\n\",\n    \"`del` も破壊的であることに注意してください。\\n\",\n    \"\\n\",\n    \"---\\n\",\n    \"```Python\\n\",\n    \"del リスト[x]\\n\",\n    \"```\\n\",\n    \"---\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"numbers = [10, 20, 30, 40, 50]\\n\",\n    \"del numbers[2]\\n\",\n    \"numbers\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"スライスを使うことも可能です。\\n\",\n    \"\\n\",\n    \"---\\n\",\n    \"```Python\\n\",\n    \"del リスト[x:y]\\n\",\n    \"```\\n\",\n    \"---\\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"numbers = [10, 20, 30, 40, 50]\\n\",\n    \"del numbers[2:4]\\n\",\n    \"numbers\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### ▲リストの要素を逆順にする\\n\",\n    \"\\n\",\n    \"**`reverse`** メソッドはリスト内の要素の順序を逆順にします。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"characters = ['e', 'd', 'a', 'c', 'f', 'b']\\n\",\n    \"characters.reverse()\\n\",\n    \"characters\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### ▲ **`copy`**\\n\",\n    \"リストを複製します。\\n\",\n    \"すなわち、`ln` の値がリストであるとき、`ln.copy()` は `ln` と同じ長さのリストを新たに作って、\\n\",\n    \"`ln` の要素を新しいリストに同じ順番で格納して、その新しいリストを返します。\\n\",\n    \"\\n\",\n    \"複製されたリストに変更を加えたとしても、もとのリストは影響を受けません。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"numbers = [10, 20, 30, 40, 50]\\n\",\n    \"numbers2 = numbers.copy()\\n\",\n    \"del numbers[1:3]\\n\",\n    \"numbers.reverse()\\n\",\n    \"print(numbers)\\n\",\n    \"print(numbers2)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"一方、代入を用いた場合には影響を受けることに注意してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"numbers = [10, 20, 30, 40, 50]\\n\",\n    \"numbers2 = numbers\\n\",\n    \"del numbers[1:3]\\n\",\n    \"numbers.reverse()\\n\",\n    \"print(numbers)\\n\",\n    \"print(numbers2)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {\n    \"tags\": []\n   },\n   \"source\": [\n    \"## リストと文字列の相互変換\\n\",\n    \"\\n\",\n    \"文字列は変更不可能である一方、リスト変更可能です。\\n\",\n    \"そのため、文字列処理をする際は、文字列のリストに一旦変換してから、変更を加えて、文字列に変換することが典型的です。\\n\",\n    \"ここでは、文字列とリストの相互変換の方法を示します。\\n\",\n    \"\\n\",\n    \"まず、文字列 `s` を `list` 関数に渡すと、`s` を文字単位で区切ったリストが得られます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"list('abc123')\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"文字単位ではなく、指定された文字列で区切ってリストにする際は、 **`split`** メソッドを使います。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"'banana'.split('n')\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"'A and B and C'.split(' and ')\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"`split` を無引数で呼び出すと、連続した空白文字を区切りと見做します。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"'A   B\\\\nC  '.split()\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"逆に、文字のリストを連結して1つの文字列にする際は、 **`join`** メソッドを次のように使います。\\n\",\n    \"\\n\",\n    \"---\\n\",\n    \"```python\\n\",\n    \"接合点に挿入する文字列.join(文字列のリスト)\\n\",\n    \"```\\n\",\n    \"---\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"''.join(['a', 'b', 'c', '1', '2', '3'])\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"'n'.join(['ba', 'a', 'a'])\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"なお、 `join` の引数は、文字列のリストだけでなく、文字列のタプルでも問題ありません。\\n\",\n    \"タプルについては、次で述べます。\\n\",\n    \"\\n\",\n    \"### 練習\\n\",\n    \"\\n\",\n    \"emailアドレス `email` とドメイン名 `domain` を引数に取って、`email` のドメイン名を `domain` に置き換える関数 `change_domain(email, domain)` を作成してください。\\n\",\n    \"なお、emailアドレスのドメイン名とは、 `'@'` で区切られた右側の部分を意味します。\\n\",\n    \"\\n\",\n    \"次のセルの `...` のところを書き換えて `change_domain(email, domain)` を完成させてください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def change_domain(email, domain):\\n\",\n    \"    ...\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"上のセルで解答を作成した後、以下のセルを実行し、実行結果が `True` になることを確認してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {\n    \"tags\": [\n     \"raises-exception\"\n    ]\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"print(change_domain('spam@utokyo-ipp.org', 'ipp.u-tokyo.ac.jp') == 'spam@ipp.u-tokyo.ac.jp')\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## タプル (tuple)\\n\",\n    \"\\n\",\n    \"**タプル**は、リストと同じようにデータの並びであり、あらゆる種類のデータを要素にできます。\\n\",\n    \"ただし、リストと違ってタプルは一度設定した要素を変更できません（文字列も同様でした）。\\n\",\n    \"すなわち、タプルは変更不可能なデータです。\\n\",\n    \"したがって、リストの項で説明したメソッドの多く、要素を操作するもの、は適用できないのですが、\\n\",\n    \"逆にいうと、作成した後で要素を変更する必要がない場合は、\\n\",\n    \"タプルの方が実装の効率がよいので、リストよりもタプルを使うべきです。\\n\",\n    \"\\n\",\n    \"たとえば、関数が複数の値をリストにして返し、呼び出し側がすぐにリストをばらばらにして値を取り出すような場合は、\\n\",\n    \"リストよりもタプルを使うべきです。\\n\",\n    \"また、平面上の点を表そうとするとき、x座標とy座標を別々に変化させる必要がなければ、\\n\",\n    \"`(3, 5)` のようなタプルを使うのが自然です。\\n\",\n    \"このように、タプルを作成するには数学におけるのと同様に要素を丸括弧 `(...)` で囲みます。\\n\",\n    \"\\n\",\n    \"例を見ましょう。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"x = 3\\n\",\n    \"y = 5\\n\",\n    \"point = (x, y)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"point\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"type(point)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"numbers3 = (1, 2, 3)\\n\",\n    \"numbers3\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"実は、丸括弧なしでもタプルを作成できます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"numbers3 = 1,2,3\\n\",\n    \"numbers3\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"要素が1つだけの場合は、 `t = (1)` ではなく、次のようにします。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"onlyone = (1,)\\n\",\n    \"onlyone\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"`t = (1)` だと、`t = 1` と同じになってしまいます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"onlyone = (1)\\n\",\n    \"onlyone\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"何も要素を格納していないタプル（**空タプル**）は `()` で作成できます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"empty = ()\\n\",\n    \"empty\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"リストや文字列と同様に、インデックスや組み込み関数を使った操作が可能です。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"numbers3 = (1, 2, 3)\\n\",\n    \"numbers3[1] # インデックスの指定による値の取得\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"len(numbers3) # lenはタプルを構成する要素の数\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"numbers3[1:3] # スライス\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"上述しましたが、一度作成したタプルの要素を後から変更することはできません。\\n\",\n    \"したがって以下のプログラムはエラーとなります。\\n\",\n    \"\\n\",\n    \"---\\n\",\n    \"```Python\\n\",\n    \"numbers3 = (1, 2, 3)\\n\",\n    \"numbers3[1] = 5\\n\",\n    \"```\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"組み込み関数 **`list`** を使って、タプルをリストに変換できます。\\n\",\n    \"（`list` はリストのデータ型でもあります。）\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"numbers3 = (1, 2, 3)\\n\",\n    \"list(numbers3)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"組み込み関数 **`tuple`** を使って、逆にリストをタプルに変換できます。\\n\",\n    \"（`tuple` はタプルのデータ型でもあります。）\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"numbers2 = [1, 2]\\n\",\n    \"tuple(numbers2)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 練習\\n\",\n    \"整数の要素からなるリスト `ln` を引数として取り、\\n\",\n    \"`ln` に含まれる要素を逆順に格納したタプルを返す関数 `reverse_totuple` を作成してください。\\n\",\n    \"\\n\",\n    \"以下のセルの `...` のところを書き換えて `reverse_totuple(ln)` を作成してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def reverse_totuple(ln):\\n\",\n    \"    ...\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"上のセルで解答を作成した後、以下のセルを実行し、実行結果が `True` になることを確認してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {\n    \"tags\": [\n     \"raises-exception\"\n    ]\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"print(reverse_totuple([1, 2, 3, 4, 5]) == (5, 4, 3, 2, 1))\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 多重代入\\n\",\n    \"**多重代入**では、左辺に複数の変数などを指定してタプルやリストの全ての要素を一度の操作で代入することができます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"numbers = [0, 10, 20, 30, 40]\\n\",\n    \"[a, b, c, d, e] = numbers\\n\",\n    \"b\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"以下のようにしても同じ結果を得られます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {\n    \"tags\": [\n     \"raises-exception\"\n    ]\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"a, b, c, d, e = numbers\\n\",\n    \"b\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"多重代入は文字列に対しても実行可能です。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"a, b, c, d, e = 'hello'\\n\",\n    \"d\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"タプルに対しても実行可能です。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"numbers3 = (1, 2, 3)\\n\",\n    \"(x,y,z) = numbers3\\n\",\n    \"y\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"以下のように様々な書き方が可能です。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"x,y,z = numbers3\\n\",\n    \"print(y)\\n\",\n    \"(x,y,z) = (1, 2, 3)\\n\",\n    \"print(y)\\n\",\n    \"x,y,z = (1, 2, 3)\\n\",\n    \"print(y)\\n\",\n    \"(x,y,z) = 1, 2, 3\\n\",\n    \"print(y)\\n\",\n    \"x,y,z = 1, 2, 3\\n\",\n    \"print(y)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"多重代入を使うことで、2つの変数に格納された値の入れ替えを行う手続きはしばしば用いられます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"x = 'apple'\\n\",\n    \"y = 'pen'\\n\",\n    \"x, y = y, x \\n\",\n    \"print(x, y) #w = x; x = y; y = w と同じ結果が得られる\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## リストやタプルの比較演算\\n\",\n    \"数値などを比較するのに用いた比較演算子を用いて、2つのリストやタプルを比較することもできます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"print([1, 2, 3] == [1, 2, 3])\\n\",\n    \"print([1, 2] == [1, 2, 3])\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"print((1, 2, 3) == (1, 2, 3))\\n\",\n    \"print((1, 2) == (1, 2, 3))\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"print([1, 2, 3] != [1, 2, 3])\\n\",\n    \"print([1, 2] != [1, 2, 3])\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"print((1, 2, 3) != (1, 2, 3))\\n\",\n    \"print((1, 2) != (1, 2, 3))\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"大小の比較は、いわゆる辞書式による比較で、リストやタプルの最初の要素から順に比較して大小を決めます。\\n\",\n    \"片方がもう片方を拡張したものであれば、拡張した方を大きいとします。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"print([1, 2, 3] <= [1, 2, 3])\\n\",\n    \"print([1, 2, 3] < [1, 2, 3])\\n\",\n    \"print([1, 2, 3] < [1, 2, 4])\\n\",\n    \"print([1, 2] < [1, 2, 3])\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"print((1, 2, 3) <= (1, 2, 3))\\n\",\n    \"print((1, 2, 3) < (1, 2, 3))\\n\",\n    \"print((1, 2, 3) < (1, 2, 4))\\n\",\n    \"print((1, 2) < (1, 2, 3))\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## for文による繰り返しとリスト・タプル\\n\",\n    \"\\n\",\n    \"きまった操作の繰り返しはコンピュータが最も得意とする処理のひとつです。\\n\",\n    \"リストのそれぞれの要素にわたって操作を繰り返したい場合は**for文**を用います。\\n\",\n    \"\\n\",\n    \"リスト `ls` の要素全てに対して、`実行文` を繰り返すには次のように書きます。\\n\",\n    \"\\n\",\n    \"---\\n\",\n    \"```Python\\n\",\n    \"for value in ls:\\n\",\n    \"    実行文\\n\",\n    \"```\\n\",\n    \"---\\n\",\n    \"\\n\",\n    \"`for` で始まる行の `in` の後に処理対象となるリスト `ls` が、`in` の前に変数 `value` が書かれます。\\n\",\n    \"\\n\",\n    \"`ls` の最初の要素、すなわち `ls[0]` が `value` に代入され `実行文` が処理されます。\\n\",\n    \"`実行文` の処理が終われば、`ls` の次の要素が `value` に代入され、処理が繰り返されます。\\n\",\n    \"このようにして、`ls` の要素に対する処理が `len(ls)` 回繰り返されると、for文の処理が終了します。　\\n\",\n    \"\\n\",\n    \"ここでの `in` の働きは、先に説明したリスト要素の有無を検査する `in` とは異なることに、\\n\",\n    \"そして、if文と同様、 `実行文` の前にはスペースが必要であることに注意してください。\\n\",\n    \"\\n\",\n    \"次に具体例を示します。\\n\",\n    \"3つの要素を持つリスト `ls` から1つずつ要素を取り出し、変数 `value` に代入しています。\\n\",\n    \"`実行文` では `value` を用いて取り出した要素を参照しています。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"ls = [0,1,2]\\n\",\n    \"\\n\",\n    \"for value in ls:\\n\",\n    \"    print('For loop:', value)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"`in` の後に直接リストを記述することもできます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"for value in [0,1,2]:\\n\",\n    \"    print('For loop:', value)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"`実行文` の前にスペースがないとエラーが出ます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {\n    \"tags\": [\n     \"raises-exception\"\n    ]\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"for value in  [0,1,2]:\\n\",\n    \"print('For loop:', value)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"エラーが出れば意図した通りにプログラムが組めていないのにすぐ気が付きますが、\\n\",\n    \"エラーが出ないために意図したプログラムが組めていないことに気が付かないことがあります。\\n\",\n    \"たとえば、次のような内容を実行しようとしていたとします。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"for value in  [0,1,2]:\\n\",\n    \"    print('During for loop:', value)\\n\",\n    \"    print('During for loop, too:', value)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"後者の `print` の行のスペースの数が間違ってると、次のような結果になる場合がありますので注意してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"for value in [0,1,2]:\\n\",\n    \"    print('During for loop:', value)\\n\",\n    \"print('During for loop, too:', value) #この行のスペースの数が間違っていたがエラーは出ない\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"タプルの要素にまたがる処理もリストと同様に行えます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"for value in (0,1,2):\\n\",\n    \"    print('For loop:', value)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"以下はリストに対するfor文の典型例です。`numbers` は数のリストとします。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"numbers = [0,1,2,3,4,5]\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"以下のようにして、このリストの要素の自乗から成るリストを求めることができます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"squares1 = []\\n\",\n    \"for x in numbers:\\n\",\n    \"    squares1.append(x**2)\\n\",\n    \"squares1\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"`squares1` には最初に空リストが代入されます。\\n\",\n    \"そして、`numbers` の各要素の自乗がこのリストに次々と追加されます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 練習\\n\",\n    \"整数の要素からなるリスト `ln` を引数として取り、`ln` の要素の総和を返す関数 `sum_list` を作成してください。\\n\",\n    \"\\n\",\n    \"以下のセルの `...` のところを書き換えて `sum_list(ln)` を作成してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def sum_list(ln):\\n\",\n    \"    ...\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"上のセルで解答を作成した後、以下のセルを実行し、実行結果が全て True になることを確認してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"print(sum_list([10, 20, 30]) == 60)\\n\",\n    \"print(sum_list([-1, 2, -3, 4, -5]) == -3)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"##  for文による繰り返しと文字列\\n\",\n    \"\\n\",\n    \"for文を使うと文字列全体にまたがる処理も可能です。\\n\",\n    \"文字列 `str1` をまたがって一文字ずつの繰り返し処理を行う場合は次のように書きます。\\n\",\n    \"ここで、`c` には取り出された一文字（の文字列）が代入されています。\\n\",\n    \"\\n\",\n    \"---\\n\",\n    \"```Python\\n\",\n    \"for c in str1:\\n\",\n    \"    実行文\\n\",\n    \"```\\n\",\n    \"---\\n\",\n    \"\\n\",\n    \"`str1` で与えられる文字列を一文字ずつ大文字で出力する処理は以下のようになります。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"str1 = 'Apple and pen'\\n\",\n    \"for c in str1:\\n\",\n    \"    print(c.upper())\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 練習\\n\",\n    \"\\n\",\n    \"ATGCの4種類の文字から成る文字列 `str_atgc` が引数として与えられたとき、次のようなリスト `list_count` を返す関数 `atgc_countlist` を作成してください。ただし、 `list_count` の要素は、各塩基 `bp` に対して `str_atgc` 中の `bp` の出現回数と `bp` の名前を格納した（長さ2の）リストとします。\\n\",\n    \"\\n\",\n    \"ヒント：文字列 `'ATGC'` に対する繰り返しを用いることができます。\\n\",\n    \"\\n\",\n    \"以下のセルの `...` のところを書き換えて `atgc_countlist(str_atgc)` を作成してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def atgc_countlist(str_atgc):\\n\",\n    \"    ...\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"上のセルで解答を作成した後、以下のセルを実行し、実行結果が `True` になることを確認してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {\n    \"tags\": [\n     \"raises-exception\"\n    ]\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"print(sorted(atgc_countlist('AAGCCCCATGGTAA')) == sorted([[5, 'A'], [2, 'T'], [3, 'G'], [4, 'C']]))\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## for文によるリスト初期化の短縮記法\\n\",\n    \"\\n\",\n    \"先に、リストの要素の自乗から成るリストを求める例を説明しました。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"numbers = [0,1,2,3,4,5]\\n\",\n    \"\\n\",\n    \"squares1 = []\\n\",\n    \"for x in numbers:\\n\",\n    \"    squares1.append(x**2)\\n\",\n    \"squares1\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"詳しくは6-1で説明されますが、**内包表記**を用いて書き換えると、以下のように1行で書くことができます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"squares2 = [x**2 for x in numbers]\\n\",\n    \"squares2\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"すなわち、\\n\",\n    \"```Python\\n\",\n    \"[x を含む式 for x in リストを返す式]\\n\",\n    \"```\\n\",\n    \"という式は、\\\"リストを返す式\\\" が返したリストの各要素を `x` に代入して \\\"`x` を含む式\\\" を計算し、\\n\",\n    \"その結果をリストにして返します。\\n\",\n    \"もちろん、変数は `x` でなくてもよいです。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"[y**2 for y in numbers]\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## ▲オブジェクトの等価性と同一性\\n\",\n    \"\\n\",\n    \"1-3で、Pythonにおける値はオブジェクトと総称されますと述べました。\\n\",\n    \"ここでは、オブジェクトの等価性と同一性について説明します。\\n\",\n    \"\\n\",\n    \"既に見てきたように、演算子 `==` を用いて**オブジェクトの等価性**を判定できます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"a = []\\n\",\n    \"b = []\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"このとき、`a` と `b` の値はどちらも空リストなので、以下のように `a` の値と `b` の値は等価です。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"a == b\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"しかし、`[`  で始まり `]` で終わる式を評価すると、\\n\",\n    \"必ず新しいリスト（オブジェクト）が作られて返されるので、\\n\",\n    \"`a` と `b` の値は同一ではありません。\\n\",\n    \"\\n\",\n    \"**オブジェクトの同一性**は演算子 **`is`** を用いて判定できます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"a is b\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"リストの要素はオブジェクトなので、要素ごとに等価性と同一性が定まります。\\n\",\n    \"\\n\",\n    \"例として、`a` と `b` を要素とするリスト `c` を作ります。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"c = [a, b]\\n\",\n    \"c\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"c[0] is c[1]\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"`a` を変化させてみましょう。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"a.append(1)\\n\",\n    \"a\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"すると `c` は以下のようになります。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"c\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"ここで、`a` と `b` は等価でなくなりました。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"a == b\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"次に、`b` を要素として二重に含むリスト `d` を作ります。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"d = [b, b]\\n\",\n    \"d\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"d[0] is d[1]\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"`b` を変化させてみましょう。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"b.append(1)\\n\",\n    \"b\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"すると `d` は以下のようになります。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"d\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"演算子 `==` でリストを比較すると、要素まで見て等価性を判定します。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"print(a, b)\\n\",\n    \"a == b\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"演算子 `==` は、要素の比較も `==` で行います。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"print(c, d)\\n\",\n    \"c == d\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"一方、オブジェクトの同一性は変化しません。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"a is b\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"`==` の否定形は `!=` で、`is` の否定形は **`is not`** です。\\n\",\n    \"`not x == y` は `x != y` と書けます。`not x is y` は `x is not y` と書けます。\\n\",\n    \"`is not` はこれで1つの演算子なので注意してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"c != d\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"a is not b\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 練習の解答\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def remove_evenindex(ln):\\n\",\n    \"    ln2 = ln[1::2]\\n\",\n    \"    return ln2\\n\",\n    \"#remove_evenindex(['a', 'b', 'c', 'd', 'e', 'f', 'g'])\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def change_domain(email, domain):\\n\",\n    \"    return '@'.join([email.split('@')[0], domain])\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def reverse_totuple(ln):\\n\",\n    \"    ln.reverse()\\n\",\n    \"    tup = tuple(ln)\\n\",\n    \"    return tup\\n\",\n    \"#reverse_totuple([1, 2, 3, 4, 5])\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def sum_list(ln):\\n\",\n    \"    int_sum = 0\\n\",\n    \"    for value in ln:\\n\",\n    \"        int_sum += value\\n\",\n    \"    return int_sum\\n\",\n    \"#sum_list([10, 20, 30])\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def atgc_countlist(str_atgc):\\n\",\n    \"    list_count = []\\n\",\n    \"    for value in 'ATGC':\\n\",\n    \"        int_bpcnt = str_atgc.count(value)\\n\",\n    \"        list_count.append([int_bpcnt, value])\\n\",\n    \"    return list_count\\n\",\n    \"#atgc_countlist('AAGCCCCATGGTAA') \"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": []\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"Python 3\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"name\": \"python\"\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 2\n}\n"
  },
  {
    "path": "colab/2/2-3.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# 2-3. 条件分岐\\n\",\n    \"\\n\",\n    \"制御構造のうち**条件分岐**について説明します。\\n\",\n    \"\\n\",\n    \"参考:\\n\",\n    \"\\n\",\n    \"- https://docs.python.org/ja/3/tutorial/controlflow.html#if-statements\\n\",\n    \"\\n\",\n    \"**`if`** で始まり条件分岐を行う制御構造によって、条件に応じてプログラムの動作を変えることができます。\\n\",\n    \"\\n\",\n    \"ここではまず「インデント」について説明し、そのあとで条件分岐について説明します。\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## インデントによる構文\\n\",\n    \"\\n\",\n    \"条件分岐の前に、Pythonの**インデント**（行頭の空白、字下げ）について説明します。\\n\",\n    \"Pythonのインデントは実行文をグループにまとめる機能を持ちます。\\n\",\n    \"\\n\",\n    \"プログラム文はインデントレベル（深さ）の違いによって異なるグループとして扱われます。\\n\",\n    \"細かく言えば、インデントレベルが進む（深くなる）とプログラム文はもとのグループの下に位置する\\n\",\n    \"別のグループに属するものとして扱われます。\\n\",\n    \"逆に、インデントレベルが戻る（浅くなる）までプログラム文は同じグループに属することになります。\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"具体例として、第1回で定義した関数 `bmax()` を使って説明します:\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def bmax(a,b):\\n\",\n    \"    if a > b: \\n\",\n    \"        return a \\n\",\n    \"    else:\\n\",\n    \"        return b\\n\",\n    \"\\n\",\n    \"print('Hello World')\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"この例では1行目の関数定義 `def bmax(a,b):` の後から第1レベルのインデントが開始され5行目まで続きます。\\n\",\n    \"すなわち、5行目までは関数 `bmax` を記述するプログラム文のグループということです。 \\n\",\n    \"\\n\",\n    \"次に、3行目の一行のみの第2レベルのインデントの実行文は、\\n\",\n    \"if文（`if` による条件分岐）の論理式 `a > b` が `True` の場合にのみ実行されるグループに属します。 \\n\",\n    \"そして、4行目の `else` ではインデントが戻されています。\\n\",\n    \"5行目から再び始まる第2レベルの実行文は2行目の論理式が `False` の場合に実行されるグループに属します。 \\n\",\n    \"\\n\",\n    \"最後に、7行目ではインデントが戻されており、これ以降は関数 `bmax()` の定義とは関係ないことがわかります。\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"Pythonではインデントとして半角スペース4つが広く利用されています。\\n\",\n    \"本教材でもこの書式を利用します。\\n\",\n    \"1-4 のコーディングスタイルのところで紹介したスタイルガイドのPEP8でも、\\n\",\n    \"半角スペース4つが推奨されています。\\n\",\n    \"\\n\",\n    \"Codeセルでは行の先頭でTabを入力すれば、自動的にこの書式のインデントが挿入されます。\\n\",\n    \"また、インデントを戻すときはShift-Tabが便利です。\\n\",\n    \"なお、Colaboratoryでは、Tabを入力すると半角スペース2つのインデントが挿入されます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## **`if`** ... **`else`** による条件分岐\\n\",\n    \"\\n\",\n    \"これまで関数 `bmax` を例にとって説明しましたが、一般にif文では、 `式` が真であれば `if` 直後のグループが、偽であれば `else` 直後のグループが、それぞれ実行されます。（真であった場合、`else` 直後のグループは実行されません。）\\n\",\n    \"\\n\",\n    \"---\\n\",\n    \"\\n\",\n    \"```Python\\n\",\n    \"if 式:\\n\",\n    \"    ここのグループは「式」が真のときにのみ実行される\\n\",\n    \"else:\\n\",\n    \"    ここのグループは「式」が偽のときにのみ実行される\\n\",\n    \"```\\n\",\n    \"\\n\",\n    \"---\\n\",\n    \"\\n\",\n    \"また、`else` は省略することができます。省略した場合、「式」が真のときに `if` 直後のグループが実行されるのみになります。\\n\",\n    \"\\n\",\n    \"---\\n\",\n    \"\\n\",\n    \"```Python\\n\",\n    \"if 式:\\n\",\n    \"    ここのグループは「式」が真のときにのみ実行される\\n\",\n    \"ここのグループは常に実行される\\n\",\n    \"```\\n\",\n    \"\\n\",\n    \"---\\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"条件が複雑になってくると、if文の中にさらにif文を記述して、条件分岐を**入れ子**（**ネスト**）にすることがあります。\\n\",\n    \"この場合は、インデントはさらに深くなります。\\n\",\n    \"\\n\",\n    \"そして、下の2つのプログラムの動作は明らかに異なることに注意が必要です。\\n\",\n    \"\\n\",\n    \"---\\n\",\n    \"\\n\",\n    \"```Python\\n\",\n    \"if 式1:\\n\",\n    \"    ここのグループは「式1」が真のときにのみ実行される\\n\",\n    \"    if 式2:\\n\",\n    \"        ここのグループは「式1」「式2」が共に真のときにのみ実行される\\n\",\n    \"        if 式3:\\n\",\n    \"            ここのグループは「式1」「式2」「式3」が全て真のときにのみ実行される\\n\",\n    \"        ここのグループは「式1」と「式2」が共に真のときにのみ実行される\\n\",\n    \"    ここのグループは「式1」が真のときにのみ実行される\\n\",\n    \"ここのグループは常に実行される\\n\",\n    \"```\\n\",\n    \"\\n\",\n    \"---\\n\",\n    \"\\n\",\n    \"```Python\\n\",\n    \"if 式1:\\n\",\n    \"    ここのグループは「式1」が真のときにのみ実行される\\n\",\n    \"ここのグループは常に実行される\\n\",\n    \"if 式2:\\n\",\n    \"    ここのグループは「式2」が真のときにのみ実行される (「式1」には影響されない)\\n\",\n    \"ここのグループは常に実行される\\n\",\n    \"if 式3:\\n\",\n    \"    ここのグループは「式3」が真のときにのみ実行される (「式1」「式2」には影響されない)\\n\",\n    \"ここのグループは常に実行される\\n\",\n    \"```\\n\",\n    \"\\n\",\n    \"---\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## **`if`** ... **`elif`** ... **`else`** による条件分岐\\n\",\n    \"\\n\",\n    \"ここまでで `if ... else` 文について紹介しましたが、複数の条件分岐を続けて書くことができる `elif` を紹介します。\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"たとえばテストの点数から評定（優、良、可、...）を計算したい場合など、「条件1のときは処理1、条件1に該当しなくても条件2であれば処理2、更にどちらでもない場合、条件3であれば処理3、...」という処理を考えます。\\n\",\n    \"`if ... else` による文のみでこの処理を行う場合、次のようなプログラムになってしまいます:\\n\",\n    \"\\n\",\n    \"---\\n\",\n    \"\\n\",\n    \"```Python\\n\",\n    \"if 式1:\\n\",\n    \"    「式1」が真のときにのみ実行するグループ\\n\",\n    \"else:\\n\",\n    \"    if 式2:\\n\",\n    \"        「式1」が偽 かつ「式2」が真のときにのみ実行するグループ\\n\",\n    \"    else:\\n\",\n    \"        if 式3:\\n\",\n    \"            「式1」「式2」が偽 かつ「式3」が真のときにのみ実行するグループ\\n\",\n    \"        else:\\n\",\n    \"            ...\\n\",\n    \"```    \\n\",\n    \"\\n\",\n    \"---\\n\",\n    \"\\n\",\n    \"このような場合には、以下のように **`elif`** を使うとより簡潔にできます:\\n\",\n    \"\\n\",\n    \"---\\n\",\n    \"\\n\",\n    \"``` Python\\n\",\n    \"if 式1:\\n\",\n    \"    ここのグループは「式1」が真のときにのみ実行される\\n\",\n    \"elif 式2:\\n\",\n    \"    ここのグループは「式1」が偽 かつ「式2」が真のときにのみ実行される\\n\",\n    \"elif 式3:\\n\",\n    \"    ここのグループは「式1」「式2」が偽 かつ「式3」が真のときにのみ実行される\\n\",\n    \"else:\\n\",\n    \"    ここのグループは「式1」「式2」「式3」がいずれも偽のときにのみ実行される\\n\",\n    \"```\\n\",\n    \"\\n\",\n    \"---\\n\",\n    \"\\n\",\n    \"`if` ... `elif` ... `else` では、条件は上から順に評価され、式が真の場合、\\n\",\n    \"直後の実行文グループのみが実行され終了します。\\n\",\n    \"その他の場合、すなわち全ての条件が \\n\",\n    \"`False` のときは、`else` 以降のグループが実行されます。\\n\",\n    \" \\n\",\n    \"なお、`elif` もしくは `else` 以降を省略することも可能です。\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"##  練習\\n\",\n    \"関数 `exception3(x,y,z)` の引数は以下の条件を満たすとします。\\n\",\n    \"\\n\",\n    \"- `x` と `y` と `z` の値は整数です。\\n\",\n    \"- `x` と `y` と `z` のうち、2つの値は同じで、もう1つの値は他の2つの値とは異なるとします。\\n\",\n    \"\\n\",\n    \"その異なる値を返すように、以下のセルの `...` のところを書き換えて `exception3(x,y,z)` を定義してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def exception3(x,y,z):\\n\",\n    \"    ...\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"次のセルで動作を確認してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {\n    \"tags\": [\n     \"raises-exception\"\n    ]\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"print(exception3(1,2,2))\\n\",\n    \"print(exception3(4,2,4))\\n\",\n    \"print(exception3(9,3,9))\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 練習\\n\",\n    \"\\n\",\n    \"関数 `exception9(a)` の引数は以下の条件を満たすとします。\\n\",\n    \"\\n\",\n    \"- 引数 `a` には、長さが9のリストが渡されます。\\n\",\n    \"- このリストの要素は整数ですが、1つの要素を除いて、残りは要素の値は全て同じとします。\\n\",\n    \"\\n\",\n    \"その1つの要素の値を返すように、以下のセルの `...` のところを書き換えて `exception9(a)` を定義してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def exception9(a):\\n\",\n    \"    ...\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"次のセルで動作を確認してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {\n    \"tags\": [\n     \"raises-exception\"\n    ]\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"print(exception9([1,2,2,2,2,2,2,2,2]))\\n\",\n    \"print(exception9([4,4,4,4,4,2,4,4,4]))\\n\",\n    \"print(exception9([9,9,9,9,9,9,9,9,3]))\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## ▲複数行にまたがる条件式\\n\",\n    \"\\n\",\n    \"複雑な条件式では複数行に分割した方が見やすい場合もありあます。\\n\",\n    \"ここでは、式を複数行にまたがって記述する1つの方法を示します。\\n\",\n    \"1つ目は、丸括弧で括られた式を複数の行にまたがって記述する方法です。\\n\",\n    \"2つ目は、行末にバックスラッシュ **`\\\\`** を置く方法です。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"### 丸括弧で括る方法\\n\",\n    \"x, y, z = (-1, -2, -3)\\n\",\n    \"if (x < 0 and y < 0 and z < 0 and\\n\",\n    \"    x != y and y != z and x != z):\\n\",\n    \"    print('x, y and z are different and negatives.')\\n\",\n    \"\\n\",\n    \"### 行末にバックスラッシュ(\\\\) を入れる方法\\n\",\n    \"\\n\",\n    \"x, y, z = (-1, -2, -3)\\n\",\n    \"if x < 0 and y < 0 and z < 0 and \\\\\\n\",\n    \"    x != y and y != z and x != z:\\n\",\n    \"    print('x, y and z are different and negatives.')\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## **`if`** ... **`elif`** ... **`else`** における条件の評価\\n\",\n    \"\\n\",\n    \"`if` と `elif` による条件分岐では、`if` あるいは `elif` に続く条件式が `True` の場合、\\n\",\n    \"それ以降の `elif` に続く条件式の評価は行われません。\\n\",\n    \"\\n\",\n    \"以下のプログラムで `x` を `3`, `0`, `-4` とした際に何が表示されるかを予想したのちに実行してみましょう。\\n\",\n    \"\\n\",\n    \"特に、 `x = -4` としたときの動作に注意してください。（`x is zero.` は表示されません。）\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"x = 3  # example: 3, 0, -4\\n\",\n    \"\\n\",\n    \"if x > 0:\\n\",\n    \"    print('x is greater than zero.')\\n\",\n    \"elif x < 0:\\n\",\n    \"    print('x is less than zero, but x will be 0')\\n\",\n    \"    x = 0\\n\",\n    \"else:\\n\",\n    \"    print('x is zero.')\\n\",\n    \"\\n\",\n    \"print(x)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 練習\\n\",\n    \"以下のプログラムはプログラマの意図どおりに動作しません。\\n\",\n    \"`print` の出力内容から意図を判断して条件分岐を書き換えてください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"x = -1\\n\",\n    \"if x < 3:\\n\",\n    \"    print('x is larger than or equal to 2, and less than 3')\\n\",\n    \"elif x < 2:\\n\",\n    \"    print('x is larger than or equal to 1, and less than 2')\\n\",\n    \"elif x < 1:\\n\",\n    \"    print('x is less than 1')\\n\",\n    \"else:\\n\",\n    \"    print('x is larger or equal to 3')\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## `or` もしくは `and` で結合された条件の評価\\n\",\n    \"\\n\",\n    \"if文に与える条件が `or` もしくは `and` で結合されている場合、条件は左から順に評価され、\\n\",\n    \"不要（以降の式を評価するまでもなく自明）な評価は省かれます。\\n\",\n    \"\\n\",\n    \"たとえば、`if a == 0 or b == 0:` において\\n\",\n    \"最初の式 `a == 0` が `True` の場合、式全体の結果が `True` となることは自明なので、\\n\",\n    \"二番目の式 `b == 0` を評価することなく続く実行文グループが実行されます。\\n\",\n    \"\\n\",\n    \"逆に、`if a == 0 and b == 0:` において、\\n\",\n    \"最初の式が `False` の場合、以降の式は評価されることなく処理が進みます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"以下のセルで示す例の1行目で、`x` の値を `0`, `-4` に変更し、表示される内容を予想し、予想通りか確認してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {\n    \"tags\": [\n     \"raises-exception\"\n    ]\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"x = 10          # del x のエラーを抑制するため\\n\",\n    \"y = 10\\n\",\n    \"\\n\",\n    \"del x           # x を未定義に\\n\",\n    \"\\n\",\n    \"if x > 5 or y > 5: \\n\",\n    \"    print(\\\"'x' or 'y' is larger than 5\\\")\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"x = 10\\n\",\n    \"y = 10          # del y のエラーを抑制するため\\n\",\n    \"\\n\",\n    \"del y           # y を未定義に\\n\",\n    \"\\n\",\n    \"if x > 5 or y > 5: \\n\",\n    \"    print(\\\"'x' or 'y' is larger than 5\\\")\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## ▲**3項演算子**（条件式）\\n\",\n    \"\\n\",\n    \"Pythonでは以下のように `if ... else` を1行に書くこともできます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"x = 0\\n\",\n    \"sign = 'positive or zero' if x >= 0 else 'negative'\\n\",\n    \"print(sign)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"これは、以下と等価です。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"x = 0\\n\",\n    \"if x >= 0 :\\n\",\n    \"    sign = 'positive or zero'\\n\",\n    \"else:\\n\",\n    \"    sign = 'negative'\\n\",\n    \"print(sign)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 練習の解答\\n\",\n    \"以下は解答例です。これ以外にも様々な解答があり得ます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def exception3(x,y,z):\\n\",\n    \"    if x==y:\\n\",\n    \"        return z\\n\",\n    \"    elif x==z:\\n\",\n    \"        return y\\n\",\n    \"    else:\\n\",\n    \"        return x\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def exception9(a):\\n\",\n    \"    x = a[0] + a[1] + a[2]\\n\",\n    \"    y = a[3] + a[4] + a[5]\\n\",\n    \"    z = a[6] + a[7] + a[8]\\n\",\n    \"    if x==y:\\n\",\n    \"        return exception3(a[6], a[7], a[8])\\n\",\n    \"    elif x==z:\\n\",\n    \"        return exception3(a[3], a[4], a[5])\\n\",\n    \"    else:\\n\",\n    \"        return exception3(a[0], a[1], a[2])\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 練習の解説\\n\",\n    \"最後の練習では、条件文の順番を修正する必要があります。\\n\",\n    \"条件は上から順に処理され、式が真の場合にその「直後の実行文グループのみ」が処理されます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"x = -1\\n\",\n    \"if x < 1:\\n\",\n    \"    print('x is less than 1')\\n\",\n    \"elif x < 2:\\n\",\n    \"    print('x is larger or equal to 1, and less than 2')\\n\",\n    \"elif x < 3:\\n\",\n    \"    print('x is larger or equal to 2, and less than 3')\\n\",\n    \"else:\\n\",\n    \"    print('x is larger or equal to 3')\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": []\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"Python 3\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"name\": \"python\"\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 2\n}\n"
  },
  {
    "path": "colab/3/3-1.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# 3-1. 辞書 (dictionary)\\n\",\n    \"キーと値を対応させるデータ構造である辞書について説明します。\\n\",\n    \"\\n\",\n    \"参考\\n\",\n    \"\\n\",\n    \"- https://docs.python.org/ja/3/tutorial/datastructures.html#dictionaries\\n\",\n    \"\\n\",\n    \"**辞書**は、**キー** (**key**) と**値** (**value**) を対応づけるデータです。\\n\",\n    \"キーとしては、文字列・数値・タプルなどの変更不可能なデータを使うことができますが、\\n\",\n    \"変更可能なデータであるリスト・辞書を使うことはできません。\\n\",\n    \"（辞書も変更可能なデータです。）\\n\",\n    \"一方、値としては、変更の可否にかかわらずあらゆる種類のデータを指定できます。\\n\",\n    \"\\n\",\n    \"たとえば、文字列 `'apple'` をキーとし値として数値 `3` を、`'pen'` をキーとして `5` を対応付けた辞書は、\\n\",\n    \"次のように作成します。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"ppap = {'apple' : 3, 'pen' : 5}\\n\",\n    \"ppap\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"type(ppap)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"辞書の `キー1` に対応する値を得るには、リストにおけるインデックスと同様に、\\n\",\n    \"\\n\",\n    \"---\\n\",\n    \"```Python\\n\",\n    \" 辞書[キー1]\\n\",\n    \"```\\n\",\n    \"---\\n\",\n    \"\\n\",\n    \"とします。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"ppap = {'apple' : 3, 'pen' : 5}\\n\",\n    \"ppap['apple']\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"辞書に登録されていないキーを指定すると、エラーになります。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {\n    \"tags\": [\n     \"raises-exception\"\n    ]\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"ppap['orange']\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"キーに対する値を変更したり、新たなキーと値を登録するには代入文を用います。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"ppap = {'apple' : 3, 'pen' : 5}\\n\",\n    \"ppap['apple'] = 10\\n\",\n    \"ppap['pinapple'] = 7\\n\",\n    \"ppap\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"上のようにキーから値は取り出せますが、値からキーを直接取り出すことはできません。\\n\",\n    \"また、リストのようにインデックスを指定して値を取得することはできません。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {\n    \"tags\": [\n     \"raises-exception\"\n    ]\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"ppap[1]\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"キーが辞書に登録されているかどうかは、演算子 **`in`** を用いて調べることができます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"ppap = {'apple': 3, 'pen': 5}\\n\",\n    \"'apple' in ppap\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"'banana' in ppap\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"組み込み関数 **`len`** によって、辞書に登録されている要素、キーと値のペア、の数が得られます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"ppap = {'apple': 3, 'pen': 5}\\n\",\n    \"len(ppap)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"**`del`** 文によって、登録されているキーの要素を削除することができます。具体的には、次のように削除します。\\n\",\n    \"\\n\",\n    \"---\\n\",\n    \"```Python\\n\",\n    \"del 辞書[削除したいキー]\\n\",\n    \"```\\n\",\n    \"---\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"ppap = {'apple' : 3, 'pen' : 5}\\n\",\n    \"del ppap['pen']\\n\",\n    \"ppap\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"空のリストと同様に空の辞書を作ることもできます。このような空のデータは繰り返し処理でしばしば使われます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"empty_d = {}\\n\",\n    \"empty_d\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 練習\\n\",\n    \"\\n\",\n    \"リスト `list1` が引数として与えられたとき、`list1` の各要素 `value` をキー、` value` の `list1` におけるインデックスをキーに対応する値とした辞書を返す関数 `reverse_lookup` を作成してください。\\n\",\n    \"\\n\",\n    \"以下のセルの `...` のところを書き換えて `reverse_lookup(list1)` を作成してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def reverse_lookup(list1):\\n\",\n    \"    ...\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"上のセルで解答を作成した後、以下のセルを実行し、実行結果が `True` になることを確認してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"print(reverse_lookup(['apple', 'pen', 'orange']) == {'apple': 0, 'orange': 2, 'pen': 1})\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 辞書のメソッド\\n\",\n    \"辞書のメソッドを紹介しておきます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### キーを指定して値を得るメソッド\\n\",\n    \"\\n\",\n    \"**`get`** メソッドは、引数として指定したキーが辞書に含まれてる場合にはその値を取得し、\\n\",\n    \"指定したキーが含まれていない場合には `None` を返します。\\n\",\n    \"`get` を利用することで、エラーを回避し、登録されているかどうかわからないキーを使うことができます。\\n\",\n    \"先に説明したキーを括弧、`[...]`、で指定する方法では、\\n\",\n    \"辞書にキーが存在しないとエラーとなりプログラムの実行が停止してしまいます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {\n    \"tags\": [\n     \"raises-exception\"\n    ]\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"ppap = {'apple' : 3, 'pen' : 5}\\n\",\n    \"print('キーappleに対応する値 = ', ppap.get('apple'))\\n\",\n    \"print('キーorangeに対応する値 = ', ppap.get('orange'))\\n\",\n    \"print('キーorangeに対応する値（エラー） = ', ppap['orange'])\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"また、`get` に2番目の引数を与えると、その引数の値を「指定したキーが含まれていない場合」に `get` が返す値とすることができます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"ppap = {'apple' : 3, 'pen' : 5}\\n\",\n    \"print('キーappleに対応する値 = ', ppap.get('apple', -1))\\n\",\n    \"print('キーorangeに対応する値 = ', ppap.get('orange', -1))\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### ▲キーがない場合に登録を行う\\n\",\n    \"\\n\",\n    \"**`setdefault`** メソッドは、\\n\",\n    \"指定したキーが辞書に含まれてる場合には、対応する値を返します。 \\n\",\n    \"キーが含まれていない場合には、2番目の引数として指定した値を返すと同時に、キーに対応する値として登録します。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"ppap = {'apple' : 3, 'pen' : 5}\\n\",\n    \"print('キーappleに対応する値 = ', ppap.setdefault('apple', 7))\\n\",\n    \"print('setdefault(\\\"apple\\\", 7)を実行後の辞書 = ', ppap)\\n\",\n    \"print('キーorangeに対応する値 = ', ppap.setdefault('orange', 7))\\n\",\n    \"print('setdefault(\\\"orange\\\", 7)を実行後の辞書 = ', ppap)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"上のような `setdefault` を用いた手続きを、`[...]` を用いて書き換えるとたとえば次のようになります。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"ppap = {'apple' : 3, 'pen' : 5}\\n\",\n    \"if 'apple' not in ppap:\\n\",\n    \"    ppap['apple'] = 7\\n\",\n    \"print('キーappleに対応する値 = ', ppap['apple'])\\n\",\n    \"print('実行後の辞書 = ', ppap)\\n\",\n    \"if 'orange' not in ppap:\\n\",\n    \"    ppap['orange'] = 7\\n\",\n    \"print('キーorangeに対応する値 = ', ppap['orange'])\\n\",\n    \"print('実行後の辞書 = ', ppap)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### ▲キーを指定した削除\\n\",\n    \"\\n\",\n    \"**`pop`** メソッドは指定したキーおよびそれに対応する値を削除し、削除されるキーに対応付けられた値を返します。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"ppap = {'apple' : 3, 'pen' : 5}\\n\",\n    \"print(ppap.pop('pen'))\\n\",\n    \"print(ppap)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### ▲全てのキーと値の削除\\n\",\n    \"**`clear`** メソッドは全てのキーと値を削除します。その結果、辞書は空となります。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"ppap = {'apple' : 3, 'pen' : 5}\\n\",\n    \"ppap.clear()\\n\",\n    \"ppap\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### キーの一覧を得る\\n\",\n    \"**`keys`** メソッドはキーの一覧を返します。これはリストのようなものとして扱うことができ、\\n\",\n    \"`for` ループと組み合わせて繰り返し処理で利用されます（3-2を参照してください）。\\n\",\n    \"以下のように、**`keys`** メソッドが返した結果に関数 `list` を適用すると、\\n\",\n    \"通常のリストになります。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"ppap = {'apple' : 3, 'pen' : 5}\\n\",\n    \"list(ppap.keys())\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### 値の一覧を得る\\n\",\n    \"**`values`** メソッドはキーに対応する全ての値の一覧を返します。これもリストのようなものとして扱うことができます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"list(ppap.values())\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### キーと値の一覧を得る\\n\",\n    \"**`items`** メソッドはキーとそれに対応する値をタプルにした一覧を返します。 これもタプルを要素とするリストのようなものとして扱うことができ、forループなどで活用します（3-2を参照してください）。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"list(ppap.items())\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### ▲辞書を複製する\\n\",\n    \"**`copy`** メソッドは辞書を複製します。リストの場合と同様に一方の辞書を変更してももう一方の辞書は影響を受けません。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"ppap = {'apple': 3, 'pen': 5, 'orange': 7}\\n\",\n    \"ppap2 = ppap.copy()\\n\",\n    \"ppap['banana'] = 9\\n\",\n    \"print(ppap)\\n\",\n    \"print(ppap2)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### ▲ ` keys`, `values`, `items` の返値\\n\",\n    \"`keys`, `values`, `items` メソッドの一連の説明では、返値を「リストのようなもの」と表現してきました。\\n\",\n    \"通常のリストとどう違うのでしょうか？\\n\",\n    \"\\n\",\n    \"次の例では、`ppap` の `keys`, `values`, `items` メソッドの返値をそれぞれ `ks`, `vs`, `itms` に代入し、\\n\",\n    \"`print` でそれぞれの内容を表示させています。\\n\",\n    \"\\n\",\n    \"次いで、`ppap` に新たな要素を加えたのちに、同じ変数の内容を表示させています。 \\n\",\n    \"1, 2回目の `print` で内容が異なることに注意してください。\\n\",\n    \"もとの辞書が更新されると、これらの内容も動的に変わります。  \"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"ppap = {'apple': 3, 'pen': 5, 'orange': 7}\\n\",\n    \"ks = ppap.keys()\\n\",\n    \"vs = ppap.values()\\n\",\n    \"itms = ppap.items()\\n\",\n    \"print(list(ks))\\n\",\n    \"print(list(vs))\\n\",\n    \"print(list(itms))\\n\",\n    \"ppap['kiwi'] = 9\\n\",\n    \"print(list(ks))\\n\",\n    \"print(list(vs))\\n\",\n    \"print(list(itms))\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 辞書とリスト\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"冒頭で述べたように、辞書では値としてあらゆる型のデータを使用できます。\\n\",\n    \"すなわち、次のように値としてリストを使用する辞書を作成可能です。\\n\",\n    \"リストの要素を参照するには数字インデックスをさらに指定します。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"numbers = {'dozens': [10, 20, 40], 'hundreds': [100, 101, 120, 140]}\\n\",\n    \"print(numbers['dozens'])\\n\",\n    \"print(numbers['dozens'][1])\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"逆に、辞書を要素とするリストを作成することもできます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"ppap = {'apple': 3, 'pen': 5}\\n\",\n    \"pets = {'cat': 3, 'dog': 3, 'elephant': 8}\\n\",\n    \"ld = [ppap, pets]\\n\",\n    \"print(ld[1])\\n\",\n    \"print(ld[1]['dog'])\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 練習\\n\",\n    \"\\n\",\n    \"辞書 `dic1` と文字列 `str1` が引数として与えられたとき、\\n\",\n    \"以下のように `dic1` を変更する関数 `handle_collision` を作成してください。\\n\",\n    \"ただし、`dic1` のキーは整数、キーに対応する値は文字列を要素とするリストとします。\\n\",\n    \"\\n\",\n    \"1. `dic1` に `str1` の長さ `n` がキーとして登録されていない場合、`str1` のみを要素とするリスト `ls` を作成し、 `dic1` にキー `n`、`n` に対応する値 `ls` を登録します。\\n\",\n    \"2. `dic1` に `str1` の長さ `n` がキーとして登録されている場合、そのキーに対応する値（リスト）に `str1` を追加します。\\n\",\n    \"\\n\",\n    \"以下のセルの `...` のところを書き換えて `handle_collision(dic1, str1)` を作成してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def handle_collision(dic1, str1):\\n\",\n    \"    ...\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"上のセルで解答を作成した後、以下のセルを実行し、実行結果が `True` になることを確認してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"dic1_orig = {3: ['ham', 'egg'], 6: ['coffee', 'brandy'], 9: ['port wine'], 15: ['curried chicken']}\\n\",\n    \"dic1_result = {3: ['ham', 'egg', 'tea'], 6: ['coffee', 'brandy'], 9: ['port wine'], 15: ['curried chicken']}\\n\",\n    \"handle_collision(dic1_orig, 'tea')\\n\",\n    \"print(dic1_orig == dic1_result)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 練習の解答\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def reverse_lookup(list1):\\n\",\n    \"    dic1 = {}  # 空の辞書を作成する\\n\",\n    \"    for value in list1:\\n\",\n    \"        dic1[value] = list1.index(value)\\n\",\n    \"    return dic1\\n\",\n    \"#reverse_lookup(['apple', 'pen', 'orange'])\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def handle_collision(dic1, str1):\\n\",\n    \"    if dic1.get(len(str1)) is None:\\n\",\n    \"        ls = [str1]\\n\",\n    \"    else:\\n\",\n    \"        ls = dic1[len(str1)]\\n\",\n    \"        ls.append(str1)\\n\",\n    \"    dic1[len(str1)] = ls\\n\",\n    \"#handle_collision({3: ['ham', 'egg'], 6: ['coffee', 'brandy'], 9: ['port wine'], 15: ['curried chicken']}, 'tea')\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": []\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"Python 3\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"name\": \"python\"\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 2\n}\n"
  },
  {
    "path": "colab/3/3-2.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# 3-2. 繰り返し\\n\",\n    \"\\n\",\n    \"制御構造のうち**繰り返し**について説明します。\\n\",\n    \"\\n\",\n    \"参考:\\n\",\n    \"\\n\",\n    \"- https://docs.python.org/ja/3/tutorial/controlflow.html#for-statements\\n\",\n    \"- https://docs.python.org/ja/3/tutorial/controlflow.html#the-range-function\\n\",\n    \"- https://docs.python.org/ja/3/tutorial/introduction.html#first-steps-towards-programming\\n\",\n    \"- https://docs.python.org/ja/3/tutorial/controlflow.html#break-and-continue-statements-and-else-clauses-on-loops\\n\",\n    \"- https://docs.python.org/ja/3/tutorial/controlflow.html#pass-statements\\n\",\n    \"\\n\",\n    \"繰り返しを行う制御構造 `for` や `while` によって、同じ処理の繰り返しを簡単にプログラムすることができます。\\n\",\n    \"\\n\",\n    \"## for文による繰り返し\\n\",\n    \"\\n\",\n    \"2-2で、リストと文字列に対するfor文の繰り返しについて説明しました。\\n\",\n    \"Pythonにおける**for文**の一般的な文法は以下のとおりです。\\n\",\n    \"\\n\",\n    \"---\\n\",\n    \"```Python\\n\",\n    \"for 変数 in 文字列・リスト・辞書など:\\n\",\n    \"    実行文\\n\",\n    \"```\\n\",\n    \"\\n\",\n    \"---\\n\",\n    \"\\n\",\n    \"if文と同様、 実行文のインデントは深くなっていることに注意してください。\\n\",\n    \"\\n\",\n    \"for文では `in` 以降に与えられる、`文字列・リスト・辞書など` にわたって、\\n\",\n    \"`実行文` のグループを繰り返します。\\n\",\n    \"一般に繰り返しの順番は文字列・リスト・辞書などに要素が現れる順番で、\\n\",\n    \"要素は **`for`** と **`in`** の間の `変数` に代入されます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"リストの場合、リストの要素が最初から順番に取り出されます。以下に具体例を示します。関数 `len` は文字列の長さを返します。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"words = ['dog', 'cat', 'mouse']\\n\",\n    \"for w in words:\\n\",\n    \"    print(w, len(w))\\n\",\n    \"print('finish')\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"このプログラムで、for文には3つの文字列で構成されるリスト `words` が与えられています。\\n\",\n    \"リストの要素は変数 `w` に順番に代入され、文字列とその長さが印字されます。\\n\",\n    \"そして、最後の要素の処理がおわればfor文の繰り返し（**ループ**）を抜け、完了メッセージを印字します。\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"次は文字列に対する for文の例です。文字列を構成する文字が先頭から一文字ずつ文字列として取り出されます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"word = 'supercalifragilisticexpialidocious'\\n\",\n    \"for c in word:\\n\",\n    \"    print(c)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"組み込み関数 **`ord`** は与えられた文字の番号（コード）を整数として返します。\\n\",\n    \"組み込み関数 **`chr`** は逆に与えられた整数をコードとする文字を返します。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"print(ord('a'))\\n\",\n    \"print(ord('b'))\\n\",\n    \"print(ord('z'))\\n\",\n    \"\\n\",\n    \"print(chr(97))\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"上で確認しているように、文字 `'a'`, `'b'`, `'z'` のコードはそれぞれ `97`, `98`, `112` です。文字のコードは `'a'` から `'z'` までは連続して `1` ずつ増えていきます。\\n\",\n    \"\\n\",\n    \"これを用いて以下のように英小文字から成る文字列の中の各文字の頻度を求めることができます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"height = [0] * 26\\n\",\n    \"for c in word:\\n\",\n    \"    height[ord(c) - ord('a')] += 1\\n\",\n    \"\\n\",\n    \"print(height)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"`height` を視覚化してみましょう。詳しくは、付録の 5-matplotlib を参照してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"import matplotlib.pyplot as plt\\n\",\n    \"\\n\",\n    \"plt.plot(height)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"left = list(range(26))  # range関数については以下を参照してください。\\n\",\n    \"labels = [chr(i + ord('a')) for i in range(26)]  # 内包表記については 6-1 を参照ください。\\n\",\n    \"plt.bar(left,height,tick_label=labels)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## for文による繰り返しと辞書\\n\",\n    \"\\n\",\n    \"辞書の要素にわたって操作を繰り返したい場合もfor文を用います。\\n\",\n    \"辞書 `dic1` の全てのキーを変数 `key` に代入しながら、`実行文` を繰り返すには次のように書きます。\\n\",\n    \"\\n\",\n    \"---\\n\",\n    \"```Python\\n\",\n    \"for key in dic1:\\n\",\n    \"    実行文\\n\",\n    \"```\\n\",\n    \"---\\n\",\n    \"\\n\",\n    \"`for` の行の `in` の後を、`dic1` の代わりに `dic1.keys()` としても振舞いは同等であり、辞書のキー一覧を返す **`keys`** メソッドが自動的に使われます。\\n\",\n    \"\\n\",\n    \"次の例では、キーを1つずつ取り出し、`key` に代入した後、 \\n\",\n    \"`key` に対応する値を参照しています。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"dic1 = {'cat': 3, 'dog': 3, 'elephant': 8}\\n\",\n    \"for key in dic1:\\n\",\n    \"    print('key:', key, ', value:', dic1[key])\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"**`values`** メソッドを使えば（キーを使わずに）値を1つずつ取り出すこともできます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"dic1 = {'cat': 3, 'dog': 3, 'elephant': 8}\\n\",\n    \"for value in dic1.values():\\n\",\n    \"    print('value:', value)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"**`items`** メソッドを使えばキーと値を一度に取り出すこともできます。\\n\",\n    \"次の例では、`in` の左辺に複数の変数を指定し多重代入を行っています。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"dic1 = {'cat': 3, 'dog': 3, 'elephant': 8}\\n\",\n    \"for key, value in dic1.items():\\n\",\n    \"    print('key:', key, 'value:', value)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"実は、辞書の `items` でなくとも、タプルのリストもしくはリストのリストに対しても、同様に複数の変数を指定することができます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"list1 = [[0, 10], [1, 20], [2, 30]]\\n\",\n    \"for i, j in list1:\\n\",\n    \"    print(i, j)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 練習\\n\",\n    \"\\n\",\n    \"辞書 `dic1` が引数として与えられたとき、次のような辞書 `dic2` を返す関数 `reverse_lookup2` を作成してください。ただし、 `dic1` のキー `key` の値が `value` である場合、 `dic2` には `value` というキーが登録されており、その値は `key` であるとします。また、 `dic1` は異なる2つのキーに対応する値は必ず異なるとします。\\n\",\n    \"\\n\",\n    \"以下のセルの `...` のところを書き換えて `reverse_lookup2` を作成してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def reverse_lookup2(dic1):\\n\",\n    \"    ...\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"上のセルで解答を作成した後、以下のセルを実行し、実行結果が `True` になることを確認してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {\n    \"tags\": [\n     \"raises-exception\"\n    ]\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"print(reverse_lookup2({'apple': 3, 'pen': 5, 'orange': 7}) == {3: 'apple', 5: 'pen', 7: 'orange'})\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## `range`\\n\",\n    \"\\n\",\n    \"特定の回数の繰り返し処理が必要なときは、**`range`** 関数を用います。\\n\",\n    \"\\n\",\n    \"---\\n\",\n    \"```Python\\n\",\n    \"for value in range(j):\\n\",\n    \"    実行文\\n\",\n    \"```\\n\",\n    \"---\\n\",\n    \"\\n\",\n    \"これによって実行文を `j` 回実行します。具体例を見てみましょう。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"for value in range(5):\\n\",\n    \"    print('Hi!')\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"さて、`for` と `in` の間の `value` は変数ですが、 `value` には何が入っているのか確認してみましょう。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"for value in range(5):\\n\",\n    \"    print(value)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"すなわち、`value` は `0` ～ `4` を動くことがわかります。\\n\",\n    \"\\n\",\n    \"この `value` の値を用いることでリスト `ln` の要素を順番に用いることもできます。\\n\",\n    \"回数としてリストの長さ `len(ln)` を指定します。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"ln = ['e', 'd', 'a', 'c', 'f', 'b']\\n\",\n    \"for value in range(len(ln)):\\n\",\n    \"    print(ln[value])\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"`range()` 関数は:\\n\",\n    \"\\n\",\n    \"1. 引数を1つ与えると `0` から引数までの整数列を返します。\\n\",\n    \"    このとき引数の値は含まれないことの注意してください。\\n\",\n    \"2. 引数を2つあるいは3つ与えると:\\n\",\n    \"    * 最初の引数を数列の開始 (start)、2番目を停止 (stop)、3番目を数列の刻み (step) とする整数列を返します。\\n\",\n    \"    * 3番目の引数は省略可能で、既定値は `1` となっています。\\n\",\n    \"    * 2番目の引数の値は含まれないことの注意してください。\\n\",\n    \"\\n\",\n    \"以下の例は、`0` から `9` までの整数列の総和を計算、印字するプログラムです:\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"s = 0\\n\",\n    \"for i in range(10):\\n\",\n    \"    s = s + i\\n\",\n    \"\\n\",\n    \"print(s)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"以下の例は、`1` から `9` までの奇数の総和を計算、印字するプログラムです。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"s = 0\\n\",\n    \"for i in range(1,10,2):\\n\",\n    \"    s = s + i\\n\",\n    \"\\n\",\n    \"print(s)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 練習\\n\",\n    \"引数で与えられる2つの整数 `x`, `y` 間（`x`, `y` を含む）の整数の総和を返す関数 `sum_n` を for文を利用して作成してください。\\n\",\n    \"たとえば、`sum_n(1,3)` の結果は `1 + 2 + 3 = 6` となります。\\n\",\n    \"\\n\",\n    \"以下のセルの `...` のところを書き換えて `sum_n` を作成してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def sum_n(x, y):\\n\",\n    \"    ...\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"上のセルで解答を作成した後、以下のセルを実行し、実行結果が `True` になることを確認してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {\n    \"tags\": [\n     \"raises-exception\"\n    ]\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"print(sum_n(1, 3) == 6)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 練習\\n\",\n    \"整数 `int_size` を引数として取り、\\n\",\n    \"長さが `int_size` であるリスト `ln` を返す関数 `construct_list` を作成してください。\\n\",\n    \"ただし、 `ln` の `i` 番目の要素は `i` とします（`i` は 0 以上 `int_size-1` 以下の整数）。\\n\",\n    \"\\n\",\n    \"以下のセルの `...` のところを書き換えて `construct_list(int_size)` を作成してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def construct_list(int_size):\\n\",\n    \"    ...\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"上のセルで解答を作成した後、以下のセルを実行し、実行結果が `True` になることを確認してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {\n    \"tags\": [\n     \"raises-exception\"\n    ]\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"print(construct_list(10) == [0, 1, 2, 3, 4, 5, 6, 7, 8, 9])\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## `range` とリスト\\n\",\n    \"**`range`** 関数は整数列を返しますが、リストを返さないことに注意してください。\\n\",\n    \"これは、繰り返し回数の大きな for文などで大きなリストを作ると無駄が大きくなるためです。\\n\",\n    \"\\n\",\n    \"`range` 関数を利用して整数列のリストを生成するには、\\n\",\n    \"以下のように `list` を関数として用いて、明示的にリスト化する必要があります。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"seq_list = list(range(5)) \\n\",\n    \"print(seq_list)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## for文の**入れ子**\\n\",\n    \"for文を多重に**入れ子**（**ネスト**）して使うこともよくあります。  まずは次の例を実行してみてください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"list1 = [['a', 'b', 'c'], ['d', 'e', 'f'], ['g', 'h', 'i'], ['j', 'k', 'l']]\\n\",\n    \"\\n\",\n    \"for i in range(4):\\n\",\n    \"    for j in range(3):\\n\",\n    \"        print('list1の', i + 1, '番目の要素（リスト）の', j + 1, '番目の要素 =', list1[i][j])\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"`i = 0` のときに、2番目（内側）のfor文において、\\n\",\n    \"`j` に `0` から `2` までの値が順に代入されて、各場合に `print` が実行されます。\\n\",\n    \"その後、2番目の for文の実行が終わると、1番目（外側）のfor文の最初に戻って、\\n\",\n    \"`i` の値に新しい値が代入されて、`i = 1` になります。\\n\",\n    \"その後、再度 2番目のfor文を実行することになります。\\n\",\n    \"このときに、この2番目の for文の中で `j` には再度、`0` から `2` までの値が順に代入されることになります。\\n\",\n    \"\\n\",\n    \"決して、「最初に `j = 2` まで代入したから、\\n\",\n    \"もう2番目のfor文は実行しない」という訳ではないことに注意してください。\\n\",\n    \"一度for文の実行を終えて、再度同じfor文（上の例でいうところの2番目の for文）に戻ってきた場合、\\n\",\n    \"その手続きはまた最初からやり直すことになるのです。 \"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"以下のプログラムは、変数 `C` に組み合わせの数をリストのリストとして求めます。\\n\",\n    \"\\n\",\n    \"`C[i][j]` は、`i` 個から `j` 個を選ぶ組み合わせの数になります。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"C = [[1]]\\n\",\n    \"for i in range(100):\\n\",\n    \"    C.append([1]+[0]*i+[1])\\n\",\n    \"    for j in range(i):\\n\",\n    \"        C[i+1][j+1] = C[i][j] + C[i][j+1]\\n\",\n    \"\\n\",\n    \"C[:10]\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"`C[100]` を視覚化してみましょう。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"plt.plot(C[100])\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 練習\\n\",\n    \"\\n\",\n    \"次のような関数 `sum_lists` を作成してください。\\n\",\n    \"\\n\",\n    \"- `sum_lists` はリスト `list1` を引数とします。\\n\",\n    \"- `list1` の各要素はリストであり、そのリストの要素は数です。\\n\",\n    \"- `sum_lists` は、`list1` の各要素であるリストの総和を求め、それらの総和を足し合せて返します。\\n\",\n    \"\\n\",\n    \"以下のセルの `...` のところを書き換えて `sum_lists` を作成してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def sum_lists(list1):\\n\",\n    \"    ...\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"上のセルで解答を作成した後、以下のセルを実行し、実行結果が `True` になることを確認してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {\n    \"tags\": [\n     \"raises-exception\"\n    ]\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"print(sum_lists([[20, 5], [6, 16, 14, 5], [16, 8, 16, 17, 14], [1], [5, 3, 5, 7]]) == 158)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 練習\\n\",\n    \"\\n\",\n    \"リスト `list1` と `list2` が引数として与えられたとき、次のようなリスト `list3` を返す関数 `sum_matrix` を作成してください。\\n\",\n    \"\\n\",\n    \"- `list1`, `list2`, `list3` は、3つの要素を持ちます。\\n\",\n    \"- 各要素は大きさ3のリストになっており、そのリストの要素は全て数です。\\n\",\n    \"- `list3[i][j]` （ただし、`i` と `j` は共に、0以上2以下の整数）は `list1[i][j]` と `list2[i][j]` の値の和になっています。\\n\",\n    \"\\n\",\n    \"以下のセルの `...` のところを書き換えて `sum_matrix` を作成してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def sum_matrix(list1, list2):\\n\",\n    \"    ...\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"上のセルで解答を作成した後、以下のセルを実行し、実行結果が `True` になることを確認してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {\n    \"tags\": [\n     \"raises-exception\"\n    ]\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"print(sum_matrix([[1,2,3],[4,5,6],[7,8,9]], [[1,4,7],[2,5,8],[3,6,9]]) == [[2, 6, 10], [6, 10, 14], [10, 14, 18]])\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## for文の**計算量**\\n\",\n    \"\\n\",\n    \"山口和紀編「情報」第2版（東京大学出版会）には、「**計算量**とは、\\n\",\n    \"アルゴリズムをもとにしたプログラムの実行時間を見積もるための指標である。」と書かれています。\\n\",\n    \"さらに、「この見積もりは**計算量のオーダー**と呼ばれる非常におおまかな尺度で考える。」と書かれています。\\n\",\n    \"（太字は引用時に追加しました。）\\n\",\n    \"\\n\",\n    \"たとえば、リストに対するfor文\\n\",\n    \"```Python\\n\",\n    \"for x in リスト:\\n\",\n    \"    要素xに対する処理\\n\",\n    \"```\\n\",\n    \"では、「要素に対する処理」が要素の数だけ実行されます。\\n\",\n    \"この処理の時間が一定であるとすると、要素の数を $n$ としたとき、\\n\",\n    \"全体の処理には $n$ に比例する時間がかかります。\\n\",\n    \"このことを、**オーダー** $n$ といって、$O(n)$ と書きます。\\n\",\n    \"一方、\\n\",\n    \"```Python\\n\",\n    \"for x in リスト:\\n\",\n    \"    for y in 同じリスト:\\n\",\n    \"        要素の組み合わせ(x,y)に対する処理\\n\",\n    \"```\\n\",\n    \"という二重のループでは、要素の組み合わせに対する処理が一定時間で終わるとしても、\\n\",\n    \"ループの中でループが実行されるので、\\n\",\n    \"全体の処理には、$n^2$ に比例する時間がかかります。\\n\",\n    \"このことを $O(n^2)$ と書きます。\\n\",\n    \"$n$ が10倍になったとき、\\n\",\n    \"一重のループの実行時間は10倍にしかなりませんが、\\n\",\n    \"二重ループの実行時間は100倍になります。\\n\",\n    \"$n$ が100倍になったときは、前者は100倍ですが後者は10000倍になります。\\n\",\n    \"\\n\",\n    \"二重ループが明らかでないこともあります。\\n\",\n    \"以下の関数は、リストとして与えられたデータの平均と分散を計算するものです。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def average(d):\\n\",\n    \"    s = 0\\n\",\n    \"    for x in d:\\n\",\n    \"        s = s + x\\n\",\n    \"    return s/len(d)\\n\",\n    \"\\n\",\n    \"def variance(d):\\n\",\n    \"    s = 0\\n\",\n    \"    for x in d:\\n\",\n    \"        s = s + (x-average(d))**2\\n\",\n    \"    return s/len(d)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"ガウス分布から100個のデータと10000個のデータを生成して分散を計算してみましょう。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"import random\\n\",\n    \"d100 = []\\n\",\n    \"for i in range(100):\\n\",\n    \"    d100.append(random.gauss(0,10))\\n\",\n    \"d10000 = []\\n\",\n    \"for i in range(10000):\\n\",\n    \"    d10000.append(random.gauss(0,10))\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"variance(d100)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"variance(d10000)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"10000個の場合は相当に時間がかかることがわかります。\\n\",\n    \"これは、`variance` のfor文の中で `average` を呼んでいるためです。\\n\",\n    \"見かけ上は一重ループなのですが、`average` の中にもループがあるため、\\n\",\n    \"二重ループと同じ時間がかかります。\\n\",\n    \"したがって、10000個の場合は、100個の場合に比べて10000倍時間がかかります。\\n\",\n    \"\\n\",\n    \"ローカル変数を用いて `variance` の定義を書き直してみましょう。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def variance(d):\\n\",\n    \"    av = average(d)\\n\",\n    \"    s = 0\\n\",\n    \"    for x in d:\\n\",\n    \"        s = s + (x-av)**2\\n\",\n    \"    return s/len(d)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"variance(d100)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"variance(d10000)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"10000個の場合でも一瞬で実行が終わったことでしょう。\\n\",\n    \"この場合、一重のループを2回実行しているだけだからです。\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"##  **`enumerate`**\\n\",\n    \"for文の繰り返し処理では、要素の順序を把握したいことがあります。\\n\",\n    \"これまで学んだ方法では以下のように書けます。\\n\",\n    \"\\n\",\n    \"---\\n\",\n    \"```Python\\n\",\n    \"i = 0\\n\",\n    \"for val in some_list:\\n\",\n    \"    print(i, val)\\n\",\n    \"    # 繰り返させたい処理\\n\",\n    \"    i += 1\\n\",\n    \"```\\n\",\n    \"\\n\",\n    \"---\\n\",\n    \"\\n\",\n    \"Pythonでは `enumerate()` 関数が用意されており、上のプログラムは以下のように書き換えることができます。\\n\",\n    \"\\n\",\n    \"---\\n\",\n    \"```Python\\n\",\n    \"for i, val in enumerate(some_list):\\n\",\n    \"    # 繰り返させたい処理\\n\",\n    \"```\\n\",\n    \"\\n\",\n    \"---\\n\",\n    \"\\n\",\n    \"2つの変数 `i`, `val` が指定されています。\\n\",\n    \"`i` には `0`, `1`, `2`, ... が順に代入されます。\\n\",\n    \"`val` にはリストの要素が順に代入されます。\\n\",\n    \"\\n\",\n    \"たとえば、リストの要素をキー、そのインデックスを値とする辞書が欲しい場合は、以下のように書くことができます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"words = ['dog', 'cat', 'mouse']\\n\",\n    \"mapping = {}\\n\",\n    \"for i, w in enumerate(words):\\n\",\n    \"    mapping[w] = i\\n\",\n    \"\\n\",\n    \"print(mapping)            # {'dog': 0, 'cat': 1, 'mouse': 2} が得られる。\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## **`in`**\\n\",\n    \"Pythonでは `for` ループでリストを展開する `in` とは別に、\\n\",\n    \"2-2 で説明したように、リスト内の要素の有無を検査する **`in`** 演算子と **`not in`** 演算子が定義されています。\\n\",\n    \"以下のように、`if` 文の条件に `in` が出現した場合、for文とは動作が異なるので注意してください。\\n\",\n    \"\\n\",\n    \"---\\n\",\n    \"\\n\",\n    \"```Python\\n\",\n    \"colors = ['red', 'green', 'blue']\\n\",\n    \"color = 'red'\\n\",\n    \"\\n\",\n    \"if color in colors:\\n\",\n    \"    # do something\\n\",\n    \"```\\n\",\n    \"\\n\",\n    \"---\\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## while文による繰り返し\\n\",\n    \"\\n\",\n    \"**while文**では **`while`** の後の条件式が `False` となるまで、実行文グループを繰り返します。\\n\",\n    \"\\n\",\n    \"下記のプログラムでは、$\\\\sum_{x=1}^{10}x$ が `total` の値となります。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"x = 1\\n\",\n    \"total = 0 \\n\",\n    \"while x <= 10:\\n\",\n    \"    total += x\\n\",\n    \"    x += 1\\n\",\n    \"\\n\",\n    \"print(x, total)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"条件式が `False` になったときに、 while文から抜けているので、\\n\",\n    \"終了後の `x` の値が `11` になっていることに注意してください。\\n\",\n    \"なお、上の例を for文で実行する場合には以下のようになります。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"total = 0 \\n\",\n    \"for x in range(11):\\n\",\n    \"    total += x\\n\",\n    \"\\n\",\n    \"print(x, total)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"##  制御構造とreturn文\\n\",\n    \"\\n\",\n    \"**return文**は1-2で説明したように関数を終了し、値を返す（返値）機能を持ちます。\\n\",\n    \"`if`, `for`, `while` といった制御構造の中でreturn文が実行された場合、\\n\",\n    \"ただちに関数の処理を終了し、その後の処理は行われません。\\n\",\n    \"\\n\",\n    \"以下の関数 `simple_lsearch` は与えられたリスト、`lst` に `myitem` と等しいものがあれば `True` を、なければ `False` を返します。\\n\",\n    \"\\n\",\n    \"- 2行目のfor文で `lst` の各要素に対して繰り返しを実行するように指定されています。\\n\",\n    \"- 3行目のif文で要素 `item` が `myitem` と等しい場合、4行目の `return True` でただちに関数を終了しています。\\n\",\n    \"- for文で全てのリスト要素に対してテストが終わり、等しいものがない場合は、5行目の `return False` が実行されます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def simple_lsearch(lst, myitem):\\n\",\n    \"    for item in lst:\\n\",\n    \"        if item == myitem:\\n\",\n    \"            return True\\n\",\n    \"    return False\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## **break文**\\n\",\n    \"**break文**は、 for文もしくはwhile文の実行文グループで利用可能です。\\n\",\n    \"break文は実行中のプログラムで最も内側の繰り返し処理を中断し、そのループを終了させる目的で利用されます。\\n\",\n    \"以下のプログラムは、初項 `256`、公比 1/2、の等比級数の和を求めるものです。\\n\",\n    \"ただし、総和が `500` をこえれば打ち切られます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"x = 256\\n\",\n    \"total = 0\\n\",\n    \"while x > 0:\\n\",\n    \"    if total > 500:\\n\",\n    \"        break           # 500 を超えれば while ループを抜ける\\n\",\n    \"    total += x\\n\",\n    \"    x = x // 2          # // は少数点以下を切り捨てる除算\\n\",\n    \"\\n\",\n    \"print(x, total)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 練習\\n\",\n    \"\\n\",\n    \"文字列 `str1` と `str2` が引数として与えられたとき、\\n\",\n    \"`str1` が `str2` を部分文字列として含むかどうか判定する関数 `simple_match` を作成してください。\\n\",\n    \"具体的には、`str2` を含む場合、\\n\",\n    \"その部分文字列が開始される `str1` のインデックスを返値として返してください。\\n\",\n    \"`str2` を含まない場合、 `-1` を返してください。\\n\",\n    \"ただし、`simple_match` の中で文字列のメソッドやモジュール（正規表現など）を使ってはいけません。\\n\",\n    \"\\n\",\n    \"以下のセルの `...` のところを書き換えて `simple_match` を作成してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def simple_match(str1, str2):\\n\",\n    \"    ...\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"上のセルで解答を作成した後、以下のセルを実行し、実行結果が `True` になることを確認してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {\n    \"tags\": [\n     \"raises-exception\"\n    ]\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"print(simple_match('location', 'cat') == 2)\\n\",\n    \"print(simple_match('soccer', 'cat') == -1)\\n\",\n    \"print(simple_match('category', 'cat') == 0)\\n\",\n    \"print(simple_match('carpet', 'cat') == -1)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## **continue文**\\n\",\n    \"continue文はbreak文同様に、`for` および `while` ループの実行文グループで利用可能です。\\n\",\n    \"continue文は実行中のプログラムで最も内側の繰り返し処理を中断し、次のループの繰り返しの処理を開始します。\\n\",\n    \"\\n\",\n    \"下記のプログラムでは、`colors` リストの `'black'` は印字されませんが `'white'` は印字されます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"colors = ['red', 'green', 'blue', 'black', 'white']\\n\",\n    \"for c in colors:\\n\",\n    \"    if c == 'black':\\n\",\n    \"           continue\\n\",\n    \"    print(c)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## ▲for文とwhile文における **`else`**\\n\",\n    \"for文およびwhile文では `else` を書くこともできます。\\n\",\n    \"この実行文グループは、ループの最後に一度だけ実行されます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"colors = ['red', 'green', 'blue', 'black', 'white']\\n\",\n    \"for c in colors:\\n\",\n    \"    if c == 'black':\\n\",\n    \"        continue\\n\",\n    \"    print(c)\\n\",\n    \"else:\\n\",\n    \"    print('')\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"for文およびwhile文の `else` ブロックの内容は `continue` で終了したときは実行されますが、一方で\\n\",\n    \"`break` でループを終了したときは実行されません。\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## **pass文**\\n\",\n    \"\\n\",\n    \"Pythonでは空の実行文グループは許されていません。\\n\",\n    \"一方で、空白のコードブロックを用いることでプログラムが読みやすくなる場合があります。\\n\",\n    \"たとえば以下の、`if` ... `elif` ... `else` プログラムはエラーとなります。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {\n    \"tags\": [\n     \"raises-exception\"\n    ]\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"x = -1\\n\",\n    \"if x < 0:\\n\",\n    \"    print('x is positive')\\n\",\n    \"elif x == 0:\\n\",\n    \"    # IndentationError: expected an indented block\\n\",\n    \"elif 0 < x < 5:\\n\",\n    \"    print('x is positive and smaller than 5')\\n\",\n    \"else:\\n\",\n    \"    print('x is positive and larger than or equal to 5')\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"なにもしないpass文を用いて、以下のように書き換えることで正常に実行されます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"x = -1\\n\",\n    \"if x < 0:\\n\",\n    \"    print('x is positive')\\n\",\n    \"elif x == 0:\\n\",\n    \"    # no error\\n\",\n    \"    pass\\n\",\n    \"elif 0 < x < 5:\\n\",\n    \"    print('x is positive and smaller than 5')\\n\",\n    \"else:\\n\",\n    \"    print('x is positive and larger than or equal to 5')\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 練習\\n\",\n    \"\\n\",\n    \"以下のプログラムでは1秒おきに `print` が永久に実行されます。\\n\",\n    \"\\n\",\n    \"---\\n\",\n    \"```Python\\n\",\n    \"from time import sleep\\n\",\n    \"\\n\",\n    \"while True:\\n\",\n    \"    print('Yeah!')\\n\",\n    \"    sleep(1)\\n\",\n    \"```\\n\",\n    \"---\\n\",\n    \"\\n\",\n    \"10回 `print` が実行された後にwhile文を終了するように書き換えてください。\\n\",\n    \"実行中のセルを停止させるには、ストップボタンが使えます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": []\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 練習\\n\",\n    \"\\n\",\n    \"英語の文章からなる文字列 `str_engsentence` が引数として与えられたとき、\\n\",\n    \"`str_engsentence` 中に含まれる3文字以上の全ての英単語を要素とするリストを返す関数\\n\",\n    \"`collect_engwords` を作成してください。ただし、同じ単語を重複して含んでいて構いません。\\n\",\n    \"\\n\",\n    \"以下のセルの `...` のところを書き換えて `collect_engwords(str_engsentence)` を作成してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def collect_engwords(str_engsentence):\\n\",\n    \"    ...\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"上のセルで解答を作成した後、以下のセルを実行し、実行結果が `True` になることを確認してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {\n    \"tags\": [\n     \"raises-exception\"\n    ]\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"print(collect_engwords('Unfortunately no, it requires something with a little more kick, plutonium.') == ['Unfortunately', 'requires',\\n\",\n    \"'something', 'with', 'little', 'more', 'kick', 'plutonium'])\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 練習\\n\",\n    \"\\n\",\n    \"2つの同じ大きさのリストが引数として与えられたとき、\\n\",\n    \"2つのリストの奇数インデックスの要素を入れ替えて、\\n\",\n    \"その結果得られる2つのリストをタプルにして返す関数 `swap_lists` を作成してください\\n\",\n    \"（ただし、0 は偶数として扱うものとします）。\\n\",\n    \"与えられたリストは破壊しても構いません。\\n\",\n    \"\\n\",\n    \"以下のセルの `...` のところを書き換えて `swap_lists(ln1, ln2)` を作成してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def swap_lists(ln1, ln2):\\n\",\n    \"    ...\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"上のセルで解答を作成した後、以下のセルを実行し、実行結果が `True` になることを確認してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {\n    \"tags\": [\n     \"raises-exception\"\n    ]\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"print(swap_lists([1, 2, 3, 4, 5], ['a', 'b', 'c', 'd', 'e']) == ([1, 'b', 3, 'd', 5], ['a', 2, 'c', 4, 'e']))\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 練習\\n\",\n    \"文字列 `str1` を引数として取り、\\n\",\n    \"`str1` の中に含まれる大文字の数を返す関数 `count_capitalletters` を作成してください。\\n\",\n    \"\\n\",\n    \"以下のセルの `...` のところを書き換えて `count_capitalletters(str1)` を作成してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def count_capitalletters(str1):\\n\",\n    \"    ...\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"上のセルで解答を作成した後、以下のセルを実行し、実行結果が `True` になることを確認してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {\n    \"tags\": [\n     \"raises-exception\"\n    ]\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"print(count_capitalletters('Que Será, Será') == 3)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 練習\\n\",\n    \"\\n\",\n    \"長さが 3 の倍数である文字列 `str_augc` が引数として与えられたとき、\\n\",\n    \"`str_augc` を長さ 3 の文字列に区切り、それらを順に格納したリストを返す関数 `identify_codons` を作成してください。\\n\",\n    \"\\n\",\n    \"以下のセルの `...` のところを書き換えて `identify_codons(str_augc)` を作成してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def identify_codons(str_augc):\\n\",\n    \"    ...\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"上のセルで解答を作成した後、以下のセルを実行し、実行結果が `True` になることを確認してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {\n    \"tags\": [\n     \"raises-exception\"\n    ]\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"print(identify_codons('CCCCCGGCACCT') == ['CCC', 'CCG', 'GCA', 'CCT'])\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 練習\\n\",\n    \"\\n\",\n    \"正の整数 `int1` が引数として与えられたとき、\\n\",\n    \"`int1` の値の下桁から3桁毎にコンマ (`,`) を入れた文字列を返す関数 `add_commas` を作成してください。\\n\",\n    \"ただし、数の先頭にコンマを入れる必要はありません。\\n\",\n    \"\\n\",\n    \"以下のセルの `...` のところを書き換えて `add_commas` を作成してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def add_commas(int1):\\n\",\n    \"    ...\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"上のセルで解答を作成した後、以下のセルを実行し、全ての実行結果が `True` になることを確認してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {\n    \"tags\": [\n     \"raises-exception\"\n    ]\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"print(add_commas(14980) == '14,980')\\n\",\n    \"print(add_commas(3980) == '3,980')\\n\",\n    \"print(add_commas(298) == '298')\\n\",\n    \"print(add_commas(1000000) == '1,000,000')\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 練習\\n\",\n    \"\\n\",\n    \"リスト `list1` が引数として与えられ、次のような文字列 `str1` を返す関数 `sum_strings` を作成してください。\\n\",\n    \"\\n\",\n    \"`list1` は `k` 個の要素を持つとします（ただし、`k` は正の整数）。\\n\",\n    \"`list1` の要素が文字列でなければ文字列に変換してください。\\n\",\n    \"その上で、`list1` の1番目から `k-2` 番目の各要素の後ろにコンマとスペースからなる文字列 `', '` を加え、\\n\",\n    \"`k-1` 番目の要素の後ろには、`' and '` を加え、1番目から `k` 番目までの要素を繋げた文字列を `str1` とします。\\n\",\n    \"\\n\",\n    \"以下のセルの `...` のところを書き換えて `sum_strings` を作成してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def sum_strings(list1):\\n\",\n    \"    ...\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"上のセルで解答を作成した後、以下のセルを実行し、実行結果が `True` になることを確認してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {\n    \"tags\": [\n     \"raises-exception\"\n    ]\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"print(sum_strings(['a', 'b', 'c', 'd']) == 'a, b, c and d')\\n\",\n    \"print(sum_strings(['a']) == 'a')\\n\",\n    \"print(sum_strings([1, 2, 3]) == '1, 2 and 3')\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 練習\\n\",\n    \"\\n\",\n    \"辞書 `dic1` と長さ 10 以下の文字列 `str1` が引数として与えられたとき、\\n\",\n    \"以下のように `dic1` を変更する関数 `handle_collision2` を作成してください。\\n\",\n    \"ただし、`dic1` のキーは、1 以上 10 以下の整数、キーに対応する値は文字列とします。\\n\",\n    \"\\n\",\n    \"1. `dic1` に `str1` の長さ `n` がキーとして登録されていない場合、`dic1` に キー `n`、`n` に対応する値 `str1` を登録します。\\n\",\n    \"2. `dic1` に `str1` の長さ `n` がキーとして登録されている場合、`i` の値を `n+1`, `n+2`, ...と1つずつ増やしていき、`dic1` にキーとして登録されていない値 `i` を探します。キーとして登録されていない値 `i` が見つかった場合、その `i` をキー、`i` に対応する値として `str1` を登録してください。 ただし、`i` を 10 まで増やしても登録されていない値が見つからない場合は、`i` を 1 に戻した上で `i` を増やす作業を続行してください。\\n\",\n    \"3. 2の手順によって、登録可能な `i` が見つからなかった場合、`dic1` を変更しません。 \\n\",\n    \"\\n\",\n    \"以下のセルの `...` のところを書き換えて `handle_collision2(dic1, str1)` を作成してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def handle_collision2(dic1, str1):\\n\",\n    \"    ...\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"上のセルで解答を作成した後、以下のセルを実行し、実行結果が `True` になることを確認してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {\n    \"tags\": [\n     \"raises-exception\"\n    ]\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"dic1_orig = {6: 'Styles', 4: 'Link', 7: 'Ackroyd'}\\n\",\n    \"handle_collision2(dic1_orig, 'Big Four')\\n\",\n    \"print(dic1_orig == {6: 'Styles', 4: 'Link', 7: 'Ackroyd', 8: 'Big Four'})\\n\",\n    \"dic1_orig = {6: 'Styles', 4: 'Link', 7: 'Ackroyd', 8: 'Big Four', 10: 'Blue Train', 9: 'End House'}\\n\",\n    \"handle_collision2(dic1_orig, 'Edgware')\\n\",\n    \"print(dic1_orig == {6: 'Styles', 4: 'Link', 7: 'Ackroyd', 8: 'Big Four', 10: 'Blue Train', 9: 'End House', 1: 'Edgware'})\\n\",\n    \"dic1_orig = {6: 'Styles', 4: 'Link', 7: 'Ackroyd', 8: 'Big Four', 10: 'Blue Train', 9: 'End House', 1: 'Edgware', 2: 'Orient', 3: 'Three Act', 5: 'Clouds'}\\n\",\n    \"handle_collision2(dic1_orig, 'ABC')\\n\",\n    \"print(dic1_orig == {6: 'Styles', 4: 'Link', 7: 'Ackroyd', 8: 'Big Four', 10: 'Blue Train', 9: 'End House', 1: 'Edgware', 2: 'Orient', 3: 'Three Act', 5: 'Clouds'})\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 練習\\n\",\n    \"\\n\",\n    \"整数を最初の要素、文字列をその次の要素とするリスト（これを子リストと呼びます）を要素とするリスト\\n\",\n    \"`list1` が引数として与えられたとき、次のような辞書 `dic1` を返す関数 `handle_collision3` を作成してください。\\n\",\n    \"\\n\",\n    \"* 各子リスト `list2` に対して、`dic1` のキーは `list2` の最初の要素である整数とし、そのキーに対応する値は次の要素である文字列とします。\\n\",\n    \"* 2つ以上の子リストの最初の要素が同じ整数である場合、`list1` においてより小さいインデックスを持つ子リストの文字列を、その整数のキーに対応する値とします。\\n\",\n    \"\\n\",\n    \"以下のセルの `...` のところを書き換えて `handle_collision3(list1)` を作成してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def handle_collision3(list1):\\n\",\n    \"    ...\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"上のセルで解答を作成した後、以下のセルを実行し、実行結果が True になることを確認してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {\n    \"tags\": [\n     \"raises-exception\"\n    ]\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"print(handle_collision3([[3, 'Richard III'], [1, 'Othello'], [2, 'Tempest'], [3, 'King John'], [4, 'Midsummer'], [1, 'Lear']]) == {1: 'Othello', 2: 'Tempest', 3: 'Richard III', 4: 'Midsummer'})\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 練習の解答\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def reverse_lookup2(dic1):\\n\",\n    \"    dic2 = {}  #辞書を初期化する\\n\",\n    \"    for key, value in dic1.items():\\n\",\n    \"        dic2[value] = key\\n\",\n    \"    return dic2\\n\",\n    \"#reverse_lookup2({'apple':3, 'pen':5, 'orange':7})\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def sum_n(x,y):\\n\",\n    \"    sum = 0\\n\",\n    \"    for i in range(x, y + 1):\\n\",\n    \"        sum = sum + i\\n\",\n    \"    return sum\\n\",\n    \"#sum_n(1,3)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def construct_list(int_size):\\n\",\n    \"    ln = int_size * [0]\\n\",\n    \"    for i in range(int_size):\\n\",\n    \"        ln[i] = i\\n\",\n    \"    return ln\\n\",\n    \"#construct_list(10)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def sum_lists(list1):\\n\",\n    \"    total = 0\\n\",\n    \"    for list2 in list1:  # for j in range(len(list1)):とlist2 = list1[j]としてもよい\\n\",\n    \"        #print(list2)\\n\",\n    \"        for i in range(len(list2)):\\n\",\n    \"            #print(i, list2[i])\\n\",\n    \"            total += list2[i]\\n\",\n    \"    return total\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def sum_matrix(list1, list2):\\n\",\n    \"    list3 = [[0,0,0],[0,0,0],[0,0,0]]  #結果を格納するリストを初期化する（これがない場合も試してみてください）\\n\",\n    \"    for i in range(3):\\n\",\n    \"        for j in range(3):\\n\",\n    \"            list3[i][j] += list1[i][j] + list2[i][j]\\n\",\n    \"            #print(i, j, list1[i][j],'+', list2[i][j], '=', list3[i][j])\\n\",\n    \"    return list3\\n\",\n    \"#sum_matrix([[1,2,3],[4,5,6],[7,8,9]], [[1,4,7],[2,5,8],[3,6,9]])\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def simple_match(str1, str2):\\n\",\n    \"    for i in range(len(str1)-len(str2)+1):\\n\",\n    \"        j = 0\\n\",\n    \"        while j < len(str2) and str1[i+j] == str2[j]:  #str1とstr2が一致している限りループ（ただし、jがstr2の長さ以上にならないようにする）#この条件がないと…？\\n\",\n    \"            j += 1\\n\",\n    \"        if j == len(str2):  #str2の最後まで一致しているとこの条件が成立\\n\",\n    \"            return i\\n\",\n    \"    return -1\\n\",\n    \"#for文による別解\\n\",\n    \"#def simple_match(str1, str2):\\n\",\n    \"#    for i in range(len(str1)-len(str2)+1):\\n\",\n    \"#        #print('i=', i)\\n\",\n    \"#        fMatch = True#マッチ判定\\n\",\n    \"#        for j in range(len(str2)):\\n\",\n    \"#            #print('j=', j, 'str1[i+j]=', str1[i+j], ' str2[j]=', str2[j])\\n\",\n    \"#            if str1[i+j] != str2[j]:#str2が終了する前に一致しない箇所があるかどうか\\n\",\n    \"#                fMatch = False\\n\",\n    \"#                break\\n\",\n    \"#        if fMatch:\\n\",\n    \"#            return i\\n\",\n    \"#    return -1\\n\",\n    \"#print(simple_match('location', 'cat') == 2)\\n\",\n    \"#print(simple_match('soccer', 'cat') == -1)\\n\",\n    \"#print(simple_match('category', 'cat') == 0)\\n\",\n    \"#print(simple_match('carpet', 'cat') == -1)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 練習の解説\\n\",\n    \"\\n\",\n    \"下のセルは、繰り返し回数として `count` 変数を利用した解答例です。回数を理解しやすくするため `print()` 関数で `count` 変数も印字しています。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"from time import sleep\\n\",\n    \"\\n\",\n    \"count = 0\\n\",\n    \"while True:\\n\",\n    \"    print('Yeah!', count)\\n\",\n    \"    count += 1\\n\",\n    \"    if(count >= 10):\\n\",\n    \"        break\\n\",\n    \"    sleep(1)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 練習の解答\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def collect_engwords(str_engsentences):\\n\",\n    \"    list_punctuation = ['.', ',', ':', ';', '!', '?']\\n\",\n    \"    for j in range(len(list_punctuation)):  #list_punctuationの中の文字列（この場合、句読点）を空文字列に置換する\\n\",\n    \"        str_engsentences = str_engsentences.replace(list_punctuation[j], '')\\n\",\n    \"    #print(str_engsentences)\\n\",\n    \"    list_str1 = str_engsentences.split(' ')\\n\",\n    \"    list_str2 = []\\n\",\n    \"    for j in range(len(list_str1)):\\n\",\n    \"        if len(list_str1[j]) >= 3:\\n\",\n    \"            list_str2.append(list_str1[j])\\n\",\n    \"    return list_str2\\n\",\n    \"#collect_engwords('Unfortunately no, it requires something with a little more kick, plutonium.')\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def swap_lists(ln1, ln2):\\n\",\n    \"    for j in range(len(ln1)):\\n\",\n    \"        if j % 2 == 1:\\n\",\n    \"            ln1[j], ln2[j] = ln2[j], ln1[j]\\n\",\n    \"    return ln1, ln2\\n\",\n    \"#swap_lists([1, 2, 3, 4, 5], ['a', 'b', 'c', 'd', 'e'])\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def count_capitalletters(str1):\\n\",\n    \"    int_count = 0\\n\",\n    \"    for i in range(len(str1)):\\n\",\n    \"        str2 = str1[i].upper()\\n\",\n    \"        str3 = str1[i].lower()\\n\",\n    \"        if str1[i] == str2 and str2 != str3:#前者の条件で大文字であることを、後者の条件で句読点などでないことを判定する\\n\",\n    \"            int_count += 1\\n\",\n    \"    return int_count\\n\",\n    \"#count_capitalletters('Que Será, Será')\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def identify_codons(str_augc):\\n\",\n    \"    str_codons = []\\n\",\n    \"    int_codonnum = int(len(str_augc)/3)\\n\",\n    \"    for i in range(int_codonnum):\\n\",\n    \"        str_codons.append(str_augc[i*3: i*3+3])\\n\",\n    \"    return str_codons\\n\",\n    \"#identify_codons('CCCCCGGCACCT')\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def add_commas(int1):\\n\",\n    \"    list1 = list(str(int1))  #文字列に変換し、更にそれを1文字ずつリストに格納する\\n\",\n    \"    str1 = ''\\n\",\n    \"    ccnt = 1  #3の倍数の位を調べるのに使う\\n\",\n    \"    for i in range(len(list1)-1, -1, -1):  #1の位の値から、大きい方の位の値に向かって処理を行う\\n\",\n    \"        str1 = list1[i] + str1\\n\",\n    \"        if ccnt % 3 == 0 and i != 0:  #3の倍数の位の前であり、一番大きい位でないならば\\n\",\n    \"            str1 = ',' + str1  #コンマをうつ\\n\",\n    \"        ccnt += 1\\n\",\n    \"    return str1\\n\",\n    \"#print(add_commas(14980) == '14,980')\\n\",\n    \"#print(add_commas(2980) == '2,980')\\n\",\n    \"#print(add_commas(298) == '298')\\n\",\n    \"#print(add_commas(1000000) == '1,000,000')\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def sum_strings(list_str):\\n\",\n    \"    str1 = ''\\n\",\n    \"    for i in range(len(list_str)):\\n\",\n    \"        if i < len(list_str) - 2:#後ろから3番目までの要素\\n\",\n    \"            str1 = str1 + str(list_str[i]) + ', '\\n\",\n    \"        elif i == len(list_str) - 2:#後ろから2番目の要素\\n\",\n    \"            str1 += str(list_str[i]) + ' and '\\n\",\n    \"        else:#一番後ろの要素\\n\",\n    \"            str1 += str(list_str[i])\\n\",\n    \"    return str1\\n\",\n    \"#sum_strings(['a', 'b', 'c', 'd'])\\n\",\n    \"#sum_strings(['a'])\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def handle_collision2(dic1, str1):\\n\",\n    \"    n = len(str1)\\n\",\n    \"    for i in range(n, 11):\\n\",\n    \"        if  dic1.get(i) is None:# == None でもよい\\n\",\n    \"            dic1[i] = str1\\n\",\n    \"            return\\n\",\n    \"    for i in range(1, n):\\n\",\n    \"        if  dic1.get(i) is None:# == None でもよい\\n\",\n    \"            dic1[i] = str1\\n\",\n    \"            return \"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def handle_collision3(list1):\\n\",\n    \"    dic1 = {} # 空の辞書を作成する\\n\",\n    \"    for i in range(len(list1)):\\n\",\n    \"        list2 = list1[i]\\n\",\n    \"        if dic1.get(list2[0]) is None:# == None でもよい\\n\",\n    \"            dic1[list2[0]] = list2[1]\\n\",\n    \"    return dic1\\n\",\n    \"#handle_collision3([[3, 'Richard III'], [1, 'Othello'], [2, 'Tempest'], [3, 'King John'], [4, 'Midsummer'], [1, 'Lear']])\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": []\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"Python 3 (ipykernel)\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"codemirror_mode\": {\n    \"name\": \"ipython\",\n    \"version\": 3\n   },\n   \"file_extension\": \".py\",\n   \"mimetype\": \"text/x-python\",\n   \"name\": \"python\",\n   \"nbconvert_exporter\": \"python\",\n   \"pygments_lexer\": \"ipython3\",\n   \"version\": \"3.12.4\"\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 4\n}\n"
  },
  {
    "path": "colab/3/3-3.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# 3-3. 関数\\n\",\n    \"\\n\",\n    \"関数について改めて説明します。\\n\",\n    \"\\n\",\n    \"参考:\\n\",\n    \"\\n\",\n    \"- https://docs.python.org/ja/3/tutorial/controlflow.html#defining-functions\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 関数の定義\\n\",\n    \"**関数**は処理（手続きの流れ）をまとめた再利用可能なコードです。関数には以下の特徴があります。\\n\",\n    \"\\n\",\n    \"* 名前を持つ。\\n\",\n    \"* 手続きの流れを含む。\\n\",\n    \"* 返値（明示的あるいは非明示的に）を返す。\\n\",\n    \"\\n\",\n    \"`len()` や `sum()` などの[組み込み関数](https://docs.python.jp/3/library/functions.html)は関数の例です。\\n\",\n    \"\\n\",\n    \"まず、関数の定義をしてみましょう。関数を定義するには **`def`** を用います。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"#'Hello'を表示する関数greeting\\n\",\n    \"def greeting():\\n\",\n    \"    print('Hello')\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"関数を定義したら、それを呼び出すことができます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"#関数greetingを呼び出し\\n\",\n    \"greeting()\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"**関数定義**の一般形は以下の通りです。\\n\",\n    \"\\n\",\n    \"```Python\\n\",\n    \"def 関数名(引数):\\n\",\n    \"    関数本体\\n\",\n    \"```\\n\",\n    \"\\n\",\n    \"1行名はヘッダと呼ばれ、***関数名***はその関数を呼ぶのに使う名前、**引数**はその関数へ渡す変数の一覧です。\\n\",\n    \"変数がない場合もあります。\\n\",\n    \"\\n\",\n    \"***関数本体***はインデントした上で、処理や手続きの流れを記述します。\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 引数\\n\",\n    \"関数を定義する際に、ヘッダの括弧の中に関数へ渡す変数の一覧を記述します。\\n\",\n    \"これらの変数は関数の**ローカル変数**となります。\\n\",\n    \"ローカル変数とはプログラムの一部（ここでは関数内）でのみ利用可能な変数です。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"#引数greeting_localに渡された値を表示する関数greeting\\n\",\n    \"def greeting(greeting_local):\\n\",\n    \"    print(greeting_local)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"関数を呼び出す際に引数に値を渡すことで、関数は受け取った値を処理することができます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"#関数greetingに文字列'Hello'を渡して呼び出し\\n\",\n    \"greeting('Hello')\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"このようにして引数に渡される値のことを、**実引数**（**argument**）と呼ぶことがあります。\\n\",\n    \"実引数に対して、ここまで説明してきた引数（ローカル変数である引数）は、**仮引数**（**parameter**）と呼ばれます。\\n\",\n    \"参考：[公式FAQ：実引数と仮引数の違いは何ですか？](https://docs.python.org/ja/3/faq/programming.html#what-is-the-difference-between-arguments-and-parameters)\\n\",\n    \"\\n\",\n    \"実引数のことを引数と呼ぶこともありますので、注意してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 返値\\n\",\n    \"関数は受け取った引数を元に処理を行い、その結果の**返値**（1-2で説明済み）を返すことができます。\\n\",\n    \"\\n\",\n    \"返値は、**`return`** で定義します。関数の返値がない場合は、**`None`** が返されます。\\n\",\n    \"`return` が実行されると、関数の処理はそこで終了するため、次に文があっても実行はされません。\\n\",\n    \"また、ループなどの繰り返し処理の途中でも `return` が実行されると処理は終了します。\\n\",\n    \"関数の処理が最後まで実行され、返値がない場合は最後に `return` を実行したことと同じになります。\\n\",\n    \"\\n\",\n    \"`return` の後に式がない場合は、`None` が返されます。\\n\",\n    \"（`return` が実行されずに関数の最後まで来たときも同様です。）\\n\",\n    \"`return` を式なしで実行することで、関数の処理を途中で抜けることができます。\\n\",\n    \"また、このような関数は、与えられた配列を破壊的に変更するなど、\\n\",\n    \"呼び出した側に何らかの変化を及ぼす際にも用いられます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"#引数greeting_localに渡された値を返す関数greeting\\n\",\n    \"def greeting(greeting_local):\\n\",\n    \"    return greeting_local\\n\",\n    \"\\n\",\n    \"#関数greetingに文字列'Hello'を渡して呼び出し\\n\",\n    \"greeting('Hello')\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"#入力の平均を計算して返す関数average\\n\",\n    \"def average(nums):\\n\",\n    \"    #組み込み関数のsum()とlen()を利用\\n\",\n    \"    return sum(nums)/len(nums)\\n\",\n    \"\\n\",\n    \"#関数averageに数字のリストを渡して呼び出し\\n\",\n    \"average([1,3,5,7,9])\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"関数の返値を変数に代入することもできます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"#関数greetingの返値を変数greetに代入\\n\",\n    \"greet = greeting('Hello')\\n\",\n    \"greet\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 複数の引数\\n\",\n    \"関数は任意の数の引数を受け取ることができます。\\n\",\n    \"複数の引数を受け取る場合は、引数をコンマで区切ります。\\n\",\n    \"これらの引数名は重複しないようにしましょう。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"#3つの引数それぞれに渡された値を表示する関数greeting\\n\",\n    \"def greeting(en, fr, de):\\n\",\n    \"    print(en + ', ' + fr + ', ' + de)\\n\",\n    \"    \\n\",\n    \"#関数greetingに3つの引数を渡して呼び出し\\n\",\n    \"greeting('Hello', 'Bonjour', 'Guten Tag')\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"関数は異なる型であっても引数として受け取ることができます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"#文字列と数値を引数として受け取る関数greeting\\n\",\n    \"def greeting(en, number, name):\\n\",\n    \"    #文字列に数を掛け算すると、文字列を数の回だけ繰り返すことを指定します\\n\",\n    \"    print(en*number+','+name)\\n\",\n    \"    \\n\",\n    \"#関数greetingに文字列と数値を引数として渡して呼び出し\\n\",\n    \"greeting('Hello',3, 'World')\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 変数とスコープ\\n\",\n    \"関数の引数や関数内で定義される変数はローカル変数のため、それらの変数は関数の外からは参照できません。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {\n    \"tags\": [\n     \"raises-exception\"\n    ]\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"#引数greeting_localに渡された値を表示する関数greeting\\n\",\n    \"def greeting(greeting_local):\\n\",\n    \"    print(greeting_local)\\n\",\n    \"    \\n\",\n    \"greeting('Hello')  \\n\",\n    \"\\n\",\n    \"#ローカル変数（関数greetingの引数）greeting_localを参照\\n\",\n    \"greeting_local\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"一方、変数が**グローバル変数**であれば、それらの変数は関数の外からも中からも参照できます。\\n\",\n    \"グローバル変数とはプログラム全体、どこからでも利用可能な変数です。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"#グローバル変数greeting_globalの定義\\n\",\n    \"greeting_global = 'Hello'\\n\",\n    \"\\n\",\n    \"#グローバル変数greeting_globalの値を表示する関数greeting\\n\",\n    \"def greeting():\\n\",\n    \"    print(greeting_global)\\n\",\n    \"    \\n\",\n    \"greeting()\\n\",\n    \"\\n\",\n    \"#グローバル変数greeting_globalを参照\\n\",\n    \"greeting_global\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"グローバル変数と同じ名前の変数を関数内で定義すると、\\n\",\n    \"それは通常はグローバル変数とは異なる、関数内のみで利用可能な**ローカル変数**の定義として扱われます。\\n\",\n    \"グローバル変数と同じ名前の引数を用いる場合も同様です。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"#グローバル変数greeting_globalと同じ名前の変数に値を代入する関数greeting\\n\",\n    \"def greeting():\\n\",\n    \"    greeting_global = 'Bonjour'\\n\",\n    \"    print(greeting_global)\\n\",\n    \"\\n\",\n    \"greeting()\\n\",\n    \"\\n\",\n    \"#変数greeting_globalを参照\\n\",\n    \"greeting_global\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"しかし、グローバル変数と同名のローカル変数を定義することは、一般に注意が必要です。\\n\",\n    \"何故なら、ローカル変数としての定義を含む関数内では、同名のグローバル変数を参照できないからです。\\n\",\n    \"たとえば、次のコードは、`Hello` と `Bonjour` が順に印字することを期待するかもしれませんが、\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {\n    \"tags\": [\n     \"raises-exception\"\n    ]\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"def greeting():\\n\",\n    \"    print(greeting_global) # 最初の参照\\n\",\n    \"    greeting_global = 'Bonjour' # ローカル変数の定義\\n\",\n    \"    print(greeting_global)\\n\",\n    \"\\n\",\n    \"greeting()\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"最初の `greeting_global` の参照でエラーになります。\\n\",\n    \"これは、関数内に `greeting_global` の定義があると、\\n\",\n    \"その関数内どの場所でも `greeting_global` がローカル変数として参照されるためです。\\n\",\n    \"最初の参照時には、ローカル変数の `greeting_global` が未定義なので、エラーが生じます。\\n\",\n    \"\\n\",\n    \"このように、グローバル変数と同じ名前のローカル変数を使おうとするのは間違いの元です。\\n\",\n    \"グローバル変数と名前が衝突しないように、ローカル変数を定義しましょう。\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### ▲ global 宣言\\n\",\n    \"\\n\",\n    \"関数内ではグローバル変数が更新されないのが基本です。\\n\",\n    \"しかし、どうしても関数内でグローバル変数を更新したいときには、\\n\",\n    \"**`global`** 宣言を使って更新したいグローバル変数を指定します。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"#グローバル変数greeting_globalに値を代入する関数greeting\\n\",\n    \"def greeting():\\n\",\n    \"    global greeting_global\\n\",\n    \"    greeting_global = 'Bonjour'\\n\",\n    \"    print(greeting_global)\\n\",\n    \"\\n\",\n    \"greeting()\\n\",\n    \"\\n\",\n    \"##変数greeting_globalを参照\\n\",\n    \"greeting_global\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"`global` 宣言された変数名は、関数内で常にグローバル変数として参照されます。\\n\",\n    \"これを濫用すると間違いの元になるので、原則として利用しないようにしましょう。\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## ▲キーワード引数\\n\",\n    \"上記の一般的な引数（位置引数とも呼ばれます）では、\\n\",\n    \"事前に定義した引数の順番に従って、関数は引数を受け取る必要があります。\\n\",\n    \"\\n\",\n    \"キーワード付き引数（**キーワード引数**）を使うと、関数は引数の変数名とその値の組みを受け取ることができます。\\n\",\n    \"その際、引数は順不同で関数に渡すことができます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"#文字列と数値を引数として受け取る関数greeting\\n\",\n    \"def greeting(en, number, name):\\n\",\n    \"    print(en*number+','+name)\\n\",\n    \"\\n\",\n    \"#関数greetingに引数の変数名とその値の組みを渡して呼び出し\\n\",\n    \"greeting(en='Hello', name='Japan', number=2)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"位置引数とキーワード引数を合わせて使う場合は、最初に位置引数を指定する必要があります。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"#位置引数とキーワード引数を組み合わせた関数greetingの呼び出し\\n\",\n    \"greeting('Hello', name='Japan', number=2)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## ▲引数の初期値\\n\",\n    \"関数を呼び出す際に、引数が渡されない場合に、**初期値**を引数として渡すことができます。\\n\",\n    \"\\n\",\n    \"初期値のある引数に値を渡したら、関数はその引数の初期値の代わりに渡された値を受け取ります。\\n\",\n    \"\\n\",\n    \"初期値を持つ引数は、位置引数の後に指定する必要があります。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"#引数の初期値（引数の変数enに対する'Hello'）を持つ関数greeting\\n\",\n    \"def greeting(name, en='Hello'):\\n\",\n    \"    print(en+', '+name)\\n\",\n    \"    \\n\",\n    \"#引数の初期値を持つ関数greetingの呼び出し\\n\",\n    \"greeting('World')\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## ▲可変長引数\\n\",\n    \"仮引数の前に **`*`** を付けて関数を定義すると、複数の引数をタプルとして受け取ることができます。\\n\",\n    \"呼び出す側は、引数の個数を変えることができます。\\n\",\n    \"一般に、個数が可変の引数は**可変長引数**と呼ばれます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"#可変長の引数を受け取り、それらを表示する関数greeting\\n\",\n    \"def greeting(*args):\\n\",\n    \"    print(args)\\n\",\n    \"    \\n\",\n    \"#可変長の引数を受け取る関数greetingに複数の引数を渡して呼び出し\\n\",\n    \"greeting('Hello','Bonjour','Guten Tag')\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"リストやタプルの要素を可変長引数として関数に渡す場合は、**`*`** をリストやタプルの前につけて渡します。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"#リスト型オブジェクトgreeting_listを関数greetingに渡して呼び出し\\n\",\n    \"greeting_list = ['Hello','Bonjour','Guten Tag']\\n\",\n    \"greeting(*greeting_list)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## ▲辞書型の可変長引数\\n\",\n    \"仮引数の前に <strong>`**`</strong> を付けて関数を定義すると、複数のキーワード引数を辞書として受け取ることができます。辞書として受け取られる引数は、**辞書型の可変長引数**と呼ばれます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"#可変長のキーワード引数を受け取り、それらを表示する関数greeting\\n\",\n    \"def greeting(**kwargs):\\n\",\n    \"    print(kwargs)\\n\",\n    \"    \\n\",\n    \"#可変長のキーワード引数を受け取る関数greetingに複数の引数を渡して呼び出し\\n\",\n    \"greeting(en='Hello', fr='Bonjour', de='Guten Tag')\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"辞書の各キーと値を複数のキーワード引数として関数に渡す場合は、\\n\",\n    \"`**` をその辞書の前につけて渡します。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"#辞書型オブジェクトgreeting_dictを関数greetingに渡して呼び出し\\n\",\n    \"greeting_dict = {'en': 'Hello', 'fr': 'Bonjour', 'de': 'Guten Tag'}\\n\",\n    \"greeting(**greeting_dict)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## ▲引数の順番\\n\",\n    \"位置引数、初期値を持つ引数、可変長引数、辞書型の可変長引数は、同時に指定することができますが、\\n\",\n    \"その際、これらの順番で指定する必要があります。\\n\",\n    \"\\n\",\n    \"```Python\\n\",\n    \"def 関数名(位置引数, 初期値を持つ引数, 可変長引数, 辞書型の可変長引数)\\n\",\n    \"```\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"#位置引数、初期値を持つ引数、可変長引数、辞書型の可変長引数\\n\",\n    \"#それぞれを引数として受け取り、それらを表示する関数greeting\\n\",\n    \"def greeting(greet, en='Hello', *args, **kwargs):\\n\",\n    \"    print(greet)\\n\",\n    \"    print(en)\\n\",\n    \"    print(args)\\n\",\n    \"    print(kwargs)\\n\",\n    \"\\n\",\n    \"#可変長引数へ渡すリスト\\n\",\n    \"greeting_list = ['Bonjour']\\n\",\n    \"\\n\",\n    \"#辞書型の可変長引数へ渡す辞書\\n\",\n    \"greeting_dict = {'de': 'Guten Tag'}\\n\",\n    \"\\n\",\n    \"#関数greetingに引数を渡して呼び出し\\n\",\n    \"greeting('Hi', 'Hello', *greeting_list, **greeting_dict)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## ▲変数としての関数\\n\",\n    \"関数は変数でもあります。既存の変数と同じ名前の関数を定義すると、\\n\",\n    \"元の変数はその新たな関数を参照するものとして変更されます。\\n\",\n    \"一方、既存の関数と同じ名前の変数を定義すると、元の関数名の変数はその新たな変数を参照するものとして変更されます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"#グローバル変数greeting_globalの定義と参照\\n\",\n    \"greeting_global = 'Hello'\\n\",\n    \"type(greeting_global)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"#グローバル変数greeting_globalと同名の関数の定義\\n\",\n    \"#変数greeting_globalは関数を参照する\\n\",\n    \"def greeting_global():\\n\",\n    \"    print('This is the greeting_global function')\\n\",\n    \"    \\n\",\n    \"type(greeting_global)\"\n   ]\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"Python 3\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"name\": \"python\"\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 2\n}\n"
  },
  {
    "path": "colab/4/4-1.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"##================================================\\n\",\n    \"## このセルを最初に実行せよ---Run this cell first.\\n\",\n    \"##================================================\\n\",\n    \"!wget -P . https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/4/utf-8.txt\\n\",\n    \"!wget -P . https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/4/shift_jis.txt\\n\",\n    \"!wget -P . https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/4/test.txt\\n\",\n    \"!wget -P . https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/4/sample.txt\\n\",\n    \"!wget -P text https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/4/text/novel.txt\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# 4-1. ファイル入出力の基本\\n\",\n    \"ファイル入出力の基本について説明します。\\n\",\n    \"\\n\",\n    \"参考\\n\",\n    \"\\n\",\n    \"- https://docs.python.org/ja/3/tutorial/inputoutput.html#reading-and-writing-files\\n\",\n    \"\\n\",\n    \"## ファイルのオープン\\n\",\n    \"**ファイル**から文字列を読み込んだり、ファイルに書き込んだりするには、\\n\",\n    \"まず、**`open()`** という関数によってファイルを**オープン**する（開く）必要があります。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"f = open('sample.txt', 'r')\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"変数 `f` には、ファイルを読み書きするためのデータが入ります。\\n\",\n    \"これを**ファイルオブジェクト**と呼びます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"`'sample.txt'` はファイル名で、そのファイルの絶対パス名か、このノートブックからの相対パス名を指定します。\\n\",\n    \"\\n\",\n    \"ここでは、`sample.txt` という名前のファイルがこのノートブックと同じディレクトリにあることを想定しています。\\n\",\n    \"\\n\",\n    \"たとえば、`novel.txt` というファイルが、ノートブックの1段上のディレクトリ（このディレクトリが入っているディレクトリ）にあるならば、`'../novel.txt'` と指定します。\\n\",\n    \"ノートブックの1段上のディレクトリに置かれている `data` というディレクトリにあるならば、`'../data/novel.txt'` となります\\n\",\n    \"（4-3にもう少し詳しい解説があります）。\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"`'r'` はファイルをどのモードで開くかを指しており、`'r'`は**読み込みモード**を意味します。\\n\",\n    \"このモードで開いたファイルに書き込みすることはできません。\\n\",\n    \"\\n\",\n    \"よく使われるモードは、次の3種類です。\\n\",\n    \"\\n\",\n    \"引数 | モード\\n\",\n    \"---|:---\\n\",\n    \"`'r'` | 読み込み\\n\",\n    \"`'w'` | 書き込み\\n\",\n    \"`'a'` | 追記\\n\",\n    \"\\n\",\n    \"モードの引数がなかった場合は、`'r'` であると解釈されます。\\n\",\n    \"書き込みについては後でも説明します。\\n\",\n    \"\\n\",\n    \"モードの詳細は[公式ドキュメント](https://docs.python.org/ja/3/library/functions.html#open)を参照。\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## ファイルのクローズ\\n\",\n    \"\\n\",\n    \"ファイルオブジェクトを使い終わったら、原則として、**`close()`** メソッドを呼び出して、**クローズ**する（閉じる）必要があります。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"f.close()\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"`close()` を呼び出さずに放置すると、そのファイルがまだ使用中だと認識されてしまいます。\\n\",\n    \"これは、同じファイルを利用しようとする他のプログラムの働きを阻害します。（個室のトイレをイメージしてください。）\\n\",\n    \"\\n\",\n    \"`close()` の呼び出しは重要ですが、忘れがちなものでもあります。\\n\",\n    \"後述するwith文を使うのが安全です。\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 行の読み込み\\n\",\n    \"ファイルオブジェクトには、**`readline()`** というメソッドを適用することができます。\\n\",\n    \"ファイルから新たに1行を読んで文字列として返します。\\n\",\n    \"この「1行」というのは、正確には、ファイルの先頭もしくは改行文字の次の文字から、ファイルの終わりもしくは改行文字までの文字列です。\\n\",\n    \"1行は必ずしも改行文字で終わらないという点に注意して下さい。\\n\",\n    \"\\n\",\n    \"ファイルの終わりに来たとき、`readline()` は `''` という空文字列を返します。\\n\",\n    \"\\n\",\n    \"以下のようにして `readline()` を使ってファイルを行単位で読んでみましょう。\\n\",\n    \"\\n\",\n    \"ファイルを読み終わると空文字列が返ることを確認してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"f = open('sample.txt', 'r')\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"f.readline()\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"f.readline()\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"f.readline()\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"f.readline()\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"f.close()\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"`readline()` メソッドの呼び出しは、ファイルオブジェクトを消費します。\\n\",\n    \"改めて読み出したいときには、再度オープンして新しいオブジェクトを使ってください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 練習\\n\",\n    \"文字列 `name` をファイル名とするファイルの最後の行を文字列として返す関数 `last_line(name)` を定義してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def last_line(name):\\n\",\n    \"    ...\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"上のセルで解答を作成した後、以下のセルを実行し、実行結果が `True` になることを確認してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {\n    \"tags\": [\n     \"raises-exception\"\n    ]\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"print(last_line('sample.txt')==\\\"Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\\\\n\\\")\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## ファイル全体の読み込み\\n\",\n    \"\\n\",\n    \"ファイル全体を一括で読み込んで、1つの文字列を取得したいときには、**`read()`** メソッドを利用します。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"f = open('sample.txt', 'r')\\n\",\n    \"f.read()\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"一度 `read()` を呼ぶと、ファイルの終端に達するので、それ以降は空文字列を返します。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"f.read()\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"f.close()\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"`read()` メソッドは、内部的には `readline()` メソッドを呼んでいます。\\n\",\n    \"したがって、`read()` メソッドも同様にファイルオブジェクトを消費します。\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 練習\\n\",\n    \"\\n\",\n    \"文字列 `name` をファイル名とするファイルをオープンして、\\n\",\n    \"`read()` メソッドによってファイル全体を文字列として読み込み、\\n\",\n    \"その文字数を返す関数 `number_of_characters(name)` を作成してください。\\n\",\n    \"\\n\",\n    \"注意：`return` する前にファイルをクローズすることを忘れないようにしてください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def  number_of_characters(name):\\n\",\n    \"    ...\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"上のセルで解答を作成した後、以下のセルを実行し、実行結果が `True` になることを確認してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {\n    \"tags\": [\n     \"raises-exception\"\n    ]\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"print(number_of_characters('sample.txt') == 446)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 編集中のファイルの動作\\n\",\n    \"\\n\",\n    \"プログラムでファイルを開くと、そのプログラム内でそのファイルを閉じるまでは、他のプログラムでそのファイルを編集することはできません。 \\n\",\n    \"\\n\",\n    \"下のセルを実行した後で、Windowsならエクスプローラ、macOSならFinderで上のファイルを探して、削除してみてください。\\n\",\n    \"「ファイルを閉じてから再実行してください。（Windowsの場合）」といったメッセージが出て、削除ができないはずです。   \"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"f = open('test.txt', 'r')\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"下のセルを実行した後だと削除できます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"f.close()\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## ファイルに対するwith文\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"ファイルのオブジェクトは、with文に指定することができます。\\n\",\n    \"\\n\",\n    \"---\\n\",\n    \"```Python\\n\",\n    \"with ファイルオブジェクト as 変数:\\n\",\n    \"    ...\\n\",\n    \"\\n\",\n    \"```\\n\",\n    \"---\\n\",\n    \"\\n\",\n    \"**`with`** の次には、`open` によってファイルをオープンする式を書きます。\\n\",\n    \"\\n\",\n    \"また、**`as`** の次には、ファイルのオブジェクトが格納される変数を書きます。\\n\",\n    \"\\n\",\n    \"with文は処理後にファイルのクローズを自動的にやってくれますので、\\n\",\n    \"ファイルに対して `close()` を呼び出す必要がありません。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"with open('sample.txt', 'r') as f:\\n\",\n    \"    print(f.read())\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## ファイルへの書き込み\\n\",\n    \"\\n\",\n    \"ファイルへの書き込みは、`print` 関数を使って行えます。\\n\",\n    \"`file` 引数に書き込み先のファイルオブジェクトを指定します。\\n\",\n    \"`file` は3.3で説明されているキーワード引数と呼ばれる引数ですので、\\n\",\n    \"以下のように `file=...` という形で指定します。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"with open('print-test.txt', 'w') as f:\\n\",\n    \"    print('hello\\\\nworld', file=f)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"文字列の中の `\\\\n` は改行文字を表します。`\\\\n` は**エスケープシーケンス**（2-1に説明があります）の一種です。\\n\",\n    \"エスケープシーケンスには、この他に、復帰文字を表す `\\\\r` やタブを表す `\\\\t` などがあります。\\n\",\n    \"\\n\",\n    \"ファイルの読み書きのモードとしては、**書き込みモード**を意味する `'w'` を指定しています。既に同じ名前のファイルが存在する場合は上書きされます（以前の内容はなくなります）。ファイルがない場合は、新たに作成されます。\\n\",\n    \"\\n\",\n    \"`'a'` を指定すると、ファイルが存在する場合、既存の内容の後に追記されます。ファイルがない場合は、新たに作成されます。\\n\",\n    \"\\n\",\n    \"`print` 関数は、デフォルトで、与えられた文字列の末尾に改行文字を加えて印字します。\\n\",\n    \"末尾に加える文字は、`end` 引数で指定できます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"with open('print-test.txt', 'a') as f:\\n\",\n    \"    print('hello', 'world\\\\n', end='', file=f) # 改行文字を加えない\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"また、複数の印字対象を渡すと、デフォルトで、空白文字で区切って印字します。\\n\",\n    \"この区切り文字は、`sep` 引数で指定できます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"with open('print-test.txt', 'a') as f:\\n\",\n    \"    print('hello', 'world', sep=', ', file=f) # 'hello, world'が印字される\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"この他にも、ファイルオブジェクトには、より原始的な書き込み用メソッドが用意されています。\\n\",\n    \"**`write()`** メソッドは、与えられた1つの文字列を単に書き込みます。\\n\",\n    \"次に示すように、`write()` メソッドと `read()` メソッドは、対で使うことが良くあります。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"with open('sample.txt') as src, open('sample.txt.bak', 'w') as dst:\\n\",\n    \"    dst.write(src.read())\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"このコードは、`sample.txt` を `sample.txt.bak` にコピーします。\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 練習\\n\",\n    \"\\n\",\n    \"2つのファイル名 `infile`, `outfile` を引数として、`infile` の半角英文字を全て大文字にした結果を `outfile` に書き込む `file_upper(infile, outfile)` という関数を作成してください。   \\n\",\n    \"\\n\",\n    \"なお、半角英文字の小文字を大文字に変換するには `upper()` というメソッドが使えます。\\n\",\n    \"たとえば `line` という名前の変数に半角文字列が入っている場合、`line.upper()` とすれば大文字に変換した文字列を返します。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def file_upper(infile,outfile):\\n\",\n    \"    ...\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"上のセルで解答を作成した後、以下のセルを実行し、実行結果が `True` になることを確認してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {\n    \"tags\": [\n     \"raises-exception\"\n    ]\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"with open('print-test.txt', 'w') as f:\\n\",\n    \"    print('hello', 'world', file=f)\\n\",\n    \"file_upper('print-test.txt', 'print-test-upper.txt')\\n\",\n    \"with open('print-test-upper.txt', 'r') as f:\\n\",\n    \"    print(f.read() == 'HELLO WORLD\\\\n')\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## ファイルの読み書きにおける文字コード指定\\n\",\n    \"\\n\",\n    \"`open` でファイルを開くと、通常そのファイルをテキストモードで開きます（テキストモード以外にバイナリモードもあります）。\\n\",\n    \"\\n\",\n    \"テキストモードでファイルを開くときは、さらに特定の**文字コード**によってそのファイルを開こうとします。\\n\",\n    \"文字コードを指定しないと、デフォルトの文字コードでそのファイルを開こうとしますが、\\n\",\n    \"この文字コードがファイルを書き込む際に指定したものと異なる場合、エラーが出たり文字化けしてしまいます。\\n\",\n    \"\\n\",\n    \"デフォルトの文字コードは、WindowsはShift_JIS、macOSやLinuxはUTF-8になっていることが多いです。\\n\",\n    \"UTF-8で文字を記録されたファイルをWindowsで、ただ `open('utf-8.txt', 'w')` のように文字コードを指定せずに開くとエラーが出ます。\\n\",\n    \"同じく、Shift_JISで文字を記録されたファイルをmacOSで `open('shift_jis.txt', 'w')` として開くとエラーが出ます。\\n\",\n    \"\\n\",\n    \"なお、この教材の冒頭で `open('sample.txt', 'r')` と、文字コードを指定せずにファイルを開きましたがエラーは出ませんでしたね。\\n\",\n    \"これは、`sample.txt` では半角英数字しか使われておらず、半角英数字に関しては、Shift_JISもUTF-8も共通のルールでエンコードされているためです。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {\n    \"tags\": [\n     \"raises-exception\"\n    ]\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"# macOSならこちらでエラー\\n\",\n    \"with open('shift_jis.txt', 'r') as f:\\n\",\n    \"    print(f.read())\\n\",\n    \"\\n\",\n    \"# Windowsならこちらでエラー\\n\",\n    \"with open('utf-8.txt', 'r') as f:\\n\",\n    \"    print(f.read())\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"特に半角英数以外の文字を記録する際は文字コードを指定すること、またそのようなファイルを開くときは、記録するときに指定した文字コードでファイルを開いてください。\\n\",\n    \"\\n\",\n    \"文字コードは、`open` のキーワード引数として\\n\",\n    \"`encoding='utf-8'`（文字コードにUTF-8を指定する場合）のように指定することができます。 \\n\",\n    \"\\n\",\n    \"なお、日本語の文字コードには `UTF-8`, `Shift_JIS`, `EUC-JP` などがありますが、PythonではOSの種類に限らず、UTF-8という文字コードがよく使われます。本授業でもUTF-8を推奨します。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {\n    \"tags\": [\n     \"raises-exception\"\n    ]\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"# 文字コードを指定しないとmacOSならこちらでエラー\\n\",\n    \"with open('shift_jis.txt', 'r', encoding='shift_jis') as f:\\n\",\n    \"    print(f.read())\\n\",\n    \"\\n\",\n    \"# 文字コードを指定しないとWindowsならこちらでエラー\\n\",\n    \"with open('utf-8.txt', 'r', encoding='utf-8') as f:\\n\",\n    \"    print(f.read())\\n\",\n    \"\\n\",\n    \"# 文字コードを指定してファイルに書き込む場合\\n\",\n    \"with open('text.txt', 'w', encoding='utf-8') as f:\\n\",\n    \"    f.write('かきくけこ')\\n\",\n    \"with open('text.txt', 'r', encoding='utf-8') as f:\\n\",\n    \"    print(f.read())\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 改行文字の削除\\n\",\n    \"\\n\",\n    \"ファイルをテキストモードで開いて `read()` や `readline()` を呼び出すと、\\n\",\n    \"`str` 型の文字列として読み込まれます。\\n\",\n    \"\\n\",\n    \"文字列の末尾にある改行文字の削除には、2-1で紹介した `rstrip` メソッドが使えます。\\n\",\n    \"ただし、無引数で呼び出すと、改行文字以外の空白文字もまとめて削除されます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"'あいうえお \\\\n'.rstrip()\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"削除する空白文字を改行文字 `'\\\\n'` に限定したい場合には、 `rstrip` の引数に指定します。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"'あいうえお \\\\n\\\\n'.rstrip('\\\\n')\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"上の例から分かるように、末尾の改行文字をただ1つ削除したい場合には、 `rstrip('\\\\n')` は適していません。\\n\",\n    \"しかし、 `readline()` の返す文字列には、末尾に高々1つの `'\\\\n'` しか存在しないので、 `rstrip('\\\\n')` で問題ありません。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"with open('text/novel.txt', 'r', encoding='utf-8') as f:\\n\",\n    \"    while True:\\n\",\n    \"        line = f.readline()\\n\",\n    \"        if line == '':\\n\",\n    \"            break\\n\",\n    \"        print(line)\\n\",\n    \"\\n\",\n    \"print('------ 末尾の改行文字を削除すると以下のようになります-------')\\n\",\n    \"with open('text/novel.txt', 'r', encoding='utf-8') as f:\\n\",\n    \"    while True:\\n\",\n    \"        line = f.readline()\\n\",\n    \"        if line == '':\\n\",\n    \"            break\\n\",\n    \"        print(line.rstrip('\\\\n'))\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 練習の解答\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def  number_of_characters(name):\\n\",\n    \"    f = open(name, 'r')\\n\",\n    \"    s = f.read()\\n\",\n    \"    f.close()\\n\",\n    \"    return len(s)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def last_line(name):\\n\",\n    \"    last = ''\\n\",\n    \"    with open(name, 'r') as f:\\n\",\n    \"        while True:\\n\",\n    \"            line = f.readline()\\n\",\n    \"            if line == '':\\n\",\n    \"                return last\\n\",\n    \"            last = line\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def file_upper(infile,outfile):\\n\",\n    \"    with open(infile, 'r') as f:\\n\",\n    \"        with open(outfile, 'w') as g:\\n\",\n    \"            g.write(f.read().upper())\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"以下のように1つのwith文に複数の `open` を書くこともできます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def file_upper(infile,outfile):\\n\",\n    \"    with open(infile, 'r') as f, open(outfile, 'w') as g:\\n\",\n    \"        g.write(f.read().upper())\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": []\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"Python 3\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"name\": \"python\"\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 2\n}\n"
  },
  {
    "path": "colab/4/4-2.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"##================================================\\n\",\n    \"## このセルを最初に実行せよ---Run this cell first.\\n\",\n    \"##================================================\\n\",\n    \"!wget -P . https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/4/utf-8.txt\\n\",\n    \"!wget -P . https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/4/shift_jis.txt\\n\",\n    \"!wget -P . https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/4/test.txt\\n\",\n    \"!wget -P . https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/4/sample.txt\\n\",\n    \"!wget -P text https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/4/text/novel.txt\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# 4-2. イテラブルとイテレータ\\n\",\n    \"\\n\",\n    \"イテラブルとイテレータについて説明します。\\n\",\n    \"\\n\",\n    \"参考\\n\",\n    \"\\n\",\n    \"- https://docs.python.org/ja/3/tutorial/classes.html#iterators\\n\",\n    \"- https://docs.python.org/ja/3/glossary.html#term-iterable\\n\",\n    \"- https://docs.python.org/ja/3/library/stdtypes.html#typeiter\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## for文による繰り返しとファイルオブジェクト\\n\",\n    \"\\n\",\n    \"ファイルオブジェクトは、for文の `in` の後に指定することができます。\\n\",\n    \"このとき、ファイルから各行の文字列（改行文字を含む）を順次取り出します。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"lines = []\\n\",\n    \"with open('sample.txt', 'r') as f:\\n\",\n    \"    for line in f:\\n\",\n    \"        lines.append(line)\\n\",\n    \"lines\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"for文による行の取り出しは、`readline` メソッドと同様に、ファイルオブジェクトを消費します。\\n\",\n    \"\\n\",\n    \"ファイルオブジェクト `f` をfor文で処理をすると、`f` が終端に到達するまで繰り返されます。\\n\",\n    \"したがって、再度 `f` をfor文に与えても何も実行されません。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"with open('sample.txt', 'r') as f:\\n\",\n    \"    print('---- 最初 ----')\\n\",\n    \"    for line in f:\\n\",\n    \"        print(line)\\n\",\n    \"    print('---- もう一度 ----')\\n\",\n    \"    for line in f:\\n\",\n    \"        print(line)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"ファイルをfor文によって二度読みたい場合は、\\n\",\n    \"もう一度ファイルをオープンして、ファイルのオブジェクトを新たに生成してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### 練習\\n\",\n    \"文字列 `name` をファイル名とするファイルの最後の行を文字列として返す関数 `last_line(name)` を、\\n\",\n    \"ファイルオブジェクトに対するfor文を用いて定義してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def last_line(name):\\n\",\n    \"    ...\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"定義ができたら、次のセルを実行して、エラーがでないことを確認してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {\n    \"tags\": [\n     \"raises-exception\"\n    ]\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"assert last_line('sample.txt') == 'Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\\\\n'\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## for文とイテラブルとイテレータ\\n\",\n    \"\\n\",\n    \"さて、[3-2](../3/3-2.ipynb)でも示したように、for文は、ファイルオブジェクトを含む様々なオブジェクトに対して繰り返す処理を記述できます\\n\",\n    \"（[1-3](../1/1-3.ipynb)で説明があったように、Pythonにおける値はオブジェクトと総称されます。） \\n\",\n    \"\\n\",\n    \"for文によって繰り返すことができるオブジェクトのことを総称して、**イテラブル** (iterable) と呼びます。\\n\",\n    \"\\n\",\n    \"for文が、様々なデータ型をイテラブルとして統一的に扱えるのは、繰り返して取り出す操作を表現する**イテレータ** (iterator) を経由するからです。\\n\",\n    \"\\n\",\n    \"iterateは繰り返すという意味なので、itaratorは繰り返すもの（反復子とも呼ばれる）、iterableは繰り返すことができるもの、という意味です。\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## `iter`\\n\",\n    \"\\n\",\n    \"組み込み関数 **`iter`** は、イテラブルからイテレータを作ります。たとえば、\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"it = iter([0,1,2])\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"この `it` は、`0` `1` `2` を順に取り出すイテレータです。\\n\",\n    \"\\n\",\n    \"このとき、`iter` に渡されるオブジェクトの種類に応じて、適切なイテレータが構成されます。\\n\",\n    \"この仕組みによって、様々なデータ型を統一的に扱えるわけです。\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## `next`\\n\",\n    \"\\n\",\n    \"さて、`iter` が返したイテレータは、どのように使うのでしょうか。\\n\",\n    \"\\n\",\n    \"組み込み関数 **`next`** は、イテレータに対して繰り返しを1回分先に進める操作を与えます。具体例を見ましょう。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"it = iter([0,1,2])\\n\",\n    \"next(it)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"next(it)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"next(it)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"`next(it)` を呼び出す毎に、`it` から順に要素が取り出されています。\\n\",\n    \"\\n\",\n    \"与えられたイテレータが繰り返しの終端に到達していたときには、`StopIteration` という例外（処理を緊急停止させる割り込み）が発生します。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"next(it)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## for文の仕組み\\n\",\n    \"\\n\",\n    \"for文は、実は `iter` `next` `StopIteration` を使ったwhile文の形で表現できます。具体的には、\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"for x in [0,1,2]:\\n\",\n    \"    print(x)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"このfor文は、次のwhile文と等価です。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {\n    \"tags\": []\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"try:\\n\",\n    \"    it = iter([0,1,2])\\n\",\n    \"    while True:\\n\",\n    \"        x = next(it)\\n\",\n    \"        print(x)\\n\",\n    \"except StopIteration:\\n\",\n    \"    pass\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"このtry-except文は、発生した例外を捉えて、適切に処理するための構文です。\\n\",\n    \"ここでは、発生した `StopIteration` を捉えて、何もせずに（`pass`）次に処理を進めるという意味になります。\\n\",\n    \"結果として、コードセルの実行が成功裡に完了しています。\\n\",\n    \"（例外とtry-except文の詳細は、[公式チュートリアル](https://docs.python.org/ja/3/tutorial/errors.html)を参照してください。）\\n\",\n    \"\\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {\n    \"tags\": []\n   },\n   \"source\": [\n    \"## イテレータは特殊なイテラブル\\n\",\n    \"\\n\",\n    \"イテレータ自身も実はイテラブルです。したがって、イテレータをfor文で繰り返すことができます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"it = iter([0,1,2])\\n\",\n    \"for x in it:\\n\",\n    \"    print(x)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"しかし、単なるイテラブルではありません。1つのfor文で使い切りのイテラブルです。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"for x in it:\\n\",\n    \"    print('これは実行されない')\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"これは、イテレータ `it` に対して `iter` を適用した時に、`it` 自体が返されるという仕組みによって実現されています。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"it = iter([0,1,2])\\n\",\n    \"it is iter(it)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"この **`is`** は、[2-2](../2/2-2.ipynb)に説明がありますが、その両辺が同一オブジェクトかどうかを調べる演算子です。\\n\",\n    \"\\n\",\n    \"最初のfor文の繰り返しによって終端に到達したイテレータ `it` は、その後の `next(it)` において `StopIteration` を発生させ続けます。\\n\",\n    \"したがって、後続するfor文では、繰り返し処理に入ることなく即座に終了するわけです。\\n\",\n    \"上に示したwhile文の形で考えると、わかりやすいでしょう。\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### 練習\\n\",\n    \"\\n\",\n    \"リストをもらって、そのイテレータを作り、最初の要素だけ取り出した後、\\n\",\n    \"そのイテレータを返す関数 `but_first(ls)` を定義してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def but_first(ls):\\n\",\n    \"    ...\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"定義ができたら、次のセルを実行して、エラーがでないことを確認してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {\n    \"tags\": [\n     \"raises-exception\"\n    ]\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"it = but_first([0,2,4,6,8])\\n\",\n    \"assert type(it) == type(iter([])) # type(it) では it は消費されない\\n\",\n    \"assert list(it) == [2,4,6,8]\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## ファイルオブジェクトはイテレータ\\n\",\n    \"\\n\",\n    \"ファイルオブジェクトは `readline` メソッドによって、一行ずつ消費しながら、行の文字列を取り出せます。\\n\",\n    \"そして、for文で末尾まで繰り返すと、for文で繰り返すことはもうできません。\\n\",\n    \"\\n\",\n    \"ここまで読んだ方は既に気付いているでしょうが、ファイルオブジェクトはイテレータです。\\n\",\n    \"\\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"f = open('sample.txt', 'r')\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"next(f)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"next(f)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"next(f)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {\n    \"tags\": [\n     \"raises-exception\"\n    ]\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"next(f)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"ファイルオブジェクト `f` に対する `f.readline()` と `next(f)` の振舞いは、`f` が終端に到達していないときは同一です。\\n\",\n    \"`f` が終端にあるときは、`f.readline()` は `''` を返しますが、`next(f)` は `StopIteration` を発生させます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"f.close()\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## イテラブルはイテレータではない\\n\",\n    \"\\n\",\n    \"イテラブルは一般に、イテレータではありません。\\n\",\n    \"具体的には、リスト・タプル・文字列・辞書はイテラブルですが、イテレータではありません。\\n\",\n    \"[3-2](../3/3-2.ipynb)で紹介した `range` 関数の返す range オブジェクトも、イテラブルですがイテレータではありません。\\n\",\n    \"\\n\",\n    \"したがって、`next` が適用可能ではなく、`iter` の適用によって毎回別のイテレータが返されます。\\n\",\n    \"つまり、これまで見てきたように、複数のfor文で何度も繰り返す処理が実行できます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {\n    \"tags\": []\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"xs = [1,2,3]\\n\",\n    \"for x in xs:\\n\",\n    \"    print(x)\\n\",\n    \"for x in xs:\\n\",\n    \"    print(x)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"r = range(3)\\n\",\n    \"for x in r:\\n\",\n    \"    print(x)\\n\",\n    \"for x in r:\\n\",\n    \"    print(x)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## イテレータを返す `enumerate`\\n\",\n    \"\\n\",\n    \"[3-2](../3/3-2.ipynb)で紹介した組み込み関数の **`enumerate`** は、イテレータを返します。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"it = enumerate([10,20,30])\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"next(it)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"for x in it:\\n\",\n    \"    print(x)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"for i, c in enumerate('ACDB'):\\n\",\n    \"    print(i, '番目の文字 =', c)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"一方、`enumerate` はイテラブルを引数として受け取ります。上の例で、リストも文字列もイテラブルです。\\n\",\n    \"\\n\",\n    \"イテレータもイテラブルなので、`enumerate` の引数になり得ます。\\n\",\n    \"したがって、ファイルオブジェクトも、次のように `enumerate` に与えることができます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"with open('sample.txt', 'r') as f:\\n\",\n    \"    for i, s in enumerate(f):\\n\",\n    \"        print(i, '行目:')\\n\",\n    \"        print(s)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"変数 `i` は `0` から順に増えていきます。変数 `s` には各行の文字列が代入されます。\\n\",\n    \"`i` は `0` から始まりますが、各行の行番号と考えられます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## ▲イテラブルとイテレータの定義\\n\",\n    \"\\n\",\n    \"イテラブルとイテレータの形式的な定義をまとめます。\\n\",\n    \"\\n\",\n    \"* イテラブル：\\n\",\n    \"  - `iter` を適用可能。 **`__iter__`** メソッドを持つ。\\n\",\n    \"* イテレータ：\\n\",\n    \"  - `next` を適用可能。 **`__next__`** メソッドを持つ。\\n\",\n    \"  - `iter` を適用したとき、引数のオブジェクトをそのまま返す。\\n\",\n    \" \\n\",\n    \"`iter(x)` は `x.__iter__()` と等価なので、`iter` を適用可能であることと、`__iter__` メソッドを持つことは同義です。\\n\",\n    \"同様に、`next(x)` は `x.__next__()` と等価なので、 `next` を適用可能であることと、`__next__` メソッドを持つことは同義です。\\n\",\n    \"\\n\",\n    \"`__iter__` メソッドと `__next__` メソッドについては、[6-3](../6/6-3.ipynb)で改めて説明します。\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 練習の解答\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def last_line(name):\\n\",\n    \"    with open(name, 'r', encoding='utf-8') as f:\\n\",\n    \"        for line in f:\\n\",\n    \"            pass\\n\",\n    \"    return line\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def last_line(name):\\n\",\n    \"    f = open(name, 'r', encoding='utf-8')\\n\",\n    \"    for line in f:\\n\",\n    \"        pass\\n\",\n    \"    f.close()\\n\",\n    \"    return line\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def but_first(ls):\\n\",\n    \"    it = iter(ls)\\n\",\n    \"    next(it)\\n\",\n    \"    return it\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": []\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"Python 3\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"name\": \"python\"\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 2\n}\n"
  },
  {
    "path": "colab/4/4-3.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"##================================================\\n\",\n    \"## このセルを最初に実行せよ---Run this cell first.\\n\",\n    \"##================================================\\n\",\n    \"!wget -P . https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/4/utf-8.txt\\n\",\n    \"!wget -P . https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/4/shift_jis.txt\\n\",\n    \"!wget -P . https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/4/test.txt\\n\",\n    \"!wget -P . https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/4/sample.txt\\n\",\n    \"!wget -P text https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/4/text/novel.txt\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# 4-3. ディレクトリと木構造\\n\",\n    \"\\n\",\n    \"ディレクトリと木構造について説明します。\\n\",\n    \"この内容はPythonというよりも、Windows・macOS・Linuxなどの一般的なOSに共通する概念です。\\n\",\n    \"なお、Colaboratoryは、仮想マシン上のLinuxの上で動作しています。\\n\",\n    \"\\n\",\n    \"## ディレクトリと階層構造\\n\",\n    \"\\n\",\n    \"OS上でのファイルは一般に、階層的に管理されています。\\n\",\n    \"ファイルが置かれる場所のことを、**ディレクトリ**と呼びます。\\n\",\n    \"ファイルをまとめることから、**フォルダ**とも呼ばれます。\\n\",\n    \"\\n\",\n    \"[zip版の教材](https://utokyo-ipp.github.io/IPP_textbook.zip)を、`IPP_textbook` ディレクトリに展開すると、次のような階層構造になります。\\n\",\n    \"\\n\",\n    \"```\\n\",\n    \"IPP_textbook\\n\",\n    \"├── 1\\n\",\n    \"│   ├── 1-0.ipynb\\n\",\n    \"│   ├── 1-1.ipynb\\n\",\n    \"│   ├── 1-2.ipynb\\n\",\n    \"│   ├── 1-3.ipynb\\n\",\n    \"│   ├── 1-4.ipynb\\n\",\n    \"│   ├── colab1.png\\n\",\n    \"│   ├── colab2.png\\n\",\n    \"│   ├── colab3.png\\n\",\n    \"│   ├── colab4.png\\n\",\n    \"│   └── colaboratory.png\\n\",\n    \"├── 2\\n\",\n    \"│   ├── 2-1.ipynb\\n\",\n    \"│   ├── 2-2.ipynb\\n\",\n    \"│   └── 2-3.ipynb\\n\",\n    \"├── 3\\n\",\n    \"│   ├── 3-1.ipynb\\n\",\n    \"│   ├── 3-2.ipynb\\n\",\n    \"│   └── 3-3.ipynb\\n\",\n    \"├── 4\\n\",\n    \"│   ├── 4-1.ipynb\\n\",\n    \"│   ├── 4-2.ipynb\\n\",\n    \"│   ├── 4-3.ipynb\\n\",\n    \"│   ├── sample.txt\\n\",\n    \"│   ├── shift_jis.txt\\n\",\n    \"│   ├── test.txt\\n\",\n    \"│   ├── text\\n\",\n    \"│   │   └── novel.txt\\n\",\n    \"│   └── utf-8.txt\\n\",\n    \"├── 5\\n\",\n    \"│   ├── 5-1.ipynb\\n\",\n    \"│   ├── 5-2.ipynb\\n\",\n    \"│   ├── 5-3.ipynb\\n\",\n    \"│   ├── factorial.py\\n\",\n    \"│   └── fig\\n\",\n    \"│       ├── py_conv_1.png\\n\",\n    \"│       ├── py_conv_2.png\\n\",\n    \"│       ├── py_open_1.png\\n\",\n    \"│       └── py_open_2.png\\n\",\n    \"├── 6\\n\",\n    \"│   ├── 6-1.ipynb\\n\",\n    \"│   ├── 6-2.ipynb\\n\",\n    \"│   ├── 6-3.ipynb\\n\",\n    \"│   └── jugemu.txt\\n\",\n    \"├── 7\\n\",\n    \"│   ├── 7-1.ipynb\\n\",\n    \"│   ├── 7-2.ipynb\\n\",\n    \"│   └── iris.csv\\n\",\n    \"├── appendix\\n\",\n    \"│   ├── 1-jupyter-notebook.ipynb\\n\",\n    \"│   ├── 2-set.ipynb\\n\",\n    \"│   ├── 3-recursion.ipynb\\n\",\n    \"│   ├── 3-visualization.ipynb\\n\",\n    \"│   ├── 4-csv.ipynb\\n\",\n    \"│   ├── 5-bokeh.ipynb\\n\",\n    \"│   ├── 5-command.ipynb\\n\",\n    \"│   ├── 5-matplotlib.ipynb\\n\",\n    \"│   ├── 5-re.ipynb\\n\",\n    \"│   ├── argsprint.py\\n\",\n    \"│   ├── B1S.xml\\n\",\n    \"│   ├── fig\\n\",\n    \"│   │   ├── argsprint.png\\n\",\n    \"│   │   ├── console_in_browser.png\\n\",\n    \"│   │   ├── py_conv_1.png\\n\",\n    \"│   │   ├── py_conv_2.png\\n\",\n    \"│   │   ├── py_open_1.png\\n\",\n    \"│   │   ├── py_open_2.png\\n\",\n    \"│   │   ├── sample_py_browser.png\\n\",\n    \"│   │   ├── sample_py_mac_1.png\\n\",\n    \"│   │   ├── sample_py_mac_2.png\\n\",\n    \"│   │   ├── sample_py_mac_3.png\\n\",\n    \"│   │   ├── sample_py_win_1.png\\n\",\n    \"│   │   ├── sample_py_win2_1.png\\n\",\n    \"│   │   ├── sample_py_win2_2.png\\n\",\n    \"│   │   ├── sample_py_win2_3.png\\n\",\n    \"│   │   ├── sample_py_win_2.png\\n\",\n    \"│   │   ├── sample_py_win_3.png\\n\",\n    \"│   │   └── terminal_in_menu.png\\n\",\n    \"│   ├── sample.py\\n\",\n    \"│   ├── small.csv\\n\",\n    \"│   ├── text-sample.txt\\n\",\n    \"│   ├── tokyo-july-temps.csv\\n\",\n    \"│   └── tokyo-temps.csv\\n\",\n    \"├── index.ipynb\\n\",\n    \"├── index_of_terms.ipynb\\n\",\n    \"└── LICENSE\\n\",\n    \"```\\n\",\n    \"\\n\",\n    \"ここで、末端にあるものがファイルであり、末端以外にあるものがディレクトリ（フォルダ）です。\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## カレントワーキングディレクトリ\\n\",\n    \"\\n\",\n    \"プログラムは、必ずどこかのディレクトリで動いています。\\n\",\n    \"このプログラムが動作しているディレクトリのことを、**ワーキングディレクトリ**（もしくは**作業ディレクトリ**）と呼びます。\\n\",\n    \"通例、特にWindowsやmacOSでは、何らかのファイルをクリックしてアプリケーションが起動したとき、その開いたファイルのある場所がワーキングディレクトリになります。\\n\",\n    \"\\n\",\n    \"ワーキングディレクトリは、プログラムの実行中に変更できます。\\n\",\n    \"Python上では [**`os.chdir`**](https://docs.python.org/ja/3/library/os.html#os.chdir) を使うことで変更できます。\\n\",\n    \"\\n\",\n    \"プログラム実行中の現在のワーキングディレクトリのことを、**カレントワーキングディレクトリ**、もしくは単に**カレントディレクトリ**と呼びます。\\n\",\n    \"カレントディレクトリは頻繁に利用するので、 `.` という特別な記号によって表現できます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## パス\\n\",\n    \"\\n\",\n    \"カレントディレクトリに置かれているファイルは、ファイル名を指定するだけで開くことができます。\\n\",\n    \"だから、4-1で示したように、カレントディレクトリにある `sample.txt` は、ファイル名を指定するだけで開けます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"open('sample.txt', 'r', encoding='utf-8')\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"一方、それ以外の場所にあるファイルについては、そのファイルのディレクトリまで含めて指定しなければ、開くことができません。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"open('novel.txt', 'r')\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"カレントディレクトリに存在しない `novel.txt` を開こうとしたので `FileNotFoundError` が生じました。\\n\",\n    \"`novel.txt` は、`text` というディレクトリの中にあるので、それ明示するために、`/` で区切って、次のように指定します。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"open('text/novel.txt', 'r', encoding='utf-8')\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"実は、カレントディレクトリにあるファイルが、ファイル名の指定だけで開けるのは、自動的に `./` が補われていたからでした。\\n\",\n    \"\\n\",\n    \"`open` の第1引数に渡す文字列ような、ファイルやディレクトリの場所を指定する表記を、**パス**と呼びます。\\n\",\n    \"パス（経路）と呼ぶのは、`/` 区切りで1歩ずつ次に進むディレクトリを指定することに由来しています。\\n\",\n    \"\\n\",\n    \"パスを記述する際、ルートディレクトリは `/` で表されます。\\n\",\n    \"ルートディレクトリから始まるパスを、**絶対パス**と呼びます。\\n\",\n    \"一方、カレントディレクトリからのパスを、**相対パス**と呼びます。\\n\",\n    \"パス表記において `/` 以外から始まる場合は、自動的に先頭に `./` が補われて、相対パスとして扱われます。\\n\",\n    \"\\n\",\n    \"さて、`./text/` というパス表記は、カレントディレクトリにある一段下の `text` ディレクトリに進むことに対応します。\\n\",\n    \"これに、一段上のディレクトリを表す `..` を組み合わせることで、より柔軟にパスを指定できます。\\n\",\n    \"\\n\",\n    \"たとえば、`./text/../` は `./` と同じディレクトリを指します。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"with open('sample.txt', 'r', encoding='utf-8') as f:\\n\",\n    \"    print(f.read(), end='')\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"with open('./text/../sample.txt', 'r', encoding='utf-8') as f:\\n\",\n    \"    print(f.read(), end='')\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"また、カレントディレクトリを `./text/` に変化させた後に、`sample.txt` を開くときには、`../sample.txt` と指定することができます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"import os\\n\",\n    \"os.chdir('./text') # 1段下の text に行く\\n\",\n    \"with open('../sample.txt', 'r', encoding='utf-8') as f:\\n\",\n    \"    print(f.read())\\n\",\n    \"os.chdir('..') # 元のディレクトリに戻る\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 木構造\\n\",\n    \"\\n\",\n    \"ディレクトリの階層構造は、木を逆さにしたような形になっています。\\n\",\n    \"このことから、**木構造**もしくは単に**木**（tree）と呼ばれます。\\n\",\n    \"\\n\",\n    \"木構造の観点で、最上位の階層は**根**（root）と呼ばれ、末端は**葉**（leaf）と呼ばれます。\\n\",\n    \"木構造を成す要素（ここではファイルやディレクトリ）は，一般に**ノード**（node）と呼ばれます。\\n\",\n    \"\\n\",\n    \"階層構造における包含関係は、木構造では親子関係と呼ばれます。\\n\",\n    \"たとえば、教材のディレクトリ階層においては、ディレクトリ `IPP_textbook` の中に、ディレクトリ `1` とファイル `LICENSE` が含まれています。\\n\",\n    \"木構造の観点で、`IPP_textbook` は `1` と `LICENSE` の**親**（parent）と呼ばれ、逆に `1` と `LICENSE` は `IPP_textbook` の**子**（child）と呼ばれます。\\n\",\n    \"また、`1` と `LICENSE` のような共通の親を持つノード集合は、**兄弟**（sibling）と呼ばれます。\\n\",\n    \"親子関係の推移閉包として、**祖先**（ancestor）や**子孫**（descendant）も定義されます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## データ表現としての木構造\\n\",\n    \"\\n\",\n    \"OSのディレクトリ構造に限らず、木構造はデータ表現として広く用いられます。\\n\",\n    \"Pythonにおいても、入れ子のデータ構造は、木構造と見做せます。\\n\",\n    \"\\n\",\n    \"たとえば、教材のディレクトリ構造を、辞書の入れ子で表現すると、次のようになります．\\n\",\n    \"\\n\",\n    \"```python\\n\",\n    \"IPP_textbook = {\\n\",\n    \"  '1': {'1-0.ipynb': Data('1-0.ipynb'), \\n\",\n    \"        ..., \\n\",\n    \"        'colaboratory.png', Data('colaboratory.png')},\\n\",\n    \"  '2': {'2-1.ipynb': Data('2-1.ipynb'),\\n\",\n    \"        '2-1.ipynb': Data('2-2.ipynb'),\\n\",\n    \"        '2-3.ipynb': Data('2-3.ipynb')},\\n\",\n    \"  ...\\n\",\n    \"  '5': {'5-1.ipynb': Data('5-1.ipynb'),\\n\",\n    \"        '5-1.ipynb': Data('5-2.ipynb'),\\n\",\n    \"        '5-3.ipynb': Data('5-3.ipynb'),\\n\",\n    \"        'factorial.py', Data('factorial.py'),\\n\",\n    \"        'fig': {'py_conv_1.png': Data('py_conv_1.png'),\\n\",\n    \"                'py_conv_2.png': Data('py_conv_2.png'),\\n\",\n    \"                'py_open_1.png': Data('py_open_1.png'),\\n\",\n    \"                'py_open_2.png': Data('py_open_2.png')}\\n\",\n    \"       },\\n\",\n    \"   ...\\n\",\n    \"}\\n\",\n    \"```\\n\",\n    \"\\n\",\n    \"ここで `Data(...)` は、`...` のファイルデータを意味しています。\\n\",\n    \"\\n\",\n    \"このデータ表現では、パス `IPP_textbook/2/2-2.ipynb` へのアクセスが、`IPP_textbook['2']['2-2.ipynb']` と表現されます。\\n\",\n    \"\\n\",\n    \"データを階層的に管理する際は、データ全体を木構造として捉えて表現することを考えましょう。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": []\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"Python 3\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"name\": \"python\"\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 2\n}\n"
  },
  {
    "path": "colab/4/sample.txt",
    "content": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\nDuis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\nExcepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\n"
  },
  {
    "path": "colab/4/shift_jis.txt",
    "content": ""
  },
  {
    "path": "colab/4/test.txt",
    "content": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\nDuis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\nExcepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\n"
  },
  {
    "path": "colab/4/text/novel.txt",
    "content": "二人の若い紳士が、すつかりイギリスの兵隊のかたちをして、ぴか／＼する鉄砲をかついで、白熊のやうな犬を二疋つれて、だいぶ山奥の、木の葉のかさ／＼したとこを、こんなことを云ひながら、あるいてをりました。\n「ぜんたい、こゝらの山は怪しからんね。鳥も獣も一疋も居やがらん。なんでも構はないから、早くタンタアーンと、やつて見たいもんだなあ。」\n「鹿の黄いろな横つ腹なんぞに、二三発お見舞まうしたら、ずゐぶん痛快だらうねえ。くる／＼まはつて、それからどたつと倒れるだらうねえ。」\n"
  },
  {
    "path": "colab/4/utf-8.txt",
    "content": "あいうえお"
  },
  {
    "path": "colab/5/5-1.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"##================================================\\n\",\n    \"## このセルを最初に実行せよ---Run this cell first.\\n\",\n    \"##================================================\\n\",\n    \"!wget -P . https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/5/factorial.py\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/5/fig/py_open_2.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/5/fig/py_open_1.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/5/fig/py_conv_1.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/5/fig/py_conv_2.png\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# 5-1. モジュールの使い方\\n\",\n    \"モジュールの使い方について説明します。\\n\",\n    \"\\n\",\n    \"参考\\n\",\n    \"\\n\",\n    \"- https://docs.python.org/ja/3/reference/import.html\\n\",\n    \"- https://docs.python.org/ja/3/tutorial/modules.html\\n\",\n    \"- https://docs.python.org/ja/3/library/math.html\\n\",\n    \"\\n\",\n    \"## モジュールのインポート\\n\",\n    \"\\n\",\n    \"Pythonでは特別な関数や値をまとめたもの（これを**モジュール**といいます）を使うために、**`import`** という文を使います（第1回 (1-1) においても説明しました）。具体的には次のように記述します。\\n\",\n    \"\\n\",\n    \"---\\n\",\n    \"```Python\\n\",\n    \"import モジュール名\\n\",\n    \"```\\n\",\n    \"---\\n\",\n    \"\\n\",\n    \"たとえば、数学関係の機能をまとめた `math` というモジュールがあります。これらの関数や値を使いたいときは、以下のようにして `math` モジュールを `import` で**インポート**します。そうすると、`math.関数名` という形で関数を用いることができます。 \"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"import math# importは大抵セルの一番上に記述します\\n\",\n    \"print(math.sqrt(2)) # sqrt は平方根を計算する関数\\n\",\n    \"print(math.pi) # πの値\\n\",\n    \"print(math.sin(math.pi/4)) # sin関数 \\n\",\n    \"print(math.cos(0)) # cos関数 \\n\",\n    \"print(math.log(32,2)) # 2を底とする32の対数（texで記述すると、$\\\\log_2 32$）\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"上の例では、`math` モジュールの中の関数や値を使用しています。\\n\",\n    \"\\n\",\n    \"注意しなければならないのは、モジュールの中の関数を使う場合には、\\n\",\n    \"\\n\",\n    \"---\\n\",\n    \"```Python\\n\",\n    \"モジュール名.モジュールの中の関数名\\n\",\n    \"```\\n\",\n    \"---\\n\",\n    \"\\n\",\n    \"とする必要があるということです。\\n\",\n    \"\\n\",\n    \"モジュールの中の値（たとえば `math.pi`）も同様です。\\n\",\n    \"\\n\",\n    \"なお、複数の関数名をコンマ `,` で区切って並べて同時にインポートすることもできます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## `from`\\n\",\n    \"\\n\",\n    \"モジュール内で定義されている関数を「モジュールの中の関数名」のようにして、「モジュール名.」を付けずにそのままの名前で、モジュールの読み込み元のプログラムで使いたい場合には、**`from`** を以下のように書くことで利用することができます。\\n\",\n    \"\\n\",\n    \"---\\n\",\n    \"```Python\\n\",\n    \"from モジュール名 import モジュールの中の関数名\\n\",\n    \"```\\n\",\n    \"---\\n\",\n    \"\\n\",\n    \"たとえば、次のようになります。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"from math import sqrt\\n\",\n    \"print(sqrt(2)) # sqrt は平方根を計算する関数 \\n\",\n    \"from math import pi\\n\",\n    \"print(pi) # πの値\\n\",\n    \"from math import sin\\n\",\n    \"print(sin(math.pi/4)) # sin関数 \\n\",\n    \"from math import cos\\n\",\n    \"print(cos(0)) # cos関数 \\n\",\n    \"from math import log\\n\",\n    \"print(log(32,2)) # 2を底とする32の対数（texで記述すると、$\\\\log_2 32$）\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"この方法では、関数ごとに `from` を用いてインポートする必要があります。\\n\",\n    \"\\n\",\n    \"なお、関数だけではなく、グローバル変数や後に学習するクラスも、\\n\",\n    \"このようにしてインポートすることができます。\\n\",\n    \"\\n\",\n    \"別の方法として、**ワイルドカード** **`*`** を利用する方法もあります。\\n\",\n    \"\\n\",\n    \"---\\n\",\n    \"```Python\\n\",\n    \"from math import *\\n\",\n    \"```\\n\",\n    \"---\\n\",\n    \"\\n\",\n    \"この方法ではアンダースコア `_` で始まるものを除いた全ての名前が読み込まれるため、明示的に名前を指定する必要はありません。\\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"from math import *\\n\",\n    \"print(factorial(5)) # 5 の階乗 # import mathを使う場合、math.factorial(5)\\n\",\n    \"print(floor(2.31)) # 2.31以下の最大の整数  # import mathを使う場合、math.floor(2.31)\\n\",\n    \"print(e) # ネイピア数 # import mathを使う場合、math.e\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"ただしこの方法は推奨されていません。理由は読み込んだモジュール内の未知の名前とプログラム内の名前が衝突する可能性があるためです。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"pi = 'パイ' # piという変数に文字列「パイ」を代入する\\n\",\n    \"print(pi) \\n\",\n    \"from math import *\\n\",\n    \"print(pi) # mathモジュールのpiの値で上書きされる（衝突）\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## `as`\\n\",\n    \"\\n\",\n    \"モジュール名が長すぎるなどの理由から別の名前としたい場合は、**`as`** を利用する方法もあります。\\n\",\n    \"たとえば、5-3において学習するNumPyというライブラリは `numpy` モジュールとして提供されていますが、\\n\",\n    \"次のように、 `numpy` を `np` という略称で使うことがあります。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"import numpy\\n\",\n    \"print(numpy.ones((3, 5))) # 3×5の行列を表示\\n\",\n    \"import numpy as np\\n\",\n    \"print(np.ones((3, 5))) # np という短い名称で同じ関数を利用する\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"個々の関数ごとに別の名前を付けることもできます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"import math\\n\",\n    \"print(math.factorial(5)) # 階乗を求める関数factorial # 5の階乗\\n\",\n    \"from math import factorial as fact # fact という名前でmath.factorialを使用したい\\n\",\n    \"print(fact(5))\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 練習\\n\",\n    \"第1回では、数学関数を以下のようにインポートし、`math.sqrt()` のようにして、数学関数や数学関係の変数を利用していました。\\n\",\n    \"\\n\",\n    \"---\\n\",\n    \"```Python\\n\",\n    \"import math\\n\",\n    \"print(math.sqrt(2))\\n\",\n    \"print(math.sin(math.pi))\\n\",\n    \"```\\n\",\n    \"\\n\",\n    \"---\\n\",\n    \"\\n\",\n    \"以下のセルを、モジュール名を付けないでこれらの関数や変数を参照できるように変更してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {\n    \"tags\": [\n     \"raises-exception\"\n    ]\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"import ...\\n\",\n    \"...\\n\",\n    \"\\n\",\n    \"print(sqrt(2))\\n\",\n    \"print(sin(pi))\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 練習の解答\\n\",\n    \"\\n\",\n    \"`from` を使ってモジュールを指定、参照する関数を `import` でインポートしてください。 \"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"from math import sqrt, sin, pi\\n\",\n    \"print(sqrt(2))\\n\",\n    \"print(sin(pi))\"\n   ]\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"Python 3\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"name\": \"python\"\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 2\n}\n"
  },
  {
    "path": "colab/5/5-2.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"##================================================\\n\",\n    \"## このセルを最初に実行せよ---Run this cell first.\\n\",\n    \"##================================================\\n\",\n    \"!wget -P . https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/5/factorial.py\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/5/fig/py_open_2.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/5/fig/py_open_1.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/5/fig/py_conv_1.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/5/fig/py_conv_2.png\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# 5-2. モジュールの作り方\\n\",\n    \"モジュールの作り方について説明します。\\n\",\n    \"\\n\",\n    \"参考\\n\",\n    \"\\n\",\n    \"- https://docs.python.org/ja/3/tutorial/modules.html\\n\",\n    \"- https://docs.python.org/ja/3/reference/import.html\\n\",\n    \"\\n\",\n    \"Pythonではプログラムを**モジュール**という単位で、複数のファイルに分割することができます。\\n\",\n    \"通例、一度定義した便利な関数などを別のプログラムで再利用するときには、再利用される部分をモジュールとして切り出します。\\n\",\n    \"プログラムが大きくなると、このように複数のファイルに分割した方が開発や保守が簡単になります。\\n\",\n    \"\\n\",\n    \"## モジュールファイル\\n\",\n    \"\\n\",\n    \"本授業で扱ってきたノートブックファイル（拡張子 `.ipynb`）は、コードセル（Codeセル）にPythonソースコード、Markdownセルに文書を持ち、内部的に出力結果も保存しています。 一方、モジュールファイル（拡張子 `.py`）は、Pythonソースコードのみを含んだファイルです。\\n\",\n    \"\\n\",\n    \"モジュールファイルを作るときには、Jupyter Notebook におけるコードセルの内容のみをファイルに記述することになります。\\n\",\n    \"\\n\",\n    \"モジュールファイルの文字コードはUTF-8であることが[公式に推奨されています](https://www.python.org/dev/peps/pep-0008/#source-file-encoding)。\\n\",\n    \"原則としてUTF-8でエンコードして保存してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### ノートブックファイルをモジュールファイルに変換する\\n\",\n    \"\\n\",\n    \"本授業で利用しているノートブックファイルを `.py` としてセーブするには、\\n\",\n    \"「ファイル」メニューの「.py をダウンロード」項目を選択します。\\n\",\n    \"\\n\",\n    \"そうすると、コードセルだけがプログラム行として有効になり、その他の行はコメントアウトされたモジュールファイルがダウンロードできます。\\n\",\n    \"ダウンロード先はブラウザによって定まりますが、ダウンロードフォルダになることが一般的でしょう。\\n\",\n    \"\\n\",\n    \"この方法では、全てのコードセルの内容を一度に実行するプログラムとして保存されます。\\n\",\n    \"ノートブックのようにセル単位の実行するわけではないことに注意する必要があります。\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### モジュールファイルをアップロードする\\n\",\n    \"\\n\",\n    \"次に、ダウンロードしたモジュールファイルをColaboratoryで使うには、\\n\",\n    \"Colaboratoryの実行環境の中のファイルシステムのカレントディレクトリに\\n\",\n    \"モジュールファイルをアップロードする必要があります。\\n\",\n    \"このためには、以下のセルを実行してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"import sys\\n\",\n    \"if 'google.colab' in sys.modules:\\n\",\n    \"    from google.colab import files\\n\",\n    \"    uploaded = files.upload() # Upload to the current directory\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 自作モジュールの使い方\\n\",\n    \"\\n\",\n    \"モジュールで定義されている関数を利用するには、**`import`** を用いて `import モジュール名` と書きます。\\n\",\n    \"**モジュール名**は、モジュールファイル名から拡張子 `.py` を除いたものです。\\n\",\n    \"\\n\",\n    \"すると、モジュールで定義されている関数は `モジュール名.関数名` によって参照できます。\\n\",\n    \"\\n\",\n    \"次の関数が記述された `factorial.py` というモジュールを読み込む場合を説明します。\\n\",\n    \"ただし、読み込み元と同じディレクトリに `factorial.py` が存在すると仮定します。\\n\",\n    \"\\n\",\n    \"---\\n\",\n    \"\\n\",\n    \"factorial.py:\\n\",\n    \"\\n\",\n    \"```Python\\n\",\n    \"# 階乗n!を返す\\n\",\n    \"def fact(n):\\n\",\n    \"    prod = 1\\n\",\n    \"    for i in range(1, n + 1):\\n\",\n    \"        prod *= i\\n\",\n    \"    return prod\\n\",\n    \"```\\n\",\n    \"\\n\",\n    \"---\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"import factorial\\n\",\n    \"\\n\",\n    \"factorial.fact(6)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"`from` や `as` の使い方も既存のモジュールと全く同じです。\\n\",\n    \"\\n\",\n    \"モジュール内で定義されている名前を読み込み元のプログラムでそのまま使いたい場合は、**`from`** を用いて以下のように書くことができます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"from factorial import fact\\n\",\n    \"\\n\",\n    \"fact(6)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"ワイルドカード **`*`** を利用する方法もありますが、推奨されていません。\\n\",\n    \"読み込まれるモジュール内の未知の名前と、読み込み元のプログラム中の名前が衝突する可能性があるためです。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"from factorial import *\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"モジュール名が長すぎるなどの理由から別の名前としたい場合は、**`as`** を利用する方法もあります。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"import factorial as f\\n\",\n    \"\\n\",\n    \"f.fact(6)\"\n   ]\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"Python 3\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"name\": \"python\"\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 2\n}\n"
  },
  {
    "path": "colab/5/5-3.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"##================================================\\n\",\n    \"## このセルを最初に実行せよ---Run this cell first.\\n\",\n    \"##================================================\\n\",\n    \"!wget -P . https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/5/factorial.py\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/5/fig/py_open_2.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/5/fig/py_open_1.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/5/fig/py_conv_1.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/5/fig/py_conv_2.png\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# 5-3. NumPyライブラリ\\n\",\n    \"\\n\",\n    \"NumPyについて説明します。\\n\",\n    \"\\n\",\n    \"参考\\n\",\n    \"\\n\",\n    \"- https://docs.scipy.org/doc/numpy/user/quickstart.html\\n\",\n    \"- https://docs.scipy.org/doc/numpy/user/basics.html\\n\",\n    \"\\n\",\n    \"**NumPy**とは、多次元配列を効率的に扱うライブラリです。\\n\",\n    \"Pythonの標準ライブラリではありませんが、科学技術計算や機械学習など、ベクトルや行列の演算が多用される分野では、事実上の標準ライブラリとしての地位を確立しています。\\n\",\n    \"\\n\",\n    \"NumPyを用いるには、まず、**`numpy`** モジュールをインポートする必要があります。\\n\",\n    \"慣習として、`np` と別名をつけて利用されます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"import numpy as np\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"NumPyでは、Python標準の数値やリストの代わりに、特別な数値や配列を用いることで、格段に効率的な配列演算を実現します。\\n\",\n    \"以下では、配列の基本的な操作や機能を説明します。\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 配列の構築\\n\",\n    \"\\n\",\n    \"**配列**とは、特定の型の値の並びです。\\n\",\n    \"**`numpy.array()`** 関数で構築できます。\\n\",\n    \"このとき、配列の要素はPython標準のリストやタプルで指定します。\\n\",\n    \"どちらを用いて作成しても全く同じ配列を作成できます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"a = np.array([1,2,3]) # リストから配列作成\\n\",\n    \"print(a)\\n\",\n    \"b = np.array((1,2,3)) # タプルからの配列作成\\n\",\n    \"print(b)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"`print` の結果はリストと似ていますが、要素が `,` ではなく空白で区切られているに注意してください。\\n\",\n    \"`print` ではなく、式の評価結果の場合、より違いが明示されます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"a\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"配列は **`numpy.ndarray`** というデータ型によって実現されています。\\n\",\n    \"組み込み関数 `type()` を使うと、データ型を調べられます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"type(np.array([1,2,3,4,5])) # 配列の型 \"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"type([1,2,3,4,5])\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"`array()` が、リストではなく `ndarray` を返していることがわかります。\\n\",\n    \"\\n\",\n    \"### 要素型\\n\",\n    \"\\n\",\n    \"配列の要素を構成する値には幾つかの型がありますが、次の4つの型を知っていればとりあえずは十分です。\\n\",\n    \"\\n\",\n    \"| 型名       | 説明           |\\n\",\n    \"|---         |---             |\\n\",\n    \"| **`numpy.int32`**      | 整数（32-bit）を表す型   |\\n\",\n    \"| **`numpy.float64`**    | 実数（64-bit）を表す型   |\\n\",\n    \"| **`numpy.complex128`** | 複素数（64-bit実数の組）を表す型 |\\n\",\n    \"| **`numpy.bool_`**      | 真理値を表す型 |\\n\",\n    \"\\n\",\n    \"配列は、リストと異なり、型の異なる要素を混在させることはできません。\\n\",\n    \"\\n\",\n    \"`array()` の `dtype` 引数に、要素型を表すオブジェクトや文字列値を与えることで、指定された要素型の配列を構築できます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"print(np.array([-1,0,1], dtype=np.int32)) # np.int32の代わりに'int32'でも同じ\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"実数には、小数点が付与されて印字されます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"print(np.array([-1,0,1], dtype=np.float64)) # np.float64の代わりに'float64'でも同じ\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"複素数は実部と虚部を表す実数の組であり、虚部には `j` が付与されて印字されます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"print(np.array([-1,0,1], dtype=np.complex128)) # np.complex128の代わりに'complex128'でも同じ\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"数値から真理値への変換では、`0` が `False` で、`0` 以外が `True` になります。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"print(np.array([-1,0,1], dtype=np.bool_)) # np.bool_の代わりに'bool'でも同じ\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### 多次元配列\\n\",\n    \"\\n\",\n    \"**多次元配列**は、配列の中に配列がある入れ子の配列です。\\n\",\n    \"入れ子のリストやタプルを `numpy.array()` に渡すことで構築できます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"print(np.array([[1,2],[3,4]])) # 2次元配列の構築\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"print(np.array([[[1,2],[3,4]],[[5,6],[7,8]]])) # 3次元配列の構築\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"上の例からわかるように、2次元配列は行列のように、3次元配列は行列の配列のように印字されます。\\n\",\n    \"\\n\",\n    \"多次元配列は、要素となる配列の長さが等しいことが想定されます。\\n\",\n    \"つまり、2次元配列は、行列のように各行の長さが等しくなければなりません。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"print(np.array([[1,2],[3]])) # 行の長さが異なる場合\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"このように行の長さが異なる場合は、多次元配列とは見做されません。\\n\",\n    \"\\n\",\n    \"多次元配列の各次元の長さの組を、多次元配列の**形** (shape) と呼びます。\\n\",\n    \"特に2次元配列の場合、行列と同様に、行数（内側にある配列の数）と列数（内側にある配列の要素数）の組を使って、行数×列数で形を表記します。\\n\",\n    \"\\n\",\n    \"1次元配列に対して **`reshape()`** メソッドを使うと、引数で指定された形の多次元配列に変換することができます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"a1 = np.array([0, 1, 2, 3, 4, 5]) # 1次元配列\\n\",\n    \"a2 = a1.reshape(2,3)              # 2×3の2次元配列\\n\",\n    \"a2\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"ここで、`reshape()` を適用する前後の配列（ここでは `a1` と `a2`）は、内部的にデータを共有していることに注意してください。\\n\",\n    \"つまり、`a1` の要素を更新すると、`a2` にも影響を及ぼします。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"a1[1] = 6\\n\",\n    \"print(a1)\\n\",\n    \"print(a2)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"**`ravel()`** メソッドを使うと、多次元配列を1次元配列に戻すことができます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"a = np.array([0, 1, 2, 3, 4, 5]).reshape(2,3)\\n\",\n    \"print(a)\\n\",\n    \"print(a.ravel())\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"`ravel()` の結果も、`reshape()` と同様に、元の配列と要素を共有します。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"elems = np.array([0, 1, 2, 3, 4, 5])\\n\",\n    \"a = elems.reshape(2,3).ravel() # ravel()は要素をelemsと共有\\n\",\n    \"elems[1] = 6\\n\",\n    \"print(a)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"なお、要素をコピーして変換する **`flatten()`** メソッドもありますが、コピーしない `ravel()` の方が効率的です。\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### ▲**配列のデータ属性**\\n\",\n    \"\\n\",\n    \"配列はオブジェクトであり、その配列に関する様々な情報を属性として保持します。\\n\",\n    \"（オブジェクトの属性については6-3に簡単な説明があります。）\\n\",\n    \"配列が持つ代表的なデータ属性（メソッド以外の属性）を次の表にまとめます。\\n\",\n    \"\\n\",\n    \"| 属性 | 意味 |\\n\",\n    \"|---   |---   |\\n\",\n    \"| `a.dtype` | 配列 `a` の要素型 |\\n\",\n    \"| `a.shape` | 配列 `a` の形（各次元の長さのタプル）|\\n\",\n    \"| `a.ndim` | 配列 `a` の次元数（`len(a.shape)` と等しい）|\\n\",\n    \"| `a.size` | 配列 `a` の要素数（`a.shape` の総乗と等しい）|\\n\",\n    \"| `a.flat` | 配列 `a` の1次元表現（`a.ravel()` と等しい）|\\n\",\n    \"| `a.T` | 配列 `a` を転置した配列（`a` と要素を共有）|\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 配列要素を生成する構築関数\\n\",\n    \"\\n\",\n    \"要素を生成して配列を構築する代表的な関数を紹介します。\\n\",\n    \"特に断りが無い場合、ここで紹介する関数は、`array()` と同様に `dtype` 引数で要素型を指定可能です。\\n\",\n    \"\\n\",\n    \"### `arange`\\n\",\n    \"\\n\",\n    \"**`numpy.arange()`** は、組み込み関数 `range()` の配列版です（`arange` は array range の略）。\\n\",\n    \"開始値・終了値・刻み幅を引数にとります。\\n\",\n    \"デフォルトの開始値は `0`、刻み幅は `1` です。\\n\",\n    \"`range()` と違って、引数の値は整数に限定されません。\\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"print(np.arange(3)) # range(3)に対応する配列\\n\",\n    \"print(np.arange(0, 1, 0.2)) # 0を開始値として0.2刻みで1未満の要素を生成\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### `linspace`\\n\",\n    \"**`numpy.linspace()`** 関数は、範囲を等分割した値からなる配列を生成します。\\n\",\n    \"第1引数と第2引数には、それぞれ範囲の開始値と終了値、第3引数には分割数を指定します。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"print(np.linspace(0, 1, 4)) # 0から1の値を4分割した値を要素に持つ配列\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### `zeros` と `ones`\\n\",\n    \"**`numpy.zeros()`** 関数は、`0` からなる配列を生成します。\\n\",\n    \"同様に、**`numpy.ones()`** 関数は、`1` からなる配列を生成します。\\n\",\n    \"どちらも、生成される形を第1引数に取ります。\\n\",\n    \"デフォルトの要素型は、実数です。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"print(np.zeros(4))     # 長さ4の1次元配列\\n\",\n    \"print(np.zeros((2,3))) # 2×3の2次元配列を生成\\n\",\n    \"print(np.ones(4))     # 長さ4の1次元配列\\n\",\n    \"print(np.ones((2,3))) # 2×3の2次元配列を生成\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### `random.rand`\\n\",\n    \"**`numpy.random.rand()`** 関数は、0 以上 1 未満の乱数からなる配列を生成します。\\n\",\n    \"引数には生成される配列の形を指定します。\\n\",\n    \"要素型は実数に限定されます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"print(np.random.rand(4))   # 長さ4の1次元配列\\n\",\n    \"print(np.random.rand(2,3)) # 2×3の2次元配列を生成\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"この他にも、**`numpy.random.randn()`**・**`numpy.random.binomial()`**・**`numpy.random.poisson()`** は、それぞれ、正規分布・二項分布・ポアソン分布の乱数からなる配列を生成します。\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 練習\\n\",\n    \"\\n\",\n    \"引数に整数 $n$ を取り、$i$ から始まる連番の整数からなる配列を$i$番目 ($i\\\\ge 0$) の行として持つ $n\\\\times n$ の2次元配列を返す関数 `range_square_matrix()` を、`arange()` を用いて定義してください。\\n\",\n    \"\\n\",\n    \"たとえば、`range_square_matrix(3)` は、\\n\",\n    \"```\\n\",\n    \"[[0 1 2]\\n\",\n    \" [1 2 3]\\n\",\n    \" [2 3 4]]\\n\",\n    \"```\\n\",\n    \"と印字されるような2次元配列を返します。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def arange_square_matrix(n):\\n\",\n    \"    ...\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"以下のセルを実行して、`True` が表示されることを確認してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {\n    \"tags\": [\n     \"raises-exception\"\n    ]\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"print(all(map(all,(arange_square_matrix(3) == np.array([[0,1,2],[1,2,3],[2,3,4]])))))\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 配列要素の操作\\n\",\n    \"\\n\",\n    \"### インデックスアクセス\\n\",\n    \"\\n\",\n    \"配列の要素には、リストの場合と同様に、`0` から始まるインデックスを使って参照できます。\\n\",\n    \"リストと同じく、配列の先頭要素のインデックスは `0`、最後の要素のインデックスは `-1` となります。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"a = np.arange(3)\\n\",\n    \"print(a)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"a[0]\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"a[-1]\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"a[-1] = 3 # 要素への代入もできる\\n\",\n    \"print(a)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"多次元配列では、高次元（入れ子の外側）から順にインデックスを指定します。\\n\",\n    \"特に2次元配列、すなわち行列の場合は、行インデックスと列インデックスを順に指定します。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"a = np.arange(6).reshape(2,3)\\n\",\n    \"print(a)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"a[1,2] # 行と列のインデックスをまとめて指定\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"a[1,2] = 6 # 要素への代入もできる\\n\",\n    \"print(a)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### スライス\\n\",\n    \"\\n\",\n    \"リストと同様に、配列の**スライス**を構築できます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"a = np.arange(5)\\n\",\n    \"print(a)\\n\",\n    \"print(a[1:4])\\n\",\n    \"print(a[1:])\\n\",\n    \"print(a[:-2])\\n\",\n    \"print(a[::2])\\n\",\n    \"print(a[::-1])\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"配列のスライスに対して代入すると、右辺の値がコピーされて、スライス元の配列にまとめて代入されます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"a = np.arange(5)\\n\",\n    \"print(a)\\n\",\n    \"a[1:4] = 6\\n\",\n    \"print(a)\\n\",\n    \"a = np.arange(5)\\n\",\n    \"a[::2] = 6\\n\",\n    \"print(a)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"一方、リストに対しては、以下はエラーになります。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {\n    \"tags\": [\n     \"raises-exception\"\n    ]\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"a = [0,1,2,3,4]\\n\",\n    \"print(a)\\n\",\n    \"a[1:4] = 6\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"a = [0,1,2,3,4]\\n\",\n    \"print(a)\\n\",\n    \"a[1:4] = [6]\\n\",\n    \"print(a)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"このように、配列のスライスに対する代入の振舞いは、リストの場合と異なることに注意してください。\\n\",\n    \"\\n\",\n    \"多次元配列に対しては、インデックスの参照と同様に、高い次元のスライスから順に並べて指定します。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"a = np.arange(9).reshape(3,3)\\n\",\n    \"print(a)\\n\",\n    \"print(a[:2,:2])\\n\",\n    \"print(a[1:,1:])\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"多次元配列に対するスライスは、入れ子リストに対するスライスとは意味が異なることに注意してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### for文\\n\",\n    \"\\n\",\n    \"リストと同様に、for文を用いて、配列要素への反復処理を記述できます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"for v in np.arange(3):\\n\",\n    \"    print(v)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"多次元配列の場合は、最外の配列に対して反復します。\\n\",\n    \"つまり、2次元配列の場合、行の配列に対する反復処理となります。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"for row in np.arange(6).reshape(2,3):\\n\",\n    \"    print(row)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"for文と併用される `enumerate()` の多次元配列版として、`numpy.ndenumerate()` 関数が提供されています。\\n\",\n    \"`numpy.ndenumerate()` は、（多次元）インデックスと要素の組を列挙します。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"for idx, e in np.ndenumerate(np.arange(6).reshape(2,3)):\\n\",\n    \"    print(idx, e)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"for idx, e in np.ndenumerate(np.arange(3)):\\n\",\n    \"    print(idx, e)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 要素毎の演算\\n\",\n    \"\\n\",\n    \"配列に対する要素毎の演算は、簡潔に記述できます。\\n\",\n    \"しかも、for文で記述するより、効率がよいです。\\n\",\n    \"要素毎の演算を上手く使えるかどうかが、NumPyプログラミングの肝と言っても過言ではないでしょう。\\n\",\n    \"\\n\",\n    \"### **配列のスカラ演算**\\n\",\n    \"\\n\",\n    \"配列とスカラとの算術演算を記述すると、要素毎のスカラ演算となります。\\n\",\n    \"演算結果として、新しい配列が返ります。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"a = np.arange(4)\\n\",\n    \"print(a)\\n\",\n    \"\\n\",\n    \"print(a + 1) # 各要素に1を加算\\n\",\n    \"print(a - 1) # 各要素に1を減算\\n\",\n    \"print(a * 2) # 各要素に2を乗算\\n\",\n    \"print(a / 2) # 各要素を2で除算\\n\",\n    \"print(a // 2) # 各要素を2で整数除算\\n\",\n    \"print(a % 2) # 各要素に2の剰余演算\\n\",\n    \"print(a ** 2) # 各要素を2乗\\n\",\n    \"\\n\",\n    \"print(1 + a) # 左側がスカラでもよい\\n\",\n    \"print(1 - a) # 左側がスカラでもよい\\n\",\n    \"print(2 * a) # 左側がスカラでもよい\\n\",\n    \"b = a + 1\\n\",\n    \"print(1 / b) # 左側がスカラでもよい\\n\",\n    \"print(9 // b) # 左側がスカラでもよい\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### **配列同士の演算**\\n\",\n    \"\\n\",\n    \"形が同じ配列同士の算術演算は、同じ位置の要素同士の演算となります。\\n\",\n    \"演算結果として、新しい配列が返ります。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"a = np.arange(4).reshape(2,2)\\n\",\n    \"b = np.arange(1,5).reshape(2,2)\\n\",\n    \"print(a)\\n\",\n    \"print(b)\\n\",\n    \"print(a + b) \\n\",\n    \"print(a - b)\\n\",\n    \"print(a * b)\\n\",\n    \"print(a / b)\\n\",\n    \"c = 3 * a\\n\",\n    \"print(c // b)\\n\",\n    \"print(a % b)\\n\",\n    \"print(a ** b)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"実は、形が同じでない配列同士の算術演算も可能ですが、振舞いが複雑なので間違いやすいです。\\n\",\n    \"配列同士の算術演算は、形が同じ配列に限定する方が賢明です。\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### ユニバーサル関数\\n\",\n    \"\\n\",\n    \"NumPyには**ユニバーサル関数**と呼ばれる、任意の形の配列を取り、各要素に所定の演算を与えた結果を返す関数があります。\\n\",\n    \"その代表例は、**`numpy.sqrt()`** 関数です。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"a = np.zeros(3) + 2\\n\",\n    \"print(a)\\n\",\n    \"print(np.sqrt(a)) # 各要素はsqrt(2)\\n\",\n    \"b = np.zeros((2,2)) + 2\\n\",\n    \"print(np.sqrt(b)) # 各要素はsqrt(2)\\n\",\n    \"print(np.sqrt(2)) # スカラ（0次元配列）も扱える\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"この他にも、多数のユニバーサル関数が提供されています。\\n\",\n    \"詳しくは、[ユニバーサル関数の一覧](https://docs.scipy.org/doc/numpy-1.14.0/reference/ufuncs.html#available-ufuncs)を参照してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## よく使われる配列操作\\n\",\n    \"### `dot`\\n\",\n    \"\\n\",\n    \"**`numpy.dot()`** は、2つの配列を引数に取り、そのドット積を返します。\\n\",\n    \"両者が1次元配列のときは、ベクトル内積と等しいです。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"np.dot(np.arange(4), np.arange(1,5)) # 0*1 + 1*2 + 2*3 + 3*4\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"2次元配列同士だと、行列乗算と等しいです。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"# [[0 1]     [[1 2]\\n\",\n    \"#  [2 3]] と  [3 4]] の行列積\\n\",\n    \"print(np.dot(np.arange(4).reshape(2,2), np.arange(1,5).reshape(2,2)))\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### `sort`\\n\",\n    \"\\n\",\n    \"**`numpy.sort()`** 関数は、昇順でソートされた新しい配列を返します。\\n\",\n    \"これは、組み込み関数 `sorted()` の配列版です。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"a = np.array([3, 4, -1, 0, 2])\\n\",\n    \"print(a)\\n\",\n    \"print(np.sort(a))\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"一方、配列の **`sort()`** メソッドは、配列を破壊的に（インプレースで）ソートします。\\n\",\n    \"これは、リストの `sort()` メソッドの配列版です。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"a = np.array([3, 4, -1, 0, 2])\\n\",\n    \"print(a)\\n\",\n    \"a.sort()\\n\",\n    \"print(a)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### `sum`, `max`, `min`, `mean`\\n\",\n    \"\\n\",\n    \"配列のメソッド **`sum()`**・**`max()`**・**`min()`**・**`mean()`** は、それぞれ総和・最大値・最小値・算術平均を返します。\\n\",\n    \"これらのメソッドは、引数が与えられない場合、全要素を集計した結果を返します。\\n\",\n    \"多次元配列の場合、集計する次元を指定できます。\\n\",\n    \"具体的には、2次元配列の場合、`0` を指定すると各列に、`1` を指定すると各行に、対応するメソッドを適用した結果が返されます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"a = np.arange(6).reshape(2,3)\\n\",\n    \"print(a)\\n\",\n    \"print(a.sum())\\n\",\n    \"print(a.sum(0))\\n\",\n    \"print(a.sum(1))\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"この他にも、多数の数学・統計関連のメソッドや関数が提供されています。\\n\",\n    \"詳しくは、[数学関数](https://docs.scipy.org/doc/numpy/reference/routines.math.html)や[統計関数](https://docs.scipy.org/doc/numpy/reference/routines.statistics.html)を参照してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 配列の保存と復元\\n\",\n    \"\\n\",\n    \"配列は、ファイルに保存したり、ファイルから読み出したりすることが、簡単にできます。\\n\",\n    \"\\n\",\n    \"**`numpy.savetxt()`** 関数は、与えられた配列を指定されたファイル名をつけてテキスト形式で保存します。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"np.savetxt('arange3.txt', np.arange(3))\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"この `arange3.txt` は、次のような内容になっているはずです。\\n\",\n    \"```\\n\",\n    \"0.000000000000000000e+00\\n\",\n    \"1.000000000000000000e+00\\n\",\n    \"2.000000000000000000e+00\\n\",\n    \"```\\n\",\n    \"2次元配列は、列が空白区切りで保存されます\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"np.savetxt('arange2x3.txt', np.arange(6).reshape(2,3))\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"この `arange2x3.txt` は、次のような内容になっているはずです。\\n\",\n    \"```\\n\",\n    \"0.000000000000000000e+00 1.000000000000000000e+00 2.000000000000000000e+00\\n\",\n    \"3.000000000000000000e+00 4.000000000000000000e+00 5.000000000000000000e+00\\n\",\n    \"```\\n\",\n    \"\\n\",\n    \"一方、**`numpy.loadtxt()`** 関数は、与えられた名前のファイルに保存された配列を復元します。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"a = np.loadtxt('arange2x3.txt')\\n\",\n    \"print(a)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"保存するときに、列の区切り文字をデフォルトの `' '` 以外にしたい場合、`savetxt()` の `delimiter` 引数に区切り文字（列）を指定します。これを復元するときには、`loadtxt()` の `delimiter` 引数に同じ値を指定する必要があります。\\n\",\n    \"ただし、区切り文字列はASCII（正確にはLatin-1）で解釈可能でなければなりません。\\n\",\n    \"\\n\",\n    \"大規模な配列をテキスト形式で保存すると、ファイルサイズがとても大きくなります。\\n\",\n    \"そういう場合、圧縮保存が有用です。\\n\",\n    \"\\n\",\n    \"保存するファイル名の拡張子を `.gz` とすることで、`savetxt()` は自動的にGZip形式で圧縮して保存します。\\n\",\n    \"復元するファイル名の拡張子が `.gz` であれば、`loadtxt()` はGZip形式だと判断して、自動的に解凍して復元します。\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## ▲**真理値配列によるインデックスアクセス**\\n\",\n    \"\\n\",\n    \"配列に対して、比較演算を適用すると、算術演算と同様に要素毎に演算されて、真理値の配列が返ります。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"a = np.arange(6)\\n\",\n    \"print(a)\\n\",\n    \"print(a < 3)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"このように作られた真理値配列は、インデックスとして利用することができます。\\n\",\n    \"これによって、条件を満たす範囲を取り出すような記述が可能になります。\\n\",\n    \"次の具体例を見てみましょう。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"a = np.array([0,1,2,-3,-4,5,-6,-7])\\n\",\n    \"print(a)\\n\",\n    \"print(a[a < 0]) # 負の要素を取り出し\\n\",\n    \"print(a[(a < 0) & (a % 2 == 0)]) # 負で偶数の要素を取り出し\\n\",\n    \"a[a < 0] = 8 # 負の要素を8に上書き\\n\",\n    \"print(a)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"一見すると単なる条件式のように見えますが、インデックスとなるのは真理値ではなく真理値の配列です。\\n\",\n    \"したがって、真理値を返す `and`・`or`・`not` の代わりに、要素毎の演算を行う `&`・`|`・`~` を用いる必要があります。\\n\",\n    \"\\n\",\n    \"同様の記法は、7-1で扱うpandasライブラリでも利用されます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## ▲線形代数の演算\\n\",\n    \"\\n\",\n    \"`numpy.dot()` は、2次元配列を与えたときには、行列積となりました。\\n\",\n    \"それだけでなく、行列積専用の **`numpy.matmul()`** も提供されています。\\n\",\n    \"\\n\",\n    \"また、単位行列は **`numpy.identity()`** 関数で作成することができます。\\n\",\n    \"引数に行列のサイズを指定します。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"I = np.identity(3)\\n\",\n    \"print(I)\\n\",\n    \"a = np.arange(9).reshape(3,3)\\n\",\n    \"print(a)\\n\",\n    \"print(np.matmul(a, I))\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"**`numpy.linalg.norm()`** 関数は、与えられたベクトル（1次元配列）もしくは行列（2次元配列）のノルムを返します。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"np.linalg.norm(np.ones(3)) # ユークリッドノルムを計算するのでsqrt(3)と等しい\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"NumPyでは、行列の分解、転置、行列式などの計算を含む線形代数の演算は、**`numpy.linalg`** モジュールで提供されています。\\n\",\n    \"詳しくは、[線形代数関連関数](https://docs.scipy.org/doc/numpy/reference/routines.linalg.html)を参照してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 練習の解答\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def arange_square_matrix(n):\\n\",\n    \"    return np.array([np.arange(i, n+i) for i in range(n)])\"\n   ]\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"Python 3\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"name\": \"python\"\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 2\n}\n"
  },
  {
    "path": "colab/5/factorial.py",
    "content": "# 階乗n!を返す\ndef fact(n):\n    prod = 1\n    for i in range(1, n + 1):\n        prod *= i\n    return prod"
  },
  {
    "path": "colab/6/6-1.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"##================================================\\n\",\n    \"## このセルを最初に実行せよ---Run this cell first.\\n\",\n    \"##================================================\\n\",\n    \"!wget -P . https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/6/jugemu.txt\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# 6-1. 内包表記\\n\",\n    \"\\n\",\n    \"**内包表記**について説明します。\\n\",\n    \"\\n\",\n    \"参考:\\n\",\n    \"\\n\",\n    \"- https://docs.python.org/ja/3/tutorial/datastructures.html#list-comprehensions\\n\",\n    \"- https://docs.python.org/ja/3/tutorial/datastructures.html#nested-list-comprehensions\\n\",\n    \"\\n\",\n    \"## リスト内包表記\\n\",\n    \"\\n\",\n    \"Pythonでは各種の**内包表記** (comprehension) が利用できます。\\n\",\n    \"\\n\",\n    \"以下のような整数の自乗を要素に持つリストを作るプログラムでは、\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"squares1 = []\\n\",\n    \"for x in range(6):\\n\",\n    \"    squares1.append(x**2)\\n\",\n    \"squares1\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"`squares1` として `[0, 1, 4, 9, 16, 25]` が得られます。\\n\",\n    \"これを内包表記を用いて書き換えると、以下のように一行で書け、プログラムが読みやすくなります。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"squares2 = [x**2 for x in range(6)]\\n\",\n    \"squares2\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"関数 **`sum`** は与えられた数のリストの総和を求めます。\\n\",\n    \"（2-2の練習にあった `sum_list` と同じ機能を持つ組み込みの関数です。）\\n\",\n    \"内包表記に対して `sum` を適用すると以下のようになります。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"sum([x**2 for x in range(6)])\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"以下の内包表記は3-2で用いられていました。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"[chr(i + ord('a')) for i in range(26)]\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 練習\\n\",\n    \"文字列のリストが変数 `strings` に与えられたとき、\\n\",\n    \"それぞれの文字列の長さからなるリストを返す内包表記を記述してください。\\n\",\n    \"\\n\",\n    \"`strings = ['The', 'quick', 'brown']` のとき、結果は `[3, 5, 5]` となります。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {\n    \"tags\": [\n     \"raises-exception\"\n    ]\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"strings = ['The', 'quick', 'brown']\\n\",\n    \"[ここに内包表記を書く]\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 練習\\n\",\n    \"\\n\",\n    \"コンマで区切られた10進数からなる文字列が変数 `str1` に与えられたとき、\\n\",\n    \"それぞれの10進数を数に変換して得られるリストを返す内包表記を記述してください。\\n\",\n    \"\\n\",\n    \"`str1 = '123,45,-3'` のとき、結果は `[123, 45, -3]` となります。\\n\",\n    \"\\n\",\n    \"なお、コンマで区切られた10進数からなる文字列を、10進数の文字列のリストに変換するには、メソッド `split` を用いることができます。\\n\",\n    \"また、10進数の文字列を数に変換するには、**`int`** を関数として用いることができます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {\n    \"tags\": [\n     \"raises-exception\"\n    ]\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"str1 = '123,45,-3'\\n\",\n    \"[ここに内包表記を書く]\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 練習\\n\",\n    \"\\n\",\n    \"数のリストが与えらえたとき、リストの要素の分散を求める関数 `var` を\\n\",\n    \"内包表記と関数 `sum` を用いて定義してください。\\n\",\n    \"以下のセルの `...` のところを書き換えて `var` を作成してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def var(lst):\\n\",\n    \"    ...\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"上のセルで解答を作成した後、以下のセルを実行し、実行結果が `True` になることを確認してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {\n    \"tags\": [\n     \"raises-exception\"\n    ]\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"print(var([3,4,1,2]) == 1.25)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 内包表記の入れ子\\n\",\n    \"また内包表記を**入れ子**（**ネスト**）にすることも可能です:\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"[[x*y for y in range(x+1)] for x in range(4)]\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"ネストした内包表記は、外側から読むとわかりやすいです。\\n\",\n    \"`x` を `0` から `3` まで動かしてリストが作られます。\\n\",\n    \"そのリストの要素1つ1つは内包表記によるリストになっていて、\\n\",\n    \"それぞれのリストは `y` を 0 から `x` まで動かして得られます。\\n\",\n    \"\\n\",\n    \"以下のリストは、上の2重のリストをフラットにしたものです。\\n\",\n    \"この内包表記では、`for` が2重になっていますが、自然に左から読んでください。\\n\",\n    \"`x` を `0` から `3` まで動かし、そのそれぞれに対して `y` を `0` から `x` まで動かします。\\n\",\n    \"その各ステップで得られた `x*y` の値をリストにします。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"[x*y for x in range(4) for y in range(x+1)]\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"以下の関数は、与えられた文字列の全ての空でない部分文字列からなるリストを返します。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def allsubstrings(s):\\n\",\n    \"    return [s[i:j] for i in range(len(s)) for j in range(i+1,len(s)+1)]\\n\",\n    \"\\n\",\n    \"allsubstrings('abc')\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 練習\\n\",\n    \"\\n\",\n    \"次のような関数 `sum_lists` を作成してください。\\n\",\n    \"\\n\",\n    \"- `sum_lists` はリスト `list1` を引数とします。\\n\",\n    \"- `list1` の各要素はリストであり、そのリストの要素は数です。\\n\",\n    \"- `sum_lists` は、`list1` の各要素であるリストの総和を求め、それらの総和を足し合せて返します。\\n\",\n    \"\\n\",\n    \"ここでは、内包表記と関数 `sum` を用いて `sum_lists` を定義してください。\\n\",\n    \"以下のセルの `...` のところを書き換えて `sum_lists` を作成してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def sum_lists(list1):\\n\",\n    \"    ...\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"上のセルで解答を作成した後、以下のセルを実行し、実行結果が `True` になることを確認してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {\n    \"tags\": [\n     \"raises-exception\"\n    ]\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"print(sum_lists([[20, 5], [6, 16, 14, 5], [16, 8, 16, 17, 14], [1], [5, 3, 5, 7]]) == 158)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 練習\\n\",\n    \"\\n\",\n    \"リスト `list1` と `list2` が引数として与えられたとき、次のようなリスト `list3` を返す関数 `sum_matrix` を作成してください。\\n\",\n    \"\\n\",\n    \"- `list1`, `list2`, `list3` は、3つの要素を持ちます。\\n\",\n    \"- 各要素は大きさ 3 のリストになっており、そのリストの要素は全て数です。\\n\",\n    \"- `list3[i][j]` （ただし、`i` と `j` は共に、0 以上 2 以下の整数）は `list1[i][j]` と `list2[i][j]` の値の和になっています。\\n\",\n    \"\\n\",\n    \"ここでは、内包表記を用いて`sum_matrix` を定義してください。以下のセルの `...` のところを書き換えて `sum_matrix` を作成してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def sum_matrix(list1, list2):\\n\",\n    \"    ...\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"上のセルで解答を作成した後、以下のセルを実行し、実行結果が `True` になることを確認してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {\n    \"tags\": [\n     \"raises-exception\"\n    ]\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"print(sum_matrix([[1,5,3],[4,5,6],[7,8,9]], [[1,4,7],[2,5,8],[3,6,9]])==[[2, 9, 10], [6, 10, 14], [10, 14, 18]])\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## ▲**条件付き内包表記**\\n\",\n    \"\\n\",\n    \"内包表記は `for` に加えて `if` を使うこともできます:\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"words = ['cat', 'dog', 'elephant', None, 'giraffe']\\n\",\n    \"length = [len(w) for w in words if w != None]\\n\",\n    \"print(length)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"この場合、`length` として要素が `None` の場合を除いた `[3, 3, 8, 7]` が得られます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## ▲**セット内包表記**\\n\",\n    \"\\n\",\n    \"内包表記はセット（集合）に対しても使うことができます:\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"words = ['cat', 'dog', 'elephant', 'giraffe']\\n\",\n    \"length_set = {len(w) for w in words}\\n\",\n    \"print(length_set)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"`length_set` として `{3, 7, 8}` が得られます。\\n\",\n    \"セット型なので、リストと異なり重複する要素は除かれます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## ▲**辞書内包表記**\\n\",\n    \"さらに、内包表記は辞書型でも使うことができます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"words = ['cat', 'dog', 'elephant', 'giraffe']\\n\",\n    \"length_dic = {w:len(w) for w in words}\\n\",\n    \"print(length_dic)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"`length_dic` として `{'cat': 3, 'dog': 3, 'elephant': 8, 'giraffe': 7}` が得られます。\\n\",\n    \"\\n\",\n    \"長さと文字列を逆にするとどうなるでしょうか。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"length_rdic = {len(w): w for w in words}\\n\",\n    \"print(length_rdic)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## ▲**ジェネレータ式**\\n\",\n    \"\\n\",\n    \"内包表記と似たものとして、ジェネレータ式というものがあります。\\n\",\n    \"リスト内包表記の `[]` を `()` に置き換えれば、ジェネレータ式になります。\\n\",\n    \"ジェネレータ式は、4-2で説明した**イテレータ**を構築します。\\n\",\n    \"4-2で説明したように、イテレータは、for文で走査（全要素を訪問）できます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"it = (x * 3 for x in 'abc')\\n\",\n    \"for x in it:\\n\",\n    \"    print(x)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"イテレータを組み込み関数 `list()` や `tuple()` に渡すと、対応するリストやタプルが構築されます。\\n\",\n    \"なお、ジェネレータ式を直接引数とするときには、ジェネレータ式の外側の `()` は省略可能です。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"list(x ** 2 for x in range(5))\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"tuple(x ** 2 for x in range(5))\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"総和を計算する組み込み関数 `sum()` など、リストやタプルを引数に取れる大抵の関数には、イテレータも渡せます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"sum(x ** 2 for x in range(5))\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"上の例において、ジェネレータ式の代わりにリスト内包表記を用いても同じ結果を得ますが、\\n\",\n    \"計算の途中で実際にリストを構築するので、メモリ消費が大きいです。\\n\",\n    \"ジェネレータ式では、リストのように走査できるイテレータを構築するだけなので、リスト内包表記よりメモリ効率がよいです。\\n\",\n    \"したがって、関数に渡すだけの一時オブジェクトには、リスト内包表記ではなくジェネレータ式を用いるのが有効です。\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 練習の解答\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"strings = ['The', 'quick', 'brown']\\n\",\n    \"[len(x) for x in strings]\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"str1 = '123,45,-3'\\n\",\n    \"[int(x) for x in str1.split(',')]\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def var(lst):\\n\",\n    \"    n = len(lst)\\n\",\n    \"    av = sum(lst)/n\\n\",\n    \"    return sum([(x - av)*(x - av) for x in lst])/n\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def var(lst):\\n\",\n    \"    n = len(lst)\\n\",\n    \"    av = sum(lst)/n\\n\",\n    \"    return sum([x*x for x in lst])/n - av*av\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def sum_lists(list1):\\n\",\n    \"    return sum([sum(lst) for lst in list1])\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def sum_matrix(list1,list2):\\n\",\n    \"    return [[list1[i][j] + list2[i][j] for j in range(3)] for i in range(3)]\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": []\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"Python 3\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"name\": \"python\"\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 2\n}\n"
  },
  {
    "path": "colab/6/6-2.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"##================================================\\n\",\n    \"## このセルを最初に実行せよ---Run this cell first.\\n\",\n    \"##================================================\\n\",\n    \"!wget -P . https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/6/jugemu.txt\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# 6-2. 高階関数\\n\",\n    \"\\n\",\n    \"Pythonにおける高階関数について説明します。\\n\",\n    \"\\n\",\n    \"参考\\n\",\n    \"\\n\",\n    \"- https://docs.python.org/ja/3/howto/functional.html\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## `max`\\n\",\n    \"\\n\",\n    \"例として、関数 **`max`** について考察します。`max` は与えられたリストの要素のうち、最大のものを返します。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"ls = [3,-8,1,0,7,-5]\\n\",\n    \"max(ls)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"`max` に **`key`** というキーワード引数として、たとえば関数 `abs` を与えることができます。\\n\",\n    \"（キーワード引数について詳しくは、3-3を参照してください。）\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"max(ls, key=abs)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"この場合、各要素に関数 `abs` が適用されて、その結果が最も大きい要素が返ります。\\n\",\n    \"（各要素に `abs` 適用した結果の中の最大値が返るわけではないことに注意してください。）\\n\",\n    \"なお、`abs(x)` は `x` の絶対値を返します。\\n\",\n    \"\\n\",\n    \"この場合、`max` という関数は、関数を引数として受け取っています。\\n\",\n    \"\\n\",\n    \"一般に、関数を引数として受け取ったり返値として返したりする関数を**高階関数**といいます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## `sorted`\\n\",\n    \"\\n\",\n    \"**`sorted`** も高階関数で、`max` と同様に **`key`** というキーワード引数を取ります。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"sorted(ls, key=abs)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"このように、各要素に関数 `abs` を適用した結果によって、各要素をソートします。\\n\",\n    \"\\n\",\n    \"リストを降順にソートするには、次のような関数を用いればよいです。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def invert(x):\\n\",\n    \"    return -x\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"sorted(ls, key=invert)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"なお、リストを降順にソートするには、**`reverse`** というキーワード引数に `True` を指定するという方法もあります。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"sorted(ls, reverse=True)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## ラムダ式\\n\",\n    \"\\n\",\n    \"上の `invert` のような簡単な関数の場合、\\n\",\n    \"いちいち `def` で定義するのは面倒と思いませんか。\\n\",\n    \"\\n\",\n    \"そのようなときは、**`lambda`** を使った**ラムダ式**（または**無名関数**）を用いることができます。\\n\",\n    \"上の例は、以下のように書くことができます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"sorted(ls, key=lambda x: -x)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"`lambda x: -x` という式は、`x` をもらって `-x` を返す関数を表します。\\n\",\n    \"`return` は書かないことに注意してください。\\n\",\n    \"\\n\",\n    \"さて、ここまで関数と呼んでいたものは、Pythonでは、オブジェクトの一種に他なりません。\\n\",\n    \"実際に、`abs` や `lambda x: -x` という式の値を調べてみてください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"abs\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"lambda x: -x\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"したがって、Pythonでは、関数を他の種類のデータ（数やリストや文字列など）と同様に、\\n\",\n    \"関数の引数にしたり、リストの要素にしたり、することができます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## リストからイテラブルへ\\n\",\n    \"\\n\",\n    \"以上の例では、`max` や `sorted` はリストを受け取っていましたが、\\n\",\n    \"リストではなく、タプルでもいいですし、文字列でも構いません。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"max((3,-8,1,0,7,-5))\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"sorted((3,-8,1,0,7,-5))\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"max('hello world')\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"sorted('hello world')\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"すなわち、`max` や `sorted` は、一般にイテラブルを引数に取ることができます。\\n\",\n    \"\\n\",\n    \"イテラブルについては4-2に説明がありましたが、\\n\",\n    \"簡単に言うと、**イテラブル**とはfor文の `in` の後に来ることができるものです。\\n\",\n    \"`max` や `sorted` は、イテラブルの各要素を次々と求めて、\\n\",\n    \"その中の最大値を求めたり、整列した結果をリストとして返したりします。\\n\",\n    \"\\n\",\n    \"以下の例では、`max` にファイルオブジェクトが渡されます。\\n\",\n    \"ファイルオブジェクトはイテレータですので、イテラブルでもあります。\\n\",\n    \"ファイルオブジェクトをfor文の `in` の後に指定すると、\\n\",\n    \"ファイルの各行が文字列として得られます。\\n\",\n    \"以下の例では、`key` として関数 `len` が指定されていますので、\\n\",\n    \"ファイルの中で最も長い行が表示されます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"with open('jugemu.txt', 'r', encoding='utf-8') as f:\\n\",\n    \"    print(max(f, key=len))\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"辞書もイテラブルです。`max` に辞書与えると、最大のキーが返ります。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"max({3:10, 5:2, 9:1})\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 練習\\n\",\n    \"\\n\",\n    \"辞書 `d` が与えられたとき、\\n\",\n    \"最大の値を持つキー（複数個ならばそのいずれか）を返す関数 `max_value_key(d)` を、\\n\",\n    \"`max` を使って定義してください。\\n\",\n    \"\\n\",\n    \"ヒント：辞書 `d` のキー `k` に対して、`k` に対応する値を返す関数は `lambda k: d[k]` という式で表すことができます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def max_value_key(d):\\n\",\n    \"    ...\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"上のセルで解答を作成した後、以下のセルを実行し、実行結果が `True` になることを確認してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {\n    \"tags\": [\n     \"raises-exception\"\n    ]\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"print(max_value_key({3:10, 5:2, 9:1}) == 3)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## `map`\\n\",\n    \"\\n\",\n    \"以下は内包表記の例です。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"[abs(x) for x in [3,-8,1,0,7,-5]]\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"リストの各要素に関数 `abs` が適用された結果がリストになります。\\n\",\n    \"\\n\",\n    \"同様のことを、高階関数 **`map`** を用いて行うことができます。\\n\",\n    \"関数 `map` は、2番目の引数としてイテラブルを取ります。1番目の引数は関数です。\\n\",\n    \"例を見ましょう。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"map(abs, [3,-8,1,0,7,-5])\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"何が返ったか、よくわからないと思います。\\n\",\n    \"以下のように、`map` の結果をfor文の `in` の後に指定してみましょう。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"for x in map(abs, [3,-8,1,0,7,-5]):\\n\",\n    \"    print(x)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"すなわち、`map` が返すものは**イテレータ**です。\\n\",\n    \"このイテレータは、2番目の引数のイテラブル（この例ではリスト）の各要素に\\n\",\n    \"関数 `abs` を適用したものを、次々と返すようなイテレータです。\\n\",\n    \"\\n\",\n    \"内包表記を使えば、以下のようにリストにまとめることができます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"[x for x in map(abs, [3,-8,1,0,7,-5])]\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"関数 `list` をイテレータに適用してもよいです。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"list(map(abs, [3,-8,1,0,7,-5]))\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"しかし、これでは、イテレータがどのように動くのか、よくわからないと思います。\\n\",\n    \"\\n\",\n    \"以下では、呼ばれるたびにメッセージを出力する関数 `abs1` を用います。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def abs1(x):\\n\",\n    \"    print('abs called on', x)\\n\",\n    \"    return abs(x)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"it = map(abs1, [3,-8,1,0,7,-5])\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"このように、`map` がイテレータを返した時点では、各要素に対する計算は何も行われません。\\n\",\n    \"\\n\",\n    \"このイテレータに `next` を適用するとどうなるか、見てください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"next(it)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"next(it)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"関数 `next` が呼ばれるたびに、次の要素を求める計算が行われていることがわかります。\\n\",\n    \"\\n\",\n    \"イテレータはイテラブルですから、`map` の結果にさらに `map` を適用することができます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"list(map(lambda x: x+1, map(abs, [3,-8,1,0,7,-5])))\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"`lambda x: x+1` は、`x` をもらって `x+1` を返す関数です。\\n\",\n    \"すなわち、引数に `1` を足した結果を返します。\\n\",\n    \"\\n\",\n    \"関数 `sum` は、`max` と同様に、イテラブルを受け取って、その要素の総和を返します。\\n\",\n    \"したがって、`map` が返したイテレータに対しても適用できます。\\n\",\n    \"（イテレータをリストに変換する必要はありません。）\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"sum(map(lambda x: x+1, map(abs, [3,-8,1,0,7,-5])))\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 練習\\n\",\n    \"\\n\",\n    \"数のリストが与えられたとき、その要素の絶対値の最大値を返す関数 `max_abs` を、\\n\",\n    \"`map` と `max` を使って定義してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def max_abs(ln):\\n\",\n    \"    ...\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"上のセルで解答を作成した後、以下のセルを実行し、実行結果が `True` になることを確認してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {\n    \"tags\": [\n     \"raises-exception\"\n    ]\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"print(max_abs([3,-8,1,0,7,-5]) == 8)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## `filter`\\n\",\n    \"\\n\",\n    \"関数 **`filter`** もイテラブルをもらってイテレータを返します。\\n\",\n    \"最初の引数としては、真理値を返す関数を指定します。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def pos(x):\\n\",\n    \"    if x>0:\\n\",\n    \"        return True\\n\",\n    \"    else:\\n\",\n    \"        return False\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"この関数 `pos` は、引数が正ならば `True`、そうでなければ `False` を返します。\\n\",\n    \"\\n\",\n    \"すると、以下のように、`filter` は `pos` を適用すると `True` が返る要素のみからなるイテレータを返します。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"list(filter(pos, [3,-8,1,0,7,-5]))\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"`filter` は、条件付き内包表記に対応しています。\\n\",\n    \"同じ計算を以下のようにして行うことができます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"[x for x in [3,-8,1,0,7,-5] if pos(x)]\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 練習\\n\",\n    \"\\n\",\n    \"数のリスト `ln` と数 `n` を受け取って、`ln` の要素のうち、`n` より大きい個数を返す関数\\n\",\n    \"`number_of_big_numbers(ln, n)` を、for文やwhile文を用いずに、`filter` を用いて定義してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def number_of_big_numbers(ln, n):\\n\",\n    \"    ...\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"上のセルで解答を作成した後、以下のセルを実行し、実行結果が `True` になることを確認してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {\n    \"tags\": [\n     \"raises-exception\"\n    ]\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"print(number_of_big_numbers([10, 0, 7, 1, 5, 2, 9], 5) == 3)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 練習\\n\",\n    \"ファイル名 `file` と整数 `n` を受け取って、そのファイルをオープンし、\\n\",\n    \"（改行文字も含めて）長さが `n` より長い行の数を返す関数 `number_of_long_lines(file,n)` を定義してください。\\n\",\n    \"（ファイルは `encoding='utf-8'` でオープンしてください。）\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def number_of_long_lines(file, n):\\n\",\n    \"    ...\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"上のセルで解答を作成した後、以下のセルを実行し、実行結果が `True` になることを確認してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {\n    \"tags\": [\n     \"raises-exception\"\n    ]\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"print(number_of_long_lines('jugemu.txt', 10) == 6)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 練習の解答\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def max_value_key(d):\\n\",\n    \"    return max(d, key=lambda k: d[k])\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def max_abs(ln):\\n\",\n    \"    return max(map(abs, ln))\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def number_of_big_numbers(ln, n):\\n\",\n    \"    return sum(map(lambda x: 1, filter(lambda x: x>n, ln)))\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def number_of_long_lines(file, n):\\n\",\n    \"    with open(file, 'r', encoding='utf-8') as f:\\n\",\n    \"        return sum(map(lambda x: 1, filter(lambda x: len(x)>n, f)))\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": []\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"Python 3\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"name\": \"python\"\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 2\n}\n"
  },
  {
    "path": "colab/6/6-3.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"##================================================\\n\",\n    \"## このセルを最初に実行せよ---Run this cell first.\\n\",\n    \"##================================================\\n\",\n    \"!wget -P . https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/6/jugemu.txt\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# 6-3. クラス\\n\",\n    \"\\n\",\n    \"Pythonにおけるオブジェクト指向プログラミングのうち、クラスを定義する方法について簡単に説明します。\\n\",\n    \"\\n\",\n    \"参考\\n\",\n    \"\\n\",\n    \"- https://docs.python.org/ja/3/tutorial/classes.html\\n\",\n    \"- https://docs.python.org/ja/3/reference/datamodel.html\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## クラス定義\\n\",\n    \"\\n\",\n    \"Pythonでは全てのデータはオブジェクトなのですが、\\n\",\n    \"以下では特に、クラス定義によって作成されたクラスを型とするデータを扱います。\\n\",\n    \"このようなデータは、**オブジェクト指向プログラミング**における典型的な**オブジェクト**です。\\n\",\n    \"そこで以下では、オブジェクトという用語をもっぱら使います。\\n\",\n    \"\\n\",\n    \"4-1で見たように、ファイルオブジェクトに対して `readline()` というメソッドを呼び出すと、\\n\",\n    \"ファイルの行が文字列として次々と返されます。\\n\",\n    \"ここでは、ファイルオブジェクトのようなオブジェクトで、\\n\",\n    \"`readline()` というメソッドが呼び出されると、常に `'Hello.\\\\n'` という文字列を返すようなものを作ってみましょう。\\n\",\n    \"\\n\",\n    \"そのためには、新しいクラスを定義します。\\n\",\n    \"**クラス**とは、オブジェクトの種類を意味します。\\n\",\n    \"新しいクラスを定義すると、そのクラスに属するオブジェクトを作ることができるようになります。\\n\",\n    \"それらのオブジェクトの型は、その新しいクラスになります。\\n\",\n    \"\\n\",\n    \"ここでは、ずっと `'Hello.\\\\n'` を返し続けるので、\\n\",\n    \"`HelloForEver` という名前を持つクラスを定義しましょう。\\n\",\n    \"そして、`HelloForEver` というクラスを型とするオブジェクトを作ります。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"class HelloForEver:\\n\",\n    \"    def readline(self):\\n\",\n    \"        return 'Hello.\\\\n'\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"一般にクラス定義は、以下のような形をしています。\\n\",\n    \"\\n\",\n    \"---\\n\",\n    \"```Python\\n\",\n    \"class クラス名:\\n\",\n    \"    def メソッド名(self, 引数, ...):\\n\",\n    \"        実行文\\n\",\n    \"    def メソッド名(self, 引数, ...):\\n\",\n    \"        実行文\\n\",\n    \"    ...\\n\",\n    \"```\\n\",\n    \"---\\n\",\n    \"メソッド定義は関数定義と同じ形をしていますが、\\n\",\n    \"クラス定義の中に入っています。\\n\",\n    \"メソッド定義において、その最初の引数には慣例として `self` という名前を付けます。\\n\",\n    \"この引数には、メソッドが呼び出されたオブジェクト自身が渡されます。\\n\",\n    \"\\n\",\n    \"上の例では、`readline` というメソッドが1つ定義されています。\\n\",\n    \"\\n\",\n    \"以下のようにして、このクラスのオブジェクトを作ることができます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"f = HelloForEver()\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"`HelloForEver` を型とする新しいオブジェクトが作られて変数 `f` の値となります。\\n\",\n    \"\\n\",\n    \"一般に、オブジェクトの生成は、\\n\",\n    \"\\n\",\n    \"---\\n\",\n    \"```Python\\n\",\n    \"クラス名(式, ...)\\n\",\n    \"```\\n\",\n    \"---\\n\",\n    \"という式で行います。このようにオブジェクトを生成する式は**コンストラクタ**と呼ばれます。\\n\",\n    \"なお、上の例では、括弧の中に式は1つもありません。\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"このようにして作ったオブジェクトの型を確認してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"type(f)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"`__main__.HelloForEver` と表示されたでしょう。\\n\",\n    \"`__main__` は、ノートブックの式が評価されているモジュールを指すので、\\n\",\n    \"このオブジェクトの型が、上で定義した `HelloForEver` クラスであることがわかります。\\n\",\n    \"クラスのコンストラクタによって生成されたオブジェクトを、そのクラスの**インスタンス**と言います。\\n\",\n    \"上のオブジェクトは `HelloForEver` クラスのインスタンスです。\\n\",\n    \"\\n\",\n    \"オブジェクトそのものは以下のように表示されます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"f\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"このオブジェクトに対して、`readline` というメソッドを呼び出すことができます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"f.readline()\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"この例では、`f` という変数に入っているオブジェクトが `self` という引数に渡されて、\\n\",\n    \"`readline` の本体である以下の文が実行されました。\\n\",\n    \"\\n\",\n    \"---\\n\",\n    \"```Python\\n\",\n    \"    return 'Hello.\\\\n'\\n\",\n    \"```\\n\",\n    \"---\\n\",\n    \"（この例では `self` は参照されていません。）\\n\",\n    \"\\n\",\n    \"何回やっても同じです。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"f.readline()\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"f.readline()\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 初期化と属性\\n\",\n    \"\\n\",\n    \"以下の例では、初期化のメソッドが定義され、オブジェクトに属性が与えられます。\\n\",\n    \"\\n\",\n    \"**初期化**のメソッドは **`__init__`** という名前を持ち、\\n\",\n    \"オブジェクトが作られたときに自動的に呼び出されます。\\n\",\n    \"`__init__` の引数は、オブジェクト自身と、クラス名の後に与えられる式の値です。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"class HelloFile:\\n\",\n    \"    def __init__(self, n):\\n\",\n    \"        self.n = n\\n\",\n    \"    def readline(self):\\n\",\n    \"        if self.n == 0:\\n\",\n    \"            return ''\\n\",\n    \"        self.n = self.n - 1\\n\",\n    \"        return 'Hello.\\\\n'\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"この例では、以下のようにしてオブジェクトが作られます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"f = HelloFile(3)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"すると、`HelloFile` を型とする新しいオブジェクトが作られて、\\n\",\n    \"そのオブジェクト自身が `self` に、`3` が `n` に渡されて、\\n\",\n    \"`self.n = n` という文が実行されます。\\n\",\n    \"\\n\",\n    \"`self.n` という式は、このオブジェクトの `n` という名前の属性を表します。\\n\",\n    \"\\n\",\n    \"一般に、`class` の構文によって定義されたクラスを型とするオブジェクトは、\\n\",\n    \"属性を持つことができます。\\n\",\n    \"**属性**とは、個々のオブジェクトごとに記録される値であり、\\n\",\n    \"オブジェクト内の変数と考えられます。\\n\",\n    \"オブジェクトの属性は、オブジェクトに対してその**属性名**を指定して、参照したり設定したりできます。\\n\",\n    \"オブジェクトの属性は、`self.属性名` という式で参照されます。\\n\",\n    \"`self.属性名` を代入文の左辺に書けば、属性を設定することができます。\\n\",\n    \"\\n\",\n    \"`self.n = n` のうち、`self.` の次の `n` は属性を表し、\\n\",\n    \"右辺の `n` は、`__init__` メソッドの引数を表していますので、\\n\",\n    \"混同しないようにしてください。\\n\",\n    \"\\n\",\n    \"この例では、新しく作られたオブジェクトの `n` という属性が、引数 `n` の値である `3` に設定されます。\\n\",\n    \"\\n\",\n    \"`readline` メソッドは以下のように定義されています。\\n\",\n    \"\\n\",\n    \"---\\n\",\n    \"```Python\\n\",\n    \"    def readline(self):\\n\",\n    \"        if self.n == 0:\\n\",\n    \"            return ''\\n\",\n    \"        self.n = self.n - 1\\n\",\n    \"        return 'Hello.\\\\n'\\n\",\n    \"```\\n\",\n    \"---\\n\",\n    \"オブジェクトの属性 `n` を参照して、それが `0` ならば空文字列を返します。\\n\",\n    \"そうでなければ、属性 `n` を `1` 減らしてから文字列 `'Hello.\\\\n'` を返します。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"f.readline()\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"f.readline()\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"f.readline()\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"f.readline()\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"変数 `f` の値であるオブジェクトの属性 `n` は、`f.n` という式によって参照できます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"f.n\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"ここでは詳しく説明しませんが、オブジェクトのメソッドも属性の一種です。\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 継承\\n\",\n    \"\\n\",\n    \"**継承**は、既存のクラスをもとにして、変更部分だけを与えることにより、\\n\",\n    \"新たなクラスを定義する機能です。\\n\",\n    \"\\n\",\n    \"以下の例では、`HelloForEver` をもとにして `HelloFile` を定義しています。\\n\",\n    \"一般に、新しく定義されるクラスを**子クラス**、そのもとになるクラスを**親クラス**と言います。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"class HelloFile(HelloForEver):\\n\",\n    \"    def __init__(self, n):\\n\",\n    \"        self.n = n\\n\",\n    \"    def readline(self):\\n\",\n    \"        if self.n == 0:\\n\",\n    \"            return ''\\n\",\n    \"        self.n = self.n - 1\\n\",\n    \"        return super().readline()\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"ここでは、`__init__` と `readline` を新たに定義しています。\\n\",\n    \"\\n\",\n    \"`HelloForEver` にも `readline` があります。\\n\",\n    \"こちらの `readline` は、`super().readline()` という式で呼び出すことができます。\\n\",\n    \"**`super()`** は、子クラスのオブジェクトに対して親クラスのメソッドを呼び出すための構文です。\\n\",\n    \"実際に、`HelloFile` の `readline` の中で、\\n\",\n    \"`HelloForEver` の `readline` を呼び出しています。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"f = HelloFile(3)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"f.readline()\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 特殊メソッド\\n\",\n    \"\\n\",\n    \"Pythonでは、**特殊メソッド**と呼ばれるメソッドが多数あります。\\n\",\n    \"これらのメソッドの名前は `__` で始まり `__` で終わります。\\n\",\n    \"\\n\",\n    \"クラス定義の中で特殊メソッドを定義すると、そのクラスのオブジェクトに対して、\\n\",\n    \"その特殊メソッドに対応する機能が付与されます。\\n\",\n    \"初期化メソッド `__init__` も特殊メソッドですが、\\n\",\n    \"以下のクラス `HelloFileIterator` では、**`__iter__`** と **`__next__`** という特殊メソッドが定義されています。\\n\",\n    \"このクラスは、`HelloFile` を継承して定義されています。\\n\",\n    \"\\n\",\n    \"`__iter__` メソッドは、オブジェクトに対して関数 `iter` が適用されたときに呼び出されます。\\n\",\n    \"`__iter__` メソッドの値が関数 `iter` の値となります。\\n\",\n    \"以下の例では、`__iter__` はオブジェクト自身を返しています。\\n\",\n    \"したがって、オブジェクトに `iter` が適用されると、オブジェクト自身が返ります。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"class HelloFileIterator(HelloFile):\\n\",\n    \"    def __iter__(self):\\n\",\n    \"        return self\\n\",\n    \"    def __next__(self):\\n\",\n    \"        line = self.readline()\\n\",\n    \"        if line == '':\\n\",\n    \"            raise StopIteration\\n\",\n    \"        return line\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"f = HelloFileIterator(3)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"print(f is iter(f))\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"上の例で、`iter(f)` として関数 `iter` を呼び出すと、\\n\",\n    \"`f.__iter__()` としてメソッド `__iter__` が `f` に対して呼び出され、\\n\",\n    \"その結果が `iter(f)` の値となります。\\n\",\n    \"したがって、`iter(f)` は `f` と同じ値を返します。\\n\",\n    \"\\n\",\n    \"`__next__` メソッドも、オブジェクトに対して関数 `next` が適用されたときに呼び出されます。\\n\",\n    \"`__next__` メソッドの値が `next` の値となります。\\n\",\n    \"\\n\",\n    \"上の例では、`self.readline()` として、オブジェクト自身に対してメソッド `readline` を呼び出しています。\\n\",\n    \"その値が空文字列ならば、\\n\",\n    \"\\n\",\n    \"---\\n\",\n    \"```Python\\n\",\n    \"            raise StopIteration\\n\",\n    \"```\\n\",\n    \"---\\n\",\n    \"という文を実行して、**`StopIteration`** というエラーを投げます。\\n\",\n    \"実は、このエラーは、for文が捕まえて繰り返しを止める効果を持ちます。\\n\",\n    \"なお、**`raise`** は強制的にエラーを発生させる構文です。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"for line in f:\\n\",\n    \"    print(line)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"4-2で説明したように、上のfor文では、\\n\",\n    \"まず `f` のオブジェクトに対して関数 `iter` が適用されます。\\n\",\n    \"すると `f` のオブジェクト自身が返ります。\\n\",\n    \"そして、このオブジェクトに対して関数 `next` が繰り返し適用されて、\\n\",\n    \"その結果が変数 `line` の値となります。\\n\",\n    \"`StopIteration` のエラーが検知されると、for文が終了します。\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 継承による振舞いの改変\\n\",\n    \"\\n\",\n    \"上で示された、`HelloFileIterator` の `__next__` メソッドでは、`self.readline()` というメソッド呼び出しがありました。\\n\",\n    \"上の例の振舞いから、そのメソッド呼び出しは、`HelloFileIterator` には `readline` メソッドが定義されていないので、親の `HelloFile` を見に行って、そこで定義された `readline` メソッドが使われたように見えます。\\n\",\n    \"しかし、それは正確ではありません。\\n\",\n    \"\\n\",\n    \"`self.readline()` では、その呼び出し場所がどこであるかに関わらず、常にオブジェクト `self` の中のメソッドを探索します。\\n\",\n    \"そして、継承があるために、`__next__(self)` における `self` が、`HelloFileIterator` のインスタンスであるとも限りません。\\n\",\n    \"次を見てみましょう。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"class EmptyFile(HelloFileIterator):\\n\",\n    \"    def readline(self):\\n\",\n    \"        return ''\\n\",\n    \"    \\n\",\n    \"f = EmptyFile(3)\\n\",\n    \"next(f)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"コンストラクタに `3` を与えているので、`HelloFileIterator` と同様に `next` を3回適用できてもよさそうですが、即座に `StopIteration` が生じました。\\n\",\n    \"これは、`__next__(self)` における `self` が、`EmptyFile` のインスタンスであり、`self.readline()` が常に `''` を返すからです。\\n\",\n    \"\\n\",\n    \"このように、継承は、メソッドの部分的な再定義を通じて、再定義されたメソッドを呼び出しているメソッドの振舞いを、間接的に改変することを可能にします。\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 練習\\n\",\n    \"\\n\",\n    \"`'Hello.\\\\n'` ではなくて、初期時に指定された文字列を繰り返し返すように、\\n\",\n    \"新たなクラス `StringFileIterator` を定義してください。\\n\",\n    \"\\n\",\n    \"`StringFileIterator` は `HelloFileIterator` を継承し、\\n\",\n    \"初期化メソッドには、文字列と回数を指定します。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"class StringFileIterator(HelloFileIterator):\\n\",\n    \"    def __init__(self, s, n):\\n\",\n    \"        ...\\n\",\n    \"    ...        \"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"上のセルで解答を作成した後、以下のセルを実行し、実行結果が `True` になることを確認してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {\n    \"tags\": [\n     \"raises-exception\"\n    ]\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"f = StringFileIterator('abc', 3)\\n\",\n    \"print(list(f) == ['abc','abc','abc'])\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## ▲with文への対応\\n\",\n    \"\\n\",\n    \"ここでは詳しく説明しませんが、さらに特殊メソッドである **`__enter__`** と **`__exit__`** を定義すると、\\n\",\n    \"**with文**にも対応できます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"class HelloFileIterator(HelloFile):\\n\",\n    \"    def __enter__(self):\\n\",\n    \"        return self\\n\",\n    \"    def __exit__(self,exception_type,exception_value,traceback):\\n\",\n    \"        pass\\n\",\n    \"    def __next__(self):\\n\",\n    \"        line = self.readline()\\n\",\n    \"        if line == '':\\n\",\n    \"            raise StopIteration\\n\",\n    \"        return line\\n\",\n    \"    def __iter__(self):\\n\",\n    \"        return self\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"with HelloFileIterator(3) as f:\\n\",\n    \"    for line in f:\\n\",\n    \"        print(line)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 練習の解答\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"class StringFileIterator(HelloFileIterator):\\n\",\n    \"    def __init__(self, s, n):\\n\",\n    \"        self.s = s\\n\",\n    \"        self.n = n\\n\",\n    \"    def readline(self):\\n\",\n    \"        if self.n == 0:\\n\",\n    \"            return ''\\n\",\n    \"        self.n = self.n - 1\\n\",\n    \"        return self.s\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": []\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"Python 3\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"name\": \"python\"\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 2\n}\n"
  },
  {
    "path": "colab/6/jugemu.txt",
    "content": "\n寿限無、寿限無、\n五劫の擦り切れ、\n海砂利水魚の、\n水行末・雲来末・風来末、\n食う寝る処に住む処、\nやぶら小路の藪柑子、\nパイポ・パイポ・パイポのシューリンガン、\nシューリンガンのグーリンダイ、\nグーリンダイのポンポコピーのポンポコナーの、\n長久命の長助\n\n"
  },
  {
    "path": "colab/7/7-1.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"##================================================\\n\",\n    \"## このセルを最初に実行せよ---Run this cell first.\\n\",\n    \"##================================================\\n\",\n    \"!wget -P . https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/7/iris.csv\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# 7-1. pandasライブラリ\\n\",\n    \"\\n\",\n    \"pandasライブラリについて説明します。\\n\",\n    \"\\n\",\n    \"参考\\n\",\n    \"\\n\",\n    \"- http://pandas.pydata.org/pandas-docs/stable/getting_started/index.html\\n\",\n    \"- http://pandas.pydata.org/pandas-docs/stable/\\n\",\n    \"\\n\",\n    \"**pandas**ライブラリにはデータ分析作業を支援するためのモジュールが含まれています。以下では、pandasライブラリのモジュールの基本的な使い方について説明します。\\n\",\n    \"\\n\",\n    \"pandasライブラリを使用するには、まず `pandas` モジュールをインポートします。慣例として、同モジュールを `pd` と別名をつけてコードの中で使用します。データの生成に用いるため、ここでは `numpy` モジュールも併せてインポートします。\\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"import pandas as pd\\n\",\n    \"import numpy as np\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## シリーズとデータフレーム\\n\",\n    \"`pandas` モジュールは、リスト、配列や辞書などのデータを**シリーズ** (**`Series`**) あるいは**データフレーム** (**`DataFrame`**) のオブジェクトとして保持します。シリーズは列、データフレームは複数の列で構成されます。シリーズやデータフレームの行は**インデックス** `index` で管理され、インデックスには `0` から始まる番号、または任意のラベルが付けられています。インデックスが番号の場合は、シリーズやデータフレームはそれぞれNumPyの配列、2次元配列とみなすことができます。また、インデックスがラベルの場合は、ラベルをキー、各行を値とした辞書としてシリーズやデータフレームをみなすことができます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## シリーズ (`Series`) の作成\\n\",\n    \"シリーズのオブジェクトは、以下のように、リスト、配列や辞書から作成することができます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"# リストからシリーズの作成\\n\",\n    \"s1 = pd.Series([0,1,2])\\n\",\n    \"print(s1)\\n\",\n    \"\\n\",\n    \"# 配列からシリーズの作成\\n\",\n    \"s2 = pd.Series(np.random.rand(3))\\n\",\n    \"print(s2)\\n\",\n    \"\\n\",\n    \"# 辞書からシリーズの作成\\n\",\n    \"s3 = pd.Series({0:'boo',1:'foo',2:'woo'})\\n\",\n    \"print(s3)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"以下では、シリーズ（列）より一般的なデータフレームの操作と機能について説明していきますが、データフレームオブジェクトの多くの操作や機能はシリーズオブジェクトにも適用できます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## データフレーム (`DataFrame`) の作成\\n\",\n    \"データフレームのオブジェクトは、以下のように、リスト、配列や辞書から作成することができます。行のラベルは、`DataFrame` の `index` 引数で指定できますが、以下のデータフレーム作成の例、`d2`, `d3`、 では同インデックスを省略しているため、`0` から始まるインデックス番号がラベルとして行に自動的に付けられます。列のラベルは `columns` 引数で指定します。辞書からデータフレームを作成する際は、`columns` 引数で列の順番を指定することになります。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"# 多次元リストからデータフレームの作成\\n\",\n    \"d1 = pd.DataFrame([[0,1,2],[3,4,5],[6,7,8],[9,10,11]], index=[10,11,12,13], columns=['c1','c2','c3'])\\n\",\n    \"print(d1)\\n\",\n    \"\\n\",\n    \"# 多次元配列からデータフレームの作成\\n\",\n    \"d2 = pd.DataFrame(np.random.rand(12).reshape(4,3), columns=['c1','c2','c3'])\\n\",\n    \"print(d2)\\n\",\n    \"\\n\",\n    \"# 辞書からデータフレームの作成\\n\",\n    \"d3 = pd.DataFrame({'Initial':['B','F','W'], 'Name':['boo', 'foo', 'woo']}, columns=['Name','Initial'])\\n\",\n    \"print(d3)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## CSVファイルからのデータフレームの作成\\n\",\n    \"`pandas` モジュールの **`read_csv()`** 関数を用いて、以下のように**CSVファイル**を読み込んで、データフレームのオブジェクトを作成することができます。`read_csv()` 関数の `encoding` 引数にはファイルの文字コードを指定します。CSVファイル `iris.csv` には、以下のようにアヤメの種類 (species) と花弁 (petal)・がく片 (sepal) の長さ (length) と幅 (width) のデータが含まれています。\\n\",\n    \"```Python\\n\",\n    \"sepal_length, sepal_width, petal_length, petal_width, species\\n\",\n    \"5.1, 3.5, 1.4, 0.2, setosa\\n\",\n    \"4.9, 3.0, 1.4, 0.2, setosa\\n\",\n    \"4.7, 3.2, 1.3, 0.2, setosa\\n\",\n    \"...\\n\",\n    \"```\\n\",\n    \"**`head()`** メソッドを使うとデータフレームの先頭の複数行を表示させることができます。引数には表示させたい行数を指定し、行数を指定しない場合は、5行分のデータが表示されます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"# CSVファイルの読み込み\\n\",\n    \"iris_d = pd.read_csv('iris.csv')\\n\",\n    \"\\n\",\n    \"# 先頭10行のデータを表示\\n\",\n    \"iris_d.head(10)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"データフレームオブジェクトの **`index`** 属性により、データフレームのインデックスの情報が確認できます。`len()` 関数を用いると、データフレームの行数が取得できます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"print(iris_d.index) #インデックスの情報\\n\",\n    \"len(iris_d.index) #インデックスの長さ\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## データの参照\\n\",\n    \"シリーズやデータフレームでは、行の位置（行は `0` から始まります）を**スライス**として指定することで任意の行を抽出することができます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"# データフレームの先頭5行のデータ\\n\",\n    \"iris_d[:5]\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"# データフレームの終端5行のデータ\\n\",\n    \"iris_d[-5:]\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"データフレームから任意の列を抽出するには、`DataFrame.列名` のように、データフレームオブジェクトに `.` で列名をつなげることで、その列を指定してシリーズオブジェクトとして抽出することができます。なお、列名を文字列として、`DataFrame['列名']` のように添字指定しても同様です。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"# データフレームの'species'の列の先頭10行のデータ\\n\",\n    \"iris_d['species'].head(10)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"データフレームの添字として、列名のリストを指定すると複数の列をデータフレームオブジェクトとして抽出することができます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"# データフレームの'sepal_length'とspecies'の列の先頭10行のデータ\\n\",\n    \"iris_d[['sepal_length','species']].head(10)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### `iloc` と `loc`\\n\",\n    \"データフレームオブジェクトの **`iloc`** 属性を用いると、NumPyの多次元配列のスライスと同様に、行と列の位置を指定して任意の行と列を抽出することができます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"# データフレームの2行のデータ\\n\",\n    \"iris_d.iloc[1]\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"# データフレームの2行,2列目のデータ\\n\",\n    \"iris_d.iloc[1, 1]\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"# データフレームの1から5行目と1から2列目のデータ\\n\",\n    \"iris_d.iloc[0:5, 0:2]\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"データフレームオブジェクトの **`loc`** 属性を用いると、抽出したい行のインデックス・ラベルや列のラベルを指定して任意の行と列を抽出することができます。複数のラベルはリストで指定します。行のインデックスは各行に割り当てられた番号で、`iloc` で指定する行の位置とは必ずしも一致しないことに注意してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"# データフレームの行インデックス5のデータ\\n\",\n    \"iris_d.loc[5]\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"# データフレームの行インデックス5と'sepal_length'と列のデータ\\n\",\n    \"iris_d.loc[5, 'sepal_length']\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"# データフレームの行インデックス1から5と'sepal_length'とspecies'の列のデータ\\n\",\n    \"iris_d.loc[1:5, ['sepal_length','species']]\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## データの条件取り出し\\n\",\n    \"データフレームの列の指定と併せて条件を指定することで、条件にあった行からなるデータフレームを抽出することができます。NumPyの多次元配列の**真理値配列によるインデックスアクセス**と同様に、条件式のブール演算では、`and`, `or`, `not` の代わりに `&`, `|`, `~` を用います。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"# データフレームの'sepal_length'列の値が7より大きく、'species'列の値が3より小さいデータ\\n\",\n    \"iris_d[(iris_d['sepal_length'] > 7.0) & (iris_d['sepal_width'] < 3.0)]\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 列の追加と削除\\n\",\n    \"データフレームに列を追加する場合は、以下のように、追加したい新たな列名を指定し、値を代入すると新たな列を追加できます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"# データフレームに'mycolumn'という列を追加\\n\",\n    \"iris_d['mycolumn']=np.random.rand(len(iris_d.index))\\n\",\n    \"iris_d.head(10)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"**`del`** 文を用いると、以下のようにデータフレームから任意の列を削除できます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"# データフレームから'mycolumn'という列を削除\\n\",\n    \"del iris_d['mycolumn']\\n\",\n    \"iris_d.head(10)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"**`assign()`** メソッドを用いると、追加したい列名とその値を指定することで、以下のように新たな列を追加したデータフレームを新たに作成することができます。この際、元のデータフレームは変更されないことに注意してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"# データフレームに'mycolumn'という列を追加し新しいデータフレームを作成\\n\",\n    \"myiris1 = iris_d.assign(mycolumn=np.random.rand(len(iris_d.index)))\\n\",\n    \"myiris1.head(5)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"**`drop()`** メソッドを用いると、削除したい列名を指定することで、以下のように任意の列を削除したデータフレームを新たに作成することができます。列を削除する場合は、**`axis`** 引数に `1` を指定します。この際、元のデータフレームは変更されないことに注意してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"# データフレームから'mycolumn'という列を削除し、新しいデータフレームを作成\\n\",\n    \"myiris2 = myiris1.drop('mycolumn',axis=1)\\n\",\n    \"myiris2.head(5)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 行の追加と削除\\n\",\n    \"`pandas` モジュールの **`concat()`** 関数を用いると、データフレームに新たな行を追加することができます。以下では、`iris_d` データフレームの最終行に新たな行を追加しています。`ignore_index` 引数を `True` にすると追加した行に新たなインデックス番号がつけられます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"# 追加する行のデータフレーム\\n\",\n    \"row = pd.DataFrame([[1,1,1,1, 'setosa']], columns=iris_d.columns)\\n\",\n    \"\\n\",\n    \"# データフレームに行を追加し新しいデータフレームを作成\\n\",\n    \"myiris4 = pd.concat([iris_d, row], ignore_index=True)\\n\",\n    \"myiris4[-2:]\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"**`drop()`** メソッドを用いると、行のインデックスまたはラベルを指定することで行を削除することもできます。このときに、`axis` 引数は省略することができます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"# データフレームから行インデックス150の行を削除し、新しいデータフレームを作成\\n\",\n    \"myiris4 = myiris4.drop(150)\\n\",\n    \"myiris4[-2:]\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## データの並び替え\\n\",\n    \"データフレームオブジェクトの **`sort_index()`** メソッドで、データフレームのインデックスに基づくソートができます。また、**`sort_values()`** メソッドで、任意の列の値によるソートができます。列は複数指定することもできます。いずれのメソッドでも、**`inplace`** 引数により、ソートにより新しいデータフレームを作成する (`False`) か、元のデータフレームを更新する (`True`) を指定できます。デフォルトは `inplace` は `False` になっており、これらのメソッドは新しいデータフレームを作成します。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"# iris_dデータフレームの4つ列の値に基づいて昇順にソート\\n\",\n    \"sorted_iris = iris_d.sort_values(['sepal_length', 'sepal_width', 'petal_length', 'petal_width'])\\n\",\n    \"sorted_iris.head(10)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"列の値で降順にソートする場合は、`sort_values()` メソッドの **`ascending`** 引数を `False` にしてください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"# iris_dデータフレームの4つ列の値に基づいて降順にソート\\n\",\n    \"sorted_iris = iris_d.sort_values(['sepal_length', 'sepal_width', 'petal_length', 'petal_width'],ascending=False)\\n\",\n    \"sorted_iris.head(10)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## データの統計量\\n\",\n    \"データフレームオブジェクトの **`describe()`** メソッドで、データフレームの各列の要約統計量を求めることができます。要約統計量には平均、標準偏差、最大値、最小値などが含まれます。その他の統計量を求める `pandas` モジュールのメソッドは以下を参照してください。\\n\",\n    \"\\n\",\n    \"[pandasでの統計量計算](https://pandas.pydata.org/pandas-docs/stable/reference/frame.html#computations-descriptive-stats)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"# iris_dデータフレームの各数値列の要約統計量を表示\\n\",\n    \"iris_d.describe()\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## ▲データの連結\\n\",\n    \"`pandas` モジュールの **`concat()`** 関数を用いると、データフレームを連結して新たなデータフレームを作成することができます。以下では、`iris_d` データフレームの先頭5行と最終5行を連結して、新しいデータフレームを作成しています。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"# iris_dデータフレームの先頭5行と最終5行を連結\\n\",\n    \"concat_iris = pd.concat([iris_d[:5],iris_d[-5:]])\\n\",\n    \"concat_iris\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"`concat()` 関数の `axis` 引数に `1` を指定すると、以下のように、データフレームを列方向に連結することができます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"# iris_dデータフレームの'sepal_length'列と'species'列を連結\\n\",\n    \"sepal_len = pd.concat([iris_d.loc[:, ['sepal_length']],iris_d.loc[:, ['species']]], axis=1)\\n\",\n    \"sepal_len.head(10)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## ▲データの結合\\n\",\n    \"`pandas` モジュールの **`merge()`** 関数を用いると、任意の列の値をキーとして異なるデータフレームを結合することができます。結合のキーとする列名は **`on`** 引数で指定します。以下では、`species` の列の値をキーに、2つのデータフレーム、`sepal_len`, `sepal_wid`、を結合して新しいデータフレーム `sepal` を作成しています。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"# 'sepal_length'と'species'列からなる3行のデータ\\n\",\n    \"sepal_len = pd.concat([iris_d.loc[[0,51,101],['sepal_length']],iris_d.loc[[0,51,101], ['species']]], axis=1)\\n\",\n    \"# 'sepal_width'と'species'列からなる3行のデータ\\n\",\n    \"sepal_wid = pd.concat([iris_d.loc[[0,51,101],['sepal_width']],iris_d.loc[[0,51,101], ['species']]], axis=1)\\n\",\n    \"\\n\",\n    \"# sepal_lenとsepal_widを'species'をキーにして結合\\n\",\n    \"sepal = pd.merge(sepal_len, sepal_wid, on='species')\\n\",\n    \"sepal\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## ▲データのグループ化\\n\",\n    \"データフレームオブジェクトの **`groupby()`** メソッドを使うと、データフレームの任意の列の値に基づいて、同じ値を持つ行をグループにまとめることができます。列は複数指定することもできます。`groupby()` メソッドを適用するとグループ化オブジェクト (`DataFrameGroupBy`) が作成されますが、データフレームと同様の操作を多く適用することができます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"# iris_dデータフレームの'species'の値で行をグループ化\\n\",\n    \"iris_d.groupby('species')\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"# グループごとの先頭5行を表示\\n\",\n    \"iris_d.groupby('species').head(5)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"# グループごとの'sepal_length'列,'sepal_width'列の値の平均を表示\\n\",\n    \"iris_d.groupby('species')[['sepal_length','sepal_width']].mean()\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## ▲欠損値、時系列データの処理\\n\",\n    \"pandasでは、データ分析における欠損値、時系列データの処理を支援するための便利な機能が提供されています。詳細は以下を参照してください。\\n\",\n    \"\\n\",\n    \"[欠損値の処理](https://pandas.pydata.org/pandas-docs/stable/missing_data.html#missing-data)\\n\",\n    \"\\n\",\n    \"[時系列データの処理](https://pandas.pydata.org/pandas-docs/stable/timeseries.html)\"\n   ]\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"Python 3 (ipykernel)\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"codemirror_mode\": {\n    \"name\": \"ipython\",\n    \"version\": 3\n   },\n   \"file_extension\": \".py\",\n   \"mimetype\": \"text/x-python\",\n   \"name\": \"python\",\n   \"nbconvert_exporter\": \"python\",\n   \"pygments_lexer\": \"ipython3\",\n   \"version\": \"3.12.4\"\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 4\n}\n"
  },
  {
    "path": "colab/7/7-2.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"##================================================\\n\",\n    \"## このセルを最初に実行せよ---Run this cell first.\\n\",\n    \"##================================================\\n\",\n    \"!wget -P . https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/7/iris.csv\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# 7-2. scikit-learnライブラリ\\n\",\n    \"\\n\",\n    \"scikit-learnライブラリについて説明します。\\n\",\n    \"\\n\",\n    \"参考\\n\",\n    \"\\n\",\n    \"- https://scikit-learn.org/stable/tutorial/index.html\\n\",\n    \"- https://scikit-learn.org/stable/getting_started.html\\n\",\n    \"\\n\",\n    \"機械学習の各手法の詳細については以下を参考にしてください\\n\",\n    \"\\n\",\n    \"- https://elf-c.he.u-tokyo.ac.jp/courses/364 （線形回帰）\\n\",\n    \"- https://elf-c.he.u-tokyo.ac.jp/courses/365 （ロジスティック回帰)\\n\",\n    \"- https://elf-c.he.u-tokyo.ac.jp/courses/360 （クラスタリング）\\n\",\n    \"- https://elf-c.he.u-tokyo.ac.jp/courses/363 （次元削減（主成分分析））\\n\",\n    \"\\n\",\n    \"**scikit-learn**ライブラリには分類、回帰、クラスタリング、次元削減、前処理、モデル選択などの機械学習の処理を行うためのモジュールが含まれています。以下では、scikit-learnライブラリのモジュールの基本的な使い方について説明します。\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 機械学習について\\n\",\n    \"**機械学習**では、観察されたデータをよく表すようにモデルのパラメータの調整を行います。パラメータを調整することでモデルをデータに適合させるので、「学習」と呼ばれます。学習されたモデルを使って、新たに観測されたデータに対して予測を行うことが可能になります。\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 教師あり学習\\n\",\n    \"機械学習において、観測されたデータの特徴（特徴量）に対して、そのデータに関するラベルが存在する時、**教師あり学習**と呼びます。教師あり学習では、ラベルを教師として、データからそのラベルを予測するようなモデルを学習することになります。この時、ラベルが連続値であれば回帰、ラベルが離散値であれば分類の問題となります。\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 教師なし学習\\n\",\n    \"ラベルが存在せず、観測されたデータの特徴のみからそのデータセットの構造やパターンをよく表すようなモデルを学習することを**教師なし学習**と呼びます。クラスタリングや次元削減は教師なし学習です。クラスタリングでは、観測されたデータをクラスタと呼ばれる集合にグループ分けします。次元削減では、データの特徴をより簡潔に（低い次元で）表現します。\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## データ\\n\",\n    \"機械学習に用いるデータセットは、データフレームあるいは2次元の配列として表すことができます。行はデータセットの個々のデータを表し、列はデータが持つ特徴を表します。以下では、例として `pandas` モジュールの説明で用いたアイリスデータセットを表示しています。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"import pandas as pd\\n\",\n    \"iris = pd.read_csv('iris.csv')\\n\",\n    \"iris.head(5)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"データセットの各行は1つの花のデータに対応しており、行数はデータセットの花データの総数を表します。また、1列目から4列目までの各列は花の特徴（特徴量）に対応しています。scikit-learnでは、このデータと**特徴量**からなる2次元配列（行列）をNumPy配列または `pandas` のデータフレームに格納し、入力データとして処理します。5列目は、教師あり学習におけるデータのラベルに対応しており、ここでは各花データの花の種類（全部で3種類）を表しています。ラベルは通常1次元でデータの数だけの長さを持ち、NumPy配列または `pandas` のシリーズに格納します。先に述べた通り、ラベルが連続値であれば回帰、ラベルが離散値であれば分類の問題となります。機械学習では、特徴量からこのラベルを予測することになります。\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"アイリスデータセットはscikit-learnが持つデータセットにも含まれており、`load_iris` 関数によりアイリスデータセットの特徴量データとラベルデータを以下のようにNumPyの配列として取得することもできます。この時、ラベルは数値 (`0`, `1`, `2`) に置き換えられています。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"from sklearn.datasets import load_iris\\n\",\n    \"iris = load_iris()\\n\",\n    \"X_iris = iris.data\\n\",\n    \"y_iris = iris.target\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## モデル学習の基礎\\n\",\n    \"\\n\",\n    \"scikit-learnでは、以下の手順でデータからモデルの学習を行います。\\n\",\n    \"\\n\",\n    \"- 使用するモデルのクラスの選択\\n\",\n    \"- モデルのハイパーパラメータの選択とインスタンス化\\n\",\n    \"- データの準備\\n\",\n    \"    - 教師あり学習では、特徴量データとラベルデータを準備\\n\",\n    \"    - 教師あり学習では、特徴量・ラベルデータをモデル学習用の訓練データとモデル評価用のテストデータに分ける\\n\",\n    \"    - 教師なし学習では、特徴量データを準備\\n\",\n    \"- モデルをデータに適合（`fit()` メソッド）\\n\",\n    \"- モデルの評価\\n\",\n    \"    - 教師あり学習では、`predict()` メソッドを用いてテストデータの特徴量データからラベルデータを予測しその精度の評価を行う\\n\",\n    \"    - 教師なし学習では、`transform()` または `predict()` メソッドを用いて特徴量データのクラスタリングや次元削減などを行う\\n\",\n    \"\\n\",\n    \"## 教師あり学習・分類の例\\n\",\n    \"\\n\",\n    \"以下では、アイリスデータセットを用いて花の4つの特徴から3つの花の種類を分類する手続きを示しています。scikit-learnでは、全てのモデルはPythonクラスとして実装されており、ここでは分類を行うモデルの1つである**ロジスティック回帰** (**`LogisticRegression`**) クラスをインポートしています。\\n\",\n    \"\\n\",\n    \"[LogisticRegressionクラス](https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html)\\n\",\n    \"\\n\",\n    \"`train_test_split()` はデータセットを訓練データとテストデータに分割するための関数、`accuracy_score()` はモデルの予測精度を評価するための関数です。\\n\",\n    \"\\n\",\n    \"特徴量データ (`X_irist`) とラベルデータ (`y_iris`) からなるデータセットを訓練データ (`X_train`, `y_train`) とテストデータ (`X_test`, `y_test`) に分割しています。ここでは、`train_test_split()` 関数の `test_size` 引数にデータセットの30%をテストデータとすることを指定しています。また、`stratify` 引数にラベルデータを指定することで、訓練データとテストデータ、それぞれでラベルの分布が同じになるようにしています。\\n\",\n    \"\\n\",\n    \"ロジスティック回帰クラスのインスタンスを作成し、**`fit()`** メソッドによりモデルを訓練データに適合させています。そして、**`predict()`** メソッドを用いてテストデータの特徴量データ (`X_test`) のラベルを予測し、`accuracy_score()` 関数で実際のラベルデータ (`y_test`) と比較して予測精度の評価を行なっています。97%の精度で花の4つの特徴から3つの花の種類を分類できていることがわかります。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"from sklearn.linear_model import LogisticRegression\\n\",\n    \"from sklearn.model_selection import train_test_split\\n\",\n    \"from sklearn.metrics import accuracy_score\\n\",\n    \"from sklearn.datasets import load_iris\\n\",\n    \"\\n\",\n    \"iris = load_iris()\\n\",\n    \"X_iris = iris.data # 特徴量データ\\n\",\n    \"y_iris = iris.target # ラベルデータ\\n\",\n    \"\\n\",\n    \"# 訓練データとテストデータに分割\\n\",\n    \"X_train, X_test, y_train, y_test = train_test_split(X_iris, y_iris, test_size=0.3, random_state=1, stratify=y_iris)\\n\",\n    \"\\n\",\n    \"# ロジスティック回帰モデル：solver引数には最適化手法を指定\\n\",\n    \"model=LogisticRegression(solver='lbfgs')\\n\",\n    \"\\n\",\n    \"model.fit(X_train, y_train) # モデルを訓練データに適合\\n\",\n    \"y_predicted=model.predict(X_test) # テストデータでラベルを予測\\n\",\n    \"accuracy_score(y_test, y_predicted) # 予測精度（accuracy）の評価\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 練習\\n\",\n    \"アイリスデータセットの2つの特徴量、`petal_length` と ` petal_width`、から2つの花の種類、`versicolor` か `virginica`、を予測するモデルをロジスティック回帰を用いて学習し、その予測精度を評価してください。以下では `pandas` データフレームの `values` 属性を用いてNumPy配列を取得しています。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"from sklearn.linear_model import LogisticRegression\\n\",\n    \"from sklearn.model_selection import train_test_split\\n\",\n    \"from sklearn.metrics import accuracy_score\\n\",\n    \"\\n\",\n    \"iris = pd.read_csv('iris.csv')\\n\",\n    \"iris2=iris[(iris['species']=='versicolor')|(iris['species']=='virginica')]\\n\",\n    \"X_iris=iris2[['petal_length','petal_width']].values\\n\",\n    \"y_iris=iris2['species'].values\\n\",\n    \"\\n\",\n    \"###  your code here\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"上記のコードが完成したら、以下のコードを実行して、2つの特徴量、`petal_length` と `petal_width`、から2つの花の種類、`versicolor` か `virginica`、を分類するための決定境界を可視化してみてください。`model` は上記の練習で学習されたモデルとします。決定境界は、学習の結果得られた、特徴量の空間においてラベル（クラス）間を分離する境界を表しています。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"import numpy as np\\n\",\n    \"import matplotlib.pyplot as plt\\n\",\n    \"%matplotlib inline\\n\",\n    \" \\n\",\n    \"w2 = model.coef_[0,1]\\n\",\n    \"w1 = model.coef_[0,0]\\n\",\n    \"w0 = model.intercept_[0]\\n\",\n    \"\\n\",\n    \"line=np.linspace(3,7)\\n\",\n    \"plt.plot(line, -(w1*line+w0)/w2)\\n\",\n    \"y_c = (y_iris=='versicolor').astype(int)\\n\",\n    \"plt.scatter(iris2['petal_length'],iris2['petal_width'],c=y_c);\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 教師あり学習・回帰の例\\n\",\n    \"以下では、アイリスデータセットを用いて花の特徴の1つ、`petal_length`、からもう1つの特徴、`petal_width`、を回帰する手続きを示しています。この時、`petal_length` は特徴量、`petal_width` は連続値のラベルとなっています。まず、`matplotlib` の散布図を用いて `petal_length` と `petal_width` の関係を可視化してみましょう。関係があるといえそうでしょうか。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"iris = pd.read_csv('iris.csv')\\n\",\n    \"X=iris[['petal_length']].values\\n\",\n    \"y=iris['petal_width'].values\\n\",\n    \"plt.scatter(X,y);\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"次に、回帰を行うモデルの1つである**線形回帰** (**`LinearRegression`**) クラスをインポートしています。\\n\",\n    \"\\n\",\n    \"[LinearRegressionクラス](https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LinearRegression.html)\\n\",\n    \"\\n\",\n    \"`mean_squared_error()` は平均二乗誤差によりモデルの予測精度を評価するための関数です。\\n\",\n    \"\\n\",\n    \"データセットを訓練データ (`X_train`, `y_train`) とテストデータ (`X_test`, `y_test`) に分割し、線形回帰クラスのインスタンスの `fit()` メソッドによりモデルを訓練データに適合させています。そして、`predict()` メソッドを用いてテストデータの `petal_length` の値から `petal_width` の値を予測し、`mean_squared_error()` 関数で実際の `petal_widthの値` (`y_test`) と比較して予測精度の評価を行なっています。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"from sklearn.linear_model import LinearRegression\\n\",\n    \"from sklearn.metrics import mean_squared_error\\n\",\n    \"\\n\",\n    \"# 訓練データとテストデータに分割\\n\",\n    \"X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=1)\\n\",\n    \"\\n\",\n    \"model=LinearRegression() # 線形回帰モデル\\n\",\n    \"model.fit(X_train,y_train) # モデルを訓練データに適合\\n\",\n    \"y_predicted=model.predict(X_test) # テストデータで予測\\n\",\n    \"mean_squared_error(y_test,y_predicted) # 予測精度（平均二乗誤差）の評価\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"以下では、線形回帰モデルにより学習された `petal_length` と `petal_width` の関係を表す回帰式を可視化しています。学習された回帰式が実際のデータに適合していることがわかります。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"x_plot=np.linspace(1,7)\\n\",\n    \"X_plot=x_plot[:,np.newaxis]\\n\",\n    \"y_plot=model.predict(X_plot)\\n\",\n    \"plt.scatter(X,y)\\n\",\n    \"plt.plot(x_plot,y_plot);\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 教師なし学習・クラスタリングの例\\n\",\n    \"以下では、アイリスデータセットを用いて花の2つの特徴量、`petal_lenghとpetal_width`、を元に花のデータをクラスタリングする手続きを示しています。ここでは**クラスタリング**を行うモデルの1つである **`KMeans`** クラスをインポートしています。\\n\",\n    \"\\n\",\n    \"[KMeansクラス](https://scikit-learn.org/stable/modules/generated/sklearn.cluster.KMeans.html)\\n\",\n    \"\\n\",\n    \"特徴量データ (`X_irist`) を用意し、引数 `n_clusters` にハイパーパラメータとしてクラスタ数、ここでは `3`、を指定して `KMeans` クラスのインスタンスを作成しています。そして、`fit()` メソッドによりモデルをデータに適合させ、`predict()` メソッドを用いて各データが所属するクラスタの情報 (`y_km`) を取得しています。\\n\",\n    \"\\n\",\n    \"学習された各花データのクラスタ情報を元のデータセットのデータフレームに列として追加し、クラスタごとに異なる色でデータセットを可視化しています。2つの特徴量、`petal_lengh` と `petal_width`、に基づき、3つのクラスタが得られていることがわかります。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"from sklearn.cluster import KMeans\\n\",\n    \"\\n\",\n    \"iris = pd.read_csv('iris.csv')\\n\",\n    \"X_iris=iris[['petal_length', 'petal_width']].values\\n\",\n    \"\\n\",\n    \"model = KMeans(n_clusters=3) # k-meansモデル\\n\",\n    \"model.fit(X_iris) # モデルをデータに適合\\n\",\n    \"y_km=model.predict(X_iris) # クラスタを予測\\n\",\n    \"\\n\",\n    \"iris['cluster']=y_km\\n\",\n    \"iris.plot.scatter(x='petal_length', y='petal_width', c='cluster', colormap='viridis');\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"3つのクラスタと3つの花の種類の分布を2つの特徴量、`petal_lengh` と `petal_width`、の空間で比較してみると、クラスタと花の種類には対応があり、2つの特徴量から花の種類をクラスタとしてグループ分けできていることがわかります。以下では可視化に `seaborn` モジュールを用いています。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"import seaborn as sns\\n\",\n    \"sns.lmplot(x='petal_length',y='petal_width',hue='cluster',data=iris,fit_reg=False);\\n\",\n    \"sns.lmplot(x='petal_length',y='petal_width',hue='species',data=iris,fit_reg=False);\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 練習\\n\",\n    \"アイリスデータセットの2つの特徴量、`sepal_length` と `sepal_width`、を元に、`KMeans` モデルを用いて花のデータをクラスタリングしてください。クラスタの数は任意に設定してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"from sklearn.cluster import KMeans\\n\",\n    \"import pandas as pd\\n\",\n    \"import matplotlib.pyplot as plt\\n\",\n    \"%matplotlib inline\\n\",\n    \"\\n\",\n    \"iris = pd.read_csv('iris.csv')\\n\",\n    \"X_iris=iris[['sepal_length', 'sepal_width']].values\\n\",\n    \"\\n\",\n    \"### your code here\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 教師なし学習・次元削減の例\\n\",\n    \"以下では、アイリスデータセットを用いて花の4つの特徴量を元に花のデータを**次元削減**する手続きを示しています。ここでは次元削減を行うモデルの1つである **`PCA`** クラスをインポートしています。\\n\",\n    \"\\n\",\n    \"[PCAクラス](https://scikit-learn.org/stable/modules/generated/sklearn.decomposition.PCA.html)\\n\",\n    \"\\n\",\n    \"特徴量データ (`X_irist`) を用意し、引数 `n_components` にハイパーパラメータとして削減後の次元数、ここでは `2`、を指定して `PCA` クラスのインスタンスを作成しています。そして、`fit()` メソッドによりモデルをデータに適合させ、**`transform()`** メソッドを用いて4つの特徴量を2次元に削減した特徴量データ (`X_2d`) を取得しています。\\n\",\n    \"\\n\",\n    \"学習された各次元の値を元のデータセットのデータフレームに列として追加し、データセットを削減して得られた次元の空間において、データセットを花の種類ごとに異なる色で可視化しています。削減された次元の空間において、花の種類をグループ分けできていることがわかります。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"from sklearn.decomposition import PCA\\n\",\n    \"\\n\",\n    \"iris = pd.read_csv('iris.csv')\\n\",\n    \"X_iris=iris[['sepal_length', 'sepal_width', 'petal_length', 'petal_width']].values\\n\",\n    \"\\n\",\n    \"model = PCA(n_components=2) # PCAモデル\\n\",\n    \"model.fit(X_iris) # モデルをデータに適合\\n\",\n    \"X_2d=model.transform(X_iris) # 次元削減\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"import seaborn as sns\\n\",\n    \"iris['pca1']=X_2d[:,0]\\n\",\n    \"iris['pca2']=X_2d[:,1]\\n\",\n    \"sns.lmplot(x='pca1',y='pca2',hue='species',data=iris,fit_reg=False);\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 練習の解答例\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"from sklearn.linear_model import LogisticRegression\\n\",\n    \"from sklearn.model_selection import train_test_split\\n\",\n    \"from sklearn.metrics import accuracy_score\\n\",\n    \"\\n\",\n    \"iris = pd.read_csv('iris.csv')\\n\",\n    \"iris2=iris[(iris['species']=='versicolor')|(iris['species']=='virginica')]\\n\",\n    \"X_iris=iris2[['petal_length','petal_width']].values\\n\",\n    \"y_iris=iris2['species'].values\\n\",\n    \"\\n\",\n    \"X_train, X_test, y_train, y_test = train_test_split(X_iris, y_iris, test_size=0.3, random_state=1, stratify=y_iris)\\n\",\n    \"\\n\",\n    \"model=LogisticRegression(solver='lbfgs')\\n\",\n    \"model.fit(X_train, y_train)\\n\",\n    \"y_model=model.predict(X_test)\\n\",\n    \"accuracy_score(y_test, y_model)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"from sklearn.cluster import KMeans\\n\",\n    \"import pandas as pd\\n\",\n    \"import matplotlib.pyplot as plt\\n\",\n    \"%matplotlib inline\\n\",\n    \"\\n\",\n    \"iris = pd.read_csv('iris.csv')\\n\",\n    \"X_iris=iris[['sepal_length', 'sepal_width']].values\\n\",\n    \"\\n\",\n    \"model = KMeans(n_clusters=3)\\n\",\n    \"model.fit(X_iris)\\n\",\n    \"y_km=model.predict(X_iris)\\n\",\n    \"\\n\",\n    \"iris['cluster']=y_km\\n\",\n    \"iris.plot.scatter(x='sepal_length', y='sepal_width', c='cluster', colormap='viridis');\"\n   ]\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"Python 3 (ipykernel)\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"codemirror_mode\": {\n    \"name\": \"ipython\",\n    \"version\": 3\n   },\n   \"file_extension\": \".py\",\n   \"mimetype\": \"text/x-python\",\n   \"name\": \"python\",\n   \"nbconvert_exporter\": \"python\",\n   \"pygments_lexer\": \"ipython3\",\n   \"version\": \"3.12.4\"\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 4\n}\n"
  },
  {
    "path": "colab/7/iris.csv",
    "content": "sepal_length,sepal_width,petal_length,petal_width,species\n5.1,3.5,1.4,0.2,setosa\n4.9,3,1.4,0.2,setosa\n4.7,3.2,1.3,0.2,setosa\n4.6,3.1,1.5,0.2,setosa\n5,3.6,1.4,0.2,setosa\n5.4,3.9,1.7,0.4,setosa\n4.6,3.4,1.4,0.3,setosa\n5,3.4,1.5,0.2,setosa\n4.4,2.9,1.4,0.2,setosa\n4.9,3.1,1.5,0.1,setosa\n5.4,3.7,1.5,0.2,setosa\n4.8,3.4,1.6,0.2,setosa\n4.8,3,1.4,0.1,setosa\n4.3,3,1.1,0.1,setosa\n5.8,4,1.2,0.2,setosa\n5.7,4.4,1.5,0.4,setosa\n5.4,3.9,1.3,0.4,setosa\n5.1,3.5,1.4,0.3,setosa\n5.7,3.8,1.7,0.3,setosa\n5.1,3.8,1.5,0.3,setosa\n5.4,3.4,1.7,0.2,setosa\n5.1,3.7,1.5,0.4,setosa\n4.6,3.6,1,0.2,setosa\n5.1,3.3,1.7,0.5,setosa\n4.8,3.4,1.9,0.2,setosa\n5,3,1.6,0.2,setosa\n5,3.4,1.6,0.4,setosa\n5.2,3.5,1.5,0.2,setosa\n5.2,3.4,1.4,0.2,setosa\n4.7,3.2,1.6,0.2,setosa\n4.8,3.1,1.6,0.2,setosa\n5.4,3.4,1.5,0.4,setosa\n5.2,4.1,1.5,0.1,setosa\n5.5,4.2,1.4,0.2,setosa\n4.9,3.1,1.5,0.1,setosa\n5,3.2,1.2,0.2,setosa\n5.5,3.5,1.3,0.2,setosa\n4.9,3.1,1.5,0.1,setosa\n4.4,3,1.3,0.2,setosa\n5.1,3.4,1.5,0.2,setosa\n5,3.5,1.3,0.3,setosa\n4.5,2.3,1.3,0.3,setosa\n4.4,3.2,1.3,0.2,setosa\n5,3.5,1.6,0.6,setosa\n5.1,3.8,1.9,0.4,setosa\n4.8,3,1.4,0.3,setosa\n5.1,3.8,1.6,0.2,setosa\n4.6,3.2,1.4,0.2,setosa\n5.3,3.7,1.5,0.2,setosa\n5,3.3,1.4,0.2,setosa\n7,3.2,4.7,1.4,versicolor\n6.4,3.2,4.5,1.5,versicolor\n6.9,3.1,4.9,1.5,versicolor\n5.5,2.3,4,1.3,versicolor\n6.5,2.8,4.6,1.5,versicolor\n5.7,2.8,4.5,1.3,versicolor\n6.3,3.3,4.7,1.6,versicolor\n4.9,2.4,3.3,1,versicolor\n6.6,2.9,4.6,1.3,versicolor\n5.2,2.7,3.9,1.4,versicolor\n5,2,3.5,1,versicolor\n5.9,3,4.2,1.5,versicolor\n6,2.2,4,1,versicolor\n6.1,2.9,4.7,1.4,versicolor\n5.6,2.9,3.6,1.3,versicolor\n6.7,3.1,4.4,1.4,versicolor\n5.6,3,4.5,1.5,versicolor\n5.8,2.7,4.1,1,versicolor\n6.2,2.2,4.5,1.5,versicolor\n5.6,2.5,3.9,1.1,versicolor\n5.9,3.2,4.8,1.8,versicolor\n6.1,2.8,4,1.3,versicolor\n6.3,2.5,4.9,1.5,versicolor\n6.1,2.8,4.7,1.2,versicolor\n6.4,2.9,4.3,1.3,versicolor\n6.6,3,4.4,1.4,versicolor\n6.8,2.8,4.8,1.4,versicolor\n6.7,3,5,1.7,versicolor\n6,2.9,4.5,1.5,versicolor\n5.7,2.6,3.5,1,versicolor\n5.5,2.4,3.8,1.1,versicolor\n5.5,2.4,3.7,1,versicolor\n5.8,2.7,3.9,1.2,versicolor\n6,2.7,5.1,1.6,versicolor\n5.4,3,4.5,1.5,versicolor\n6,3.4,4.5,1.6,versicolor\n6.7,3.1,4.7,1.5,versicolor\n6.3,2.3,4.4,1.3,versicolor\n5.6,3,4.1,1.3,versicolor\n5.5,2.5,4,1.3,versicolor\n5.5,2.6,4.4,1.2,versicolor\n6.1,3,4.6,1.4,versicolor\n5.8,2.6,4,1.2,versicolor\n5,2.3,3.3,1,versicolor\n5.6,2.7,4.2,1.3,versicolor\n5.7,3,4.2,1.2,versicolor\n5.7,2.9,4.2,1.3,versicolor\n6.2,2.9,4.3,1.3,versicolor\n5.1,2.5,3,1.1,versicolor\n5.7,2.8,4.1,1.3,versicolor\n6.3,3.3,6,2.5,virginica\n5.8,2.7,5.1,1.9,virginica\n7.1,3,5.9,2.1,virginica\n6.3,2.9,5.6,1.8,virginica\n6.5,3,5.8,2.2,virginica\n7.6,3,6.6,2.1,virginica\n4.9,2.5,4.5,1.7,virginica\n7.3,2.9,6.3,1.8,virginica\n6.7,2.5,5.8,1.8,virginica\n7.2,3.6,6.1,2.5,virginica\n6.5,3.2,5.1,2,virginica\n6.4,2.7,5.3,1.9,virginica\n6.8,3,5.5,2.1,virginica\n5.7,2.5,5,2,virginica\n5.8,2.8,5.1,2.4,virginica\n6.4,3.2,5.3,2.3,virginica\n6.5,3,5.5,1.8,virginica\n7.7,3.8,6.7,2.2,virginica\n7.7,2.6,6.9,2.3,virginica\n6,2.2,5,1.5,virginica\n6.9,3.2,5.7,2.3,virginica\n5.6,2.8,4.9,2,virginica\n7.7,2.8,6.7,2,virginica\n6.3,2.7,4.9,1.8,virginica\n6.7,3.3,5.7,2.1,virginica\n7.2,3.2,6,1.8,virginica\n6.2,2.8,4.8,1.8,virginica\n6.1,3,4.9,1.8,virginica\n6.4,2.8,5.6,2.1,virginica\n7.2,3,5.8,1.6,virginica\n7.4,2.8,6.1,1.9,virginica\n7.9,3.8,6.4,2,virginica\n6.4,2.8,5.6,2.2,virginica\n6.3,2.8,5.1,1.5,virginica\n6.1,2.6,5.6,1.4,virginica\n7.7,3,6.1,2.3,virginica\n6.3,3.4,5.6,2.4,virginica\n6.4,3.1,5.5,1.8,virginica\n6,3,4.8,1.8,virginica\n6.9,3.1,5.4,2.1,virginica\n6.7,3.1,5.6,2.4,virginica\n6.9,3.1,5.1,2.3,virginica\n5.8,2.7,5.1,1.9,virginica\n6.8,3.2,5.9,2.3,virginica\n6.7,3.3,5.7,2.5,virginica\n6.7,3,5.2,2.3,virginica\n6.3,2.5,5,1.9,virginica\n6.5,3,5.2,2,virginica\n6.2,3.4,5.4,2.3,virginica\n5.9,3,5.1,1.8,virginica\n"
  },
  {
    "path": "colab/LICENSE",
    "content": "Copyright (c) 2020-2021 Mathematics and Informatics Center, The University of Tokyo.\n\nAttribution-NonCommercial-NoDerivatives 4.0 International\n\n=======================================================================\n\nCreative Commons Corporation (\"Creative Commons\") is not a law firm and\ndoes not provide legal services or legal advice. Distribution of\nCreative Commons public licenses does not create a lawyer-client or\nother relationship. Creative Commons makes its licenses and related\ninformation available on an \"as-is\" basis. Creative Commons gives no\nwarranties regarding its licenses, any material licensed under their\nterms and conditions, or any related information. Creative Commons\ndisclaims all liability for damages resulting from their use to the\nfullest extent possible.\n\nUsing Creative Commons Public Licenses\n\nCreative Commons public licenses provide a standard set of terms and\nconditions that creators and other rights holders may use to share\noriginal works of authorship and other material subject to copyright\nand certain other rights specified in the public license below. The\nfollowing considerations are for informational purposes only, are not\nexhaustive, and do not form part of our licenses.\n\n     Considerations for licensors: Our public licenses are\n     intended for use by those authorized to give the public\n     permission to use material in ways otherwise restricted by\n     copyright and certain other rights. Our licenses are\n     irrevocable. Licensors should read and understand the terms\n     and conditions of the license they choose before applying it.\n     Licensors should also secure all rights necessary before\n     applying our licenses so that the public can reuse the\n     material as expected. Licensors should clearly mark any\n     material not subject to the license. This includes other CC-\n     licensed material, or material used under an exception or\n     limitation to copyright. More considerations for licensors:\n    wiki.creativecommons.org/Considerations_for_licensors\n\n     Considerations for the public: By using one of our public\n     licenses, a licensor grants the public permission to use the\n     licensed material under specified terms and conditions. If\n     the licensor's permission is not necessary for any reason--for\n     example, because of any applicable exception or limitation to\n     copyright--then that use is not regulated by the license. Our\n     licenses grant only permissions under copyright and certain\n     other rights that a licensor has authority to grant. Use of\n     the licensed material may still be restricted for other\n     reasons, including because others have copyright or other\n     rights in the material. A licensor may make special requests,\n     such as asking that all changes be marked or described.\n     Although not required by our licenses, you are encouraged to\n     respect those requests where reasonable. More considerations\n     for the public:\n    wiki.creativecommons.org/Considerations_for_licensees\n\n=======================================================================\n\nCreative Commons Attribution-NonCommercial-NoDerivatives 4.0\nInternational Public License\n\nBy exercising the Licensed Rights (defined below), You accept and agree\nto be bound by the terms and conditions of this Creative Commons\nAttribution-NonCommercial-NoDerivatives 4.0 International Public\nLicense (\"Public License\"). To the extent this Public License may be\ninterpreted as a contract, You are granted the Licensed Rights in\nconsideration of Your acceptance of these terms and conditions, and the\nLicensor grants You such rights in consideration of benefits the\nLicensor receives from making the Licensed Material available under\nthese terms and conditions.\n\n\nSection 1 -- Definitions.\n\n  a. Adapted Material means material subject to Copyright and Similar\n     Rights that is derived from or based upon the Licensed Material\n     and in which the Licensed Material is translated, altered,\n     arranged, transformed, or otherwise modified in a manner requiring\n     permission under the Copyright and Similar Rights held by the\n     Licensor. For purposes of this Public License, where the Licensed\n     Material is a musical work, performance, or sound recording,\n     Adapted Material is always produced where the Licensed Material is\n     synched in timed relation with a moving image.\n\n  b. Copyright and Similar Rights means copyright and/or similar rights\n     closely related to copyright including, without limitation,\n     performance, broadcast, sound recording, and Sui Generis Database\n     Rights, without regard to how the rights are labeled or\n     categorized. For purposes of this Public License, the rights\n     specified in Section 2(b)(1)-(2) are not Copyright and Similar\n     Rights.\n\n  c. Effective Technological Measures means those measures that, in the\n     absence of proper authority, may not be circumvented under laws\n     fulfilling obligations under Article 11 of the WIPO Copyright\n     Treaty adopted on December 20, 1996, and/or similar international\n     agreements.\n\n  d. Exceptions and Limitations means fair use, fair dealing, and/or\n     any other exception or limitation to Copyright and Similar Rights\n     that applies to Your use of the Licensed Material.\n\n  e. Licensed Material means the artistic or literary work, database,\n     or other material to which the Licensor applied this Public\n     License.\n\n  f. Licensed Rights means the rights granted to You subject to the\n     terms and conditions of this Public License, which are limited to\n     all Copyright and Similar Rights that apply to Your use of the\n     Licensed Material and that the Licensor has authority to license.\n\n  g. Licensor means the individual(s) or entity(ies) granting rights\n     under this Public License.\n\n  h. NonCommercial means not primarily intended for or directed towards\n     commercial advantage or monetary compensation. For purposes of\n     this Public License, the exchange of the Licensed Material for\n     other material subject to Copyright and Similar Rights by digital\n     file-sharing or similar means is NonCommercial provided there is\n     no payment of monetary compensation in connection with the\n     exchange.\n\n  i. Share means to provide material to the public by any means or\n     process that requires permission under the Licensed Rights, such\n     as reproduction, public display, public performance, distribution,\n     dissemination, communication, or importation, and to make material\n     available to the public including in ways that members of the\n     public may access the material from a place and at a time\n     individually chosen by them.\n\n  j. Sui Generis Database Rights means rights other than copyright\n     resulting from Directive 96/9/EC of the European Parliament and of\n     the Council of 11 March 1996 on the legal protection of databases,\n     as amended and/or succeeded, as well as other essentially\n     equivalent rights anywhere in the world.\n\n  k. You means the individual or entity exercising the Licensed Rights\n     under this Public License. Your has a corresponding meaning.\n\n\nSection 2 -- Scope.\n\n  a. License grant.\n\n       1. Subject to the terms and conditions of this Public License,\n          the Licensor hereby grants You a worldwide, royalty-free,\n          non-sublicensable, non-exclusive, irrevocable license to\n          exercise the Licensed Rights in the Licensed Material to:\n\n            a. reproduce and Share the Licensed Material, in whole or\n               in part, for NonCommercial purposes only; and\n\n            b. produce and reproduce, but not Share, Adapted Material\n               for NonCommercial purposes only.\n\n       2. Exceptions and Limitations. For the avoidance of doubt, where\n          Exceptions and Limitations apply to Your use, this Public\n          License does not apply, and You do not need to comply with\n          its terms and conditions.\n\n       3. Term. The term of this Public License is specified in Section\n          6(a).\n\n       4. Media and formats; technical modifications allowed. The\n          Licensor authorizes You to exercise the Licensed Rights in\n          all media and formats whether now known or hereafter created,\n          and to make technical modifications necessary to do so. The\n          Licensor waives and/or agrees not to assert any right or\n          authority to forbid You from making technical modifications\n          necessary to exercise the Licensed Rights, including\n          technical modifications necessary to circumvent Effective\n          Technological Measures. For purposes of this Public License,\n          simply making modifications authorized by this Section 2(a)\n          (4) never produces Adapted Material.\n\n       5. Downstream recipients.\n\n            a. Offer from the Licensor -- Licensed Material. Every\n               recipient of the Licensed Material automatically\n               receives an offer from the Licensor to exercise the\n               Licensed Rights under the terms and conditions of this\n               Public License.\n\n            b. No downstream restrictions. You may not offer or impose\n               any additional or different terms or conditions on, or\n               apply any Effective Technological Measures to, the\n               Licensed Material if doing so restricts exercise of the\n               Licensed Rights by any recipient of the Licensed\n               Material.\n\n       6. No endorsement. Nothing in this Public License constitutes or\n          may be construed as permission to assert or imply that You\n          are, or that Your use of the Licensed Material is, connected\n          with, or sponsored, endorsed, or granted official status by,\n          the Licensor or others designated to receive attribution as\n          provided in Section 3(a)(1)(A)(i).\n\n  b. Other rights.\n\n       1. Moral rights, such as the right of integrity, are not\n          licensed under this Public License, nor are publicity,\n          privacy, and/or other similar personality rights; however, to\n          the extent possible, the Licensor waives and/or agrees not to\n          assert any such rights held by the Licensor to the limited\n          extent necessary to allow You to exercise the Licensed\n          Rights, but not otherwise.\n\n       2. Patent and trademark rights are not licensed under this\n          Public License.\n\n       3. To the extent possible, the Licensor waives any right to\n          collect royalties from You for the exercise of the Licensed\n          Rights, whether directly or through a collecting society\n          under any voluntary or waivable statutory or compulsory\n          licensing scheme. In all other cases the Licensor expressly\n          reserves any right to collect such royalties, including when\n          the Licensed Material is used other than for NonCommercial\n          purposes.\n\n\nSection 3 -- License Conditions.\n\nYour exercise of the Licensed Rights is expressly made subject to the\nfollowing conditions.\n\n  a. Attribution.\n\n       1. If You Share the Licensed Material, You must:\n\n            a. retain the following if it is supplied by the Licensor\n               with the Licensed Material:\n\n                 i. identification of the creator(s) of the Licensed\n                    Material and any others designated to receive\n                    attribution, in any reasonable manner requested by\n                    the Licensor (including by pseudonym if\n                    designated);\n\n                ii. a copyright notice;\n\n               iii. a notice that refers to this Public License;\n\n                iv. a notice that refers to the disclaimer of\n                    warranties;\n\n                 v. a URI or hyperlink to the Licensed Material to the\n                    extent reasonably practicable;\n\n            b. indicate if You modified the Licensed Material and\n               retain an indication of any previous modifications; and\n\n            c. indicate the Licensed Material is licensed under this\n               Public License, and include the text of, or the URI or\n               hyperlink to, this Public License.\n\n          For the avoidance of doubt, You do not have permission under\n          this Public License to Share Adapted Material.\n\n       2. You may satisfy the conditions in Section 3(a)(1) in any\n          reasonable manner based on the medium, means, and context in\n          which You Share the Licensed Material. For example, it may be\n          reasonable to satisfy the conditions by providing a URI or\n          hyperlink to a resource that includes the required\n          information.\n\n       3. If requested by the Licensor, You must remove any of the\n          information required by Section 3(a)(1)(A) to the extent\n          reasonably practicable.\n\n\nSection 4 -- Sui Generis Database Rights.\n\nWhere the Licensed Rights include Sui Generis Database Rights that\napply to Your use of the Licensed Material:\n\n  a. for the avoidance of doubt, Section 2(a)(1) grants You the right\n     to extract, reuse, reproduce, and Share all or a substantial\n     portion of the contents of the database for NonCommercial purposes\n     only and provided You do not Share Adapted Material;\n\n  b. if You include all or a substantial portion of the database\n     contents in a database in which You have Sui Generis Database\n     Rights, then the database in which You have Sui Generis Database\n     Rights (but not its individual contents) is Adapted Material; and\n\n  c. You must comply with the conditions in Section 3(a) if You Share\n     all or a substantial portion of the contents of the database.\n\nFor the avoidance of doubt, this Section 4 supplements and does not\nreplace Your obligations under this Public License where the Licensed\nRights include other Copyright and Similar Rights.\n\n\nSection 5 -- Disclaimer of Warranties and Limitation of Liability.\n\n  a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE\n     EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS\n     AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF\n     ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS,\n     IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION,\n     WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR\n     PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS,\n     ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT\n     KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT\n     ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU.\n\n  b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE\n     TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION,\n     NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT,\n     INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES,\n     COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR\n     USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN\n     ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR\n     DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR\n     IN PART, THIS LIMITATION MAY NOT APPLY TO YOU.\n\n  c. The disclaimer of warranties and limitation of liability provided\n     above shall be interpreted in a manner that, to the extent\n     possible, most closely approximates an absolute disclaimer and\n     waiver of all liability.\n\n\nSection 6 -- Term and Termination.\n\n  a. This Public License applies for the term of the Copyright and\n     Similar Rights licensed here. However, if You fail to comply with\n     this Public License, then Your rights under this Public License\n     terminate automatically.\n\n  b. Where Your right to use the Licensed Material has terminated under\n     Section 6(a), it reinstates:\n\n       1. automatically as of the date the violation is cured, provided\n          it is cured within 30 days of Your discovery of the\n          violation; or\n\n       2. upon express reinstatement by the Licensor.\n\n     For the avoidance of doubt, this Section 6(b) does not affect any\n     right the Licensor may have to seek remedies for Your violations\n     of this Public License.\n\n  c. For the avoidance of doubt, the Licensor may also offer the\n     Licensed Material under separate terms or conditions or stop\n     distributing the Licensed Material at any time; however, doing so\n     will not terminate this Public License.\n\n  d. Sections 1, 5, 6, 7, and 8 survive termination of this Public\n     License.\n\n\nSection 7 -- Other Terms and Conditions.\n\n  a. The Licensor shall not be bound by any additional or different\n     terms or conditions communicated by You unless expressly agreed.\n\n  b. Any arrangements, understandings, or agreements regarding the\n     Licensed Material not stated herein are separate from and\n     independent of the terms and conditions of this Public License.\n\n\nSection 8 -- Interpretation.\n\n  a. For the avoidance of doubt, this Public License does not, and\n     shall not be interpreted to, reduce, limit, restrict, or impose\n     conditions on any use of the Licensed Material that could lawfully\n     be made without permission under this Public License.\n\n  b. To the extent possible, if any provision of this Public License is\n     deemed unenforceable, it shall be automatically reformed to the\n     minimum extent necessary to make it enforceable. If the provision\n     cannot be reformed, it shall be severed from this Public License\n     without affecting the enforceability of the remaining terms and\n     conditions.\n\n  c. No term or condition of this Public License will be waived and no\n     failure to comply consented to unless expressly agreed to by the\n     Licensor.\n\n  d. Nothing in this Public License constitutes or may be interpreted\n     as a limitation upon, or waiver of, any privileges and immunities\n     that apply to the Licensor or You, including from the legal\n     processes of any jurisdiction or authority.\n\n=======================================================================\n\nCreative Commons is not a party to its public\nlicenses. Notwithstanding, Creative Commons may elect to apply one of\nits public licenses to material it publishes and in those instances\nwill be considered the “Licensor.” The text of the Creative Commons\npublic licenses is dedicated to the public domain under the CC0 Public\nDomain Dedication. Except for the limited purpose of indicating that\nmaterial is shared under a Creative Commons public license or as\notherwise permitted by the Creative Commons policies published at\ncreativecommons.org/policies, Creative Commons does not authorize the\nuse of the trademark \"Creative Commons\" or any other trademark or logo\nof Creative Commons without its prior written consent including,\nwithout limitation, in connection with any unauthorized modifications\nto any of its public licenses or any other arrangements,\nunderstandings, or agreements concerning use of licensed material. For\nthe avoidance of doubt, this paragraph does not form part of the\npublic licenses.\n\nCreative Commons may be contacted at creativecommons.org.\n\n"
  },
  {
    "path": "colab/appendix/1-jupyter-notebook.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"##================================================\\n\",\n    \"## このセルを最初に実行せよ---Run this cell first.\\n\",\n    \"##================================================\\n\",\n    \"!wget -P . https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/text-sample.txt\\n\",\n    \"!wget -P . https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/tokyo-temps.csv\\n\",\n    \"!wget -P . https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/small.csv\\n\",\n    \"!wget -P . https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/tokyo-july-temps.csv\\n\",\n    \"!wget -P . https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/argsprint.py\\n\",\n    \"!wget -P . https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/B1S.xml\\n\",\n    \"!wget -P . https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/sample.py\\n\",\n    \"!wget -P . https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/sin.html\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/console_in_browser.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/sample_py_win_1.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/sample_py_win_3.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/sample_py_win_2.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/py_open_2.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/py_open_1.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/sample_py_mac_2.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/sample_py_mac_3.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/sample_py_win2_1.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/sample_py_win2_3.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/sample_py_mac_1.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/sample_py_win2_2.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/argsprint.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/terminal_in_menu.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/sample_py_browser.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/py_conv_1.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/py_conv_2.png\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# ▲Jupyter Notebook の使い方\\n\",\n    \"\\n\",\n    \"Jupyter Notebook について説明します。\\n\",\n    \"\\n\",\n    \"参考\\n\",\n    \"\\n\",\n    \"- https://jupyter.readthedocs.io/en/latest/\\n\",\n    \"\\n\",\n    \"教材等の既存のノートブックは、\\n\",\n    \"ディレクトリのページで選択することによって開くことができます。\\n\",\n    \"ノートブックには `ipynb` という拡張子（エクステンション）が付きます。\\n\",\n    \"\\n\",\n    \"ノートブックを新たに作成するには、ディレクトリが表示されているページで、\\n\",\n    \"`New` のメニューで `Python3` を選択してください。\\n\",\n    \"`Untitled`（`1` などが付くことあり）というノートブックが作られます。\\n\",\n    \"タイトルをクリックして変更することができます。\\n\",\n    \"\\n\",\n    \"ノートブックの上方には、`File` や `Edit` などのメニュー、\\n\",\n    \"`↓` や `↑` や `■` などのアイコンが表示されています。\\n\",\n    \"\\n\",\n    \"右上に `Python 3` と表示されていることに注意してください。\\n\",\n    \"\\n\",\n    \"Ctrl+s（Macの場合は Cmd+s）を入力することによって、\\n\",\n    \"ノートブックをファイルにセーブできます。\\n\",\n    \"オートセーブもされますが、適当なタイミングでセーブしましょう。\\n\",\n    \"\\n\",\n    \"ノートブックはセルから成り立っています。\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## セル\\n\",\n    \"主に次の二種類のセルを使います。\\n\",\n    \"\\n\",\n    \"* Code：\\n\",\n    \"Pythonのコードが書かれたセルです。\\n\",\n    \"Codeセルの横には `In [ ]:` と表示されています。\\n\",\n    \"コードを実行するには、Shift+Enter（または Return）を押します。\\n\",\n    \"このセルの次のセルはCodeセルです。Shift+Enterを押してみてください。\\n\",\n    \"* Markdown：\\n\",\n    \"説明が書かれたセルです。\\n\",\n    \"このセル自身はMarkdownセルです。\\n\",\n    \"\\n\",\n    \"セルの種類はノートブックの上のメニューで変更できます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": []\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## コマンドモード\\n\",\n    \"セルを選択するとコマンドモードになります。\\n\",\n    \"ただし、Codeセルを選択したとき、\\n\",\n    \"マウスカーソルが入力フィールドに入っていると、\\n\",\n    \"編集モードになってしまいます。\\n\",\n    \"\\n\",\n    \"コマンドモードでは、セルの左の線が青色になります。\\n\",\n    \"\\n\",\n    \"コマンドモードで Enter を入力すると、編集モードになります。\\n\",\n    \"Markdownのセルでは、ダブルクリックでも編集モードになります。\\n\",\n    \"\\n\",\n    \"コマンドモードでは、一文字コマンドが有効なので注意してください。\\n\",\n    \"\\n\",\n    \"* a: 上にセルを挿入 (above)\\n\",\n    \"* b: 下にセルを挿入 (below)\\n\",\n    \"* x: セルを削除（そのセルが削除されてしまいますので注意！）\\n\",\n    \"* l: セルの行に番号を振るか振らないかをスイッチ\\n\",\n    \"\\n\",\n    \"* s または Ctrl+s: ノートブックをセーブ (checkpoint)\\n\",\n    \"* Enter: 編集モードに移行\\n\",\n    \"* Shift+Enter: セルを実行して次のセルに\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 編集モード\\n\",\n    \"編集モードでは文字カーソルが表示されて、セルの編集が可能です。\\n\",\n    \"Ctrl の付かない文字はそのまま挿入されます。\\n\",\n    \"\\n\",\n    \"編集モードでは、セルの左の線が緑色になります。\\n\",\n    \"\\n\",\n    \"編集モードでは、以下のような編集コマンドが使えます。\\n\",\n    \"\\n\",\n    \"* Ctrl+c: copy\\n\",\n    \"* Ctrl+x: cut\\n\",\n    \"* Ctrl+v: paste\\n\",\n    \"* Ctrl+z: undo\\n\",\n    \"* …\\n\",\n    \"\\n\",\n    \"Codeセルでは、編集モードでも Shift+Enter を入力すると、\\n\",\n    \"セルの中のコードが実行されて、次のセルに移動します。\\n\",\n    \"Markdownセルはフォーマットされて、次のセルに移動します。\\n\",\n    \"次のセルではコマンドモードになっています。\\n\",\n    \"\\n\",\n    \"Esc でコマンドモードになります。\\n\",\n    \"\\n\",\n    \"Ctrl+s でノートブックをセーブ (checkpoint)。\\n\",\n    \"これはコマンドモードの場合と同じです。\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 練習\\n\",\n    \"次のセルを編集モードにして `10/3` と入力して実行してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": []\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## （注意）Shift-Enterに反応がなくなったとき\\n\",\n    \"CodeセルでShift-Enterをしても反応がないとき、\\n\",\n    \"特にセルの左の部分が\\n\",\n    \"```Python\\n\",\n    \"\\tIn [*]:\\n\",\n    \"```\\n\",\n    \"\\n\",\n    \"となったままで、\\\\* が数に置き換わらないとき、\\n\",\n    \"`■` のアイコンを押して、 kernel（Pythonのインタープリタ）を停止させてください。\\n\",\n    \"\\n\",\n    \"それでも反応がないときは、右回りの矢印のアイコンを押して、\\n\",\n    \"kernel（Pythonのインタープリタ）を起動し直してください。\\n\",\n    \"\\n\",\n    \"たとえば、次のような例です。`■` のアイコンを押してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"while True:\\n\",\n    \"    pass\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": []\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"Python 3\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"name\": \"python\"\n  },\n  \"nbsphinx\": {\n   \"execute\": \"never\"\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 2\n}\n"
  },
  {
    "path": "colab/appendix/2-set.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"##================================================\\n\",\n    \"## このセルを最初に実行せよ---Run this cell first.\\n\",\n    \"##================================================\\n\",\n    \"!wget -P . https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/text-sample.txt\\n\",\n    \"!wget -P . https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/tokyo-temps.csv\\n\",\n    \"!wget -P . https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/small.csv\\n\",\n    \"!wget -P . https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/tokyo-july-temps.csv\\n\",\n    \"!wget -P . https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/argsprint.py\\n\",\n    \"!wget -P . https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/B1S.xml\\n\",\n    \"!wget -P . https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/sample.py\\n\",\n    \"!wget -P . https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/sin.html\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/console_in_browser.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/sample_py_win_1.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/sample_py_win_3.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/sample_py_win_2.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/py_open_2.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/py_open_1.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/sample_py_mac_2.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/sample_py_mac_3.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/sample_py_win2_1.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/sample_py_win2_3.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/sample_py_mac_1.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/sample_py_win2_2.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/argsprint.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/terminal_in_menu.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/sample_py_browser.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/py_conv_1.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/py_conv_2.png\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# ▲セット (set)\\n\",\n    \"セットについて説明します。\\n\",\n    \"\\n\",\n    \"参考\\n\",\n    \"\\n\",\n    \"- https://docs.python.org/ja/3/tutorial/datastructures.html#sets\\n\",\n    \"\\n\",\n    \"**セット**（**集合**）は、リストと同様に複数の要素から構成されるデータです。\\n\",\n    \"セットでは、リストと異なり要素の重複がありません、また要素の順番もありません。\\n\",\n    \"\\n\",\n    \"セットを作成するには、次のように波括弧で要素を囲みます。\\n\",\n    \"辞書と似ていますが、辞書では `:` でキーと値を対応させる必要がありました。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"set1= {2, 1, 2, 3, 2, 3, 1, 3, 3, 1}\\n\",\n    \"set1 \"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"type(set1)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"セットのデータ型は **`set`** であり、`set` は組み込み関数でもあります。\\n\",\n    \"\\n\",\n    \"組み込み関数 `set` を用いてもセットを作成することができます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"set([2, 1, 2, 3, 2, 3, 1, 3, 3, 1])\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"空のセットを作成する場合、次のようにします。（ `{}` では空の辞書が作成されます。）\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"set2 = set() # 空のセット\\n\",\n    \"set2\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"set2 = {} # 空の辞書\\n\",\n    \"set2\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"`set` を用いて、文字列、リストやタプルなどからセットを作成することができます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"set([1,1,2,2,2,3])\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"set((1,1,2,2,2,3))\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"set('aabdceabdae')\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"set({'apple' : 3, 'pen' : 5})\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## セットの組み込み関数\\n\",\n    \"リストなどと同様に、次の関数などはセットにも適用可能です。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"len(set1) # 集合を構成する要素数\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"x,y,z = set1 # 多重代入\\n\",\n    \"x\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"2 in set1 # 指定した要素を集合が含むかどうかの判定\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"10 in set1 # 指定した要素を集合が含むかどうかの判定\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"10 not in set1\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"セットの要素は、順序付けられていないのでインデックスを指定して取り出すことはできません。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {\n    \"tags\": [\n     \"raises-exception\"\n    ]\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"set1[0]\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 練習\\n\",\n    \"\\n\",\n    \"文字列 `str1` が引数として与えられたとき、`str1` に含まれる要素（文字、すなわち長さ1の文字列）の種類を返す関数 `check_characters` を作成してください（大文字と小文字は区別し、スペースや句読点も1つと数えます）。\\n\",\n    \"たとえば、`'aabccc'` には `'a'` と `'b'` と `'c'` が含まれるので、\\n\",\n    \"`check_characters('aabccc')` は 3 を返します。\\n\",\n    \"\\n\",\n    \"以下のセルの `...` のところを書き換えて `check_characters(str1)` を作成してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def check_characters(str1):\\n\",\n    \"    ...\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"上のセルで解答を作成した後、以下のセルを実行し、実行結果が `True` になることを確認してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {\n    \"tags\": [\n     \"raises-exception\"\n    ]\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"print(check_characters('Onde a terra acaba e o mar começa') == 13)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 練習\\n\",\n    \"\\n\",\n    \"辞書 `dic1` が引数として与えられたとき、`dic1` に登録されているキーの数を返す関数 `check_dicsize` を作成してください。\\n\",\n    \"\\n\",\n    \"以下のセルの `...` のところを書き換えて `check_dicsize(dic1)` を作成してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def check_dicsize(dic1):\\n\",\n    \"    ...\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"上のセルで解答を作成した後、以下のセルを実行し、実行結果が `True` になることを確認してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {\n    \"tags\": [\n     \"raises-exception\"\n    ]\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"print(check_dicsize({'apple': 0, 'orange': 2, 'pen': 1}) == 3)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## **集合演算**\\n\",\n    \"複数のセットから、**和集合**・**積集合**・**差集合**・**対称差**を求める集合演算が存在します。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"set1 = {1, 2, 3, 4}\\n\",\n    \"set2 = {3, 4, 5, 6}\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"set1 | set2 # 和集合\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"set1 & set2 # 積集合\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"set1 - set2 # 差集合\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"set1 ^ set2 # 対称差\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## **比較演算**\\n\",\n    \"数値などを比較するのに用いた比較演算子を用いて、2つのセットを比較することもできます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"print({1, 2, 3} == {1, 2, 3})\\n\",\n    \"print({1, 2} == {1, 2, 3})\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"print({1, 2, 3} != {1, 2, 3})\\n\",\n    \"print({1, 2} != {1, 2, 3})\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"`<=` や `<` は、集合の間の包含関係を判定します。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"print({1, 2, 3} <= {1, 2, 3})\\n\",\n    \"print({1, 2, 3} < {1, 2, 3})\\n\",\n    \"print({1, 2} < {1, 2, 3})\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"print({1, 2} <= {2, 3, 4})\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## セットのメソッド\\n\",\n    \"セットにも様々なメソッドが存在します。なお、以下のメソッドは全て破壊的です。\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### **add**\\n\",\n    \"指定した要素を新たにセットに追加します。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"set1 = {1, 2, 3}\\n\",\n    \"set1.add(4)\\n\",\n    \"set1\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### **remove**\\n\",\n    \"指定した要素をセットから削除します。\\n\",\n    \"その要素がセットに含まれていない場合、エラーになります。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"set1.remove(1)\\n\",\n    \"set1\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {\n    \"tags\": [\n     \"raises-exception\"\n    ]\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"set1.remove(10)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### **discard**\\n\",\n    \"指定した要素をセットから削除します。\\n\",\n    \"その要素がセットに含まれていなくともエラーになりません。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"set1 = {1, 2, 3, 4}\\n\",\n    \"set1.discard(1)\\n\",\n    \"set1\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"set1.discard(5)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### **clear**\\n\",\n    \"全ての要素を削除して対象のセットを空にします。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"set1 = {1, 2, 3, 4}\\n\",\n    \"set1.clear()\\n\",\n    \"set1\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### **pop**\\n\",\n    \"セットからランダムに1つの要素を取り出します。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"set1 = {1, 2, 3, 4}\\n\",\n    \"print(set1.pop())\\n\",\n    \"print(set1)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### **union**, **intersection**, **difference**\\n\",\n    \"**和集合**・**積集合**・**差集合**・**対称差**を求めるメソッドも存在します。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"set1 = {1, 2, 3, 4}\\n\",\n    \"set2 = {3, 4, 5, 6}\\n\",\n    \"set1.union(set2) # 和集合\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"set1.intersection(set2) # 積集合\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"set1.difference(set2) # 差集合\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"set1.symmetric_difference(set2) # 対称差\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 練習\\n\",\n    \"\\n\",\n    \"英語の文章からなる文字列 `str_engsentences` が引数として与えられたとき、`str_engsentences` 中に含まれる単語の種類数を返す関数 `count_words2` を作成してください。\\n\",\n    \"\\n\",\n    \"以下のセルの `...` のところを書き換えて `count_words2(str_engsentences)` を作成してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def count_words2(str_engsentences):\\n\",\n    \"    ...\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"上のセルで解答を作成した後、以下のセルを実行し、実行結果が `True` になることを確認してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {\n    \"tags\": [\n     \"raises-exception\"\n    ]\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"print(count_words2('From Stettin in the Baltic to Trieste in the Adriatic an iron curtain has descended across the Continent.') == 15)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 練習の解答\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def check_characters(str1):\\n\",\n    \"    set1 = set(str1)\\n\",\n    \"    return len(set1)\\n\",\n    \"#check_characters('Onde a terra acaba e o mar começa') \"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def check_dicsize(dic1):\\n\",\n    \"    return len(set(dic1))\\n\",\n    \"#check_dicsize({'apple': 0, 'orange': 2, 'pen': 1})\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"実は `len` は辞書に対してキーの数を返すので、セットを使う必要はありません。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def check_dicsize(dic1):\\n\",\n    \"    return len(dic1)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def count_words2(str_engsentences):\\n\",\n    \"    str1 = str_engsentences.replace('.', '') # 句読点を削除する\\n\",\n    \"    str1 = str1.replace(',', '')\\n\",\n    \"    str1 = str1.replace(':', '')\\n\",\n    \"    str1 = str1.replace(';', '')\\n\",\n    \"    str1 = str1.replace('!', '')\\n\",\n    \"    str1 = str1.replace('?', '')\\n\",\n    \"    list1 = str1.split(' ') # 句読点を削除した文字列を、単語ごとにリストに格納する\\n\",\n    \"    set1 = set(list1) # リストを集合に変換して同じ要素を1つにまとめる\\n\",\n    \"    return len(set1)\\n\",\n    \"#count_words2('From Stettin in the Baltic to Trieste in the Adriatic an iron curtain has descended across the Continent.')\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": []\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"Python 3\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"name\": \"python\"\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 2\n}\n"
  },
  {
    "path": "colab/appendix/3-recursion.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"##================================================\\n\",\n    \"## このセルを最初に実行せよ---Run this cell first.\\n\",\n    \"##================================================\\n\",\n    \"!wget -P . https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/text-sample.txt\\n\",\n    \"!wget -P . https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/tokyo-temps.csv\\n\",\n    \"!wget -P . https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/small.csv\\n\",\n    \"!wget -P . https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/tokyo-july-temps.csv\\n\",\n    \"!wget -P . https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/argsprint.py\\n\",\n    \"!wget -P . https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/B1S.xml\\n\",\n    \"!wget -P . https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/sample.py\\n\",\n    \"!wget -P . https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/sin.html\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/console_in_browser.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/sample_py_win_1.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/sample_py_win_3.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/sample_py_win_2.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/py_open_2.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/py_open_1.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/sample_py_mac_2.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/sample_py_mac_3.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/sample_py_win2_1.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/sample_py_win2_3.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/sample_py_mac_1.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/sample_py_win2_2.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/argsprint.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/terminal_in_menu.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/sample_py_browser.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/py_conv_1.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/py_conv_2.png\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# ▲再帰\\n\",\n    \"**再帰**について説明します。\\n\",\n    \"\\n\",\n    \"関数の**再帰呼び出し**とは、定義しようとしている関数を、その定義の中で呼び出すことです。\\n\",\n    \"定義の中で直接呼び出す場合に限らず、他の関数を経由して間接的に呼び出す場合も、再帰呼び出しに含まれます。\\n\",\n    \"再帰呼び出しを行う関数を、**再帰関数**といいます。\\n\",\n    \"\\n\",\n    \"再帰関数は、**分割統治**アルゴリズムの記述に適しています。\\n\",\n    \"分割統治とは、問題を容易に解ける小さな粒度まで分割していき、\\n\",\n    \"個々の小さな問題を解いて、その部分解を合成することで問題全体を解くような方法を指します。\\n\",\n    \"分割統治の考え方は、関数型プログラミングにおいてもよく用いられます。\\n\",\n    \"再帰関数による分割統治の典型的な形は、次の通りです。\\n\",\n    \"\\n\",\n    \"```Python\\n\",\n    \"def recursive_function(...):\\n\",\n    \"    if 問題粒度の判定:\\n\",\n    \"        再帰呼び出しを含まない基本処理\\n\",\n    \"    else:\\n\",\n    \"        再帰呼び出しを含む処理（問題の分割や部分解の合成を行う）\\n\",\n    \"```\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"以下で、再帰関数を使った処理の例をいくつか見ていきましょう。\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 再帰関数の例：接頭辞リストと接尾辞リスト\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"# 入力の文字列の接頭辞リストを返す関数prefixes\\n\",\n    \"def prefixes(s):\\n\",\n    \"    if s == '':\\n\",\n    \"        return []\\n\",\n    \"    else:\\n\",\n    \"        return [s] + prefixes(s[:-1])\\n\",\n    \"\\n\",\n    \"prefixes('aabcc')\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"# 入力の文字列の接尾辞リストを返す関数suffixes\\n\",\n    \"def suffixes(s):\\n\",\n    \"    if s == '':\\n\",\n    \"        return []\\n\",\n    \"    else:\\n\",\n    \"        return [s] + suffixes(s[1:])\\n\",\n    \"\\n\",\n    \"suffixes('aabcc')\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 再帰関数の例：べき乗の計算\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"# 入力の底baseと冪指数exptからべき乗を計算する関数power\\n\",\n    \"def power(base, expt):\\n\",\n    \"    if expt == 0:\\n\",\n    \"        # exptが0ならば1を返す\\n\",\n    \"        return 1\\n\",\n    \"    else:\\n\",\n    \"        # exptを1つずつ減らしながらpowerに渡し、再帰的にべき乗を計算\\n\",\n    \"        # (2*(2*(2*....*1)))\\n\",\n    \"        return base * power(base, expt - 1)\\n\",\n    \"    \\n\",\n    \"power(2,10)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"一般に、再帰処理は、繰り返し処理としても書くことができます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"# べき乗の計算を繰り返し処理で行った例\\n\",\n    \"def power(base, expt):\\n\",\n    \"    e = 1\\n\",\n    \"    for i in range(expt):\\n\",\n    \"        e *= base\\n\",\n    \"    return e\\n\",\n    \"\\n\",\n    \"power(2,10)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"単純な処理においては、繰り返しの方が効率的に計算できることが多いですが、\\n\",\n    \"特に複雑な処理になってくると、再帰的に定義した方が読みやすいコードで効率的なアルゴリズムを記述できることもあります。\\n\",\n    \"たとえば、次に示すべき乗計算は、上記よりも高速なアルゴリズムですが、計算の見通しは明快です。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"# べき乗を計算する高速なアルゴリズム\\n\",\n    \"def power(base, expt):\\n\",\n    \"    if expt == 0:\\n\",\n    \"        return 1\\n\",\n    \"    elif expt % 2 == 0:\\n\",\n    \"        return power(base * base, expt // 2) # x**(2m) == (x*x)**m\\n\",\n    \"    else:\\n\",\n    \"        return base * power(base, expt - 1)\\n\",\n    \"    \\n\",\n    \"power(2,10)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 再帰関数の例：マージソート\\n\",\n    \"\\n\",\n    \"マージソートは、典型的な分割統治アルゴリズムで、以下のように再帰関数で実装することができます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"# マージソートを行い、比較回数 n を返す\\n\",\n    \"def merge_sort_rec(data, l, r, work):\\n\",\n    \"    n = 0\\n\",\n    \"    if r - l <= 1:\\n\",\n    \"        return n\\n\",\n    \"    m = l + (r - l) // 2\\n\",\n    \"    n1 = merge_sort_rec(data, l, m, work)\\n\",\n    \"    n2 = merge_sort_rec(data, m, r, work)\\n\",\n    \"    i1 = l\\n\",\n    \"    i2 = m\\n\",\n    \"    for i in range(l, r):\\n\",\n    \"        from1 = False\\n\",\n    \"        if i2 >= r:\\n\",\n    \"            from1 = True\\n\",\n    \"        elif i1 < m:\\n\",\n    \"            n = n + 1\\n\",\n    \"            if data[i1] <= data[i2]:\\n\",\n    \"                from1 = True\\n\",\n    \"        if from1:\\n\",\n    \"            work[i] = data[i1]\\n\",\n    \"            i1 = i1 + 1\\n\",\n    \"        else:\\n\",\n    \"            work[i] = data[i2]\\n\",\n    \"            i2 = i2 + 1\\n\",\n    \"    for i in range(l, r):\\n\",\n    \"        data[i] = work[i]\\n\",\n    \"    return n1 + n2 + n\\n\",\n    \"\\n\",\n    \"def merge_sort(data):\\n\",\n    \"    return merge_sort_rec(data, 0, len(data), [0]*len(data))\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"`merge_sort` は、与えられた配列をインプレースでソートするとともに、比較の回数を返します。\\n\",\n    \"`merge_sort` は、再帰関数 `merge_sort_rec` を呼び出します。\\n\",\n    \"\\n\",\n    \"`merge_sort_rec(data, l, r, work)` は、配列 `data` のインデックスが `l` 以上で `r` より小さいところをソートします。\\n\",\n    \"\\n\",\n    \"- 要素が1つかないときは何もしません。\\n\",\n    \"- そうでなければ、`l` から　`r` までの要素を半分にしてそれぞれを再帰的にソートします。\\n\",\n    \"- その結果を作業用の配列 `work` に順序を保ちながらコピーします。この操作はマージ（併合）と呼ばれます。\\n\",\n    \"- 最後に、`work` から `data` に要素を戻します。\\n\",\n    \"\\n\",\n    \"`merge_sort_rec` は自分自身を2回呼び出していますので、繰り返しでは容易には実装できません。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"import random\\n\",\n    \"a = [random.randint(1,10000) for i in range(100)]\\n\",\n    \"merge_sort(a)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"a\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": []\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"Python 3\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"name\": \"python\"\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 2\n}\n"
  },
  {
    "path": "colab/appendix/3-visualization.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"##================================================\\n\",\n    \"## このセルを最初に実行せよ---Run this cell first.\\n\",\n    \"##================================================\\n\",\n    \"!wget -P . https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/text-sample.txt\\n\",\n    \"!wget -P . https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/tokyo-temps.csv\\n\",\n    \"!wget -P . https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/small.csv\\n\",\n    \"!wget -P . https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/tokyo-july-temps.csv\\n\",\n    \"!wget -P . https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/argsprint.py\\n\",\n    \"!wget -P . https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/B1S.xml\\n\",\n    \"!wget -P . https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/sample.py\\n\",\n    \"!wget -P . https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/sin.html\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/console_in_browser.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/sample_py_win_1.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/sample_py_win_3.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/sample_py_win_2.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/py_open_2.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/py_open_1.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/sample_py_mac_2.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/sample_py_mac_3.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/sample_py_win2_1.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/sample_py_win2_3.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/sample_py_mac_1.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/sample_py_win2_2.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/argsprint.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/terminal_in_menu.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/sample_py_browser.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/py_conv_1.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/py_conv_2.png\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# ▲簡単なデータの可視化\\n\",\n    \"第3回までに学んだ各種のデータに対する簡単な可視化について触れます。\\n\",\n    \"\\n\",\n    \"参考\\n\",\n    \"\\n\",\n    \"- https://matplotlib.org/tutorials/introductory/pyplot.html#sphx-glr-tutorials-introductory-pyplot-py (English Only)\\n\",\n    \"\\n\",\n    \"`matplotlib` については、5-matplotlib に詳しい説明があります。\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## **`matplotlib`**\\n\",\n    \"\\n\",\n    \"Pythonでは可視化のための様々な仕組みが用意されています。\\n\",\n    \"ここでは最も広く利用され、ノートブック上で容易に動作を確認できる `matplotlib` について触れます。\\n\",\n    \"`matplotlib` を利用するには第5回で取り上げるモジュールについても知る必要がありますが、\\n\",\n    \"第2回と第3回でデータについてだけ学ぶのでは、みなさんのモチベーションの維持が難しいと思われますので、\\n\",\n    \"この段階でリスト・辞書だけで2次元グラフを表示させてみます。\\n\",\n    \"したがって、ここではモジュールの使い方については説明しません。\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"`matplotlib` の出力をノートブックで表示させるには、以下をCodeセルで1回だけ実行します。\\n\",\n    \"`%matplotlib` のように `%` で始まる文を**マジックコマンド**と呼びます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"%matplotlib inline\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"さらに `matplotlib` モジュールを読み込む次の処理もプログラムの冒頭で行う必要があります。\\n\",\n    \"\\n\",\n    \"```Python\\n\",\n    \"import matplotlib.pyplot as plt\\n\",\n    \"```\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 折れ線グラフ\\n\",\n    \"\\n\",\n    \"`ls1 = [1, 4, 9, 16]` といった数を要素とするリストを折れ線グラフで表示するには、次のように行います。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"import matplotlib.pyplot as plt\\n\",\n    \"ls1 = [1, 4, 9, 16]\\n\",\n    \"plt.plot(ls1)\\n\",\n    \"plt.show()\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"折れ線グラフを複数表示させるには、`plt.plot` を繰り返します。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"import matplotlib.pyplot as plt\\n\",\n    \"ls1 = [1, 4, 9, 16]\\n\",\n    \"ls2 = [8, 7, 6, 5]\\n\",\n    \"plt.plot(ls1, label='1st plot')\\n\",\n    \"plt.plot(ls2, label='2nd plot')\\n\",\n    \"plt.show()\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 散布図\\n\",\n    \"散布図を表示させるには、`plt.scatter` にそれぞれの点に対応する水平、垂直座標をリストで与えます。\\n\",\n    \"この2つのリストの要素数は同じでなければなりません。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"import matplotlib.pyplot as plt\\n\",\n    \"x = [5, 10, 15, 10]\\n\",\n    \"y = [10, 5, 10, 15]\\n\",\n    \"plt.scatter(x,y)\\n\",\n    \"plt.show()\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 棒グラフ\\n\",\n    \"棒グラフを表示させるには、`plt.bar` に水平座標、高さをリストで与えます。\\n\",\n    \"この2つのリストの要素数は同じでなければなりません。\\n\",\n    \"以下の例では、等間隔でグラフを表示させるため水平軸に整数列を使っています。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"import matplotlib.pyplot as plt\\n\",\n    \"x = [1, 2, 3, 4]\\n\",\n    \"y = [10, 30, 40, 15]\\n\",\n    \"plt.bar(x,y)\\n\",\n    \"plt.show()\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"第2回と第3回では文字列、辞書について学びました。\\n\",\n    \"文字列をキー、整数を値とする辞書を棒グラフで可視化します。\\n\",\n    \"さらに、水平軸にはキーをラベルとして表示されます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"import matplotlib.pyplot as plt\\n\",\n    \"d = {'apple':10, 'banana':30, 'orange': 40, 'kiwi': 15}\\n\",\n    \"x = [1,2,3,4]\\n\",\n    \"plt.bar(x, d.values(), tick_label=list(d.keys()))\\n\",\n    \"plt.show()\"\n   ]\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"Python 3 (ipykernel)\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"codemirror_mode\": {\n    \"name\": \"ipython\",\n    \"version\": 3\n   },\n   \"file_extension\": \".py\",\n   \"mimetype\": \"text/x-python\",\n   \"name\": \"python\",\n   \"nbconvert_exporter\": \"python\",\n   \"pygments_lexer\": \"ipython3\",\n   \"version\": \"3.12.4\"\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 4\n}\n"
  },
  {
    "path": "colab/appendix/4-csv.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"##================================================\\n\",\n    \"## このセルを最初に実行せよ---Run this cell first.\\n\",\n    \"##================================================\\n\",\n    \"!wget -P . https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/text-sample.txt\\n\",\n    \"!wget -P . https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/tokyo-temps.csv\\n\",\n    \"!wget -P . https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/small.csv\\n\",\n    \"!wget -P . https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/tokyo-july-temps.csv\\n\",\n    \"!wget -P . https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/argsprint.py\\n\",\n    \"!wget -P . https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/B1S.xml\\n\",\n    \"!wget -P . https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/sample.py\\n\",\n    \"!wget -P . https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/sin.html\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/console_in_browser.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/sample_py_win_1.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/sample_py_win_3.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/sample_py_win_2.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/py_open_2.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/py_open_1.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/sample_py_mac_2.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/sample_py_mac_3.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/sample_py_win2_1.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/sample_py_win2_3.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/sample_py_mac_1.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/sample_py_win2_2.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/argsprint.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/terminal_in_menu.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/sample_py_browser.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/py_conv_1.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/py_conv_2.png\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# ▲CSVファイルの入出力\\n\",\n    \"CSVファイルの入出力について説明します。\\n\",\n    \"\\n\",\n    \"参考\\n\",\n    \"\\n\",\n    \"- https://docs.python.org/ja/3/library/csv.html\\n\",\n    \"\\n\",\n    \"## CSV形式とは\\n\",\n    \"\\n\",\n    \"**CSV**形式とは \\\"comma-separated values\\\" の略で、\\n\",\n    \"複数の値をコンマで区切って記録するファイル形式です。\\n\",\n    \"\\n\",\n    \"みなさんExcelを使ったことがあると思いますが、\\n\",\n    \"Excelでは1つのセルに1つの値（数値や文字など）が入っていて、\\n\",\n    \"その他のセルの値とは独立に扱えますよね。\\n\",\n    \"\\n\",\n    \"それと同じように、CSV形式では、`,`（コンマ）で区切られた要素はそれぞれ独立の値として扱われます。\\n\",\n    \"\\n\",\n    \"たとえばサークルのメンバーデータを作ることを考えましょう。\\n\",\n    \"メンバーは「鈴木一郎」と「山田花子」の2名で、\\n\",\n    \"それぞれ『氏名』『ニックネーム』『出身地』を記録しておきたいと思います。\\n\",\n    \"\\n\",\n    \"表で表すとこんなデータです。\\n\",\n    \"\\n\",\n    \"|ID| 氏名 | ニックネーム | 出身地 | \\n\",\n    \"|---:|:--------|:---------------|:-------|\\n\",\n    \"|user1| 鈴木一郎 | イチロー | 広島 |\\n\",\n    \"|user2| 山田花子 | はなこ | 名古屋 |\\n\",\n    \"\\n\",\n    \"これをCSV形式で表すと次のようになります。\"\n   ]\n  },\n  {\n   \"cell_type\": \"raw\",\n   \"metadata\": {},\n   \"source\": [\n    \"'user1','鈴木一郎','イチロー','広島'\\n\",\n    \"'user2','山田花子','はなこ','名古屋'\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## CSVファイルの読み込み\\n\",\n    \"CSVファイルを読み書きするには、\\n\",\n    \"ファイルをオープンして、そのファイルオブジェクトから、\\n\",\n    \"CSVリーダを作ります。\\n\",\n    \"\\n\",\n    \"**CSVリーダ**とは、CSVファイルからデータを読み込むためのオブジェクトで、\\n\",\n    \"このオブジェクトのメソッドを呼び出すことにより、CSVファイルからデータを読み込むことができます。\\n\",\n    \"\\n\",\n    \"CSVリーダを作るには、\\n\",\n    \"**`csv`** というモジュールの **`csv.reader`** という関数にファイルオブジェクトを渡します。\\n\",\n    \"\\n\",\n    \"たとえば、次のような表で表されるCSVファイル `small.csv` を読み込んでみましょう。\\n\",\n    \"\\n\",\n    \" 0列目 | 1列目 | 2列目 | 3列目 | 4列目 \\n\",\n    \"---|---|---|---|---\\n\",\n    \" 11 | 12 | 13 | 14 | 15 \\n\",\n    \" 21 | 22 | 23 | 24 | 25 \\n\",\n    \" 31 | 32 | 33 | 34 | 35 \\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"import csv\\n\",\n    \"f = open('small.csv', 'r')\\n\",\n    \"dataReader = csv.reader(f)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"このオブジェクトもイテレータで、`next` という関数を呼び出すことができます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"next(dataReader)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"このようにして CSVファイルを読むと、\\n\",\n    \"CSVファイルの各行のデータが文字列のリストとなって返されます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"next(dataReader)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"row = next(dataReader)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"row\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"row[2]\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"数値が `''` で囲われている場合、数値ではなく文字列として扱われているので、そのまま計算に使用することができません。\\n\",\n    \"\\n\",\n    \"文字列が整数を表す場合、**`int`** 関数によって文字列を整数に変換することができます。\\n\",\n    \"文字列が小数を含む場合は **`float`** 関数で浮動小数点数型に変換、文字列が複素数を表す場合は **`complex`** 関数で複素数に変換します。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"int(row[2])\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"ファイルの終わりまで達した後に `next` 関数を実行すると、下のようにエラーが返ってきます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {\n    \"tags\": [\n     \"raises-exception\"\n    ]\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"next(dataReader)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"ファイルを使い終わったらクローズすることを忘れないようにしましょう。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"f.close()\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## CSVファイルに対するfor文\\n\",\n    \"CSVリーダもイテレータですので、for文の `in` の後に書くことができます。\\n\",\n    \"\\n\",\n    \"---\\n\",\n    \"```Python\\n\",\n    \"for row in dataReader:\\n\",\n    \"    ...\\n\",\n    \"```\\n\",\n    \"---\\n\",\n    \"\\n\",\n    \"繰り返しの各ステップで、`next(dataReader)` が呼び出されて、\\n\",\n    \"`row` にその値が設定され、for文の中身が実行されます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"f = open('small.csv', 'r')\\n\",\n    \"dataReader = csv.reader(f)\\n\",\n    \"for row in dataReader:\\n\",\n    \"    print(row)\\n\",\n    \"f.close()\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## CSVファイルに対するwith文\\n\",\n    \"以下はwith文を使った例です。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"with open('small.csv', 'r') as f:\\n\",\n    \"    dataReader = csv.reader(f)\\n\",\n    \"    for row in dataReader:\\n\",\n    \"        print(row)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## CSVファイルの書き込み\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"CSVファイルを作成して書き込むには、CSVライターを作ります。\\n\",\n    \"\\n\",\n    \"**CSVライター**とは、CSVファイルを作ってデータを書き込むためのオブジェクトで、\\n\",\n    \"このオブジェクトのメソッドを呼び出すことにより、データがCSV形式でファイルに書き込まれます。\\n\",\n    \"\\n\",\n    \"CSVライターを作るには、\\n\",\n    \"**`csv`** というモジュールの **`csv.writer`** という関数にファイルオブジェクトを渡します。\\n\",\n    \"ここで、半角英数文字以外の文字（たとえば日本語文字や全角英数文字）を書き込み・書き出しする際には、\\n\",\n    \"文字コード（たとえば `encoding='utf-8'`）を指定し、\\n\",\n    \"また書き出しの際にはさらに改行コードとして `newline=''` を指定しないと文字化けが生じる可能性があります。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"f = open('out.csv', 'w', encoding='utf-8', newline='')\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"dataWriter = csv.writer(f)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"dir(dataWriter)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"dataWriter.writerow([1,2,3])\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"dataWriter.writerow([21,22,23])\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"書き込みモードの場合も、ファイルを使い終わったらクローズすることを忘れないようにしましょう。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"f.close()\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"読み込みのときと同様、with文を使うこともできます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"with open('out.csv', 'w', encoding='utf-8', newline='') as f:\\n\",\n    \"    dataWriter = csv.writer(f)\\n\",\n    \"    dataWriter.writerow([1,2,3])\\n\",\n    \"    dataWriter.writerow([21,22,23])\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### 東京の7月の気温\\n\",\n    \"`tokyo-temps.csv` には、気象庁のオープンデータからダウンロードした、\\n\",\n    \"東京の7月の平均気温のデータが入っています。\\n\",\n    \"\\n\",\n    \"http://www.data.jma.go.jp/gmd/risk/obsdl/\\n\",\n    \"\\n\",\n    \"48行目の第2列に1875年7月の平均気温が入っており、\\n\",\n    \"以下、2016年まで、12行ごとに7月の平均気温が入っています。\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"以下は、これを取り出すPythonの簡単なコードです。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"import csv\\n\",\n    \"\\n\",\n    \"with open('tokyo-temps.csv', 'r', encoding='shift_jis') as f:\\n\",\n    \"    dataReader = csv.reader(f) # csvリーダを作成\\n\",\n    \"    n=0\\n\",\n    \"    year = 1875\\n\",\n    \"    years = []\\n\",\n    \"    july_temps = []\\n\",\n    \"    for row in dataReader: # CSVファイルの中身を1行ずつ読み込み\\n\",\n    \"        n = n+1\\n\",\n    \"        if n>=48 and (n-48)%12 == 0: # 48行目からはじめて12か月ごとにif内を実行\\n\",\n    \"            years.append(year)\\n\",\n    \"            july_temps.append(float(row[1]))\\n\",\n    \"            year = year + 1\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"ファイルをオープンするときに、キーワード引数の **`encoding`** が指定されています。\\n\",\n    \"このファイルはShift_JISという文字コードで書かれているため、\\n\",\n    \"この引数で、ファイルの符号（**文字コード**）を指定します。\\n\",\n    \"`'shift_jis'` はShift_JISを意味します。この他に、`'utf-8'`（UTF-8、すなわちビットのUnicode）があります。\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"変数 `years` に年の配列、変数 `july_temps` に対応する年の7月の平均気温の配列が設定されます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"years\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"july_temps\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"ここでは詳しく説明しませんが、**線形回帰**によるフィッティングを行ってみましょう。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"import numpy\\n\",\n    \"import matplotlib.pyplot as plt\\n\",\n    \"%matplotlib inline\\n\",\n    \"\\n\",\n    \"fitp = numpy.poly1d(numpy.polyfit(years, july_temps, 1))\\n\",\n    \"ma = max(years)\\n\",\n    \"mi = min(years)\\n\",\n    \"xp = numpy.linspace(mi, ma, (ma - mi))\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"plt.plot(years, july_temps, '.', xp, fitp(xp), '-')\\n\",\n    \"plt.show()\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 練習\\n\",\n    \"\\n\",\n    \"1. `tokyo-temps.csv` を読み込んで、各行が西暦年と7月の気温のみからなる `'tokyo-july-temps.csv'` という名前のCSVファイルを作成してください。\\n\",\n    \"西暦年は1875から2016までとします。\\n\",\n    \"\\n\",\n    \"2. 作成したCSVファイルをExcelで読み込むとどうなるか確認してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": []\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"以下のセルによってテストしてください。（`years` と `july_temps` の値がそのままと仮定しています。）\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {\n    \"tags\": [\n     \"raises-exception\"\n    ]\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"with open('tokyo-july-temps.csv', 'r', encoding='shift_jis') as f:\\n\",\n    \"    i = 0\\n\",\n    \"    dataReader = csv.reader(f)\\n\",\n    \"    for row in dataReader:\\n\",\n    \"        if int(row[0]) != years[i] or abs(float(row[1])-july_temps[i])>0.000001:\\n\",\n    \"            print('error', int(row[0]), float(row[1]))\\n\",\n    \"        i += 1\\n\",\n    \"print(i== 142) # 1875年から2016年まで142年間分のデータがあるはずです\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 練習\\n\",\n    \"\\n\",\n    \"整数データのみからなるCSVファイルの名前を受け取ると、そのCSVファイルの各行を読み込んで整数のリストを作り、\\n\",\n    \"ファイル全体の内容を、そのようなリストのリストとして返す関数 `csv_matrix(name)` を定義してください。\\n\",\n    \"\\n\",\n    \"たとえば上で用いた `small.csv` には次のようなデータが入っています。\\n\",\n    \"\\n\",\n    \"\\n\",\n    \" 0列目 | 1列目 | 2列目 | 3列目 | 4列目 \\n\",\n    \"---|---|---|---|---\\n\",\n    \" 11 | 12 | 13 | 14 | 15 \\n\",\n    \" 21 | 22 | 23 | 24 | 25 \\n\",\n    \" 31 | 32 | 33 | 34 | 35 \\n\",\n    \"\\n\",\n    \"この `small.csv` の名前が引数として与えられた場合、\\n\",\n    \"\\n\",\n    \"```Python\\n\",\n    \"[[11, 12, 13, 14, 15], [21, 22, 23, 24, 25], [31, 32, 33, 34, 35]]\\n\",\n    \"```\\n\",\n    \"\\n\",\n    \"というリストを返します。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def csv_matrix(name):\\n\",\n    \"    ...\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"以下のセルによってテストしてください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {\n    \"tags\": [\n     \"raises-exception\"\n    ]\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"print(csv_matrix('small.csv') == [[11, 12, 13, 14, 15], [21, 22, 23, 24, 25], [31, 32, 33, 34, 35]])\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 練習の解答\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"with open('tokyo-july-temps.csv', 'w', encoding='utf-8', newline='') as f:\\n\",\n    \"    i = 0\\n\",\n    \"    dataWriter = csv.writer(f)\\n\",\n    \"    for i in range(len(years)):\\n\",\n    \"        dataWriter.writerow([years[i],july_temps[i]])\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def csv_matrix(name):\\n\",\n    \"    rows = []\\n\",\n    \"    with open(name, 'r') as f:\\n\",\n    \"        dataReader = csv.reader(f)\\n\",\n    \"        for row in dataReader:\\n\",\n    \"            rows.append([int(x) for x in row])\\n\",\n    \"    return rows    \"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": []\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"Python 3\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"name\": \"python\"\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 2\n}\n"
  },
  {
    "path": "colab/appendix/5-bokeh.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"##================================================\\n\",\n    \"## このセルを最初に実行せよ---Run this cell first.\\n\",\n    \"##================================================\\n\",\n    \"!wget -P . https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/text-sample.txt\\n\",\n    \"!wget -P . https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/tokyo-temps.csv\\n\",\n    \"!wget -P . https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/small.csv\\n\",\n    \"!wget -P . https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/tokyo-july-temps.csv\\n\",\n    \"!wget -P . https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/argsprint.py\\n\",\n    \"!wget -P . https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/B1S.xml\\n\",\n    \"!wget -P . https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/sample.py\\n\",\n    \"!wget -P . https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/sin.html\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/console_in_browser.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/sample_py_win_1.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/sample_py_win_3.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/sample_py_win_2.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/py_open_2.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/py_open_1.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/sample_py_mac_2.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/sample_py_mac_3.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/sample_py_win2_1.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/sample_py_win2_3.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/sample_py_mac_1.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/sample_py_win2_2.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/argsprint.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/terminal_in_menu.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/sample_py_browser.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/py_conv_1.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/py_conv_2.png\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# ▲Bokehライブラリ\\n\",\n    \"Bokehライブラリについて説明します。\\n\",\n    \"\\n\",\n    \"参考\\n\",\n    \"\\n\",\n    \"* https://bokeh.pydata.org/\\n\",\n    \"\\n\",\n    \"[Bokeh](https://bokeh.pydata.org/)は、データを可視化するためのライブラリです。\\n\",\n    \"**`bokeh`** モジュールを使った、基本的なグラフの描画について説明します。\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 線グラフ\\n\",\n    \"Bokehライブラリ使用してグラフを描画するには、**`bokeh.plotting`** のモジュールをインポートします。\\n\",\n    \"基本的なグラフの描画をノートブック上で行うには、図形を生成する **`bokeh.plotting.figure()`**、図形を表示する **`bokeh.plotting.show()`**、出力先をノートブック上に設定する **`bokeh.plotting.output_notebook()`** があれば充分です。\\n\",\n    \"通例、`output_notebook()` は最初に呼び出されます。\\n\",\n    \"\\n\",\n    \"グラフで可視化するデータは配列を用いることが多いため、`numpy` モジュールも併せてインポートします。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"import numpy as np\\n\",\n    \"from bokeh.plotting import figure, output_notebook, show\\n\",\n    \"output_notebook()\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"次は、`figure()` が返す `Figure` クラスの **`line()`** メソッドを使って、リストの要素の数値をy軸の値としてグラフを描画しています。\\n\",\n    \"y軸の値に対応するx軸の値は、リストの各要素のインデックスとしています。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"# プロットするデータ\\n\",\n    \"d = [0, 1, 4, 9, 16]\\n\",\n    \"p = figure()\\n\",\n    \"p.line(list(range(len(d))), d) # 第1引数がx軸、第2引数がy軸\\n\",\n    \"show(p)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"`line()` メソッド（及び他の描画用メソッド）では、キーワード引数も使えます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"p = figure()\\n\",\n    \"p.line(y=d, x=list(range(len(d))))\\n\",\n    \"show(p)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"次に示すように、複数のグラフをまとめてプロットして表示することもできます。\\n\",\n    \"プロットするメソッドではグラフの線の色や線の種類を、`line_color` 引数や `line_dash` 引数で指定できます。\\n\",\n    \"また、`legend_label` 引数に値を設定すると、プロットしたグラフが凡例に現れます。\\n\",\n    \"引数の詳細は[Figure.line](https://bokeh.pydata.org/en/latest/docs/reference/plotting.html#bokeh.plotting.figure.Figure.line)のページ（英語）を参照してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"data = [0, 1, 4, 9, 16]\\n\",\n    \"x = list(range(len(data)))\\n\",\n    \"p = figure()\\n\",\n    \"p.line(x, x, line_color='blue', legend_label='linear', line_dash='dashed')\\n\",\n    \"p.line(x, data, line_color='green', legend_label='quad', line_dash='dotted')\\n\",\n    \"show(p)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"`figure()` 関数の引数に、軸のラベルや、グラフのタイトルを設定できます。\\n\",\n    \"プロット点を線グラフ上に重ねたいときには、**`circle()`** メソッドや **`cross()`** メソッドで同色の円や十字を追加で描けばよいです。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"p = figure(x_axis_label='x', y_axis_label='y', title='Linear vs. Quadratic')\\n\",\n    \"p.line(x, x, line_color='blue', legend_label='linear', line_dash='dashed')\\n\",\n    \"p.circle(x, x, color='blue', line_width=5)\\n\",\n    \"p.line(x, data, line_color='green', legend_label='quad', line_dash='dotted')\\n\",\n    \"p.cross(x, data, color='green', size=16)\\n\",\n    \"show(p)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"色の使い分けを全て自分で決めるのは面倒です。\\n\",\n    \"良く使われる色のリストがパレットとして、提供されています。\\n\",\n    \"次は、`d3` の `Category10` という種類の3色パレットを用いています。\\n\",\n    \"詳細は、[palette](https://bokeh.pydata.org/en/latest/docs/reference/palettes.html)のページを参照してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"from bokeh.palettes import d3\\n\",\n    \"c = d3['Category10'][3]\\n\",\n    \"p = figure(x_axis_label='x', y_axis_label='y', title='Linear vs. Quadratic')\\n\",\n    \"p.line(x, x, line_color=c[0], legend_label='linear', line_dash='dashed')\\n\",\n    \"p.circle(x, x, color=c[0], line_width=5)\\n\",\n    \"p.line(x, data, line_color=c[1], legend_label='quad', line_dash='dotted')\\n\",\n    \"p.cross(x, data, color=c[1], size=16)\\n\",\n    \"show(p)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"グラフを描画するときのプロット数を増やすことで任意の曲線のグラフを作成することもできます。\\n\",\n    \"次の例では、`numpy` モジュールの `arange()` 関数を用いて、$- \\\\pi$ から $\\\\pi$ の範囲を `0.1` 刻みでx軸の値を配列として準備しています。\\n\",\n    \"そのx軸の値に対して、`numpy` モジュールの `cos()` 関数と `sin()` 関数を用いて、y軸の値をそれぞれ準備し、cosカーブとsinカーブを描画しています。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"#　グラフのx軸の値となる配列\\n\",\n    \"x = np.arange(-np.pi, np.pi, 0.1)\\n\",\n    \"\\n\",\n    \"# 上記配列をcos, sin関数に渡し, y軸の値として描画\\n\",\n    \"p = figure(title='cos and sin Curves', x_axis_label='x', y_axis_label='y')\\n\",\n    \"p.line(x, np.cos(x), line_color=c[0])\\n\",\n    \"p.line(x, np.sin(x), line_color=c[1])\\n\",\n    \"show(p)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"プロットの数を少なくすると、曲線は直線をつなぎ合わせることで描画されていることがわかります。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"x = np.arange(-np.pi, np.pi, 0.5)\\n\",\n    \"p = figure(title='cos and sin Curves', x_axis_label='x', y_axis_label='y')\\n\",\n    \"p.line(x, np.cos(x), line_color=c[0])\\n\",\n    \"p.line(x, np.sin(x), line_color=c[1])\\n\",\n    \"show(p)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### グラフの例：ソートアルゴリズムにおける比較回数\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"import random\\n\",\n    \"\\n\",\n    \"def bubble_sort(lst):\\n\",\n    \"    n = 0\\n\",\n    \"    for j in range(len(lst) - 1):\\n\",\n    \"        for i in range(len(lst) - 1 - j):\\n\",\n    \"            n = n + 1\\n\",\n    \"            if lst[i] > lst[i+1]:\\n\",\n    \"                lst[i + 1], lst[i] = lst[i], lst[i+1]\\n\",\n    \"    return n\\n\",\n    \"\\n\",\n    \"def merge_sort_rec(data, l, r, work):\\n\",\n    \"    if l+1 >= r: \\n\",\n    \"        return 0\\n\",\n    \"    m = l+(r-l)//2\\n\",\n    \"    n1 = merge_sort_rec(data, l, m, work)\\n\",\n    \"    n2 = merge_sort_rec(data, m, r, work)\\n\",\n    \"    n = 0\\n\",\n    \"    i1 = l\\n\",\n    \"    i2 = m\\n\",\n    \"    for i in range(l, r):\\n\",\n    \"        from1 = False\\n\",\n    \"        if i2 >= r:\\n\",\n    \"            from1 = True\\n\",\n    \"        elif i1 < m:\\n\",\n    \"            n = n + 1\\n\",\n    \"            if data[i1] <= data[i2]:\\n\",\n    \"                from1 = True\\n\",\n    \"        if from1:\\n\",\n    \"            work[i] = data[i1]\\n\",\n    \"            i1 = i1 + 1\\n\",\n    \"        else:\\n\",\n    \"            work[i] = data[i2]\\n\",\n    \"            i2 = i2 + 1\\n\",\n    \"    for i in range(l, r):\\n\",\n    \"        data[i] = work[i]\\n\",\n    \"    return n1+n2+n\\n\",\n    \"\\n\",\n    \"def merge_sort(data):\\n\",\n    \"    return merge_sort_rec(data, 0, len(data), [0]*len(data))\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"x = np.arange(100, 1100, 100)\\n\",\n    \"bdata = np.array([bubble_sort([random.randint(1,10000) for i in range(k)]) for k in x])\\n\",\n    \"mdata = np.array([merge_sort([random.randint(1,10000) for i in range(k)]) for k in x])\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"p = figure(title='bubble sort vs. merge sort', x_axis_label='number of items', y_axis_label='number of comparisons')\\n\",\n    \"p.line(x, bdata, line_color=c[0])\\n\",\n    \"p.circle(x, bdata, color=c[0], line_width=5)\\n\",\n    \"p.line(x, mdata, line_color=c[1])\\n\",\n    \"p.circle(x, mdata, color=c[1], line_width=5)\\n\",\n    \"show(p)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 散布図\\n\",\n    \"\\n\",\n    \"散布図の描画には、点のプロットを `marker` 引数で指定できる **`scatter()`** メソッドが便利です。\\n\",\n    \"以下では、ランダムに生成した20個の要素からなる配列 `x`、`y` の各要素の値の組みを点としてプロットした散布図を表示します。\\n\",\n    \"プロットする点のマーカは円とし、`size` 引数で大きさを、`alpha` 引数で透明度を設定しています。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"#　グラフのx軸の値となる配列\\n\",\n    \"x = np.random.rand(20)\\n\",\n    \"#　グラフのy軸の値となる配列\\n\",\n    \"y = np.random.rand(20)\\n\",\n    \"\\n\",\n    \"p = figure()\\n\",\n    \"p.scatter(x, y, marker='circle', size=16, alpha=0.5)\\n\",\n    \"show(p)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"これと同じグラフは、単に `circle()` メソッドでプロットをすることでも描画できます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"p = figure()\\n\",\n    \"p.circle(x, y, size=16, alpha=0.5)\\n\",\n    \"show(p)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 棒グラフ\\n\",\n    \"\\n\",\n    \"棒グラフは、**`vbar()`** メソッドを用いて描画できます。\\n\",\n    \"次の例では、ランダムに生成した10個の要素からなる配列 `y` の各要素の値を縦の棒グラフで表示しています。\\n\",\n    \"`x` は、x軸上で棒グラフのバーの並ぶ位置を示しています。\\n\",\n    \"ここでは、`numpy` モジュールの `arange()` 関数を用いて、`1` から `10` の範囲を `1` 刻みでx軸上のバーの並ぶ位置として配列を準備しています。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"# x軸上で棒の並ぶ位置となる配列\\n\",\n    \"x = np.arange(1, 11, 1)\\n\",\n    \"#　グラフのy軸の値となる配列\\n\",\n    \"y = np.random.rand(10)\\n\",\n    \"\\n\",\n    \"p = figure()\\n\",\n    \"p.vbar(x, 0.5, y) # 第2引数は幅\\n\",\n    \"show(p)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## ヒストグラム\\n\",\n    \"\\n\",\n    \"ヒストグラムの描画には、**`quad()`** メソッドが便利です。\\n\",\n    \"次の例では、`numpy.random.randn()` 関数を用いて、正規分布に基づく 1000 個の数値の要素からなる配列を用意し、**`numpy.histogram()`** 関数を使って20個のビンに分類したヒストグラムを計算しています。\\n\",\n    \"その計算結果を、`quad()` メソッドを使って、描画しています。\\n\",\n    \"ビンの境界を見やすくするように、`line_color` と `fill_color`（デフォルト色）を別の色にしています。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"# 正規分布に基づく1000個の数値の要素からなる配列 \\n\",\n    \"d = np.random.randn(1000)\\n\",\n    \"# numpy.histogramで20のビンに分割\\n\",\n    \"hist, bin_edges = np.histogram(d, 20)\\n\",\n    \"p = figure()\\n\",\n    \"p.quad(top=hist, bottom=0, left=bin_edges[:-1], right=bin_edges[1:], line_color='white', alpha=0.5)\\n\",\n    \"show(p)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## ヒートマップ\\n\",\n    \"\\n\",\n    \"最後に、複雑な応用例として、ヒートマップの描画方法を示します。\\n\",\n    \"次の例は、10x10 のマスに `0.0` 以上 `1.0` 未満の乱数の温度を割り当て、その値に応じた色で塗ったヒートマップです。\\n\",\n    \"ここでは、これまでと違って、x軸、y軸、温度の3つの値が必要になります。\\n\",\n    \"そこで、**`bokeh.models.ColumnDataSource`** 型を用いて、その3つ組を、`'x'`・`'y'`・`'T'` の属性を持った表データを構築しています。\\n\",\n    \"この表データの構築には、7-1で説明するpandasも使えます。\\n\",\n    \"\\n\",\n    \"ヒートマップでは、温度に応じた階調のある色選択が必要です。\\n\",\n    \"そこで、色階調と値を対応付ける **`bokeh.models.LinearColorMapper`** 型の `mapper` を準備します。\\n\",\n    \"`rect()` メソッドでは、表データの属性を参照して描画しています。\\n\",\n    \"色は、表データの値を `mapper` に適用して色に変化させたものを用いることで、温度に応じた色選択を実現しています。\\n\",\n    \"最後に、目盛り付きのカラーバーを生成して、右に配置しています。\\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"from bokeh.models import LinearColorMapper, BasicTicker, PrintfTickFormatter, ColorBar, ColumnDataSource\\n\",\n    \"from bokeh.transform import transform\\n\",\n    \"\\n\",\n    \"# 10行10列のランダム要素からなる行列\\n\",\n    \"n = 10\\n\",\n    \"data = np.random.rand(n*n)\\n\",\n    \"src = ColumnDataSource({'x': [yx % n for yx in range(n*n)], 'y': [yx // n for yx in range(n*n)], 'T' : data})\\n\",\n    \"\\n\",\n    \"colors = ['#75968f', '#a5bab7', '#c9d9d3', '#e2e2e2', '#dfccce', '#ddb7b1', '#cc7878', '#933b41', '#550b1d']\\n\",\n    \"mapper = LinearColorMapper(palette=colors, low=data.min(), high=data.max())\\n\",\n    \"p = figure()\\n\",\n    \"p.rect('x', 'y', 1, 1, source=src, line_color=None, fill_color=transform('T', mapper))\\n\",\n    \"color_bar = ColorBar(color_mapper=mapper, location=(0, 0),\\n\",\n    \"                     ticker=BasicTicker(desired_num_ticks=len(colors)),\\n\",\n    \"                     formatter=PrintfTickFormatter(format='%2.1f'))\\n\",\n    \"p.add_layout(color_bar, 'right')\\n\",\n    \"show(p)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## グラフのファイル出力\\n\",\n    \"\\n\",\n    \"これまで表示されてきたグラフには画像保存ボタンがあるので、それをクリックすればPNG形式の画像を保存できます。\\n\",\n    \"\\n\",\n    \"**`bokeh.plotting.output_file()`** を用いると、グラフ単独をHTMLファイルとして保存できるようになります。\\n\",\n    \"ただし、既に `output_notebook()` を読んでいる場合、**`bokeh.plotting.reset_output()`** で状態をリセットする必要があります。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"from bokeh.plotting import save, output_file, reset_output\\n\",\n    \"x = np.arange(-2*np.pi, 2*np.pi, 0.1)\\n\",\n    \"p = figure(title='sin Curves', x_axis_label='x', y_axis_label='y')\\n\",\n    \"p.line(x, np.sin(x))\\n\",\n    \"\\n\",\n    \"reset_output() # output_notebook()の効果を消す\\n\",\n    \"output_file('sin.html') # 出力先の設定\\n\",\n    \"save(p) # グラフを保存するだけ\\n\",\n    \"show(p) # 保存した上でブラウザを開く\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"***注意***：`output_notebook()` を呼んだ状態と `output_file()` を呼んだ状態が重なると、`show()` でエラーが起きます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": []\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"Python 3 (ipykernel)\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"codemirror_mode\": {\n    \"name\": \"ipython\",\n    \"version\": 3\n   },\n   \"file_extension\": \".py\",\n   \"mimetype\": \"text/x-python\",\n   \"name\": \"python\",\n   \"nbconvert_exporter\": \"python\",\n   \"pygments_lexer\": \"ipython3\",\n   \"version\": \"3.12.4\"\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 4\n}\n"
  },
  {
    "path": "colab/appendix/5-command.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"##================================================\\n\",\n    \"## このセルを最初に実行せよ---Run this cell first.\\n\",\n    \"##================================================\\n\",\n    \"!wget -P . https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/text-sample.txt\\n\",\n    \"!wget -P . https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/tokyo-temps.csv\\n\",\n    \"!wget -P . https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/small.csv\\n\",\n    \"!wget -P . https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/tokyo-july-temps.csv\\n\",\n    \"!wget -P . https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/argsprint.py\\n\",\n    \"!wget -P . https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/B1S.xml\\n\",\n    \"!wget -P . https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/sample.py\\n\",\n    \"!wget -P . https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/sin.html\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/py_open_2.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/py_open_1.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/sample_py_win2_1.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/sample_py_win2_3.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/sample_py_win2_2.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/py_conv_1.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/py_conv_2.png\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# ▲Pythonスクリプトとコマンドライン実行\\n\",\n    \"Pythonスクリプトとコマンドライン実行について説明します。\\n\",\n    \"\\n\",\n    \"参考\\n\",\n    \"\\n\",\n    \"- https://docs.python.org/ja/3/tutorial/interpreter.html\\n\",\n    \"- https://docs.python.org/ja/3/tutorial/modules.html\\n\",\n    \"- https://docs.python.org/ja/3/tutorial/appendix.html\\n\",\n    \"- https://docs.python.org/ja/3/library/sys.html\\n\",\n    \"- https://docs.python.org/ja/3/reference/import.html\\n\",\n    \"\\n\",\n    \"実は、第4回で紹介したモジュールファイル（拡張子 `.py`）は、それ単独で直接実行可能な自己完結したプログラムです。\\n\",\n    \"直接実行されるPythonプログラムコードのことを指して特に、**Pythonスクリプト**と呼びます。\\n\",\n    \"モジュールかスクリプトかを区別しないときには、Pythonソースファイルや `.py` ファイル等と呼ばれます。\\n\",\n    \"\\n\",\n    \"たとえば、次のコードセルを実行してみてください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"a1 = 10\\n\",\n    \"print('a1 contains the value of', a1)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"この内容と全く同じコードを記述したPythonスクリプトファイル `sample.py` を教材として用意しました。 \\n\",\n    \"\\n\",\n    \"オペレーティングシステム（実際にはシェル）から `sample.py` を実行するには、以下のようにします。\\n\",\n    \"\\n\",\n    \"```console\\n\",\n    \">>> python sample.py\\n\",\n    \"```\\n\",\n    \"\\n\",\n    \"あるいは\\n\",\n    \"\\n\",\n    \"```console\\n\",\n    \">>> python3 sample.py\\n\",\n    \"```\\n\",\n    \"\\n\",\n    \"ここで、`>>> ` は、シェルのプロンプト（コマンド入力を促す記号）を意味します。\\n\",\n    \"後に示す具体例を見るとわかるように、環境によっては `>` であったり、`$` であったりします。\\n\",\n    \"\\n\",\n    \"このようにスクリプトをシェルから実行することを、**コマンドライン実行**と呼びます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## コマンドライン実行の具体例\\n\",\n    \"\\n\",\n    \"`sample.py` をコマンドライン実行する具体例を、実行環境毎に説明します。\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### Jupyter Notebook での実行方法\\n\",\n    \"\\n\",\n    \"ファイルマネージャ画面で、\\n\",\n    \"\\n\",\n    \"New ⇒ Terminal\\n\",\n    \"\\n\",\n    \"を選択すると、ターミナルのタブが生成されます。\\n\",\n    \"\\n\",\n    \"![ターミナルタブ](https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/./appendix/fig/terminal_in_menu.png)\\n\",\n    \"\\n\",\n    \"Windows 10 の環境（ユーザーアカウント名 `sato`）では、次のように表示されます。\\n\",\n    \"\\n\",\n    \"![コンソール](https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/./appendix/fig/console_in_browser.png)\\n\",\n    \"\\n\",\n    \"次の例では、`cd` コマンドで `sample.py` が存在するディレクトリ `materials/5/` に移動し、その上で `sample.py` を実行しています。\\n\",\n    \"\\n\",\n    \"![sample.py](https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/./appendix/fig/sample_py_browser.png)\\n\",\n    \"\\n\",\n    \"Jupyter Notebook 上で開かれるターミナルは、環境によって違います。\\n\",\n    \"デフォルトでは、Windows 10 ではPowerShellが起動し、macOSならばbashが起動するでしょう。\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### Windowsでの実行方法\\n\",\n    \"\\n\",\n    \"以下をクリックすれば、ターミナルが開いて `python` をコマンドとして実行できます。\\n\",\n    \"\\n\",\n    \"Start メニュー ⇒ Anaonda3(64-bit) ⇒ Anaconda Prompt \\n\",\n    \"\\n\",\n    \"![Anaconda Prompt](https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/./appendix/fig/sample_py_win_1.png)\\n\",\n    \"\\n\",\n    \"下記のようなウインドウが表示されます。\\n\",\n    \"\\n\",\n    \"![Anaconda Prompt2](https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/./appendix/fig/sample_py_win_2.png)\\n\",\n    \"\\n\",\n    \"Windowsのユーザーアカウント名のついたフォルダ（画像では、KMK）の中に `pythontest` というフォルダを作成し、その中に `sample.py` を格納した場合の実行例を示します。\\n\",\n    \"\\n\",\n    \"例では、`cd` というコマンドで `sample.py` を格納したフォルダ `pythontest` に移動し、その上で `sample.py` を実行しています。\\n\",\n    \"\\n\",\n    \"![Anaconda sample](https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/./appendix/fig/sample_py_win_3.png)\\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### macOS での実行方法\\n\",\n    \"\\n\",\n    \"Application ⇒ Utilities ⇒ Terminal.app を起動します。\\n\",\n    \"\\n\",\n    \"アプリケーション ⇒ ユーティリティ ⇒ ターミナル.app を起動します。（日本語の場合）\\n\",\n    \"        \\n\",\n    \"![MacOS FInder](https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/./appendix/fig/sample_py_mac_1.png)\\n\",\n    \"\\n\",\n    \"下記のようなウインドウが表示されます。\\n\",\n    \"\\n\",\n    \"![Terminal.app](https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/./appendix/fig/sample_py_mac_2.png)\\n\",\n    \"\\n\",\n    \"\\n\",\n    \"ダウンロードフォルダ (`Downloads`) に `sample.py` を格納した場合の実行例を示します。\\n\",\n    \"\\n\",\n    \"例では、`cd` というコマンドで `sample.py` を格納した `Downloads` フォルダに移動し、その上で `sample.py` を実行しています。\\n\",\n    \"\\n\",\n    \"![MacOS Sample](https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/./appendix/fig/sample_py_mac_3.png)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## コマンドライン引数\\n\",\n    \"\\n\",\n    \"コマンドライン実行時には、実行スクリプト名の後に、文字列を書き込むことにより、実行スクリプトへ引数を与えることができます。 \\n\",\n    \"この引数のことを、**コマンドライン引数**と呼びます。\\n\",\n    \"\\n\",\n    \"たとえば、`argsprint.py` というスクリプトファイルをコマンドライン実行することを考えます。\\n\",\n    \"\\n\",\n    \"```console\\n\",\n    \">>> python argsprint.py\\n\",\n    \"```\\n\",\n    \"\\n\",\n    \"ここで、 `argsprint.py` の後ろに、適当な文字列を付け加えます。たとえば、以下のように3つの文字列 `firstvalue` `secondvalue` `thirdvalue` をスペースで区切って付け加えてみます。 \\n\",\n    \"\\n\",\n    \"```console\\n\",\n    \">>> python argsprint.py firstvalue secondvalue thirdvalue\\n\",\n    \"```\\n\",\n    \"\\n\",\n    \"このとき、この3つの文字列が `argsprint.py` にコマンドライン引数として与えられることになります。\\n\",\n    \"\\n\",\n    \"この引数は、`sys` モジュールの `argv` という変数 (`sys.argv`) にリストとして格納されます。\\n\",\n    \"\\n\",\n    \" `argsprint.py` を次のようなコードからなるファイルとしましょう。\\n\",\n    \"\\n\",\n    \"---\\n\",\n    \"\\n\",\n    \"argsprint.py:\\n\",\n    \"\\n\",\n    \"```Python\\n\",\n    \"import sys\\n\",\n    \"print(sys.argv) # リスト sys.argv の中身を印字\\n\",\n    \"```\\n\",\n    \"\\n\",\n    \"---\\n\",\n    \"\\n\",\n    \"このような `argsprint.py` を先の例のように実行すると、以下の画像のような結果が得られます。リスト `sys.argv` に2番目の要素として文字列 `firstvalue` が、3番目の要素として文字列 `secondvalue` が、4番目の要素として文字列 `thirdvalue` が格納されていることを確認してください。また、リストの最初の要素には、実行したスクリプト名（ここでは  `argsprint.py`）が格納されることに注意してください。\\n\",\n    \"\\n\",\n    \"![argsprint](https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/./appendix/fig/argsprint.png)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### 練習\\n\",\n    \"\\n\",\n    \"上記に従って `argsprint.py` ファイルを作成して、引数を変更したり、引数の数を増やしたり減らしたりして、表示がどう変わるか調べてください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### 練習\\n\",\n    \"\\n\",\n    \"コマンドライン実行時に、コマンドライン引数の1番目を印字 (print) する `arg1.py` を作成せよ。\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### 練習\\n\",\n    \"\\n\",\n    \"コマンドライン実行時に、スクリプト名を印字する `scriptname.py` を作成してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### 練習\\n\",\n    \"\\n\",\n    \"コマンドライン実行時に、コマンドライン引数の数を印字する `numargs.py` を作成してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### 練習\\n\",\n    \"\\n\",\n    \"コマンドライン引数として与えられた任意個の整数の和を印字する `sum.py` を作成してください。 \\n\",\n    \"\\n\",\n    \"たとえば、次のように実行すると、 \\n\",\n    \"\\n\",\n    \"```console\\n\",\n    \">>> python sum.py 1 2 3\\n\",\n    \"```\\n\",\n    \"\\n\",\n    \"`6` と印字されます。\\n\",\n    \"\\n\",\n    \"なお、コマンドライン引数は文字列型であることに注意してください。。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"v1 = '100'\\n\",\n    \"v2 = '200'\\n\",\n    \"int(v1) + int(v2) # 整数加算\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"v1 + v2 # 文字列結合\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## モジュールのコマンドライン実行\\n\",\n    \"\\n\",\n    \"さて、モジュールファイルは、それ自体が単独で実行可能であると述べました。\\n\",\n    \"つまり、Pythonソースファイルは、モジュールとしてインポートされる場合と、スクリプトとしてコマンドライン実行される場合の2通りが考えられるわけです。\\n\",\n    \"\\n\",\n    \"あるモジュールが、インポートされたのか、スクリプトとしてコマンドライン実行されたのかは、プログラム中の **`__name__`** という組み込み変数を参照することで区別できます。\\n\",\n    \"\\n\",\n    \"具体的には、モジュール `mod.py` がコマンドライン実行されたとき、`__name__` の値は `'__main__'` になります。\\n\",\n    \"一方、`import mod` されたとき、`__name__` の値は `'mod'` になります。\\n\",\n    \"\\n\",\n    \"これを利用することで、インポートされた場合とコマンドライン実行された場合で、モジュールの振舞いを変えることができます。\\n\",\n    \"たとえば、次に示す `factorial.py` モジュールを考えます。\\n\",\n    \"\\n\",\n    \"---\\n\",\n    \"\\n\",\n    \"factorial.py:\\n\",\n    \"\\n\",\n    \"```Python\\n\",\n    \"import sys\\n\",\n    \"\\n\",\n    \"# 階乗n!を返す\\n\",\n    \"def fact(n):\\n\",\n    \"    prod = 1\\n\",\n    \"    for i in range(1, n + 1):\\n\",\n    \"        prod *= i\\n\",\n    \"    return prod\\n\",\n    \"\\n\",\n    \"if __name__ == '__main__':\\n\",\n    \"    n = int(sys.argv[1]) # 整数nが1番目のコマンドライン引数で与えられる\\n\",\n    \"    print(fact(n))       # n!を印字 \\n\",\n    \"```\\n\",\n    \"\\n\",\n    \"---\\n\",\n    \"\\n\",\n    \"これに対して、`import factorial` すると、階乗を計算する関数 `factorial.fact()` が利用できるようになります。\\n\",\n    \"一方、`python factorial.py 6` とコマンドライン実行すると、6の階乗である `720` が印字されます。\\n\",\n    \"つまり、このモジュールは、階乗を計算するライブラリとしても、階乗を計算するスクリプトとしても利用できるわけです。\\n\",\n    \"\\n\",\n    \"もし `if __name__ == '__main__'` の条件分岐が無かったら、モジュールとしてインポートしたときに、インポート元のスクリプトのために与えられたコマンドライン引数を使って、階乗を計算・印字しようとします。\\n\",\n    \"これは一般に、望ましい振舞いではありません。\\n\",\n    \"\\n\",\n    \"このように、`if __name__ == '__main__'` の分岐中には、自己完結したスクリプトとしての振舞いが記述されます。\\n\",\n    \"\\n\",\n    \"ライブラリモジュールとして使うことのみが想定されている場合、テストコードが記述されることもあります。\\n\",\n    \"たとえば、次のように記述すると、\\n\",\n    \"\\n\",\n    \"---\\n\",\n    \"\\n\",\n    \"factorial.py:\\n\",\n    \"\\n\",\n    \"```Python\\n\",\n    \"import sys\\n\",\n    \"\\n\",\n    \"# 階乗n!を返す\\n\",\n    \"def fact(n):\\n\",\n    \"    prod = 1\\n\",\n    \"    for i in range(1, n + 1):\\n\",\n    \"        prod *= i\\n\",\n    \"    return prod\\n\",\n    \"\\n\",\n    \"if __name__ == '__main__':\\n\",\n    \"    print('test n = 6:', fact(6) == 720) \\n\",\n    \"    print('test n = 0:', fact(0) == 1) \\n\",\n    \"```\\n\",\n    \"\\n\",\n    \"---\\n\",\n    \"\\n\",\n    \"コマンドライン実行したときには、`fact()` が正しく計算されているかテストした結果が印字されます。\\n\",\n    \"このテストコードは、ライブラリモジュールとしてimportして利用するときには実行されません。\\n\",\n    \"このようにすると、1つのPythonソースファイルの中で、ライブラリ実装とテストをひとまとめにできて、保守しやすくなります。\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## ソースファイル先頭部分にある宣言\\n\",\n    \"\\n\",\n    \"### 文字コード宣言\\n\",\n    \"\\n\",\n    \"PythonソースコードはUTF-8で記述することが[公式に推奨されています](https://www.python.org/dev/peps/pep-0008/#source-file-encoding)。\\n\",\n    \"\\n\",\n    \"しかし、特にWindows環境では、歴史的事情からShift_JIS (shift_jis) が使われることがあります。\\n\",\n    \"このとき、Pythonソースファイルの先頭部分には、次のような**文字コード宣言**が必要です。\\n\",\n    \"\\n\",\n    \"```Python\\n\",\n    \"# -*- coding: shift_jis -*-\\n\",\n    \"```\\n\",\n    \"\\n\",\n    \"これがないと、Pythonインタプリタがエラーを出して止まります。\\n\",\n    \"\\n\",\n    \"なお、UTF-8で記述されている場合には、文字コード宣言を記述しないことが[公式に推奨されています](https://www.python.org/dev/peps/pep-0008/#source-file-encoding)。\\n\",\n    \"\\n\",\n    \"### shebang\\n\",\n    \"\\n\",\n    \"Unix環境（macOSを含む）では、スクリプトファイルの先頭行には、そのスクリプトを実行するコマンドを指定できるようになっています。\\n\",\n    \"この先頭行のことは、**shebang**と呼ばれます。\\n\",\n    \"\\n\",\n    \"Unix環境でPythonスクリプトに用いられる標準的なshebangは次です。\\n\",\n    \"```Python\\n\",\n    \"#!/usr/bin/env python3\\n\",\n    \"```\\n\",\n    \"`#!` に続く部分で、コマンドを絶対パスで指定します。\\n\",\n    \"`env` コマンドは、その引数（ここでは `python3`）の名前のコマンドを、環境の中から探して実行します。\\n\",\n    \"したがって、上のように記述すると、Pythonインタプリタがインストールされている場所を気にせずに、Unix環境におけるPython3系列の標準コマンド名である `python3` を使って実行できるようになります。\\n\",\n    \"\\n\",\n    \"shebangと文字コード宣言の両方を含む場合は、たとえば、次のようになります。\\n\",\n    \"```Python\\n\",\n    \"#!/usr/bin/env python3\\n\",\n    \"# -*- coding: shift_jis -*-\\n\",\n    \"```\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 練習の解答\\n\",\n    \"\\n\",\n    \"各セルのコードを保存した `.py` ファイルが解答です。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"#arg1.py\\n\",\n    \"import sys\\n\",\n    \"print(sys.argv[1])\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"#scriptname.py\\n\",\n    \"import sys\\n\",\n    \"print(sys.argv[0])\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"#numargs.py\\n\",\n    \"import sys\\n\",\n    \"num = len(sys.argv) - 1 # sys.argv[0]はコマンドライン引数ではないので1減らす\\n\",\n    \"print(num)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {\n    \"tags\": [\n     \"raises-exception\"\n    ]\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"#sum.py\\n\",\n    \"import sys\\n\",\n    \"s = 0\\n\",\n    \"for v in sys.argv[1:]:\\n\",\n    \"    s += int(v)\\n\",\n    \"print(s)\"\n   ]\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"Python 3\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"name\": \"python\"\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 2\n}\n"
  },
  {
    "path": "colab/appendix/5-matplotlib.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"##================================================\\n\",\n    \"## このセルを最初に実行せよ---Run this cell first.\\n\",\n    \"##================================================\\n\",\n    \"!wget -P . https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/text-sample.txt\\n\",\n    \"!wget -P . https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/tokyo-temps.csv\\n\",\n    \"!wget -P . https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/small.csv\\n\",\n    \"!wget -P . https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/tokyo-july-temps.csv\\n\",\n    \"!wget -P . https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/argsprint.py\\n\",\n    \"!wget -P . https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/B1S.xml\\n\",\n    \"!wget -P . https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/sample.py\\n\",\n    \"!wget -P . https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/sin.html\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/console_in_browser.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/sample_py_win_1.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/sample_py_win_3.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/sample_py_win_2.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/py_open_2.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/py_open_1.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/sample_py_mac_2.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/sample_py_mac_3.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/sample_py_win2_1.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/sample_py_win2_3.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/sample_py_mac_1.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/sample_py_win2_2.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/argsprint.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/terminal_in_menu.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/sample_py_browser.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/py_conv_1.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/py_conv_2.png\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# ▲Matplotlibライブラリ\\n\",\n    \"Matplotlibライブラリについて説明します。\\n\",\n    \"\\n\",\n    \"参考\\n\",\n    \"\\n\",\n    \"- https://matplotlib.org/\\n\",\n    \"\\n\",\n    \"**Matplotlib**ライブラリにはグラフを可視化するためのモジュールが含まれています。以下では、Matplotlibライブラリのモジュールを使った、グラフの基本的な描画について説明します。\\n\",\n    \"\\n\",\n    \"Matoplotlibライブラリを使用するには、まず `matplotlib` のモジュールをインポートします。ここでは、基本的なグラフを描画するための `matplotlib.pyplot` モジュールをインポートします。慣例として、同モジュールを `plt` と別名をつけてコードの中で使用します。また、グラフで可視化するデータはリストや配列を用いることが多いため、5-3で使用した `numpy` モジュールも併せてインポートします。なお、`%matplotlib inline` はノートブック内でグラフを表示するために必要です。\\n\",\n    \"\\n\",\n    \"`matplotlib` では、通常 `show()` 関数を呼ぶと描画を行いますが、`inline` 表示指定の場合、`show()` 関数を省略できます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"import numpy as np\\n\",\n    \"import matplotlib.pyplot as plt\\n\",\n    \"%matplotlib inline\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 線グラフ\\n\",\n    \"\\n\",\n    \"`pyplot` モジュールの **`plot()`** 関数を用いて、リストの要素の数値をy軸の値として**グラフ**を描画します。y軸の値に対応するx軸の値は、リストの各要素のインデックスとなっています。\\n\",\n    \"\\n\",\n    \"具体的には、次のようにすることで `リストA` のインデックス `i` に対して、`(i, リストA[i])` の位置に点を打ち、各点を線でつなぎます。\\n\",\n    \"\\n\",\n    \"---\\n\",\n    \"```Python\\n\",\n    \"plt.plot(リストA)\\n\",\n    \"```\\n\",\n    \"---\\n\",\n    \"\\n\",\n    \"たとえば、次のようになります。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"# plotするデータ\\n\",\n    \"d =[0, 1, 4, 9, 16]\\n\",\n    \"\\n\",\n    \"# plot関数で描画\\n\",\n    \"plt.plot(d); \\n\",\n    \"# セルの最後に評価されたオブジェクトの出力表示を抑制するために、以下ではセルの最後の行にセミコロン (`;`) をつけています。\\n\",\n    \"# 試しにセミコロンを消した場合も試してみてください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"`plot()` 関数では、x, y の両方の軸の値を引数に渡すこともできます。\\n\",\n    \"\\n\",\n    \"具体的には、次のように `リストX` と `リストY` を引数として与えると、各 `i` に対して、 `(リストX[i], リストY[i])` の位置に点を打ち、各点を線でつなぎます。\\n\",\n    \"\\n\",\n    \"---\\n\",\n    \"```Python\\n\",\n    \"plt.plot(リストX, リストY)\\n\",\n    \"```\\n\",\n    \"---\\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"# plotするデータ\\n\",\n    \"x =[0, 1, 2, 3, 4]\\n\",\n    \"y =[0, 3, 6, 9, 12]\\n\",\n    \"\\n\",\n    \"# plot関数で描画\\n\",\n    \"plt.plot(x,y); \"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"リストの代わりに**NumPy**ライブラリの配列を与えても同じ結果が得られます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"# plotするデータ\\n\",\n    \"x =[0, 1, 2, 3, 4]\\n\",\n    \"aryx = np.array(x) # リストから配列を作成\\n\",\n    \"y =[0, 3, 6, 9, 12]\\n\",\n    \"aryy = np.array(y) # リストから配列を作成\\n\",\n    \"\\n\",\n    \"# plot関数で描画\\n\",\n    \"plt.plot(aryx, aryy); \"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"以下のようにグラフを複数まとめて表示することもできます。複数のグラフを表示すると、線ごとに異なる色が自動で割り当てられます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"# plotするデータ\\n\",\n    \"data =[0, 1, 4, 9, 16]\\n\",\n    \"x =[0, 1, 2, 3, 4]\\n\",\n    \"y =[0, 1, 2, 3, 4]\\n\",\n    \"# plot関数で描画。\\n\",\n    \"plt.plot(x, y)\\n\",\n    \"plt.plot(data);\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"`plot()` 関数ではグラフの線の色、形状、データポイントのマーカの種類を、それぞれ以下のように `linestyle`, `color`, `marker` 引数で指定して変更することができます。それぞれの引数で指定可能な値は以下を参照してください。\\n\",\n    \"\\n\",\n    \"- [linestyle](https://matplotlib.org/api/_as_gen/matplotlib.lines.Line2D.html#matplotlib.lines.Line2D.set_linestyle)\\n\",\n    \"- [color](https://matplotlib.org/api/colors_api.html?highlight=color#module-matplotlib.colors)\\n\",\n    \"- [marker](https://matplotlib.org/api/markers_api.html#module-matplotlib.markers)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"# plotするデータ\\n\",\n    \"data =[0, 1, 4, 9, 16]\\n\",\n    \"x =[0, 1, 2, 3, 4]\\n\",\n    \"y =[0, 1, 2, 3, 4]\\n\",\n    \"\\n\",\n    \"# plot関数で描画。線の形状、色、データポイントのマーカ指定\\n\",\n    \"plt.plot(x,y, linestyle='--', color='blue', marker='o') \\n\",\n    \"plt.plot(data, linestyle=':', color='green', marker='*');\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"`plot()` 関数の `label` 引数にグラフの各線の凡例を文字列として渡し、**`legend()`** 関数を呼ぶことで、グラフ内に凡例を表示できます。`legend()` 関数の `loc` 引数で凡例を表示する位置を指定することができます。引数で指定可能な値は以下を参照してください。\\n\",\n    \"\\n\",\n    \"- [lengend()関数](https://matplotlib.org/api/_as_gen/matplotlib.pyplot.legend.html#matplotlib.pyplot.legend)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"# plotするデータ\\n\",\n    \"data =[0, 1, 4, 9, 16]\\n\",\n    \"x =[0, 1, 2, 3, 4]\\n\",\n    \"y =[0, 1, 2, 3, 4]\\n\",\n    \"\\n\",\n    \"# plot関数で描画。線の形状、色、データポイントのマーカ指定\\n\",\n    \"plt.plot(x,y, linestyle='--', color='blue', marker='o', label='linear') \\n\",\n    \"plt.plot(data, linestyle=':', color='green', marker='*', label='quad')\\n\",\n    \"#凡例を表示\\n\",\n    \"plt.legend();\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"`pyplot` モジュールでは、以下のようにグラフのタイトルと各軸のラベルを指定して表示することができます。タイトル、x軸のラベル、y軸のラベル、はそれぞれ **`title()`** 関数、**`xlabel()`** 関数、**`ylabel()`** 関数に文字列を渡して指定します。また、**`grid()`** 関数を用いるとグリッドを併せて表示することもできます。グリッドを表示させたい場合は、`grid()` 関数に `True` を渡してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"# plotするデータ\\n\",\n    \"data =[0, 1, 4, 9, 16]\\n\",\n    \"x =[0, 1, 2, 3, 4]\\n\",\n    \"y =[0, 1, 2, 3, 4]\\n\",\n    \"\\n\",\n    \"# plot関数で描画。線の形状、色、データポイントのマーカ、凡例を指定\\n\",\n    \"plt.plot(x,y, linestyle='--', color='blue', marker='o', label='linear') \\n\",\n    \"plt.plot(data, linestyle=':', color='green', marker='*', label='quad')\\n\",\n    \"plt.legend()\\n\",\n    \"\\n\",\n    \"plt.title('My First Graph') # グラフのタイトル\\n\",\n    \"plt.xlabel('x') #x軸のラベル\\n\",\n    \"plt.ylabel('y') #y軸のラベル\\n\",\n    \"plt.grid(True); #グリッドの表示\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"グラフを描画するときのプロット数を増やすことで任意の曲線のグラフを作成することもできます。以下では、`numpy` モジュールの `arange()` 関数を用いて、$- \\\\pi$ から $\\\\pi$ の範囲を `0.1` 刻みでx軸の値を配列として準備しています。そのx軸の値に対して、`numpy` モジュールの `cos()` 関数と `sin()` 関数を用いて、y軸の値をそれぞれ準備し、cosカーブとsinカーブを描画しています。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"#　グラフのx軸の値となる配列\\n\",\n    \"x = np.arange(-np.pi, np.pi, 0.1)\\n\",\n    \"\\n\",\n    \"# 上記配列をcos, sin関数に渡し, y軸の値として描画\\n\",\n    \"plt.plot(x,np.cos(x))\\n\",\n    \"plt.plot(x,np.sin(x))\\n\",\n    \"\\n\",\n    \"plt.title('cos ans sin Curves')  # グラフのタイトル\\n\",\n    \"plt.xlabel('x') #x軸のラベル\\n\",\n    \"plt.ylabel('y') #y軸のラベル\\n\",\n    \"plt.grid(True); #グリッドの表示\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"プロットの数を少なくすると、曲線は直線をつなぎ合わせることで描画されていることがわかります。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"x = np.arange(-np.pi, np.pi, 0.5)\\n\",\n    \"plt.plot(x,np.cos(x), marker='o')\\n\",\n    \"plt.plot(x,np.sin(x), marker='o')\\n\",\n    \"plt.title('cos ans sin Curves')\\n\",\n    \"plt.xlabel('x')\\n\",\n    \"plt.ylabel('y')\\n\",\n    \"plt.grid(True);\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### グラフの例：ソートアルゴリズムにおける比較回数\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"import random\\n\",\n    \"\\n\",\n    \"def bubble_sort(lst):\\n\",\n    \"    n = 0\\n\",\n    \"    for j in range(len(lst) - 1):\\n\",\n    \"        for i in range(len(lst) - 1 - j):\\n\",\n    \"            n = n + 1\\n\",\n    \"            if lst[i] > lst[i+1]:\\n\",\n    \"                lst[i + 1], lst[i] = lst[i], lst[i+1]\\n\",\n    \"    return n\\n\",\n    \"\\n\",\n    \"def merge_sort_rec(data, l, r, work):\\n\",\n    \"    if l+1 >= r: \\n\",\n    \"        return 0\\n\",\n    \"    m = l+(r-l)//2\\n\",\n    \"    n1 = merge_sort_rec(data, l, m, work)\\n\",\n    \"    n2 = merge_sort_rec(data, m, r, work)\\n\",\n    \"    n = 0\\n\",\n    \"    i1 = l\\n\",\n    \"    i2 = m\\n\",\n    \"    for i in range(l, r):\\n\",\n    \"        from1 = False\\n\",\n    \"        if i2 >= r:\\n\",\n    \"            from1 = True\\n\",\n    \"        elif i1 < m:\\n\",\n    \"            n = n + 1\\n\",\n    \"            if data[i1] <= data[i2]:\\n\",\n    \"                from1 = True\\n\",\n    \"        if from1:\\n\",\n    \"            work[i] = data[i1]\\n\",\n    \"            i1 = i1 + 1\\n\",\n    \"        else:\\n\",\n    \"            work[i] = data[i2]\\n\",\n    \"            i2 = i2 + 1\\n\",\n    \"    for i in range(l, r):\\n\",\n    \"        data[i] = work[i]\\n\",\n    \"    return n1+n2+n\\n\",\n    \"\\n\",\n    \"def merge_sort(data):\\n\",\n    \"    return merge_sort_rec(data, 0, len(data), [0]*len(data))\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"x = np.arange(100, 1100, 100)\\n\",\n    \"bdata = np.array([bubble_sort([random.randint(1,10000) for i in range(k)]) for k in x])\\n\",\n    \"mdata = np.array([merge_sort([random.randint(1,10000) for i in range(k)]) for k in x])\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"plt.plot(x, bdata, marker='o')\\n\",\n    \"plt.plot(x, mdata, marker='o')\\n\",\n    \"plt.title('bubble sort vs. merge sort')\\n\",\n    \"plt.xlabel('number of items')\\n\",\n    \"plt.ylabel('number of comparisons')\\n\",\n    \"plt.grid(True);\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 練習\\n\",\n    \"\\n\",\n    \"`-2` から `2` の範囲を `0.1` 刻みでx軸の値を配列として作成し、そのx軸の値に対して `numpy` モジュールの `exp()` 関数を用いてy軸の値を作成し、$y=e^{x}$ のグラフを描画する関数 `plot_exp` を作成してください。ただし、そのグラフに任意のタイトル、x軸、y軸の任意のラベル、任意の凡例、グリッドを表示させてください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {\n    \"tags\": [\n     \"raises-exception\"\n    ]\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"import ...\\n\",\n    \"...\\n\",\n    \"def plot_exp():\\n\",\n    \"    ...\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"上のセルで解答を作成した後、以下のセルを実行し、実行結果が全て `True` になることを確認してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {\n    \"tags\": [\n     \"raises-exception\"\n    ]\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"res_x = plot_exp()\\n\",\n    \"print(len(res_x) == 41, int(res_x[0]) == -2, int(res_x[9]) == -1)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 練習\\n\",\n    \"\\n\",\n    \"4-csvで説明したように、`tokyo-temps.csv` には、気象庁のオープンデータからダウンロードした、東京の平均気温のデータが入っています。具体的には、各行の第2列に気温の値が格納されており、47行目に1875年6月の、48行目に1875年7月の、…、53行目に1875年12月の、54行目に1876年1月の、…という風に2017年1月のデータまでが格納されています。\\n\",\n    \"\\n\",\n    \"そこで、2つの整数 `year` と `month` を引数として取り、 `year` 年以降の `month` 月の平均気温の値をy軸に、年をx軸に描画した線グラフを表示するとともに、描画したx軸とy軸の値をタプルに格納して返す関数 `plot_tokyotemps` を作成してください。 \\n\",\n    \"\\n\",\n    \"以下のセルの `...` のところを書き換えて解答してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {\n    \"tags\": [\n     \"raises-exception\"\n    ]\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"import ...\\n\",\n    \"...\\n\",\n    \"def plot_tokyotemps(year, month):\\n\",\n    \"    ...\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"上のセルで解答を作成した後、以下のセルを実行し、実行結果が全て `True` になることを確認してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {\n    \"tags\": [\n     \"raises-exception\"\n    ]\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"res_years, res_temps = plot_tokyotemps(1875, 7)\\n\",\n    \"print(len(res_years) == 142, len(res_temps) == 142, res_years[0] == 1875, res_temps[0] == 26.0)\\n\",\n    \"res_years, res_temps = plot_tokyotemps(1875, 6)\\n\",\n    \"print(len(res_years) == 142, len(res_temps) == 142, res_years[0] == 1875, res_temps[0] == 22.3)\\n\",\n    \"res_years, res_temps = plot_tokyotemps(1875, 12)\\n\",\n    \"print(len(res_years) == 142, len(res_temps) == 142, res_years[0] == 1875, res_temps[0] == 4.6)\\n\",\n    \"res_years, res_temps = plot_tokyotemps(1876, 1)\\n\",\n    \"print(len(res_years) == 142, len(res_temps) == 142, res_years[0] == 1876, res_temps[0] == 1.6)\\n\",\n    \"res_years, res_temps = plot_tokyotemps(1876, 6)\\n\",\n    \"print(len(res_years) == 141, len(res_temps) == 141, res_years[0] == 1876, res_temps[0] == 18.5)\\n\",\n    \"res_years, res_temps = plot_tokyotemps(1900, 6)\\n\",\n    \"print(len(res_years) == 117, len(res_temps) == 117, res_years[0] == 1900, res_temps[0] == 19.3)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 散布図\\n\",\n    \"**散布図**は、`pyplot` モジュールの **`scatter()`** 関数を用いて描画できます。\\n\",\n    \"\\n\",\n    \"\\n\",\n    \"具体的には、次のように `リストX` と `リストY` （もしくは、 `配列X` と `配列Y`）を引数として与えると、各 `i` に対して、 `(リストX[i], リストY[i])` の位置に点を打ちます。\\n\",\n    \"\\n\",\n    \"---\\n\",\n    \"```Python\\n\",\n    \"plt.scatter(リストX, リストY)\\n\",\n    \"```\\n\",\n    \"---\\n\",\n    \"\\n\",\n    \"以下では、ランダムに生成した20個の要素からなる配列 x, y の各要素の値の組を点としてプロットした散布図を表示しています。プロットする点のマーカの色や形状は、線グラフの時と同様に、 `color`, `marker` 引数で指定して変更することができます。加えて、`s`, `alpha` 引数で、それぞれマーカの大きさと透明度を指定することができます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"#　グラフのx軸の値となる配列\\n\",\n    \"x = np.random.rand(20)\\n\",\n    \"#　グラフのy軸の値となる配列\\n\",\n    \"y = np.random.rand(20)\\n\",\n    \"\\n\",\n    \"# scatter関数で散布図を描画\\n\",\n    \"plt.scatter(x, y, s=100, alpha=0.5);\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"以下のように、`plot()` 関数を用いても同様の散布図を表示することができます。具体的には、3番目の引数にプロットする点のマーカの形状を指定することにより実現します。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"x = np.random.rand(20)\\n\",\n    \"y = np.random.rand(20)\\n\",\n    \"plt.plot(x, y, '*', color='blue');\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 練習\\n\",\n    \"\\n\",\n    \"`tokyo-temps.csv` には、気象庁のオープンデータからダウンロードした、東京の平均気温のデータが入っています。具体的には、各行の第2列に気温の値が格納されており、47行目に1875年6月の、48行目に1875年7月の、…、53行目に1875年12月の、54行目に1876年1月の、…という風に2017年1月のデータまでが格納されています。\\n\",\n    \"\\n\",\n    \"そこで、1875年以降の平均気温の値をy軸に、月の値をx軸に描画した散布図を表示するとともに、描画したx軸とy軸の値をタプルに格納して返す関数 `scatter_tokyotemps` を作成してください。 \\n\",\n    \"\\n\",\n    \"以下のセルの `...` のところを書き換えて解答してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {\n    \"tags\": [\n     \"raises-exception\"\n    ]\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"import ...\\n\",\n    \"...\\n\",\n    \"def scatter_tokyotemps():\\n\",\n    \"    ...\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"上のセルで解答を作成した後、以下のセルを実行し、実行結果が全て `True` になることを確認してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {\n    \"tags\": [\n     \"raises-exception\"\n    ]\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"res_months, res_temps = scatter_tokyotemps()\\n\",\n    \"print(len(res_months) == 1700, len(res_temps) == 1700, res_months[0] == 6, res_months[1] == 7, res_months[12] == 6, res_months[13] == 7)\\n\",\n    \"print(res_temps[0] == 22.3, res_temps[1] == 26.0, res_temps[12] == 18.5, res_temps[13] == 24.3)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 棒グラフ\\n\",\n    \"**棒グラフ**は、`pyplot` モジュールの **`bar()`** 関数を用いて描画できます。以下では、ランダムに生成した10個の要素からなる配列 `y` の各要素の値を縦の棒グラフで表示しています。`x` は、x軸上で棒グラフのバーの並ぶ位置を示しています。ここでは、`numpy` モジュールの `arange()` 関数を用いて、`1` から `10` の範囲を `1` 刻みでx軸上のバーの並ぶ位置として配列を準備しています。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"# x軸上で棒の並ぶ位置となる配列\\n\",\n    \"x = np.arange(1, 11, 1)\\n\",\n    \"#　グラフのy軸の値となる配列\\n\",\n    \"y = np.random.rand(10)\\n\",\n    \"\\n\",\n    \"# bar関数で棒グラフを描画\\n\",\n    \"#print(x, y)\\n\",\n    \"plt.bar(x,y);\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 練習\\n\",\n    \"\\n\",\n    \"`tokyo-temps.csv` には、気象庁のオープンデータからダウンロードした、東京の平均気温のデータが入っています。具体的には、各行の第2列に気温の値が格納されており、47行目に1875年6月の、48行目に1875年7月の、…、53行目に1875年12月の、54行目に1876年1月の、…という風に2017年1月のデータまでが格納されています。\\n\",\n    \"\\n\",\n    \"そこで、4つの引数 `year1`, `month1`, `year2`, `month2` を引数に取り、 `year1` 年 `month1` 月から `year2` 年 `month2` 月までの各月の平均気温の値をy軸に、年月の値（`tokyo-temps.csv` の1列目の値）をx軸に描画した棒グラフを表示するとともに、描画したx軸とy軸の値をタプルに格納して返す関数 `bar_tokyotemps` を作成してください。 \\n\",\n    \"\\n\",\n    \"以下のセルの `...` のところを書き換えて解答してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {\n    \"tags\": [\n     \"raises-exception\"\n    ]\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"import ...\\n\",\n    \"...\\n\",\n    \"def bar_tokyotemps(year1, month1, year2, month2):\\n\",\n    \"    ...\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"上のセルで解答を作成した後、以下のセルを実行し、実行結果が全て `True` になることを確認してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {\n    \"tags\": [\n     \"raises-exception\"\n    ]\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"res_months, res_temps = bar_tokyotemps(2000, 6, 2001, 6)\\n\",\n    \"print(len(res_months) == 13, res_months[0] == '2000/6', res_temps[0] == 22.5, res_months[12] == '2001/6', res_temps[12] == 23.1)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## ヒストグラム\\n\",\n    \"\\n\",\n    \"**ヒストグラム**は、`pyplot` モジュールの **`hist()`** 関数を用いて描画できます。\\n\",\n    \"以下では、`numpy` モジュールの `random.randn()` 関数を用いて、正規分布に基づく1000個の数値の要素からなる配列を用意し、ヒストグラムとして表示しています。\\n\",\n    \"`hist()` 関数の `bins` 引数でヒストグラムの箱（ビン）の数を指定します。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"# 正規分布に基づく1000個の数値の要素からなる配列 \\n\",\n    \"d = np.random.randn(1000)\\n\",\n    \"\\n\",\n    \"# hist関数でヒストグラムを描画\\n\",\n    \"plt.hist(d, bins=20);\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 練習\\n\",\n    \"\\n\",\n    \"`tokyo-temps.csv` には、気象庁のオープンデータからダウンロードした、東京の平均気温のデータが入っています。具体的には、各行の第2列に気温の値が格納されており、47行目に1875年6月の、48行目に1875年7月の、…、53行目に1875年12月の、54行目に1876年1月の、…という風に2017年1月のデータまでが格納されています。\\n\",\n    \"\\n\",\n    \"そこで、5つの引数 `year1`, `month1`, `year2`, `month2`, `mybin` を引数に取り、 `year1` 年 `month1` 月から `year2` 年 `month2` 月までの各月の平均気温の値を格納したリスト `temps` から `mybin` 個のヒストグラムを表示するとともに、 `temps` を返す関数 `hist_tokyotemps` を作成してください。 \\n\",\n    \"\\n\",\n    \"以下のセルの `...` のところを書き換えて解答してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {\n    \"tags\": [\n     \"raises-exception\"\n    ]\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"import ...\\n\",\n    \"...\\n\",\n    \"def hist_tokyotemps(year1, month1, year2, month2, mybin):\\n\",\n    \"    ...\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"上のセルで解答を作成した後、以下のセルを実行し、実行結果が全て `True` になることを確認してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {\n    \"tags\": [\n     \"raises-exception\"\n    ]\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"res_temps = hist_tokyotemps(1875, 6, 2000, 6, 50)\\n\",\n    \"print(len(res_temps) == 1501, res_temps[0] == 22.3, res_temps[1500] == 22.5)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## ヒートマップ\\n\",\n    \"`impshow()` 関数を用いると、以下のように行列の要素の値に応じて色の濃淡を変えることで、行列を**ヒートマップ**として可視化することができます。`colorbar()` 関数は行列の値と色の濃淡の対応を表示します。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"# 10行10列のランダム要素からなる行列\\n\",\n    \"ary1 = np.random.rand(100)\\n\",\n    \"ary2 = ary1.reshape(10,10)\\n\",\n    \"#ary2 = np.random.rand(100).reshape(10,10) #と同じ\\n\",\n    \"\\n\",\n    \"# imshow関数でヒートマップを描画\\n\",\n    \"im=plt.imshow(ary2)\\n\",\n    \"plt.colorbar(im);\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 練習\\n\",\n    \"\\n\",\n    \"`tokyo-temps.csv` には、気象庁のオープンデータからダウンロードした、東京の平均気温のデータが入っています。具体的には、各行の第2列に気温の値が格納されており、47行目に1875年6月の、48行目に1875年7月の、…、53行目に1875年12月の、54行目に1876年1月の、…という風に2017年1月のデータまでが格納されています。\\n\",\n    \"\\n\",\n    \"そこで、30×12のNumPyの配列 `ary1` を作成し、各月の平均気温を整数に丸めた値を求めて、月ごとにその値の数を数えて配列 `ary1` に格納して、 `ary1` からなるヒートマップを表示しつつ、 `ary1` を返す関数 `heat_tokyotemps` を作成してください。 ただし、厳密には `x` が `0` 以上 `11` 以下の任意の整数とし、`y` を `0` 以上 `29` 以下の整数とするとき、 `ary1[y][x]` には、 `y` ℃以上、 `y+1` ℃より小さい平均気温を持つ `x+1` 月の数が格納されているものとします。\\n\",\n    \"\\n\",\n    \"以下のセルの `...` のところを書き換えて解答してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {\n    \"tags\": [\n     \"raises-exception\"\n    ]\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"import ...\\n\",\n    \"...\\n\",\n    \"def heat_tokyotemps():\\n\",\n    \"    ...\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"上のセルで解答を作成した後、以下のセルを実行し、実行結果が全て `True` になることを確認してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {\n    \"tags\": [\n     \"raises-exception\"\n    ]\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"ary1 = heat_tokyotemps()\\n\",\n    \"print(ary1[0][0] == 2, ary1[1][1] == 2, ary1[2][0] == 28)\\n\",\n    \"#画像の向きが気になる人は、以下の2行を同時に実行してみてください\\n\",\n    \"#ary1 = np.flip(ary1, axis=0) \\n\",\n    \"#im=plt.imshow(ary1)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## グラフの画像ファイル出力\\n\",\n    \"**`savefig()`** 関数を用いると、以下のように作成したグラフを画像としてファイルに保存することができます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"x = np.arange(-np.pi, np.pi, 0.1)\\n\",\n    \"plt.plot(x,np.cos(x), label='cos')\\n\",\n    \"plt.plot(x,np.sin(x), label='sin')\\n\",\n    \"plt.legend()\\n\",\n    \"plt.title('cos ans sin Curves')  \\n\",\n    \"plt.xlabel('x') \\n\",\n    \"plt.ylabel('y') \\n\",\n    \"plt.grid(True)\\n\",\n    \"\\n\",\n    \"# savefig関数でグラフを画像保存\\n\",\n    \"plt.savefig('cos_sin.png'); \"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 練習の解答\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"import numpy as np\\n\",\n    \"import matplotlib.pyplot as plt\\n\",\n    \"%matplotlib inline\\n\",\n    \"\\n\",\n    \"def plot_exp():\\n\",\n    \"    x = np.arange(-2, 2.1, 0.1)\\n\",\n    \"    y = np.exp(x)\\n\",\n    \"    plt.plot(x, y, linestyle='--', color='blue', marker='x', label='exp(x)')\\n\",\n    \"    plt.title('y = exp(x)') # タイトル\\n\",\n    \"    plt.xlabel('x') # x軸のラベル\\n\",\n    \"    plt.ylabel('exp(x)') # y軸のラベル\\n\",\n    \"    plt.grid(True); # グリッドを表示\\n\",\n    \"    plt.legend() # 盆例を表示\\n\",\n    \"    return x\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"import numpy as np\\n\",\n    \"import matplotlib.pyplot as plt\\n\",\n    \"%matplotlib inline\\n\",\n    \"import csv\\n\",\n    \"\\n\",\n    \"def plot_tokyotemps(year, month):\\n\",\n    \"    with open('tokyo-temps.csv', 'r', encoding='sjis') as f:\\n\",\n    \"        dataReader = csv.reader(f) # csvリーダを作成\\n\",\n    \"        n=0\\n\",\n    \"        # 1875年6月が47行目なので、指定されたyear年6月のデータの行番号をまず求める\\n\",\n    \"        init_row = (year - 1875) * 12 + 47 \\n\",\n    \"        # その上で、year年month月のデータの行番号を求める\\n\",\n    \"        init_row = init_row + month - 6\\n\",\n    \"        years = [] # 年\\n\",\n    \"        temps = [] # 平均気温\\n\",\n    \"        for row in dataReader: # CSVファイルの中身を1行ずつ読み込み\\n\",\n    \"            n = n+1\\n\",\n    \"            if n >= init_row and (n - init_row) % 12 == 0: # init_row行目からはじめて12か月ごとにif内を実行\\n\",\n    \"                years.append(year)\\n\",\n    \"                temp = float(row[1]) # float関数で実数のデータ型に変換する\\n\",\n    \"                temps.append(temp)\\n\",\n    \"                year = year + 1\\n\",\n    \"    #print(years)\\n\",\n    \"    #print(temps)\\n\",\n    \"    plt.plot(years, temps)\\n\",\n    \"    return years, temps\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"import numpy as np\\n\",\n    \"import matplotlib.pyplot as plt\\n\",\n    \"%matplotlib inline\\n\",\n    \"import csv\\n\",\n    \"\\n\",\n    \"def scatter_tokyotemps():\\n\",\n    \"    with open('tokyo-temps.csv', 'r', encoding='sjis') as f:\\n\",\n    \"        dataReader = csv.reader(f) # csvリーダを作成\\n\",\n    \"        n=0\\n\",\n    \"        months = [] # 月\\n\",\n    \"        temps = [] # 平均気温\\n\",\n    \"        month = 6 # 47行目は6月\\n\",\n    \"        for row in dataReader: # CSVファイルの中身を1行ずつ読み込み\\n\",\n    \"            n = n+1\\n\",\n    \"            if n >= 47: # 47行目からif内を実行\\n\",\n    \"                months.append(month)\\n\",\n    \"                temp = float(row[1]) # float関数で実数のデータ型に変換する\\n\",\n    \"                temps.append(temp)\\n\",\n    \"                month = month + 1\\n\",\n    \"                if month > 12:\\n\",\n    \"                    month = 1\\n\",\n    \"    #print(months)\\n\",\n    \"    #print(temps)\\n\",\n    \"    plt.scatter(months, temps, alpha=0.5)\\n\",\n    \"    return months, temps\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"import numpy as np\\n\",\n    \"import matplotlib.pyplot as plt\\n\",\n    \"%matplotlib inline\\n\",\n    \"import csv\\n\",\n    \"\\n\",\n    \"def bar_tokyotemps(year1, month1, year2, month2):\\n\",\n    \"    with open('tokyo-temps.csv', 'r', encoding='sjis') as f:\\n\",\n    \"        dataReader = csv.reader(f) # csvリーダを作成\\n\",\n    \"        n=0\\n\",\n    \"        months = [] # \\n\",\n    \"        temps = [] # 平均気温\\n\",\n    \"        init_row = (year1 - 1875) * 12 - 6 + month1 + 47\\n\",\n    \"        end_row = (year2 - 1875) * 12 - 6 + month2 + 47\\n\",\n    \"        for row in dataReader: # CSVファイルの中身を1行ずつ読み込み\\n\",\n    \"            n = n+1\\n\",\n    \"            if n >= init_row and n <= end_row: # init_row行目から、end_row行までif内を実行\\n\",\n    \"                months.append(row[0])\\n\",\n    \"                temp = float(row[1]) # float関数で実数のデータ型に変換する\\n\",\n    \"                temps.append(temp)\\n\",\n    \"    #print(months)\\n\",\n    \"    #print(temps)\\n\",\n    \"    plt.bar(months, temps)\\n\",\n    \"    return months, temps\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"import numpy as np\\n\",\n    \"import matplotlib.pyplot as plt\\n\",\n    \"%matplotlib inline\\n\",\n    \"import csv\\n\",\n    \"\\n\",\n    \"def hist_tokyotemps(year1, month1, year2, month2, mybin):\\n\",\n    \"    with open('tokyo-temps.csv', 'r', encoding='sjis') as f:\\n\",\n    \"        dataReader = csv.reader(f) # csvリーダを作成\\n\",\n    \"        n=0\\n\",\n    \"        months = [] # \\n\",\n    \"        temps = [] # 平均気温\\n\",\n    \"        init_row = (year1 - 1875) * 12 - 6 + month1 + 47\\n\",\n    \"        end_row = (year2 - 1875) * 12 - 6 + month2 + 47\\n\",\n    \"        for row in dataReader: # CSVファイルの中身を1行ずつ読み込み\\n\",\n    \"            n = n+1\\n\",\n    \"            if n >= init_row and n <= end_row: # init_row行目から、end_row行までif内を実行\\n\",\n    \"                temp = float(row[1]) # float関数で実数のデータ型に変換する\\n\",\n    \"                temps.append(temp)\\n\",\n    \"    #print(months)\\n\",\n    \"    #print(temps)\\n\",\n    \"    plt.hist(temps, bins=mybin)\\n\",\n    \"    return temps\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"import numpy as np\\n\",\n    \"import matplotlib.pyplot as plt\\n\",\n    \"%matplotlib inline\\n\",\n    \"import csv\\n\",\n    \"\\n\",\n    \"def heat_tokyotemps():\\n\",\n    \"    ary1 = np.zeros(30*12, dtype=int) # 30×12の配列を作成\\n\",\n    \"    ary1 = ary1.reshape(30, 12)\\n\",\n    \"    with open('tokyo-temps.csv', 'r', encoding='sjis') as f:\\n\",\n    \"        dataReader = csv.reader(f) # csvリーダを作成\\n\",\n    \"        n=0\\n\",\n    \"        month = 6 # 一番最初の月（47行目）は6月\\n\",\n    \"        for row in dataReader: # CSVファイルの中身を1行ずつ読み込み\\n\",\n    \"            n = n+1\\n\",\n    \"            if n >= 47: # 47行目からif内を実行\\n\",\n    \"                temp = int(float(row[1])) # まずfloat関数で実数型に変換してから、int関数で整数のデータ型に変換する\\n\",\n    \"                ary1[temp][month-1] += 1 # month月の値はmonth-1行目に格納する\\n\",\n    \"                month += 1\\n\",\n    \"                if month == 13:\\n\",\n    \"                    month = 1\\n\",\n    \"    im=plt.imshow(ary1)\\n\",\n    \"    plt.colorbar(im);\\n\",\n    \"    #print(ary1)\\n\",\n    \"    return ary1\"\n   ]\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"Python 3 (ipykernel)\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"codemirror_mode\": {\n    \"name\": \"ipython\",\n    \"version\": 3\n   },\n   \"file_extension\": \".py\",\n   \"mimetype\": \"text/x-python\",\n   \"name\": \"python\",\n   \"nbconvert_exporter\": \"python\",\n   \"pygments_lexer\": \"ipython3\",\n   \"version\": \"3.12.4\"\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 4\n}\n"
  },
  {
    "path": "colab/appendix/5-re.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"##================================================\\n\",\n    \"## このセルを最初に実行せよ---Run this cell first.\\n\",\n    \"##================================================\\n\",\n    \"!wget -P . https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/text-sample.txt\\n\",\n    \"!wget -P . https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/tokyo-temps.csv\\n\",\n    \"!wget -P . https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/small.csv\\n\",\n    \"!wget -P . https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/tokyo-july-temps.csv\\n\",\n    \"!wget -P . https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/argsprint.py\\n\",\n    \"!wget -P . https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/B1S.xml\\n\",\n    \"!wget -P . https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/sample.py\\n\",\n    \"!wget -P . https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/sin.html\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/console_in_browser.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/sample_py_win_1.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/sample_py_win_3.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/sample_py_win_2.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/py_open_2.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/py_open_1.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/sample_py_mac_2.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/sample_py_mac_3.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/sample_py_win2_1.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/sample_py_win2_3.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/sample_py_mac_1.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/sample_py_win2_2.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/argsprint.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/terminal_in_menu.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/sample_py_browser.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/py_conv_1.png\\n\",\n    \"!wget -P fig https://raw.githubusercontent.com/utokyo-ipp/utokyo-ipp.github.io/master/colab/appendix/fig/py_conv_2.png\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# ▲正規表現\\n\",\n    \"正規表現について説明します。\\n\",\n    \"\\n\",\n    \"参考\\n\",\n    \"\\n\",\n    \"- https://docs.python.jp/3/library/re.html\\n\",\n    \"\\n\",\n    \"**正規表現** (regular expression) を扱う場合、`re` というモジュールをインポートする必要があります。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"import re\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 正規表現の基本\\n\",\n    \"\\n\",\n    \"正規表現とは、文字列の**パターン**を表す式です。\\n\",\n    \"文字列が正規表現に**マッチする**とは、文字列が正規表現の表すパターンに適合していることを意味します。\\n\",\n    \"また、正規表現が文字列にマッチするという言い方もします。\\n\",\n    \"\\n\",\n    \"たとえば、正規表現 `abc` は文字列 `abcde` （の部分文字列 `abc`）にマッチします。\\n\",\n    \"\\n\",\n    \"正規表現に文字列がマッチしているかどうかを調べることのできる関数に **`match`** があります。\\n\",\n    \"\\n\",\n    \"`match` は、指定した `正規表現A` が `文字列B`（の先頭部分）にマッチするかどうか調べます。\\n\",\n    \"\\n\",\n    \"---\\n\",\n    \"```Python\\n\",\n    \"re.match(正規表現A, 文字列B)\\n\",\n    \"```\\n\",\n    \"---\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"match1 = re.match('abc', 'abcde') #マッチする\\n\",\n    \"print(match1)\\n\",\n    \"match1 = re.match('abc', 'ababc') #マッチしない\\n\",\n    \"print(match1)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"`match` では、マッチが成立している場合、**matchオブジェクト**と呼ばれる特殊なデータを返します。マッチが成立しない場合、 `None` を返します。\\n\",\n    \"\\n\",\n    \"つまり、マッチする部分文字列を含む場合、返値は `None` ではないので、if文などの条件で真とみなされます。\\n\",\n    \"したがって以下のようにして条件分岐することができます。\\n\",\n    \"\\n\",\n    \"---\\n\",\n    \"```Python\\n\",\n    \"if re.match(正規表現, 文字列):\\n\",\n    \"    ...\\n\",\n    \"```\\n\",\n    \"---\\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"if re.match('abc', 'abcde'): #マッチする\\n\",\n    \"    print('正規表現abcが文字列abcdeにマッチする')\\n\",\n    \"else:\\n\",\n    \"    print('正規表現abcが文字列abcdeにマッチしない')\\n\",\n    \"if re.match('abc', 'ababc'): #マッチしない\\n\",\n    \"    print('正規表現abcが文字列ababcにマッチする')\\n\",\n    \"else:\\n\",\n    \"    print('正規表現abcが文字列ababcにマッチしない')\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"さて、上で紹介したmatchオブジェクトには、マッチした文字列の情報が格納されています。上のセルの1つ目の実行結果を印字したものを見てください。\\n\",\n    \"\\n\",\n    \"`<_sre.SRE_Match object; span=(0, 3), match='abc'>` と表示されていると思います。このオブジェクト内の `match` という値は、マッチした文字列を、 `span` という値はマッチしたパターンが存在する、文字列のインデックスの範囲を表します。\\n\",\n    \"\\n\",\n    \"正規表現では大文字と小文字は区別されます。たとえば、正規表現 `abc` は文字列 `ABCdef` にはマッチしません。勿論、正規表現 `ABC` も文字列 `abcdef` にはマッチしません。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"match1 = re.match('abc', 'ABCdef')\\n\",\n    \"print(match1)\\n\",\n    \"match1 = re.match('ABC', 'abcdef')\\n\",\n    \"print(match1)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"そこで `match` の3番目の引数として **`re.IGNORECASE`** もしくは **`re.I`** を指定すると、大文字と小文字を区別せずにマッチするかどうかを調べることができます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"match1 = re.match('abc', 'ABCdef', re.IGNORECASE)\\n\",\n    \"print(match1)\\n\",\n    \"match1 = re.match('ABC', 'abcdef', re.IGNORECASE)\\n\",\n    \"print(match1)\\n\",\n    \"match1 = re.match('ABC', 'ABCdef', re.IGNORECASE)\\n\",\n    \"print(match1)\\n\",\n    \"match1 = re.match('abc', 'ABCdef', re.I)\\n\",\n    \"print(match1)\\n\",\n    \"match1 = re.match('ABC', 'abcdef', re.I)\\n\",\n    \"print(match1)\\n\",\n    \"match1 = re.match('ABC', 'ABCdef', re.I)\\n\",\n    \"print(match1)\\n\",\n    \"match1 = re.match('AbC', 'aBcdef', re.I)\\n\",\n    \"print(match1)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"`match` は文字列の先頭がマッチするかどうか調べますので、次のような場合、matchオブジェクトを返さずに `None` が返されます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"match1 = re.match('def', 'abcdef')\\n\",\n    \"print(match1)\\n\",\n    \"match1 = re.match('xyz', 'abcdef')\\n\",\n    \"print(match1)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"文字列の先頭しか調べられないのでは、いかにも不便です。\\n\",\n    \"\\n\",\n    \"そこで、関数 **`search`** は、指定した `正規表現A` が `文字列B` に（文字列の先頭以外でも）マッチするかどうか調べることができます。\\n\",\n    \"\\n\",\n    \"---\\n\",\n    \"```Python\\n\",\n    \"re.search(正規表現A, 文字列B)\\n\",\n    \"```\\n\",\n    \"---\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"match1 = re.search('abc', 'abcdef')\\n\",\n    \"print(match1)\\n\",\n    \"match1 = re.search('abc', 'ababcd')\\n\",\n    \"print(match1)\\n\",\n    \"match1 = re.search('def', 'abcdef')\\n\",\n    \"print(match1)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"`search` の場合も3番目の引数として `re.IGNORECASE`、 もしくは `re.I` を指定することで、大文字と小文字を区別せずにマッチするかどうかを調べることができます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"match1 = re.search('abc', 'ABCdef')\\n\",\n    \"print(match1)\\n\",\n    \"match1 = re.search('DEF', 'abcdef')\\n\",\n    \"print(match1)\\n\",\n    \"match1 = re.search('abc', 'ABCdef', re.IGNORECASE)\\n\",\n    \"print(match1)\\n\",\n    \"match1 = re.search('DEF', 'abcdef', re.I)\\n\",\n    \"print(match1)\\n\",\n    \"match1 = re.search('not', 'It is NOT me.', re.I)\\n\",\n    \"print(match1)\\n\",\n    \"match1 = re.search('NOT', 'It is not mine.', re.I)\\n\",\n    \"print(match1)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"`match` 関数と同様に、 `search` 関数においても、if文を使った条件分岐が可能であることは覚えておいてください。\\n\",\n    \"\\n\",\n    \"---\\n\",\n    \"```Python\\n\",\n    \"if re.search(正規表現, 文字列):\\n\",\n    \"    ...\\n\",\n    \"```\\n\",\n    \"---\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"if re.search('not', 'It is NOT me.'):\\n\",\n    \"    print('正規表現notが文字列It is NOT me.にマッチする')\\n\",\n    \"else:\\n\",\n    \"    print('正規表現notが文字列It is NOT me.にマッチしない')\\n\",\n    \"if re.search('not', 'It is NOT me.', re.I):\\n\",\n    \"    print('正規表現notが文字列It is NOT me.にマッチする')\\n\",\n    \"else:\\n\",\n    \"    print('正規表現notが文字列It is NOT me.にマッチしない')\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"文字列の先頭からのマッチを調べたいときには、正規表現の先頭にキャレット (`^`) をつけてください。また、文字列の最後からマッチさせたいときは、正規表現の最後にドル記号 (`$`) をつけてください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"match1 = re.search('abc', 'ababcd')  #キャレットなしだとマッチする\\n\",\n    \"print(match1)\\n\",\n    \"match1 = re.search('^abc', 'ababcd') #キャレットありだとマッチしない\\n\",\n    \"print(match1)\\n\",\n    \"match1 = re.search('def', 'abcdefg') #ドル記号なしだとマッチする\\n\",\n    \"print(match1)\\n\",\n    \"match1 = re.search('def$', 'abcdefg') #ドル記号ありだとマッチしない\\n\",\n    \"print(match1)\\n\",\n    \"match1 = re.search('def$', 'abcdefxyzdef') # 2つあるうちの2番目（最後）の def にマッチする\\n\",\n    \"print(match1)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"ただ、ここまでの内容だと、正規表現を用いずに文字列のメソッド （`find` など）によっても実現が可能です。これでは正規表現を使うメリットはほとんどありません。\\n\",\n    \"\\n\",\n    \"というのも、ここまで見てきた1つの正規表現によって、1つの文字列を表していたからです。しかし、最初に言った通り、正規表現は文字列の「パターン」を表します。すなわち、1つの正規表現で複数の文字列を表すことが可能なのです。\\n\",\n    \"\\n\",\n    \"たとえば、正規表現 `ab` と正規表現 `de` という2つの正規表現を `|` という記号で繋げた `ab|de` も正規表現を表します。この正規表現では、`ab` と `de` という2つの文字列を表しており、これらのいずれかを含む文字列にマッチします。この `|` の記号（演算）を**和**、もしくは**選択**といいます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"match1 = re.search('ab|de', 'bcdef')\\n\",\n    \"print(match1)\\n\",\n    \"match1 = re.search('ab|de', 'abcdef')\\n\",\n    \"print(match1)\\n\",\n    \"match1 = re.search('ab|de', 'fgdeab')\\n\",\n    \"print(match1)\\n\",\n    \"match1 = re.search('ab|de', 'acdf')\\n\",\n    \"print(match1)\\n\",\n    \"match1 = re.search('a|an|the', 'I slipped on a piece of the banana.')\\n\",\n    \"print(match1)\\n\",\n    \"match1 = re.search('a|an|the', 'I slipped on the banana.')\\n\",\n    \"print(match1)\\n\",\n    \"match1 = re.search('Good (Morning|Evening)', 'Good Evening, Vietnam.') #正規表現内の（）については下で述べます\\n\",\n    \"print(match1)\\n\",\n    \"match1 = re.search('colo(u|)r', 'That color matches your suit.') #正規表現内の（）については下で述べます\\n\",\n    \"print(match1)\\n\",\n    \"match1 = re.search('colo(u|)r', 'That colour matches your suit.') #正規表現内の（）については下で述べます\\n\",\n    \"print(match1)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"上記の3番目の例に注意してください。正規表現 `ab | de` では `ab` が `de` よりも先に記述されていますが、マッチする文字列は文字列上で先に出てきた方（`ab` ではなく、`de`）であることに注意してください。\\n\",\n    \"\\n\",\n    \"細かい話ですが、正規表現 `abc` は、正規表現 `a` と正規表現 `b` と正規表現 `c` という3つの正規表現を繋げて構成された正規表現であり、このように正規表現を繋げて新しい正規表現を作る演算を**連接**といいます。\\n\",\n    \"\\n\",\n    \"**`a*`** は、正規表現 `a` を0回以上繰り返した文字列とマッチします。この `*` の演算を**閉包**といいます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"match1 = re.search('a*', 'abcdef')\\n\",\n    \"print(match1)\\n\",\n    \"match1 = re.search('a*', 'aabbcc')\\n\",\n    \"print(match1)\\n\",\n    \"match1 = re.search('a*', 'cde')\\n\",\n    \"print(match1)\\n\",\n    \"match1 = re.search('bo*', 'boooo!')\\n\",\n    \"print(match1)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"上記の3番目の例において（文字 `a` が含まれていないにも関わらず）`None` が返らずに、マッチしているのを不思議に思うかもしれません。しかし、`a*` は `a` を0回反復した文字列にもマッチします。この0回反復した文字列とは、長さが0の文字列であり、**空列**とか**空文字列**と呼ばれます。文字列 `cde` の先頭には、空列があると見なせるので、`a*` が先頭部分にマッチしているのです。\\n\",\n    \"\\n\",\n    \"たとえば、正規表現 `abb*` は、 `ab`, `abb`, `abbb`, ... という文字列にマッチします。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"match1 = re.search('abb*', 'abcdef')\\n\",\n    \"print(match1)\\n\",\n    \"match1 = re.search('abb*', 'aabbcc')\\n\",\n    \"print(match1)\\n\",\n    \"match1 = re.search('abb*', 'cde')\\n\",\n    \"print(match1)\\n\",\n    \"match1 = re.search('hello*', 'Hi, hellooooo!')\\n\",\n    \"print(match1)\\n\",\n    \"match1 = re.search('hello*', 'Hi, good morning!')\\n\",\n    \"print(match1)\\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"これまでに紹介した連接、和、閉包という3つの演算を組み合わせることで様々な正規表現を記述することができますが、これらの演算には結合の強さが存在します。たとえば、先に見た `ab | cd` という正規表現は、 `ab` もしくは `cd` という文字列にマッチします（`(ab)|(cd)` と同じ意味です）。つまり、連接の方が和よりも強く結合しているのです。そこで、丸括弧を使って `a(b|c)d` とすると、この正規表現は、`abd | acd` と同じ意味になります。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"match1 = re.search('ab|de', 'fgdeab')\\n\",\n    \"print(match1)\\n\",\n    \"match1 = re.search('(ab)|(de)', 'fgdeab')\\n\",\n    \"print(match1)\\n\",\n    \"match1 = re.search('a(b|d)e', 'fgdeab')\\n\",\n    \"print(match1)\\n\",\n    \"match1 = re.search('a(b|d)e', 'fgadeab')\\n\",\n    \"print(match1)\\n\",\n    \"match1 = re.search('abe|ade', 'fgadeab')\\n\",\n    \"print(match1)\\n\",\n    \"match1 = re.search(\\\"(I|i)t('s| is| was)\\\", \\\"It was rainy yesterday, but it's fine today.\\\")\\n\",\n    \"print(match1)\\n\",\n    \"match1 = re.search(\\\"(I|i)t('s| is| was)\\\", \\\"It rained yesterday, but it's fine today.\\\")\\n\",\n    \"print(match1)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"演算の結合の強さは、「和 < 連接 < 閉包」という順序になっています。これは数学の、「和（＋）< 積(×) < べき」と同じですので、直感的にもわかりやすいと思います。これまでに紹介した連接、和、閉包という3つの演算と結合の順序を明記する丸括弧 `()` とを組み合わせることで様々な正規表現を記述することができます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"match1 = re.search('a(bc|b)*', 'defabcxyz')\\n\",\n    \"print(match1)\\n\",\n    \"match1 = re.search('a(bc|b)*', 'bbacbabbbbc')\\n\",\n    \"print(match1)\\n\",\n    \"match1 = re.search('ca(r|t(egory|tle|))', 'What category is this cat in?')\\n\",\n    \"print(match1)\\n\",\n    \"match1 = re.search('ca(r|t(egory|tle|))', 'No, this is not a carpet.')\\n\",\n    \"print(match1)\\n\",\n    \"match1 = re.search('ca(r|t(egory|tle|))', 'We saw a cattle car almost hit the cat.')\\n\",\n    \"print(match1)\\n\",\n    \"match1 = re.search('ca(r|t(egory|tle|))', 'Please locate him.')\\n\",\n    \"print(match1)\\n\",\n    \"match1 = re.search('ca(r|t(egory|tle|))', \\\"Don't play castanets.\\\")\\n\",\n    \"print(match1)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"Pythonでは正規表現は文字列によって表していることに注意してください。たとえば、`match` 関数の第一引数を文字列の変数で置き換えられるということです。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"match1 = re.match('abc', 'abcde') \\n\",\n    \"print(match1)\\n\",\n    \"reg1 = 'abc' # 正規表現を文字列で記述する\\n\",\n    \"match2 = re.match(reg1, 'abcde') #match1と同じ結果になる\\n\",\n    \"print(match2)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"このことを覚えておくと複雑な正規表現を書くときに、少しずつ分解して記述することができて便利です。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"match1 = re.search(\\\"(I|i)t('s| is| was)\\\", \\\"It was rainy yesterday, but it's fine today.\\\")\\n\",\n    \"print(match1)\\n\",\n    \"reg1 = '(I|i)t' # 正規表現の前半部分\\n\",\n    \"reg2 = \\\"('s| is| was)\\\" # 正規表現の後半部分\\n\",\n    \"reg3 = reg1 + reg2 # 正規表現を表す2つの文字列を結合する\\n\",\n    \"print(reg3)\\n\",\n    \"match2 = re.search(reg3, \\\"It was rainy yesterday, but it's fine today.\\\")\\n\",\n    \"print(match2)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 練習\\n\",\n    \"\\n\",\n    \"文字列 `str1` を引数として取り、 `str1` の中に「月を表す文字列」が含まれているかどうか調べて、含まれていればマッチしたときのmatchオブジェクトを、含まれいなければ `None` を返す関数 `check_monthstr` を作成してください。 ただし、「月を表す文字列」 は次のような文字列とします。\\n\",\n    \"\\n\",\n    \"1. 長さ2の `mm` という文字列\\n\",\n    \"2.  `mm` は、`00`, `01`, ..., `12` のいずれかの文字列\\n\",\n    \"\\n\",\n    \"以下のセルの `...` のところを書き換えて解答してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"import ...\\n\",\n    \"def check_monthstr(str1):\\n\",\n    \"    ...\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"上のセルで解答を作成した後、以下のセルを実行し、実行結果が全て `True` になることを確認してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {\n    \"tags\": [\n     \"raises-exception\"\n    ]\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"print(check_monthstr('10').group() == '10') # group()については後半に説明があります（オプショナル）\\n\",\n    \"print(check_monthstr('mon1521vb') == None)\\n\",\n    \"print(check_monthstr('00an23') == None)\\n\",\n    \"print(check_monthstr('13302').group() == '02') \"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 練習\\n\",\n    \"\\n\",\n    \"文字列 `str1` を引数として取り、 `str1` を構成する文字列が `A`, `C`, `G`, `T` の4種類の文字以外の文字を含むかどうか調べて、これら以外を含む場合は `False` を、そうでない場合は `True` を返す関数 `check_ACGTstr` を作成してください。 ただし、大文字と小文字は区別しません。また、空列の場合は `False` を返してください。\\n\",\n    \"\\n\",\n    \"以下のセルの `...` のところを書き換えて解答してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"import ...\\n\",\n    \"def check_ACGTstr(str1):\\n\",\n    \"    ...\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"上のセルで解答を作成した後、以下のセルを実行し、実行結果が全て `True` になることを確認してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {\n    \"tags\": [\n     \"raises-exception\"\n    ]\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"print(check_ACGTstr('AcCGTAGCacATcGgAaaTtGCacT') == True) \\n\",\n    \"print(check_ACGTstr(':ACaacgta24FgtGH') == False)\\n\",\n    \"print(check_ACGTstr('') == False)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 練習\\n\",\n    \"\\n\",\n    \"文字列 `str1` を引数として取り、 `str1` の中に「時刻を表す文字列」が含まれているかどうか調べて、含まれていればマッチしたときのmatchオブジェクトを、含まれいなければ `None` を返す関数 `check_timestr` を作成してください。 ただし、「時刻を表す文字列」 は次のような文字列とします。\\n\",\n    \"\\n\",\n    \"1. 長さ5の `hh:mm` という文字列であり、12時間表示で時間を表す。\\n\",\n    \"2. 前半の2文字 `hh` は、 `00`, `01`, ..., `11` のいずれかの文字列\\n\",\n    \"3. 後半の2文字 `mm` は、 `00`, `01`, ..., `59` のいずれかの文字列\\n\",\n    \"\\n\",\n    \"以下のセルの `...` のところを書き換えて解答してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"import ...\\n\",\n    \"def check_timestr(str1):\\n\",\n    \"    ...\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"上のセルで解答を作成した後、以下のセルを実行し、実行結果が全て `True` になることを確認してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {\n    \"tags\": [\n     \"raises-exception\"\n    ]\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"print(check_timestr('10:23').group() == '10:23') # group()については後半に説明があります（オプショナル）\\n\",\n    \"print(check_timestr('time?1023') == None)\\n\",\n    \"print(check_timestr('time?11:23').group() == '11:23')\\n\",\n    \"print(check_timestr('12:3xx1;23ah23:23') == None)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 練習\\n\",\n    \"\\n\",\n    \"文字列 `str1` を引数として取り、`str1` の中に「IPv4を表す文字列」が含まれているかどうか調べて、含まれていればマッチしたときのmatchオブジェクトを、含まれいなければ `None` を返す関数 `check_ipv4str` を作成してください。 ただし、「IPv4を表す文字列」 は次のような文字列とします。\\n\",\n    \"\\n\",\n    \"1. `aaa:bbb:ccc:ddd` という形式の長さ15の文字列\\n\",\n    \"2.  `aaa`, `bbb`, `ccc`, `ddd` はいずれも、 `000`, `001`, ..., `254`, `255` のいずれかの文字列\\n\",\n    \"\\n\",\n    \"以下のセルの `...` のところを書き換えて解答してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"import ...\\n\",\n    \"def check_ipv4str(str1):\\n\",\n    \"    ...\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"上のセルで解答を作成した後、以下のセルを実行し、実行結果が全て `True` になることを確認してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {\n    \"tags\": [\n     \"raises-exception\"\n    ]\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"print(check_ipv4str('IP=255:255:255:255').group() == '255:255:255:255') \\n\",\n    \"print(check_ipv4str('notIP=2x5:a5b:2c:255:14:444') == None)\\n\",\n    \"print(check_ipv4str('IP?=25:25:55:155') == None)\\n\",\n    \"print(check_ipv4str('IP?=255:255:255') == None) \"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 練習\\n\",\n    \"\\n\",\n    \"文字列 `str1` を引数として取り、 `str1` の中に「月と日を表す文字列」が含まれているかどうか調べて、含まれていればマッチしたときのmatchオブジェクトを、含まれいなければ `None` を返す関数 `check_monthdaystr` を作成してください。 ただし、「月と日を表す文字列」 は次のような文字列とします。\\n\",\n    \"\\n\",\n    \"1. `mm/dd` という長さ5の文字列\\n\",\n    \"2. `mm` は、 `01`, `02`, ..., `12` のいずれかの文字列\\n\",\n    \"3. `dd` は、`mm` が `01`, `03`, `05`, `07`, `08`, `10`, `12` ならば、`01`, `02`, ..., `31` のいずれかの文字列\\n\",\n    \"4. `dd` は、`mm` が `04`, `06`, `09`, `11` ならば、`01`, `02`, ..., `30` のいずれかの文字列\\n\",\n    \"5. `dd` は、`mm` が `02` ならば、`01`, `02`, ..., `29` のいずれかの文字列\\n\",\n    \"\\n\",\n    \"以下のセルの `...` のところを書き換えて解答してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"import ...\\n\",\n    \"def check_monthdaystr(str1):\\n\",\n    \"    ...\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"上のセルで解答を作成した後、以下のセルを実行し、実行結果が全て `True` になることを確認してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {\n    \"tags\": [\n     \"raises-exception\"\n    ]\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"print(check_monthdaystr('year11/31month11/30day15hour/27minute/sec').group() == '11/30')\\n\",\n    \"print(check_monthdaystr('11/31') == None)\\n\",\n    \"print(check_monthdaystr('x02f/2d5ax') == None)\\n\",\n    \"print(check_monthdaystr('03/24').group() == '03/24')\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 文字クラス\\n\",\n    \"\\n\",\n    \" `[abc]` は `a|b|c` と同じ意味の正規表現です。この角括弧を用いた表記は、**文字クラス**と呼ばれます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"match1 = re.search('[abc]', 'defabcxyz')\\n\",\n    \"print(match1)\\n\",\n    \"match1 = re.search('[3456]', '1234567890')\\n\",\n    \"print(match1)\\n\",\n    \"match1 = re.search('ha[sd]', 'He has an apple and they have pineapples.')\\n\",\n    \"print(match1)\\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"勿論、これまでの和や閉包と組み合わせて用いることができます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"match1 = re.search('[def][abc]', 'defabcxyz')\\n\",\n    \"print(match1)\\n\",\n    \"match1 = re.search('4[3456][3456]([3456]|[7890])', '1234567890')\\n\",\n    \"print(match1)\\n\",\n    \"match1 = re.search('6[789]*', '1234567890')\\n\",\n    \"print(match1)\\n\",\n    \"match1 = re.search('she ha[sd]|they ha(ve|d)', 'He has an apple and they have pineapples.', re.I)\\n\",\n    \"print(match1)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"ただし、文字クラスの中で連接、和、閉包は無効化されます。たとえば、`[a*]` という正規表現は、`a` もしくは、`*` にマッチします。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"match1 = re.search('[a*]', 'aaaaaa') # a一文字にマッチ\\n\",\n    \"print(match1)\\n\",\n    \"match1 = re.search('[a*]', '*') # *一文字にマッチ\\n\",\n    \"print(match1)\\n\",\n    \"match1 = re.search('a*', 'aaaaaa')\\n\",\n    \"print(match1)\\n\",\n    \"match1 = re.search('a*', '*') # 文字クラスでない場合、*にはマッチしない\\n\",\n    \"print(match1)\\n\",\n    \"match1 = re.search('[a|b]', 'defabcxyz') # a一文字にマッチ\\n\",\n    \"print(match1)\\n\",\n    \"match1 = re.search('[a|b]', '|') #  |一文字にマッチ\\n\",\n    \"print(match1)\\n\",\n    \"match1 = re.search('a|b', '|') # 文字クラスでない場合、|にはマッチしない\\n\",\n    \"print(match1)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"文字クラスでは一文字分の連続する和演算を表すことができますが、長さ2以上の文字列を表すことはできません。すなわち、`ab | cd` という正規表現を（1つの）文字クラスで表すことはできません。\\n\",\n    \"\\n\",\n    \"また、 `[abcdefg]` や `[gcdbeaf]` などは `[a-g]`、`[1234567]` や `[4271635]` などは `[1-7]` などとハイフン (`-`) を用いることで簡潔に表すことができます。たとえば、全てのアルファベットと数字を表す場合は、`[a-zA-Z0-9]` で表されます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"match1 = re.search('[a-c]', 'defabcxyz')\\n\",\n    \"print(match1)\\n\",\n    \"match1 = re.search('3[4-8]', '1234567890')\\n\",\n    \"print(match1)\\n\",\n    \"match1 = re.search(':[a-zA-Z0-9]*:', 'a1b2c3:d4e5f:6g7A8B:9C0D')\\n\",\n    \"print(match1)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"文字クラスの内側をキャレット (`^`) で始めると、**否定文字クラス**となり、キャレットの後ろに指定した文字以外の文字とマッチする正規表現となります。たとえば、`[^abc]` は `a`, `b`, `c` 以外の1文字とマッチする正規表現です。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"match1 = re.search('[^abc]', 'abcdefxyz')\\n\",\n    \"print(match1)\\n\",\n    \"match1 = re.search('[^def]', 'defabcxyz')\\n\",\n    \"print(match1)\\n\",\n    \"match1 = re.search('[^1-7]', '1234567890')\\n\",\n    \"print(match1)\\n\",\n    \"match1 = re.search('ha[^sd]e', 'He has an apple and they have pineapples.')\\n\",\n    \"print(match1)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"キャレットを先頭以外につけた場合は、単なる文字クラスになります。すなわち、キャレットにマッチするかどうかが判定されます。たとえば、`[d^ef]` は、`d`, `^`, `e`, `f` のいずれかにマッチします。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"match1 = re.search('[d^ef]', 'defabcxyz') \\n\",\n    \"print(match1)\\n\",\n    \"match1 = re.search('[d^ef]', 'a^bcdef') # キャレットにマッチする\\n\",\n    \"print(match1)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 正規表現に関する基本的な関数\\n\",\n    \"\\n\",\n    \"上で紹介した正規表現を利用してマッチする文字列が存在するかどうかを調べるだけではなく、マッチした文字列に対して色々な処理を加えることができます。以下では2つの基本的な関数を紹介します。\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### `sub`\\n\",\n    \"\\n\",\n    \"**`sub`** は、`正規表現R` にマッチする `文字列A` 中の全ての文字列を、指定した `文字列B` で置き換えることができます。\\n\",\n    \"\\n\",\n    \"具体的には次のようにすると、\\n\",\n    \"\\n\",\n    \"---\\n\",\n    \"```Python\\n\",\n    \"re.sub(正規表現R, 置換する文字列B, 元になる文字列A)\\n\",\n    \"```\\n\",\n    \"---\\n\",\n    \"\\n\",\n    \"`R` とマッチする `A` 中の全ての文字列を `B` と置き換えることができます。置き換えられた結果の文字列（新たに作られて）が返値となります。（もちろん、もとの文字列 `A` は変化しません。）\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"str1 = re.sub('[346]', 'x', '03-5454-68284') #3,4,6をxに置き換える\\n\",\n    \"print(str1)\\n\",\n    \"str1 = re.sub('[.,:;!?]', '', \\\"He has three pets: a cat, a dog and a giraffe, doesn't he?\\\") #句読点を削除する（空文字列に置き換える）\\n\",\n    \"print(str1)\\n\",\n    \"str1 = re.sub('\\\\(a\\\\)|あっとまーく|＠', '@', 'accountnameあっとまーくtest.ecc.u-tokyo.ac.jp') # スパム回避の文字列を@に置き換える\\n\",\n    \"print(str1)# \\\\(と\\\\)の意味については、下記の「正規表現のエスケープシーケンス」の節を参照してください\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"```Python\\n\",\n    \"re.sub(r'[ \\\\t\\\\n][ \\\\t\\\\n]*', ' ', str1)\\n\",\n    \"```\\n\",\n    \"とすると、文字列 `str1` の空白文字の並びがスペース1個に置き換わります。\\n\",\n    \"\\n\",\n    \"ここで、`r'[ \\\\t\\\\n][ \\\\t\\\\n]*'` という正規表現は、空白かタブか改行の***1回以上***の繰り返しのパターンを表します。つまり、`aa*` という形をした「1回以上の `a` という文字列とマッチする正規表現」は `a+` という `+` を使った正規表現で置き換えることが可能です。この `+` は後で正式に紹介します。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"re.sub(r'[ \\\\t\\\\n][ \\\\t\\\\n]*', ' ', 'Hello,\\\\n    World!\\\\tHow are you?')\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"以下では、HTMLやXMLのタグを消しています（空文字列に置き換えています）。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"re.sub(r'<[^>]*>', '', '<body>\\\\nClick <a href=\\\"a.href\\\">this</a>\\\\n</body>\\\\n')\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"`r'<[^>]*>'` という正規表現は、`<` の後に `>` 以外の文字の繰り返しがあって最後に `>` が来るというパターンを表します。\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### `re.split`\\n\",\n    \"\\n\",\n    \"\\n\",\n    \"**`split`** は、`正規表現R` にマッチする文字列を区切り文字（デリミタ）として、`文字列A` を分割します。分割された文字列がリストに格納されて返値となります。\\n\",\n    \"\\n\",\n    \"具体的には次のように用います。\\n\",\n    \"\\n\",\n    \"---\\n\",\n    \"```Python\\n\",\n    \"re.split(正規表現R, 元になる文字列A)\\n\",\n    \"```\\n\",\n    \"---\\n\",\n    \"\\n\",\n    \"以下が典型例です。\\n\",\n    \"\\n\",\n    \"---\\n\",\n    \"```Python\\n\",\n    \"re.split(r'[^a-zA-Z][^a-zA-Z]*', 'Hello, World! How are you?')\\n\",\n    \"\\n\",\n    \"```\\n\",\n    \"---\\n\",\n    \"\\n\",\n    \"`[^a-zA-Z][^a-zA-Z]*` という正規表現は、英文字以外の文字が1回以上繰り返されている、というパターンを表します。\\n\",\n    \"この正規表現を Python の式の中で用いるときは、`r'[^a-zA-Z][^a-zA-Z]*'` という構文を用います。\\n\",\n    \"先頭の `r` については、以下の説明を参照してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"list1 = re.split(' ', \\\"He has three pets a cat a dog and a giraffe doesn't he\\\")\\n\",\n    \"print(list1)\\n\",\n    \"list2 = re.split(r'[^a-zA-Z][^a-zA-Z]*', 'Hello, World! How are you?')\\n\",\n    \"print(list2)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"この例のように、返されたリストに空文字列が含まれる場合がありますので、注意してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"###  `r` を付ける理由\\n\",\n    \"\\n\",\n    \"さて、以上のような正規表現は、`'hello*'` のようにPythonの文字列として `re.split` や `re.sub` などの関数に与えればよいのですが、\\n\",\n    \"以下のように文字列の前に `r` を付けることが推奨されます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"r'hello*'\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"`r'hello*'` の場合は `r` を付けても付けなくても同じなのですが、\\n\",\n    \"以下のように `r` を付けるとエスケープすべき文字がエスケープシーケンスになった文字列が得られます。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"r'[ \\\\t\\\\n]+'\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"`\\\\t` が `\\\\\\\\t` に変わったことでしょう。`\\\\\\\\` はバックスラッシュを表すエスケープシーケンスです。\\n\",\n    \"`\\\\t` はタブという文字を表しますが、`\\\\\\\\t` はバックススラッシュと `t` という2文字から成る文字列です。\\n\",\n    \"この場合、正規表現を解釈する段階でバックスラッシュが処理されます。\\n\",\n    \"\\n\",\n    \"特に `\\\\` という文字そのものを正規表現に含めたいときは `\\\\\\\\` と書いた上で `r` を付けてください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"r'\\\\\\\\t t/'\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"この場合、文字列の中に `\\\\` が2個含まれており、正規表現を解釈する段階で正しく処理されます。すなわち、`\\\\` という文字そのものを表します。\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 練習\\n\",\n    \"\\n\",\n    \"英語の文書が保存された `text-sample.txt` というファイルから読み込み、出現する単語のリストを返す関数 `get_engsentences` を作成してください。 ただし、***重複する単語を削除してはいけません***が、空文字列は除きます。また、リストは返す前に中身を昇順に並べ替えてください。\\n\",\n    \"\\n\",\n    \"以下のセルの `...` のところを書き換えて解答してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"import ...\\n\",\n    \"def get_engsentences():\\n\",\n    \"    ...\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"上のセルで解答を作成した後、以下のセルを実行し、実行結果が `True` になることを確認してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {\n    \"tags\": [\n     \"raises-exception\"\n    ]\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"list1 = get_engsentences()\\n\",\n    \"print(len(list1) == 289)\\n\",\n    \"print(list1[0] == 'a')\\n\",\n    \"print(list1[100] == 'in')\\n\",\n    \"print(list1[288] == 'would')\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 練習\\n\",\n    \"\\n\",\n    \"英語の文書が保存された `text-sample.txt` というファイルから読み込み、出現する単語のリストを返す関数 `get_engsentences2` を作成してください。 ただし、空文字列は除きます。また、リストは返す前に中身を昇順に並べ替えてください。\\n\",\n    \"\\n\",\n    \"以下のセルの `...` のところを書き換えて解答してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"import ...\\n\",\n    \"def get_engsentences2():\\n\",\n    \"    ...\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"上のセルで解答を作成した後、以下のセルを実行し、実行結果が `True` になることを確認してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {\n    \"tags\": [\n     \"raises-exception\"\n    ]\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"list1 = get_engsentences2()\\n\",\n    \"print(len(list1) == 149)\\n\",\n    \"print(list1[0] == 'a')\\n\",\n    \"print(list1[100] == 'proclaim')\\n\",\n    \"print(list1[148] == 'would')\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## その他の反復演算\\n\",\n    \"\\n\",\n    \"閉包以外の反復演算を説明します。\\n\",\n    \"\\n\",\n    \"**`a?`** は、正規表現 `a` を高々1回反復する文字列とマッチします。たとえば、`a(bc)?` は `a|abc` と同じ意味の正規表現です。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"match1 = re.search('colou?r', 'colour')\\n\",\n    \"print(match1)\\n\",\n    \"match1 = re.search('colou?r', 'color')\\n\",\n    \"print(match1)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"**`a+`** は、正規表現 `a` を1回以上反復する文字列とマッチします。つまり、`a+` は `aa*` と同じ意味の正規表現です。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"match1 = re.search('boo+', 'boooo!')\\n\",\n    \"print(match1)\\n\",\n    \"match1 = re.search('boo+', 'bo!')\\n\",\n    \"print(match1)\\n\",\n    \"match1 = re.search('a+', 'abcdef')\\n\",\n    \"print(match1)\\n\",\n    \"match1 = re.search('a+', 'aabbcc')\\n\",\n    \"print(match1)\\n\",\n    \"match1 = re.search('a+', 'cde')\\n\",\n    \"print(match1)\\n\",\n    \"match1 = re.search('[^a-zA-Z]+', 'abc12345efg67hi89j0k')\\n\",\n    \"print(match1)\\n\",\n    \"match1 = re.search('[a-zA-Z]+', 'abc12345efg67hi89j0k')\\n\",\n    \"print(match1)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"上記の例を `*` を使う形に書き換えてみてください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"**`a{x,y}`**、は正規表現 `a` を `x` 回以上かつ `y` 回以下繰り返す文字列とマッチします。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"match1 = re.search('bo{3,5}', 'booooooo!')\\n\",\n    \"print(match1)\\n\",\n    \"match1 = re.search('bo{3,5}', 'boo!')\\n\",\n    \"print(match1)\\n\",\n    \"match1 = re.search('a{2,5}', 'bacaad')\\n\",\n    \"print(match1)\\n\",\n    \"match1 = re.search('[0-9]{1,3},[0-9]{3,3}', '1,298円')\\n\",\n    \"print(match1)\\n\",\n    \"match1 = re.search('[0-9]{1,3},[0-9]{3,3}', '298円')\\n\",\n    \"print(match1)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## メタ文字\\n\",\n    \"\\n\",\n    \"以下では、良く使うメタ文字（特殊文字）を紹介します。\\n\",\n    \"    \\n\",\n    \" **`.`**（ピリオド）は、あらゆる文字にマッチします。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"match1 = re.search('.', 'Hello')\\n\",\n    \"print(match1)\\n\",\n    \"match1 = re.search('3.*9', '1234567890')\\n\",\n    \"print(match1)\\n\",\n    \"match1 = re.search('ha(.|..)', 'He has an apple and they have pineapples.')\\n\",\n    \"print(match1)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"ただし、文字クラスの中で `.` を用いても、あらゆる文字とはマッチせず、`*` の場合と同様に、ピリオドとマッチします。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"match1 = re.search('[.]', 'Hello')\\n\",\n    \"print(match1)\\n\",\n    \"match1 = re.search('[.]', '3.141592')\\n\",\n    \"print(match1)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"**`\\\\t`** は タブを表します。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"match1 = re.search('b\\\\t', 'a\\tb\\tc\\td')\\n\",\n    \"print(match1)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \" **`\\\\s`** は**空白文字**（スペース、タブ、改行など）を表します。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"match1 = re.search('b\\\\s', 'a\\tb\\tc\\td')\\n\",\n    \"print(match1)\\n\",\n    \"match1 = re.search('a\\\\s\\\\s\\\\s', 'a\\t　 b\\t　c\\td')\\n\",\n    \"print(match1)\\n\",\n    \"match1 = re.search('b\\\\s*', 'a\\t　 b\\t　c\\td')\\n\",\n    \"print(match1)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \" **`\\\\S`** は `\\\\s` 以外の全ての文字を表します。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"match1 = re.search('b\\\\S', 'a\\tb\\tbc\\td')\\n\",\n    \"print(match1)\\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"**`\\\\w`** は `[a-zA-Z0-9_]` と同じ意味です。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"match1 = re.search('\\\\w\\\\w', 'abcde')\\n\",\n    \"print(match1)\\n\",\n    \"match1 = re.search('b\\\\w*g', 'abcdefgh')\\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"**`\\\\W`** は `\\\\w` 以外の全ての文字を表します。すなわち、`[^a-zA-Z0-9_]` と同じ意味です。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"match1 = re.search('g\\\\W*', 'ab defg  hi jklm no p')\\n\",\n    \"print(match1)\\n\",\n    \"match1 = re.search('\\\\W\\\\w*\\\\W', 'ab defg  hi jklm no p')\\n\",\n    \"print(match1)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"**`\\\\d`** は `[0-9]` と同じ意味です。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"match1 = re.search('\\\\d\\\\d\\\\d-\\\\d\\\\d\\\\d\\\\d', '153-8902')\\n\",\n    \"print(match1)\\n\",\n    \"match1 = re.search('\\\\d*-\\\\d*', '153-8902')\\n\",\n    \"print(match1)\\n\",\n    \"match1 = re.search('\\\\d\\\\d-\\\\d\\\\d\\\\d\\\\d-\\\\d\\\\d\\\\d\\\\d', '03-5454-6828')\\n\",\n    \"print(match1)\\n\",\n    \"match1 = re.search('\\\\d*-\\\\d*-\\\\d*', '03-5454-6828')\\n\",\n    \"print(match1)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"**`\\\\D`** は `\\\\d` 以外の全ての文字を表します。すなわち、`[^0-9]` と同じ意味です。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"match1 = re.search('\\\\D*', 'He has 10 apples.')\\n\",\n    \"print(match1)\\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 練習\\n\",\n    \"文字列から数字列を切り出して、それを整数とみなして足し合せた結果を整数として返す関数 `sumnumbers` を定義してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"import ...\\n\",\n    \"def sumnumbers(s):\\n\",\n    \"    ...\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"上のセルで解答を作成した後、以下のセルを実行し、実行結果が `True` になることを確認してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {\n    \"tags\": [\n     \"raises-exception\"\n    ]\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"print(sumnumbers(' 2  33 45, 67.9') == 156)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 練習\\n\",\n    \"\\n\",\n    \"文字列 `str1` を引数として取り、`str1` を構成する文字列が `A`, `C`, `G`, `T` の4種類の文字以外の文字を含むかどうか調べて、これら以外を含む場合は `False`、そうでない場合は `True` を返す関数 `check_ACGTstr` を作成してください。 ただし、大文字と小文字は区別しません。また、空列の場合は `False` を返してください。\\n\",\n    \"\\n\",\n    \"以下のセルの `...` のところを書き換えて解答してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"import ...\\n\",\n    \"def check_ACGTstr(str1):\\n\",\n    \"    ...\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"上のセルで解答を作成した後、以下のセルを実行し、実行結果が全て `True` になることを確認してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {\n    \"tags\": [\n     \"raises-exception\"\n    ]\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"print(check_ACGTstr('AcCGTAGCacATcGgAaaTtGCacT') == True) \\n\",\n    \"print(check_ACGTstr(':ACaacgta24FgtGH') == False)\\n\",\n    \"print(check_ACGTstr('') == False)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 練習\\n\",\n    \"\\n\",\n    \"文字列 `str1` を引数として取り、 `str1` を構成する文字列が「日本の郵便番号」を表す文字列になっている場合は、 `True` を返し、そうでない場合は `False` を返す関数 `check_postalcode` を作成してください。 ただし、「日本の郵便番号」は `abc-defg` という形になっており、`a`, `b`, `c`, `d`, `e`, `d`, `f`, `g` はそれぞれ `0` から `9` までの値になっています。\\n\",\n    \"\\n\",\n    \"以下のセルの `...` のところを書き換えて解答してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"import ...\\n\",\n    \"def check_postalcode(str1):\\n\",\n    \"    ...\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"上のセルで解答を作成した後、以下のセルを実行し、実行結果が全て `True` になることを確認してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {\n    \"tags\": [\n     \"raises-exception\"\n    ]\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"print(check_postalcode('113-8654') == True) \\n\",\n    \"print(check_postalcode('119-110') == False)\\n\",\n    \"print(check_postalcode('abc-defg') == False)\\n\",\n    \"print(check_postalcode('〒153-0041') == False) \\n\",\n    \"print(check_postalcode('113-86547') == False) \"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 練習\\n\",\n    \"\\n\",\n    \"文字列 `str1` を引数として取り、`str1` を構成する文字列が「本郷の内線番号」を表す文字列になっている場合は、 `True` を返し、そうでない場合は `False` を返す関数 `check_extension` を作成してください。 ただし、「本郷の内線番号」は `2abcd` という形になっており、`a`, `b`, `c`, `d` はそれぞれ `0` から `9` までの値になっています。\\n\",\n    \"\\n\",\n    \"以下のセルの `...` のところを書き換えて解答してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"import ...\\n\",\n    \"def check_extension(str1):\\n\",\n    \"    ...\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"上のセルで解答を作成した後、以下のセルを実行し、実行結果が全て `True` になることを確認してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {\n    \"tags\": [\n     \"raises-exception\"\n    ]\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"print(check_extension('24115') == True) \\n\",\n    \"print(check_extension('46858') == False)\\n\",\n    \"print(check_extension('☎46666') == False) \\n\",\n    \"print(check_extension('467890') == False) \"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 正規表現のエスケープシーケンス\\n\",\n    \"\\n\",\n    \"丸括弧 `()` や演算子 (`|`, `*`) など正規表現の中で特殊な役割を果たす記号のマッチを行いたい場合、文字列のエスケープシーケンスのように `\\\\` を前につけてやる必要があります。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"match1 = re.search('03(5454)6666', '03(5454)6666') #電話番号。つけないと丸括弧として扱われないのでマッチしない\\n\",\n    \"print(match1)\\n\",\n    \"match1 = re.search('03(5454)6666', '0354546666') # 括弧が含まれない文字列にマッチ\\n\",\n    \"print(match1)\\n\",\n    \"match1 = re.search('03\\\\(5454\\\\)6666', '03(5454)6666') # \\\\(と\\\\)で左右の丸括弧として扱われるのでマッチする\\n\",\n    \"print(match1)\\n\",\n    \"match1 = re.search('3*4+5=17', '3*4+5=17') #計算式。*と+が演算子扱いされているのでマッチしない\\n\",\n    \"print(match1)\\n\",\n    \"match1 = re.search('3*4+5=17', '33345=17') #\\\\がないと、たとえば、このような文字列とマッチする\\n\",\n    \"print(match1)\\n\",\n    \"match1 = re.search('3\\\\*4\\\\+5=17', '3*4+5=17') #意図した文字列にマッチ\\n\",\n    \"print(match1)\\n\",\n    \"match1 = re.search('|ω・`）チラ ', '|ω・`）チラ ') #顔文字。 空列にマッチしてしまう\\n\",\n    \"print(match1)\\n\",\n    \"match1 = re.search('\\\\|ω・`）チラ ', '|ω・`）チラ ') #意図した文字列にマッチ\\n\",\n    \"print(match1)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"特殊な意味を持つ記号は次の14個です。\\n\",\n    \"\\n\",\n    \"`. ^ $ * + ? { } [ ] \\\\ | ( )`\\n\",\n    \"\\n\",\n    \"これらの特殊記号が含まれる場合（かつ意図したマッチの結果が得られない場合）には、エスケープシーケンスを使う（エスケープする）べき（可能性がある）ことも考慮に入れておいてください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 正規表現に関する関数とメソッド \\n\",\n    \"\\n\",\n    \"以下では更に幾つかの関数とメソッドを紹介します。\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### `findall`\\n\",\n    \"\\n\",\n    \" **`findall`** は、`正規表現R` にマッチする `文字列A` 中の全ての文字列を、リストに格納して返します。\\n\",\n    \"\\n\",\n    \"具体的には次のように実行します。\\n\",\n    \"\\n\",\n    \"---\\n\",\n    \"```Python\\n\",\n    \"re.findall(正規表現R, 文字列A)\\n\",\n    \"```\\n\",\n    \"---\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"list1 = re.findall('had', 'James while John had had had had had had had had had had had a better effect on the teacher.')\\n\",\n    \"#James, while John had had 'had', had had 'had had'; 'had had' had had a better effect on the teacher.\\n\",\n    \"print(list1) #全てのhadを抜き出す\\n\",\n    \"list1 = re.findall('p[^ .]*', 'Peter Piper picked a peck of pickled peppers.', re.I) \\n\",\n    \"print(list1)# pで始まる全ての単語を取得する, 大文字小文字を区別しない\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### `finditer`\\n\",\n    \"\\n\",\n    \" **`finditer`** は、`正規表現R` にマッチする `文字列A` 中の全ての matchオブジェクトを、特殊なリスト（のようなもの）に格納して返します。\\n\",\n    \"\\n\",\n    \"具体的には次のように実行します。\\n\",\n    \"\\n\",\n    \"---\\n\",\n    \"```Python\\n\",\n    \"re.finditer(正規表現R, 文字列A)\\n\",\n    \"```\\n\",\n    \"---\\n\",\n    \"\\n\",\n    \"返値は特殊なリスト（のようなもの）であり、for文の `in` の後ろに置いて使ってください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"print('1:正規表現 had の結果：')\\n\",\n    \"iter1 = re.finditer('had', 'James while John had had had had had had had had had had had a better effect on the teacher.')\\n\",\n    \"#James, while John had had 'had', had had 'had had'; 'had had' had had a better effect on the teacher.\\n\",\n    \"for match in iter1:\\n\",\n    \"    print(match) #全てのhadを抜き出す\\n\",\n    \"print('2:正規表現 p[^ .]* の結果：')\\n\",\n    \"iter1 = re.finditer('p[^ .]*', 'Peter Piper picked a peck of pickled peppers.', re.I) \\n\",\n    \"for match in iter1:\\n\",\n    \"    print(match)# pで始まる全ての単語を取得する, 大文字小文字を区別しない\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### `group`\\n\",\n    \"\\n\",\n    \"matchオブジェクトのメソッド **`group`** は、正規表現にマッチした文字列を（部分的に）取り出します。正規表現内に丸括弧を用いると、括弧内の正規表現とマッチした文字列を取得できるようになっています。なお、`group` によるこの操作を、括弧内の文字列を**キャプチャ**するといいます。\\n\",\n    \"\\n\",\n    \" `i` 番目のキャプチャした値を取得するには次のようにします。`i = 0` の場合は、マッチした文字列全体を取得できます。\\n\",\n    \"\\n\",\n    \"---\\n\",\n    \"```Python\\n\",\n    \"matchオブジェクト.group(i)\\n\",\n    \"```\\n\",\n    \"---\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"import re\\n\",\n    \"match1 = re.search('03-5454-(\\\\d\\\\d\\\\d\\\\d)', '03-5454-6666')\\n\",\n    \"print('マッチした文字列=', match1.group(0), ' キャプチャした文字列=', match1.group(1)) # 内線番号の取得 \\n\",\n    \"match1 = re.search('([^@]*)@[^.]*(\\\\.[^.]*)?\\\\.u-tokyo\\\\.ac\\\\.jp', 'accountname@test.ecc.u-tokyo.ac.jp') # \\\\.はピリオドを表します\\n\",\n    \"print('マッチした文字列=', match1.group(0), ' キャプチャした文字列=', match1.group(1)) # アカウント名の取得 \\n\",\n    \"match1 = re.search('([^@]*)@[^.]*(\\\\.[^.]*)?\\\\.u-tokyo\\\\.ac\\\\.jp', 'accountname@test.u-tokyo.ac.jp') # \\\\.はピリオドを表します\\n\",\n    \"print('マッチした文字列=', match1.group(0), ' キャプチャした文字列=', match1.group(1)) # アカウント名の取得 \\n\",\n    \"match1 = re.search(\\\"href=\\\\\\\"([^\\\\\\\"]*)\\\\\\\"\\\", '<a href=\\\"http://www.u-tokyo.ac.jp\\\" target=\\\"_blank\\\">U-Tokyo</a>')# \\\\\\\"はダブルクォートを表します\\n\",\n    \"print('マッチした文字列=', match1.group(0), ' キャプチャした文字列=', match1.group(1)) # リンク先URLの取得\\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"マッチに失敗した場合は、matchオブジェクトが返らずに `None` が返るので、それを確かめずに `group` を使おうとするとエラーが出ますので注意してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"match1 = re.search('03-5454-(\\\\d\\\\d\\\\d\\\\d)', '03-5454-666') #マッチしない文字列\\n\",\n    \"print('マッチした文字列=', match1.group(0), ' キャプチャした文字列=', match1.group(1))\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"たとえば、if文でエラーを回避します。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"match1 = re.search('03-5454-(\\\\d\\\\d\\\\d\\\\d)', '03-5454-666')\\n\",\n    \"if match1 != None:\\n\",\n    \"    print('マッチした文字列=', match1.group(0), ' キャプチャした文字列=', match1.group(1))\\n\",\n    \"else: \\n\",\n    \"    print('マッチしていません')\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 練習\\n\",\n    \"\\n\",\n    \"文字列 `str1` を引数として取り、`str1` を構成する文字列が `A`, `C`, `G`, `T` の4種類の文字以外の文字を含むかどうか調べて、これら以外を含む場合は `False` を、そうでない場合は `True` を返す関数 `check_ACGTstr` を作成してください。 ただし、大文字と小文字は区別しません。また、空列の場合は `False` を返してください。\\n\",\n    \"\\n\",\n    \"以下のセルの `...` のところを書き換えて解答してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"import ...\\n\",\n    \"def check_ACGTstr(str1):\\n\",\n    \"    ...\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"上のセルで解答を作成した後、以下のセルを実行し、実行結果が全て `True` になることを確認してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {\n    \"tags\": [\n     \"raises-exception\"\n    ]\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"print(check_ACGTstr('AcCGTAGCacATcGgAaaTtGCacT') == True) \\n\",\n    \"print(check_ACGTstr(':ACaacgta24FgtGH') == False)\\n\",\n    \"print(check_ACGTstr('') == False)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 練習\\n\",\n    \"\\n\",\n    \"xmlファイル B1S.xml は http://www.natcorp.ox.ac.uk から入手できるイギリス英語のコーパスのファイルです。\\n\",\n    \"\\n\",\n    \"B1S.xmlに含まれるwタグで囲まれる英単語をキー `key` に、その wタグの属性posの値を `key` の値とする辞書を返す関数 `get_pos` を作成してください。ただし、一般にwタグは、次のような形式で記述されます。\\n\",\n    \"\\n\",\n    \"---\\n\",\n    \"```\\n\",\n    \"<w pos=\\\"PRON\\\" （ > 記号以外の何らかの文字列）>（英単語） </w>\\n\",\n    \"```\\n\",\n    \"---\\n\",\n    \"\\n\",\n    \"たとえば、以下のような具合です。\\n\",\n    \"\\n\",\n    \"---\\n\",\n    \"```\\n\",\n    \"<w pos=\\\"VERB\\\" hw=\\\"have\\\" c5=\\\"VHI\\\">have </w>\\n\",\n    \"```\\n\",\n    \"---\\n\",\n    \"\\n\",\n    \"\\n\",\n    \"以下のセルの `...` のところを書き換えて解答してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"import ...\\n\",\n    \"def get_pos():\\n\",\n    \"    ...\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"上のセルで解答を作成した後、以下のセルを実行し、実行結果が `True` になることを確認してください。\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {\n    \"tags\": [\n     \"raises-exception\"\n    ]\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"print(get_pos()['They '] == 'PRON')\\n\",\n    \"print(get_pos()['know '] == 'VERB')\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## 練習の解答\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"import re\\n\",\n    \"def check_monthstr(str1):\\n\",\n    \"    reg_month = '((0(1|2|3|4|5|6|7|8|9))|10|11|12)' #\\n\",\n    \"    #reg_month = '01|02|03|04|05|06|07|08|09|10|11|12' # としてもよい\\n\",\n    \"    match1 = re.search(reg_month, str1) # 文字列を「含む」なので、（matchではなく）searchを使う\\n\",\n    \"    return match1\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"import re\\n\",\n    \"def check_timestr(str1):\\n\",\n    \"    reg_hour = '((0(0|1|2|3|4|5|6|7|8|9))|10|11)' #「時」部分の正規表現\\n\",\n    \"    #reg_hour = '((0[0-9]|10|11)' # 文字クラスを使ってと表すこともできます（文字クラスは後で学習します \\n\",\n    \"    reg_min = '((0|2|3|4|5)(0|1|2|3|4|5|6|7|8|9))' #「分」部分の正規表現\\n\",\n    \"    #reg_min = '([0-5][0-9])' # 文字クラスを使ってと表すこともできます（文字クラスは後で学習します \\n\",\n    \"    reg_time = reg_hour + ':' + reg_min # 時部分と分部分を、「:」を挟んで結合した新しい正規表現\\n\",\n    \"    #print(reg_time)\\n\",\n    \"    match1 = re.search(reg_time, str1) # 文字列を「含む」なので、（matchではなく）searchを使う\\n\",\n    \"    return match1\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"import re\\n\",\n    \"def check_ipv4str(str1):\\n\",\n    \"    reg_0to9 = '(0|1|2|3|4|5|6|7|8|9)' # 0から9の数を表す正規表現 \\n\",\n    \"    #reg_0to9 = '[0-9]' # 文字クラスを使ってと表すこともできます（文字クラスは後で学習します \\n\",\n    \"    reg_0_1 = '(0|1)' + reg_0to9 + reg_0to9 # 先頭の文字が0もしくは1だったときの正規表現(000から199まで)\\n\",\n    \"    reg_20_24 = '2(0|1|2|3|4)' + reg_0to9 # 先頭が20,21,22,23,24だったときの正規表現(200から249まで)\\n\",\n    \"    #reg_20_24 = '2[0-4]' + reg_0to9 # 文字クラスを使ってと表すこともできます\\n\",\n    \"    reg_25 = '25(0|1|2|3|4|5)' # 先頭が25だったときの正規表現(250から255まで)\\n\",\n    \"    #reg_25 = '25[0-5]' # 文字クラスを使ってと表すこともできます\\n\",\n    \"    reg_000_255 = '(' + reg_0_1 + '|' + reg_20_24 + '|' + reg_25 + ')'# aaa（000から255）を表す正規表現\\n\",\n    \"    #print(reg_000_255)\\n\",\n    \"    reg_ip = reg_000_255 + ':' + reg_000_255 + ':' + reg_000_255 + ':' + reg_000_255 # aaa:bbb:ccc:dddを表す正規表現\\n\",\n    \"    #print(reg_ip)\\n\",\n    \"    match1 = re.search(reg_ip, str1) # 文字列を「含む」なので、（matchではなく）searchを使う\\n\",\n    \"    return match1\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"import re\\n\",\n    \"def check_monthdaystr(str1):\\n\",\n    \"    reg_month_31 = '(01|03|05|07|08|10|12)' #ddが01から31になるmm\\n\",\n    \"    reg_month_30 = '(04|06|09|11)' #ddが01から30になるmm\\n\",\n    \"    reg_1to9 = '(1|2|3|4|5|6|7|8|9)' # [1-9]でもよい\\n\",\n    \"    reg_0to9 = '(0|1|2|3|4|5|6|7|8|9)' # [0-9]でもよい\\n\",\n    \"    reg_day_01to09 = '(0' + reg_1to9 + ')' # ddが01から09になる場合\\n\",\n    \"    reg_day_10to19 = '(1' + reg_0to9 + ')' # ddが10から19になる場合\\n\",\n    \"    reg_day_20to29 = '(2' + reg_0to9 + ')' # ddが21から29になる場合\\n\",\n    \"    reg_day_01to29 = reg_day_01to09 + '|' + reg_day_10to19 + '|' + reg_day_20to29 # ddが01から29になる場合\\n\",\n    \"    reg_day_01to30 = reg_day_01to29 + '|' + '30' # ddが01から30になる場合\\n\",\n    \"    reg_day_01to31 = reg_day_01to30 + '|' + '31' # ddが01から31になる場合\\n\",\n    \"    reg_monthday_31 = reg_month_31 + '/(' + reg_day_01to31 + ')' # mmとddを組み合わせる（01-31の場合）\\n\",\n    \"    reg_monthday_30 = reg_month_30 + '/(' + reg_day_01to30 + ')' # mmとddを組み合わせる（01-30の場合）\\n\",\n    \"    reg_monthday_29 = '02/(' + reg_day_01to29 + ')' # mmとddを組み合わせる（01-29の場合はmmは02のみ）\\n\",\n    \"    # 文字列を「含む」なので、（matchではなく）searchを使う\\n\",\n    \"    match1 = re.search(reg_monthday_31, str1) # 問題文の条件3を満たす文字列とマッチするかどうか\\n\",\n    \"    if match1 != None:\\n\",\n    \"        return match1\\n\",\n    \"    match1 = re.search(reg_monthday_30, str1) # 問題文の条件4を満たす文字列とマッチするかどうか\\n\",\n    \"    if match1 != None: \\n\",\n    \"        return match1\\n\",\n    \"    match1 = re.search(reg_monthday_29, str1) # 問題文の条件5を満たす文字列とマッチするかどうか\\n\",\n    \"    return match1\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"import re\\n\",\n    \"def sumnumbers(s):\\n\",\n    \"    numbers = re.split('[^0-9]+', s)\\n\",\n    \"    numbers.remove('')\\n\",\n    \"    n = 0\\n\",\n    \"    for number in numbers:\\n\",\n    \"        n += int(number)\\n\",\n    \"    return n\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"import re\\n\",\n    \"def get_engsentences():\\n\",\n    \"    word_list = [] # 結果を格納するリスト\\n\",\n    \"    with open('text-sample.txt', 'r') as f:\\n\",\n    \"        file_str = f.read() #ファイルの中身を文字列に格納\\n\",\n    \"    str_list = re.split(r'[^a-zA-Z][^a-zA-Z]*', file_str) # 文字列を単語に区切る\\n\",\n    \"    for word in str_list: #`re.split(r'[^a-zA-Z][^a-zA-Z]*', f.read())` は、ファイル全体の文字列を単語に区切ります。\\n\",\n    \"    #for word in re.split(r'[^a-zA-Z][^a-zA-Z]*', f.read()): # と一行にまとめてもよい\\n\",\n    \"        if word != '': #空文字列を除く\\n\",\n    \"            word = word.lower() #単語（文字列）の中の大文字を小文字に変換します\\n\",\n    \"            word_list.append(word) #リストに追加 \\n\",\n    \"            #word_list.append(word.lower())でも大丈夫\\n\",\n    \"    word_list.sort() # sortメソッドは破壊的\\n\",\n    \"    return word_list\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"import re\\n\",\n    \"def get_engsentences2():\\n\",\n    \"    word_dict = {} # 重複する単語を削除する為に辞書を使ってみる\\n\",\n    \"    with open('text-sample.txt', 'r') as f:\\n\",\n    \"        file_str = f.read() #ファイルの中身を文字列に格納\\n\",\n    \"    str_list = re.split(r'[^a-zA-Z][^a-zA-Z]*', file_str) # 文字列を単語に区切る\\n\",\n    \"    for word in str_list: #`re.split(r'[^a-zA-Z][^a-zA-Z]*', f.read())` は、ファイル全体の文字列を単語に区切ります。\\n\",\n    \"        if word != '': #空文字列を除く\\n\",\n    \"            word = word.lower() #単語（文字列）の中の大文字を小文字に変換します\\n\",\n    \"            word_dict[word] = 'anthing good' #wordという単語があったことを辞書に記録する（wordに対応する値は何でもよい）\\n\",\n    \"            #word_dict[word.lower()] = 'anthing good'でも大丈夫\\n\",\n    \"    word_list = [] # 結果を格納するリスト\\n\",\n    \"    for word in word_dict:\\n\",\n    \"        word_list.append(word)\\n\",\n    \"    word_list.sort()\\n\",\n    \"    return word_list\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"import re\\n\",\n    \"def check_ACGTstr(str1):\\n\",\n    \"    reg_ACGT = '(A|C|G|T)+' # A,C,G,Tを表す正規表現  # +→* だと空文字列がマッチしてしまう \\n\",\n    \"    #reg_ACGT = '(A|C|G|T)(A|C|G|T)*' # A,C,G,Tを表す正規表現 \\n\",\n    \"    #reg_ACGT = '[ACGT]+' # A,C,G,Tを表す正規表現 \\n\",\n    \"    match1 = re.search(reg_ACGT, str1, re.I) # re.I を入れて、大文字と小文字を区別しない\\n\",\n    \"    if match1 != None and str1 == match1.group(): # str1全体とマッチした文字列が等しいかチェック\\n\",\n    \"        return True\\n\",\n    \"    return False\\n\",\n    \"#別解\\n\",\n    \"#def check_ACGTstr(str1):\\n\",\n    \"#    reg_ACGT = '(A|C|G|T)+$' # A,C,G,Tを表す正規表現  # +→* だと空文字列がマッチしてしまう \\n\",\n    \"#    #reg_ACGT = '(A|C|G|T)(A|C|G|T)*$' # A,C,G,Tを表す正規表現 \\n\",\n    \"#    #reg_ACGT = '[ACGT]+$' # A,C,G,Tを表す正規表現 \\n\",\n    \"#    match1 = re.search(reg_ACGT, str1, re.I) # re.I を入れて、大文字と小文字を区別しない\\n\",\n    \"#    if match1 != None: # str1全体とマッチした文字列が等しいかチェック\\n\",\n    \"#        return True\\n\",\n    \"#    return False\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"import re\\n\",\n    \"def check_postalcode(str1):\\n\",\n    \"    reg1 = '[0-9]{3,3}-[0-9]{4,4}'\\n\",\n    \"    #reg1 = '\\\\d{3,3}-\\\\d{4,4}' #でも可\\n\",\n    \"    #reg1 = '[0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]' #でも可\\n\",\n    \"    match1 = re.match(reg1, str1)\\n\",\n    \"    if match1 == None:\\n\",\n    \"        return False\\n\",\n    \"    if match1.group() == str1:\\n\",\n    \"        return True\\n\",\n    \"    return False\\n\",\n    \"#別解\\n\",\n    \"#def check_postalcode(str1):\\n\",\n    \"#    reg1 = '[0-9]{3,3}-[0-9]{4,4}$' #ドル記号を使って行末からマッチを調べる\\n\",\n    \"#    #reg1 = '\\\\d{3,3}-\\\\d{4,4}$' #でも可\\n\",\n    \"#    #reg1 = '[0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]$' #でも可\\n\",\n    \"#    match1 = re.match(reg1, str1)\\n\",\n    \"#    if match1 == None:\\n\",\n    \"#        return False\\n\",\n    \"#    return True\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"import re\\n\",\n    \"def check_extension(str1):\\n\",\n    \"    reg1 = '2[0-9]{4,4}'\\n\",\n    \"#    reg1 = '2\\\\d{4,4}' #でも可\\n\",\n    \"#    reg1 = '2[0-9][0-9][0-9][0-9]' #でも可\\n\",\n    \"    match1 = re.match(reg1, str1)\\n\",\n    \"    if match1 == None:\\n\",\n    \"        return False\\n\",\n    \"    if match1.group() == str1:\\n\",\n    \"        return True\\n\",\n    \"    return False\\n\",\n    \"#別解\\n\",\n    \"#def check_extension(str1):\\n\",\n    \"#    reg1 = '2[0-9]{4,4}$'\\n\",\n    \"#    #reg1 = '2\\\\d{4,4}$' #でも可\\n\",\n    \"#    #reg1 = '2[0-9][0-9][0-9][0-9]$' #でも可\\n\",\n    \"#    match1 = re.match(reg1, str1)\\n\",\n    \"#    if match1 == None:\\n\",\n    \"#        return False\\n\",\n    \"#    return True   \"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"import re\\n\",\n    \"def get_pos():\\n\",\n    \"    str_file = 'B1S.xml'\\n\",\n    \"    with open(str_file, 'r', encoding='utf-8') as f:\\n\",\n    \"        str_script = f.read() # ファイルの中身を1つの文字列に格納する\\n\",\n    \"    #print(str_script)\\n\",\n    \"    itr1 = re.finditer(\\\"<w[^>]*pos=\\\\\\\"([^>\\\\\\\"]*)\\\\\\\"[^>]*>([^<]*)</w>\\\", str_script) # 正規表現を使ってwタグ周辺の文字列をマッチ\\n\",\n    \"    dic1 = {} # 辞書初期化\\n\",\n    \"    for m1 in itr1:\\n\",\n    \"        #print(m1)\\n\",\n    \"        #print(m1.group(1), m1.group(2))\\n\",\n    \"        dic1[m1.group(2)] = m1.group(1) # groupを使ってマッチした文字列をキャプチャする\\n\",\n    \"    return dic1\"\n   ]\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"Python 3 (ipykernel)\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"codemirror_mode\": {\n    \"name\": \"ipython\",\n    \"version\": 3\n   },\n   \"file_extension\": \".py\",\n   \"mimetype\": \"text/x-python\",\n   \"name\": \"python\",\n   \"nbconvert_exporter\": \"python\",\n   \"pygments_lexer\": \"ipython3\",\n   \"version\": \"3.12.4\"\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 4\n}\n"
  },
  {
    "path": "colab/appendix/B1S.xml",
    "content": "<bncDoc xml:id=\"B1S\"><teiHeader><fileDesc><titleStmt><title>  Our family has Huntington's chorea. Sample containing about 676 words from a book (domain: social science) </title><respStmt><resp> Data capture and transcription </resp><name> Oxford University Press </name> </respStmt></titleStmt><editionStmt><edition>BNC XML Edition, December 2006</edition></editionStmt><extent> 676 tokens; 689 w-units; 47 s-units </extent><publicationStmt><distributor>Distributed under licence by Oxford University Computing Services on behalf of the BNC Consortium.</distributor><availability> This material is protected by international copyright laws and may not be copied or redistributed in any way. Consult the BNC Web Site at http://www.natcorp.ox.ac.uk for full licencing and distribution conditions.</availability><idno type=\"bnc\">B1S</idno><idno type=\"old\"> HuntCh </idno></publicationStmt><sourceDesc><bibl><title>Our family has Huntington's chorea. </title> <author n=\"SlatfJ1\">Slatford, Joy</author> <imprint n=\"GRAHAM1\"><publisher>Graham-Cameron Publishing</publisher> <pubPlace>Cambridge</pubPlace> <date value=\"1987\">1987</date> </imprint> <pp>2-24</pp> </bibl></sourceDesc></fileDesc><encodingDesc><tagsDecl><namespace name=\"\"><tagUsage gi=\"c\" occurs=\"79\"/><tagUsage gi=\"gap\" occurs=\"1\"/><tagUsage gi=\"mw\" occurs=\"2\"/><tagUsage gi=\"p\" occurs=\"31\"/><tagUsage gi=\"pb\" occurs=\"2\"/><tagUsage gi=\"s\" occurs=\"47\"/><tagUsage gi=\"w\" occurs=\"689\"/></namespace></tagsDecl></encodingDesc><profileDesc><creation date=\"1987\"> </creation><textClass><catRef targets=\"WRI ALLTIM3 ALLAVA2 ALLTYP3 WRIAAG0 WRIAD0 WRIASE2 WRIATY3 WRIAUD1 WRIDOM4 WRILEV1 WRIMED1 WRIPP5 WRISAM1 WRISTA1 WRITAS3\"/><classCode scheme=\"DLEE\">W nonAc: soc science</classCode><keywords scheme=\"COPAC\"><term>Huntington</term></keywords><keywords><term> Huntingdon's chorea </term></keywords></textClass></profileDesc><revisionDesc><change date=\"2006-10-21\" who=\"#OUCS\">Tag usage updated for BNC-XML</change><change date=\"2000-12-13\" who=\"#OUCS\">Last check for BNC World first release</change><change date=\"2000-09-06\" who=\"#OUCS\">Redo tagusage tables</change><change date=\"2000-09-01\" who=\"#OUCS\">Check all tagcounts</change><change date=\"2000-06-23\" who=\"#OUCS\">Resequenced s-units and added headers</change><change date=\"2000-01-21\" who=\"#OUCS\">Added date info</change><change date=\"2000-01-09\" who=\"#OUCS\">Updated all catrefs</change><change date=\"2000-01-08\" who=\"#OUCS\">Updated source title</change><change date=\"2000-01-08\" who=\"#OUCS\">Updated titles</change><change date=\"1999-12-25\" who=\"#OUCS\">corrected tagUsage</change><change date=\"1999-09-13\" who=\"#UCREL\">POS codes revised for BNC-2; header updated</change><change date=\"1994-11-24\" who=\"#dominic\">Initial accession to corpus</change></revisionDesc></teiHeader>\n<wtext type=\"NONAC\"><pb n=\"1\"/><gap desc=\"illustration/editing/publishing/copyright details\" resp=\"OUP\"/><pb n=\"2\"/><p>\n<s n=\"1\"><w c5=\"PNI\" hw=\"everyone\" pos=\"PRON\">Everyone </w><w c5=\"VBZ\" hw=\"be\" pos=\"VERB\">is </w><w c5=\"AJ0\" hw=\"ill\" pos=\"ADJ\">ill </w><w c5=\"AV0\" hw=\"sometimes\" pos=\"ADV\">sometimes</w><c c5=\"PUN\">.</c></s></p><p>\n<s n=\"2\"><w c5=\"PRP\" hw=\"at\" pos=\"PREP\">At </w><w c5=\"NN1\" hw=\"school\" pos=\"SUBST\">school</w><c c5=\"PUN\">, </c><w c5=\"NP0\" hw=\"nicola\" pos=\"SUBST\">Nicola </w><w c5=\"VHD\" hw=\"have\" pos=\"VERB\">had </w><w c5=\"AT0\" hw=\"a\" pos=\"ART\">a </w><w c5=\"AJ0-NN1\" hw=\"cold\" pos=\"ADJ\">cold </w><w c5=\"ORD\" hw=\"last\" pos=\"ADJ\">last </w><w c5=\"NN1\" hw=\"week\" pos=\"SUBST\">week</w><c c5=\"PUN\">.</c></s></p><p>\n<s n=\"3\"><w c5=\"NP0\" hw=\"adam\" pos=\"SUBST\">Adam </w><w c5=\"VVD\" hw=\"break\" pos=\"VERB\">broke </w><w c5=\"DPS\" hw=\"he\" pos=\"PRON\">his </w><w c5=\"NN1\" hw=\"leg\" pos=\"SUBST\">leg </w><w c5=\"PRP\" hw=\"in\" pos=\"PREP\">in </w><w c5=\"AT0\" hw=\"the\" pos=\"ART\">the </w><w c5=\"NN1\" hw=\"summer\" pos=\"SUBST\">summer</w><c c5=\"PUN\">.</c></s></p><p>\n<s n=\"4\"><w c5=\"NP0\" hw=\"iain\" pos=\"SUBST\">Iain </w><w c5=\"VHD\" hw=\"have\" pos=\"VERB\">had </w><w c5=\"NN0\" hw=\"measles\" pos=\"SUBST\">measles </w><w c5=\"PRP\" hw=\"for\" pos=\"PREP\">for </w><w c5=\"CRD\" hw=\"two\" pos=\"ADJ\">two </w><w c5=\"NN2\" hw=\"week\" pos=\"SUBST\">weeks</w><c c5=\"PUN\">.</c></s></p><p>\n<s n=\"5\"><w c5=\"NP0\" hw=\"anthony\" pos=\"SUBST\">Anthony </w><w c5=\"VVZ\" hw=\"get\" pos=\"VERB\">gets </w><w c5=\"NN2\" hw=\"headache\" pos=\"SUBST\">headaches </w><w c5=\"AVQ-CJS\" hw=\"when\" pos=\"ADV\">when </w><w c5=\"PNP\" hw=\"he\" pos=\"PRON\">he </w><w c5=\"VVZ\" hw=\"read\" pos=\"VERB\">reads </w><w c5=\"PRP\" hw=\"for\" pos=\"PREP\">for </w><w c5=\"AV0\" hw=\"too\" pos=\"ADV\">too </w><w c5=\"AV0-AJ0\" hw=\"long\" pos=\"ADV\">long</w><c c5=\"PUN\">.</c></s></p><p>\n<s n=\"6\"><w c5=\"AV0\" hw=\"sometimes\" pos=\"ADV\">Sometimes</w><c c5=\"PUN\">, </c><w c5=\"AVQ\" hw=\"when\" pos=\"ADV\">when </w><w c5=\"PNP\" hw=\"you\" pos=\"PRON\">you </w><w c5=\"VBB\" hw=\"be\" pos=\"VERB\">are </w><w c5=\"AJ0\" hw=\"ill\" pos=\"ADJ\">ill</w><c c5=\"PUN\">, </c><w c5=\"AT0\" hw=\"the\" pos=\"ART\">the </w><w c5=\"NN1\" hw=\"doctor\" pos=\"SUBST\">doctor </w><w c5=\"VVZ\" hw=\"come\" pos=\"VERB\">comes </w><w c5=\"PRP\" hw=\"to\" pos=\"PREP\">to </w><w c5=\"DPS\" hw=\"you\" pos=\"PRON\">your </w><w c5=\"NN1\" hw=\"home\" pos=\"SUBST\">home</w><c c5=\"PUN\">.</c></s>\n<s n=\"7\"><w c5=\"CJS\" hw=\"if\" pos=\"CONJ\">If </w><w c5=\"PNP\" hw=\"she\" pos=\"PRON\">she </w><w c5=\"VVZ\" hw=\"think\" pos=\"VERB\">thinks </w><w c5=\"PNP\" hw=\"you\" pos=\"PRON\">you </w><w c5=\"VVB\" hw=\"need\" pos=\"VERB\">need </w><w c5=\"NN1\" hw=\"medicine\" pos=\"SUBST\">medicine </w><w c5=\"AT0\" hw=\"the\" pos=\"ART\">the </w><w c5=\"NN1\" hw=\"doctor\" pos=\"SUBST\">doctor </w><w c5=\"VM0\" hw=\"will\" pos=\"VERB\">will </w><w c5=\"VVI\" hw=\"write\" pos=\"VERB\">write </w><w c5=\"AT0\" hw=\"a\" pos=\"ART\">a </w><w c5=\"NN1\" hw=\"note\" pos=\"SUBST\">note </w><w c5=\"CJS\" hw=\"so\" pos=\"CONJ\">so </w><w c5=\"AT0\" hw=\"the\" pos=\"ART\">the </w><w c5=\"NN1\" hw=\"medicine\" pos=\"SUBST\">medicine </w><w c5=\"VM0\" hw=\"can\" pos=\"VERB\">can </w><w c5=\"VBI\" hw=\"be\" pos=\"VERB\">be </w><w c5=\"VVN\" hw=\"collect\" pos=\"VERB\">collected </w><w c5=\"PRP\" hw=\"from\" pos=\"PREP\">from </w><w c5=\"AT0\" hw=\"the\" pos=\"ART\">the </w><w c5=\"NN1\" hw=\"chemist\" pos=\"SUBST\">chemist</w><c c5=\"PUN\">.</c></s></p><p>\n<s n=\"8\"><w c5=\"PRP\" hw=\"at\" pos=\"PREP\">At </w><w c5=\"AJ0\" hw=\"other\" pos=\"ADJ\">other </w><w c5=\"NN2\" hw=\"time\" pos=\"SUBST\">times </w><w c5=\"NN0\" hw=\"people\" pos=\"SUBST\">people </w><w c5=\"VHB\" hw=\"have\" pos=\"VERB\">have </w><w c5=\"TO0\" hw=\"to\" pos=\"PREP\">to </w><w c5=\"VVI\" hw=\"go\" pos=\"VERB\">go </w><w c5=\"PRP\" hw=\"into\" pos=\"PREP\">into </w><w c5=\"NN1\" hw=\"hospital\" pos=\"SUBST\">hospital </w><w c5=\"TO0\" hw=\"to\" pos=\"PREP\">to </w><w c5=\"VHI\" hw=\"have\" pos=\"VERB\">have </w><w c5=\"AT0\" hw=\"an\" pos=\"ART\">an </w><w c5=\"NN1\" hw=\"operation\" pos=\"SUBST\">operation </w><w c5=\"TO0\" hw=\"to\" pos=\"PREP\">to </w><w c5=\"VVI\" hw=\"make\" pos=\"VERB\">make </w><w c5=\"PNP\" hw=\"they\" pos=\"PRON\">them </w><w c5=\"AJC\" hw=\"good\" pos=\"ADJ\">better</w><c c5=\"PUN\">.</c></s></p><p>\n<s n=\"9\"><w c5=\"CJC\" hw=\"but\" pos=\"CONJ\">But </w><w c5=\"AV0\" hw=\"sometimes\" pos=\"ADV\">sometimes </w><w c5=\"NN0\" hw=\"people\" pos=\"SUBST\">people </w><w c5=\"VHB\" hw=\"have\" pos=\"VERB\">have </w><w c5=\"AT0\" hw=\"an\" pos=\"ART\">an </w><w c5=\"NN1\" hw=\"illness\" pos=\"SUBST\">illness </w><w c5=\"DTQ\" hw=\"which\" pos=\"PRON\">which </w><w c5=\"VM0\" hw=\"can\" pos=\"VERB\">can</w><w c5=\"XX0\" hw=\"not\" pos=\"ADV\">not </w><w c5=\"VBI\" hw=\"be\" pos=\"VERB\">be </w><w c5=\"VVN\" hw=\"make\" pos=\"VERB\">made </w><w c5=\"AV0\" hw=\"well\" pos=\"ADV\">better</w><c c5=\"PUN\">.</c></s></p><p>\n<s n=\"10\"><w c5=\"PRP\" hw=\"in\" pos=\"PREP\">In </w><w c5=\"DPS\" hw=\"we\" pos=\"PRON\">our </w><w c5=\"NN1\" hw=\"family\" pos=\"SUBST\">family </w><w c5=\"PNP\" hw=\"we\" pos=\"PRON\">we </w><w c5=\"VHB\" hw=\"have\" pos=\"VERB\">have </w><w c5=\"AT0\" hw=\"a\" pos=\"ART\">a </w><w c5=\"AJ0\" hw=\"special\" pos=\"ADJ\">special </w><w c5=\"NN1\" hw=\"illness\" pos=\"SUBST\">illness</w><c c5=\"PUN\">.</c></s>\n<s n=\"11\"><w c5=\"PNP\" hw=\"it\" pos=\"PRON\">It </w><w c5=\"VBZ\" hw=\"be\" pos=\"VERB\">is </w><w c5=\"VVN\" hw=\"call\" pos=\"VERB\">called </w><w c5=\"NP0\" hw=\"huntington\" pos=\"SUBST\">Huntington</w><w c5=\"POS\" hw=\"'s\" pos=\"UNC\">'s </w><w c5=\"NP0-NN1\" hw=\"chorea\" pos=\"SUBST\">Chorea</w><c c5=\"PUN\">, </c><w c5=\"CJC\" hw=\"or\" pos=\"CONJ\">or </w><w c5=\"NP0\" hw=\"hc\" pos=\"SUBST\">HC </w><w c5=\"PRP\" hw=\"for\" pos=\"PREP\">for </w><w c5=\"AJ0\" hw=\"short\" pos=\"ADJ\">short</w><c c5=\"PUN\">.</c></s></p><p>\n<s n=\"12\"><w c5=\"NP0\" hw=\"peter\" pos=\"SUBST\">Peter </w><w c5=\"CJC\" hw=\"and\" pos=\"CONJ\">and </w><w c5=\"NP0\" hw=\"paul\" pos=\"SUBST\">Paul</w><w c5=\"POS\" hw=\"'s\" pos=\"UNC\">'s </w><w c5=\"NN1\" hw=\"grandfather\" pos=\"SUBST\">grandfather </w><w c5=\"VHD\" hw=\"have\" pos=\"VERB\">had </w><w c5=\"NP0\" hw=\"hc\" pos=\"SUBST\">HC</w><c c5=\"PUN\">.</c></s>\n<s n=\"13\"><w c5=\"PNP\" hw=\"he\" pos=\"PRON\">He </w><w c5=\"VBD\" hw=\"be\" pos=\"VERB\">was </w><w c5=\"DPS\" hw=\"they\" pos=\"PRON\">their </w><w c5=\"NN1\" hw=\"mum\" pos=\"SUBST\">Mum</w><w c5=\"POS\" hw=\"'s\" pos=\"UNC\">'s </w><w c5=\"NN1\" hw=\"dad\" pos=\"SUBST\">dad </w><w c5=\"CJC\" hw=\"and\" pos=\"CONJ\">and </w><w c5=\"AV0\" hw=\"so\" pos=\"ADV\">so </w><w c5=\"DPS\" hw=\"they\" pos=\"PRON\">their </w><w c5=\"NN1\" hw=\"mum\" pos=\"SUBST\">Mum </w><w c5=\"VM0\" hw=\"could\" pos=\"VERB\">could </w><w c5=\"VHI\" hw=\"have\" pos=\"VERB\">have </w><w c5=\"NP0\" hw=\"hc\" pos=\"SUBST\">HC </w><w c5=\"PRP\" hw=\"from\" pos=\"PREP\">from </w><w c5=\"PNP\" hw=\"he\" pos=\"PRON\">him</w><c c5=\"PUN\">.</c></s></p><p>\n<s n=\"14\"><w c5=\"NP0\" hw=\"hc\" pos=\"SUBST\">HC </w><w c5=\"VBZ\" hw=\"be\" pos=\"VERB\">is </w><w c5=\"XX0\" hw=\"not\" pos=\"ADV\">not </w><w c5=\"VVG\" hw=\"catch\" pos=\"VERB\">catching</w><c c5=\"PUN\">, </c><w c5=\"PRP\" hw=\"like\" pos=\"PREP\">like </w><w c5=\"NN0\" hw=\"measles\" pos=\"SUBST\">measles</w><c c5=\"PUN\">.</c></s>\n<s n=\"15\"><w c5=\"PNP\" hw=\"it\" pos=\"PRON\">It </w><w c5=\"VBZ\" hw=\"be\" pos=\"VERB\">is </w><w c5=\"AV0-AJ0\" hw=\"only\" pos=\"ADV\">only </w><w c5=\"CJS\" hw=\"if\" pos=\"CONJ\">if </w><w c5=\"DPS\" hw=\"you\" pos=\"PRON\">your </w><w c5=\"NN1\" hw=\"mum\" pos=\"SUBST\">Mum </w><w c5=\"CJC\" hw=\"or\" pos=\"CONJ\">or </w><w c5=\"NN1\" hw=\"dad\" pos=\"SUBST\">Dad </w><w c5=\"VHZ\" hw=\"have\" pos=\"VERB\">has </w><w c5=\"PNP\" hw=\"it\" pos=\"PRON\">it</w><c c5=\"PUN\">, </c><w c5=\"CJT\" hw=\"that\" pos=\"CONJ\">that </w><w c5=\"PNP\" hw=\"you\" pos=\"PRON\">you </w><w c5=\"VM0\" hw=\"may\" pos=\"VERB\">may </w><w c5=\"AJ0\" hw=\"possible\" pos=\"ADJ\">possible </w><w c5=\"VHB\" hw=\"have\" pos=\"VERB\">have </w><w c5=\"PNP\" hw=\"it\" pos=\"PRON\">it </w><w c5=\"CJS\" hw=\"when\" pos=\"CONJ\">when </w><w c5=\"PNP\" hw=\"you\" pos=\"PRON\">you </w><w c5=\"VVN\" hw=\"grow\" pos=\"VERB\">grown </w><w c5=\"AVP\" hw=\"up\" pos=\"ADV\">up</w><c c5=\"PUN\">, </c><w c5=\"CJS\" hw=\"whether\" pos=\"CONJ\">whether </w><w c5=\"PNP\" hw=\"you\" pos=\"PRON\">you </w><w c5=\"VBB\" hw=\"be\" pos=\"VERB\">are </w><w c5=\"AT0\" hw=\"a\" pos=\"ART\">a </w><w c5=\"NN1\" hw=\"boy\" pos=\"SUBST\">boy </w><w c5=\"CJC\" hw=\"or\" pos=\"CONJ\">or </w><w c5=\"AT0\" hw=\"a\" pos=\"ART\">a </w><w c5=\"NN1\" hw=\"girl\" pos=\"SUBST\">girl</w><c c5=\"PUN\">.</c></s></p><p>\n<s n=\"16\"><w c5=\"EX0\" hw=\"there\" pos=\"PRON\">There </w><w c5=\"VBB\" hw=\"be\" pos=\"VERB\">are </w><w c5=\"AJ0\" hw=\"other\" pos=\"ADJ\">other </w><w c5=\"NN2\" hw=\"family\" pos=\"SUBST\">families </w><w c5=\"PRP\" hw=\"like\" pos=\"PREP\">like </w><w c5=\"NP0\" hw=\"peter\" pos=\"SUBST\">Peter </w><w c5=\"CJC\" hw=\"and\" pos=\"CONJ\">and </w><w c5=\"NP0\" hw=\"paul\" pos=\"SUBST\">Paul</w><w c5=\"POS\" hw=\"'s\" pos=\"UNC\">'s </w><w c5=\"PNQ\" hw=\"who\" pos=\"PRON\">who </w><w c5=\"VHB\" hw=\"have\" pos=\"VERB\">have </w><w c5=\"NP0\" hw=\"hc\" pos=\"SUBST\">HC</w><c c5=\"PUN\">.</c></s>\n<s n=\"17\"><w c5=\"PNP\" hw=\"they\" pos=\"PRON\">They </w><w c5=\"DT0\" hw=\"all\" pos=\"ADJ\">all </w><w c5=\"VVD\" hw=\"join\" pos=\"VERB\">joined </w><w c5=\"AV0\" hw=\"together\" pos=\"ADV\">together </w><w c5=\"TO0\" hw=\"to\" pos=\"PREP\">to </w><w c5=\"VVI\" hw=\"make\" pos=\"VERB\">make </w><w c5=\"AT0\" hw=\"a\" pos=\"ART\">a </w><w c5=\"NN1\" hw=\"group\" pos=\"SUBST\">group </w><w c5=\"VVN\" hw=\"call\" pos=\"VERB\">called </w><w c5=\"NN1-VVB\" hw=\"combat\" pos=\"SUBST\">COMBAT</w><c c5=\"PUN\">.</c></s></p><p>\n<s n=\"18\"><w c5=\"NN1-VVB\" hw=\"combat\" pos=\"SUBST\">Combat </w><w c5=\"VVZ\" hw=\"mean\" pos=\"VERB\">means </w><w c5=\"TO0\" hw=\"to\" pos=\"PREP\">to </w><w c5=\"VVI\" hw=\"fight\" pos=\"VERB\">fight</w><c c5=\"PUN\">, </c><w c5=\"CJC\" hw=\"and\" pos=\"CONJ\">and </w><w c5=\"PNP\" hw=\"they\" pos=\"PRON\">they </w><w c5=\"VVB\" hw=\"help\" pos=\"VERB\">help </w><mw c5=\"PNX\"><w c5=\"DT0\" hw=\"each\" pos=\"ADJ\">each </w><w c5=\"NN1\" hw=\"other\" pos=\"SUBST\">other </w></mw><w c5=\"TO0\" hw=\"to\" pos=\"PREP\">to </w><w c5=\"VVI\" hw=\"fight\" pos=\"VERB\">fight </w><w c5=\"PRP\" hw=\"against\" pos=\"PREP\">against </w><w c5=\"DT0\" hw=\"this\" pos=\"ADJ\">this </w><w c5=\"NN1\" hw=\"illness\" pos=\"SUBST\">illness</w><c c5=\"PUN\">, </c><w c5=\"PRP\" hw=\"by\" pos=\"PREP\">by </w><w c5=\"VVG\" hw=\"talk\" pos=\"VERB\">talking </w><w c5=\"CJC\" hw=\"and\" pos=\"CONJ\">and </w><w c5=\"VVG\" hw=\"find\" pos=\"VERB\">finding </w><w c5=\"AVP\" hw=\"out\" pos=\"ADV\">out </w><w c5=\"AV0\" hw=\"more\" pos=\"ADV\">more </w><w c5=\"PRP\" hw=\"about\" pos=\"PREP\">about </w><w c5=\"PNP\" hw=\"it\" pos=\"PRON\">it</w><c c5=\"PUN\">, </c><w c5=\"CJC\" hw=\"and\" pos=\"CONJ\">and </w><w c5=\"VHG\" hw=\"have\" pos=\"VERB\">having </w><w c5=\"NN2\" hw=\"party\" pos=\"SUBST\">parties</w><c c5=\"PUN\">, </c><w c5=\"AV0\" hw=\"too\" pos=\"ADV\">too</w><c c5=\"PUN\">.</c></s></p><p>\n<s n=\"19\"><w c5=\"NP0\" hw=\"hc\" pos=\"SUBST\">HC </w><w c5=\"VBZ\" hw=\"be\" pos=\"VERB\">is </w><w c5=\"XX0\" hw=\"not\" pos=\"ADV\">not </w><w c5=\"PRP\" hw=\"like\" pos=\"PREP\">like </w><w c5=\"AJ0\" hw=\"other\" pos=\"ADJ\">other </w><w c5=\"NN2\" hw=\"illness\" pos=\"SUBST\">illnesses</w><c c5=\"PUN\">.</c></s>\n<s n=\"20\"><w c5=\"AV0\" hw=\"usually\" pos=\"ADV\">Usually</w><c c5=\"PUN\">, </c><w c5=\"PNP\" hw=\"it\" pos=\"PRON\">it </w><w c5=\"AV0\" hw=\"only\" pos=\"ADV\">only </w><w c5=\"VVZ\" hw=\"happen\" pos=\"VERB\">happens </w><w c5=\"PRP\" hw=\"to\" pos=\"PREP\">to </w><w c5=\"NN2\" hw=\"grown-up\" pos=\"SUBST\">grown-ups</w><c c5=\"PUN\">.</c></s>\n<s n=\"21\"><w c5=\"NN0\" hw=\"people\" pos=\"SUBST\">People </w><w c5=\"PRP\" hw=\"with\" pos=\"PREP\">with </w><w c5=\"NP0\" hw=\"hc\" pos=\"SUBST\">HC </w><w c5=\"VM0\" hw=\"may\" pos=\"VERB\">may </w><w c5=\"VBI\" hw=\"be\" pos=\"VERB\">be </w><w c5=\"AJ0\" hw=\"clumsy\" pos=\"ADJ\">clumsy</w><c c5=\"PUN\">, </c><w c5=\"CJC\" hw=\"or\" pos=\"CONJ\">or </w><w c5=\"VVB-NN1\" hw=\"fall\" pos=\"VERB\">fall </w><w c5=\"AVP-PRP\" hw=\"over\" pos=\"ADV\">over </w><w c5=\"AT0\" hw=\"a\" pos=\"ART\">a </w><w c5=\"NN1\" hw=\"lot\" pos=\"SUBST\">lot</w><c c5=\"PUN\">, </c><w c5=\"CJC\" hw=\"or\" pos=\"CONJ\">or </w><w c5=\"VVB\" hw=\"get\" pos=\"VERB\">get </w><w c5=\"AV0\" hw=\"very\" pos=\"ADV\">very </w><w c5=\"AJ0\" hw=\"fidgety\" pos=\"ADJ\">fidgety</w><c c5=\"PUN\">.</c></s>\n<s n=\"22\"><w c5=\"AV0\" hw=\"sometimes\" pos=\"ADV\">Sometimes </w><w c5=\"PNP\" hw=\"they\" pos=\"PRON\">they </w><w c5=\"VM0\" hw=\"may\" pos=\"VERB\">may </w><w c5=\"XX0\" hw=\"not\" pos=\"ADV\">not </w><w c5=\"VBI\" hw=\"be\" pos=\"VERB\">be </w><w c5=\"AJ0\" hw=\"able\" pos=\"ADJ\">able </w><w c5=\"TO0\" hw=\"to\" pos=\"PREP\">to </w><w c5=\"VVI\" hw=\"eat\" pos=\"VERB\">eat </w><w c5=\"CJC\" hw=\"or\" pos=\"CONJ\">or </w><w c5=\"VVI\" hw=\"talk\" pos=\"VERB\">talk </w><w c5=\"AV0\" hw=\"very\" pos=\"ADV\">very </w><w c5=\"AV0\" hw=\"well\" pos=\"ADV\">well</w><c c5=\"PUN\">.</c></s>\n<s n=\"23\"><w c5=\"PNP\" hw=\"they\" pos=\"PRON\">They </w><w c5=\"VM0\" hw=\"can\" pos=\"VERB\">can </w><w c5=\"AV0\" hw=\"also\" pos=\"ADV\">also </w><w c5=\"VBI\" hw=\"be\" pos=\"VERB\">be </w><w c5=\"AJ0\" hw=\"forgetful\" pos=\"ADJ\">forgetful </w><w c5=\"CJC\" hw=\"or\" pos=\"CONJ\">or </w><w c5=\"AV0\" hw=\"very\" pos=\"ADV\">very </w><w c5=\"AJ0\" hw=\"tired\" pos=\"ADJ\">tired </w><w c5=\"CJC\" hw=\"and\" pos=\"CONJ\">and </w><w c5=\"AV0\" hw=\"perhaps\" pos=\"ADV\">perhaps </w><w c5=\"AJ0-AV0\" hw=\"bad\" pos=\"ADJ\">bad </w><w c5=\"AJ0-VVN\" hw=\"tempered\" pos=\"ADJ\">tempered</w><c c5=\"PUN\">.</c></s></p><p>\n<s n=\"24\"><w c5=\"CJS\" hw=\"when\" pos=\"CONJ\">When </w><w c5=\"NN0\" hw=\"people\" pos=\"SUBST\">people </w><w c5=\"VVB\" hw=\"get\" pos=\"VERB\">get </w><w c5=\"PNP\" hw=\"it\" pos=\"PRON\">it</w><c c5=\"PUN\">, </c><w c5=\"PNP\" hw=\"they\" pos=\"PRON\">they </w><w c5=\"VM0\" hw=\"may\" pos=\"VERB\">may </w><w c5=\"VHI\" hw=\"have\" pos=\"VERB\">have </w><w c5=\"TO0\" hw=\"to\" pos=\"PREP\">to </w><w c5=\"VVI\" hw=\"go\" pos=\"VERB\">go </w><w c5=\"PRP\" hw=\"into\" pos=\"PREP\">into </w><w c5=\"NN1\" hw=\"hospital\" pos=\"SUBST\">hospital </w><w c5=\"CJC\" hw=\"or\" pos=\"CONJ\">or </w><w c5=\"AT0\" hw=\"a\" pos=\"ART\">a </w><w c5=\"AJ0\" hw=\"special\" pos=\"ADJ\">special </w><w c5=\"NN1\" hw=\"home\" pos=\"SUBST\">home</w><c c5=\"PUN\">, </c><w c5=\"TO0\" hw=\"to\" pos=\"PREP\">to </w><w c5=\"VVI\" hw=\"rest\" pos=\"VERB\">rest</w><c c5=\"PUN\">, </c><w c5=\"CJC\" hw=\"or\" pos=\"CONJ\">or </w><w c5=\"AV0\" hw=\"perhaps\" pos=\"ADV\">perhaps </w><w c5=\"TO0\" hw=\"to\" pos=\"PREP\">to </w><w c5=\"VVI\" hw=\"stay\" pos=\"VERB\">stay</w><c c5=\"PUN\">.</c></s></p><p>\n<s n=\"25\"><w c5=\"XX0\" hw=\"not\" pos=\"ADV\">Not </w><w c5=\"PNI\" hw=\"everyone\" pos=\"PRON\">everyone </w><w c5=\"VVZ\" hw=\"understand\" pos=\"VERB\">understands </w><w c5=\"PNP\" hw=\"it\" pos=\"PRON\">it </w><w c5=\"VBZ\" hw=\"be\" pos=\"VERB\">is </w><w c5=\"NP0\" hw=\"hc\" pos=\"SUBST\">HC </w><w c5=\"DTQ\" hw=\"which\" pos=\"PRON\">which </w><w c5=\"VVZ\" hw=\"make\" pos=\"VERB\">makes </w><w c5=\"NN0\" hw=\"people\" pos=\"SUBST\">people </w><w c5=\"VVI\" hw=\"behave\" pos=\"VERB\">behave </w><w c5=\"AV0\" hw=\"strangely\" pos=\"ADV\">strangely</w><c c5=\"PUN\">.</c></s>\n<s n=\"26\"><w c5=\"PNP\" hw=\"it\" pos=\"PRON\">It </w><w c5=\"VBZ\" hw=\"be\" pos=\"VERB\">is </w><w c5=\"XX0\" hw=\"not\" pos=\"ADV\">not </w><w c5=\"DPS\" hw=\"they\" pos=\"PRON\">their </w><w c5=\"NN1\" hw=\"fault\" pos=\"SUBST\">fault</w><c c5=\"PUN\">, </c><w c5=\"PNP\" hw=\"it\" pos=\"PRON\">it </w><w c5=\"VBZ\" hw=\"be\" pos=\"VERB\">is </w><w c5=\"AT0\" hw=\"the\" pos=\"ART\">the </w><w c5=\"NN1\" hw=\"illness\" pos=\"SUBST\">illness</w><c c5=\"PUN\">.</c></s>\n<s n=\"27\"><w c5=\"PNP\" hw=\"it\" pos=\"PRON\">It </w><w c5=\"VDZ\" hw=\"do\" pos=\"VERB\">does </w><w c5=\"XX0\" hw=\"not\" pos=\"ADV\">not </w><w c5=\"VVI\" hw=\"mean\" pos=\"VERB\">mean </w><w c5=\"PNP\" hw=\"they\" pos=\"PRON\">they </w><w c5=\"VDB\" hw=\"do\" pos=\"VERB\">do</w><w c5=\"XX0\" hw=\"not\" pos=\"ADV\">n't </w><w c5=\"VVI\" hw=\"love\" pos=\"VERB\">love </w><w c5=\"DPS\" hw=\"they\" pos=\"PRON\">their </w><w c5=\"NN2\" hw=\"family\" pos=\"SUBST\">families</w><c c5=\"PUN\">, </c><w c5=\"CJC\" hw=\"but\" pos=\"CONJ\">but </w><w c5=\"AV0\" hw=\"sometimes\" pos=\"ADV\">sometimes </w><w c5=\"AT0\" hw=\"the\" pos=\"ART\">the </w><w c5=\"NP0\" hw=\"hc\" pos=\"SUBST\">HC </w><w c5=\"VVZ\" hw=\"stop\" pos=\"VERB\">stops </w><w c5=\"PNP\" hw=\"they\" pos=\"PRON\">them </w><w c5=\"VVG\" hw=\"show\" pos=\"VERB\">showing </w><w c5=\"PNP\" hw=\"it\" pos=\"PRON\">it</w><c c5=\"PUN\">.</c></s></p><p>\n<s n=\"28\"><w c5=\"CJS\" hw=\"when\" pos=\"CONJ\">When </w><w c5=\"NP0\" hw=\"peter\" pos=\"SUBST\">Peter </w><w c5=\"CJC\" hw=\"and\" pos=\"CONJ\">and </w><w c5=\"NP0\" hw=\"paul\" pos=\"SUBST\">Paul</w><w c5=\"POS\" hw=\"'s\" pos=\"UNC\">'s </w><w c5=\"NN1\" hw=\"mum\" pos=\"SUBST\">Mum </w><w c5=\"AV0\" hw=\"sometimes\" pos=\"ADV\">sometimes </w><w c5=\"VVB\" hw=\"get\" pos=\"VERB\">get </w><w c5=\"AJ0\" hw=\"angry\" pos=\"ADJ\">angry </w><w c5=\"CJC\" hw=\"or\" pos=\"CONJ\">or </w><w c5=\"AJ0\" hw=\"clumsy\" pos=\"ADJ\">clumsy</w><c c5=\"PUN\">, </c><w c5=\"PNP\" hw=\"they\" pos=\"PRON\">they </w><w c5=\"VDB\" hw=\"do\" pos=\"VERB\">do</w><w c5=\"XX0\" hw=\"not\" pos=\"ADV\">n't </w><w c5=\"VVI\" hw=\"know\" pos=\"VERB\">know </w><w c5=\"CJS\" hw=\"whether\" pos=\"CONJ\">whether </w><w c5=\"PNP\" hw=\"she\" pos=\"PRON\">she </w><w c5=\"VBZ\" hw=\"be\" pos=\"VERB\">is </w><w c5=\"VVG\" hw=\"start\" pos=\"VERB\">starting </w><w c5=\"NP0\" hw=\"hc\" pos=\"SUBST\">HC</w><c c5=\"PUN\">, </c><w c5=\"CJC\" hw=\"or\" pos=\"CONJ\">or </w><w c5=\"AV0\" hw=\"just\" pos=\"ADV\">just </w><w c5=\"AJ0-VVG\" hw=\"worrying\" pos=\"ADJ\">worrying </w><w c5=\"PRP\" hw=\"about\" pos=\"PREP\">about </w><w c5=\"VVG\" hw=\"start\" pos=\"VERB\">starting </w><w c5=\"NP0\" hw=\"hc\" pos=\"SUBST\">HC</w><c c5=\"PUN\">.</c></s></p><p>\n<s n=\"29\"><w c5=\"NP0\" hw=\"hc\" pos=\"SUBST\">HC </w><w c5=\"AV0\" hw=\"normally\" pos=\"ADV\">normally </w><w c5=\"VVZ\" hw=\"begin\" pos=\"VERB\">begins </w><w c5=\"CJS\" hw=\"after\" pos=\"CONJ\">after </w><w c5=\"PNP\" hw=\"you\" pos=\"PRON\">you </w><w c5=\"VBB\" hw=\"be\" pos=\"VERB\">are </w><w c5=\"VVN\" hw=\"grow\" pos=\"VERB\">grown </w><w c5=\"AVP\" hw=\"up\" pos=\"ADV\">up</w><c c5=\"PUN\">, </c><w c5=\"CJS\" hw=\"so\" pos=\"CONJ\">so </w><w c5=\"PNP\" hw=\"you\" pos=\"PRON\">you </w><w c5=\"VDB\" hw=\"do\" pos=\"VERB\">do</w><w c5=\"XX0\" hw=\"not\" pos=\"ADV\">n't </w><w c5=\"VVI\" hw=\"know\" pos=\"VERB\">know </w><w c5=\"CJS\" hw=\"whether\" pos=\"CONJ\">whether </w><w c5=\"PNP\" hw=\"you\" pos=\"PRON\">you </w><w c5=\"VM0\" hw=\"will\" pos=\"VERB\">will </w><w c5=\"VVI\" hw=\"get\" pos=\"VERB\">get </w><w c5=\"PNP\" hw=\"it\" pos=\"PRON\">it </w><w c5=\"CJC\" hw=\"or\" pos=\"CONJ\">or </w><w c5=\"XX0\" hw=\"not\" pos=\"ADV\">not</w><c c5=\"PUN\">.</c></s></p><p>\n<s n=\"30\"><w c5=\"CJS\" hw=\"if\" pos=\"CONJ\">If </w><w c5=\"DPS\" hw=\"they\" pos=\"PRON\">their </w><w c5=\"NN1\" hw=\"mum\" pos=\"SUBST\">Mum </w><w c5=\"VDZ\" hw=\"do\" pos=\"VERB\">does </w><w c5=\"VHI\" hw=\"have\" pos=\"VERB\">have </w><w c5=\"NP0\" hw=\"hc\" pos=\"SUBST\">HC</w><c c5=\"PUN\">, </c><w c5=\"NP0\" hw=\"peter\" pos=\"SUBST\">Peter </w><w c5=\"CJC\" hw=\"and\" pos=\"CONJ\">and </w><w c5=\"NP0\" hw=\"paul\" pos=\"SUBST\">Paul </w><w c5=\"VM0\" hw=\"may\" pos=\"VERB\">may </w><w c5=\"VVI\" hw=\"get\" pos=\"VERB\">get </w><w c5=\"PNP\" hw=\"it\" pos=\"PRON\">it </w><w c5=\"AV0\" hw=\"later\" pos=\"ADV\">later </w><w c5=\"AVP\" hw=\"on\" pos=\"ADV\">on</w><c c5=\"PUN\">.</c></s>\n<s n=\"31\"><w c5=\"EX0\" hw=\"there\" pos=\"PRON\">There </w><w c5=\"VBZ\" hw=\"be\" pos=\"VERB\">is </w><w c5=\"AV0\" hw=\"as\" pos=\"ADV\">as </w><w c5=\"DT0\" hw=\"much\" pos=\"ADJ\">much </w><w c5=\"NN1\" hw=\"chance\" pos=\"SUBST\">chance </w><w c5=\"PRF\" hw=\"of\" pos=\"PREP\">of </w><w c5=\"PNP\" hw=\"they\" pos=\"PRON\">them </w><w c5=\"VHG\" hw=\"have\" pos=\"VERB\">having </w><w c5=\"PNP\" hw=\"it\" pos=\"PRON\">it</w><c c5=\"PUN\">, </c><w c5=\"PRP\" hw=\"as\" pos=\"PREP\">as </w><w c5=\"PNP\" hw=\"they\" pos=\"PRON\">them </w><w c5=\"XX0\" hw=\"not\" pos=\"ADV\">not </w><w c5=\"VHG\" hw=\"have\" pos=\"VERB\">having </w><w c5=\"PNP\" hw=\"it\" pos=\"PRON\">it</w><c c5=\"PUN\">.</c></s>\n<s n=\"32\"><w c5=\"AT0\" hw=\"the\" pos=\"ART\">The </w><w c5=\"NN2\" hw=\"chance\" pos=\"SUBST\">chances </w><w c5=\"VBB\" hw=\"be\" pos=\"VERB\">are </w><w c5=\"AT0\" hw=\"the\" pos=\"ART\">the </w><w c5=\"DT0\" hw=\"same\" pos=\"ADJ\">same </w><w c5=\"PRP\" hw=\"for\" pos=\"PREP\">for </w><w c5=\"DT0\" hw=\"both\" pos=\"ADJ\">both </w><w c5=\"PRF\" hw=\"of\" pos=\"PREP\">of </w><w c5=\"PNP\" hw=\"they\" pos=\"PRON\">them</w><c c5=\"PUN\">.</c></s></p><p>\n<s n=\"33\"><w c5=\"CJC\" hw=\"but\" pos=\"CONJ\">But </w><w c5=\"CJS\" hw=\"if\" pos=\"CONJ\">if </w><w c5=\"PNP\" hw=\"she\" pos=\"PRON\">she </w><w c5=\"VDZ\" hw=\"do\" pos=\"VERB\">does </w><w c5=\"XX0\" hw=\"not\" pos=\"ADV\">not </w><w c5=\"VHI\" hw=\"have\" pos=\"VERB\">have </w><w c5=\"PNP\" hw=\"it\" pos=\"PRON\">it </w><w c5=\"AV0\" hw=\"then\" pos=\"ADV\">then </w><w c5=\"PNP\" hw=\"they\" pos=\"PRON\">they </w><w c5=\"VM0\" hw=\"will\" pos=\"VERB\">will </w><w c5=\"AV0\" hw=\"never\" pos=\"ADV\">never </w><w c5=\"VVI\" hw=\"get\" pos=\"VERB\">get </w><w c5=\"PNP\" hw=\"it\" pos=\"PRON\">it </w><w c5=\"CJC\" hw=\"nor\" pos=\"CONJ\">nor </w><w c5=\"VM0\" hw=\"could\" pos=\"VERB\">could </w><w c5=\"DPS\" hw=\"they\" pos=\"PRON\">their </w><w c5=\"NN2\" hw=\"child\" pos=\"SUBST\">children</w><c c5=\"PUN\">.</c></s></p><p>\n<s n=\"34\"><w c5=\"CJS\" hw=\"if\" pos=\"CONJ\">If </w><w c5=\"DPS\" hw=\"they\" pos=\"PRON\">their </w><w c5=\"NN1\" hw=\"mum\" pos=\"SUBST\">Mum </w><w c5=\"VDZ\" hw=\"do\" pos=\"VERB\">does </w><w c5=\"VVI\" hw=\"get\" pos=\"VERB\">get </w><w c5=\"NP0\" hw=\"hc\" pos=\"SUBST\">HC</w><c c5=\"PUN\">, </c><w c5=\"NP0\" hw=\"peter\" pos=\"SUBST\">Peter </w><w c5=\"CJC\" hw=\"and\" pos=\"CONJ\">and </w><w c5=\"NP0\" hw=\"paul\" pos=\"SUBST\">Paul </w><w c5=\"VHB\" hw=\"have\" pos=\"VERB\">have </w><w c5=\"AT0\" hw=\"a\" pos=\"ART\">a </w><w c5=\"AJ0\" hw=\"favourite\" pos=\"ADJ\">favourite </w><w c5=\"NN1\" hw=\"aunty\" pos=\"SUBST\">Aunty </w><w c5=\"PNQ\" hw=\"who\" pos=\"PRON\">who </w><w c5=\"VM0\" hw=\"will\" pos=\"VERB\">will </w><w c5=\"VVI\" hw=\"help\" pos=\"VERB\">help </w><w c5=\"NN1\" hw=\"daddy\" pos=\"SUBST\">Daddy </w><w c5=\"VVI\" hw=\"look\" pos=\"VERB\">look </w><w c5=\"PRP\" hw=\"after\" pos=\"PREP\">after </w><w c5=\"PNP\" hw=\"they\" pos=\"PRON\">them </w><w c5=\"CJC\" hw=\"and\" pos=\"CONJ\">and </w><w c5=\"VVB\" hw=\"love\" pos=\"VERB\">love </w><w c5=\"PNP\" hw=\"they\" pos=\"PRON\">them </w><w c5=\"AV0\" hw=\"very\" pos=\"ADV\">very </w><w c5=\"AV0\" hw=\"much\" pos=\"ADV\">much</w><c c5=\"PUN\">.</c></s></p><p>\n<s n=\"35\"><w c5=\"NP0\" hw=\"peter\" pos=\"SUBST\">Peter </w><w c5=\"CJC\" hw=\"and\" pos=\"CONJ\">and </w><w c5=\"NP0\" hw=\"paul\" pos=\"SUBST\">Paul </w><w c5=\"VM0\" hw=\"will\" pos=\"VERB\">will </w><w c5=\"VVI\" hw=\"want\" pos=\"VERB\">want </w><w c5=\"TO0\" hw=\"to\" pos=\"PREP\">to </w><w c5=\"VVI\" hw=\"remember\" pos=\"VERB\">remember </w><w c5=\"DPS\" hw=\"they\" pos=\"PRON\">their </w><w c5=\"NN1\" hw=\"mummy\" pos=\"SUBST\">Mummy </w><w c5=\"CJS\" hw=\"as\" pos=\"CONJ\">as </w><w c5=\"PNP\" hw=\"she\" pos=\"PRON\">she </w><w c5=\"VBD\" hw=\"be\" pos=\"VERB\">was </w><w c5=\"CJS\" hw=\"before\" pos=\"CONJ\">before </w><w c5=\"PNP\" hw=\"she\" pos=\"PRON\">she </w><w c5=\"VVD\" hw=\"get\" pos=\"VERB\">got </w><w c5=\"AJ0\" hw=\"ill\" pos=\"ADJ\">ill</w><c c5=\"PUN\">, </c><w c5=\"CJC\" hw=\"and\" pos=\"CONJ\">and </w><w c5=\"AVQ\" hw=\"how\" pos=\"ADV\">how </w><w c5=\"DT0\" hw=\"much\" pos=\"ADJ\">much </w><w c5=\"PNP\" hw=\"she\" pos=\"PRON\">she </w><w c5=\"VVD\" hw=\"love\" pos=\"VERB\">loved </w><w c5=\"CJC\" hw=\"and\" pos=\"CONJ\">and </w><w c5=\"VVD\" hw=\"care\" pos=\"VERB\">cared </w><w c5=\"PRP\" hw=\"about\" pos=\"PREP\">about </w><w c5=\"PNP\" hw=\"they\" pos=\"PRON\">them </w><w c5=\"CJS\" hw=\"when\" pos=\"CONJ\">when </w><w c5=\"PNP\" hw=\"they\" pos=\"PRON\">they </w><w c5=\"VBD\" hw=\"be\" pos=\"VERB\">were </w><w c5=\"AJC\" hw=\"young\" pos=\"ADJ\">younger</w><c c5=\"PUN\">, </c><mw c5=\"CJS\"><w c5=\"AV0\" hw=\"even\" pos=\"ADV\">even </w><w c5=\"CJS\" hw=\"if\" pos=\"CONJ\">if </w></mw><w c5=\"AT0\" hw=\"the\" pos=\"ART\">the </w><w c5=\"NN1\" hw=\"illness\" pos=\"SUBST\">illness </w><w c5=\"VVZ\" hw=\"make\" pos=\"VERB\">makes </w><w c5=\"AV0\" hw=\"here\" pos=\"ADV\">here </w><w c5=\"AJ0\" hw=\"different\" pos=\"ADJ\">different</w><c c5=\"PUN\">.</c></s></p><p>\n<s n=\"36\"><w c5=\"NP0\" hw=\"peter\" pos=\"SUBST\">Peter </w><w c5=\"CJC\" hw=\"and\" pos=\"CONJ\">and </w><w c5=\"NP0\" hw=\"paul\" pos=\"SUBST\">Paul </w><w c5=\"VDB\" hw=\"do\" pos=\"VERB\">do </w><w c5=\"XX0\" hw=\"not\" pos=\"ADV\">not </w><w c5=\"VVI\" hw=\"want\" pos=\"VERB\">want </w><w c5=\"NN1\" hw=\"mummy\" pos=\"SUBST\">Mummy </w><w c5=\"TO0\" hw=\"to\" pos=\"PREP\">to </w><w c5=\"VBI\" hw=\"be\" pos=\"VERB\">be </w><w c5=\"AJ0\" hw=\"ill\" pos=\"ADJ\">ill </w><w c5=\"CJC\" hw=\"or\" pos=\"CONJ\">or </w><w c5=\"TO0\" hw=\"to\" pos=\"PREP\">to </w><w c5=\"VHI\" hw=\"have\" pos=\"VERB\">have </w><w c5=\"NP0\" hw=\"hc\" pos=\"SUBST\">HC </w><w c5=\"PNX\" hw=\"themselves\" pos=\"PRON\">themselves</w><c c5=\"PUN\">, </c><w c5=\"CJC\" hw=\"but\" pos=\"CONJ\">but </w><w c5=\"PRP\" hw=\"at\" pos=\"PREP\">at </w><w c5=\"AT0\" hw=\"the\" pos=\"ART\">the </w><w c5=\"NN1\" hw=\"moment\" pos=\"SUBST\">moment </w><w c5=\"EX0\" hw=\"there\" pos=\"PRON\">there </w><w c5=\"VBZ\" hw=\"be\" pos=\"VERB\">is </w><w c5=\"AT0\" hw=\"no\" pos=\"ART\">no </w><w c5=\"AJ0\" hw=\"sure\" pos=\"ADJ\">sure </w><w c5=\"NN1\" hw=\"way\" pos=\"SUBST\">way </w><w c5=\"TO0\" hw=\"to\" pos=\"PREP\">to </w><w c5=\"VVI\" hw=\"know\" pos=\"VERB\">know </w><w c5=\"PRP\" hw=\"for\" pos=\"PREP\">for </w><w c5=\"PNI\" hw=\"everyone\" pos=\"PRON\">everyone</w><c c5=\"PUN\">.</c></s></p><p>\n<s n=\"37\"><w c5=\"NN2\" hw=\"doctor\" pos=\"SUBST\">Doctors </w><w c5=\"AV0\" hw=\"all\" pos=\"ADV\">all </w><w c5=\"PRP\" hw=\"over\" pos=\"PREP\">over </w><w c5=\"AT0\" hw=\"the\" pos=\"ART\">the </w><w c5=\"NN1\" hw=\"world\" pos=\"SUBST\">world </w><w c5=\"VHB\" hw=\"have\" pos=\"VERB\">have </w><w c5=\"VBN\" hw=\"be\" pos=\"VERB\">been </w><w c5=\"VVG\" hw=\"work\" pos=\"VERB\">working </w><w c5=\"TO0\" hw=\"to\" pos=\"PREP\">to </w><w c5=\"VVI\" hw=\"find\" pos=\"VERB\">find </w><w c5=\"AT0\" hw=\"a\" pos=\"ART\">a </w><w c5=\"NN1\" hw=\"way\" pos=\"SUBST\">way </w><w c5=\"TO0\" hw=\"to\" pos=\"PREP\">to </w><w c5=\"VVI\" hw=\"test\" pos=\"VERB\">test </w><w c5=\"CJS\" hw=\"whether\" pos=\"CONJ\">whether </w><w c5=\"NN0\" hw=\"people\" pos=\"SUBST\">people </w><w c5=\"PRP\" hw=\"like\" pos=\"PREP\">like </w><w c5=\"NP0\" hw=\"peter\" pos=\"SUBST\">Peter </w><w c5=\"CJC\" hw=\"and\" pos=\"CONJ\">and </w><w c5=\"NP0\" hw=\"paul\" pos=\"SUBST\">Paul</w><w c5=\"POS\" hw=\"'s\" pos=\"UNC\">'s </w><w c5=\"NN1\" hw=\"mum\" pos=\"SUBST\">Mum </w><w c5=\"VM0\" hw=\"will\" pos=\"VERB\">will </w><w c5=\"VHI\" hw=\"have\" pos=\"VERB\">have </w><w c5=\"NP0\" hw=\"hc\" pos=\"SUBST\">HC </w><w c5=\"CJC\" hw=\"or\" pos=\"CONJ\">or </w><w c5=\"XX0\" hw=\"not\" pos=\"ADV\">not</w><c c5=\"PUN\">.</c></s>\n<s n=\"38\"><w c5=\"DT0\" hw=\"this\" pos=\"ADJ\">This </w><w c5=\"NN1\" hw=\"test\" pos=\"SUBST\">test </w><w c5=\"VBZ\" hw=\"be\" pos=\"VERB\">is </w><w c5=\"AVP-PRP\" hw=\"around\" pos=\"ADV\">around </w><w c5=\"AV0\" hw=\"now\" pos=\"ADV\">now </w><w c5=\"PRP\" hw=\"for\" pos=\"PREP\">for </w><w c5=\"DT0\" hw=\"some\" pos=\"ADJ\">some </w><w c5=\"NN0\" hw=\"people\" pos=\"SUBST\">people</w><c c5=\"PUN\">.</c></s></p><p>\n<s n=\"39\"><w c5=\"NN2\" hw=\"doctor\" pos=\"SUBST\">Doctors </w><w c5=\"VBB\" hw=\"be\" pos=\"VERB\">are </w><w c5=\"AV0\" hw=\"also\" pos=\"ADV\">also </w><w c5=\"VVG\" hw=\"try\" pos=\"VERB\">trying </w><w c5=\"TO0\" hw=\"to\" pos=\"PREP\">to </w><w c5=\"VVI\" hw=\"find\" pos=\"VERB\">find </w><w c5=\"NN2\" hw=\"way\" pos=\"SUBST\">ways </w><w c5=\"TO0\" hw=\"to\" pos=\"PREP\">to </w><w c5=\"VVI\" hw=\"make\" pos=\"VERB\">make </w><w c5=\"NN0\" hw=\"people\" pos=\"SUBST\">people </w><w c5=\"PRP\" hw=\"with\" pos=\"PREP\">with </w><w c5=\"NP0\" hw=\"hc\" pos=\"SUBST\">HC </w><w c5=\"AV0\" hw=\"well\" pos=\"ADV\">better </w><w c5=\"CJC\" hw=\"and\" pos=\"CONJ\">and </w><w c5=\"PNI\" hw=\"everyone\" pos=\"PRON\">everyone </w><w c5=\"VVZ\" hw=\"hope\" pos=\"VERB\">hopes </w><w c5=\"PNP\" hw=\"they\" pos=\"PRON\">they </w><w c5=\"VM0\" hw=\"will\" pos=\"VERB\">will</w><c c5=\"PUN\">.</c></s></p><p>\n<s n=\"40\"><w c5=\"PRP\" hw=\"in\" pos=\"PREP\">In </w><w c5=\"AT0\" hw=\"the\" pos=\"ART\">the </w><w c5=\"NN1\" hw=\"meantime\" pos=\"SUBST\">meantime</w><c c5=\"PUN\">, </c><w c5=\"NN2\" hw=\"family\" pos=\"SUBST\">families </w><w c5=\"PRP\" hw=\"like\" pos=\"PREP\">like </w><w c5=\"NP0\" hw=\"peter\" pos=\"SUBST\">Peter </w><w c5=\"CJC\" hw=\"and\" pos=\"CONJ\">and </w><w c5=\"NP0\" hw=\"paul\" pos=\"SUBST\">Paul</w><w c5=\"POS\" hw=\"'s\" pos=\"UNC\">'s </w><w c5=\"VHB\" hw=\"have\" pos=\"VERB\">have </w><w c5=\"TO0\" hw=\"to\" pos=\"PREP\">to </w><w c5=\"VVI\" hw=\"think\" pos=\"VERB\">think </w><w c5=\"AV0\" hw=\"carefully\" pos=\"ADV\">carefully </w><w c5=\"PRP\" hw=\"about\" pos=\"PREP\">about </w><w c5=\"CJS\" hw=\"whether\" pos=\"CONJ\">whether </w><w c5=\"TO0\" hw=\"to\" pos=\"PREP\">to </w><w c5=\"VHI\" hw=\"have\" pos=\"VERB\">have </w><w c5=\"NN2\" hw=\"child\" pos=\"SUBST\">children </w><w c5=\"PNX\" hw=\"themselves\" pos=\"PRON\">themselves</w><c c5=\"PUN\">, </c><w c5=\"CJC\" hw=\"or\" pos=\"CONJ\">or </w><w c5=\"XX0\" hw=\"not\" pos=\"ADV\">not</w><c c5=\"PUN\">.</c></s></p><p>\n<s n=\"41\"><w c5=\"NP0\" hw=\"peter\" pos=\"SUBST\">Peter </w><w c5=\"CJC\" hw=\"and\" pos=\"CONJ\">and </w><w c5=\"NP0\" hw=\"paul\" pos=\"SUBST\">Paul </w><w c5=\"VVB-NN1\" hw=\"hope\" pos=\"VERB\">hope </w><w c5=\"CJT\" hw=\"that\" pos=\"CONJ\">that </w><w c5=\"PRP\" hw=\"by\" pos=\"PREP\">by </w><w c5=\"AT0\" hw=\"the\" pos=\"ART\">the </w><w c5=\"NN1\" hw=\"time\" pos=\"SUBST\">time </w><w c5=\"PNP\" hw=\"they\" pos=\"PRON\">they </w><w c5=\"VBB\" hw=\"be\" pos=\"VERB\">are </w><w c5=\"VVN\" hw=\"grow\" pos=\"VERB\">grown </w><w c5=\"AVP\" hw=\"up\" pos=\"ADV\">up</w><c c5=\"PUN\">, </c><w c5=\"AT0\" hw=\"the\" pos=\"ART\">the </w><w c5=\"NN2\" hw=\"doctor\" pos=\"SUBST\">doctors </w><w c5=\"VM0\" hw=\"will\" pos=\"VERB\">will </w><w c5=\"VVI\" hw=\"know\" pos=\"VERB\">know </w><w c5=\"AV0\" hw=\"more\" pos=\"ADV\">more </w><w c5=\"PRP\" hw=\"about\" pos=\"PREP\">about </w><w c5=\"NP0\" hw=\"hc\" pos=\"SUBST\">HC </w><w c5=\"CJC\" hw=\"and\" pos=\"CONJ\">and </w><w c5=\"AVQ\" hw=\"how\" pos=\"ADV\">how </w><w c5=\"TO0\" hw=\"to\" pos=\"PREP\">to </w><w c5=\"VVI\" hw=\"stop\" pos=\"VERB\">stop </w><w c5=\"PNP\" hw=\"it\" pos=\"PRON\">it</w><c c5=\"PUN\">.</c></s></p><p>\n<s n=\"42\"><w c5=\"PNP\" hw=\"they\" pos=\"PRON\">They </w><w c5=\"VVB\" hw=\"know\" pos=\"VERB\">know </w><w c5=\"CJT\" hw=\"that\" pos=\"CONJ\">that </w><w c5=\"AJ0\" hw=\"other\" pos=\"ADJ\">other </w><w c5=\"AJ0\" hw=\"unhappy\" pos=\"ADJ\">unhappy </w><w c5=\"NN2\" hw=\"thing\" pos=\"SUBST\">things </w><w c5=\"VM0\" hw=\"can\" pos=\"VERB\">can </w><w c5=\"VVI\" hw=\"happen\" pos=\"VERB\">happen </w><w c5=\"PRP\" hw=\"to\" pos=\"PREP\">to </w><w c5=\"NN0\" hw=\"people\" pos=\"SUBST\">people </w><w c5=\"PRP\" hw=\"like\" pos=\"PREP\">like </w><w c5=\"NN1\" hw=\"road\" pos=\"SUBST\">road </w><w c5=\"NN2\" hw=\"accident\" pos=\"SUBST\">accidents </w><w c5=\"CJC\" hw=\"or\" pos=\"CONJ\">or </w><w c5=\"AJ0\" hw=\"other\" pos=\"ADJ\">other </w><w c5=\"NN2\" hw=\"illness\" pos=\"SUBST\">illnesses</w><c c5=\"PUN\">.</c></s></p><p>\n<s n=\"43\"><w c5=\"PNP\" hw=\"it\" pos=\"PRON\">It</w><w c5=\"VBZ\" hw=\"be\" pos=\"VERB\">'s </w><w c5=\"XX0\" hw=\"not\" pos=\"ADV\">not </w><w c5=\"AV0\" hw=\"just\" pos=\"ADV\">just </w><w c5=\"DPS\" hw=\"they\" pos=\"PRON\">their </w><w c5=\"NN1\" hw=\"family\" pos=\"SUBST\">family </w><w c5=\"DTQ\" hw=\"which\" pos=\"PRON\">which </w><w c5=\"VHZ\" hw=\"have\" pos=\"VERB\">has </w><w c5=\"VVN\" hw=\"worry\" pos=\"VERB\">worried</w><c c5=\"PUN\">.</c></s>\n<s n=\"44\"><w c5=\"PNP\" hw=\"they\" pos=\"PRON\">They </w><w c5=\"VM0\" hw=\"will\" pos=\"VERB\">will </w><w c5=\"VVI\" hw=\"enjoy\" pos=\"VERB\">enjoy </w><w c5=\"PNX\" hw=\"themselves\" pos=\"PRON\">themselves </w><w c5=\"CJC\" hw=\"and\" pos=\"CONJ\">and </w><w c5=\"VVB\" hw=\"make\" pos=\"VERB\">make </w><w c5=\"AT0\" hw=\"the\" pos=\"ART\">the </w><w c5=\"DT0\" hw=\"most\" pos=\"ADJ\">most </w><w c5=\"PRF\" hw=\"of\" pos=\"PREP\">of </w><w c5=\"DPS\" hw=\"they\" pos=\"PRON\">their </w><w c5=\"NN2\" hw=\"life\" pos=\"SUBST\">lives </w><w c5=\"PRP\" hw=\"like\" pos=\"PREP\">like </w><w c5=\"PNI\" hw=\"everyone\" pos=\"PRON\">everyone </w><w c5=\"AV0\" hw=\"else\" pos=\"ADV\">else</w><c c5=\"PUN\">.</c></s></p><p>\n<s n=\"45\"><w c5=\"AT0\" hw=\"the\" pos=\"ART\">The </w><w c5=\"NN1\" hw=\"family\" pos=\"SUBST\">family </w><w c5=\"VVZ\" hw=\"hope\" pos=\"VERB\">hopes </w><w c5=\"NN1\" hw=\"mum\" pos=\"SUBST\">Mum </w><w c5=\"AV0\" hw=\"never\" pos=\"ADV\">never </w><w c5=\"VVZ\" hw=\"get\" pos=\"VERB\">gets </w><w c5=\"NP0\" hw=\"hc\" pos=\"SUBST\">HC</w><c c5=\"PUN\">.</c></s>\n<s n=\"46\"><w c5=\"CJS\" hw=\"if\" pos=\"CONJ\">If </w><w c5=\"PNP\" hw=\"she\" pos=\"PRON\">she </w><w c5=\"VDZ\" hw=\"do\" pos=\"VERB\">does </w><w c5=\"PNP\" hw=\"she\" pos=\"PRON\">she </w><w c5=\"VM0\" hw=\"will\" pos=\"VERB\">will </w><w c5=\"VVI\" hw=\"need\" pos=\"VERB\">need </w><w c5=\"PNP\" hw=\"they\" pos=\"PRON\">them </w><w c5=\"TO0\" hw=\"to\" pos=\"PREP\">to </w><w c5=\"VVI\" hw=\"love\" pos=\"VERB\">love </w><w c5=\"PNP\" hw=\"she\" pos=\"PRON\">her </w><w c5=\"CJC\" hw=\"and\" pos=\"CONJ\">and </w><w c5=\"TO0\" hw=\"to\" pos=\"PREP\">to </w><w c5=\"VVI\" hw=\"understand\" pos=\"VERB\">understand</w><c c5=\"PUN\">.</c></s></p><p>\n<s n=\"47\"><w c5=\"PNP\" hw=\"they\" pos=\"PRON\">They </w><w c5=\"AV0\" hw=\"also\" pos=\"ADV\">also </w><w c5=\"VVB\" hw=\"know\" pos=\"VERB\">know </w><w c5=\"AJ0\" hw=\"other\" pos=\"ADJ\">other </w><w c5=\"NN2\" hw=\"family\" pos=\"SUBST\">families </w><w c5=\"PRP\" hw=\"with\" pos=\"PREP\">with </w><w c5=\"NP0\" hw=\"hc\" pos=\"SUBST\">HC</w><c c5=\"PUN\">, </c><w c5=\"CJC\" hw=\"and\" pos=\"CONJ\">and </w><w c5=\"PRP\" hw=\"about\" pos=\"PREP\">about </w><w c5=\"NN1\" hw=\"combat\" pos=\"SUBST\">COMBAT </w><w c5=\"CJS\" hw=\"so\" pos=\"CONJ\">so </w><w c5=\"PNP\" hw=\"they\" pos=\"PRON\">they </w><w c5=\"VM0\" hw=\"will\" pos=\"VERB\">wo</w><w c5=\"XX0\" hw=\"not\" pos=\"ADV\">n't </w><w c5=\"VVI\" hw=\"feel\" pos=\"VERB\">feel </w><w c5=\"AJ0\" hw=\"alone\" pos=\"ADJ\">alone</w><c c5=\"PUN\">.</c></s></p></wtext></bncDoc>\n"
  },
  {
    "path": "colab/appendix/argsprint.py",
    "content": "import sys\nprint(sys.argv)\n"
  },
  {
    "path": "colab/appendix/sample.py",
    "content": "a1 = 10\nprint('a1 contains the value of', a1)\n"
  },
  {
    "path": "colab/appendix/sin.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"utf-8\">\n    <title>Bokeh Plot</title>\n    <style>\n      html, body {\n        box-sizing: border-box;\n        display: flow-root;\n        height: 100%;\n        margin: 0;\n        padding: 0;\n      }\n    </style>\n    <script type=\"text/javascript\" src=\"https://cdn.bokeh.org/bokeh/release/bokeh-3.5.1.min.js\"></script>\n    <script type=\"text/javascript\">\n        Bokeh.set_log_level(\"info\");\n    </script>\n  </head>\n  <body>\n    <div id=\"d44e2307-ac51-4e41-a3bc-de8bf2855dd5\" data-root-id=\"p1857\" style=\"display: contents;\"></div>\n  \n    <script type=\"application/json\" id=\"e4580752-0506-47e7-af19-be2f4d438fc6\">\n      {\"e846f39c-c8b9-4458-8c71-d33fc9846b0d\":{\"version\":\"3.5.1\",\"title\":\"Bokeh Application\",\"roots\":[{\"type\":\"object\",\"name\":\"Figure\",\"id\":\"p1857\",\"attributes\":{\"x_range\":{\"type\":\"object\",\"name\":\"DataRange1d\",\"id\":\"p1858\"},\"y_range\":{\"type\":\"object\",\"name\":\"DataRange1d\",\"id\":\"p1859\"},\"x_scale\":{\"type\":\"object\",\"name\":\"LinearScale\",\"id\":\"p1867\"},\"y_scale\":{\"type\":\"object\",\"name\":\"LinearScale\",\"id\":\"p1868\"},\"title\":{\"type\":\"object\",\"name\":\"Title\",\"id\":\"p1860\",\"attributes\":{\"text\":\"sin Curves\"}},\"renderers\":[{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p1898\",\"attributes\":{\"data_source\":{\"type\":\"object\",\"name\":\"ColumnDataSource\",\"id\":\"p1892\",\"attributes\":{\"selected\":{\"type\":\"object\",\"name\":\"Selection\",\"id\":\"p1893\",\"attributes\":{\"indices\":[],\"line_indices\":[]}},\"selection_policy\":{\"type\":\"object\",\"name\":\"UnionRenderers\",\"id\":\"p1894\"},\"data\":{\"type\":\"map\",\"entries\":[[\"x\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"GC1EVPshGcCyxt3tlLsYwExgd4cuVRjA5vkQIcjuF8CAk6q6YYgXwBotRFT7IRfAtMbd7ZS7FsBOYHeHLlUWwOj5ECHI7hXAgpOqumGIFcAcLURU+yEVwLbG3e2UuxTAUGB3hy5VFMDq+RAhyO4TwISTqrphiBPAHi1EVPshE8C4xt3tlLsSwFJgd4cuVRLA7PkQIcjuEcCGk6q6YYgRwCAtRFT7IRHAusbd7ZS7EMBUYHeHLlUQwNzzIUKQ3Q/AECdVdcMQD8BEWoio9kMOwHiNu9spdw3ArMDuDl2qDMDg8yFCkN0LwBQnVXXDEAvASFqIqPZDCsB8jbvbKXcJwLDA7g5dqgjA5PMhQpDdB8AYJ1V1wxAHwExaiKj2QwbAgI272yl3BcC0wO4OXaoEwOjzIUKQ3QPAHCdVdcMQA8BQWoio9kMCwISNu9spdwHAuMDuDl2qAMDY50OEILv/v0BOquqGIf6/qLQQUe2H/L8QG3e3U+76v3iB3R26VPm/4OdDhCC7979ITqrqhiH2v7C0EFHth/S/GBt3t1Pu8r+Agd0dulTxv9DPhwhBdu+/oJxU1Q1D7L9waSGi2g/pv0A27m6n3OW/EAO7O3Sp4r/Anw8Rguzev2A5qaobhti/ANNCRLUf0r9A2bi7nXLHvwAZ2N2hS7W/AAIG7943kT8AGltVkee9P8BZeneVwMs/QJMjIrFG1D+g+YmIF63aPwAwePe+ieA/MGOrKvK84z9glt5dJfDmP5DJEZFYI+o/wPxExItW7T/4F7x730TwP5CxVRV53vE/KEvvrhJ48z/A5IhIrBH1P1h+IuJFq/Y/8Be8e99E+D+IsVUVed75PyBL764SePs/uOSISKwR/T9QfiLiRav+P/QL3r1vIgBAwNiqijzvAECMpXdXCbwBQFhyRCTWiAJAJD8R8aJVA0DwC969byIEQLzYqoo87wRAiKV3Vwm8BUBUckQk1ogGQCA/EfGiVQdA7AvevW8iCEC42KqKPO8IQISld1cJvAlAUHJEJNaICkAcPxHxolULQOgL3r1vIgxAtNiqijzvDECApXdXCbwNQExyRCTWiA5AGD8R8aJVD0DyBe/eNxEQQFhsVUWedxBAvtK7qwTeEEAkOSISa0QRQIqfiHjRqhFA8AXv3jcREkBWbFVFnncSQLzSu6sE3hJAIjkiEmtEE0CIn4h40aoTQO4F7943ERRAVGxVRZ53FEC60rurBN4UQCA5IhJrRBVAhp+IeNGqFUDsBe/eNxEWQFJsVUWedxZAuNK7qwTeFkAeOSISa0QXQISfiHjRqhdA6gXv3jcRGEBQbFVFnncYQLbSu6sE3hhA\"},\"shape\":[126],\"dtype\":\"float64\",\"order\":\"little\"}],[\"y\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"B1wUMyamsTwky4vLro65P6zSPSP/bck/Jbq6lc3p0j9XZyvpOuzYP9cFS3Tort4/S0GlF40R4j+pGUZpbp3kP73+v8KU9OY/MahdmAMR6T/eDAmPVO3qPyhjLUzFhOw/t1UaokPT7T9AHsX5d9XuP/vgRN/NiO8/iG0sm3rr7z/HQuDHgfzvP72YL9e3u+8//RW9gcIp7z9qOBofF0juP2C00er2GO0/HHPrP2mf6z8x16rZM9/pP1IvWC3R3Oc/0tHD9WSd5T/vys8NrybjPwGGoLv8fuA/p6ckJDFa2z9p5l0jcnDVP0AySNa4n84/z9a2bTgQwj9JFpiCD0qlP9km6Dk3462/9Aq3ygIxxL+fS/8QyVrQv1Fhun47c9a/JdHwQ0FS3L/dGi7savTgv0DA7P9WlOO/crMfLS4C5r9cHtzduTfov3DI4npTL+q/lhLQ3/Lj67/wiQE6O1Htv8QoRTGGc+6/Y0DHPe1H77+p7F0TUczvv1HsNw9f/++/DT4MmpTg77/B6yJ2QHDvv2CZ4PWBr+6/9yLYHEag7b8lJbqyQkXsv5cSvFTvoeq/3gUyl3y66L/SsApOyZPmv0H2lhdWM+S/OMh6STef4b8a4Y7HCrzdv3u+C2SY7de/LaSwivHh0b9m/jPXGVHHv0bTvttYRbW/xSXLwqk3kT/JIzUvK9a9PxjIxkANics//AfpL0vw0z91hzWkD+nZP4cP6pqNn98/CxrYG5SC4j9hCW3CCAblP+5iZOG2U+c/g8jjJbpl6T/Mcx3cxjbrP44pBXs3wuw/3a38hhgE7j/R9xCtMvnuPzNU7vwSn+8/IbeALBH07z+1XzrVU/fvP6DPKKDSqO8/pbRJW1YJ7z+JM+n3dhruP8RhK3eX3uw/Jvgtz99Y6z+f2l/YNI3pP+WxtFcugOc/zaIuPws35T/F08pCpLfiP3g4I+RcCOA/mTEMNiZg2j8025+JG2zUPwOg1R2oh8w/rDXOvj7cvz+YZ0Soul6ZPxMepJQaPbO/RLIVCFdQxr8Pn7GuhmTRv7Nrs+BkdNe/PLQgoURI3b9ITvP1nmjhv9zlVSmUAOS/XGXQmV9l5r9YNdHU4ZDov+OMb++Nfeq/d0LwuHcm7L9QJSxSYIftv8TXognBnO6/SRtzYNRj779HhCYhndrvv+yTLnbr/++/NaAP81/T77/KpXWIbFXvv+6vwmBTh+6/2k8AqCNr7b+D929HtAPsv7RWM6KcVOq/8K2gZSti6L8bWsKEWzHmvw8RMHvHx+O/52bX95or4b9I9bkoBsfcv2FS64I67da/RcPLJ8rY0L9F3NCChDLFvyPcIcx4+rC/\"},\"shape\":[126],\"dtype\":\"float64\",\"order\":\"little\"}]]}}},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p1899\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p1900\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1895\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":\"#1f77b4\"}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1896\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":\"#1f77b4\",\"line_alpha\":0.1}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1897\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":\"#1f77b4\",\"line_alpha\":0.2}}}}],\"toolbar\":{\"type\":\"object\",\"name\":\"Toolbar\",\"id\":\"p1866\",\"attributes\":{\"tools\":[{\"type\":\"object\",\"name\":\"PanTool\",\"id\":\"p1879\"},{\"type\":\"object\",\"name\":\"WheelZoomTool\",\"id\":\"p1880\",\"attributes\":{\"renderers\":\"auto\"}},{\"type\":\"object\",\"name\":\"BoxZoomTool\",\"id\":\"p1881\",\"attributes\":{\"overlay\":{\"type\":\"object\",\"name\":\"BoxAnnotation\",\"id\":\"p1882\",\"attributes\":{\"syncable\":false,\"line_color\":\"black\",\"line_alpha\":1.0,\"line_width\":2,\"line_dash\":[4,4],\"fill_color\":\"lightgrey\",\"fill_alpha\":0.5,\"level\":\"overlay\",\"visible\":false,\"left\":{\"type\":\"number\",\"value\":\"nan\"},\"right\":{\"type\":\"number\",\"value\":\"nan\"},\"top\":{\"type\":\"number\",\"value\":\"nan\"},\"bottom\":{\"type\":\"number\",\"value\":\"nan\"},\"left_units\":\"canvas\",\"right_units\":\"canvas\",\"top_units\":\"canvas\",\"bottom_units\":\"canvas\",\"handles\":{\"type\":\"object\",\"name\":\"BoxInteractionHandles\",\"id\":\"p1888\",\"attributes\":{\"all\":{\"type\":\"object\",\"name\":\"AreaVisuals\",\"id\":\"p1887\",\"attributes\":{\"fill_color\":\"white\",\"hover_fill_color\":\"lightgray\"}}}}}}}},{\"type\":\"object\",\"name\":\"SaveTool\",\"id\":\"p1889\"},{\"type\":\"object\",\"name\":\"ResetTool\",\"id\":\"p1890\"},{\"type\":\"object\",\"name\":\"HelpTool\",\"id\":\"p1891\"}]}},\"left\":[{\"type\":\"object\",\"name\":\"LinearAxis\",\"id\":\"p1874\",\"attributes\":{\"ticker\":{\"type\":\"object\",\"name\":\"BasicTicker\",\"id\":\"p1875\",\"attributes\":{\"mantissas\":[1,2,5]}},\"formatter\":{\"type\":\"object\",\"name\":\"BasicTickFormatter\",\"id\":\"p1876\"},\"axis_label\":\"y\",\"major_label_policy\":{\"type\":\"object\",\"name\":\"AllLabels\",\"id\":\"p1877\"}}}],\"below\":[{\"type\":\"object\",\"name\":\"LinearAxis\",\"id\":\"p1869\",\"attributes\":{\"ticker\":{\"type\":\"object\",\"name\":\"BasicTicker\",\"id\":\"p1870\",\"attributes\":{\"mantissas\":[1,2,5]}},\"formatter\":{\"type\":\"object\",\"name\":\"BasicTickFormatter\",\"id\":\"p1871\"},\"axis_label\":\"x\",\"major_label_policy\":{\"type\":\"object\",\"name\":\"AllLabels\",\"id\":\"p1872\"}}}],\"center\":[{\"type\":\"object\",\"name\":\"Grid\",\"id\":\"p1873\",\"attributes\":{\"axis\":{\"id\":\"p1869\"}}},{\"type\":\"object\",\"name\":\"Grid\",\"id\":\"p1878\",\"attributes\":{\"dimension\":1,\"axis\":{\"id\":\"p1874\"}}}]}}]}}\n    </script>\n    <script type=\"text/javascript\">\n      (function() {\n        const fn = function() {\n          Bokeh.safely(function() {\n            (function(root) {\n              function embed_document(root) {\n              const docs_json = document.getElementById('e4580752-0506-47e7-af19-be2f4d438fc6').textContent;\n              const render_items = [{\"docid\":\"e846f39c-c8b9-4458-8c71-d33fc9846b0d\",\"roots\":{\"p1857\":\"d44e2307-ac51-4e41-a3bc-de8bf2855dd5\"},\"root_ids\":[\"p1857\"]}];\n              root.Bokeh.embed.embed_items(docs_json, render_items);\n              }\n              if (root.Bokeh !== undefined) {\n                embed_document(root);\n              } else {\n                let attempts = 0;\n                const timer = setInterval(function(root) {\n                  if (root.Bokeh !== undefined) {\n                    clearInterval(timer);\n                    embed_document(root);\n                  } else {\n                    attempts++;\n                    if (attempts > 100) {\n                      clearInterval(timer);\n                      console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\");\n                    }\n                  }\n                }, 10, root)\n              }\n            })(window);\n          });\n        };\n        if (document.readyState != \"loading\") fn();\n        else document.addEventListener(\"DOMContentLoaded\", fn);\n      })();\n    </script>\n  </body>\n</html>"
  },
  {
    "path": "colab/appendix/small.csv",
    "content": "11,12,13,14,15\n21,22,23,24,25\n31,32,33,34,35\n"
  },
  {
    "path": "colab/appendix/text-sample.txt",
    "content": "We, the Japanese People, acting through our duly elected representatives in the National Diet, determined that we shall secure for ourselves and our posterity the fruits of peaceful cooperation with all nations and the blessings of liberty throughout this land, and resolved that never again shall we be visited with the horrors of war through the action of government, do proclaim the sovereignty of the people's will and do ordain and establish this Constitution, founded upon the universal principle that government is a sacred trust the authority for which is derived from the people, the powers of which are exercised by the representatives of the people, and the benefits of which are enjoyed by the people; and we reject and revoke all constitutions, ordinances, laws and rescripts in conflict herewith.\nDesiring peace for all time and fully conscious of the high ideals controlling human relationship now stirring mankind, we have determined to rely for our security and survival upon the justice and good faith of the peace-loving peoples of the world.\nWe desire to occupy an honored place in an international society designed and dedicated to the preservation of peace, and the banishment of tyranny and slavery, oppression and intolerance, for all time from the earth.\nWe recognize and acknowledge that all peoples have the right to live in peace, free from fear and want.\nWe hold that no people is responsible to itself alone, but that laws of political morality are universal; and that obedience to such laws is incumbent upon all peoples who would sustain their own sovereignty and justify their sovereign relationship with other peoples.\nTo these high principles and purposes we, the Japanese People, pledge our national honor, determined will and full resources.\n"
  },
  {
    "path": "colab/appendix/tokyo-july-temps.csv",
    "content": "1875,26.0\r\n1876,24.3\r\n1877,26.5\r\n1878,26.0\r\n1879,26.1\r\n1880,24.2\r\n1881,24.0\r\n1882,24.2\r\n1883,23.7\r\n1884,23.4\r\n1885,23.1\r\n1886,25.0\r\n1887,23.6\r\n1888,24.5\r\n1889,23.4\r\n1890,23.5\r\n1891,24.9\r\n1892,25.7\r\n1893,25.3\r\n1894,26.8\r\n1895,22.1\r\n1896,24.1\r\n1897,22.9\r\n1898,25.9\r\n1899,23.2\r\n1900,22.8\r\n1901,22.1\r\n1902,21.8\r\n1903,23.2\r\n1904,24.8\r\n1905,23.3\r\n1906,23.5\r\n1907,22.7\r\n1908,22.1\r\n1909,24.3\r\n1910,23.0\r\n1911,24.5\r\n1912,24.3\r\n1913,23.3\r\n1914,25.5\r\n1915,24.2\r\n1916,23.9\r\n1917,25.7\r\n1918,26.0\r\n1919,23.6\r\n1920,26.1\r\n1921,24.3\r\n1922,25.0\r\n1923,24.0\r\n1924,26.1\r\n1925,23.2\r\n1926,24.6\r\n1927,26.0\r\n1928,23.4\r\n1929,25.9\r\n1930,26.3\r\n1931,21.8\r\n1932,25.7\r\n1933,26.6\r\n1934,23.9\r\n1935,24.3\r\n1936,24.9\r\n1937,26.3\r\n1938,25.0\r\n1939,26.5\r\n1940,26.9\r\n1941,23.7\r\n1942,27.5\r\n1943,25.1\r\n1944,25.6\r\n1945,22.0\r\n1946,26.2\r\n1947,25.7\r\n1948,26.0\r\n1949,25.3\r\n1950,26.5\r\n1951,24.3\r\n1952,24.3\r\n1953,24.7\r\n1954,22.3\r\n1955,27.6\r\n1956,24.2\r\n1957,24.4\r\n1958,24.9\r\n1959,26.1\r\n1960,25.8\r\n1961,27.4\r\n1962,25.1\r\n1963,25.7\r\n1964,25.5\r\n1965,24.2\r\n1966,24.4\r\n1967,26.3\r\n1968,24.7\r\n1969,25.0\r\n1970,25.4\r\n1971,25.8\r\n1972,25.2\r\n1973,26.1\r\n1974,23.4\r\n1975,25.6\r\n1976,23.9\r\n1977,25.8\r\n1978,27.8\r\n1979,25.2\r\n1980,23.8\r\n1981,26.3\r\n1982,23.1\r\n1983,23.8\r\n1984,26.2\r\n1985,26.3\r\n1986,23.9\r\n1987,27.0\r\n1988,22.4\r\n1989,24.1\r\n1990,25.7\r\n1991,26.7\r\n1992,25.5\r\n1993,22.5\r\n1994,28.3\r\n1995,26.4\r\n1996,26.2\r\n1997,26.6\r\n1998,25.3\r\n1999,25.9\r\n2000,27.7\r\n2001,28.5\r\n2002,28.0\r\n2003,22.8\r\n2004,28.5\r\n2005,25.6\r\n2006,25.6\r\n2007,24.4\r\n2008,27.0\r\n2009,26.3\r\n2010,28.0\r\n2011,27.3\r\n2012,26.4\r\n2013,27.3\r\n2014,26.8\r\n2015,26.2\r\n2016,25.4\r\n"
  },
  {
    "path": "colab/appendix/tokyo-temps.csv",
    "content": "_E[hF2017/08/30 17:06:00\n\n,,,\nN,ϋC(),ϋC(),ϋC()\n,,i,ώԍ\n1872/1,,0,1\n1872/2,,0,1\n1872/3,,0,1\n1872/4,,0,1\n1872/5,,0,1\n1872/6,,0,1\n1872/7,,0,1\n1872/8,,0,1\n1872/9,,0,1\n1872/10,,0,1\n1872/11,,0,1\n1872/12,,0,1\n1873/1,,0,1\n1873/2,,0,1\n1873/3,,0,1\n1873/4,,0,1\n1873/5,,0,1\n1873/6,,0,1\n1873/7,,0,1\n1873/8,,0,1\n1873/9,,0,1\n1873/10,,0,1\n1873/11,,0,1\n1873/12,,0,1\n1874/1,,0,1\n1874/2,,0,1\n1874/3,,0,1\n1874/4,,0,1\n1874/5,,0,1\n1874/6,,0,1\n1874/7,,0,1\n1874/8,,0,1\n1874/9,,0,1\n1874/10,,0,1\n1874/11,,0,1\n1874/12,,0,1\n1875/1,,0,1\n1875/2,,0,1\n1875/3,,0,1\n1875/4,,0,1\n1875/5,,0,1\n1875/6,22.3,4,1\n1875/7,26.0,5,1\n1875/8,24.9,8,1\n1875/9,21.5,8,1\n1875/10,15.3,8,1\n1875/11,9.7,5,1\n1875/12,4.6,8,1\n1876/1,1.6,8,1\n1876/2,3.4,5,1\n1876/3,8.1,8,1\n1876/4,12.2,8,1\n1876/5,17.0,8,1\n1876/6,18.5,8,1\n1876/7,24.3,8,1\n1876/8,26.6,8,1\n1876/9,22.6,5,1\n1876/10,14.8,5,1\n1876/11,9.1,8,1\n1876/12,4.8,8,1\n1877/1,3.2,8,1\n1877/2,3.6,8,1\n1877/3,6.2,8,1\n1877/4,13.6,8,1\n1877/5,16.5,8,1\n1877/6,22.0,8,1\n1877/7,26.5,8,1\n1877/8,25.9,8,1\n1877/9,21.3,8,1\n1877/10,15.9,8,1\n1877/11,9.6,8,1\n1877/12,5.8,8,1\n1878/1,2.3,8,1\n1878/2,2.5,8,1\n1878/3,7.2,8,1\n1878/4,11.5,8,1\n1878/5,18.3,8,1\n1878/6,20.0,8,1\n1878/7,26.0,8,1\n1878/8,24.6,8,1\n1878/9,22.8,8,1\n1878/10,15.8,8,1\n1878/11,9.7,8,1\n1878/12,5.1,8,1\n1879/1,3.2,8,1\n1879/2,5.4,8,1\n1879/3,8.0,8,1\n1879/4,12.6,8,1\n1879/5,18.0,8,1\n1879/6,21.4,5,1\n1879/7,26.1,8,1\n1879/8,26.6,8,1\n1879/9,21.3,8,1\n1879/10,15.0,8,1\n1879/11,9.7,8,1\n1879/12,8.0,8,1\n1880/1,2.6,8,1\n1880/2,5.8,8,1\n1880/3,8.4,8,1\n1880/4,12.3,8,1\n1880/5,17.7,8,1\n1880/6,19.8,8,1\n1880/7,24.2,8,1\n1880/8,25.5,8,1\n1880/9,22.5,8,1\n1880/10,16.6,8,1\n1880/11,10.2,8,1\n1880/12,3.9,8,1\n1881/1,2.1,8,1\n1881/2,3.7,8,1\n1881/3,5.3,8,1\n1881/4,11.6,8,1\n1881/5,17.2,8,1\n1881/6,21.3,8,1\n1881/7,24.0,8,1\n1881/8,26.7,8,1\n1881/9,22.7,8,1\n1881/10,15.7,8,1\n1881/11,11.0,8,1\n1881/12,4.3,8,1\n1882/1,4.6,8,1\n1882/2,5.2,8,1\n1882/3,6.9,8,1\n1882/4,13.7,8,1\n1882/5,16.8,8,1\n1882/6,20.4,8,1\n1882/7,24.2,5,1\n1882/8,24.7,5,1\n1882/9,21.1,8,1\n1882/10,15.4,8,1\n1882/11,9.6,8,1\n1882/12,5.0,8,1\n1883/1,3.1,8,1\n1883/2,1.9,8,1\n1883/3,5.3,8,1\n1883/4,12.0,8,1\n1883/5,15.5,8,1\n1883/6,19.8,8,1\n1883/7,23.7,8,1\n1883/8,25.1,8,1\n1883/9,21.8,8,1\n1883/10,16.7,8,1\n1883/11,10.0,8,1\n1883/12,5.0,8,1\n1884/1,2.6,8,1\n1884/2,2.7,8,1\n1884/3,6.1,8,1\n1884/4,11.6,8,1\n1884/5,15.5,8,1\n1884/6,19.8,8,1\n1884/7,23.4,8,1\n1884/8,24.1,8,1\n1884/9,22.3,8,1\n1884/10,15.8,8,1\n1884/11,7.6,8,1\n1884/12,3.4,8,1\n1885/1,0.6,8,1\n1885/2,2.2,5,1\n1885/3,4.9,8,1\n1885/4,10.7,8,1\n1885/5,15.2,8,1\n1885/6,20.3,8,1\n1885/7,23.1,8,1\n1885/8,25.4,8,1\n1885/9,22.1,8,1\n1885/10,16.1,8,1\n1885/11,10.7,8,1\n1885/12,5.7,8,1\n1886/1,2.4,8,1\n1886/2,2.0,8,1\n1886/3,6.9,8,1\n1886/4,12.3,8,1\n1886/5,16.4,8,1\n1886/6,20.9,8,1\n1886/7,25.0,8,1\n1886/8,26.5,8,1\n1886/9,23.2,8,1\n1886/10,16.6,8,1\n1886/11,10.2,8,1\n1886/12,4.7,8,1\n1887/1,2.7,8,1\n1887/2,4.3,8,1\n1887/3,6.9,8,1\n1887/4,12.2,8,1\n1887/5,15.2,8,1\n1887/6,20.3,8,1\n1887/7,23.6,8,1\n1887/8,25.3,8,1\n1887/9,21.0,8,1\n1887/10,16.6,8,1\n1887/11,11.6,8,1\n1887/12,5.7,8,1\n1888/1,3.3,8,1\n1888/2,2.2,8,1\n1888/3,7.2,8,1\n1888/4,12.4,8,1\n1888/5,16.0,8,1\n1888/6,18.6,8,1\n1888/7,24.5,8,1\n1888/8,25.6,8,1\n1888/9,20.9,8,1\n1888/10,15.0,8,1\n1888/11,11.4,8,1\n1888/12,5.2,8,1\n1889/1,2.1,8,1\n1889/2,3.1,8,1\n1889/3,6.9,8,1\n1889/4,12.0,8,1\n1889/5,15.7,8,1\n1889/6,20.9,8,1\n1889/7,23.4,8,1\n1889/8,25.8,8,1\n1889/9,20.3,8,1\n1889/10,14.6,8,1\n1889/11,9.7,8,1\n1889/12,4.9,8,1\n1890/1,3.4,8,1\n1890/2,6.1,8,1\n1890/3,9.2,8,1\n1890/4,14.2,8,1\n1890/5,16.1,8,1\n1890/6,22.0,8,1\n1890/7,23.5,8,1\n1890/8,25.4,8,1\n1890/9,24.2,8,1\n1890/10,16.0,8,1\n1890/11,10.8,8,1\n1890/12,9.3,8,1\n1891/1,2.4,8,1\n1891/2,3.8,8,1\n1891/3,8.9,8,1\n1891/4,12.0,8,1\n1891/5,18.2,8,1\n1891/6,20.3,8,1\n1891/7,24.9,8,1\n1891/8,25.5,8,1\n1891/9,24.3,8,1\n1891/10,16.5,8,1\n1891/11,10.4,8,1\n1891/12,5.6,8,1\n1892/1,3.7,8,1\n1892/2,4.1,8,1\n1892/3,5.1,8,1\n1892/4,13.1,8,1\n1892/5,16.6,8,1\n1892/6,21.1,8,1\n1892/7,25.7,8,1\n1892/8,26.4,8,1\n1892/9,23.0,8,1\n1892/10,16.5,8,1\n1892/11,9.9,8,1\n1892/12,3.3,8,1\n1893/1,2.6,8,1\n1893/2,2.2,8,1\n1893/3,6.2,8,1\n1893/4,13.3,8,1\n1893/5,15.8,8,1\n1893/6,20.5,8,1\n1893/7,25.3,8,1\n1893/8,26.2,8,1\n1893/9,22.5,8,1\n1893/10,15.9,8,1\n1893/11,10.1,8,1\n1893/12,4.7,8,1\n1894/1,3.0,8,1\n1894/2,3.7,8,1\n1894/3,8.4,8,1\n1894/4,13.8,8,1\n1894/5,16.3,8,1\n1894/6,23.6,8,1\n1894/7,26.8,8,1\n1894/8,27.0,8,1\n1894/9,21.9,8,1\n1894/10,15.4,8,1\n1894/11,11.6,8,1\n1894/12,5.8,8,1\n1895/1,2.1,8,1\n1895/2,4.0,8,1\n1895/3,6.9,8,1\n1895/4,12.9,8,1\n1895/5,17.5,8,1\n1895/6,20.4,8,1\n1895/7,22.1,8,1\n1895/8,25.5,8,1\n1895/9,22.9,8,1\n1895/10,16.5,8,1\n1895/11,9.9,8,1\n1895/12,5.4,8,1\n1896/1,3.3,8,1\n1896/2,3.5,8,1\n1896/3,6.0,8,1\n1896/4,13.7,8,1\n1896/5,16.6,8,1\n1896/6,21.6,8,1\n1896/7,24.1,8,1\n1896/8,25.9,8,1\n1896/9,22.3,8,1\n1896/10,15.8,8,1\n1896/11,10.7,8,1\n1896/12,4.8,8,1\n1897/1,3.7,8,1\n1897/2,3.5,8,1\n1897/3,5.7,8,1\n1897/4,11.3,8,1\n1897/5,17.3,8,1\n1897/6,18.8,8,1\n1897/7,22.9,8,1\n1897/8,25.0,8,1\n1897/9,20.9,8,1\n1897/10,15.2,8,1\n1897/11,10.1,8,1\n1897/12,3.7,8,1\n1898/1,3.6,8,1\n1898/2,4.4,8,1\n1898/3,5.5,8,1\n1898/4,11.2,8,1\n1898/5,16.7,8,1\n1898/6,19.2,8,1\n1898/7,25.9,8,1\n1898/8,26.1,8,1\n1898/9,21.6,8,1\n1898/10,16.0,8,1\n1898/11,10.9,8,1\n1898/12,6.4,8,1\n1899/1,3.2,8,1\n1899/2,4.2,8,1\n1899/3,8.5,8,1\n1899/4,12.8,8,1\n1899/5,17.9,8,1\n1899/6,21.5,8,1\n1899/7,23.2,8,1\n1899/8,26.1,8,1\n1899/9,19.8,8,1\n1899/10,14.3,8,1\n1899/11,8.9,8,1\n1899/12,5.5,8,1\n1900/1,1.6,8,1\n1900/2,3.1,8,1\n1900/3,5.7,8,1\n1900/4,11.4,8,1\n1900/5,17.3,8,1\n1900/6,19.3,8,1\n1900/7,22.8,8,1\n1900/8,26.1,8,1\n1900/9,22.6,8,1\n1900/10,16.5,8,1\n1900/11,11.0,8,1\n1900/12,5.5,8,1\n1901/1,4.1,8,1\n1901/2,3.7,8,1\n1901/3,7.3,8,1\n1901/4,13.4,8,1\n1901/5,16.1,8,1\n1901/6,20.6,8,1\n1901/7,22.1,8,1\n1901/8,25.1,8,1\n1901/9,22.3,8,1\n1901/10,16.8,8,1\n1901/11,10.2,8,1\n1901/12,4.5,8,1\n1902/1,2.4,8,1\n1902/2,3.8,8,1\n1902/3,8.4,8,1\n1902/4,11.6,8,1\n1902/5,16.3,8,1\n1902/6,19.8,8,1\n1902/7,21.8,8,1\n1902/8,22.9,8,1\n1902/9,22.6,8,1\n1902/10,16.6,8,1\n1902/11,11.5,8,1\n1902/12,7.1,8,1\n1903/1,4.6,8,1\n1903/2,4.1,8,1\n1903/3,7.7,8,1\n1903/4,12.7,8,1\n1903/5,15.9,8,1\n1903/6,19.7,8,1\n1903/7,23.2,8,1\n1903/8,25.7,8,1\n1903/9,22.3,8,1\n1903/10,15.2,8,1\n1903/11,9.1,8,1\n1903/12,4.1,8,1\n1904/1,1.9,8,1\n1904/2,4.3,8,1\n1904/3,6.1,8,1\n1904/4,13.2,8,1\n1904/5,15.7,8,1\n1904/6,21.8,8,1\n1904/7,24.8,8,1\n1904/8,25.1,8,1\n1904/9,21.2,8,1\n1904/10,16.4,8,1\n1904/11,9.1,8,1\n1904/12,5.3,8,1\n1905/1,4.3,8,1\n1905/2,2.7,8,1\n1905/3,5.6,8,1\n1905/4,10.9,8,1\n1905/5,16.9,8,1\n1905/6,20.8,8,1\n1905/7,23.3,8,1\n1905/8,22.2,8,1\n1905/9,21.9,8,1\n1905/10,16.2,8,1\n1905/11,10.3,8,1\n1905/12,6.8,8,1\n1906/1,2.2,8,1\n1906/2,2.6,8,1\n1906/3,7.3,8,1\n1906/4,12.9,8,1\n1906/5,16.3,8,1\n1906/6,18.4,8,1\n1906/7,23.5,8,1\n1906/8,24.5,8,1\n1906/9,19.7,8,1\n1906/10,15.1,8,1\n1906/11,9.3,8,1\n1906/12,5.9,8,1\n1907/1,4.0,8,1\n1907/2,2.9,8,1\n1907/3,5.6,8,1\n1907/4,12.4,8,1\n1907/5,17.1,8,1\n1907/6,19.2,8,1\n1907/7,22.7,8,1\n1907/8,25.8,8,1\n1907/9,21.3,8,1\n1907/10,15.2,8,1\n1907/11,11.2,8,1\n1907/12,4.5,8,1\n1908/1,3.2,8,1\n1908/2,3.4,8,1\n1908/3,6.2,8,1\n1908/4,12.3,8,1\n1908/5,16.1,8,1\n1908/6,20.9,8,1\n1908/7,22.1,8,1\n1908/8,25.4,8,1\n1908/9,19.4,8,1\n1908/10,16.1,8,1\n1908/11,9.1,8,1\n1908/12,4.6,8,1\n1909/1,2.1,8,1\n1909/2,3.1,8,1\n1909/3,6.3,8,1\n1909/4,13.6,8,1\n1909/5,16.9,8,1\n1909/6,20.2,8,1\n1909/7,24.3,8,1\n1909/8,25.2,8,1\n1909/9,21.8,8,1\n1909/10,14.8,8,1\n1909/11,10.0,8,1\n1909/12,4.6,8,1\n1910/1,4.2,8,1\n1910/2,2.9,8,1\n1910/3,6.1,8,1\n1910/4,12.3,8,1\n1910/5,16.8,8,1\n1910/6,20.7,8,1\n1910/7,23.0,8,1\n1910/8,24.1,8,1\n1910/9,20.9,8,1\n1910/10,16.1,8,1\n1910/11,10.4,8,1\n1910/12,4.3,8,1\n1911/1,2.5,8,1\n1911/2,5.2,8,1\n1911/3,8.2,8,1\n1911/4,13.8,8,1\n1911/5,16.2,8,1\n1911/6,20.8,8,1\n1911/7,24.5,8,1\n1911/8,25.6,8,1\n1911/9,22.6,8,1\n1911/10,15.8,8,1\n1911/11,12.8,8,1\n1911/12,5.0,8,1\n1912/1,3.0,8,1\n1912/2,6.2,8,1\n1912/3,8.1,8,1\n1912/4,13.0,8,1\n1912/5,16.7,8,1\n1912/6,20.1,8,1\n1912/7,24.3,8,1\n1912/8,25.2,8,1\n1912/9,20.2,8,1\n1912/10,15.9,8,1\n1912/11,9.4,8,1\n1912/12,4.7,8,1\n1913/1,1.9,8,1\n1913/2,4.5,8,1\n1913/3,6.2,8,1\n1913/4,13.6,8,1\n1913/5,16.1,8,1\n1913/6,20.3,8,1\n1913/7,23.3,8,1\n1913/8,23.8,8,1\n1913/9,20.0,8,1\n1913/10,15.6,8,1\n1913/11,10.0,8,1\n1913/12,5.2,8,1\n1914/1,4.3,8,1\n1914/2,3.5,8,1\n1914/3,8.8,8,1\n1914/4,11.8,8,1\n1914/5,17.8,8,1\n1914/6,21.5,8,1\n1914/7,25.5,8,1\n1914/8,26.4,8,1\n1914/9,22.5,8,1\n1914/10,16.1,8,1\n1914/11,11.9,8,1\n1914/12,5.8,8,1\n1915/1,3.3,8,1\n1915/2,4.1,8,1\n1915/3,6.6,8,1\n1915/4,11.6,8,1\n1915/5,15.9,8,1\n1915/6,21.9,8,1\n1915/7,24.2,8,1\n1915/8,25.7,8,1\n1915/9,22.7,8,1\n1915/10,17.6,8,1\n1915/11,11.1,8,1\n1915/12,5.6,8,1\n1916/1,5.1,8,1\n1916/2,4.1,8,1\n1916/3,5.8,8,1\n1916/4,12.7,8,1\n1916/5,16.9,8,1\n1916/6,22.7,8,1\n1916/7,23.9,8,1\n1916/8,25.0,8,1\n1916/9,23.7,8,1\n1916/10,15.8,8,1\n1916/11,11.3,8,1\n1916/12,6.8,8,1\n1917/1,2.3,8,1\n1917/2,4.5,8,1\n1917/3,6.5,8,1\n1917/4,12.7,8,1\n1917/5,15.8,8,1\n1917/6,19.6,8,1\n1917/7,25.7,8,1\n1917/8,25.0,8,1\n1917/9,22.0,8,1\n1917/10,16.8,8,1\n1917/11,8.7,8,1\n1917/12,4.0,8,1\n1918/1,1.6,8,1\n1918/2,3.6,8,1\n1918/3,6.7,8,1\n1918/4,11.7,8,1\n1918/5,16.7,8,1\n1918/6,20.1,8,1\n1918/7,26.0,8,1\n1918/8,26.1,8,1\n1918/9,22.6,8,1\n1918/10,16.0,8,1\n1918/11,10.4,8,1\n1918/12,3.9,8,1\n1919/1,2.8,8,1\n1919/2,3.7,8,1\n1919/3,8.3,8,1\n1919/4,13.4,8,1\n1919/5,16.2,8,1\n1919/6,19.8,8,1\n1919/7,23.6,8,1\n1919/8,25.0,8,1\n1919/9,22.7,8,1\n1919/10,16.4,8,1\n1919/11,11.4,8,1\n1919/12,5.3,8,1\n1920/1,4.1,8,1\n1920/2,2.6,8,1\n1920/3,6.6,8,1\n1920/4,12.6,8,1\n1920/5,16.8,8,1\n1920/6,20.3,8,1\n1920/7,26.1,8,1\n1920/8,25.7,8,1\n1920/9,21.4,8,1\n1920/10,16.4,8,1\n1920/11,12.0,8,1\n1920/12,5.2,8,1\n1921/1,4.0,8,1\n1921/2,3.5,8,1\n1921/3,6.2,8,1\n1921/4,13.8,8,1\n1921/5,16.4,8,1\n1921/6,18.8,8,1\n1921/7,24.3,8,1\n1921/8,25.3,8,1\n1921/9,21.3,8,1\n1921/10,15.4,8,1\n1921/11,9.3,8,1\n1921/12,5.0,8,1\n1922/1,0.6,8,1\n1922/2,7.0,8,1\n1922/3,6.6,8,1\n1922/4,13.3,8,1\n1922/5,16.8,8,1\n1922/6,21.7,8,1\n1922/7,25.0,8,1\n1922/8,27.3,8,1\n1922/9,23.4,8,1\n1922/10,16.8,8,1\n1922/11,10.8,8,1\n1922/12,4.0,8,1\n1923/1,1.7,8,1\n1923/2,3.0,8,1\n1923/3,7.9,8,1\n1923/4,12.0,8,1\n1923/5,16.8,8,1\n1923/6,20.4,8,1\n1923/7,24.0,8,1\n1923/8,27.2,8,1\n1923/9,23.4,5,1\n1923/10,16.8,8,1\n1923/11,12.0,8,1\n1923/12,5.6,8,1\n1924/1,2.7,8,1\n1924/2,4.5,8,1\n1924/3,5.0,8,1\n1924/4,14.7,8,1\n1924/5,16.9,8,1\n1924/6,19.4,8,1\n1924/7,26.1,8,1\n1924/8,26.2,8,1\n1924/9,21.8,8,1\n1924/10,15.4,8,1\n1924/11,9.9,8,1\n1924/12,5.2,8,1\n1925/1,2.9,8,1\n1925/2,2.4,8,1\n1925/3,6.2,8,1\n1925/4,11.9,8,1\n1925/5,16.1,8,1\n1925/6,20.1,8,1\n1925/7,23.2,8,1\n1925/8,25.7,8,1\n1925/9,22.9,8,1\n1925/10,16.3,8,1\n1925/11,11.4,8,1\n1925/12,6.8,8,1\n1926/1,3.1,8,1\n1926/2,4.6,8,1\n1926/3,6.3,8,1\n1926/4,11.1,8,1\n1926/5,16.3,8,1\n1926/6,19.0,8,1\n1926/7,24.6,8,1\n1926/8,26.3,8,1\n1926/9,23.2,8,1\n1926/10,15.0,8,1\n1926/11,9.8,8,1\n1926/12,4.1,8,1\n1927/1,2.7,8,1\n1927/2,2.1,8,1\n1927/3,6.3,8,1\n1927/4,13.5,8,1\n1927/5,17.1,8,1\n1927/6,20.5,8,1\n1927/7,26.0,8,1\n1927/8,26.6,8,1\n1927/9,21.2,8,1\n1927/10,16.7,8,1\n1927/11,11.2,8,1\n1927/12,5.5,8,1\n1928/1,3.6,8,1\n1928/2,3.3,8,1\n1928/3,6.9,8,1\n1928/4,12.5,8,1\n1928/5,17.8,8,1\n1928/6,20.3,8,1\n1928/7,23.4,8,1\n1928/8,24.1,8,1\n1928/9,23.9,8,1\n1928/10,16.7,8,1\n1928/11,11.7,8,1\n1928/12,5.4,8,1\n1929/1,2.6,8,1\n1929/2,2.9,8,1\n1929/3,7.1,8,1\n1929/4,12.6,8,1\n1929/5,15.9,8,1\n1929/6,20.6,8,1\n1929/7,25.9,8,1\n1929/8,27.1,8,1\n1929/9,20.5,8,1\n1929/10,16.5,8,1\n1929/11,11.0,8,1\n1929/12,8.6,8,1\n1930/1,3.8,8,1\n1930/2,5.4,8,1\n1930/3,8.8,8,1\n1930/4,14.0,8,1\n1930/5,17.7,8,1\n1930/6,21.4,8,1\n1930/7,26.3,8,1\n1930/8,26.8,8,1\n1930/9,21.5,8,1\n1930/10,16.7,8,1\n1930/11,10.3,8,1\n1930/12,5.2,8,1\n1931/1,2.9,8,1\n1931/2,2.5,8,1\n1931/3,7.9,8,1\n1931/4,12.4,8,1\n1931/5,16.3,8,1\n1931/6,20.4,8,1\n1931/7,21.8,8,1\n1931/8,26.4,8,1\n1931/9,22.5,8,1\n1931/10,16.3,8,1\n1931/11,11.5,8,1\n1931/12,6.9,8,1\n1932/1,5.9,8,1\n1932/2,4.3,8,1\n1932/3,6.9,8,1\n1932/4,12.3,8,1\n1932/5,18.0,8,1\n1932/6,19.8,8,1\n1932/7,25.7,8,1\n1932/8,26.7,8,1\n1932/9,21.8,8,1\n1932/10,16.5,8,1\n1932/11,10.9,8,1\n1932/12,6.0,8,1\n1933/1,3.2,8,1\n1933/2,3.6,8,1\n1933/3,5.8,8,1\n1933/4,12.3,8,1\n1933/5,18.1,8,1\n1933/6,21.9,8,1\n1933/7,26.6,8,1\n1933/8,27.5,8,1\n1933/9,23.1,8,1\n1933/10,16.8,8,1\n1933/11,11.2,8,1\n1933/12,6.2,8,1\n1934/1,2.5,8,1\n1934/2,4.0,8,1\n1934/3,6.1,8,1\n1934/4,11.5,8,1\n1934/5,17.8,8,1\n1934/6,22.0,8,1\n1934/7,23.9,8,1\n1934/8,26.1,8,1\n1934/9,21.6,8,1\n1934/10,14.6,8,1\n1934/11,10.8,8,1\n1934/12,5.9,8,1\n1935/1,3.7,8,1\n1935/2,4.8,8,1\n1935/3,7.1,8,1\n1935/4,12.5,8,1\n1935/5,16.7,8,1\n1935/6,21.5,8,1\n1935/7,24.3,8,1\n1935/8,24.8,8,1\n1935/9,20.8,8,1\n1935/10,17.1,8,1\n1935/11,10.7,8,1\n1935/12,5.5,8,1\n1936/1,2.0,8,1\n1936/2,2.5,8,1\n1936/3,6.1,8,1\n1936/4,12.0,8,1\n1936/5,16.4,8,1\n1936/6,21.4,8,1\n1936/7,24.9,8,1\n1936/8,26.5,8,1\n1936/9,24.2,8,1\n1936/10,16.0,8,1\n1936/11,11.2,8,1\n1936/12,6.2,8,1\n1937/1,4.6,8,1\n1937/2,5.7,8,1\n1937/3,8.1,8,1\n1937/4,12.8,8,1\n1937/5,17.6,8,1\n1937/6,19.6,8,1\n1937/7,26.3,8,1\n1937/8,28.2,8,1\n1937/9,22.7,8,1\n1937/10,16.3,8,1\n1937/11,11.2,8,1\n1937/12,5.2,8,1\n1938/1,2.7,8,1\n1938/2,3.4,8,1\n1938/3,8.8,8,1\n1938/4,13.2,8,1\n1938/5,18.7,8,1\n1938/6,20.8,8,1\n1938/7,25.0,8,1\n1938/8,26.0,8,1\n1938/9,22.4,8,1\n1938/10,16.7,8,1\n1938/11,10.8,8,1\n1938/12,5.9,8,1\n1939/1,2.4,8,1\n1939/2,4.1,8,1\n1939/3,7.4,8,1\n1939/4,12.8,8,1\n1939/5,17.0,8,1\n1939/6,20.7,8,1\n1939/7,26.5,8,1\n1939/8,25.8,8,1\n1939/9,23.7,8,1\n1939/10,17.9,8,1\n1939/11,12.3,8,1\n1939/12,5.4,8,1\n1940/1,2.7,8,1\n1940/2,3.7,8,1\n1940/3,8.2,8,1\n1940/4,13.1,8,1\n1940/5,17.7,8,1\n1940/6,22.1,8,1\n1940/7,26.9,8,1\n1940/8,24.9,8,1\n1940/9,21.7,8,1\n1940/10,17.8,8,1\n1940/11,12.3,8,1\n1940/12,6.2,8,1\n1941/1,4.8,8,1\n1941/2,5.0,8,1\n1941/3,8.2,8,1\n1941/4,12.7,8,1\n1941/5,17.6,8,1\n1941/6,20.8,8,1\n1941/7,23.7,8,1\n1941/8,25.4,8,1\n1941/9,20.6,8,1\n1941/10,17.3,8,1\n1941/11,11.7,8,1\n1941/12,6.9,8,1\n1942/1,2.9,8,1\n1942/2,2.6,8,1\n1942/3,10.3,8,1\n1942/4,13.6,8,1\n1942/5,17.3,8,1\n1942/6,22.2,8,1\n1942/7,27.5,8,1\n1942/8,27.0,8,1\n1942/9,24.9,8,1\n1942/10,16.4,8,1\n1942/11,10.1,8,1\n1942/12,5.4,8,1\n1943/1,2.4,8,1\n1943/2,4.0,8,1\n1943/3,6.8,8,1\n1943/4,11.8,8,1\n1943/5,17.8,8,1\n1943/6,21.5,8,1\n1943/7,25.1,8,1\n1943/8,27.4,8,1\n1943/9,24.4,8,1\n1943/10,17.2,8,1\n1943/11,10.8,8,1\n1943/12,5.7,8,1\n1944/1,3.0,8,1\n1944/2,3.2,8,1\n1944/3,5.6,8,1\n1944/4,10.6,8,1\n1944/5,17.7,8,1\n1944/6,22.3,8,1\n1944/7,25.6,8,1\n1944/8,27.5,8,1\n1944/9,23.2,8,1\n1944/10,16.3,8,1\n1944/11,10.9,8,1\n1944/12,4.3,8,1\n1945/1,1.1,8,1\n1945/2,1.6,8,1\n1945/3,6.6,8,1\n1945/4,13.5,8,1\n1945/5,15.6,8,1\n1945/6,20.4,8,1\n1945/7,22.0,8,1\n1945/8,26.7,8,1\n1945/9,22.4,8,1\n1945/10,16.8,8,1\n1945/11,11.3,8,1\n1945/12,4.8,8,1\n1946/1,3.5,8,1\n1946/2,4.2,8,1\n1946/3,6.2,8,1\n1946/4,14.3,8,1\n1946/5,16.9,8,1\n1946/6,23.3,8,1\n1946/7,26.2,8,1\n1946/8,26.7,8,1\n1946/9,23.1,8,1\n1946/10,17.3,8,1\n1946/11,12.4,8,1\n1946/12,4.7,8,1\n1947/1,3.4,8,1\n1947/2,2.7,8,1\n1947/3,6.8,8,1\n1947/4,13.1,8,1\n1947/5,16.9,8,1\n1947/6,19.2,8,1\n1947/7,25.7,8,1\n1947/8,28.0,8,1\n1947/9,22.9,8,1\n1947/10,15.6,8,1\n1947/11,10.3,8,1\n1947/12,4.1,8,1\n1948/1,4.0,8,1\n1948/2,5.1,8,1\n1948/3,6.5,8,1\n1948/4,14.2,8,1\n1948/5,18.1,8,1\n1948/6,21.6,8,1\n1948/7,26.0,8,1\n1948/8,25.4,8,1\n1948/9,23.8,8,1\n1948/10,17.4,8,1\n1948/11,11.9,8,1\n1948/12,7.9,8,1\n1949/1,5.4,8,1\n1949/2,6.5,8,1\n1949/3,6.7,8,1\n1949/4,12.1,8,1\n1949/5,18.4,8,1\n1949/6,19.4,8,1\n1949/7,25.3,8,1\n1949/8,26.6,8,1\n1949/9,22.4,8,1\n1949/10,16.1,8,1\n1949/11,10.0,8,1\n1949/12,6.0,8,1\n1950/1,5.0,8,1\n1950/2,4.7,8,1\n1950/3,7.7,8,1\n1950/4,13.9,8,1\n1950/5,19.2,8,1\n1950/6,21.8,8,1\n1950/7,26.5,8,1\n1950/8,26.2,8,1\n1950/9,23.8,8,1\n1950/10,15.8,8,1\n1950/11,11.1,8,1\n1950/12,5.4,8,1\n1951/1,3.3,8,1\n1951/2,4.5,8,1\n1951/3,8.8,8,1\n1951/4,13.3,8,1\n1951/5,18.0,8,1\n1951/6,21.2,8,1\n1951/7,24.3,8,1\n1951/8,26.7,8,1\n1951/9,20.7,8,1\n1951/10,17.3,8,1\n1951/11,11.4,8,1\n1951/12,7.3,8,1\n1952/1,4.3,8,1\n1952/2,2.6,8,1\n1952/3,7.4,8,1\n1952/4,13.3,8,1\n1952/5,18.1,8,1\n1952/6,21.3,8,1\n1952/7,24.3,8,1\n1952/8,26.8,8,1\n1952/9,22.7,8,1\n1952/10,17.3,8,1\n1952/11,12.0,8,1\n1952/12,5.3,8,1\n1953/1,3.3,8,1\n1953/2,4.2,8,1\n1953/3,9.4,8,1\n1953/4,12.7,8,1\n1953/5,17.8,8,1\n1953/6,20.6,8,1\n1953/7,24.7,8,1\n1953/8,25.0,8,1\n1953/9,22.2,8,1\n1953/10,17.2,8,1\n1953/11,10.4,8,1\n1953/12,7.6,8,1\n1954/1,4.3,8,1\n1954/2,5.6,8,1\n1954/3,8.4,8,1\n1954/4,14.9,8,1\n1954/5,17.6,8,1\n1954/6,18.3,8,1\n1954/7,22.3,8,1\n1954/8,27.0,8,1\n1954/9,24.6,8,1\n1954/10,15.5,8,1\n1954/11,11.7,8,1\n1954/12,7.1,8,1\n1955/1,3.8,8,1\n1955/2,6.2,8,1\n1955/3,8.7,8,1\n1955/4,13.6,8,1\n1955/5,18.2,8,1\n1955/6,22.7,8,1\n1955/7,27.6,8,1\n1955/8,26.3,8,1\n1955/9,22.3,8,1\n1955/10,17.6,8,1\n1955/11,11.0,8,1\n1955/12,7.9,8,1\n1956/1,4.2,8,1\n1956/2,4.3,8,1\n1956/3,8.6,8,1\n1956/4,13.1,8,1\n1956/5,17.6,8,1\n1956/6,22.3,8,1\n1956/7,24.2,8,1\n1956/8,25.4,8,1\n1956/9,22.7,8,1\n1956/10,17.3,8,1\n1956/11,11.8,8,1\n1956/12,5.0,8,1\n1957/1,5.7,8,1\n1957/2,4.3,8,1\n1957/3,6.8,8,1\n1957/4,14.3,8,1\n1957/5,17.1,8,1\n1957/6,19.8,8,1\n1957/7,24.4,8,1\n1957/8,27.3,8,1\n1957/9,20.8,8,1\n1957/10,17.2,8,1\n1957/11,12.9,8,1\n1957/12,8.0,8,1\n1958/1,5.0,8,1\n1958/2,6.0,8,1\n1958/3,8.4,8,1\n1958/4,13.9,8,1\n1958/5,18.0,8,1\n1958/6,22.0,8,1\n1958/7,24.9,8,1\n1958/8,25.8,8,1\n1958/9,23.2,8,1\n1958/10,16.0,8,1\n1958/11,11.1,8,1\n1958/12,7.9,8,1\n1959/1,3.7,8,1\n1959/2,7.3,8,1\n1959/3,8.9,8,1\n1959/4,15.3,8,1\n1959/5,18.5,8,1\n1959/6,20.4,8,1\n1959/7,26.1,8,1\n1959/8,26.7,8,1\n1959/9,24.1,8,1\n1959/10,17.6,8,1\n1959/11,12.3,8,1\n1959/12,7.0,8,1\n1960/1,5.0,8,1\n1960/2,6.6,8,1\n1960/3,9.5,8,1\n1960/4,12.8,8,1\n1960/5,17.8,8,1\n1960/6,21.5,8,1\n1960/7,25.8,8,1\n1960/8,26.4,8,1\n1960/9,23.6,8,1\n1960/10,16.8,8,1\n1960/11,12.3,8,1\n1960/12,6.7,8,1\n1961/1,3.6,8,1\n1961/2,4.5,8,1\n1961/3,8.2,8,1\n1961/4,14.9,8,1\n1961/5,19.8,8,1\n1961/6,22.6,8,1\n1961/7,27.4,8,1\n1961/8,26.8,8,1\n1961/9,25.3,8,1\n1961/10,18.3,8,1\n1961/11,12.7,8,1\n1961/12,7.2,8,1\n1962/1,4.5,8,1\n1962/2,5.9,8,1\n1962/3,8.2,8,1\n1962/4,14.1,8,1\n1962/5,18.4,8,1\n1962/6,20.9,8,1\n1962/7,25.1,8,1\n1962/8,28.1,8,1\n1962/9,24.5,8,1\n1962/10,16.7,8,1\n1962/11,11.3,8,1\n1962/12,7.0,8,1\n1963/1,3.2,8,1\n1963/2,4.8,8,1\n1963/3,7.6,8,1\n1963/4,13.9,8,1\n1963/5,18.4,8,1\n1963/6,21.8,8,1\n1963/7,25.7,8,1\n1963/8,26.6,8,1\n1963/9,21.4,8,1\n1963/10,16.3,8,1\n1963/11,12.1,8,1\n1963/12,8.1,8,1\n1964/1,5.4,8,1\n1964/2,4.2,8,1\n1964/3,7.6,8,1\n1964/4,15.3,8,1\n1964/5,18.9,8,1\n1964/6,21.5,8,1\n1964/7,25.5,8,1\n1964/8,27.8,8,1\n1964/9,22.3,8,1\n1964/10,15.9,8,1\n1964/11,11.1,8,1\n1964/12,7.5,8,1\n1965/1,4.4,8,1\n1965/2,4.7,8,1\n1965/3,6.9,8,1\n1965/4,11.1,8,1\n1965/5,17.2,8,1\n1965/6,21.6,8,1\n1965/7,24.2,8,1\n1965/8,26.7,8,1\n1965/9,22.2,8,1\n1965/10,16.9,8,1\n1965/11,12.7,8,1\n1965/12,7.0,8,1\n1966/1,4.6,8,1\n1966/2,7.2,8,1\n1966/3,9.6,8,1\n1966/4,13.6,8,1\n1966/5,17.9,8,1\n1966/6,20.1,8,1\n1966/7,24.4,8,1\n1966/8,26.9,8,1\n1966/9,23.2,8,1\n1966/10,18.9,8,1\n1966/11,12.9,8,1\n1966/12,6.6,8,1\n1967/1,4.4,8,1\n1967/2,4.9,8,1\n1967/3,9.5,8,1\n1967/4,14.5,8,1\n1967/5,20.0,8,1\n1967/6,23.0,8,1\n1967/7,26.3,8,1\n1967/8,28.0,8,1\n1967/9,22.6,8,1\n1967/10,16.9,8,1\n1967/11,12.1,8,1\n1967/12,6.7,8,1\n1968/1,5.7,8,1\n1968/2,4.3,8,1\n1968/3,10.0,8,1\n1968/4,14.1,8,1\n1968/5,17.5,8,1\n1968/6,22.0,8,1\n1968/7,24.7,8,1\n1968/8,26.6,8,1\n1968/9,21.9,8,1\n1968/10,16.3,8,1\n1968/11,14.1,8,1\n1968/12,10.2,8,1\n1969/1,5.7,8,1\n1969/2,5.7,8,1\n1969/3,7.9,8,1\n1969/4,14.6,8,1\n1969/5,19.6,8,1\n1969/6,21.8,8,1\n1969/7,25.0,8,1\n1969/8,27.2,8,1\n1969/9,22.8,8,1\n1969/10,17.3,8,1\n1969/11,12.8,8,1\n1969/12,7.2,8,1\n1970/1,4.5,8,1\n1970/2,6.0,8,1\n1970/3,5.5,8,1\n1970/4,13.0,8,1\n1970/5,19.6,8,1\n1970/6,20.7,8,1\n1970/7,25.4,8,1\n1970/8,27.4,8,1\n1970/9,24.0,8,1\n1970/10,17.2,8,1\n1970/11,12.3,8,1\n1970/12,6.8,8,1\n1971/1,5.1,8,1\n1971/2,5.9,8,1\n1971/3,8.3,8,1\n1971/4,13.5,8,1\n1971/5,17.4,8,1\n1971/6,21.3,8,1\n1971/7,25.8,8,1\n1971/8,26.7,8,1\n1971/9,21.1,8,1\n1971/10,15.5,8,1\n1971/11,11.9,8,1\n1971/12,7.9,8,1\n1972/1,6.6,8,1\n1972/2,5.1,8,1\n1972/3,9.7,8,1\n1972/4,13.4,8,1\n1972/5,18.6,8,1\n1972/6,21.4,8,1\n1972/7,25.2,8,1\n1972/8,26.6,8,1\n1972/9,23.1,8,1\n1972/10,18.5,8,1\n1972/11,12.3,8,1\n1972/12,8.1,8,1\n1973/1,6.3,8,1\n1973/2,6.9,8,1\n1973/3,7.8,8,1\n1973/4,15.3,8,1\n1973/5,17.9,8,1\n1973/6,19.8,8,1\n1973/7,26.1,8,1\n1973/8,28.5,8,1\n1973/9,23.2,8,1\n1973/10,17.4,8,1\n1973/11,12.1,8,1\n1973/12,6.6,8,1\n1974/1,4.4,8,1\n1974/2,5.1,8,1\n1974/3,7.3,8,1\n1974/4,14.8,8,1\n1974/5,19.3,8,1\n1974/6,21.9,8,1\n1974/7,23.4,8,1\n1974/8,27.1,8,1\n1974/9,22.8,8,1\n1974/10,17.8,8,1\n1974/11,11.7,8,1\n1974/12,6.7,8,1\n1975/1,4.7,8,1\n1975/2,5.1,8,1\n1975/3,7.9,8,1\n1975/4,14.3,8,1\n1975/5,18.6,8,1\n1975/6,21.6,8,1\n1975/7,25.6,8,1\n1975/8,27.3,8,1\n1975/9,25.2,8,1\n1975/10,17.3,8,1\n1975/11,12.7,8,1\n1975/12,6.7,8,1\n1976/1,5.4,8,1\n1976/2,6.8,8,1\n1976/3,9.0,8,1\n1976/4,13.0,8,1\n1976/5,17.7,8,1\n1976/6,21.5,8,1\n1976/7,23.9,8,1\n1976/8,25.1,8,1\n1976/9,22.0,8,1\n1976/10,17.5,8,1\n1976/11,11.2,8,1\n1976/12,7.3,8,1\n1977/1,3.4,8,1\n1977/2,4.9,8,1\n1977/3,9.3,8,1\n1977/4,15.1,8,1\n1977/5,18.7,8,1\n1977/6,20.9,8,1\n1977/7,25.8,8,1\n1977/8,25.0,8,1\n1977/9,24.3,8,1\n1977/10,18.7,8,1\n1977/11,14.8,8,1\n1977/12,8.9,8,1\n1978/1,5.6,8,1\n1978/2,4.2,8,1\n1978/3,8.7,8,1\n1978/4,13.9,8,1\n1978/5,19.0,8,1\n1978/6,23.8,8,1\n1978/7,27.8,8,1\n1978/8,28.9,8,1\n1978/9,22.2,8,1\n1978/10,17.3,8,1\n1978/11,12.9,8,1\n1978/12,8.5,8,1\n1979/1,6.6,8,1\n1979/2,8.4,8,1\n1979/3,9.9,8,1\n1979/4,13.9,8,1\n1979/5,18.6,8,1\n1979/6,24.4,8,1\n1979/7,25.2,8,1\n1979/8,27.4,8,1\n1979/9,24.1,8,1\n1979/10,19.6,8,1\n1979/11,14.3,8,1\n1979/12,10.1,8,1\n1980/1,5.6,8,1\n1980/2,5.2,8,1\n1980/3,8.2,8,1\n1980/4,13.6,8,1\n1980/5,19.2,8,1\n1980/6,23.6,8,1\n1980/7,23.8,8,1\n1980/8,23.4,8,1\n1980/9,23.0,8,1\n1980/10,18.2,8,1\n1980/11,13.0,8,1\n1980/12,7.7,8,1\n1981/1,4.4,8,1\n1981/2,5.3,8,1\n1981/3,9.0,8,1\n1981/4,13.9,8,1\n1981/5,17.5,8,1\n1981/6,20.2,8,1\n1981/7,26.3,8,1\n1981/8,26.2,8,1\n1981/9,21.8,8,1\n1981/10,17.6,8,1\n1981/11,10.4,8,1\n1981/12,7.6,8,1\n1982/1,5.8,8,1\n1982/2,5.5,8,1\n1982/3,9.9,8,1\n1982/4,14.0,8,1\n1982/5,20.7,8,1\n1982/6,21.4,8,1\n1982/7,23.1,8,1\n1982/8,27.1,8,1\n1982/9,22.3,8,1\n1982/10,18.0,8,1\n1982/11,14.3,8,1\n1982/12,9.5,8,1\n1983/1,6.2,8,1\n1983/2,6.1,8,1\n1983/3,8.6,8,1\n1983/4,15.9,8,1\n1983/5,19.7,8,1\n1983/6,20.5,8,1\n1983/7,23.8,8,1\n1983/8,27.5,8,1\n1983/9,23.1,8,1\n1983/10,17.7,8,1\n1983/11,12.3,8,1\n1983/12,7.1,8,1\n1984/1,3.7,8,1\n1984/2,3.0,8,1\n1984/3,5.9,8,1\n1984/4,11.6,8,1\n1984/5,17.2,8,1\n1984/6,21.8,8,1\n1984/7,26.2,8,1\n1984/8,28.6,8,1\n1984/9,23.5,8,1\n1984/10,17.7,8,1\n1984/11,12.2,8,1\n1984/12,7.7,8,1\n1985/1,4.1,8,1\n1985/2,6.5,8,1\n1985/3,7.8,8,1\n1985/4,14.2,8,1\n1985/5,19.1,8,1\n1985/6,20.2,8,1\n1985/7,26.3,8,1\n1985/8,27.9,8,1\n1985/9,23.1,8,1\n1985/10,17.9,8,1\n1985/11,13.3,8,1\n1985/12,7.4,8,1\n1986/1,4.5,8,1\n1986/2,4.3,8,1\n1986/3,7.8,8,1\n1986/4,13.9,8,1\n1986/5,17.9,8,1\n1986/6,21.1,8,1\n1986/7,23.9,8,1\n1986/8,26.8,8,1\n1986/9,23.7,8,1\n1986/10,17.1,8,1\n1986/11,12.3,8,1\n1986/12,8.5,8,1\n1987/1,5.8,8,1\n1987/2,6.8,8,1\n1987/3,9.3,8,1\n1987/4,14.4,8,1\n1987/5,19.3,8,1\n1987/6,22.1,8,1\n1987/7,27.0,8,1\n1987/8,27.3,8,1\n1987/9,23.3,8,1\n1987/10,18.9,8,1\n1987/11,12.8,8,1\n1987/12,8.1,8,1\n1988/1,7.7,8,1\n1988/2,4.9,8,1\n1988/3,8.4,8,1\n1988/4,14.3,8,1\n1988/5,18.2,8,1\n1988/6,22.3,8,1\n1988/7,22.4,8,1\n1988/8,27.0,8,1\n1988/9,22.8,8,1\n1988/10,17.5,8,1\n1988/11,11.4,8,1\n1988/12,8.4,8,1\n1989/1,8.1,8,1\n1989/2,7.5,8,1\n1989/3,9.6,8,1\n1989/4,15.6,8,1\n1989/5,17.7,8,1\n1989/6,20.7,8,1\n1989/7,24.1,8,1\n1989/8,27.1,8,1\n1989/9,25.2,8,1\n1989/10,17.5,8,1\n1989/11,14.2,8,1\n1989/12,9.2,8,1\n1990/1,5.0,8,1\n1990/2,7.8,8,1\n1990/3,10.6,8,1\n1990/4,14.7,8,1\n1990/5,19.2,8,1\n1990/6,23.5,8,1\n1990/7,25.7,8,1\n1990/8,28.6,8,1\n1990/9,24.8,8,1\n1990/10,19.2,8,1\n1990/11,15.1,8,1\n1990/12,10.0,8,1\n1991/1,6.3,8,1\n1991/2,6.5,8,1\n1991/3,9.5,8,1\n1991/4,15.4,8,1\n1991/5,18.8,8,1\n1991/6,23.6,8,1\n1991/7,26.7,8,1\n1991/8,25.5,8,1\n1991/9,23.9,8,1\n1991/10,18.1,8,1\n1991/11,13.0,8,1\n1991/12,9.2,8,1\n1992/1,6.8,8,1\n1992/2,6.9,8,1\n1992/3,9.7,8,1\n1992/4,15.1,8,1\n1992/5,17.3,8,1\n1992/6,20.6,8,1\n1992/7,25.5,8,1\n1992/8,27.0,8,1\n1992/9,23.3,8,1\n1992/10,17.3,8,1\n1992/11,13.0,8,1\n1992/12,9.4,8,1\n1993/1,6.2,8,1\n1993/2,7.7,8,1\n1993/3,8.7,8,1\n1993/4,13.4,8,1\n1993/5,18.1,8,1\n1993/6,21.7,8,1\n1993/7,22.5,8,1\n1993/8,24.8,8,1\n1993/9,22.9,8,1\n1993/10,17.5,8,1\n1993/11,14.1,8,1\n1993/12,8.5,8,1\n1994/1,5.5,8,1\n1994/2,6.6,8,1\n1994/3,8.1,8,1\n1994/4,15.8,8,1\n1994/5,19.5,8,1\n1994/6,22.4,8,1\n1994/7,28.3,8,1\n1994/8,28.9,8,1\n1994/9,24.8,8,1\n1994/10,20.2,8,1\n1994/11,13.4,8,1\n1994/12,9.0,8,1\n1995/1,6.3,8,1\n1995/2,6.5,8,1\n1995/3,8.9,8,1\n1995/4,15.0,8,1\n1995/5,19.1,8,1\n1995/6,20.4,8,1\n1995/7,26.4,8,1\n1995/8,29.4,8,1\n1995/9,23.7,8,1\n1995/10,19.5,8,1\n1995/11,12.7,8,1\n1995/12,7.7,8,1\n1996/1,6.6,8,1\n1996/2,5.4,8,1\n1996/3,9.2,8,1\n1996/4,12.7,8,1\n1996/5,18.1,8,1\n1996/6,22.6,8,1\n1996/7,26.2,8,1\n1996/8,26.0,8,1\n1996/9,22.4,8,1\n1996/10,18.0,8,1\n1996/11,13.2,8,1\n1996/12,9.3,8,1\n1997/1,6.8,8,1\n1997/2,7.0,8,1\n1997/3,10.5,8,1\n1997/4,15.2,8,1\n1997/5,19.2,8,1\n1997/6,22.7,8,1\n1997/7,26.6,8,1\n1997/8,27.0,8,1\n1997/9,22.9,8,1\n1997/10,18.7,8,1\n1997/11,14.3,8,1\n1997/12,9.2,8,1\n1998/1,5.3,8,1\n1998/2,7.0,8,1\n1998/3,10.1,8,1\n1998/4,16.3,8,1\n1998/5,20.5,8,1\n1998/6,21.5,8,1\n1998/7,25.3,8,1\n1998/8,27.2,8,1\n1998/9,24.4,8,1\n1998/10,20.1,8,1\n1998/11,13.9,8,1\n1998/12,9.0,8,1\n1999/1,6.6,8,1\n1999/2,6.7,8,1\n1999/3,10.1,8,1\n1999/4,15.0,8,1\n1999/5,19.9,8,1\n1999/6,22.8,8,1\n1999/7,25.9,8,1\n1999/8,28.5,8,1\n1999/9,26.2,8,1\n1999/10,19.5,8,1\n1999/11,14.2,8,1\n1999/12,9.0,8,1\n2000/1,7.6,8,1\n2000/2,6.0,8,1\n2000/3,9.4,8,1\n2000/4,14.5,8,1\n2000/5,19.8,8,1\n2000/6,22.5,8,1\n2000/7,27.7,8,1\n2000/8,28.3,8,1\n2000/9,25.6,8,1\n2000/10,18.8,8,1\n2000/11,13.3,8,1\n2000/12,8.8,8,1\n2001/1,4.9,8,1\n2001/2,6.6,8,1\n2001/3,9.8,8,1\n2001/4,15.7,8,1\n2001/5,19.5,8,1\n2001/6,23.1,8,1\n2001/7,28.5,8,1\n2001/8,26.4,8,1\n2001/9,23.2,8,1\n2001/10,18.7,8,1\n2001/11,13.1,8,1\n2001/12,8.4,8,1\n2002/1,7.4,8,1\n2002/2,7.9,8,1\n2002/3,12.2,8,1\n2002/4,16.1,8,1\n2002/5,18.4,8,1\n2002/6,21.6,8,1\n2002/7,28.0,8,1\n2002/8,28.0,8,1\n2002/9,23.1,8,1\n2002/10,19.0,8,1\n2002/11,11.6,8,1\n2002/12,7.2,8,1\n2003/1,5.5,8,1\n2003/2,6.4,8,1\n2003/3,8.7,8,1\n2003/4,15.1,8,1\n2003/5,18.8,8,1\n2003/6,23.2,8,1\n2003/7,22.8,8,1\n2003/8,26.0,8,1\n2003/9,24.2,8,1\n2003/10,17.8,8,1\n2003/11,14.4,8,1\n2003/12,9.2,8,1\n2004/1,6.3,8,1\n2004/2,8.5,8,1\n2004/3,9.8,8,1\n2004/4,16.4,8,1\n2004/5,19.6,8,1\n2004/6,23.7,8,1\n2004/7,28.5,8,1\n2004/8,27.2,8,1\n2004/9,25.1,8,1\n2004/10,17.5,8,1\n2004/11,15.6,8,1\n2004/12,9.9,8,1\n2005/1,6.1,8,1\n2005/2,6.2,8,1\n2005/3,9.0,8,1\n2005/4,15.1,8,1\n2005/5,17.7,8,1\n2005/6,23.2,8,1\n2005/7,25.6,8,1\n2005/8,28.1,8,1\n2005/9,24.7,8,1\n2005/10,19.2,8,1\n2005/11,13.3,8,1\n2005/12,6.4,8,1\n2006/1,5.1,8,1\n2006/2,6.7,8,1\n2006/3,9.8,8,1\n2006/4,13.6,8,1\n2006/5,19.0,8,1\n2006/6,22.5,8,1\n2006/7,25.6,8,1\n2006/8,27.5,8,1\n2006/9,23.5,8,1\n2006/10,19.5,8,1\n2006/11,14.4,8,1\n2006/12,9.5,8,1\n2007/1,7.6,8,1\n2007/2,8.6,8,1\n2007/3,10.8,8,1\n2007/4,13.7,8,1\n2007/5,19.8,8,1\n2007/6,23.2,8,1\n2007/7,24.4,8,1\n2007/8,29.0,8,1\n2007/9,25.2,8,1\n2007/10,19.0,8,1\n2007/11,13.3,8,1\n2007/12,9.0,8,1\n2008/1,5.9,8,1\n2008/2,5.5,8,1\n2008/3,10.7,8,1\n2008/4,14.7,8,1\n2008/5,18.5,8,1\n2008/6,21.3,8,1\n2008/7,27.0,8,1\n2008/8,26.8,8,1\n2008/9,24.4,8,1\n2008/10,19.4,8,1\n2008/11,13.1,8,1\n2008/12,9.8,8,1\n2009/1,6.8,8,1\n2009/2,7.8,8,1\n2009/3,10.0,8,1\n2009/4,15.7,8,1\n2009/5,20.1,8,1\n2009/6,22.5,8,1\n2009/7,26.3,8,1\n2009/8,26.6,8,1\n2009/9,23.0,8,1\n2009/10,19.0,8,1\n2009/11,13.5,8,1\n2009/12,9.0,8,1\n2010/1,7.0,8,1\n2010/2,6.5,8,1\n2010/3,9.1,8,1\n2010/4,12.4,8,1\n2010/5,19.0,8,1\n2010/6,23.6,8,1\n2010/7,28.0,8,1\n2010/8,29.6,8,1\n2010/9,25.1,8,1\n2010/10,18.9,8,1\n2010/11,13.5,8,1\n2010/12,9.9,8,1\n2011/1,5.1,8,1\n2011/2,7.0,8,1\n2011/3,8.1,8,1\n2011/4,14.5,8,1\n2011/5,18.5,8,1\n2011/6,22.8,8,1\n2011/7,27.3,8,1\n2011/8,27.5,8,1\n2011/9,25.1,8,1\n2011/10,19.5,8,1\n2011/11,14.9,8,1\n2011/12,7.5,8,1\n2012/1,4.8,8,1\n2012/2,5.4,8,1\n2012/3,8.8,8,1\n2012/4,14.5,8,1\n2012/5,19.6,8,1\n2012/6,21.4,8,1\n2012/7,26.4,8,1\n2012/8,29.1,8,1\n2012/9,26.2,8,1\n2012/10,19.4,8,1\n2012/11,12.7,8,1\n2012/12,7.3,8,1\n2013/1,5.5,8,1\n2013/2,6.2,8,1\n2013/3,12.1,8,1\n2013/4,15.2,8,1\n2013/5,19.8,8,1\n2013/6,22.9,8,1\n2013/7,27.3,8,1\n2013/8,29.2,8,1\n2013/9,25.2,8,1\n2013/10,19.8,8,1\n2013/11,13.5,8,1\n2013/12,8.3,8,1\n2014/1,6.3,8,1\n2014/2,5.9,8,1\n2014/3,10.4,8,1\n2014/4,15.0,8,1\n2014/5,20.3,8,1\n2014/6,23.4,8,1\n2014/7,26.8,8,1\n2014/8,27.7,8,1\n2014/9,23.2,8,1\n2014/10,19.1,8,1\n2014/11,14.2,8,1\n2014/12,6.7,8,2\n2015/1,5.8,8,2\n2015/2,5.7,8,2\n2015/3,10.3,8,2\n2015/4,14.5,8,2\n2015/5,21.1,8,2\n2015/6,22.1,8,2\n2015/7,26.2,8,2\n2015/8,26.7,8,2\n2015/9,22.6,8,2\n2015/10,18.4,8,2\n2015/11,13.9,8,2\n2015/12,9.3,8,2\n2016/1,6.1,8,2\n2016/2,7.2,8,2\n2016/3,10.1,8,2\n2016/4,15.4,8,2\n2016/5,20.2,8,2\n2016/6,22.4,8,2\n2016/7,25.4,8,2\n2016/8,27.1,8,2\n2016/9,24.4,8,2\n2016/10,18.7,8,2\n2016/11,11.4,8,2\n2016/12,8.9,8,2\n2017/1,5.8,8,2\n"
  },
  {
    "path": "colab/index.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# Pythonプログラミング入門\\n\",\n    \"\\n\",\n    \"▲で始まる項目は授業では扱いません。興味にしたがって学習してください。\\n\",\n    \"\\n\",\n    \"ノートブック全体に▲が付いているものもありますので注意してください。\\n\",\n    \"\\n\",\n    \"## [1-0. Colaboratory (Colab) の使い方](1/1-0.ipynb)\\n\",\n    \"\\n\",\n    \"- Colaboratoryの立ち上げ\\n\",\n    \"- 教材のオープン\\n\",\n    \"- ノートブックの操作\\n\",\n    \"- セル\\n\",\n    \"- セルの編集\\n\",\n    \"- 練習\\n\",\n    \"- セルの挿入\\n\",\n    \"- セルの実行が止まらないとき\\n\",\n    \"- セルの操作\\n\",\n    \"- ノートブックの参照\\n\",\n    \"- ノートブックのダウンロード\\n\",\n    \"\\n\",\n    \"## [1-1. 数値演算](1/1-1.ipynb)\\n\",\n    \"\\n\",\n    \"- 簡単な算術計算\\n\",\n    \"- コメント\\n\",\n    \"- 整数と実数\\n\",\n    \"- 演算子の優先順位と括弧\\n\",\n    \"- 算術演算子のまとめ\\n\",\n    \"- 空白\\n\",\n    \"- エラー\\n\",\n    \"- 数学関数（モジュールのインポート）\\n\",\n    \"- 練習\\n\",\n    \"\\n\",\n    \"## [1-2. 変数と関数の基礎](1/1-2.ipynb)\\n\",\n    \"\\n\",\n    \"- 変数\\n\",\n    \"- 関数の定義と返値\\n\",\n    \"- ローカル変数\\n\",\n    \"- `print`\\n\",\n    \"- `print` と `return`\\n\",\n    \"- コメントと空行\\n\",\n    \"- 関数の参照の書き方\\n\",\n    \"- ▲グローバル変数\\n\",\n    \"- 練習の解答\\n\",\n    \"\\n\",\n    \"## [1-3. 論理・比較演算と条件分岐の基礎](1/1-3.ipynb)\\n\",\n    \"\\n\",\n    \"- if文による条件分岐\\n\",\n    \"- 様々な条件\\n\",\n    \"- 真理値を返す関数\\n\",\n    \"- オブジェクト\\n\",\n    \"- `None`\\n\",\n    \"- ▲条件として使われる他の値\\n\",\n    \"- ▲再帰\\n\",\n    \"- 練習の解答\\n\",\n    \"\\n\",\n    \"## [1-4. テストとデバッグ](1/1-4.ipynb)\\n\",\n    \"\\n\",\n    \"- 仕様・テスト・デバッグ\\n\",\n    \"- assert文\\n\",\n    \"- エラーの分類\\n\",\n    \"- デバッグの具体例\\n\",\n    \"- コーディングスタイル\\n\",\n    \"\\n\",\n    \"## [2-1. 文字列 (string)](2/2-1.ipynb)\\n\",\n    \"\\n\",\n    \"- 文字列とインデックス\\n\",\n    \"- 文字列とスライス\\n\",\n    \"- 空文字列\\n\",\n    \"- 文字列の検索\\n\",\n    \"- ▲エスケープシーケンス\\n\",\n    \"- バックスラッシュの表示と入力\\n\",\n    \"- 文字列の連結\\n\",\n    \"- 文字列とメソッド\\n\",\n    \"- **文字列の比較演算**\\n\",\n    \"- 練習\\n\",\n    \"- 初心者によくある誤解 --- **変数**と**文字列**の混乱\\n\",\n    \"- 練習\\n\",\n    \"- 練習の解答\\n\",\n    \"\\n\",\n    \"## [2-2. リスト (list)](2/2-2.ipynb)\\n\",\n    \"\\n\",\n    \"- リストとインデックス\\n\",\n    \"- 練習\\n\",\n    \"- **多重リスト**\\n\",\n    \"- リストに対する関数・演算子・メソッド\\n\",\n    \"- 破壊的（インプレース）な操作と非破壊的な生成\\n\",\n    \"- リストを操作するメソッドなど\\n\",\n    \"- リストと文字列の相互変換\\n\",\n    \"- タプル (tuple)\\n\",\n    \"- 練習\\n\",\n    \"- 多重代入\\n\",\n    \"- リストやタプルの比較演算\\n\",\n    \"- for文による繰り返しとリスト・タプル\\n\",\n    \"- 練習\\n\",\n    \"- for文による繰り返しと文字列\\n\",\n    \"- 練習\\n\",\n    \"- for文によるリスト初期化の短縮記法\\n\",\n    \"- ▲オブジェクトの等価性と同一性\\n\",\n    \"- 練習の解答\\n\",\n    \"\\n\",\n    \"## [2-3. 条件分岐](2/2-3.ipynb)\\n\",\n    \"\\n\",\n    \"- インデントによる構文\\n\",\n    \"- **`if`** ... **`else`** による条件分岐\\n\",\n    \"- **`if`** ... **`elif`** ... **`else`** による条件分岐\\n\",\n    \"- 練習\\n\",\n    \"- 練習\\n\",\n    \"- ▲複数行にまたがる条件式\\n\",\n    \"- **`if`** ... **`elif`** ... **`else`** における条件の評価\\n\",\n    \"- 練習\\n\",\n    \"- `or` もしくは `and` で結合された条件の評価\\n\",\n    \"- ▲**3項演算子**（条件式）\\n\",\n    \"- 練習の解答\\n\",\n    \"- 練習の解説\\n\",\n    \"\\n\",\n    \"## [3-1. 辞書 (dictionary)](3/3-1.ipynb)\\n\",\n    \"\\n\",\n    \"- 練習\\n\",\n    \"- 辞書のメソッド\\n\",\n    \"- 辞書とリスト\\n\",\n    \"- 練習\\n\",\n    \"- 練習の解答\\n\",\n    \"\\n\",\n    \"## [3-2. 繰り返し](3/3-2.ipynb)\\n\",\n    \"\\n\",\n    \"- for文による繰り返し\\n\",\n    \"- for文による繰り返しと辞書\\n\",\n    \"- 練習\\n\",\n    \"- `range`\\n\",\n    \"- 練習\\n\",\n    \"- 練習\\n\",\n    \"- `range` とリスト\\n\",\n    \"- for文の**入れ子**\\n\",\n    \"- 練習\\n\",\n    \"- 練習\\n\",\n    \"- for文の**計算量**\\n\",\n    \"- **`enumerate`**\\n\",\n    \"- **`in`**\\n\",\n    \"- while文による繰り返し\\n\",\n    \"- 制御構造とreturn文\\n\",\n    \"- **break文**\\n\",\n    \"- 練習\\n\",\n    \"- **continue文**\\n\",\n    \"- ▲for文とwhile文における **`else`**\\n\",\n    \"- **pass文**\\n\",\n    \"- 練習\\n\",\n    \"- 練習\\n\",\n    \"- 練習\\n\",\n    \"- 練習\\n\",\n    \"- 練習\\n\",\n    \"- 練習\\n\",\n    \"- 練習\\n\",\n    \"- 練習\\n\",\n    \"- 練習\\n\",\n    \"- 練習の解答\\n\",\n    \"- 練習の解説\\n\",\n    \"- 練習の解答\\n\",\n    \"\\n\",\n    \"## [3-3. 関数](3/3-3.ipynb)\\n\",\n    \"\\n\",\n    \"- 関数の定義\\n\",\n    \"- 引数\\n\",\n    \"- 返値\\n\",\n    \"- 複数の引数\\n\",\n    \"- 変数とスコープ\\n\",\n    \"- ▲キーワード引数\\n\",\n    \"- ▲引数の初期値\\n\",\n    \"- ▲可変長引数\\n\",\n    \"- ▲辞書型の可変長引数\\n\",\n    \"- ▲引数の順番\\n\",\n    \"- ▲変数としての関数\\n\",\n    \"\\n\",\n    \"## [4-1. ファイル入出力の基本](4/4-1.ipynb)\\n\",\n    \"\\n\",\n    \"- ファイルのオープン\\n\",\n    \"- ファイルのクローズ\\n\",\n    \"- 行の読み込み\\n\",\n    \"- 練習\\n\",\n    \"- ファイル全体の読み込み\\n\",\n    \"- 練習\\n\",\n    \"- 編集中のファイルの動作\\n\",\n    \"- ファイルに対するwith文\\n\",\n    \"- ファイルへの書き込み\\n\",\n    \"- 練習\\n\",\n    \"- ファイルの読み書きにおける文字コード指定\\n\",\n    \"- 改行文字の削除\\n\",\n    \"- 練習の解答\\n\",\n    \"\\n\",\n    \"## [4-2. イテラブルとイテレータ](4/4-2.ipynb)\\n\",\n    \"\\n\",\n    \"- for文による繰り返しとファイルオブジェクト\\n\",\n    \"- for文とイテラブルとイテレータ\\n\",\n    \"- `iter`\\n\",\n    \"- `next`\\n\",\n    \"- for文の仕組み\\n\",\n    \"- イテレータは特殊なイテラブル\\n\",\n    \"- ファイルオブジェクトはイテレータ\\n\",\n    \"- イテラブルはイテレータではない\\n\",\n    \"- イテレータを返す `enumerate`\\n\",\n    \"- ▲イテラブルとイテレータの定義\\n\",\n    \"- 練習の解答\\n\",\n    \"\\n\",\n    \"## [4-3. ディレクトリと木構造](4/4-3.ipynb)\\n\",\n    \"\\n\",\n    \"- ディレクトリと階層構造\\n\",\n    \"- カレントワーキングディレクトリ\\n\",\n    \"- パス\\n\",\n    \"- 木構造\\n\",\n    \"- データ表現としての木構造\\n\",\n    \"\\n\",\n    \"## [5-1. モジュールの使い方](5/5-1.ipynb)\\n\",\n    \"\\n\",\n    \"- モジュールのインポート\\n\",\n    \"- `from`\\n\",\n    \"- `as`\\n\",\n    \"- 練習\\n\",\n    \"- 練習の解答\\n\",\n    \"\\n\",\n    \"## [5-2. モジュールの作り方](5/5-2.ipynb)\\n\",\n    \"\\n\",\n    \"- モジュールファイル\\n\",\n    \"- 自作モジュールの使い方\\n\",\n    \"\\n\",\n    \"## [5-3. NumPyライブラリ](5/5-3.ipynb)\\n\",\n    \"\\n\",\n    \"- 配列の構築\\n\",\n    \"- 配列要素を生成する構築関数\\n\",\n    \"- 練習\\n\",\n    \"- 配列要素の操作\\n\",\n    \"- 要素毎の演算\\n\",\n    \"- よく使われる配列操作\\n\",\n    \"- 配列の保存と復元\\n\",\n    \"- ▲**真理値配列によるインデックスアクセス**\\n\",\n    \"- ▲線形代数の演算\\n\",\n    \"- 練習の解答\\n\",\n    \"\\n\",\n    \"## [6-1. 内包表記](6/6-1.ipynb)\\n\",\n    \"\\n\",\n    \"- リスト内包表記\\n\",\n    \"- 練習\\n\",\n    \"- 練習\\n\",\n    \"- 練習\\n\",\n    \"- 内包表記の入れ子\\n\",\n    \"- 練習\\n\",\n    \"- 練習\\n\",\n    \"- ▲**条件付き内包表記**\\n\",\n    \"- ▲**セット内包表記**\\n\",\n    \"- ▲**辞書内包表記**\\n\",\n    \"- ▲**ジェネレータ式**\\n\",\n    \"- 練習の解答\\n\",\n    \"\\n\",\n    \"## [6-2. 高階関数](6/6-2.ipynb)\\n\",\n    \"\\n\",\n    \"- `max`\\n\",\n    \"- `sorted`\\n\",\n    \"- ラムダ式\\n\",\n    \"- リストからイテラブルへ\\n\",\n    \"- 練習\\n\",\n    \"- `map`\\n\",\n    \"- 練習\\n\",\n    \"- `filter`\\n\",\n    \"- 練習\\n\",\n    \"- 練習\\n\",\n    \"- 練習の解答\\n\",\n    \"\\n\",\n    \"## [6-3. クラス](6/6-3.ipynb)\\n\",\n    \"\\n\",\n    \"- クラス定義\\n\",\n    \"- 初期化と属性\\n\",\n    \"- 継承\\n\",\n    \"- 特殊メソッド\\n\",\n    \"- 継承による振舞いの改変\\n\",\n    \"- 練習\\n\",\n    \"- ▲with文への対応\\n\",\n    \"- 練習の解答\\n\",\n    \"\\n\",\n    \"## [7-1. pandasライブラリ](7/7-1.ipynb)\\n\",\n    \"\\n\",\n    \"- シリーズとデータフレーム\\n\",\n    \"- シリーズ (`Series`) の作成\\n\",\n    \"- データフレーム (`DataFrame`) の作成\\n\",\n    \"- CSVファイルからのデータフレームの作成\\n\",\n    \"- データの参照\\n\",\n    \"- データの条件取り出し\\n\",\n    \"- 列の追加と削除\\n\",\n    \"- 行の追加と削除\\n\",\n    \"- データの並び替え\\n\",\n    \"- データの統計量\\n\",\n    \"- ▲データの連結\\n\",\n    \"- ▲データの結合\\n\",\n    \"- ▲データのグループ化\\n\",\n    \"- ▲欠損値、時系列データの処理\\n\",\n    \"\\n\",\n    \"## [7-2. scikit-learnライブラリ](7/7-2.ipynb)\\n\",\n    \"\\n\",\n    \"- 機械学習について\\n\",\n    \"- 教師あり学習\\n\",\n    \"- 教師なし学習\\n\",\n    \"- データ\\n\",\n    \"- モデル学習の基礎\\n\",\n    \"- 教師あり学習・分類の例\\n\",\n    \"- 練習\\n\",\n    \"- 教師あり学習・回帰の例\\n\",\n    \"- 教師なし学習・クラスタリングの例\\n\",\n    \"- 練習\\n\",\n    \"- 教師なし学習・次元削減の例\\n\",\n    \"- 練習の解答例\\n\",\n    \"\\n\",\n    \"## [▲Jupyter Notebook の使い方](appendix/1-jupyter-notebook.ipynb)\\n\",\n    \"\\n\",\n    \"- セル\\n\",\n    \"- コマンドモード\\n\",\n    \"- 編集モード\\n\",\n    \"- 練習\\n\",\n    \"- （注意）Shift-Enterに反応がなくなったとき\\n\",\n    \"\\n\",\n    \"## [▲セット (set)](appendix/2-set.ipynb)\\n\",\n    \"\\n\",\n    \"- セットの組み込み関数\\n\",\n    \"- 練習\\n\",\n    \"- 練習\\n\",\n    \"- **集合演算**\\n\",\n    \"- **比較演算**\\n\",\n    \"- セットのメソッド\\n\",\n    \"- 練習\\n\",\n    \"- 練習の解答\\n\",\n    \"\\n\",\n    \"## [▲再帰](appendix/3-recursion.ipynb)\\n\",\n    \"\\n\",\n    \"- 再帰関数の例：接頭辞リストと接尾辞リスト\\n\",\n    \"- 再帰関数の例：べき乗の計算\\n\",\n    \"- 再帰関数の例：マージソート\\n\",\n    \"\\n\",\n    \"## [▲簡単なデータの可視化](appendix/3-visualization.ipynb)\\n\",\n    \"\\n\",\n    \"- **`matplotlib`**\\n\",\n    \"- 折れ線グラフ\\n\",\n    \"- 散布図\\n\",\n    \"- 棒グラフ\\n\",\n    \"\\n\",\n    \"## [▲CSVファイルの入出力](appendix/4-csv.ipynb)\\n\",\n    \"\\n\",\n    \"- CSV形式とは\\n\",\n    \"- CSVファイルの読み込み\\n\",\n    \"- CSVファイルに対するfor文\\n\",\n    \"- CSVファイルに対するwith文\\n\",\n    \"- CSVファイルの書き込み\\n\",\n    \"- 練習\\n\",\n    \"- 練習\\n\",\n    \"- 練習の解答\\n\",\n    \"\\n\",\n    \"## [▲Bokehライブラリ](appendix/5-bokeh.ipynb)\\n\",\n    \"\\n\",\n    \"- 線グラフ\\n\",\n    \"- 散布図\\n\",\n    \"- 棒グラフ\\n\",\n    \"- ヒストグラム\\n\",\n    \"- ヒートマップ\\n\",\n    \"- グラフのファイル出力\\n\",\n    \"\\n\",\n    \"## [▲Pythonスクリプトとコマンドライン実行](appendix/5-command.ipynb)\\n\",\n    \"\\n\",\n    \"- コマンドライン実行の具体例\\n\",\n    \"- コマンドライン引数\\n\",\n    \"- モジュールのコマンドライン実行\\n\",\n    \"- ソースファイル先頭部分にある宣言\\n\",\n    \"- 練習の解答\\n\",\n    \"\\n\",\n    \"## [▲Matplotlibライブラリ](appendix/5-matplotlib.ipynb)\\n\",\n    \"\\n\",\n    \"- 線グラフ\\n\",\n    \"- 練習\\n\",\n    \"- 練習\\n\",\n    \"- 散布図\\n\",\n    \"- 練習\\n\",\n    \"- 棒グラフ\\n\",\n    \"- 練習\\n\",\n    \"- ヒストグラム\\n\",\n    \"- 練習\\n\",\n    \"- ヒートマップ\\n\",\n    \"- 練習\\n\",\n    \"- グラフの画像ファイル出力\\n\",\n    \"- 練習の解答\\n\",\n    \"\\n\",\n    \"## [▲正規表現](appendix/5-re.ipynb)\\n\",\n    \"\\n\",\n    \"- 正規表現の基本\\n\",\n    \"- 練習\\n\",\n    \"- 練習\\n\",\n    \"- 練習\\n\",\n    \"- 練習\\n\",\n    \"- 練習\\n\",\n    \"- 文字クラス\\n\",\n    \"- 正規表現に関する基本的な関数\\n\",\n    \"- 練習\\n\",\n    \"- 練習\\n\",\n    \"- その他の反復演算\\n\",\n    \"- メタ文字\\n\",\n    \"- 練習\\n\",\n    \"- 練習\\n\",\n    \"- 練習\\n\",\n    \"- 練習\\n\",\n    \"- 正規表現のエスケープシーケンス\\n\",\n    \"- 正規表現に関する関数とメソッド\\n\",\n    \"- 練習\\n\",\n    \"- 練習\\n\",\n    \"- 練習の解答\\n\",\n    \"\\n\",\n    \"## [索引](index_of_terms.ipynb)\\n\",\n    \"\\n\",\n    \"\\n\"\n   ]\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"Python 3\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"name\": \"python\"\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 4\n}\n"
  },
  {
    "path": "colab/index_of_terms.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# 索引\\n\",\n    \"\\n\",\n    \"- `!=` [1/1-3#様々な条件](1/1-3.ipynb#様々な条件)\\n\",\n    \"- `#` [1/1-1#コメント](1/1-1.ipynb#コメント)\\n\",\n    \"- `%` [1/1-1#簡単な算術計算](1/1-1.ipynb#簡単な算術計算)\\n\",\n    \"- `>` [1/1-3#様々な条件](1/1-3.ipynb#様々な条件)\\n\",\n    \"- `>=` [1/1-3#様々な条件](1/1-3.ipynb#様々な条件)\\n\",\n    \"- `<` [1/1-3#様々な条件](1/1-3.ipynb#様々な条件)\\n\",\n    \"- `<=` [1/1-3#様々な条件](1/1-3.ipynb#様々な条件)\\n\",\n    \"- `*` [1/1-1#簡単な算術計算](1/1-1.ipynb#簡単な算術計算), [3/3-3#▲可変長引数](3/3-3.ipynb#▲可変長引数), [3/3-3#▲可変長引数](3/3-3.ipynb#▲可変長引数), [2/2-1#文字列の連結](2/2-1.ipynb#文字列の連結), [2/2-2#リストと演算子](2/2-2.ipynb#リストと演算子), [5/5-1#`from`](5/5-1.ipynb#from), [5/5-2#自作モジュールの使い方](5/5-2.ipynb#自作モジュールの使い方)\\n\",\n    \"- `**` [1/1-1#簡単な算術計算](1/1-1.ipynb#簡単な算術計算), [3/3-3#▲辞書型の可変長引数](3/3-3.ipynb#▲辞書型の可変長引数)\\n\",\n    \"- `+` [1/1-1#簡単な算術計算](1/1-1.ipynb#簡単な算術計算), [1/1-1#単項の `+` と `-`](1/1-1.ipynb#単項の-+-と--), [2/2-1#文字列の連結](2/2-1.ipynb#文字列の連結), [2/2-2#リストと演算子](2/2-2.ipynb#リストと演算子)\\n\",\n    \"- `+=` [1/1-2#累積代入文](1/1-2.ipynb#累積代入文)\\n\",\n    \"- `-` [1/1-1#簡単な算術計算](1/1-1.ipynb#簡単な算術計算), [1/1-1#単項の `+` と `-`](1/1-1.ipynb#単項の-+-と--)\\n\",\n    \"- `-=` [1/1-2#累積代入文](1/1-2.ipynb#累積代入文)\\n\",\n    \"- `.` [appendix/5-re#メタ文字](appendix/5-re.ipynb#メタ文字)\\n\",\n    \"- `/` [1/1-1#簡単な算術計算](1/1-1.ipynb#簡単な算術計算)\\n\",\n    \"- `//` [1/1-1#簡単な算術計算](1/1-1.ipynb#簡単な算術計算)\\n\",\n    \"- 2項演算子 [1/1-1#単項の `+` と `-`](1/1-1.ipynb#単項の-+-と--)\\n\",\n    \"- 3項演算子 [2/2-3#▲3項演算子（条件式）](2/2-3.ipynb#▲3項演算子（条件式）)\\n\",\n    \"- `=` [1/1-2#変数](1/1-2.ipynb#変数), [1/1-2#代入文](1/1-2.ipynb#代入文)\\n\",\n    \"- `==` [1/1-3#様々な条件](1/1-3.ipynb#様々な条件)\\n\",\n    \"- CSV [appendix/4-csv#CSV形式とは](appendix/4-csv.ipynb#CSV形式とは)\\n\",\n    \"- CSVファイル [7/7-1#CSVファイルからのデータフレームの作成](7/7-1.ipynb#CSVファイルからのデータフレームの作成)\\n\",\n    \"- CSVライター [appendix/4-csv#CSVファイルの書き込み](appendix/4-csv.ipynb#CSVファイルの書き込み)\\n\",\n    \"- CSVリーダ [appendix/4-csv#CSVファイルの読み込み](appendix/4-csv.ipynb#CSVファイルの読み込み)\\n\",\n    \"- `DataFrame` [7/7-1#シリーズとデータフレーム](7/7-1.ipynb#シリーズとデータフレーム)\\n\",\n    \"- `False` [1/1-3#真理値を返す関数](1/1-3.ipynb#真理値を返す関数)\\n\",\n    \"- `KMeans` [7/7-2#教師なし学習・クラスタリングの例](7/7-2.ipynb#教師なし学習・クラスタリングの例)\\n\",\n    \"- `LinearRegression` [7/7-2#教師あり学習・回帰の例](7/7-2.ipynb#教師あり学習・回帰の例)\\n\",\n    \"- `LogisticRegression` [7/7-2#教師あり学習・分類の例](7/7-2.ipynb#教師あり学習・分類の例)\\n\",\n    \"- Matplotlib [appendix/5-matplotlib#▲Matplotlibライブラリ](appendix/5-matplotlib.ipynb#▲Matplotlibライブラリ)\\n\",\n    \"- `None` [1/1-2#関数の定義と返値](1/1-2.ipynb#関数の定義と返値), [1/1-3#`None`](1/1-3.ipynb#None), [3/3-3#返値](3/3-3.ipynb#返値)\\n\",\n    \"- NumPy [appendix/5-matplotlib#線グラフ](appendix/5-matplotlib.ipynb#線グラフ), [5/5-3#5-3. NumPyライブラリ](5/5-3.ipynb#5-3.-NumPyライブラリ)\\n\",\n    \"- `PCA` [7/7-2#教師なし学習・次元削減の例](7/7-2.ipynb#教師なし学習・次元削減の例)\\n\",\n    \"- PEP8 [1/1-4#コーディングスタイル](1/1-4.ipynb#コーディングスタイル)\\n\",\n    \"- Pythonスクリプト [appendix/5-command#▲Pythonスクリプトとコマンドライン実行](appendix/5-command.ipynb#▲Pythonスクリプトとコマンドライン実行)\\n\",\n    \"- `Series` [7/7-1#シリーズとデータフレーム](7/7-1.ipynb#シリーズとデータフレーム)\\n\",\n    \"- `StopIteration` [6/6-3#特殊メソッド](6/6-3.ipynb#特殊メソッド)\\n\",\n    \"- `True` [1/1-3#真理値を返す関数](1/1-3.ipynb#真理値を返す関数)\\n\",\n    \"- `\\\\` [2/2-3#▲複数行にまたがる条件式](2/2-3.ipynb#▲複数行にまたがる条件式)\\n\",\n    \"- `\\\\D` [appendix/5-re#メタ文字](appendix/5-re.ipynb#メタ文字)\\n\",\n    \"- `\\\\S` [appendix/5-re#メタ文字](appendix/5-re.ipynb#メタ文字)\\n\",\n    \"- `\\\\W` [appendix/5-re#メタ文字](appendix/5-re.ipynb#メタ文字)\\n\",\n    \"- `\\\\d` [appendix/5-re#メタ文字](appendix/5-re.ipynb#メタ文字)\\n\",\n    \"- `\\\\s` [appendix/5-re#メタ文字](appendix/5-re.ipynb#メタ文字)\\n\",\n    \"- `\\\\t` [appendix/5-re#メタ文字](appendix/5-re.ipynb#メタ文字)\\n\",\n    \"- `\\\\w` [appendix/5-re#メタ文字](appendix/5-re.ipynb#メタ文字)\\n\",\n    \"- `__enter__` [6/6-3#▲with文への対応](6/6-3.ipynb#▲with文への対応)\\n\",\n    \"- `__exit__` [6/6-3#▲with文への対応](6/6-3.ipynb#▲with文への対応)\\n\",\n    \"- `__init__` [6/6-3#初期化と属性](6/6-3.ipynb#初期化と属性)\\n\",\n    \"- `__iter__` [6/6-3#特殊メソッド](6/6-3.ipynb#特殊メソッド), [4/4-2#▲イテラブルとイテレータの定義](4/4-2.ipynb#▲イテラブルとイテレータの定義)\\n\",\n    \"- `__name__` [appendix/5-command#モジュールのコマンドライン実行](appendix/5-command.ipynb#モジュールのコマンドライン実行)\\n\",\n    \"- `__next__` [6/6-3#特殊メソッド](6/6-3.ipynb#特殊メソッド), [4/4-2#▲イテラブルとイテレータの定義](4/4-2.ipynb#▲イテラブルとイテレータの定義)\\n\",\n    \"- `a*` [appendix/5-re#正規表現の基本](appendix/5-re.ipynb#正規表現の基本)\\n\",\n    \"- `a+` [appendix/5-re#その他の反復演算](appendix/5-re.ipynb#その他の反復演算)\\n\",\n    \"- `a?` [appendix/5-re#その他の反復演算](appendix/5-re.ipynb#その他の反復演算)\\n\",\n    \"- add [appendix/2-set#add](appendix/2-set.ipynb#add)\\n\",\n    \"- `and` [1/1-3#様々な条件](1/1-3.ipynb#様々な条件)\\n\",\n    \"- `append` [2/2-2#リストに要素を追加する](2/2-2.ipynb#リストに要素を追加する)\\n\",\n    \"- argument [3/3-3#引数](3/3-3.ipynb#引数)\\n\",\n    \"- `as` [4/4-1#ファイルに対するwith文](4/4-1.ipynb#ファイルに対するwith文), [5/5-1#`as`](5/5-1.ipynb#as), [5/5-2#自作モジュールの使い方](5/5-2.ipynb#自作モジュールの使い方)\\n\",\n    \"- `ascending` [7/7-1#データの並び替え](7/7-1.ipynb#データの並び替え)\\n\",\n    \"- assert文 [1/1-4#assert文](1/1-4.ipynb#assert文)\\n\",\n    \"- `assign` [7/7-1#列の追加と削除](7/7-1.ipynb#列の追加と削除)\\n\",\n    \"- assignment [1/1-2#代入文](1/1-2.ipynb#代入文)\\n\",\n    \"- assignment statement [1/1-2#代入文](1/1-2.ipynb#代入文)\\n\",\n    \"- augmented assignment statement [1/1-2#累積代入文](1/1-2.ipynb#累積代入文)\\n\",\n    \"- `axis` [7/7-1#列の追加と削除](7/7-1.ipynb#列の追加と削除)\\n\",\n    \"- `a{x,y}` [appendix/5-re#その他の反復演算](appendix/5-re.ipynb#その他の反復演算)\\n\",\n    \"- `bar` [appendix/5-matplotlib#棒グラフ](appendix/5-matplotlib.ipynb#棒グラフ)\\n\",\n    \"- `bokeh` [appendix/5-bokeh#▲Bokehライブラリ](appendix/5-bokeh.ipynb#▲Bokehライブラリ)\\n\",\n    \"- `bokeh.models.ColumnDataSource` [appendix/5-bokeh#ヒートマップ](appendix/5-bokeh.ipynb#ヒートマップ)\\n\",\n    \"- `bokeh.models.LinearColorMapper` [appendix/5-bokeh#ヒートマップ](appendix/5-bokeh.ipynb#ヒートマップ)\\n\",\n    \"- `bokeh.plotting` [appendix/5-bokeh#線グラフ](appendix/5-bokeh.ipynb#線グラフ)\\n\",\n    \"- `bokeh.plotting.figure` [appendix/5-bokeh#線グラフ](appendix/5-bokeh.ipynb#線グラフ)\\n\",\n    \"- `bokeh.plotting.output_file` [appendix/5-bokeh#グラフのファイル出力](appendix/5-bokeh.ipynb#グラフのファイル出力)\\n\",\n    \"- `bokeh.plotting.output_notebook` [appendix/5-bokeh#線グラフ](appendix/5-bokeh.ipynb#線グラフ)\\n\",\n    \"- `bokeh.plotting.reset_output` [appendix/5-bokeh#グラフのファイル出力](appendix/5-bokeh.ipynb#グラフのファイル出力)\\n\",\n    \"- `bokeh.plotting.show` [appendix/5-bokeh#線グラフ](appendix/5-bokeh.ipynb#線グラフ)\\n\",\n    \"- break文 [3/3-2#break文](3/3-2.ipynb#break文), [3/3-2#break文](3/3-2.ipynb#break文)\\n\",\n    \"- `capitalize` [2/2-1#大文字・小文字](2/2-1.ipynb#大文字・小文字)\\n\",\n    \"- `chr` [3/3-2#for文による繰り返し](3/3-2.ipynb#for文による繰り返し)\\n\",\n    \"- `circle` [appendix/5-bokeh#線グラフ](appendix/5-bokeh.ipynb#線グラフ)\\n\",\n    \"- clear [appendix/2-set#clear](appendix/2-set.ipynb#clear)\\n\",\n    \"- `clear` [3/3-1#▲全てのキーと値の削除](3/3-1.ipynb#▲全てのキーと値の削除)\\n\",\n    \"- `close` [4/4-1#ファイルのクローズ](4/4-1.ipynb#ファイルのクローズ)\\n\",\n    \"- `complex` [appendix/4-csv#CSVファイルの読み込み](appendix/4-csv.ipynb#CSVファイルの読み込み)\\n\",\n    \"- `concat` [7/7-1#行の追加と削除](7/7-1.ipynb#行の追加と削除), [7/7-1#▲データの連結](7/7-1.ipynb#▲データの連結)\\n\",\n    \"- continue文 [3/3-2#continue文](3/3-2.ipynb#continue文)\\n\",\n    \"- `copy` [3/3-1#▲辞書を複製する](3/3-1.ipynb#▲辞書を複製する), [2/2-2#▲ `copy`](2/2-2.ipynb#▲-copy)\\n\",\n    \"- `count` [2/2-1#数え上げ](2/2-1.ipynb#数え上げ), [2/2-2#指定した要素のインデックス取得と数えあげ](2/2-2.ipynb#指定した要素のインデックス取得と数えあげ)\\n\",\n    \"- `cross` [appendix/5-bokeh#線グラフ](appendix/5-bokeh.ipynb#線グラフ)\\n\",\n    \"- `csv` [appendix/4-csv#CSVファイルの読み込み](appendix/4-csv.ipynb#CSVファイルの読み込み), [appendix/4-csv#CSVファイルの書き込み](appendix/4-csv.ipynb#CSVファイルの書き込み)\\n\",\n    \"- `csv.reader` [appendix/4-csv#CSVファイルの読み込み](appendix/4-csv.ipynb#CSVファイルの読み込み)\\n\",\n    \"- `csv.writer` [appendix/4-csv#CSVファイルの書き込み](appendix/4-csv.ipynb#CSVファイルの書き込み)\\n\",\n    \"- `def` [1/1-2#関数の定義と返値](1/1-2.ipynb#関数の定義と返値), [3/3-3#関数の定義](3/3-3.ipynb#関数の定義)\\n\",\n    \"- `del` [7/7-1#列の追加と削除](7/7-1.ipynb#列の追加と削除), [3/3-1#3-1. 辞書 (dictionary)](3/3-1.ipynb#3-1.-辞書-(dictionary)), [2/2-2#▲リスト要素を削除する](2/2-2.ipynb#▲リスト要素を削除する)\\n\",\n    \"- `describe` [7/7-1#データの統計量](7/7-1.ipynb#データの統計量)\\n\",\n    \"- difference [appendix/2-set#union, intersection, difference](appendix/2-set.ipynb#union,-intersection,-difference)\\n\",\n    \"- discard [appendix/2-set#discard](appendix/2-set.ipynb#discard)\\n\",\n    \"- `drop` [7/7-1#列の追加と削除](7/7-1.ipynb#列の追加と削除), [7/7-1#行の追加と削除](7/7-1.ipynb#行の追加と削除)\\n\",\n    \"- `elif` [2/2-3#`if` ... `elif` ... `else` による条件分岐](2/2-3.ipynb#if-...-elif-...-else-による条件分岐), [2/2-3#`if` ... `elif` ... `else` による条件分岐](2/2-3.ipynb#if-...-elif-...-else-による条件分岐), [2/2-3#`if` ... `elif` ... `else` における条件の評価](2/2-3.ipynb#if-...-elif-...-else-における条件の評価)\\n\",\n    \"- `else` [1/1-3#if文による条件分岐](1/1-3.ipynb#if文による条件分岐), [3/3-2#▲for文とwhile文における `else`](3/3-2.ipynb#▲for文とwhile文における-else), [2/2-3#`if` ... `else` による条件分岐](2/2-3.ipynb#if-...-else-による条件分岐), [2/2-3#`if` ... `elif` ... `else` による条件分岐](2/2-3.ipynb#if-...-elif-...-else-による条件分岐), [2/2-3#`if` ... `elif` ... `else` における条件の評価](2/2-3.ipynb#if-...-elif-...-else-における条件の評価)\\n\",\n    \"- `encoding` [appendix/4-csv#東京の7月の気温](appendix/4-csv.ipynb#東京の7月の気温)\\n\",\n    \"- `enumerate` [4/4-2#イテレータを返す `enumerate`](4/4-2.ipynb#イテレータを返す-enumerate), [3/3-2#`enumerate`](3/3-2.ipynb#enumerate)\\n\",\n    \"- `extend` [2/2-2#▲リストにリストの要素を追加する](2/2-2.ipynb#▲リストにリストの要素を追加する)\\n\",\n    \"- `filter` [6/6-2#`filter`](6/6-2.ipynb#filter)\\n\",\n    \"- `find` [2/2-1#検索](2/2-1.ipynb#検索)\\n\",\n    \"- `findall` [appendix/5-re#`findall`](appendix/5-re.ipynb#findall)\\n\",\n    \"- `finditer` [appendix/5-re#`finditer`](appendix/5-re.ipynb#finditer)\\n\",\n    \"- `fit` [7/7-2#教師あり学習・分類の例](7/7-2.ipynb#教師あり学習・分類の例)\\n\",\n    \"- `flatten` [5/5-3#多次元配列](5/5-3.ipynb#多次元配列)\\n\",\n    \"- `float` [appendix/4-csv#CSVファイルの読み込み](appendix/4-csv.ipynb#CSVファイルの読み込み), [1/1-1#整数と実数の間の変換](1/1-1.ipynb#整数と実数の間の変換), [2/2-1#2-1. 文字列 (string)](2/2-1.ipynb#2-1.-文字列-(string))\\n\",\n    \"- `for` [3/3-2#for文による繰り返し](3/3-2.ipynb#for文による繰り返し)\\n\",\n    \"- for文 [3/3-2#for文による繰り返し](3/3-2.ipynb#for文による繰り返し), [2/2-2#for文による繰り返しとリスト・タプル](2/2-2.ipynb#for文による繰り返しとリスト・タプル)\\n\",\n    \"- `from` [5/5-1#`from`](5/5-1.ipynb#from), [5/5-2#自作モジュールの使い方](5/5-2.ipynb#自作モジュールの使い方)\\n\",\n    \"- `get` [3/3-1#キーを指定して値を得るメソッド](3/3-1.ipynb#キーを指定して値を得るメソッド)\\n\",\n    \"- `global` [3/3-3#▲ global 宣言](3/3-3.ipynb#▲-global-宣言)\\n\",\n    \"- `grid` [appendix/5-matplotlib#線グラフ](appendix/5-matplotlib.ipynb#線グラフ)\\n\",\n    \"- `group` [appendix/5-re#`group`](appendix/5-re.ipynb#group)\\n\",\n    \"- `groupby` [7/7-1#▲データのグループ化](7/7-1.ipynb#▲データのグループ化)\\n\",\n    \"- `head` [7/7-1#CSVファイルからのデータフレームの作成](7/7-1.ipynb#CSVファイルからのデータフレームの作成)\\n\",\n    \"- `hist` [appendix/5-matplotlib#ヒストグラム](appendix/5-matplotlib.ipynb#ヒストグラム)\\n\",\n    \"- `if` [1/1-3#if文による条件分岐](1/1-3.ipynb#if文による条件分岐), [2/2-3#2-3. 条件分岐](2/2-3.ipynb#2-3.-条件分岐), [2/2-3#`if` ... `else` による条件分岐](2/2-3.ipynb#if-...-else-による条件分岐), [2/2-3#`if` ... `elif` ... `else` による条件分岐](2/2-3.ipynb#if-...-elif-...-else-による条件分岐), [2/2-3#`if` ... `elif` ... `else` における条件の評価](2/2-3.ipynb#if-...-elif-...-else-における条件の評価)\\n\",\n    \"- if文 [1/1-3#if文による条件分岐](1/1-3.ipynb#if文による条件分岐)\\n\",\n    \"- `iloc` [7/7-1#`iloc` と `loc`](7/7-1.ipynb#iloc-と-loc)\\n\",\n    \"- `import` [1/1-1#数学関数（モジュールのインポート）](1/1-1.ipynb#数学関数（モジュールのインポート）), [5/5-1#モジュールのインポート](5/5-1.ipynb#モジュールのインポート), [5/5-2#自作モジュールの使い方](5/5-2.ipynb#自作モジュールの使い方)\\n\",\n    \"- `in` [3/3-1#3-1. 辞書 (dictionary)](3/3-1.ipynb#3-1.-辞書-(dictionary)), [3/3-2#for文による繰り返し](3/3-2.ipynb#for文による繰り返し), [3/3-2#`in`](3/3-2.ipynb#in), [3/3-2#`in`](3/3-2.ipynb#in), [2/2-1#文字列の検索](2/2-1.ipynb#文字列の検索), [2/2-2#リストと演算子](2/2-2.ipynb#リストと演算子)\\n\",\n    \"- in-place [2/2-2#破壊的（インプレース）な操作と非破壊的な生成](2/2-2.ipynb#破壊的（インプレース）な操作と非破壊的な生成)\\n\",\n    \"- `index` [7/7-1#CSVファイルからのデータフレームの作成](7/7-1.ipynb#CSVファイルからのデータフレームの作成), [2/2-1#検索](2/2-1.ipynb#検索), [2/2-2#指定した要素のインデックス取得と数えあげ](2/2-2.ipynb#指定した要素のインデックス取得と数えあげ)\\n\",\n    \"- `inplace` [7/7-1#データの並び替え](7/7-1.ipynb#データの並び替え)\\n\",\n    \"- insert [2/2-2#▲リストに要素を挿入する](2/2-2.ipynb#▲リストに要素を挿入する)\\n\",\n    \"- `int` [appendix/4-csv#CSVファイルの読み込み](appendix/4-csv.ipynb#CSVファイルの読み込み), [6/6-1#練習](6/6-1.ipynb#練習), [1/1-1#整数と実数の間の変換](1/1-1.ipynb#整数と実数の間の変換), [2/2-1#2-1. 文字列 (string)](2/2-1.ipynb#2-1.-文字列-(string))\\n\",\n    \"- intersection [appendix/2-set#union, intersection, difference](appendix/2-set.ipynb#union,-intersection,-difference)\\n\",\n    \"- `is` [4/4-2#イテレータは特殊なイテラブル](4/4-2.ipynb#イテレータは特殊なイテラブル), [2/2-2#▲オブジェクトの等価性と同一性](2/2-2.ipynb#▲オブジェクトの等価性と同一性)\\n\",\n    \"- `is not` [2/2-2#▲オブジェクトの等価性と同一性](2/2-2.ipynb#▲オブジェクトの等価性と同一性)\\n\",\n    \"- `items` [3/3-1#キーと値の一覧を得る](3/3-1.ipynb#キーと値の一覧を得る), [3/3-2#for文による繰り返しと辞書](3/3-2.ipynb#for文による繰り返しと辞書)\\n\",\n    \"- `iter` [4/4-2#`iter`](4/4-2.ipynb#iter)\\n\",\n    \"- `join` [2/2-2#リストと文字列の相互変換](2/2-2.ipynb#リストと文字列の相互変換)\\n\",\n    \"- `key` [6/6-2#`max`](6/6-2.ipynb#max), [6/6-2#`sorted`](6/6-2.ipynb#sorted)\\n\",\n    \"- key [3/3-1#3-1. 辞書 (dictionary)](3/3-1.ipynb#3-1.-辞書-(dictionary))\\n\",\n    \"- `keys` [3/3-1#キーの一覧を得る](3/3-1.ipynb#キーの一覧を得る), [3/3-1#キーの一覧を得る](3/3-1.ipynb#キーの一覧を得る), [3/3-2#for文による繰り返しと辞書](3/3-2.ipynb#for文による繰り返しと辞書)\\n\",\n    \"- `lambda` [6/6-2#ラムダ式](6/6-2.ipynb#ラムダ式)\\n\",\n    \"- `legend` [appendix/5-matplotlib#線グラフ](appendix/5-matplotlib.ipynb#線グラフ)\\n\",\n    \"- `len` [3/3-1#3-1. 辞書 (dictionary)](3/3-1.ipynb#3-1.-辞書-(dictionary)), [2/2-1#2-1. 文字列 (string)](2/2-1.ipynb#2-1.-文字列-(string)), [2/2-2#リストの要素数](2/2-2.ipynb#リストの要素数)\\n\",\n    \"- `line` [appendix/5-bokeh#線グラフ](appendix/5-bokeh.ipynb#線グラフ)\\n\",\n    \"- `list` [2/2-2#2-2. リスト (list)](2/2-2.ipynb#2-2.-リスト-(list)), [2/2-2#タプル (tuple)](2/2-2.ipynb#タプル-(tuple))\\n\",\n    \"- `loc` [7/7-1#`iloc` と `loc`](7/7-1.ipynb#iloc-と-loc)\\n\",\n    \"- `lower` [2/2-1#大文字・小文字](2/2-1.ipynb#大文字・小文字)\\n\",\n    \"- `map` [6/6-2#`map`](6/6-2.ipynb#map)\\n\",\n    \"- `match` [appendix/5-re#正規表現の基本](appendix/5-re.ipynb#正規表現の基本)\\n\",\n    \"- matchオブジェクト [appendix/5-re#正規表現の基本](appendix/5-re.ipynb#正規表現の基本)\\n\",\n    \"- `math` [1/1-1#数学関数（モジュールのインポート）](1/1-1.ipynb#数学関数（モジュールのインポート）)\\n\",\n    \"- `math.cos` [1/1-1#数学関数（モジュールのインポート）](1/1-1.ipynb#数学関数（モジュールのインポート）)\\n\",\n    \"- `math.pi` [1/1-1#数学関数（モジュールのインポート）](1/1-1.ipynb#数学関数（モジュールのインポート）)\\n\",\n    \"- `math.sin` [1/1-1#数学関数（モジュールのインポート）](1/1-1.ipynb#数学関数（モジュールのインポート）)\\n\",\n    \"- `math.sqrt` [1/1-1#数学関数（モジュールのインポート）](1/1-1.ipynb#数学関数（モジュールのインポート）)\\n\",\n    \"- `matplotlib` [appendix/3-visualization#`matplotlib`](appendix/3-visualization.ipynb#matplotlib)\\n\",\n    \"- `max` [6/6-2#`max`](6/6-2.ipynb#max), [2/2-2#`max` と `min`](2/2-2.ipynb#max-と-min), [5/5-3#`sum`, `max`, `min`, `mean`](5/5-3.ipynb#sum,-max,-min,-mean)\\n\",\n    \"- `mean` [5/5-3#`sum`, `max`, `min`, `mean`](5/5-3.ipynb#sum,-max,-min,-mean)\\n\",\n    \"- `merge` [7/7-1#▲データの結合](7/7-1.ipynb#▲データの結合)\\n\",\n    \"- `min` [2/2-2#`max` と `min`](2/2-2.ipynb#max-と-min), [5/5-3#`sum`, `max`, `min`, `mean`](5/5-3.ipynb#sum,-max,-min,-mean)\\n\",\n    \"- `next` [4/4-2#`next`](4/4-2.ipynb#next)\\n\",\n    \"- `not` [1/1-3#様々な条件](1/1-3.ipynb#様々な条件)\\n\",\n    \"- `not in` [3/3-2#`in`](3/3-2.ipynb#in), [2/2-1#文字列の検索](2/2-1.ipynb#文字列の検索), [2/2-2#リストと演算子](2/2-2.ipynb#リストと演算子)\\n\",\n    \"- `numpy` [5/5-3#5-3. NumPyライブラリ](5/5-3.ipynb#5-3.-NumPyライブラリ)\\n\",\n    \"- `numpy.arange` [5/5-3#`arange`](5/5-3.ipynb#arange)\\n\",\n    \"- `numpy.array` [5/5-3#配列の構築](5/5-3.ipynb#配列の構築)\\n\",\n    \"- `numpy.bool_` [5/5-3#要素型](5/5-3.ipynb#要素型)\\n\",\n    \"- `numpy.complex128` [5/5-3#要素型](5/5-3.ipynb#要素型)\\n\",\n    \"- `numpy.dot` [5/5-3#`dot`](5/5-3.ipynb#dot)\\n\",\n    \"- `numpy.float64` [5/5-3#要素型](5/5-3.ipynb#要素型)\\n\",\n    \"- `numpy.histogram` [appendix/5-bokeh#ヒストグラム](appendix/5-bokeh.ipynb#ヒストグラム)\\n\",\n    \"- `numpy.identity` [5/5-3#▲線形代数の演算](5/5-3.ipynb#▲線形代数の演算)\\n\",\n    \"- `numpy.int32` [5/5-3#要素型](5/5-3.ipynb#要素型)\\n\",\n    \"- `numpy.linalg` [5/5-3#▲線形代数の演算](5/5-3.ipynb#▲線形代数の演算)\\n\",\n    \"- `numpy.linalg.norm` [5/5-3#▲線形代数の演算](5/5-3.ipynb#▲線形代数の演算)\\n\",\n    \"- `numpy.linspace` [5/5-3#`linspace`](5/5-3.ipynb#linspace)\\n\",\n    \"- `numpy.loadtxt` [5/5-3#配列の保存と復元](5/5-3.ipynb#配列の保存と復元)\\n\",\n    \"- `numpy.matmul` [5/5-3#▲線形代数の演算](5/5-3.ipynb#▲線形代数の演算)\\n\",\n    \"- `numpy.ndarray` [5/5-3#配列の構築](5/5-3.ipynb#配列の構築)\\n\",\n    \"- `numpy.ones` [5/5-3#`zeros` と `ones`](5/5-3.ipynb#zeros-と-ones)\\n\",\n    \"- `numpy.random.binomial` [5/5-3#`random.rand`](5/5-3.ipynb#random.rand)\\n\",\n    \"- `numpy.random.poisson` [5/5-3#`random.rand`](5/5-3.ipynb#random.rand)\\n\",\n    \"- `numpy.random.rand` [5/5-3#`random.rand`](5/5-3.ipynb#random.rand)\\n\",\n    \"- `numpy.random.randn` [5/5-3#`random.rand`](5/5-3.ipynb#random.rand)\\n\",\n    \"- `numpy.savetxt` [5/5-3#配列の保存と復元](5/5-3.ipynb#配列の保存と復元)\\n\",\n    \"- `numpy.sort` [5/5-3#`sort`](5/5-3.ipynb#sort)\\n\",\n    \"- `numpy.sqrt` [5/5-3#ユニバーサル関数](5/5-3.ipynb#ユニバーサル関数)\\n\",\n    \"- `numpy.zeros` [5/5-3#`zeros` と `ones`](5/5-3.ipynb#zeros-と-ones)\\n\",\n    \"- `on` [7/7-1#▲データの結合](7/7-1.ipynb#▲データの結合)\\n\",\n    \"- `open` [4/4-1#ファイルのオープン](4/4-1.ipynb#ファイルのオープン)\\n\",\n    \"- `or` [1/1-3#様々な条件](1/1-3.ipynb#様々な条件)\\n\",\n    \"- `ord` [3/3-2#for文による繰り返し](3/3-2.ipynb#for文による繰り返し)\\n\",\n    \"- `os.chdir` [4/4-3#カレントワーキングディレクトリ](4/4-3.ipynb#カレントワーキングディレクトリ)\\n\",\n    \"- pandas [7/7-1#7-1. pandasライブラリ](7/7-1.ipynb#7-1.-pandasライブラリ)\\n\",\n    \"- parameter [3/3-3#引数](3/3-3.ipynb#引数)\\n\",\n    \"- pass文 [3/3-2#pass文](3/3-2.ipynb#pass文)\\n\",\n    \"- `plot` [appendix/5-matplotlib#線グラフ](appendix/5-matplotlib.ipynb#線グラフ)\\n\",\n    \"- pop [appendix/2-set#pop](appendix/2-set.ipynb#pop)\\n\",\n    \"- `pop` [3/3-1#▲キーを指定した削除](3/3-1.ipynb#▲キーを指定した削除), [2/2-2#▲リストからインデックスで指定した要素を削除する](2/2-2.ipynb#▲リストからインデックスで指定した要素を削除する)\\n\",\n    \"- `predict` [7/7-2#教師あり学習・分類の例](7/7-2.ipynb#教師あり学習・分類の例)\\n\",\n    \"- `print` [1/1-2#`print`](1/1-2.ipynb#print)\\n\",\n    \"- `quad` [appendix/5-bokeh#ヒストグラム](appendix/5-bokeh.ipynb#ヒストグラム)\\n\",\n    \"- `raise` [6/6-3#特殊メソッド](6/6-3.ipynb#特殊メソッド)\\n\",\n    \"- `range` [3/3-2#`range`](3/3-2.ipynb#range), [3/3-2#`range` とリスト](3/3-2.ipynb#range-とリスト)\\n\",\n    \"- `ravel` [5/5-3#多次元配列](5/5-3.ipynb#多次元配列)\\n\",\n    \"- `re.I` [appendix/5-re#正規表現の基本](appendix/5-re.ipynb#正規表現の基本)\\n\",\n    \"- `re.IGNORECASE` [appendix/5-re#正規表現の基本](appendix/5-re.ipynb#正規表現の基本)\\n\",\n    \"- `read` [4/4-1#ファイル全体の読み込み](4/4-1.ipynb#ファイル全体の読み込み)\\n\",\n    \"- `read_csv` [7/7-1#CSVファイルからのデータフレームの作成](7/7-1.ipynb#CSVファイルからのデータフレームの作成)\\n\",\n    \"- `readline` [4/4-1#行の読み込み](4/4-1.ipynb#行の読み込み)\\n\",\n    \"- remove [appendix/2-set#remove](appendix/2-set.ipynb#remove)\\n\",\n    \"- `remove` [2/2-2#▲リストから要素を削除する](2/2-2.ipynb#▲リストから要素を削除する)\\n\",\n    \"- `replace` [2/2-1#置換](2/2-1.ipynb#置換)\\n\",\n    \"- `reshape` [5/5-3#多次元配列](5/5-3.ipynb#多次元配列)\\n\",\n    \"- `return` [1/1-2#関数の定義と返値](1/1-2.ipynb#関数の定義と返値), [3/3-3#返値](3/3-3.ipynb#返値)\\n\",\n    \"- return文 [1/1-2#関数の定義と返値](1/1-2.ipynb#関数の定義と返値), [3/3-2#制御構造とreturn文](3/3-2.ipynb#制御構造とreturn文)\\n\",\n    \"- `reverse` [6/6-2#`sorted`](6/6-2.ipynb#sorted), [2/2-2#▲リストの要素を逆順にする](2/2-2.ipynb#▲リストの要素を逆順にする)\\n\",\n    \"- `savefig` [appendix/5-matplotlib#グラフの画像ファイル出力](appendix/5-matplotlib.ipynb#グラフの画像ファイル出力)\\n\",\n    \"- `scatter` [appendix/5-bokeh#散布図](appendix/5-bokeh.ipynb#散布図), [appendix/5-matplotlib#散布図](appendix/5-matplotlib.ipynb#散布図)\\n\",\n    \"- scikit-learn [7/7-2#7-2. scikit-learnライブラリ](7/7-2.ipynb#7-2.-scikit-learnライブラリ)\\n\",\n    \"- `search` [appendix/5-re#正規表現の基本](appendix/5-re.ipynb#正規表現の基本)\\n\",\n    \"- `set` [appendix/2-set#▲セット (set)](appendix/2-set.ipynb#▲セット-(set))\\n\",\n    \"- `setdefault` [3/3-1#▲キーがない場合に登録を行う](3/3-1.ipynb#▲キーがない場合に登録を行う)\\n\",\n    \"- shebang [appendix/5-command#shebang](appendix/5-command.ipynb#shebang)\\n\",\n    \"- `sort` [2/2-2#並べ替え（`sort` メソッド）](2/2-2.ipynb#並べ替え（sort-メソッド）), [5/5-3#`sort`](5/5-3.ipynb#sort)\\n\",\n    \"- `sort_index` [7/7-1#データの並び替え](7/7-1.ipynb#データの並び替え)\\n\",\n    \"- `sort_values` [7/7-1#データの並び替え](7/7-1.ipynb#データの並び替え)\\n\",\n    \"- `sorted` [6/6-2#`sorted`](6/6-2.ipynb#sorted), [2/2-2#並べ替え（`sorted` 組み込み関数）](2/2-2.ipynb#並べ替え（sorted-組み込み関数）)\\n\",\n    \"- `split` [appendix/5-re#`re.split`](appendix/5-re.ipynb#re.split), [2/2-2#リストと文字列の相互変換](2/2-2.ipynb#リストと文字列の相互変換)\\n\",\n    \"- `str` [2/2-1#2-1. 文字列 (string)](2/2-1.ipynb#2-1.-文字列-(string)), [2/2-1#2-1. 文字列 (string)](2/2-1.ipynb#2-1.-文字列-(string))\\n\",\n    \"- `sub` [appendix/5-re#`sub`](appendix/5-re.ipynb#sub)\\n\",\n    \"- `sum` [6/6-1#リスト内包表記](6/6-1.ipynb#リスト内包表記), [2/2-2#`sum`](2/2-2.ipynb#sum), [5/5-3#`sum`, `max`, `min`, `mean`](5/5-3.ipynb#sum,-max,-min,-mean)\\n\",\n    \"- `super` [6/6-3#継承](6/6-3.ipynb#継承)\\n\",\n    \"- `title` [appendix/5-matplotlib#線グラフ](appendix/5-matplotlib.ipynb#線グラフ)\\n\",\n    \"- `transform` [7/7-2#教師なし学習・次元削減の例](7/7-2.ipynb#教師なし学習・次元削減の例)\\n\",\n    \"- `tuple` [2/2-2#タプル (tuple)](2/2-2.ipynb#タプル-(tuple))\\n\",\n    \"- `type` [2/2-1#2-1. 文字列 (string)](2/2-1.ipynb#2-1.-文字列-(string))\\n\",\n    \"- union [appendix/2-set#union, intersection, difference](appendix/2-set.ipynb#union,-intersection,-difference)\\n\",\n    \"- `upper` [2/2-1#大文字・小文字](2/2-1.ipynb#大文字・小文字)\\n\",\n    \"- value [3/3-1#3-1. 辞書 (dictionary)](3/3-1.ipynb#3-1.-辞書-(dictionary))\\n\",\n    \"- `values` [3/3-1#値の一覧を得る](3/3-1.ipynb#値の一覧を得る), [3/3-2#for文による繰り返しと辞書](3/3-2.ipynb#for文による繰り返しと辞書)\\n\",\n    \"- `vbar` [appendix/5-bokeh#棒グラフ](appendix/5-bokeh.ipynb#棒グラフ)\\n\",\n    \"- `while` [3/3-2#while文による繰り返し](3/3-2.ipynb#while文による繰り返し)\\n\",\n    \"- while文 [3/3-2#while文による繰り返し](3/3-2.ipynb#while文による繰り返し)\\n\",\n    \"- `with` [4/4-1#ファイルに対するwith文](4/4-1.ipynb#ファイルに対するwith文)\\n\",\n    \"- with文 [6/6-3#▲with文への対応](6/6-3.ipynb#▲with文への対応)\\n\",\n    \"- `write` [4/4-1#ファイルへの書き込み](4/4-1.ipynb#ファイルへの書き込み)\\n\",\n    \"- `xlabel` [appendix/5-matplotlib#線グラフ](appendix/5-matplotlib.ipynb#線グラフ)\\n\",\n    \"- `ylabel` [appendix/5-matplotlib#線グラフ](appendix/5-matplotlib.ipynb#線グラフ)\\n\",\n    \"- 値 [3/3-1#3-1. 辞書 (dictionary)](3/3-1.ipynb#3-1.-辞書-(dictionary))\\n\",\n    \"- 余り [1/1-1#簡単な算術計算](1/1-1.ipynb#簡単な算術計算)\\n\",\n    \"- イテラブル [6/6-2#リストからイテラブルへ](6/6-2.ipynb#リストからイテラブルへ), [4/4-2#for文とイテラブルとイテレータ](4/4-2.ipynb#for文とイテラブルとイテレータ)\\n\",\n    \"- イテレータ [6/6-2#`map`](6/6-2.ipynb#map), [6/6-1#▲ジェネレータ式](6/6-1.ipynb#▲ジェネレータ式), [4/4-2#for文とイテラブルとイテレータ](4/4-2.ipynb#for文とイテラブルとイテレータ)\\n\",\n    \"- 入れ子 [6/6-1#内包表記の入れ子](6/6-1.ipynb#内包表記の入れ子), [1/1-2#関数の定義と返値](1/1-2.ipynb#関数の定義と返値), [3/3-2#for文の入れ子](3/3-2.ipynb#for文の入れ子), [3/3-2#for文の入れ子](3/3-2.ipynb#for文の入れ子), [2/2-3#`if` ... `else` による条件分岐](2/2-3.ipynb#if-...-else-による条件分岐)\\n\",\n    \"- 印字 [1/1-2#`print`](1/1-2.ipynb#print)\\n\",\n    \"- インスタンス [6/6-3#クラス定義](6/6-3.ipynb#クラス定義)\\n\",\n    \"- インデックス [7/7-1#シリーズとデータフレーム](7/7-1.ipynb#シリーズとデータフレーム), [2/2-1#文字列とインデックス](2/2-1.ipynb#文字列とインデックス)\\n\",\n    \"- インデント [1/1-2#関数の定義と返値](1/1-2.ipynb#関数の定義と返値), [2/2-3#インデントによる構文](2/2-3.ipynb#インデントによる構文)\\n\",\n    \"- インプレース [2/2-2#破壊的（インプレース）な操作と非破壊的な生成](2/2-2.ipynb#破壊的（インプレース）な操作と非破壊的な生成)\\n\",\n    \"- インポート [1/1-1#数学関数（モジュールのインポート）](1/1-1.ipynb#数学関数（モジュールのインポート）), [5/5-1#モジュールのインポート](5/5-1.ipynb#モジュールのインポート)\\n\",\n    \"- エスケープシーケンス [4/4-1#ファイルへの書き込み](4/4-1.ipynb#ファイルへの書き込み), [2/2-1#▲エスケープシーケンス](2/2-1.ipynb#▲エスケープシーケンス)\\n\",\n    \"- エラー [1/1-1#エラー](1/1-1.ipynb#エラー)\\n\",\n    \"- 大文字 [2/2-1#大文字・小文字](2/2-1.ipynb#大文字・小文字)\\n\",\n    \"- オブジェクト [6/6-3#クラス定義](6/6-3.ipynb#クラス定義), [1/1-3#オブジェクト](1/1-3.ipynb#オブジェクト)\\n\",\n    \"- オブジェクト指向プログラミング [6/6-3#クラス定義](6/6-3.ipynb#クラス定義)\\n\",\n    \"- オブジェクトの同一性 [2/2-2#▲オブジェクトの等価性と同一性](2/2-2.ipynb#▲オブジェクトの等価性と同一性)\\n\",\n    \"- オブジェクトの等価性 [2/2-2#▲オブジェクトの等価性と同一性](2/2-2.ipynb#▲オブジェクトの等価性と同一性)\\n\",\n    \"- 親クラス [6/6-3#継承](6/6-3.ipynb#継承)\\n\",\n    \"- オーダー [3/3-2#for文の計算量](3/3-2.ipynb#for文の計算量)\\n\",\n    \"- オープン [4/4-1#ファイルのオープン](4/4-1.ipynb#ファイルのオープン)\\n\",\n    \"- 返値 [1/1-2#関数の定義と返値](1/1-2.ipynb#関数の定義と返値), [3/3-3#返値](3/3-3.ipynb#返値)\\n\",\n    \"- 書き込みモード [4/4-1#ファイルへの書き込み](4/4-1.ipynb#ファイルへの書き込み)\\n\",\n    \"- 掛け算 [1/1-1#簡単な算術計算](1/1-1.ipynb#簡単な算術計算)\\n\",\n    \"- 数え上げ [2/2-1#数え上げ](2/2-1.ipynb#数え上げ)\\n\",\n    \"- 型 [2/2-1#2-1. 文字列 (string)](2/2-1.ipynb#2-1.-文字列-(string))\\n\",\n    \"- 形 [5/5-3#多次元配列](5/5-3.ipynb#多次元配列)\\n\",\n    \"- 括弧 [1/1-1#演算子の優先順位と括弧](1/1-1.ipynb#演算子の優先順位と括弧)\\n\",\n    \"- 可変長引数 [3/3-3#▲可変長引数](3/3-3.ipynb#▲可変長引数)\\n\",\n    \"- 仮引数 [1/1-2#関数の定義と返値](1/1-2.ipynb#関数の定義と返値), [3/3-3#引数](3/3-3.ipynb#引数)\\n\",\n    \"- カレントディレクトリ [4/4-3#カレントワーキングディレクトリ](4/4-3.ipynb#カレントワーキングディレクトリ)\\n\",\n    \"- カレントワーキングディレクトリ [4/4-3#カレントワーキングディレクトリ](4/4-3.ipynb#カレントワーキングディレクトリ)\\n\",\n    \"- 関数 [1/1-2#関数の定義と返値](1/1-2.ipynb#関数の定義と返値), [3/3-3#関数の定義](3/3-3.ipynb#関数の定義)\\n\",\n    \"- 関数定義 [1/1-2#関数の定義と返値](1/1-2.ipynb#関数の定義と返値), [1/1-2#関数の定義と返値](1/1-2.ipynb#関数の定義と返値), [3/3-3#関数の定義](3/3-3.ipynb#関数の定義)\\n\",\n    \"- 木 [4/4-3#木構造](4/4-3.ipynb#木構造)\\n\",\n    \"- 機械学習 [7/7-2#機械学習について](7/7-2.ipynb#機械学習について)\\n\",\n    \"- 木構造 [4/4-3#木構造](4/4-3.ipynb#木構造)\\n\",\n    \"- キャプチャ [appendix/5-re#`group`](appendix/5-re.ipynb#group)\\n\",\n    \"- 教師あり学習 [7/7-2#教師あり学習](7/7-2.ipynb#教師あり学習)\\n\",\n    \"- 教師なし学習 [7/7-2#教師なし学習](7/7-2.ipynb#教師なし学習)\\n\",\n    \"- 兄弟 [4/4-3#木構造](4/4-3.ipynb#木構造)\\n\",\n    \"- キー [3/3-1#3-1. 辞書 (dictionary)](3/3-1.ipynb#3-1.-辞書-(dictionary))\\n\",\n    \"- キーワード引数 [3/3-3#▲キーワード引数](3/3-3.ipynb#▲キーワード引数)\\n\",\n    \"- 偽 [1/1-3#真理値を返す関数](1/1-3.ipynb#真理値を返す関数)\\n\",\n    \"- 行番号 [1/1-2#関数の定義と返値](1/1-2.ipynb#関数の定義と返値)\\n\",\n    \"- 空行 [1/1-2#コメントと空行](1/1-2.ipynb#コメントと空行)\\n\",\n    \"- 空タプル [2/2-2#タプル (tuple)](2/2-2.ipynb#タプル-(tuple))\\n\",\n    \"- 空白 [1/1-1#空白](1/1-1.ipynb#空白)\\n\",\n    \"- 空白文字 [appendix/5-re#メタ文字](appendix/5-re.ipynb#メタ文字), [2/2-1#▲空白文字の削除](2/2-1.ipynb#▲空白文字の削除)\\n\",\n    \"- 空文字列 [appendix/5-re#正規表現の基本](appendix/5-re.ipynb#正規表現の基本), [2/2-1#空文字列](2/2-1.ipynb#空文字列)\\n\",\n    \"- 空リスト [2/2-2#2-2. リスト (list)](2/2-2.ipynb#2-2.-リスト-(list))\\n\",\n    \"- 空列 [appendix/5-re#正規表現の基本](appendix/5-re.ipynb#正規表現の基本), [2/2-1#空文字列](2/2-1.ipynb#空文字列)\\n\",\n    \"- 組み込み関数 [1/1-2#`print`](1/1-2.ipynb#print)\\n\",\n    \"- 組み込み定数 [1/1-3#真理値を返す関数](1/1-3.ipynb#真理値を返す関数)\\n\",\n    \"- クラス [6/6-3#クラス定義](6/6-3.ipynb#クラス定義)\\n\",\n    \"- クラスタリング [7/7-2#教師なし学習・クラスタリングの例](7/7-2.ipynb#教師なし学習・クラスタリングの例)\\n\",\n    \"- 繰り返し [3/3-2#3-2. 繰り返し](3/3-2.ipynb#3-2.-繰り返し)\\n\",\n    \"- クローズ [4/4-1#ファイルのクローズ](4/4-1.ipynb#ファイルのクローズ)\\n\",\n    \"- グラフ [appendix/5-matplotlib#線グラフ](appendix/5-matplotlib.ipynb#線グラフ)\\n\",\n    \"- グローバル変数 [1/1-2#▲グローバル変数](1/1-2.ipynb#▲グローバル変数), [3/3-3#変数とスコープ](3/3-3.ipynb#変数とスコープ)\\n\",\n    \"- 計算量 [3/3-2#for文の計算量](3/3-2.ipynb#for文の計算量), [3/3-2#for文の計算量](3/3-2.ipynb#for文の計算量)\\n\",\n    \"- 計算量のオーダー [3/3-2#for文の計算量](3/3-2.ipynb#for文の計算量)\\n\",\n    \"- 継承 [6/6-3#継承](6/6-3.ipynb#継承)\\n\",\n    \"- 検索 [2/2-1#検索](2/2-1.ipynb#検索)\\n\",\n    \"- 親 [4/4-3#木構造](4/4-3.ipynb#木構造)\\n\",\n    \"- 子 [4/4-3#木構造](4/4-3.ipynb#木構造)\\n\",\n    \"- 高階関数 [6/6-2#`max`](6/6-2.ipynb#max)\\n\",\n    \"- 構文エラー [1/1-4#構文エラー](1/1-4.ipynb#構文エラー), [1/1-1#エラー](1/1-1.ipynb#エラー)\\n\",\n    \"- 子クラス [6/6-3#継承](6/6-3.ipynb#継承)\\n\",\n    \"- コマンドライン実行 [appendix/5-command#▲Pythonスクリプトとコマンドライン実行](appendix/5-command.ipynb#▲Pythonスクリプトとコマンドライン実行)\\n\",\n    \"- コマンドライン引数 [appendix/5-command#コマンドライン引数](appendix/5-command.ipynb#コマンドライン引数)\\n\",\n    \"- コメント [1/1-2#コメントと空行](1/1-2.ipynb#コメントと空行), [1/1-1#コメント](1/1-1.ipynb#コメント)\\n\",\n    \"- 小文字 [2/2-1#大文字・小文字](2/2-1.ipynb#大文字・小文字)\\n\",\n    \"- コンストラクタ [6/6-3#クラス定義](6/6-3.ipynb#クラス定義)\\n\",\n    \"- コーディングスタイル [1/1-4#コーディングスタイル](1/1-4.ipynb#コーディングスタイル)\\n\",\n    \"- 再帰 [appendix/3-recursion#▲再帰](appendix/3-recursion.ipynb#▲再帰), [1/1-3#▲再帰](1/1-3.ipynb#▲再帰)\\n\",\n    \"- 再帰関数 [appendix/3-recursion#▲再帰](appendix/3-recursion.ipynb#▲再帰)\\n\",\n    \"- 再帰呼び出し [appendix/3-recursion#▲再帰](appendix/3-recursion.ipynb#▲再帰)\\n\",\n    \"- 作業ディレクトリ [4/4-3#カレントワーキングディレクトリ](4/4-3.ipynb#カレントワーキングディレクトリ)\\n\",\n    \"- 差集合 [appendix/2-set#集合演算](appendix/2-set.ipynb#集合演算), [appendix/2-set#union, intersection, difference](appendix/2-set.ipynb#union,-intersection,-difference)\\n\",\n    \"- 散布図 [appendix/5-matplotlib#散布図](appendix/5-matplotlib.ipynb#散布図)\\n\",\n    \"- 子孫 [4/4-3#木構造](4/4-3.ipynb#木構造)\\n\",\n    \"- 集合 [appendix/2-set#▲セット (set)](appendix/2-set.ipynb#▲セット-(set))\\n\",\n    \"- 集合演算 [appendix/2-set#集合演算](appendix/2-set.ipynb#集合演算)\\n\",\n    \"- 商 [1/1-1#簡単な算術計算](1/1-1.ipynb#簡単な算術計算)\\n\",\n    \"- 初期化 [6/6-3#初期化と属性](6/6-3.ipynb#初期化と属性)\\n\",\n    \"- 初期値 [3/3-3#▲引数の初期値](3/3-3.ipynb#▲引数の初期値)\\n\",\n    \"- 仕様 [1/1-4#仕様・テスト・デバッグ](1/1-4.ipynb#仕様・テスト・デバッグ)\\n\",\n    \"- シリーズ [7/7-1#シリーズとデータフレーム](7/7-1.ipynb#シリーズとデータフレーム)\\n\",\n    \"- 真 [1/1-3#真理値を返す関数](1/1-3.ipynb#真理値を返す関数)\\n\",\n    \"- 真理値 [1/1-3#真理値を返す関数](1/1-3.ipynb#真理値を返す関数)\\n\",\n    \"- 真理値配列によるインデックスアクセス [7/7-1#データの条件取り出し](7/7-1.ipynb#データの条件取り出し), [5/5-3#▲真理値配列によるインデックスアクセス](5/5-3.ipynb#▲真理値配列によるインデックスアクセス)\\n\",\n    \"- ジェネレータ式 [6/6-1#▲ジェネレータ式](6/6-1.ipynb#▲ジェネレータ式)\\n\",\n    \"- 次元削減 [7/7-2#教師なし学習・次元削減の例](7/7-2.ipynb#教師なし学習・次元削減の例)\\n\",\n    \"- 辞書 [3/3-1#3-1. 辞書 (dictionary)](3/3-1.ipynb#3-1.-辞書-(dictionary))\\n\",\n    \"- 辞書型の可変長引数 [3/3-3#▲辞書型の可変長引数](3/3-3.ipynb#▲辞書型の可変長引数)\\n\",\n    \"- 辞書内包表記 [6/6-1#▲辞書内包表記](6/6-1.ipynb#▲辞書内包表記)\\n\",\n    \"- 実行時エラー [1/1-4#実行時エラー](1/1-4.ipynb#実行時エラー), [1/1-1#エラー](1/1-1.ipynb#エラー)\\n\",\n    \"- 実数 [1/1-1#整数と実数](1/1-1.ipynb#整数と実数)\\n\",\n    \"- 実引数 [3/3-3#引数](3/3-3.ipynb#引数)\\n\",\n    \"- 条件付き内包表記 [6/6-1#▲条件付き内包表記](6/6-1.ipynb#▲条件付き内包表記)\\n\",\n    \"- 条件分岐 [1/1-3#if文による条件分岐](1/1-3.ipynb#if文による条件分岐), [2/2-3#2-3. 条件分岐](2/2-3.ipynb#2-3.-条件分岐)\\n\",\n    \"- 剰余 [1/1-1#簡単な算術計算](1/1-1.ipynb#簡単な算術計算)\\n\",\n    \"- 除算 [1/1-1#簡単な算術計算](1/1-1.ipynb#簡単な算術計算)\\n\",\n    \"- 数値誤差 [1/1-1#数値誤差](1/1-1.ipynb#数値誤差)\\n\",\n    \"- スライス [7/7-1#データの参照](7/7-1.ipynb#データの参照), [2/2-1#文字列とスライス](2/2-1.ipynb#文字列とスライス), [5/5-3#スライス](5/5-3.ipynb#スライス)\\n\",\n    \"- 正規表現 [appendix/5-re#▲正規表現](appendix/5-re.ipynb#▲正規表現)\\n\",\n    \"- 整数 [1/1-1#整数と実数](1/1-1.ipynb#整数と実数)\\n\",\n    \"- 整数除算 [1/1-1#簡単な算術計算](1/1-1.ipynb#簡単な算術計算)\\n\",\n    \"- 積集合 [appendix/2-set#集合演算](appendix/2-set.ipynb#集合演算), [appendix/2-set#union, intersection, difference](appendix/2-set.ipynb#union,-intersection,-difference)\\n\",\n    \"- セット [appendix/2-set#▲セット (set)](appendix/2-set.ipynb#▲セット-(set))\\n\",\n    \"- セット内包表記 [6/6-1#▲セット内包表記](6/6-1.ipynb#▲セット内包表記)\\n\",\n    \"- 線形回帰 [appendix/4-csv#東京の7月の気温](appendix/4-csv.ipynb#東京の7月の気温), [7/7-2#教師あり学習・回帰の例](7/7-2.ipynb#教師あり学習・回帰の例)\\n\",\n    \"- 選択 [appendix/5-re#正規表現の基本](appendix/5-re.ipynb#正規表現の基本)\\n\",\n    \"- 絶対パス [4/4-3#パス](4/4-3.ipynb#パス)\\n\",\n    \"- 相対パス [4/4-3#パス](4/4-3.ipynb#パス)\\n\",\n    \"- 祖先 [4/4-3#木構造](4/4-3.ipynb#木構造)\\n\",\n    \"- 属性 [6/6-3#初期化と属性](6/6-3.ipynb#初期化と属性)\\n\",\n    \"- 属性名 [6/6-3#初期化と属性](6/6-3.ipynb#初期化と属性)\\n\",\n    \"- 対称差 [appendix/2-set#集合演算](appendix/2-set.ipynb#集合演算), [appendix/2-set#union, intersection, difference](appendix/2-set.ipynb#union,-intersection,-difference)\\n\",\n    \"- 足し算 [1/1-1#簡単な算術計算](1/1-1.ipynb#簡単な算術計算)\\n\",\n    \"- 多次元配列 [5/5-3#多次元配列](5/5-3.ipynb#多次元配列)\\n\",\n    \"- 多重代入 [2/2-2#多重代入](2/2-2.ipynb#多重代入)\\n\",\n    \"- 多重リスト [2/2-2#多重リスト](2/2-2.ipynb#多重リスト)\\n\",\n    \"- タプル [2/2-2#タプル (tuple)](2/2-2.ipynb#タプル-(tuple))\\n\",\n    \"- 単項演算子 [1/1-1#単項の `+` と `-`](1/1-1.ipynb#単項の-+-と--)\\n\",\n    \"- 代入 [1/1-2#代入文](1/1-2.ipynb#代入文)\\n\",\n    \"- 代入演算子 [1/1-2#累積代入文](1/1-2.ipynb#累積代入文)\\n\",\n    \"- 代入文 [1/1-2#代入文](1/1-2.ipynb#代入文)\\n\",\n    \"- 置換 [2/2-1#置換](2/2-1.ipynb#置換)\\n\",\n    \"- テスト [1/1-4#仕様・テスト・デバッグ](1/1-4.ipynb#仕様・テスト・デバッグ)\\n\",\n    \"- テストケース [1/1-4#仕様・テスト・デバッグ](1/1-4.ipynb#仕様・テスト・デバッグ)\\n\",\n    \"- ディレクトリ [4/4-3#ディレクトリと階層構造](4/4-3.ipynb#ディレクトリと階層構造)\\n\",\n    \"- デバッグ [1/1-2#`print`](1/1-2.ipynb#print), [1/1-4#仕様・テスト・デバッグ](1/1-4.ipynb#仕様・テスト・デバッグ)\\n\",\n    \"- データ型 [2/2-1#2-1. 文字列 (string)](2/2-1.ipynb#2-1.-文字列-(string))\\n\",\n    \"- データフレーム [7/7-1#シリーズとデータフレーム](7/7-1.ipynb#シリーズとデータフレーム)\\n\",\n    \"- 特殊メソッド [6/6-3#特殊メソッド](6/6-3.ipynb#特殊メソッド)\\n\",\n    \"- 特徴量 [7/7-2#データ](7/7-2.ipynb#データ)\\n\",\n    \"- トップレベル [1/1-2#▲グローバル変数](1/1-2.ipynb#▲グローバル変数)\\n\",\n    \"- 内包表記 [6/6-1#6-1. 内包表記](6/6-1.ipynb#6-1.-内包表記), [6/6-1#リスト内包表記](6/6-1.ipynb#リスト内包表記), [2/2-2#for文によるリスト初期化の短縮記法](2/2-2.ipynb#for文によるリスト初期化の短縮記法)\\n\",\n    \"- 根 [4/4-3#木構造](4/4-3.ipynb#木構造)\\n\",\n    \"- ネスト [6/6-1#内包表記の入れ子](6/6-1.ipynb#内包表記の入れ子), [3/3-2#for文の入れ子](3/3-2.ipynb#for文の入れ子), [2/2-3#`if` ... `else` による条件分岐](2/2-3.ipynb#if-...-else-による条件分岐)\\n\",\n    \"- ノード [4/4-3#木構造](4/4-3.ipynb#木構造)\\n\",\n    \"- 葉 [4/4-3#木構造](4/4-3.ipynb#木構造)\\n\",\n    \"- 配列 [2/2-2#2-2. リスト (list)](2/2-2.ipynb#2-2.-リスト-(list)), [5/5-3#配列の構築](5/5-3.ipynb#配列の構築)\\n\",\n    \"- 配列同士の演算 [5/5-3#配列同士の演算](5/5-3.ipynb#配列同士の演算)\\n\",\n    \"- 配列のスカラ演算 [5/5-3#配列のスカラ演算](5/5-3.ipynb#配列のスカラ演算)\\n\",\n    \"- 配列のデータ属性 [5/5-3#▲配列のデータ属性](5/5-3.ipynb#▲配列のデータ属性)\\n\",\n    \"- 破壊的 [2/2-2#破壊的（インプレース）な操作と非破壊的な生成](2/2-2.ipynb#破壊的（インプレース）な操作と非破壊的な生成)\\n\",\n    \"- 半角の空白 [1/1-1#空白](1/1-1.ipynb#空白)\\n\",\n    \"- バグ [1/1-2#`print`](1/1-2.ipynb#print), [1/1-4#仕様・テスト・デバッグ](1/1-4.ipynb#仕様・テスト・デバッグ)\\n\",\n    \"- パス [4/4-3#パス](4/4-3.ipynb#パス)\\n\",\n    \"- パターン [appendix/5-re#正規表現の基本](appendix/5-re.ipynb#正規表現の基本)\\n\",\n    \"- 比較演算 [appendix/2-set#比較演算](appendix/2-set.ipynb#比較演算)\\n\",\n    \"- 比較演算子 [1/1-3#様々な条件](1/1-3.ipynb#様々な条件)\\n\",\n    \"- 引き算 [1/1-1#簡単な算術計算](1/1-1.ipynb#簡単な算術計算)\\n\",\n    \"- 引数 [1/1-2#関数の定義と返値](1/1-2.ipynb#関数の定義と返値), [1/1-2#関数の定義と返値](1/1-2.ipynb#関数の定義と返値), [3/3-3#関数の定義](3/3-3.ipynb#関数の定義)\\n\",\n    \"- ヒストグラム [appendix/5-matplotlib#ヒストグラム](appendix/5-matplotlib.ipynb#ヒストグラム)\\n\",\n    \"- 否定文字クラス [appendix/5-re#文字クラス](appendix/5-re.ipynb#文字クラス)\\n\",\n    \"- 非破壊的 [2/2-2#破壊的（インプレース）な操作と非破壊的な生成](2/2-2.ipynb#破壊的（インプレース）な操作と非破壊的な生成)\\n\",\n    \"- ヒートマップ [appendix/5-matplotlib#ヒートマップ](appendix/5-matplotlib.ipynb#ヒートマップ)\\n\",\n    \"- ファイル [4/4-1#ファイルのオープン](4/4-1.ipynb#ファイルのオープン)\\n\",\n    \"- ファイルオブジェクト [4/4-1#ファイルのオープン](4/4-1.ipynb#ファイルのオープン)\\n\",\n    \"- フォルダ [4/4-3#ディレクトリと階層構造](4/4-3.ipynb#ディレクトリと階層構造)\\n\",\n    \"- 浮動小数点数 [1/1-1#整数と実数](1/1-1.ipynb#整数と実数)\\n\",\n    \"- 分割統治 [appendix/3-recursion#▲再帰](appendix/3-recursion.ipynb#▲再帰)\\n\",\n    \"- 閉包 [appendix/5-re#正規表現の基本](appendix/5-re.ipynb#正規表現の基本)\\n\",\n    \"- 変数 [1/1-2#変数](1/1-2.ipynb#変数), [2/2-1#初心者によくある誤解 --- 変数と文字列の混乱](2/2-1.ipynb#初心者によくある誤解-----変数と文字列の混乱)\\n\",\n    \"- 変数定義 [1/1-2#変数](1/1-2.ipynb#変数)\\n\",\n    \"- べき乗 [1/1-1#簡単な算術計算](1/1-1.ipynb#簡単な算術計算)\\n\",\n    \"- べき表示 [1/1-1#実数のべき表示](1/1-1.ipynb#実数のべき表示)\\n\",\n    \"- 棒グラフ [appendix/5-matplotlib#棒グラフ](appendix/5-matplotlib.ipynb#棒グラフ)\\n\",\n    \"- マジックコマンド [appendix/3-visualization#`matplotlib`](appendix/3-visualization.ipynb#matplotlib)\\n\",\n    \"- マッチする [appendix/5-re#正規表現の基本](appendix/5-re.ipynb#正規表現の基本)\\n\",\n    \"- 無名関数 [6/6-2#ラムダ式](6/6-2.ipynb#ラムダ式)\\n\",\n    \"- メソッド [2/2-1#文字列とメソッド](2/2-1.ipynb#文字列とメソッド)\\n\",\n    \"- 文字クラス [appendix/5-re#文字クラス](appendix/5-re.ipynb#文字クラス)\\n\",\n    \"- 文字コード [appendix/4-csv#東京の7月の気温](appendix/4-csv.ipynb#東京の7月の気温), [4/4-1#ファイルの読み書きにおける文字コード指定](4/4-1.ipynb#ファイルの読み書きにおける文字コード指定)\\n\",\n    \"- 文字コード宣言 [appendix/5-command#文字コード宣言](appendix/5-command.ipynb#文字コード宣言)\\n\",\n    \"- モジュール [1/1-1#数学関数（モジュールのインポート）](1/1-1.ipynb#数学関数（モジュールのインポート）), [5/5-1#モジュールのインポート](5/5-1.ipynb#モジュールのインポート), [5/5-2#5-2. モジュールの作り方](5/5-2.ipynb#5-2.-モジュールの作り方)\\n\",\n    \"- モジュール名 [5/5-2#自作モジュールの使い方](5/5-2.ipynb#自作モジュールの使い方)\\n\",\n    \"- モジュールレベル [1/1-2#▲グローバル変数](1/1-2.ipynb#▲グローバル変数)\\n\",\n    \"- 文字列 [2/2-1#2-1. 文字列 (string)](2/2-1.ipynb#2-1.-文字列-(string)), [2/2-1#初心者によくある誤解 --- 変数と文字列の混乱](2/2-1.ipynb#初心者によくある誤解-----変数と文字列の混乱)\\n\",\n    \"- 文字列の比較演算 [2/2-1#文字列の比較演算](2/2-1.ipynb#文字列の比較演算)\\n\",\n    \"- 優先順位 [1/1-1#演算子の優先順位と括弧](1/1-1.ipynb#演算子の優先順位と括弧)\\n\",\n    \"- ユニバーサル関数 [5/5-3#ユニバーサル関数](5/5-3.ipynb#ユニバーサル関数)\\n\",\n    \"- 読み込みモード [4/4-1#ファイルのオープン](4/4-1.ipynb#ファイルのオープン)\\n\",\n    \"- 予約語 [1/1-2#予約語](1/1-2.ipynb#予約語)\\n\",\n    \"- ライブラリ [1/1-1#数学関数（モジュールのインポート）](1/1-1.ipynb#数学関数（モジュールのインポート）)\\n\",\n    \"- ラムダ式 [6/6-2#ラムダ式](6/6-2.ipynb#ラムダ式)\\n\",\n    \"- リスト [2/2-2#2-2. リスト (list)](2/2-2.ipynb#2-2.-リスト-(list))\\n\",\n    \"- 累算代入文 [1/1-2#累積代入文](1/1-2.ipynb#累積代入文)\\n\",\n    \"- ループ [3/3-2#for文による繰り返し](3/3-2.ipynb#for文による繰り返し)\\n\",\n    \"- 連結 [2/2-1#文字列の連結](2/2-1.ipynb#文字列の連結)\\n\",\n    \"- 連接 [appendix/5-re#正規表現の基本](appendix/5-re.ipynb#正規表現の基本)\\n\",\n    \"- ロジスティック回帰 [7/7-2#教師あり学習・分類の例](7/7-2.ipynb#教師あり学習・分類の例)\\n\",\n    \"- 論理エラー [1/1-4#論理エラー](1/1-4.ipynb#論理エラー)\\n\",\n    \"- ローカル変数 [1/1-2#ローカル変数](1/1-2.ipynb#ローカル変数), [3/3-3#引数](3/3-3.ipynb#引数), [3/3-3#変数とスコープ](3/3-3.ipynb#変数とスコープ)\\n\",\n    \"- 和 [appendix/5-re#正規表現の基本](appendix/5-re.ipynb#正規表現の基本)\\n\",\n    \"- ワイルドカード [5/5-1#`from`](5/5-1.ipynb#from)\\n\",\n    \"- 和集合 [appendix/2-set#集合演算](appendix/2-set.ipynb#集合演算), [appendix/2-set#union, intersection, difference](appendix/2-set.ipynb#union,-intersection,-difference)\\n\",\n    \"- 割り算 [1/1-1#簡単な算術計算](1/1-1.ipynb#簡単な算術計算)\\n\",\n    \"- ワーキングディレクトリ [4/4-3#カレントワーキングディレクトリ](4/4-3.ipynb#カレントワーキングディレクトリ)\\n\"\n   ]\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"Python 3\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"name\": \"python\"\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 4\n}\n"
  },
  {
    "path": "docs/.buildinfo",
    "content": "# Sphinx build info version 1\n# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done.\nconfig: 437ac5071ea112519a59ccef14f2ccf9\ntags: 645f666f9bcd5a90fca523b33c5a78b7\n"
  },
  {
    "path": "docs/.nojekyll",
    "content": ""
  },
  {
    "path": "docs/1/1-0.html",
    "content": "<!DOCTYPE html>\n\n<html lang=\"jp\" data-content_root=\"../\">\n  <head>\n    <meta charset=\"utf-8\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" /><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n\n    <!-- Google tag (gtag.js) -->\n    <script async src=\"https://www.googletagmanager.com/gtag/js?id=G-8M0RXGPPSR\"></script>\n    <script>\n        window.dataLayer = window.dataLayer || [];\n        function gtag(){dataLayer.push(arguments);}\n        gtag('js', new Date());\n        gtag('config', 'G-8M0RXGPPSR');\n    </script>\n    \n    <title>1-0. Colaboratory (Colab) の使い方 &#8212; Pythonプログラミング入門  documentation</title>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/pygments.css?v=d1102ebc\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/basic.css?v=c058f7c8\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/alabaster.css?v=27fed22d\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/nbsphinx-code-cells.css\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/custom.css?v=1a1aa8dd\" />\n    <script src=\"../_static/documentation_options.js?v=3ff7d7a7\"></script>\n    <script src=\"../_static/doctools.js?v=9a2dae69\"></script>\n    <script src=\"../_static/sphinx_highlight.js?v=dc90522c\"></script>\n    <script crossorigin=\"anonymous\" integrity=\"sha256-Ae2Vz/4ePdIu6ZyI/5ZGsYnb+m0JlOmKPjt6XZ9JJkA=\" src=\"https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.4/require.min.js\"></script>\n    <script>window.MathJax = {\"tex\": {\"inlineMath\": [[\"$\", \"$\"], [\"\\\\(\", \"\\\\)\"]], \"processEscapes\": true}, \"options\": {\"ignoreHtmlClass\": \"tex2jax_ignore|mathjax_ignore|document\", \"processHtmlClass\": \"tex2jax_process|mathjax_process|math|output_area\"}}</script>\n    <script defer=\"defer\" src=\"https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js\"></script>\n    <link rel=\"index\" title=\"Index\" href=\"../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../search.html\" />\n    <link rel=\"next\" title=\"1-1. 数値演算\" href=\"1-1.html\" />\n    <link rel=\"prev\" title=\"Pythonプログラミング入門\" href=\"../index.html\" />\n   \n  <link rel=\"stylesheet\" href=\"../_static/custom.css\" type=\"text/css\" />\n  \n\n  \n  \n\n  </head><body>\n  \n\n    <div class=\"document\">\n      <div class=\"documentwrapper\">\n        <div class=\"bodywrapper\">\n          \n\n          <div class=\"body\" role=\"main\">\n            \n  <section id=\"1-0.-Colaboratory-(Colab)-の使い方\">\n<h1>1-0. Colaboratory (Colab) の使い方<a class=\"headerlink\" href=\"#1-0.-Colaboratory-(Colab)-の使い方\" title=\"Link to this heading\">¶</a></h1>\n<p>Colaboratory（通称 Colab）によるノートブックの操作方法について説明します。</p>\n<section id=\"Colaboratoryの立ち上げ\">\n<h2>Colaboratoryの立ち上げ<a class=\"headerlink\" href=\"#Colaboratoryの立ち上げ\" title=\"Link to this heading\">¶</a></h2>\n<p>ブラウザにGoogleアカウント（個人でもECCSでもどちらでもよい）でログインした後に、以下のURLを開いてください。</p>\n<ul class=\"simple\">\n<li><p><a class=\"reference external\" href=\"https://colab.research.google.com/\">https://colab.research.google.com/</a></p></li>\n</ul>\n</section>\n<section id=\"教材のオープン\">\n<h2>教材のオープン<a class=\"headerlink\" href=\"#教材のオープン\" title=\"Link to this heading\">¶</a></h2>\n<p>HTML版の教材の「Open in Colab」をクリックしたり、 Google Drive上の教材を直接Colabratoryでオープンした場合、 指定したノートブックがオープンされますが、ノートブックを操作した結果は Google Drive上に保存されません。 ノートブックの上方にある「ドライブにコピー」のボタンを押せば、 自分のGoogle Drive上にノートブックのコピーが作られてオープンされます。 ノートブックを操作した結果はコピーに保存されます。</p>\n<p>なお、ノートブックには <code class=\"docutils literal notranslate\"><span class=\"pre\">ipynb</span></code> という拡張子（エクステンション）が付いています。</p>\n</section>\n<section id=\"ノートブックの操作\">\n<h2>ノートブックの操作<a class=\"headerlink\" href=\"#ノートブックの操作\" title=\"Link to this heading\">¶</a></h2>\n<p>ノートブックの上方のタイトルの下には、「ファイル」や「編集」などのメニュー、 その下には「+ コード」と「+ テキスト」というボタンが表示されています。</p>\n<p>Ctrl+s（Macの場合は Cmd+s）を入力することによって、 編集・操作中のノートブックを Google Drive のファイルにセーブできます。 なお、ノートブックは適当なタイミングでオートセーブされます。 ファイルメニューの右に「すべての変更を保存しました」と表示されていれば、 Ctrl+s を入力する必要はありません。</p>\n<p>以下の参考文献は、Jupyter Notebook に関する一般的な解説です。 jupyterコマンドを起動してブラウザでノートブックを使うのと、 Google Colaboratory によりノートブックを使うのでは、 インタフェースが大分異なっていることに注意してください。</p>\n<ul class=\"simple\">\n<li><p><a class=\"reference external\" href=\"https://jupyter.readthedocs.io/en/latest/\">https://jupyter.readthedocs.io/en/latest/</a></p></li>\n</ul>\n</section>\n<section id=\"セル\">\n<h2>セル<a class=\"headerlink\" href=\"#セル\" title=\"Link to this heading\">¶</a></h2>\n<p>ノートブックはセルから成り立っています。</p>\n<p>主に次の二種類のセルを使います。</p>\n<ul class=\"simple\">\n<li><p>Codeセル（コードセル）： Pythonのコードが書かれたセルです。 Codeセルの左端には <code class=\"docutils literal notranslate\"><span class=\"pre\">[</span> <span class=\"pre\">]</span></code> と表示されています。 Codeセルの中のコードを実行するには、 <code class=\"docutils literal notranslate\"><span class=\"pre\">[</span> <span class=\"pre\">]</span></code> のところにマウスカーソルを移動してクリックします。 <code class=\"docutils literal notranslate\"><span class=\"pre\">[</span> <span class=\"pre\">]</span></code> のところにマウスカーソルを移動すると、●の中に▷が表示されます。 これはプレイボタンを意味します。 プレイボタンを押すとコードが実行され、その結果がセルの下部に挿入されます。 （Shiftを押しながらEnterを押しても実行できます。）</p></li>\n<li><p>Markdownセル（テキストセル）： 説明が書かれたセルです。 このセル自身はMarkdownセルです。</p></li>\n</ul>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[ ]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"mi\">1</span><span class=\"o\">+</span><span class=\"mi\">1</span>\n</pre></div>\n</div>\n</div>\n</section>\n<section id=\"セルの編集\">\n<h2>セルの編集<a class=\"headerlink\" href=\"#セルの編集\" title=\"Link to this heading\">¶</a></h2>\n<p>Codeセル上のプレイボタンでないところにマウスカーソルを移動しクリックすると、 Codeセルが選択され、文字カーソルが表示されて、セルの編集が可能になります。 Ctrlの付かない文字はそのまま挿入されます。</p>\n<p>以下のような編集コマンドが使えます。</p>\n<ul class=\"simple\">\n<li><p>Ctrl+c: copy</p></li>\n<li><p>Ctrl+x: cut</p></li>\n<li><p>Ctrl+v: paste</p></li>\n<li><p>Ctrl+z: undo</p></li>\n<li><p>…</p></li>\n</ul>\n<p>Codeセルが選択されているとき、Shift+Enter（もしくはShift+Return）を入力すると、 セルの中のコードが実行されて、次のセルが選択されます。</p>\n</section>\n<section id=\"練習\">\n<h2>練習<a class=\"headerlink\" href=\"#練習\" title=\"Link to this heading\">¶</a></h2>\n<p>次のCodeセルを選択して <code class=\"docutils literal notranslate\"><span class=\"pre\">10/3</span></code> と入力して実行してください。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[ ]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span>\n</pre></div>\n</div>\n</div>\n<p>Codeセルの実行が終了し、別のセルが選択されると、 セルの左端は <code class=\"docutils literal notranslate\"><span class=\"pre\">[2]</span></code> のようになり、<code class=\"docutils literal notranslate\"><span class=\"pre\">[</span> <span class=\"pre\">]</span></code> の中に番号が入ります。 この番号は、そのCodeセルが何番目に実行されたかを示すもので、 Codeセルが実行されるたびに1ずつ増えます。 同じセルを続けて実行すれば、この番号は1ずつ増えるでしょう。</p>\n</section>\n<section id=\"セルの挿入\">\n<h2>セルの挿入<a class=\"headerlink\" href=\"#セルの挿入\" title=\"Link to this heading\">¶</a></h2>\n<p>Codeセルを新たに挿入するには、 ファイルメニューの下の「+ コード」ボタンを押します。 現在選択されているセルの下にCodeセルが挿入されます。</p>\n<p>たとえば、このMarkdownセルを選択してから、 「+ コード」ボタンを押してみてください。 このMarkdownセルを選択するには、マウスカーソルをここに持って来て クリックすればよいです。説明の全体が四角で囲まれるはずです。</p>\n<p>Markdownセルを新たに挿入するには、 ファイルメニューの下の「+ テキスト」ボタンを押します。 なお、ここではMarkdownセルの説明は行っていません。</p>\n</section>\n<section id=\"セルの実行が止まらないとき\">\n<h2>セルの実行が止まらないとき<a class=\"headerlink\" href=\"#セルの実行が止まらないとき\" title=\"Link to this heading\">¶</a></h2>\n<p>Codeセルの左端の●の中に□が表示され、 その周りをノの字が回り続けているならば、セルのコードは実行中です。 いつまでたってもコードの実行が終了しない場合は、 そのアイコンを押して、コードの実行を強制終了してください。 ●の中に□が表示されたアイコンはストップボタンを意味します。</p>\n<p>たとえば、次のような例です。 プレイボタンを押し実行中であることを確かめてから、 ストップボタンを押してください。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[ ]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">while</span> <span class=\"kc\">True</span><span class=\"p\">:</span>\n    <span class=\"k\">pass</span>\n</pre></div>\n</div>\n</div>\n</section>\n<section id=\"セルの操作\">\n<h2>セルの操作<a class=\"headerlink\" href=\"#セルの操作\" title=\"Link to this heading\">¶</a></h2>\n<p>セルを選択するとセルの右上に色々なボタンが表示されます。 これらを押すことにより、セルの削除、セルの移動、コピーペーストなど、 セルに対する各種の操作を行うことができます。</p>\n</section>\n<section id=\"ノートブックの参照\">\n<h2>ノートブックの参照<a class=\"headerlink\" href=\"#ノートブックの参照\" title=\"Link to this heading\">¶</a></h2>\n<p>Colaboratoryが使用するノードブックは Google Drive 上にあります。 右上の「共有」のボタンを押すことにより、 ノートブックの共有設定を変えることができます。 その上で、ノートブックが表示されているブラウザ上のURLを伝えることにより、 教員やTAにノートブックを見せることができます。</p>\n</section>\n<section id=\"ノートブックのダウンロード\">\n<h2>ノートブックのダウンロード<a class=\"headerlink\" href=\"#ノートブックのダウンロード\" title=\"Link to this heading\">¶</a></h2>\n<p>Google Drive 上のノートブックをパソコンにダウンロードするには、 Colaboratoryのファイルメニューで「.ipynb をダウンロード」を選択します。</p>\n<p><img alt=\"colab4.png\" src=\"../_images/colab4.png\" /></p>\n</section>\n</section>\n\n\n          </div>\n          \n        </div>\n      </div>\n      <div class=\"sphinxsidebar\" role=\"navigation\" aria-label=\"Main\">\n        <div class=\"sphinxsidebarwrapper\">\n<h1 class=\"logo\"><a href=\"../index.html\">Pythonプログラミング入門</a></h1>\n\n\n\n\n\n\n\n\n<p>\n  <a style=\"font-family: sans-serif; font-size: smaller; background: linear-gradient(to top, #353535 0%, #141414 100%); -webkit-font-smoothing: antialiased; font-weight: normal; text-shadow: rgb(0 0 0 / 40%) 0 -1px 0; padding: 2px 6px; color: #fff; text-decoration: none; border-radius: 4px; border: 1px solid #0d0d0d; box-shadow: inset 0 1px 1px 0 #8f8f8f;\" href=\"https://github.com/utokyo-ipp/utokyo-ipp.github.io\">View on GitHub</a>\n</p><p>\n  <a style=\"font-family: sans-serif; font-size: smaller; background: linear-gradient(to top, #ff1e00 0%, #de1e00 100%); -webkit-font-smoothing: antialiased; font-weight: normal; text-shadow: rgb(0 0 0 / 40%) 0 -1px 0; padding: 2px 6px; color: #fff; text-decoration: none; border-radius: 4px; border: 1px solid #0d0d0d; box-shadow: inset 0 1px 1px 0 #ff8e70;\" href=\"https://utokyo-ipp.github.io/IPP_textbook.pdf\">View PDF</a>\n</p><p>\n  <a style=\"border-bottom: none;\" href=\"https://colab.research.google.com/github/utokyo-ipp/utokyo-ipp.github.io/blob/master/colab/1/1-0.ipynb\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Google Colaboratory\"></a>\n</p><h3>Navigation</h3>\n<ul class=\"current\">\n<li class=\"toctree-l1 current\"><a class=\"current reference internal\" href=\"#\">1-0. Colaboratory (Colab) の使い方</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#Colaboratoryの立ち上げ\">Colaboratoryの立ち上げ</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#教材のオープン\">教材のオープン</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#ノートブックの操作\">ノートブックの操作</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#セル\">セル</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#セルの編集\">セルの編集</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#練習\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#セルの挿入\">セルの挿入</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#セルの実行が止まらないとき\">セルの実行が止まらないとき</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#セルの操作\">セルの操作</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#ノートブックの参照\">ノートブックの参照</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#ノートブックのダウンロード\">ノートブックのダウンロード</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"1-1.html\">1-1. 数値演算</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"1-2.html\">1-2. 変数と関数の基礎</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"1-3.html\">1-3. 論理・比較演算と条件分岐の基礎</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"1-4.html\">1-4. テストとデバッグ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../2/2-1.html\">2-1. 文字列 (string)</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../2/2-2.html\">2-2. リスト (list)</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../2/2-3.html\">2-3. 条件分岐</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../3/3-1.html\">3-1. 辞書 (dictionary)</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../3/3-2.html\">3-2. 繰り返し</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../3/3-3.html\">3-3. 関数</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../4/4-1.html\">4-1. ファイル入出力の基本</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../4/4-2.html\">4-2. イテラブルとイテレータ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../4/4-3.html\">4-3. ディレクトリと木構造</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../5/5-1.html\">5-1. モジュールの使い方</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../5/5-2.html\">5-2. モジュールの作り方</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../5/5-3.html\">5-3. NumPyライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../6/6-1.html\">6-1. 内包表記</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../6/6-2.html\">6-2. 高階関数</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../6/6-3.html\">6-3. クラス</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../7/7-1.html\">7-1. pandasライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../7/7-2.html\">7-2. scikit-learnライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/1-jupyter-notebook.html\">▲Jupyter Notebook の使い方</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/2-set.html\">▲セット (set)</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/3-recursion.html\">▲再帰</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/3-visualization.html\">▲簡単なデータの可視化</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/4-csv.html\">▲CSVファイルの入出力</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/5-bokeh.html\">▲Bokehライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/5-command.html\">▲Pythonスクリプトとコマンドライン実行</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/5-matplotlib.html\">▲Matplotlibライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/5-re.html\">▲正規表現</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../index_of_terms.html\">索引</a></li>\n</ul>\n\n<div class=\"relations\">\n<h3>Related Topics</h3>\n<ul>\n  <li><a href=\"../index.html\">Documentation overview</a><ul>\n      <li>Previous: <a href=\"../index.html\" title=\"previous chapter\">Pythonプログラミング入門</a></li>\n      <li>Next: <a href=\"1-1.html\" title=\"next chapter\">1-1. 数値演算</a></li>\n  </ul></li>\n</ul>\n</div>\n<search id=\"searchbox\" style=\"display: none\" role=\"search\">\n  <h3 id=\"searchlabel\">Quick search</h3>\n    <div class=\"searchformwrapper\">\n    <form class=\"search\" action=\"../search.html\" method=\"get\">\n      <input type=\"text\" name=\"q\" aria-labelledby=\"searchlabel\" autocomplete=\"off\" autocorrect=\"off\" autocapitalize=\"off\" spellcheck=\"false\"/>\n      <input type=\"submit\" value=\"Go\" />\n    </form>\n    </div>\n</search>\n<script>document.getElementById('searchbox').style.display = \"block\"</script>\n\n\n\n\n\n\n\n\n        </div>\n      </div>\n      <div class=\"clearer\"></div>\n    </div>\n    <div class=\"footer\">\n      &#169;2020–2024, 東京大学 数理・情報教育研究センター (CC BY-NC-ND 4.0).\n      \n      |\n      Powered by <a href=\"https://www.sphinx-doc.org/\">Sphinx 8.0.2</a>\n      &amp; <a href=\"https://alabaster.readthedocs.io\">Alabaster 1.0.0</a>\n      \n    </div>\n\n    \n\n    \n    <script>\n\n      var _gaq = _gaq || [];\n      _gaq.push(['_setAccount', 'G-8M0RXGPPSR']);\n      _gaq.push(['_setDomainName', 'none']);\n      _gaq.push(['_setAllowLinker', true]);\n      _gaq.push(['_trackPageview']);\n\n      (function() {\n        var ga = document.createElement('script'); ga.async = true;\n        ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'https://www') + '.google-analytics.com/ga.js';\n        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);\n      })();\n\n    </script>\n    \n  </body>\n</html>"
  },
  {
    "path": "docs/1/1-1.html",
    "content": "<!DOCTYPE html>\n\n<html lang=\"jp\" data-content_root=\"../\">\n  <head>\n    <meta charset=\"utf-8\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" /><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n\n    <!-- Google tag (gtag.js) -->\n    <script async src=\"https://www.googletagmanager.com/gtag/js?id=G-8M0RXGPPSR\"></script>\n    <script>\n        window.dataLayer = window.dataLayer || [];\n        function gtag(){dataLayer.push(arguments);}\n        gtag('js', new Date());\n        gtag('config', 'G-8M0RXGPPSR');\n    </script>\n    \n    <title>1-1. 数値演算 &#8212; Pythonプログラミング入門  documentation</title>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/pygments.css?v=d1102ebc\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/basic.css?v=c058f7c8\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/alabaster.css?v=27fed22d\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/nbsphinx-code-cells.css\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/custom.css?v=1a1aa8dd\" />\n    <script src=\"../_static/documentation_options.js?v=3ff7d7a7\"></script>\n    <script src=\"../_static/doctools.js?v=9a2dae69\"></script>\n    <script src=\"../_static/sphinx_highlight.js?v=dc90522c\"></script>\n    <script crossorigin=\"anonymous\" integrity=\"sha256-Ae2Vz/4ePdIu6ZyI/5ZGsYnb+m0JlOmKPjt6XZ9JJkA=\" src=\"https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.4/require.min.js\"></script>\n    <script>window.MathJax = {\"tex\": {\"inlineMath\": [[\"$\", \"$\"], [\"\\\\(\", \"\\\\)\"]], \"processEscapes\": true}, \"options\": {\"ignoreHtmlClass\": \"tex2jax_ignore|mathjax_ignore|document\", \"processHtmlClass\": \"tex2jax_process|mathjax_process|math|output_area\"}}</script>\n    <script defer=\"defer\" src=\"https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js\"></script>\n    <link rel=\"index\" title=\"Index\" href=\"../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../search.html\" />\n    <link rel=\"next\" title=\"1-2. 変数と関数の基礎\" href=\"1-2.html\" />\n    <link rel=\"prev\" title=\"1-0. Colaboratory (Colab) の使い方\" href=\"1-0.html\" />\n   \n  <link rel=\"stylesheet\" href=\"../_static/custom.css\" type=\"text/css\" />\n  \n\n  \n  \n\n  </head><body>\n  \n\n    <div class=\"document\">\n      <div class=\"documentwrapper\">\n        <div class=\"bodywrapper\">\n          \n\n          <div class=\"body\" role=\"main\">\n            \n  <section id=\"1-1.-数値演算\">\n<h1>1-1. 数値演算<a class=\"headerlink\" href=\"#1-1.-数値演算\" title=\"Link to this heading\">¶</a></h1>\n<p>数値演算について説明します。</p>\n<p>参考</p>\n<ul class=\"simple\">\n<li><p><a class=\"reference external\" href=\"https://docs.python.org/ja/3/tutorial/introduction.html#using-python-as-a-calculator\">https://docs.python.org/ja/3/tutorial/introduction.html#using-python-as-a-calculator</a></p></li>\n<li><p><a class=\"reference external\" href=\"https://docs.python.org/ja/3/tutorial/modules.html\">https://docs.python.org/ja/3/tutorial/modules.html</a></p></li>\n<li><p><a class=\"reference external\" href=\"https://docs.python.org/ja/3/library/numeric.html\">https://docs.python.org/ja/3/library/numeric.html</a></p></li>\n<li><p><a class=\"reference external\" href=\"https://docs.python.org/ja/3/library/math.html\">https://docs.python.org/ja/3/library/math.html</a></p></li>\n</ul>\n<section id=\"簡単な算術計算\">\n<h2>簡単な算術計算<a class=\"headerlink\" href=\"#簡単な算術計算\" title=\"Link to this heading\">¶</a></h2>\n<p>CodeセルにPythonの式を入力して、プレイボタンを押すか、 Shiftを押しながらEnterを押すと、式が評価され、その結果の値がセルの下に挿入されます。</p>\n<p>1+1 の計算をしてみましょう。次のセルに <code class=\"docutils literal notranslate\"><span class=\"pre\">1+1</span></code> と入力して、 Shiftを押しながらEnterを押してください。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[ ]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span>\n</pre></div>\n</div>\n</div>\n<p>このようにして、電卓の代わりにPythonを使うことができます。<code class=\"docutils literal notranslate\"><span class=\"pre\">+</span></code> は言うまでもなく<strong>足し算</strong>を表しています。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[1]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"mi\">7</span><span class=\"o\">-</span><span class=\"mi\">2</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[1]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n5\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[2]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"mi\">7</span><span class=\"o\">*</span><span class=\"mi\">2</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[2]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n14\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[3]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"mi\">7</span><span class=\"o\">**</span><span class=\"mi\">2</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[3]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n49\n</pre></div></div>\n</div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">-</span></code> は<strong>引き算</strong>、<code class=\"docutils literal notranslate\"><span class=\"pre\">*</span></code> は<strong>掛け算</strong>、<code class=\"docutils literal notranslate\"><span class=\"pre\">**</span></code> は<strong>べき乗</strong>を表しています。</p>\n<p>式を適当に書き換えてから、Shiftを押しながらEnterを押すと、 書き換えた後の式が評価されて、セルの下の値はその結果で置き換わります。 たとえば、上の <code class=\"docutils literal notranslate\"><span class=\"pre\">2</span></code> を <code class=\"docutils literal notranslate\"><span class=\"pre\">100</span></code> に書き換えて、7の100乗を求めてみてください。</p>\n<p>割り算はどうなるでしょうか。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[4]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"mi\">7</span><span class=\"o\">/</span><span class=\"mi\">2</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[4]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n3.5\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[5]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"mi\">7</span><span class=\"o\">//</span><span class=\"mi\">2</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[5]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n3\n</pre></div></div>\n</div>\n<p>Pythonでは、<strong>割り算</strong>（<strong>除算</strong>）は <code class=\"docutils literal notranslate\"><span class=\"pre\">/</span></code> で表され、<strong>整数除算</strong>は <code class=\"docutils literal notranslate\"><span class=\"pre\">//</span></code> で表されます。 <code class=\"docutils literal notranslate\"><span class=\"pre\">//</span></code> は小数部を切り捨てた整数値（<strong>商</strong>）を返します。</p>\n<p>整数同士の <code class=\"docutils literal notranslate\"><span class=\"pre\">//</span></code> の結果は整数になります。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[6]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"mi\">7</span><span class=\"o\">/</span><span class=\"mi\">1</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[6]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n7.0\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[7]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"mi\">7</span><span class=\"o\">//</span><span class=\"mi\">1</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[7]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n7\n</pre></div></div>\n</div>\n<p>整数除算の<strong>余り</strong>（<strong>剰余</strong>）を求めたいときは、別の演算子 <code class=\"docutils literal notranslate\"><span class=\"pre\">%</span></code> を用います。</p>\n<p>整数同士の <code class=\"docutils literal notranslate\"><span class=\"pre\">%</span></code> の結果は整数になります。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[8]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"mi\">7</span><span class=\"o\">%</span><span class=\"k\">2</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[8]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n1\n</pre></div></div>\n</div>\n</section>\n<section id=\"コメント\">\n<h2>コメント<a class=\"headerlink\" href=\"#コメント\" title=\"Link to this heading\">¶</a></h2>\n<p>Pythonでは一般に、コードの中に <code class=\"docutils literal notranslate\"><span class=\"pre\">#</span></code> が出現すると、それ以降、その行の終わりまでが<strong>コメント</strong>になります。 コメントは行頭からも、行の途中からでも始めることができます。</p>\n<p>プログラムの実行時には、コメントは無視されます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[9]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"c1\"># このように行頭に &#39;#&#39; をおけば、行全体をコメントとすることができます。</span>\n\n<span class=\"c1\"># 次のようにコード行に続けて直前のコードについての説明をコメントとして書くこともできます。</span>\n<span class=\"mi\">2</span><span class=\"o\">**</span><span class=\"mi\">10</span>  <span class=\"c1\"># 2の10乗を計算します</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[9]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n1024\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[10]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"c1\"># 次のようにコード行自体をコメントとすることで、その行を無視させる（コメントアウトする）こともよく行われます。</span>\n<span class=\"c1\"># 2**10  # 2の10乗を計算します この行が「コメントアウト」された</span>\n<span class=\"mi\">2</span><span class=\"o\">**</span><span class=\"mi\">12</span>  <span class=\"c1\"># 実は計算したいのは2の12乗でした</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[10]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n4096\n</pre></div></div>\n</div>\n</section>\n<section id=\"整数と実数\">\n<h2>整数と実数<a class=\"headerlink\" href=\"#整数と実数\" title=\"Link to this heading\">¶</a></h2>\n<p>Pythonでは、<strong>整数</strong>と小数点のある数（<strong>実数</strong>）は、数学的に同じ数を表す場合でも、 コンピュータの中で異なる形式で記憶されますので、表示は異なります。 （実数は<strong>浮動小数点数</strong>ともいいます。）</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[11]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"mi\">7</span><span class=\"o\">/</span><span class=\"mi\">1</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[11]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n7.0\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[12]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"mi\">7</span><span class=\"o\">//</span><span class=\"mi\">1</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[12]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n7\n</pre></div></div>\n</div>\n<p>しかし、以下のように、比較を行うと両者は等しいものとして扱われます。 値同士が等しいかどうかを調べる <code class=\"docutils literal notranslate\"><span class=\"pre\">==</span></code> という演算子については、後で紹介します。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[13]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"mi\">7</span><span class=\"o\">/</span><span class=\"mi\">1</span> <span class=\"o\">==</span> <span class=\"mi\">7</span><span class=\"o\">//</span><span class=\"mi\">1</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[13]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nTrue\n</pre></div></div>\n</div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">+</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">-</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">*</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">//</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">%</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">**</span></code> では、2つの数が整数ならば結果も整数になります。 2つの数が実数であったり、整数と実数が混ざっていたら、結果は実数になります。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[14]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"mi\">2</span><span class=\"o\">+</span><span class=\"mi\">5</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[14]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n7\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[15]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"mi\">2</span><span class=\"o\">+</span><span class=\"mf\">5.0</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[15]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n7.0\n</pre></div></div>\n</div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">/</span></code> の結果は必ず実数となります。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[16]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"mi\">7</span><span class=\"o\">/</span><span class=\"mi\">1</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[16]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n7.0\n</pre></div></div>\n</div>\n<p>ここで、自分で色々と式を入力してみてください。 以下に、いくつかセルを用意しておきます。 足りなければ、Insertメニューを使ってセルを追加することができます。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[ ]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span>\n</pre></div>\n</div>\n</div>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[ ]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span>\n</pre></div>\n</div>\n</div>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[ ]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span>\n</pre></div>\n</div>\n</div>\n<section id=\"実数のべき表示\">\n<h3>実数のべき表示<a class=\"headerlink\" href=\"#実数のべき表示\" title=\"Link to this heading\">¶</a></h3>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[17]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"mf\">2.0</span><span class=\"o\">**</span><span class=\"mi\">1000</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[17]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n1.0715086071862673e+301\n</pre></div></div>\n</div>\n<p>非常に大きな実数は、10のべきとともに表示（<strong>べき表示</strong>）されます。 <code class=\"docutils literal notranslate\"><span class=\"pre\">e+301</span></code> は10の301乗を意味します。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[18]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"mf\">2.0</span><span class=\"o\">**-</span><span class=\"mi\">1000</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[18]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n9.332636185032189e-302\n</pre></div></div>\n</div>\n<p>非常に小さな実数も、10のべきとともに表示されます。 <code class=\"docutils literal notranslate\"><span class=\"pre\">e-302</span></code> は10の-302乗を意味します。</p>\n</section>\n<section id=\"いくらでも大きくなる整数\">\n<h3>いくらでも大きくなる整数<a class=\"headerlink\" href=\"#いくらでも大きくなる整数\" title=\"Link to this heading\">¶</a></h3>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[19]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"mi\">2</span><span class=\"o\">**</span><span class=\"mi\">1000</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[19]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n10715086071862673209484250490600018105614048117055336074437503883703510511249361224931983788156958581275946729175531468251871452856923140435984577574698574803934567774824230985421074605062371141877954182153046474983581941267398767559165543946077062914571196477686542167660429831652624386837205668069376\n</pre></div></div>\n</div>\n<p>このように、Pythonでは整数はいくらでも大きくなります。 もちろん、コンピュータのメモリに納まる限りにおいてですが。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[20]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"mi\">2</span><span class=\"o\">**</span><span class=\"mi\">2</span><span class=\"o\">**</span><span class=\"mi\">2</span><span class=\"o\">**</span><span class=\"mi\">2</span><span class=\"o\">**</span><span class=\"mi\">2</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n<span class=\"ansi-red-fg\">---------------------------------------------------------------------------</span>\n<span class=\"ansi-red-fg\">ValueError</span>                                Traceback (most recent call last)\nFile <span class=\"ansi-green-fg\">~/Projects/utpython/lib/python3.12/site-packages/IPython/core/formatters.py:711</span>, in <span class=\"ansi-cyan-fg\">PlainTextFormatter.__call__</span><span class=\"ansi-blue-fg\">(self, obj)</span>\n<span class=\"ansi-green-intense-fg ansi-bold\">    704</span> stream <span style=\"color: rgb(98,98,98)\">=</span> StringIO()\n<span class=\"ansi-green-intense-fg ansi-bold\">    705</span> printer <span style=\"color: rgb(98,98,98)\">=</span> pretty<span style=\"color: rgb(98,98,98)\">.</span>RepresentationPrinter(stream, <span style=\"color: rgb(0,135,0)\">self</span><span style=\"color: rgb(98,98,98)\">.</span>verbose,\n<span class=\"ansi-green-intense-fg ansi-bold\">    706</span>     <span style=\"color: rgb(0,135,0)\">self</span><span style=\"color: rgb(98,98,98)\">.</span>max_width, <span style=\"color: rgb(0,135,0)\">self</span><span style=\"color: rgb(98,98,98)\">.</span>newline,\n<span class=\"ansi-green-intense-fg ansi-bold\">    707</span>     max_seq_length<span style=\"color: rgb(98,98,98)\">=</span><span style=\"color: rgb(0,135,0)\">self</span><span style=\"color: rgb(98,98,98)\">.</span>max_seq_length,\n<span class=\"ansi-green-intense-fg ansi-bold\">    708</span>     singleton_pprinters<span style=\"color: rgb(98,98,98)\">=</span><span style=\"color: rgb(0,135,0)\">self</span><span style=\"color: rgb(98,98,98)\">.</span>singleton_printers,\n<span class=\"ansi-green-intense-fg ansi-bold\">    709</span>     type_pprinters<span style=\"color: rgb(98,98,98)\">=</span><span style=\"color: rgb(0,135,0)\">self</span><span style=\"color: rgb(98,98,98)\">.</span>type_printers,\n<span class=\"ansi-green-intense-fg ansi-bold\">    710</span>     deferred_pprinters<span style=\"color: rgb(98,98,98)\">=</span><span style=\"color: rgb(0,135,0)\">self</span><span style=\"color: rgb(98,98,98)\">.</span>deferred_printers)\n<span class=\"ansi-green-fg\">--&gt; 711</span> <span class=\"ansi-yellow-bg\">printer</span><span class=\"ansi-yellow-bg\" style=\"color: rgb(98,98,98)\">.</span><span class=\"ansi-yellow-bg\">pretty</span><span class=\"ansi-yellow-bg\">(</span><span class=\"ansi-yellow-bg\">obj</span><span class=\"ansi-yellow-bg\">)</span>\n<span class=\"ansi-green-intense-fg ansi-bold\">    712</span> printer<span style=\"color: rgb(98,98,98)\">.</span>flush()\n<span class=\"ansi-green-intense-fg ansi-bold\">    713</span> <span class=\"ansi-bold\" style=\"color: rgb(0,135,0)\">return</span> stream<span style=\"color: rgb(98,98,98)\">.</span>getvalue()\n\nFile <span class=\"ansi-green-fg\">~/Projects/utpython/lib/python3.12/site-packages/IPython/lib/pretty.py:394</span>, in <span class=\"ansi-cyan-fg\">RepresentationPrinter.pretty</span><span class=\"ansi-blue-fg\">(self, obj)</span>\n<span class=\"ansi-green-intense-fg ansi-bold\">    391</span> <span class=\"ansi-bold\" style=\"color: rgb(0,135,0)\">for</span> <span style=\"color: rgb(0,135,0)\">cls</span> <span class=\"ansi-bold\" style=\"color: rgb(175,0,255)\">in</span> _get_mro(obj_class):\n<span class=\"ansi-green-intense-fg ansi-bold\">    392</span>     <span class=\"ansi-bold\" style=\"color: rgb(0,135,0)\">if</span> <span style=\"color: rgb(0,135,0)\">cls</span> <span class=\"ansi-bold\" style=\"color: rgb(175,0,255)\">in</span> <span style=\"color: rgb(0,135,0)\">self</span><span style=\"color: rgb(98,98,98)\">.</span>type_pprinters:\n<span class=\"ansi-green-intense-fg ansi-bold\">    393</span>         <span style=\"color: rgb(95,135,135)\"># printer registered in self.type_pprinters</span>\n<span class=\"ansi-green-fg\">--&gt; 394</span>         <span class=\"ansi-bold\" style=\"color: rgb(0,135,0)\">return</span> <span class=\"ansi-yellow-bg\" style=\"color: rgb(0,135,0)\">self</span><span class=\"ansi-yellow-bg\" style=\"color: rgb(98,98,98)\">.</span><span class=\"ansi-yellow-bg\">type_pprinters</span><span class=\"ansi-yellow-bg\">[</span><span class=\"ansi-yellow-bg\" style=\"color: rgb(0,135,0)\">cls</span><span class=\"ansi-yellow-bg\">]</span><span class=\"ansi-yellow-bg\">(</span><span class=\"ansi-yellow-bg\">obj</span><span class=\"ansi-yellow-bg\">,</span><span class=\"ansi-yellow-bg\"> </span><span class=\"ansi-yellow-bg\" style=\"color: rgb(0,135,0)\">self</span><span class=\"ansi-yellow-bg\">,</span><span class=\"ansi-yellow-bg\"> </span><span class=\"ansi-yellow-bg\">cycle</span><span class=\"ansi-yellow-bg\">)</span>\n<span class=\"ansi-green-intense-fg ansi-bold\">    395</span>     <span class=\"ansi-bold\" style=\"color: rgb(0,135,0)\">else</span>:\n<span class=\"ansi-green-intense-fg ansi-bold\">    396</span>         <span style=\"color: rgb(95,135,135)\"># deferred printer</span>\n<span class=\"ansi-green-intense-fg ansi-bold\">    397</span>         printer <span style=\"color: rgb(98,98,98)\">=</span> <span style=\"color: rgb(0,135,0)\">self</span><span style=\"color: rgb(98,98,98)\">.</span>_in_deferred_types(<span style=\"color: rgb(0,135,0)\">cls</span>)\n\nFile <span class=\"ansi-green-fg\">~/Projects/utpython/lib/python3.12/site-packages/IPython/lib/pretty.py:787</span>, in <span class=\"ansi-cyan-fg\">_repr_pprint</span><span class=\"ansi-blue-fg\">(obj, p, cycle)</span>\n<span class=\"ansi-green-intense-fg ansi-bold\">    785</span> <span style=\"color: rgb(175,0,0)\">&#34;&#34;&#34;A pprint that just redirects to the normal repr function.&#34;&#34;&#34;</span>\n<span class=\"ansi-green-intense-fg ansi-bold\">    786</span> <span style=\"color: rgb(95,135,135)\"># Find newlines and replace them with p.break_()</span>\n<span class=\"ansi-green-fg\">--&gt; 787</span> output <span style=\"color: rgb(98,98,98)\">=</span> <span class=\"ansi-yellow-bg\" style=\"color: rgb(0,135,0)\">repr</span><span class=\"ansi-yellow-bg\">(</span><span class=\"ansi-yellow-bg\">obj</span><span class=\"ansi-yellow-bg\">)</span>\n<span class=\"ansi-green-intense-fg ansi-bold\">    788</span> lines <span style=\"color: rgb(98,98,98)\">=</span> output<span style=\"color: rgb(98,98,98)\">.</span>splitlines()\n<span class=\"ansi-green-intense-fg ansi-bold\">    789</span> <span class=\"ansi-bold\" style=\"color: rgb(0,135,0)\">with</span> p<span style=\"color: rgb(98,98,98)\">.</span>group():\n\n<span class=\"ansi-red-fg\">ValueError</span>: Exceeds the limit (4300 digits) for integer string conversion; use sys.set_int_max_str_digits() to increase the limit\n</pre></div></div>\n</div>\n</section>\n<section id=\"整数と実数の間の変換\">\n<h3>整数と実数の間の変換<a class=\"headerlink\" href=\"#整数と実数の間の変換\" title=\"Link to this heading\">¶</a></h3>\n<p>実数を整数に変換するには、<code class=\"docutils literal notranslate\"><span class=\"pre\">int</span></code> という関数を用います。 （関数に関する一般的な説明は1-2を参照してください。） <code class=\"docutils literal notranslate\"><span class=\"pre\">int(x)</span></code> は、実数 <code class=\"docutils literal notranslate\"><span class=\"pre\">x</span></code> を（<code class=\"docutils literal notranslate\"><span class=\"pre\">0</span></code> の方向に）切り下げた結果を返します。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[21]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">int</span><span class=\"p\">(</span><span class=\"mf\">2.9</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[21]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n2\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[22]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">int</span><span class=\"p\">(</span><span class=\"o\">-</span><span class=\"mf\">2.9</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[22]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n-2\n</pre></div></div>\n</div>\n<p>逆に、整数を実数に変換するには、<code class=\"docutils literal notranslate\"><span class=\"pre\">float</span></code> という関数を用います。 <code class=\"docutils literal notranslate\"><span class=\"pre\">float(i)</span></code> は、整数 <code class=\"docutils literal notranslate\"><span class=\"pre\">i</span></code> を実数に変換した結果を返します。 たとえば <code class=\"docutils literal notranslate\"><span class=\"pre\">i+0.0</span></code> としても、<code class=\"docutils literal notranslate\"><span class=\"pre\">i</span></code> を実数に変換できます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[23]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">float</span><span class=\"p\">(</span><span class=\"mi\">2</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[23]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n2.0\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[24]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"mi\">2</span><span class=\"o\">+</span><span class=\"mf\">0.0</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[24]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n2.0\n</pre></div></div>\n</div>\n</section>\n<section id=\"数値誤差\">\n<h3>数値誤差<a class=\"headerlink\" href=\"#数値誤差\" title=\"Link to this heading\">¶</a></h3>\n<p>浮動小数点数には、<strong>数値誤差</strong>が不可避です。 これは、有限のビット数で、無限に小さくなり得る小数刻みを表現しようとするためです。 （参照：<a class=\"reference external\" href=\"https://ja.wikipedia.org/wiki/%E6%B5%AE%E5%8B%95%E5%B0%8F%E6%95%B0%E7%82%B9%E6%95%B0#%E3%82%A8%E3%83%A9%E3%83%BC%EF%BC%88%E8%AA%A4%E5%B7%AE%EF%BC%89\">Wikipedia - 浮動小数点数</a>）</p>\n<p>Pythonでは、整数は無限桁で表現されるため、整数演算には誤差が生じません。 しかし、整数を実数に変換したときには、一般に誤差が生じます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[25]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"mi\">10</span><span class=\"o\">**</span><span class=\"mi\">60</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[25]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n1000000000000000000000000000000000000000000000000000000000000\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[26]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">float</span><span class=\"p\">(</span><span class=\"mi\">10</span><span class=\"o\">**</span><span class=\"mi\">60</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[26]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n1e+60\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[27]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">int</span><span class=\"p\">(</span><span class=\"nb\">float</span><span class=\"p\">(</span><span class=\"mi\">10</span><span class=\"o\">**</span><span class=\"mi\">60</span><span class=\"p\">))</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[27]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n999999999999999949387135297074018866963645011013410073083904\n</pre></div></div>\n</div>\n<p>数え上げのような離散的な値を扱う時には、実数を経由せずに、整数のみで演算するようにしましょう。</p>\n</section>\n</section>\n<section id=\"演算子の優先順位と括弧\">\n<h2>演算子の優先順位と括弧<a class=\"headerlink\" href=\"#演算子の優先順位と括弧\" title=\"Link to this heading\">¶</a></h2>\n<p>掛け算や割り算は足し算や引き算よりも先に評価されます。 すなわち、掛け算や割り算の方が足し算や引き算よりも<strong>優先順位</strong>が高いと定義されています。</p>\n<p><strong>括弧</strong>を使って式の評価順序を指定することができます。</p>\n<p>なお、数式 <span class=\"math notranslate nohighlight\">\\(a(b-c)\\)</span>、<span class=\"math notranslate nohighlight\">\\((a-b)(c-d)\\)</span> は、それぞれ <span class=\"math notranslate nohighlight\">\\(a\\)</span> と <span class=\"math notranslate nohighlight\">\\(b-c\\)</span>、<span class=\"math notranslate nohighlight\">\\(a-b\\)</span> と <span class=\"math notranslate nohighlight\">\\(c-d\\)</span> の積を意味しますが、 コードでは、<code class=\"docutils literal notranslate\"><span class=\"pre\">a*(b-c)</span></code> や <code class=\"docutils literal notranslate\"><span class=\"pre\">(a-b)*(c-d)</span></code> のように積の演算子である <code class=\"docutils literal notranslate\"><span class=\"pre\">*</span></code> を明記する必要があることに注意してください。</p>\n<p>また、数や演算子の間には、自由に空白を入れることができます。（後でもう一度説明します。）</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[28]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"mi\">7</span> <span class=\"o\">-</span> <span class=\"mi\">2</span> <span class=\"o\">*</span> <span class=\"mi\">3</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[28]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n1\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[29]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"p\">(</span><span class=\"mi\">7</span> <span class=\"o\">-</span> <span class=\"mi\">2</span><span class=\"p\">)</span> <span class=\"o\">*</span> <span class=\"mi\">3</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[29]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n15\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[30]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"mi\">17</span> <span class=\"o\">-</span> <span class=\"mi\">17</span><span class=\"o\">//</span><span class=\"mi\">3</span><span class=\"o\">*</span><span class=\"mi\">3</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[30]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n2\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[31]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"mi\">56</span> <span class=\"o\">**</span> <span class=\"mi\">4</span> <span class=\"o\">**</span> <span class=\"mi\">2</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[31]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n9354238358105289311446368256\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[32]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"mi\">56</span> <span class=\"o\">**</span> <span class=\"mi\">16</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[32]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n9354238358105289311446368256\n</pre></div></div>\n</div>\n<p>上の例では、<code class=\"docutils literal notranslate\"><span class=\"pre\">4**2</span></code> が先に評価されて、<code class=\"docutils literal notranslate\"><span class=\"pre\">56**16</span></code> が計算されます。 つまり、<code class=\"docutils literal notranslate\"><span class=\"pre\">x**y**z</span></code> = <code class=\"docutils literal notranslate\"><span class=\"pre\">x**(y**z)</span></code> が成り立ちます。 このことをもって、<code class=\"docutils literal notranslate\"><span class=\"pre\">**</span></code> は右に結合するといいます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[33]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"mi\">16</span><span class=\"o\">/</span><span class=\"mi\">8</span><span class=\"o\">/</span><span class=\"mi\">2</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[33]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n1.0\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[34]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"p\">(</span><span class=\"mi\">16</span><span class=\"o\">/</span><span class=\"mi\">8</span><span class=\"p\">)</span><span class=\"o\">/</span><span class=\"mi\">2</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[34]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n1.0\n</pre></div></div>\n</div>\n<p>上の例では、<code class=\"docutils literal notranslate\"><span class=\"pre\">16/8</span></code> が先に評価されて、<code class=\"docutils literal notranslate\"><span class=\"pre\">2/2</span></code> が計算されます。 つまり、<code class=\"docutils literal notranslate\"><span class=\"pre\">x/y/z</span></code> = <code class=\"docutils literal notranslate\"><span class=\"pre\">(x/y)/z</span></code> が成り立ちます。 このことをもって、<code class=\"docutils literal notranslate\"><span class=\"pre\">/</span></code> は左に結合するといいます。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">*</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">/</span></code> をまぜても左に結合します。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[35]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"mi\">10</span><span class=\"o\">/</span><span class=\"mi\">2</span><span class=\"o\">*</span><span class=\"mi\">3</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[35]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n15.0\n</pre></div></div>\n</div>\n<p>以上のように、演算子によって式の評価の順番がかわりますので注意してください。</p>\n<p>ではまた、自分で色々と式を入力してみてください。 以下に、いくつかセルを用意しておきます。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[ ]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span>\n</pre></div>\n</div>\n</div>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[ ]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span>\n</pre></div>\n</div>\n</div>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[ ]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span>\n</pre></div>\n</div>\n</div>\n<section id=\"単項の-+-と--\">\n<h3>単項の <code class=\"docutils literal notranslate\"><span class=\"pre\">+</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">-</span></code><a class=\"headerlink\" href=\"#単項の-+-と--\" title=\"Link to this heading\">¶</a></h3>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">+</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">-</span></code> は、単項の演算子（<strong>単項演算子</strong>）としても使えます。 （これらの演算子の後に1つだけ数が書かれます。 前と後の両方に数が書かれる演算子は<strong>2項演算子</strong>と言います。）</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[36]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"o\">-</span><span class=\"mi\">3</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[36]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n-3\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[37]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"o\">+</span><span class=\"mi\">3</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[37]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n3\n</pre></div></div>\n</div>\n</section>\n</section>\n<section id=\"算術演算子のまとめ\">\n<h2>算術演算子のまとめ<a class=\"headerlink\" href=\"#算術演算子のまとめ\" title=\"Link to this heading\">¶</a></h2>\n<p>算術演算子を、評価の優先順位にしたがって、すなわち結合力の強い順にまとめておきましょう。</p>\n<p>まず、2項のべき演算子 <code class=\"docutils literal notranslate\"><span class=\"pre\">**</span></code> が最も強く結合します。 <code class=\"docutils literal notranslate\"><span class=\"pre\">**</span></code> は右の方から計算され、このことを「右に結合する」と表します。</p>\n<p>次に、単項の <code class=\"docutils literal notranslate\"><span class=\"pre\">+</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">-</span></code> が強く結合します。 なお、 <code class=\"docutils literal notranslate\"><span class=\"pre\">**</span></code> の右側に単項の <code class=\"docutils literal notranslate\"><span class=\"pre\">+</span></code> や <code class=\"docutils literal notranslate\"><span class=\"pre\">-</span></code> がある場合は、<code class=\"docutils literal notranslate\"><span class=\"pre\">+</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">-</span></code> がより強く結合します。 例えば、 <code class=\"docutils literal notranslate\"><span class=\"pre\">-10</span> <span class=\"pre\">**</span> <span class=\"pre\">2</span></code> では <code class=\"docutils literal notranslate\"><span class=\"pre\">**</span></code> がより強く結合し <code class=\"docutils literal notranslate\"><span class=\"pre\">-100</span></code> となり、 <code class=\"docutils literal notranslate\"><span class=\"pre\">10</span> <span class=\"pre\">**</span> <span class=\"pre\">-2</span></code> では <code class=\"docutils literal notranslate\"><span class=\"pre\">-</span></code> がより強く結合し <code class=\"docutils literal notranslate\"><span class=\"pre\">0.01</span></code> となります。</p>\n<p>その次に、2項の <code class=\"docutils literal notranslate\"><span class=\"pre\">*</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">/</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">//</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">%</span></code> が強く結合します。これらは左に結合します。</p>\n<p>最後に、2項の <code class=\"docutils literal notranslate\"><span class=\"pre\">+</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">-</span></code> は最も弱く結合します。これらも左に結合します。</p>\n</section>\n<section id=\"空白\">\n<h2>空白<a class=\"headerlink\" href=\"#空白\" title=\"Link to this heading\">¶</a></h2>\n<p>既に <code class=\"docutils literal notranslate\"><span class=\"pre\">7</span> <span class=\"pre\">-</span> <span class=\"pre\">2</span> <span class=\"pre\">*</span> <span class=\"pre\">3</span></code> のような例が出てきましたが、 演算子と数の間や、演算子と変数（後述）の間には、空白を入れることができます。 ここで<strong>空白</strong>とは、<strong>半角の空白</strong>のことで、英数字と同様に1バイトの文字コードに含まれているものです。</p>\n<p>複数の文字から成る演算子、たとえば <code class=\"docutils literal notranslate\"><span class=\"pre\">**</span></code> や <code class=\"docutils literal notranslate\"><span class=\"pre\">//</span></code> の間に空白を入れることはできません。 エラーになることでしょう。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[38]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"mi\">7</span> <span class=\"o\">**</span><span class=\"mi\">2</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[38]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n49\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[39]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"mi\">7</span><span class=\"o\">*</span> <span class=\"o\">*</span><span class=\"mi\">2</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n<span class=\"ansi-cyan-fg\">  Cell </span><span class=\"ansi-green-fg\">In[39], line 1</span>\n<span class=\"ansi-red-fg\">    7* *2</span>\n       ^\n<span class=\"ansi-red-fg\">SyntaxError</span><span class=\"ansi-red-fg\">:</span> invalid syntax\n\n</pre></div></div>\n</div>\n<section id=\"全角の空白\">\n<h3>全角の空白<a class=\"headerlink\" href=\"#全角の空白\" title=\"Link to this heading\">¶</a></h3>\n<p>日本語文字コードである<strong>全角の空白</strong>は、空白とはみなされませんので注意してください。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[40]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"mi\">7</span>　<span class=\"o\">**</span><span class=\"mi\">2</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n<span class=\"ansi-cyan-fg\">  Cell </span><span class=\"ansi-green-fg\">In[40], line 1</span>\n<span class=\"ansi-red-fg\">    7　**2</span>\n     ^\n<span class=\"ansi-red-fg\">SyntaxError</span><span class=\"ansi-red-fg\">:</span> invalid non-printable character U+3000\n\n</pre></div></div>\n</div>\n</section>\n</section>\n<section id=\"エラー\">\n<h2>エラー<a class=\"headerlink\" href=\"#エラー\" title=\"Link to this heading\">¶</a></h2>\n<p>色々と試していると、<strong>エラー</strong>が起こることもあったでしょう。 以下は典型的なエラーです。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[41]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"mi\">10</span><span class=\"o\">/</span><span class=\"mi\">0</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n<span class=\"ansi-red-fg\">---------------------------------------------------------------------------</span>\n<span class=\"ansi-red-fg\">ZeroDivisionError</span>                         Traceback (most recent call last)\nCell <span class=\"ansi-green-fg\">In[41], line 1</span>\n<span class=\"ansi-green-fg\">----&gt; 1</span> <span class=\"ansi-yellow-bg\" style=\"color: rgb(98,98,98)\">10</span><span class=\"ansi-yellow-bg\" style=\"color: rgb(98,98,98)\">/</span><span class=\"ansi-yellow-bg\" style=\"color: rgb(98,98,98)\">0</span>\n\n<span class=\"ansi-red-fg\">ZeroDivisionError</span>: division by zero\n</pre></div></div>\n</div>\n<p>このエラーは、ゼロによる割り算を行ったためです。 <strong>実行時エラー</strong>の典型的なものです。</p>\n<p>エラーが起こった場合は、修正して評価し直すことができます。 上の例で、0 をたとえば 3 に書き換えて評価し直してみてください。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[42]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"mi\">10</span><span class=\"o\">/</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n<span class=\"ansi-cyan-fg\">  Cell </span><span class=\"ansi-green-fg\">In[42], line 1</span>\n<span class=\"ansi-red-fg\">    10/</span>\n       ^\n<span class=\"ansi-red-fg\">SyntaxError</span><span class=\"ansi-red-fg\">:</span> invalid syntax\n\n</pre></div></div>\n</div>\n<p>こちらのエラーは<strong>構文エラー</strong>です。 つまり、入力がPythonの構文に違反しているため実行できなかったのです。</p>\n</section>\n<section id=\"数学関数（モジュールのインポート）\">\n<h2>数学関数（モジュールのインポート）<a class=\"headerlink\" href=\"#数学関数（モジュールのインポート）\" title=\"Link to this heading\">¶</a></h2>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[43]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"kn\">import</span> <span class=\"nn\">math</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[44]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">math</span><span class=\"o\">.</span><span class=\"n\">sqrt</span><span class=\"p\">(</span><span class=\"mi\">2</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[44]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n1.4142135623730951\n</pre></div></div>\n</div>\n<p>数学関係の各種の関数は、<strong>モジュール</strong>（<strong>ライブラリ</strong>）として提供されています。 これらの関数を使いたいときは、上のように、<code class=\"docutils literal notranslate\"><span class=\"pre\">import</span></code> で始まる <code class=\"docutils literal notranslate\"><span class=\"pre\">import</span> <span class=\"pre\">math</span></code> というおまじないを一度唱えます。 そうしますと、<code class=\"docutils literal notranslate\"><span class=\"pre\">math</span></code> というライブラリが読み込まれて（<strong>インポート</strong>されて）、 <code class=\"docutils literal notranslate\"><span class=\"pre\">math.関数名</span></code> という形で関数を用いることができます。 上の例では、平方根を計算する <code class=\"docutils literal notranslate\"><span class=\"pre\">math.sqrt</span></code> という関数が用いられています。</p>\n<p>もう少し例をあげておきましょう。sinとcosは <code class=\"docutils literal notranslate\"><span class=\"pre\">math.sin</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">math.cos</span></code> で求まります。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[45]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">math</span><span class=\"o\">.</span><span class=\"n\">sin</span><span class=\"p\">(</span><span class=\"mi\">0</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[45]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n0.0\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[46]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">math</span><span class=\"o\">.</span><span class=\"n\">pi</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[46]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n3.141592653589793\n</pre></div></div>\n</div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">math.pi</span></code> は、円周率を値とする変数です。</p>\n<p>変数については後に説明されます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[47]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">math</span><span class=\"o\">.</span><span class=\"n\">sin</span><span class=\"p\">(</span><span class=\"n\">math</span><span class=\"o\">.</span><span class=\"n\">pi</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[47]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n1.2246467991473532e-16\n</pre></div></div>\n</div>\n<p>この結果は本当は 0 にならなければならないのですが、 数値誤差のためにこのようになっています。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[48]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">math</span><span class=\"o\">.</span><span class=\"n\">sin</span><span class=\"p\">(</span><span class=\"n\">math</span><span class=\"o\">.</span><span class=\"n\">pi</span><span class=\"o\">/</span><span class=\"mi\">2</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[48]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n1.0\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[49]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">math</span><span class=\"o\">.</span><span class=\"n\">sin</span><span class=\"p\">(</span><span class=\"n\">math</span><span class=\"o\">.</span><span class=\"n\">pi</span><span class=\"o\">/</span><span class=\"mi\">4</span><span class=\"p\">)</span> <span class=\"o\">*</span> <span class=\"mi\">2</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[49]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n1.414213562373095\n</pre></div></div>\n</div>\n</section>\n<section id=\"練習\">\n<h2>練習<a class=\"headerlink\" href=\"#練習\" title=\"Link to this heading\">¶</a></h2>\n<p>黄金比を求めてください。黄金比とは、5 の平方根に 1 を加えて 2 で割ったものです。約 1.618 になるはずです。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[ ]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span>\n</pre></div>\n</div>\n</div>\n</section>\n</section>\n\n\n          </div>\n          \n        </div>\n      </div>\n      <div class=\"sphinxsidebar\" role=\"navigation\" aria-label=\"Main\">\n        <div class=\"sphinxsidebarwrapper\">\n<h1 class=\"logo\"><a href=\"../index.html\">Pythonプログラミング入門</a></h1>\n\n\n\n\n\n\n\n\n<p>\n  <a style=\"font-family: sans-serif; font-size: smaller; background: linear-gradient(to top, #353535 0%, #141414 100%); -webkit-font-smoothing: antialiased; font-weight: normal; text-shadow: rgb(0 0 0 / 40%) 0 -1px 0; padding: 2px 6px; color: #fff; text-decoration: none; border-radius: 4px; border: 1px solid #0d0d0d; box-shadow: inset 0 1px 1px 0 #8f8f8f;\" href=\"https://github.com/utokyo-ipp/utokyo-ipp.github.io\">View on GitHub</a>\n</p><p>\n  <a style=\"font-family: sans-serif; font-size: smaller; background: linear-gradient(to top, #ff1e00 0%, #de1e00 100%); -webkit-font-smoothing: antialiased; font-weight: normal; text-shadow: rgb(0 0 0 / 40%) 0 -1px 0; padding: 2px 6px; color: #fff; text-decoration: none; border-radius: 4px; border: 1px solid #0d0d0d; box-shadow: inset 0 1px 1px 0 #ff8e70;\" href=\"https://utokyo-ipp.github.io/IPP_textbook.pdf\">View PDF</a>\n</p><p>\n  <a style=\"border-bottom: none;\" href=\"https://colab.research.google.com/github/utokyo-ipp/utokyo-ipp.github.io/blob/master/colab/1/1-1.ipynb\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Google Colaboratory\"></a>\n</p><h3>Navigation</h3>\n<ul class=\"current\">\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"1-0.html\">1-0. Colaboratory (Colab) の使い方</a></li>\n<li class=\"toctree-l1 current\"><a class=\"current reference internal\" href=\"#\">1-1. 数値演算</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#簡単な算術計算\">簡単な算術計算</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#コメント\">コメント</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#整数と実数\">整数と実数</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#演算子の優先順位と括弧\">演算子の優先順位と括弧</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#算術演算子のまとめ\">算術演算子のまとめ</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#空白\">空白</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#エラー\">エラー</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#数学関数（モジュールのインポート）\">数学関数（モジュールのインポート）</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#練習\">練習</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"1-2.html\">1-2. 変数と関数の基礎</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"1-3.html\">1-3. 論理・比較演算と条件分岐の基礎</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"1-4.html\">1-4. テストとデバッグ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../2/2-1.html\">2-1. 文字列 (string)</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../2/2-2.html\">2-2. リスト (list)</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../2/2-3.html\">2-3. 条件分岐</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../3/3-1.html\">3-1. 辞書 (dictionary)</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../3/3-2.html\">3-2. 繰り返し</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../3/3-3.html\">3-3. 関数</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../4/4-1.html\">4-1. ファイル入出力の基本</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../4/4-2.html\">4-2. イテラブルとイテレータ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../4/4-3.html\">4-3. ディレクトリと木構造</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../5/5-1.html\">5-1. モジュールの使い方</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../5/5-2.html\">5-2. モジュールの作り方</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../5/5-3.html\">5-3. NumPyライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../6/6-1.html\">6-1. 内包表記</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../6/6-2.html\">6-2. 高階関数</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../6/6-3.html\">6-3. クラス</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../7/7-1.html\">7-1. pandasライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../7/7-2.html\">7-2. scikit-learnライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/1-jupyter-notebook.html\">▲Jupyter Notebook の使い方</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/2-set.html\">▲セット (set)</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/3-recursion.html\">▲再帰</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/3-visualization.html\">▲簡単なデータの可視化</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/4-csv.html\">▲CSVファイルの入出力</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/5-bokeh.html\">▲Bokehライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/5-command.html\">▲Pythonスクリプトとコマンドライン実行</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/5-matplotlib.html\">▲Matplotlibライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/5-re.html\">▲正規表現</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../index_of_terms.html\">索引</a></li>\n</ul>\n\n<div class=\"relations\">\n<h3>Related Topics</h3>\n<ul>\n  <li><a href=\"../index.html\">Documentation overview</a><ul>\n      <li>Previous: <a href=\"1-0.html\" title=\"previous chapter\">1-0. Colaboratory (Colab) の使い方</a></li>\n      <li>Next: <a href=\"1-2.html\" title=\"next chapter\">1-2. 変数と関数の基礎</a></li>\n  </ul></li>\n</ul>\n</div>\n<search id=\"searchbox\" style=\"display: none\" role=\"search\">\n  <h3 id=\"searchlabel\">Quick search</h3>\n    <div class=\"searchformwrapper\">\n    <form class=\"search\" action=\"../search.html\" method=\"get\">\n      <input type=\"text\" name=\"q\" aria-labelledby=\"searchlabel\" autocomplete=\"off\" autocorrect=\"off\" autocapitalize=\"off\" spellcheck=\"false\"/>\n      <input type=\"submit\" value=\"Go\" />\n    </form>\n    </div>\n</search>\n<script>document.getElementById('searchbox').style.display = \"block\"</script>\n\n\n\n\n\n\n\n\n        </div>\n      </div>\n      <div class=\"clearer\"></div>\n    </div>\n    <div class=\"footer\">\n      &#169;2020–2024, 東京大学 数理・情報教育研究センター (CC BY-NC-ND 4.0).\n      \n      |\n      Powered by <a href=\"https://www.sphinx-doc.org/\">Sphinx 8.0.2</a>\n      &amp; <a href=\"https://alabaster.readthedocs.io\">Alabaster 1.0.0</a>\n      \n    </div>\n\n    \n\n    \n    <script>\n\n      var _gaq = _gaq || [];\n      _gaq.push(['_setAccount', 'G-8M0RXGPPSR']);\n      _gaq.push(['_setDomainName', 'none']);\n      _gaq.push(['_setAllowLinker', true]);\n      _gaq.push(['_trackPageview']);\n\n      (function() {\n        var ga = document.createElement('script'); ga.async = true;\n        ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'https://www') + '.google-analytics.com/ga.js';\n        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);\n      })();\n\n    </script>\n    \n  </body>\n</html>"
  },
  {
    "path": "docs/1/1-2.html",
    "content": "<!DOCTYPE html>\n\n<html lang=\"jp\" data-content_root=\"../\">\n  <head>\n    <meta charset=\"utf-8\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" /><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n\n    <!-- Google tag (gtag.js) -->\n    <script async src=\"https://www.googletagmanager.com/gtag/js?id=G-8M0RXGPPSR\"></script>\n    <script>\n        window.dataLayer = window.dataLayer || [];\n        function gtag(){dataLayer.push(arguments);}\n        gtag('js', new Date());\n        gtag('config', 'G-8M0RXGPPSR');\n    </script>\n    \n    <title>1-2. 変数と関数の基礎 &#8212; Pythonプログラミング入門  documentation</title>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/pygments.css?v=d1102ebc\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/basic.css?v=c058f7c8\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/alabaster.css?v=27fed22d\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/nbsphinx-code-cells.css\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/custom.css?v=1a1aa8dd\" />\n    <script src=\"../_static/documentation_options.js?v=3ff7d7a7\"></script>\n    <script src=\"../_static/doctools.js?v=9a2dae69\"></script>\n    <script src=\"../_static/sphinx_highlight.js?v=dc90522c\"></script>\n    <script crossorigin=\"anonymous\" integrity=\"sha256-Ae2Vz/4ePdIu6ZyI/5ZGsYnb+m0JlOmKPjt6XZ9JJkA=\" src=\"https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.4/require.min.js\"></script>\n    <script>window.MathJax = {\"tex\": {\"inlineMath\": [[\"$\", \"$\"], [\"\\\\(\", \"\\\\)\"]], \"processEscapes\": true}, \"options\": {\"ignoreHtmlClass\": \"tex2jax_ignore|mathjax_ignore|document\", \"processHtmlClass\": \"tex2jax_process|mathjax_process|math|output_area\"}}</script>\n    <script defer=\"defer\" src=\"https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js\"></script>\n    <link rel=\"index\" title=\"Index\" href=\"../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../search.html\" />\n    <link rel=\"next\" title=\"1-3. 論理・比較演算と条件分岐の基礎\" href=\"1-3.html\" />\n    <link rel=\"prev\" title=\"1-1. 数値演算\" href=\"1-1.html\" />\n   \n  <link rel=\"stylesheet\" href=\"../_static/custom.css\" type=\"text/css\" />\n  \n\n  \n  \n\n  </head><body>\n  \n\n    <div class=\"document\">\n      <div class=\"documentwrapper\">\n        <div class=\"bodywrapper\">\n          \n\n          <div class=\"body\" role=\"main\">\n            \n  <section id=\"1-2.-変数と関数の基礎\">\n<h1>1-2. 変数と関数の基礎<a class=\"headerlink\" href=\"#1-2.-変数と関数の基礎\" title=\"Link to this heading\">¶</a></h1>\n<p>変数と関数の基礎について説明します。</p>\n<p>参考</p>\n<ul class=\"simple\">\n<li><p><a class=\"reference external\" href=\"https://docs.python.org/ja/3/tutorial/introduction.html#first-steps-towards-programming\">https://docs.python.org/ja/3/tutorial/introduction.html#first-steps-towards-programming</a></p></li>\n<li><p><a class=\"reference external\" href=\"https://docs.python.org/ja/3/tutorial/controlflow.html#defining-functions\">https://docs.python.org/ja/3/tutorial/controlflow.html#defining-functions</a></p></li>\n<li><p><a class=\"reference external\" href=\"https://docs.python.org/ja/3/library/functions.html#print\">https://docs.python.org/ja/3/library/functions.html#print</a></p></li>\n</ul>\n<section id=\"変数\">\n<h2>変数<a class=\"headerlink\" href=\"#変数\" title=\"Link to this heading\">¶</a></h2>\n<p>プログラミング言語における<strong>変数</strong>とは、値に名前を付ける仕組みであり、名前はその値を指し示すことになります。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[1]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">h</span> <span class=\"o\">=</span> <span class=\"mf\">188.0</span>\n</pre></div>\n</div>\n</div>\n<p>以上のように <code class=\"docutils literal notranslate\"><span class=\"pre\">=</span></code> を用いる構文によって、<code class=\"docutils literal notranslate\"><span class=\"pre\">188.0</span></code> という値に <code class=\"docutils literal notranslate\"><span class=\"pre\">h</span></code> という名前が付きます。これを<strong>変数定義</strong>と呼びます。</p>\n<p>定義された変数は、式の中で使うことができます。<code class=\"docutils literal notranslate\"><span class=\"pre\">h</span></code> という変数自体も式なので、<code class=\"docutils literal notranslate\"><span class=\"pre\">h</span></code> という式を評価することができ、変数が指し示す値が返ります。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[2]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">h</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[2]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n188.0\n</pre></div></div>\n</div>\n<p>異なる変数は、いくらでも導入できます。たとえば、以下では <code class=\"docutils literal notranslate\"><span class=\"pre\">w</span></code> を変数定義します。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[3]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">w</span> <span class=\"o\">=</span> <span class=\"mf\">104.0</span>\n</pre></div>\n</div>\n</div>\n<p>ここで、<code class=\"docutils literal notranslate\"><span class=\"pre\">h</span></code> を身長 (cm)、<code class=\"docutils literal notranslate\"><span class=\"pre\">w</span></code> を体重 (kg) の意味と考えると、次の式によってBMI（ボディマス指数）を計算できます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[4]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">w</span> <span class=\"o\">/</span> <span class=\"p\">(</span><span class=\"n\">h</span><span class=\"o\">/</span><span class=\"mf\">100.0</span><span class=\"p\">)</span> <span class=\"o\">**</span> <span class=\"mi\">2</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[4]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n29.425079221367138\n</pre></div></div>\n</div>\n<p>なお、演算子 <code class=\"docutils literal notranslate\"><span class=\"pre\">**</span></code> の方が <code class=\"docutils literal notranslate\"><span class=\"pre\">/</span></code> よりも先に評価されることに注意してください。</p>\n<p>変数という名前の通り、変数が指し示す値を変えることもできます。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[5]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">w</span> <span class=\"o\">=</span> <span class=\"mf\">104.0</span><span class=\"o\">-</span><span class=\"mi\">10</span>\n</pre></div>\n</div>\n</div>\n<p>このように変数を再定義すれば、元々 <code class=\"docutils literal notranslate\"><span class=\"pre\">w</span></code> が指し示していた値 <code class=\"docutils literal notranslate\"><span class=\"pre\">104.0</span></code> を忘れて、新たな値 <code class=\"docutils literal notranslate\"><span class=\"pre\">94.0</span></code> を指し示すようになります。 この後で、前と同じBMIの式を評価してみると、<code class=\"docutils literal notranslate\"><span class=\"pre\">w</span></code> の値の変化に応じて、BMIの計算結果は変わります。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[6]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">w</span> <span class=\"o\">/</span> <span class=\"p\">(</span><span class=\"n\">h</span><span class=\"o\">/</span><span class=\"mf\">100.0</span><span class=\"p\">)</span> <span class=\"o\">**</span> <span class=\"mi\">2</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[6]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n26.595744680851066\n</pre></div></div>\n</div>\n<p>なお、未定義の変数（たとえば <code class=\"docutils literal notranslate\"><span class=\"pre\">BMI</span></code>）を式の中で用いると、次のようにエラーが生じます。</p>\n<div class=\"highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>---------------------------------------------------------------------------\nNameError                                 Traceback (most recent call last)\n&lt;ipython-input-1-b910749d4383&gt; in &lt;module&gt;\n----&gt; 1 BMI  # 未定義の変数\n\nNameError: name &#39;BMI&#39; is not defined\n</pre></div>\n</div>\n<p>次のセルの行頭にある <code class=\"docutils literal notranslate\"><span class=\"pre\">#</span></code> を削除して実行してみましょう。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[7]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"c1\"># BMI  # 未定義の変数</span>\n</pre></div>\n</div>\n</div>\n<p>以降では、単純のため、変数が指し示す値を、変数の値として説明していきます。</p>\n<section id=\"代入文\">\n<h3>代入文<a class=\"headerlink\" href=\"#代入文\" title=\"Link to this heading\">¶</a></h3>\n<p>変数定義に用いた <code class=\"docutils literal notranslate\"><span class=\"pre\">=</span></code> による構文を、Pythonでは<strong>代入文</strong> (<strong>assignment statement</strong>) と呼びます。 そして、代入文を実行することを<strong>代入</strong> (<strong>assignment</strong>) と言います。 代入文は、<code class=\"docutils literal notranslate\"><span class=\"pre\">=</span></code> の左辺に右辺の式の評価結果の値を割り当てる文です。 上記の例のように、左辺が変数の場合には、代入文は変数定義と解釈されます。</p>\n<p>代入文は、右辺を評価した後に左辺に割り当てるという順番に従います。右辺に出現する変数が左辺に出て来てもかまいません。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[8]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">w</span> <span class=\"o\">=</span> <span class=\"n\">w</span><span class=\"o\">-</span><span class=\"mi\">10</span>\n</pre></div>\n</div>\n</div>\n<p>上の代入文は、<code class=\"docutils literal notranslate\"><span class=\"pre\">w</span></code> の値を <code class=\"docutils literal notranslate\"><span class=\"pre\">10</span></code> 減らす操作となります。<code class=\"docutils literal notranslate\"><span class=\"pre\">=</span></code> は数学的な等号ではないことに注意してください。</p>\n<p>もう一度BMIを計算してみると、<code class=\"docutils literal notranslate\"><span class=\"pre\">w</span></code> の値が減ったことで、先と結果が変わります。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[9]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">w</span> <span class=\"o\">/</span> <span class=\"p\">(</span><span class=\"n\">h</span><span class=\"o\">/</span><span class=\"mf\">100.0</span><span class=\"p\">)</span> <span class=\"o\">**</span> <span class=\"mi\">2</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[9]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n23.766410140334994\n</pre></div></div>\n</div>\n<p><strong>注意</strong>： 数学における代入は、substitution（置換）であり、プログラミング言語における代入 (assignment) とは異なります。代入という単語よりも、assignment（割り当て）という単語で概念を覚えましょう。</p>\n</section>\n<section id=\"累積代入文\">\n<h3>累積代入文<a class=\"headerlink\" href=\"#累積代入文\" title=\"Link to this heading\">¶</a></h3>\n<p>上の例のように変数の値を減らす操作は、次のような<strong>累算代入文</strong> (<strong>augmented assignment statement</strong>) を使って簡潔に記述することができます。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[10]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">w</span> <span class=\"o\">-=</span> <span class=\"mi\">10</span>\n</pre></div>\n</div>\n</div>\n<p>ここで、<code class=\"docutils literal notranslate\"><span class=\"pre\">-=</span></code> という演算子は、<code class=\"docutils literal notranslate\"><span class=\"pre\">-</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">=</span></code> を結合させた演算子で、<code class=\"docutils literal notranslate\"><span class=\"pre\">w</span> <span class=\"pre\">=</span> <span class=\"pre\">w</span> <span class=\"pre\">-</span> <span class=\"pre\">10</span></code> という代入文と同じ意味になります。 これは代入文と2項演算が複合したものであり、<code class=\"docutils literal notranslate\"><span class=\"pre\">-</span></code> に限らず、他の2項演算についても同様に複合した累算代入文が利用できます。たとえば、変数の値を増やすには <code class=\"docutils literal notranslate\"><span class=\"pre\">+=</span></code> という演算子を用いることができます。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[11]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">w</span> <span class=\"o\">+=</span> <span class=\"mi\">10</span>\n</pre></div>\n</div>\n</div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">=</span></code> も含めて、これらの演算子は<strong>代入演算子</strong>と呼ばれています。代入演算子によって変数の値がどのように変わるか、確かめてください。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[ ]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span>\n</pre></div>\n</div>\n</div>\n</section>\n</section>\n<section id=\"関数の定義と返値\">\n<h2>関数の定義と返値<a class=\"headerlink\" href=\"#関数の定義と返値\" title=\"Link to this heading\">¶</a></h2>\n<p>前述のように、変数の値が変わるたびにBMIの式を入力するのは面倒です。以下では、身長 <code class=\"docutils literal notranslate\"><span class=\"pre\">height</span></code> と体重 <code class=\"docutils literal notranslate\"><span class=\"pre\">weight</span></code> をもらって、BMIを計算する<strong>関数</strong> <code class=\"docutils literal notranslate\"><span class=\"pre\">bmi</span></code> を定義してみましょう。関数を定義すると、BMIの式の再入力を省けて便利です。</p>\n<p>次のような形式で、<strong>関数定義</strong>を記述できます。</p>\n<p>関数定義など、複数行のコードセルには、<strong>行番号</strong>を振るのがよいかもしれません。行番号を振るかどうかは、コマンドモードでエルの文字（大文字でも小文字でもよいです）を入力することによって、スイッチできます。行番号があるかないかは、コードの実行には影響しません。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[12]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">def</span> <span class=\"nf\">bmi</span><span class=\"p\">(</span><span class=\"n\">height</span><span class=\"p\">,</span> <span class=\"n\">weight</span><span class=\"p\">):</span>\n    <span class=\"k\">return</span> <span class=\"n\">weight</span> <span class=\"o\">/</span> <span class=\"p\">(</span><span class=\"n\">height</span><span class=\"o\">/</span><span class=\"mf\">100.0</span><span class=\"p\">)</span> <span class=\"o\">**</span> <span class=\"mi\">2</span>\n</pre></div>\n</div>\n</div>\n<p>Python では、<strong>関数定義</strong>は、上のような形をしています。 最初の行は以下のように <code class=\"docutils literal notranslate\"><span class=\"pre\">def</span></code> で始まります。</p>\n<div class=\"highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>def 関数名(引数, ...):\n</pre></div>\n</div>\n<p><strong>引数</strong>（ひきすう）とは、関数が受け取る値を指し示す変数のことです。<strong>仮引数</strong>（かりひきすう）ともいいます。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">:</span></code> 以降は関数定義の本体であり、関数の処理を記述する部分として以下の構文が続きます。</p>\n<div class=\"highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>return 式\n</pre></div>\n</div>\n<p>この構文は <code class=\"docutils literal notranslate\"><span class=\"pre\">return</span></code> で始まり、<strong>return文</strong>と呼ばれます。return文は、<code class=\"docutils literal notranslate\"><span class=\"pre\">return</span></code> に続く式の評価結果を、関数の呼び出し元に返して（これを<strong>返値</strong>と言います）、関数を終了するという意味を持ちます。この関数を、入力となる引数とともに呼び出すと、<code class=\"docutils literal notranslate\"><span class=\"pre\">return</span></code> の後の式の評価結果を返値として返します。</p>\n<p>ここで、Pythonでは、 <code class=\"docutils literal notranslate\"><span class=\"pre\">return</span></code> の前に空白が入ることに注意してください。 このような行頭の空白を<strong>インデント</strong>と呼びます。 Pythonでは、インデントの量によって、 構文の<strong>入れ子</strong>を制御するようになっています。このことについては、 より複雑な構文が出てきたときに説明しましょう。</p>\n<p>上記では、<code class=\"docutils literal notranslate\"><span class=\"pre\">def</span></code> の後に続く <code class=\"docutils literal notranslate\"><span class=\"pre\">bmi</span></code> が関数名です。それに続く括弧の中に書かれた <code class=\"docutils literal notranslate\"><span class=\"pre\">height</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">weight</span></code> は、<strong>引数</strong>です。また、<code class=\"docutils literal notranslate\"><span class=\"pre\">return</span></code> の後にBMIの計算式を記述しているので、関数の呼び出し元にはBMIの計算結果が返値として返ります。</p>\n<p>では、定義した関数 <code class=\"docutils literal notranslate\"><span class=\"pre\">bmi</span></code> を呼び出してみましょう。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[13]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">bmi</span><span class=\"p\">(</span><span class=\"mf\">188.0</span><span class=\"p\">,</span><span class=\"mf\">104.0</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[13]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n29.425079221367138\n</pre></div></div>\n</div>\n<p>第1引数を身長（cm）、第2引数を体重（kg）としたときのBMIが計算されていることがわかります。</p>\n<p>関数呼び出しは演算式の一種なので、引数の位置には任意の式を記述できますし、 関数呼び出し自体も式の中に記述できます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[14]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"mf\">1.1</span><span class=\"o\">*</span><span class=\"n\">bmi</span><span class=\"p\">(</span><span class=\"mf\">174.0</span><span class=\"p\">,</span> <span class=\"mf\">119.0</span> <span class=\"o\">*</span> <span class=\"mf\">0.454</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[14]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n19.628947020742505\n</pre></div></div>\n</div>\n<p>もう1つ関数を定義してみましょう。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[15]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">def</span> <span class=\"nf\">felt_air_temperature</span><span class=\"p\">(</span><span class=\"n\">temperature</span><span class=\"p\">,</span> <span class=\"n\">humidity</span><span class=\"p\">):</span>\n    <span class=\"k\">return</span> <span class=\"n\">temperature</span> <span class=\"o\">-</span> <span class=\"mi\">1</span> <span class=\"o\">/</span> <span class=\"mf\">2.3</span> <span class=\"o\">*</span> <span class=\"p\">(</span><span class=\"n\">temperature</span> <span class=\"o\">-</span> <span class=\"mi\">10</span><span class=\"p\">)</span> <span class=\"o\">*</span> <span class=\"p\">(</span><span class=\"mf\">0.8</span> <span class=\"o\">-</span> <span class=\"n\">humidity</span> <span class=\"o\">/</span> <span class=\"mi\">100</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<p>この関数は、温度と湿度を入力として、体感温度を返します。 このように、関数名や変数名には <code class=\"docutils literal notranslate\"><span class=\"pre\">_</span></code> (アンダースコア）を含めることができます。 アンダースコアで始めることもできます。</p>\n<p>数字も関数名や変数名に含めることができますが、 名前の最初に来てはいけません。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[16]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">felt_air_temperature</span><span class=\"p\">(</span><span class=\"mi\">28</span><span class=\"p\">,</span> <span class=\"mi\">50</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[16]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n25.652173913043477\n</pre></div></div>\n</div>\n<p>なお、<code class=\"docutils literal notranslate\"><span class=\"pre\">return</span></code> の後に式を書かないと、何も返されなかったことを表現するために、「何もない」ことを表す <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code> という特別な値が返ります。 （<code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code> という値は色々なところで現れることでしょう。）</p>\n<p>return文に到達せずに関数定義本体の最後まで行ってしまったときも、<code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code> という値が返ります。</p>\n<section id=\"予約語\">\n<h3>予約語<a class=\"headerlink\" href=\"#予約語\" title=\"Link to this heading\">¶</a></h3>\n<p>Pythonでの <code class=\"docutils literal notranslate\"><span class=\"pre\">def</span></code> や <code class=\"docutils literal notranslate\"><span class=\"pre\">return</span></code> は、関数定義やreturn文の始まりを記述するための特別な記号であり、それ以外の用途に用いることができません。 このように構文上で役割が予約されている語は、<strong>予約語</strong>と呼ばれます。 Codeセルの構文ハイライトで（太字緑色などで）強調されるものが予約語だと覚えておけば大体問題ありません。</p>\n</section>\n<section id=\"練習-ft_to_cm\">\n<h3>練習 <code class=\"docutils literal notranslate\"><span class=\"pre\">ft_to_cm</span></code><a class=\"headerlink\" href=\"#練習-ft_to_cm\" title=\"Link to this heading\">¶</a></h3>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">f</span></code> フィート <code class=\"docutils literal notranslate\"><span class=\"pre\">i</span></code> インチをセンチメートルに変換する関数 <code class=\"docutils literal notranslate\"><span class=\"pre\">ft_to_cm(f,i)</span></code> を定義してください。 ただし、1 フィート = 12 インチ = 30.48 cm としてよい。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[17]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">def</span> <span class=\"nf\">ft_to_cm</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"p\">,</span> <span class=\"n\">i</span><span class=\"p\">):</span>\n    <span class=\"o\">...</span>\n</pre></div>\n</div>\n</div>\n<p>定義ができたら、次のセルを実行して、エラーがでないことを確認してください。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[18]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">assert</span> <span class=\"nb\">round</span><span class=\"p\">(</span><span class=\"n\">ft_to_cm</span><span class=\"p\">(</span><span class=\"mi\">5</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">)</span> <span class=\"o\">-</span> <span class=\"mf\">157.48</span><span class=\"p\">,</span> <span class=\"mi\">6</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"mi\">0</span>\n<span class=\"k\">assert</span> <span class=\"nb\">round</span><span class=\"p\">(</span><span class=\"n\">ft_to_cm</span><span class=\"p\">(</span><span class=\"mi\">6</span><span class=\"p\">,</span> <span class=\"mi\">5</span><span class=\"p\">)</span> <span class=\"o\">-</span> <span class=\"mf\">195.58</span><span class=\"p\">,</span> <span class=\"mi\">6</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"mi\">0</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n<span class=\"ansi-red-fg\">---------------------------------------------------------------------------</span>\n<span class=\"ansi-red-fg\">TypeError</span>                                 Traceback (most recent call last)\nCell <span class=\"ansi-green-fg\">In[18], line 1</span>\n<span class=\"ansi-green-fg\">----&gt; 1</span> <span class=\"ansi-bold\" style=\"color: rgb(0,135,0)\">assert</span> <span style=\"color: rgb(0,135,0)\">round</span>(<span class=\"ansi-yellow-bg\">ft_to_cm</span><span class=\"ansi-yellow-bg\">(</span><span class=\"ansi-yellow-bg\" style=\"color: rgb(98,98,98)\">5</span><span class=\"ansi-yellow-bg\">,</span><span class=\"ansi-yellow-bg\"> </span><span class=\"ansi-yellow-bg\" style=\"color: rgb(98,98,98)\">2</span><span class=\"ansi-yellow-bg\">)</span><span class=\"ansi-yellow-bg\"> </span><span class=\"ansi-yellow-bg\" style=\"color: rgb(98,98,98)\">-</span><span class=\"ansi-yellow-bg\"> </span><span class=\"ansi-yellow-bg\" style=\"color: rgb(98,98,98)\">157.48</span>, <span style=\"color: rgb(98,98,98)\">6</span>) <span style=\"color: rgb(98,98,98)\">==</span> <span style=\"color: rgb(98,98,98)\">0</span>\n<span class=\"ansi-green-intense-fg ansi-bold\">      2</span> <span class=\"ansi-bold\" style=\"color: rgb(0,135,0)\">assert</span> <span style=\"color: rgb(0,135,0)\">round</span>(ft_to_cm(<span style=\"color: rgb(98,98,98)\">6</span>, <span style=\"color: rgb(98,98,98)\">5</span>) <span style=\"color: rgb(98,98,98)\">-</span> <span style=\"color: rgb(98,98,98)\">195.58</span>, <span style=\"color: rgb(98,98,98)\">6</span>) <span style=\"color: rgb(98,98,98)\">==</span> <span style=\"color: rgb(98,98,98)\">0</span>\n\n<span class=\"ansi-red-fg\">TypeError</span>: unsupported operand type(s) for -: &#39;NoneType&#39; and &#39;float&#39;\n</pre></div></div>\n</div>\n</section>\n<section id=\"練習-quadratic\">\n<h3>練習 <code class=\"docutils literal notranslate\"><span class=\"pre\">quadratic</span></code><a class=\"headerlink\" href=\"#練習-quadratic\" title=\"Link to this heading\">¶</a></h3>\n<p>二次関数 <span class=\"math notranslate nohighlight\">\\(f(x) = ax^2+bx+c\\)</span> の値を求める <code class=\"docutils literal notranslate\"><span class=\"pre\">quadratic(a,b,c,x)</span></code> を定義してください。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[19]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">def</span> <span class=\"nf\">quadratic</span><span class=\"p\">(</span><span class=\"n\">a</span><span class=\"p\">,</span> <span class=\"n\">b</span><span class=\"p\">,</span> <span class=\"n\">c</span><span class=\"p\">,</span> <span class=\"n\">x</span><span class=\"p\">):</span>\n    <span class=\"o\">...</span>\n</pre></div>\n</div>\n</div>\n<p>定義ができたら、次のセルを実行して、エラーがでないことを確認してください。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[20]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">assert</span> <span class=\"n\">quadratic</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">3</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"mi\">16</span>\n<span class=\"k\">assert</span> <span class=\"n\">quadratic</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"o\">-</span><span class=\"mi\">5</span><span class=\"p\">,</span> <span class=\"o\">-</span><span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"mi\">7</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"mi\">12</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n<span class=\"ansi-red-fg\">---------------------------------------------------------------------------</span>\n<span class=\"ansi-red-fg\">AssertionError</span>                            Traceback (most recent call last)\nCell <span class=\"ansi-green-fg\">In[20], line 1</span>\n<span class=\"ansi-green-fg\">----&gt; 1</span> <span class=\"ansi-bold\" style=\"color: rgb(0,135,0)\">assert</span> quadratic(<span style=\"color: rgb(98,98,98)\">1</span>, <span style=\"color: rgb(98,98,98)\">2</span>, <span style=\"color: rgb(98,98,98)\">1</span>, <span style=\"color: rgb(98,98,98)\">3</span>) <span style=\"color: rgb(98,98,98)\">==</span> <span style=\"color: rgb(98,98,98)\">16</span>\n<span class=\"ansi-green-intense-fg ansi-bold\">      2</span> <span class=\"ansi-bold\" style=\"color: rgb(0,135,0)\">assert</span> quadratic(<span style=\"color: rgb(98,98,98)\">1</span>, <span style=\"color: rgb(98,98,98)\">-</span><span style=\"color: rgb(98,98,98)\">5</span>, <span style=\"color: rgb(98,98,98)\">-</span><span style=\"color: rgb(98,98,98)\">2</span>, <span style=\"color: rgb(98,98,98)\">7</span>) <span style=\"color: rgb(98,98,98)\">==</span> <span style=\"color: rgb(98,98,98)\">12</span>\n\n<span class=\"ansi-red-fg\">AssertionError</span>:\n</pre></div></div>\n</div>\n</section>\n</section>\n<section id=\"ローカル変数\">\n<h2>ローカル変数<a class=\"headerlink\" href=\"#ローカル変数\" title=\"Link to this heading\">¶</a></h2>\n<p>次の関数は、ヘロンの公式によって、 与えられた三辺の長さに対して三角形の面積を返すものです。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[21]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"kn\">import</span> <span class=\"nn\">math</span>\n\n<span class=\"k\">def</span> <span class=\"nf\">heron</span><span class=\"p\">(</span><span class=\"n\">a</span><span class=\"p\">,</span><span class=\"n\">b</span><span class=\"p\">,</span><span class=\"n\">c</span><span class=\"p\">):</span>\n    <span class=\"n\">s</span> <span class=\"o\">=</span> <span class=\"mf\">0.5</span><span class=\"o\">*</span><span class=\"p\">(</span><span class=\"n\">a</span><span class=\"o\">+</span><span class=\"n\">b</span><span class=\"o\">+</span><span class=\"n\">c</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span> <span class=\"n\">math</span><span class=\"o\">.</span><span class=\"n\">sqrt</span><span class=\"p\">(</span><span class=\"n\">s</span> <span class=\"o\">*</span> <span class=\"p\">(</span><span class=\"n\">s</span><span class=\"o\">-</span><span class=\"n\">a</span><span class=\"p\">)</span> <span class=\"o\">*</span> <span class=\"p\">(</span><span class=\"n\">s</span><span class=\"o\">-</span><span class=\"n\">b</span><span class=\"p\">)</span> <span class=\"o\">*</span> <span class=\"p\">(</span><span class=\"n\">s</span><span class=\"o\">-</span><span class=\"n\">c</span><span class=\"p\">))</span>\n</pre></div>\n</div>\n</div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">math.sqrt</span></code> を使うために <code class=\"docutils literal notranslate\"><span class=\"pre\">import</span> <span class=\"pre\">math</span></code> を行っています。</p>\n<p>次の式を評価してみましょう。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[22]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">heron</span><span class=\"p\">(</span><span class=\"mi\">3</span><span class=\"p\">,</span><span class=\"mi\">4</span><span class=\"p\">,</span><span class=\"mi\">5</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[22]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n6.0\n</pre></div></div>\n</div>\n<p>この関数の中では、まず、3辺の長さを足して 2 で割った（0.5 を掛けた）値を求めています。 そして、その値を <code class=\"docutils literal notranslate\"><span class=\"pre\">s</span></code> という変数に代入しています。 この <code class=\"docutils literal notranslate\"><span class=\"pre\">s</span></code> という変数は、この関数の中で代入されているので、この関数の中だけで利用可能な変数となります。 そのような変数を<strong>ローカル変数</strong>と呼びます。</p>\n<p>そして、<code class=\"docutils literal notranslate\"><span class=\"pre\">s</span></code> を使った式が計算されてreturn文で返されます。 ここで、関数定義のひとまとまりの本体であることを表すために、<code class=\"docutils literal notranslate\"><span class=\"pre\">s</span></code> への代入文もreturn文も、同じ深さでインデントされていることに注意してください。</p>\n<p>Pythonでは、関数の中で定義された変数は、その関数のローカル変数となります。関数の引数もローカル変数です。関数の外で同じ名前の変数を使っても、それは関数のローカル変数とは「別もの」と考えられます。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">heron</span></code> を呼び出した後で、関数の外で <code class=\"docutils literal notranslate\"><span class=\"pre\">s</span></code> の値を参照しても、以下のように、<code class=\"docutils literal notranslate\"><span class=\"pre\">s</span></code> が未定義という扱いになります。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[23]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">s</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n<span class=\"ansi-red-fg\">---------------------------------------------------------------------------</span>\n<span class=\"ansi-red-fg\">NameError</span>                                 Traceback (most recent call last)\nCell <span class=\"ansi-green-fg\">In[23], line 1</span>\n<span class=\"ansi-green-fg\">----&gt; 1</span> <span class=\"ansi-yellow-bg\">s</span>\n\n<span class=\"ansi-red-fg\">NameError</span>: name &#39;s&#39; is not defined\n</pre></div></div>\n</div>\n<p>以下では、<code class=\"docutils literal notranslate\"><span class=\"pre\">heron</span></code> の中では、<code class=\"docutils literal notranslate\"><span class=\"pre\">s</span></code> というローカル変数の値は 3 になりますが、関数の外では、<code class=\"docutils literal notranslate\"><span class=\"pre\">s</span></code> という変数は別もので、その値はずっと <code class=\"docutils literal notranslate\"><span class=\"pre\">100</span></code> です。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[24]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">s</span> <span class=\"o\">=</span> <span class=\"mi\">100</span>\n<span class=\"n\">heron</span><span class=\"p\">(</span><span class=\"mi\">3</span><span class=\"p\">,</span><span class=\"mi\">4</span><span class=\"p\">,</span><span class=\"mi\">5</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[24]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n6.0\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[25]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">s</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[25]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n100\n</pre></div></div>\n</div>\n</section>\n<section id=\"print\">\n<h2><code class=\"docutils literal notranslate\"><span class=\"pre\">print</span></code><a class=\"headerlink\" href=\"#print\" title=\"Link to this heading\">¶</a></h2>\n<p>上の例で、ローカル変数は関数の返値を計算するのに使われますが、それが定義されている関数の外からは参照することができません。</p>\n<p>ローカル変数の値など、関数の実行途中の状況を確認するには、 <code class=\"docutils literal notranslate\"><span class=\"pre\">print</span></code> というPythonが最初から用意してくれている関数（<strong>組み込み関数</strong>）を用いることができます。この <code class=\"docutils literal notranslate\"><span class=\"pre\">print</span></code> を関数内から呼び出すことでローカル変数の値を確認できます。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">print</span></code> は任意個の引数を取ることができ、コンマ <code class=\"docutils literal notranslate\"><span class=\"pre\">,</span></code> の区切りには空白文字が出力されます。引数を与えずに呼び出した場合には、改行のみを出力します。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[26]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">def</span> <span class=\"nf\">heron</span><span class=\"p\">(</span><span class=\"n\">a</span><span class=\"p\">,</span><span class=\"n\">b</span><span class=\"p\">,</span><span class=\"n\">c</span><span class=\"p\">):</span>\n    <span class=\"n\">s</span> <span class=\"o\">=</span> <span class=\"mf\">0.5</span><span class=\"o\">*</span><span class=\"p\">(</span><span class=\"n\">a</span><span class=\"o\">+</span><span class=\"n\">b</span><span class=\"o\">+</span><span class=\"n\">c</span><span class=\"p\">)</span>\n    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s1\">&#39;The value of s is&#39;</span><span class=\"p\">,</span> <span class=\"n\">s</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span> <span class=\"n\">math</span><span class=\"o\">.</span><span class=\"n\">sqrt</span><span class=\"p\">(</span><span class=\"n\">s</span> <span class=\"o\">*</span> <span class=\"p\">(</span><span class=\"n\">s</span><span class=\"o\">-</span><span class=\"n\">a</span><span class=\"p\">)</span> <span class=\"o\">*</span> <span class=\"p\">(</span><span class=\"n\">s</span><span class=\"o\">-</span><span class=\"n\">b</span><span class=\"p\">)</span> <span class=\"o\">*</span> <span class=\"p\">(</span><span class=\"n\">s</span><span class=\"o\">-</span><span class=\"n\">c</span><span class=\"p\">))</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[27]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">heron</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">,</span><span class=\"mi\">1</span><span class=\"p\">,</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nThe value of s is 1.5\n</pre></div></div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[27]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n0.4330127018922193\n</pre></div></div>\n</div>\n<p>このように <code class=\"docutils literal notranslate\"><span class=\"pre\">print</span></code> 関数を用いて変数の値を観察することは、プログラムの誤り（<strong>バグ</strong>）を見つけ、修正（<strong>デバッグ</strong>）する最も基本的な方法です。これは1-4でも改めて説明します。</p>\n<p>なお、以降の説明では、 <code class=\"docutils literal notranslate\"><span class=\"pre\">print</span></code> 関数を呼び出して値を出力することを「<strong>印字</strong>する」と表現します。</p>\n</section>\n<section id=\"print-と-return\">\n<h2><code class=\"docutils literal notranslate\"><span class=\"pre\">print</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">return</span></code><a class=\"headerlink\" href=\"#print-と-return\" title=\"Link to this heading\">¶</a></h2>\n<p>関数が値を返すことを期待されている場合は、必ず <code class=\"docutils literal notranslate\"><span class=\"pre\">return</span></code> を使ってください。</p>\n<p>関数内で値を印字しても、関数の返値として利用することはできません。</p>\n<p>たとえば <code class=\"docutils literal notranslate\"><span class=\"pre\">heron</span></code> を以下のように定義すると、<code class=\"docutils literal notranslate\"><span class=\"pre\">heron(1,1,1)</span> <span class=\"pre\">*</span> <span class=\"pre\">2</span></code> のような計算ができなくなります。</p>\n<div class=\"highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>def heron(a,b,c):\n    s = 0.5*(a+b+c)\n    print(&#39;The value of s is&#39;, s)\n    print(math.sqrt(s * (s-a) * (s-b) * (s-c)))\n</pre></div>\n</div>\n<p>なお、</p>\n<div class=\"highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>return print(math.sqrt(s * (s-a) * (s-b) * (s-c)))\n</pre></div>\n</div>\n<p>のように書いても駄目です。<code class=\"docutils literal notranslate\"><span class=\"pre\">print</span></code> 関数は <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code> という値を返しますので、これでは関数は常に <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code> という値を返してしまいます。</p>\n</section>\n<section id=\"コメントと空行\">\n<h2>コメントと空行<a class=\"headerlink\" href=\"#コメントと空行\" title=\"Link to this heading\">¶</a></h2>\n<p><strong>コメント</strong>については既に説明しましたが、 関数定義にはコメントを付加して、後から読んでもわかるようにしましょう。</p>\n<p>コメントだけの行は<strong>空行</strong>（空白のみから成る行）と同じに扱われます。</p>\n<p>関数定義の中に空行を自由に入れることができますので、 長い関数定義には、区切りとなるところに空行を入れるのがよいでしょう。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[28]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"c1\"># heronの公式により三角形の面積を返す</span>\n<span class=\"k\">def</span> <span class=\"nf\">heron</span><span class=\"p\">(</span><span class=\"n\">a</span><span class=\"p\">,</span><span class=\"n\">b</span><span class=\"p\">,</span><span class=\"n\">c</span><span class=\"p\">):</span> <span class=\"c1\"># a,b,c は三辺の長さ</span>\n\n    <span class=\"c1\"># 辺の合計の半分をsに置く</span>\n    <span class=\"n\">s</span> <span class=\"o\">=</span> <span class=\"mf\">0.5</span><span class=\"o\">*</span><span class=\"p\">(</span><span class=\"n\">a</span><span class=\"o\">+</span><span class=\"n\">b</span><span class=\"o\">+</span><span class=\"n\">c</span><span class=\"p\">)</span>\n    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s1\">&#39;The value of s is&#39;</span><span class=\"p\">,</span> <span class=\"n\">s</span><span class=\"p\">)</span>\n\n    <span class=\"k\">return</span> <span class=\"n\">math</span><span class=\"o\">.</span><span class=\"n\">sqrt</span><span class=\"p\">(</span><span class=\"n\">s</span> <span class=\"o\">*</span> <span class=\"p\">(</span><span class=\"n\">s</span><span class=\"o\">-</span><span class=\"n\">a</span><span class=\"p\">)</span> <span class=\"o\">*</span> <span class=\"p\">(</span><span class=\"n\">s</span><span class=\"o\">-</span><span class=\"n\">b</span><span class=\"p\">)</span> <span class=\"o\">*</span> <span class=\"p\">(</span><span class=\"n\">s</span><span class=\"o\">-</span><span class=\"n\">c</span><span class=\"p\">))</span>\n</pre></div>\n</div>\n</div>\n</section>\n<section id=\"関数の参照の書き方\">\n<h2>関数の参照の書き方<a class=\"headerlink\" href=\"#関数の参照の書き方\" title=\"Link to this heading\">¶</a></h2>\n<p>関数は、</p>\n<p>　　関数 <code class=\"docutils literal notranslate\"><span class=\"pre\">heron</span></code> は、三角形の三辺の長さをもらって三角形の面積を返します。</p>\n<p>というように、名前だけで参照することもありますが、</p>\n<p>　　<code class=\"docutils literal notranslate\"><span class=\"pre\">heron(a,b,c)</span></code> は、三角形の三辺の長さ <code class=\"docutils literal notranslate\"><span class=\"pre\">a</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">b</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">c</span></code> をもらって三角形の面積を返します。</p>\n<p>というように、引数を明示して参照することもあります。</p>\n<p>ときには、</p>\n<p>　　<code class=\"docutils literal notranslate\"><span class=\"pre\">heron()</span></code> は三角形の面積を返します。</p>\n<p>のように、関数名に <code class=\"docutils literal notranslate\"><span class=\"pre\">()</span></code> を付けて参照することがあります。 この記法は、<code class=\"docutils literal notranslate\"><span class=\"pre\">heron</span></code> が関数であることを明示しています。</p>\n<p>関数には引数がゼロ個のものがあるのですが、<code class=\"docutils literal notranslate\"><span class=\"pre\">heron()</span></code> と参照するとき、 <code class=\"docutils literal notranslate\"><span class=\"pre\">heron</span></code> は必ずしも引数の数がゼロ個ではないことに注意してください。</p>\n<p>後に学習するメソッドという関数の親戚に対しても同様の記法が用いられます。</p>\n<section id=\"練習-qe_disc-qe_solution1-qe_solution1\">\n<h3>練習 <code class=\"docutils literal notranslate\"><span class=\"pre\">qe_disc</span></code> <code class=\"docutils literal notranslate\"><span class=\"pre\">qe_solution1</span></code> <code class=\"docutils literal notranslate\"><span class=\"pre\">qe_solution1</span></code><a class=\"headerlink\" href=\"#練習-qe_disc-qe_solution1-qe_solution1\" title=\"Link to this heading\">¶</a></h3>\n<p>二次方程式 <span class=\"math notranslate nohighlight\">\\(ax^2 + bx + c = 0\\)</span> に関して以下のような関数を定義してください。</p>\n<ol class=\"arabic simple\">\n<li><p>判別式 <span class=\"math notranslate nohighlight\">\\(b^2 - 4ac\\)</span> を求める <code class=\"docutils literal notranslate\"><span class=\"pre\">qe_disc(a,b,c)</span></code></p></li>\n<li><p>解のうち、大きくない方を求める <code class=\"docutils literal notranslate\"><span class=\"pre\">qe_solution1(a,b,c)</span></code></p></li>\n<li><p>解のうち、小さくない方を求める <code class=\"docutils literal notranslate\"><span class=\"pre\">qe_solution2(a,b,c)</span></code></p></li>\n</ol>\n<p>ただし、<code class=\"docutils literal notranslate\"><span class=\"pre\">qe_solution1</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">qe_solution2</span></code> は <code class=\"docutils literal notranslate\"><span class=\"pre\">qe_disc</span></code> を使って定義してください。 二次方程式が実数解を持つと仮定してよいです。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[29]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"kn\">import</span> <span class=\"nn\">math</span>\n\n<span class=\"k\">def</span> <span class=\"nf\">qe_disc</span><span class=\"p\">(</span><span class=\"n\">a</span><span class=\"p\">,</span> <span class=\"n\">b</span><span class=\"p\">,</span> <span class=\"n\">c</span><span class=\"p\">):</span>\n    <span class=\"o\">...</span>\n\n<span class=\"k\">def</span> <span class=\"nf\">qe_solution1</span><span class=\"p\">(</span><span class=\"n\">a</span><span class=\"p\">,</span> <span class=\"n\">b</span><span class=\"p\">,</span> <span class=\"n\">c</span><span class=\"p\">):</span>\n    <span class=\"o\">...</span>\n\n<span class=\"k\">def</span> <span class=\"nf\">qe_solution2</span><span class=\"p\">(</span><span class=\"n\">a</span><span class=\"p\">,</span> <span class=\"n\">b</span><span class=\"p\">,</span> <span class=\"n\">c</span><span class=\"p\">):</span>\n    <span class=\"o\">...</span>\n</pre></div>\n</div>\n</div>\n<p>定義ができたら、次のセルを実行して、エラーがでないことを確認してください。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[30]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">assert</span> <span class=\"n\">qe_disc</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"o\">-</span><span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"mi\">0</span>\n<span class=\"k\">assert</span> <span class=\"n\">qe_disc</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"o\">-</span><span class=\"mi\">5</span><span class=\"p\">,</span> <span class=\"mi\">6</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"mi\">1</span>\n<span class=\"k\">assert</span> <span class=\"nb\">round</span><span class=\"p\">(</span><span class=\"n\">qe_solution1</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"o\">-</span><span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">)</span> <span class=\"o\">-</span> <span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">6</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"mi\">0</span>\n<span class=\"k\">assert</span> <span class=\"nb\">round</span><span class=\"p\">(</span><span class=\"n\">qe_solution2</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"o\">-</span><span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">)</span> <span class=\"o\">-</span> <span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">6</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"mi\">0</span>\n<span class=\"k\">assert</span> <span class=\"nb\">round</span><span class=\"p\">(</span><span class=\"n\">qe_solution1</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"o\">-</span><span class=\"mi\">5</span><span class=\"p\">,</span> <span class=\"mi\">6</span><span class=\"p\">)</span> <span class=\"o\">-</span> <span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"mi\">6</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"mi\">0</span>\n<span class=\"k\">assert</span> <span class=\"nb\">round</span><span class=\"p\">(</span><span class=\"n\">qe_solution2</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"o\">-</span><span class=\"mi\">5</span><span class=\"p\">,</span> <span class=\"mi\">6</span><span class=\"p\">)</span> <span class=\"o\">-</span> <span class=\"mi\">3</span><span class=\"p\">,</span> <span class=\"mi\">6</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"mi\">0</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n<span class=\"ansi-red-fg\">---------------------------------------------------------------------------</span>\n<span class=\"ansi-red-fg\">AssertionError</span>                            Traceback (most recent call last)\nCell <span class=\"ansi-green-fg\">In[30], line 1</span>\n<span class=\"ansi-green-fg\">----&gt; 1</span> <span class=\"ansi-bold\" style=\"color: rgb(0,135,0)\">assert</span> qe_disc(<span style=\"color: rgb(98,98,98)\">1</span>, <span style=\"color: rgb(98,98,98)\">-</span><span style=\"color: rgb(98,98,98)\">2</span>, <span style=\"color: rgb(98,98,98)\">1</span>) <span style=\"color: rgb(98,98,98)\">==</span> <span style=\"color: rgb(98,98,98)\">0</span>\n<span class=\"ansi-green-intense-fg ansi-bold\">      2</span> <span class=\"ansi-bold\" style=\"color: rgb(0,135,0)\">assert</span> qe_disc(<span style=\"color: rgb(98,98,98)\">1</span>, <span style=\"color: rgb(98,98,98)\">-</span><span style=\"color: rgb(98,98,98)\">5</span>, <span style=\"color: rgb(98,98,98)\">6</span>) <span style=\"color: rgb(98,98,98)\">==</span> <span style=\"color: rgb(98,98,98)\">1</span>\n<span class=\"ansi-green-intense-fg ansi-bold\">      3</span> <span class=\"ansi-bold\" style=\"color: rgb(0,135,0)\">assert</span> <span style=\"color: rgb(0,135,0)\">round</span>(qe_solution1(<span style=\"color: rgb(98,98,98)\">1</span>, <span style=\"color: rgb(98,98,98)\">-</span><span style=\"color: rgb(98,98,98)\">2</span>, <span style=\"color: rgb(98,98,98)\">1</span>) <span style=\"color: rgb(98,98,98)\">-</span> <span style=\"color: rgb(98,98,98)\">1</span>, <span style=\"color: rgb(98,98,98)\">6</span>) <span style=\"color: rgb(98,98,98)\">==</span> <span style=\"color: rgb(98,98,98)\">0</span>\n\n<span class=\"ansi-red-fg\">AssertionError</span>:\n</pre></div></div>\n</div>\n</section>\n</section>\n<section id=\"▲グローバル変数\">\n<h2>▲グローバル変数<a class=\"headerlink\" href=\"#▲グローバル変数\" title=\"Link to this heading\">¶</a></h2>\n<p>Pythonでは、関数の中で代入が行われない変数は、グローバル変数とみなされます。</p>\n<p><strong>グローバル変数</strong>とは、関数の外（<strong>トップレベル</strong>もしくは<strong>モジュールレベル</strong>と呼ばれます）で定義される変数のことです。</p>\n<p>グローバル変数は、関数の中から参照することができます。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[31]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">g</span> <span class=\"o\">=</span> <span class=\"mf\">9.8</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[32]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">def</span> <span class=\"nf\">force</span><span class=\"p\">(</span><span class=\"n\">m</span><span class=\"p\">):</span>\n    <span class=\"k\">return</span> <span class=\"n\">m</span><span class=\"o\">*</span><span class=\"n\">g</span>\n</pre></div>\n</div>\n</div>\n<p>以上のように <code class=\"docutils literal notranslate\"><span class=\"pre\">force</span></code> を定義すると、 <code class=\"docutils literal notranslate\"><span class=\"pre\">force</span></code> の中で <code class=\"docutils literal notranslate\"><span class=\"pre\">g</span></code> というグローバル変数を参照することができます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[33]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">force</span><span class=\"p\">(</span><span class=\"mi\">104</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[33]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n1019.2\n</pre></div></div>\n</div>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[34]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">g</span> <span class=\"o\">=</span> <span class=\"n\">g</span><span class=\"o\">/</span><span class=\"mi\">6</span>\n</pre></div>\n</div>\n</div>\n<p>以上のように、<code class=\"docutils literal notranslate\"><span class=\"pre\">g</span></code> の値を変更してから <code class=\"docutils literal notranslate\"><span class=\"pre\">force</span></code> を実行すると、 変更後の値が用いられます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[35]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">force</span><span class=\"p\">(</span><span class=\"mi\">104</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[35]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n169.86666666666667\n</pre></div></div>\n</div>\n<p>以下はより簡単な例です。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[36]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">a</span> <span class=\"o\">=</span> <span class=\"mi\">10</span>\n<span class=\"k\">def</span> <span class=\"nf\">foo</span><span class=\"p\">():</span>\n    <span class=\"k\">return</span> <span class=\"n\">a</span>\n<span class=\"k\">def</span> <span class=\"nf\">bar</span><span class=\"p\">():</span>\n    <span class=\"n\">a</span> <span class=\"o\">=</span> <span class=\"mi\">3</span>\n    <span class=\"k\">return</span> <span class=\"n\">a</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[37]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">foo</span><span class=\"p\">()</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[37]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n10\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[38]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">bar</span><span class=\"p\">()</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[38]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n3\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[39]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">a</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[39]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n10\n</pre></div></div>\n</div>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[40]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">a</span> <span class=\"o\">=</span> <span class=\"mi\">20</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[41]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">foo</span><span class=\"p\">()</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[41]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n20\n</pre></div></div>\n</div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">bar</span></code> の中では <code class=\"docutils literal notranslate\"><span class=\"pre\">a</span></code> への代入があるので、<code class=\"docutils literal notranslate\"><span class=\"pre\">a</span></code> はローカル変数になります。 ローカル変数の <code class=\"docutils literal notranslate\"><span class=\"pre\">a</span></code> とグローバル変数の <code class=\"docutils literal notranslate\"><span class=\"pre\">a</span></code> は別ものと考えてください。 ローカル変数 <code class=\"docutils literal notranslate\"><span class=\"pre\">a</span></code> への代入があっても、グローバル変数の <code class=\"docutils literal notranslate\"><span class=\"pre\">a</span></code> の値は変化しません。 <code class=\"docutils literal notranslate\"><span class=\"pre\">foo</span></code> の中の <code class=\"docutils literal notranslate\"><span class=\"pre\">a</span></code> はグローバル変数です。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[42]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">def</span> <span class=\"nf\">boo</span><span class=\"p\">(</span><span class=\"n\">a</span><span class=\"p\">):</span>\n    <span class=\"k\">return</span> <span class=\"n\">a</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[43]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">boo</span><span class=\"p\">(</span><span class=\"mi\">5</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[43]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n5\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[44]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">a</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[44]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n20\n</pre></div></div>\n</div>\n<p>関数の引数もローカル変数の一種と考えられ、グローバル変数とは別ものです。</p>\n</section>\n<section id=\"練習の解答\">\n<h2>練習の解答<a class=\"headerlink\" href=\"#練習の解答\" title=\"Link to this heading\">¶</a></h2>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[45]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">def</span> <span class=\"nf\">ft_to_cm</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"p\">,</span> <span class=\"n\">i</span><span class=\"p\">):</span>\n    <span class=\"k\">return</span> <span class=\"mf\">30.48</span><span class=\"o\">*</span><span class=\"n\">f</span> <span class=\"o\">+</span> <span class=\"p\">(</span><span class=\"mf\">30.48</span><span class=\"o\">/</span><span class=\"mi\">12</span><span class=\"p\">)</span><span class=\"o\">*</span><span class=\"n\">i</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[46]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">def</span> <span class=\"nf\">quadratic</span><span class=\"p\">(</span><span class=\"n\">a</span><span class=\"p\">,</span> <span class=\"n\">b</span><span class=\"p\">,</span> <span class=\"n\">c</span><span class=\"p\">,</span> <span class=\"n\">x</span><span class=\"p\">):</span>\n    <span class=\"k\">return</span> <span class=\"n\">a</span><span class=\"o\">*</span><span class=\"n\">x</span><span class=\"o\">*</span><span class=\"n\">x</span> <span class=\"o\">+</span> <span class=\"n\">b</span><span class=\"o\">*</span><span class=\"n\">x</span> <span class=\"o\">+</span> <span class=\"n\">c</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[47]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"kn\">import</span> <span class=\"nn\">math</span>\n\n<span class=\"k\">def</span> <span class=\"nf\">qe_disc</span><span class=\"p\">(</span><span class=\"n\">a</span><span class=\"p\">,</span> <span class=\"n\">b</span><span class=\"p\">,</span> <span class=\"n\">c</span><span class=\"p\">):</span>\n    <span class=\"k\">return</span> <span class=\"n\">b</span><span class=\"o\">*</span><span class=\"n\">b</span> <span class=\"o\">-</span> <span class=\"mi\">4</span><span class=\"o\">*</span><span class=\"n\">a</span><span class=\"o\">*</span><span class=\"n\">c</span>\n\n<span class=\"k\">def</span> <span class=\"nf\">qe_solution1</span><span class=\"p\">(</span><span class=\"n\">a</span><span class=\"p\">,</span> <span class=\"n\">b</span><span class=\"p\">,</span> <span class=\"n\">c</span><span class=\"p\">):</span>\n    <span class=\"k\">return</span> <span class=\"p\">(</span><span class=\"o\">-</span><span class=\"n\">b</span> <span class=\"o\">-</span> <span class=\"n\">math</span><span class=\"o\">.</span><span class=\"n\">sqrt</span><span class=\"p\">(</span><span class=\"n\">qe_disc</span><span class=\"p\">(</span><span class=\"n\">a</span><span class=\"p\">,</span> <span class=\"n\">b</span><span class=\"p\">,</span> <span class=\"n\">c</span><span class=\"p\">)))</span> <span class=\"o\">/</span> <span class=\"p\">(</span><span class=\"mi\">2</span><span class=\"o\">*</span><span class=\"n\">a</span><span class=\"p\">)</span>\n\n<span class=\"k\">def</span> <span class=\"nf\">qe_solution2</span><span class=\"p\">(</span><span class=\"n\">a</span><span class=\"p\">,</span> <span class=\"n\">b</span><span class=\"p\">,</span> <span class=\"n\">c</span><span class=\"p\">):</span>\n    <span class=\"k\">return</span> <span class=\"p\">(</span><span class=\"o\">-</span><span class=\"n\">b</span> <span class=\"o\">+</span> <span class=\"n\">math</span><span class=\"o\">.</span><span class=\"n\">sqrt</span><span class=\"p\">(</span><span class=\"n\">qe_disc</span><span class=\"p\">(</span><span class=\"n\">a</span><span class=\"p\">,</span> <span class=\"n\">b</span><span class=\"p\">,</span> <span class=\"n\">c</span><span class=\"p\">)))</span> <span class=\"o\">/</span> <span class=\"p\">(</span><span class=\"mi\">2</span><span class=\"o\">*</span><span class=\"n\">a</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n</section>\n</section>\n\n\n          </div>\n          \n        </div>\n      </div>\n      <div class=\"sphinxsidebar\" role=\"navigation\" aria-label=\"Main\">\n        <div class=\"sphinxsidebarwrapper\">\n<h1 class=\"logo\"><a href=\"../index.html\">Pythonプログラミング入門</a></h1>\n\n\n\n\n\n\n\n\n<p>\n  <a style=\"font-family: sans-serif; font-size: smaller; background: linear-gradient(to top, #353535 0%, #141414 100%); -webkit-font-smoothing: antialiased; font-weight: normal; text-shadow: rgb(0 0 0 / 40%) 0 -1px 0; padding: 2px 6px; color: #fff; text-decoration: none; border-radius: 4px; border: 1px solid #0d0d0d; box-shadow: inset 0 1px 1px 0 #8f8f8f;\" href=\"https://github.com/utokyo-ipp/utokyo-ipp.github.io\">View on GitHub</a>\n</p><p>\n  <a style=\"font-family: sans-serif; font-size: smaller; background: linear-gradient(to top, #ff1e00 0%, #de1e00 100%); -webkit-font-smoothing: antialiased; font-weight: normal; text-shadow: rgb(0 0 0 / 40%) 0 -1px 0; padding: 2px 6px; color: #fff; text-decoration: none; border-radius: 4px; border: 1px solid #0d0d0d; box-shadow: inset 0 1px 1px 0 #ff8e70;\" href=\"https://utokyo-ipp.github.io/IPP_textbook.pdf\">View PDF</a>\n</p><p>\n  <a style=\"border-bottom: none;\" href=\"https://colab.research.google.com/github/utokyo-ipp/utokyo-ipp.github.io/blob/master/colab/1/1-2.ipynb\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Google Colaboratory\"></a>\n</p><h3>Navigation</h3>\n<ul class=\"current\">\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"1-0.html\">1-0. Colaboratory (Colab) の使い方</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"1-1.html\">1-1. 数値演算</a></li>\n<li class=\"toctree-l1 current\"><a class=\"current reference internal\" href=\"#\">1-2. 変数と関数の基礎</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#変数\">変数</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#関数の定義と返値\">関数の定義と返値</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#ローカル変数\">ローカル変数</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#print\"><code class=\"docutils literal notranslate\"><span class=\"pre\">print</span></code></a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#print-と-return\"><code class=\"docutils literal notranslate\"><span class=\"pre\">print</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">return</span></code></a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#コメントと空行\">コメントと空行</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#関数の参照の書き方\">関数の参照の書き方</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#▲グローバル変数\">▲グローバル変数</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#練習の解答\">練習の解答</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"1-3.html\">1-3. 論理・比較演算と条件分岐の基礎</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"1-4.html\">1-4. テストとデバッグ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../2/2-1.html\">2-1. 文字列 (string)</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../2/2-2.html\">2-2. リスト (list)</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../2/2-3.html\">2-3. 条件分岐</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../3/3-1.html\">3-1. 辞書 (dictionary)</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../3/3-2.html\">3-2. 繰り返し</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../3/3-3.html\">3-3. 関数</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../4/4-1.html\">4-1. ファイル入出力の基本</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../4/4-2.html\">4-2. イテラブルとイテレータ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../4/4-3.html\">4-3. ディレクトリと木構造</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../5/5-1.html\">5-1. モジュールの使い方</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../5/5-2.html\">5-2. モジュールの作り方</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../5/5-3.html\">5-3. NumPyライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../6/6-1.html\">6-1. 内包表記</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../6/6-2.html\">6-2. 高階関数</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../6/6-3.html\">6-3. クラス</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../7/7-1.html\">7-1. pandasライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../7/7-2.html\">7-2. scikit-learnライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/1-jupyter-notebook.html\">▲Jupyter Notebook の使い方</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/2-set.html\">▲セット (set)</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/3-recursion.html\">▲再帰</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/3-visualization.html\">▲簡単なデータの可視化</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/4-csv.html\">▲CSVファイルの入出力</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/5-bokeh.html\">▲Bokehライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/5-command.html\">▲Pythonスクリプトとコマンドライン実行</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/5-matplotlib.html\">▲Matplotlibライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/5-re.html\">▲正規表現</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../index_of_terms.html\">索引</a></li>\n</ul>\n\n<div class=\"relations\">\n<h3>Related Topics</h3>\n<ul>\n  <li><a href=\"../index.html\">Documentation overview</a><ul>\n      <li>Previous: <a href=\"1-1.html\" title=\"previous chapter\">1-1. 数値演算</a></li>\n      <li>Next: <a href=\"1-3.html\" title=\"next chapter\">1-3. 論理・比較演算と条件分岐の基礎</a></li>\n  </ul></li>\n</ul>\n</div>\n<search id=\"searchbox\" style=\"display: none\" role=\"search\">\n  <h3 id=\"searchlabel\">Quick search</h3>\n    <div class=\"searchformwrapper\">\n    <form class=\"search\" action=\"../search.html\" method=\"get\">\n      <input type=\"text\" name=\"q\" aria-labelledby=\"searchlabel\" autocomplete=\"off\" autocorrect=\"off\" autocapitalize=\"off\" spellcheck=\"false\"/>\n      <input type=\"submit\" value=\"Go\" />\n    </form>\n    </div>\n</search>\n<script>document.getElementById('searchbox').style.display = \"block\"</script>\n\n\n\n\n\n\n\n\n        </div>\n      </div>\n      <div class=\"clearer\"></div>\n    </div>\n    <div class=\"footer\">\n      &#169;2020–2024, 東京大学 数理・情報教育研究センター (CC BY-NC-ND 4.0).\n      \n      |\n      Powered by <a href=\"https://www.sphinx-doc.org/\">Sphinx 8.0.2</a>\n      &amp; <a href=\"https://alabaster.readthedocs.io\">Alabaster 1.0.0</a>\n      \n    </div>\n\n    \n\n    \n    <script>\n\n      var _gaq = _gaq || [];\n      _gaq.push(['_setAccount', 'G-8M0RXGPPSR']);\n      _gaq.push(['_setDomainName', 'none']);\n      _gaq.push(['_setAllowLinker', true]);\n      _gaq.push(['_trackPageview']);\n\n      (function() {\n        var ga = document.createElement('script'); ga.async = true;\n        ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'https://www') + '.google-analytics.com/ga.js';\n        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);\n      })();\n\n    </script>\n    \n  </body>\n</html>"
  },
  {
    "path": "docs/1/1-3.html",
    "content": "<!DOCTYPE html>\n\n<html lang=\"jp\" data-content_root=\"../\">\n  <head>\n    <meta charset=\"utf-8\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" /><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n\n    <!-- Google tag (gtag.js) -->\n    <script async src=\"https://www.googletagmanager.com/gtag/js?id=G-8M0RXGPPSR\"></script>\n    <script>\n        window.dataLayer = window.dataLayer || [];\n        function gtag(){dataLayer.push(arguments);}\n        gtag('js', new Date());\n        gtag('config', 'G-8M0RXGPPSR');\n    </script>\n    \n    <title>1-3. 論理・比較演算と条件分岐の基礎 &#8212; Pythonプログラミング入門  documentation</title>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/pygments.css?v=d1102ebc\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/basic.css?v=c058f7c8\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/alabaster.css?v=27fed22d\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/nbsphinx-code-cells.css\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/custom.css?v=1a1aa8dd\" />\n    <script src=\"../_static/documentation_options.js?v=3ff7d7a7\"></script>\n    <script src=\"../_static/doctools.js?v=9a2dae69\"></script>\n    <script src=\"../_static/sphinx_highlight.js?v=dc90522c\"></script>\n    <script crossorigin=\"anonymous\" integrity=\"sha256-Ae2Vz/4ePdIu6ZyI/5ZGsYnb+m0JlOmKPjt6XZ9JJkA=\" src=\"https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.4/require.min.js\"></script>\n    <script>window.MathJax = {\"tex\": {\"inlineMath\": [[\"$\", \"$\"], [\"\\\\(\", \"\\\\)\"]], \"processEscapes\": true}, \"options\": {\"ignoreHtmlClass\": \"tex2jax_ignore|mathjax_ignore|document\", \"processHtmlClass\": \"tex2jax_process|mathjax_process|math|output_area\"}}</script>\n    <script defer=\"defer\" src=\"https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js\"></script>\n    <link rel=\"index\" title=\"Index\" href=\"../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../search.html\" />\n    <link rel=\"next\" title=\"1-4. テストとデバッグ\" href=\"1-4.html\" />\n    <link rel=\"prev\" title=\"1-2. 変数と関数の基礎\" href=\"1-2.html\" />\n   \n  <link rel=\"stylesheet\" href=\"../_static/custom.css\" type=\"text/css\" />\n  \n\n  \n  \n\n  </head><body>\n  \n\n    <div class=\"document\">\n      <div class=\"documentwrapper\">\n        <div class=\"bodywrapper\">\n          \n\n          <div class=\"body\" role=\"main\">\n            \n  <section id=\"1-3.-論理・比較演算と条件分岐の基礎\">\n<h1>1-3. 論理・比較演算と条件分岐の基礎<a class=\"headerlink\" href=\"#1-3.-論理・比較演算と条件分岐の基礎\" title=\"Link to this heading\">¶</a></h1>\n<p>論理・比較演算と条件分岐の基礎について説明します。</p>\n<p>参考</p>\n<ul class=\"simple\">\n<li><p><a class=\"reference external\" href=\"https://docs.python.org/ja/3/tutorial/controlflow.html\">https://docs.python.org/ja/3/tutorial/controlflow.html</a></p></li>\n<li><p><a class=\"reference external\" href=\"https://docs.python.org/ja/3/reference/compound_stmts.html\">https://docs.python.org/ja/3/reference/compound_stmts.html</a></p></li>\n<li><p><a class=\"reference external\" href=\"https://docs.python.org/ja/3/library/stdtypes.html\">https://docs.python.org/ja/3/library/stdtypes.html</a></p></li>\n</ul>\n<section id=\"if文による条件分岐\">\n<h2>if文による条件分岐<a class=\"headerlink\" href=\"#if文による条件分岐\" title=\"Link to this heading\">¶</a></h2>\n<p>制御構造については第2回と第3回で本格的に扱いますが、 ここでは <code class=\"docutils literal notranslate\"><span class=\"pre\">if</span></code> による<strong>条件分岐</strong>（<strong>if文</strong>）の基本的な形だけ紹介します。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[1]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">def</span> <span class=\"nf\">bmax</span><span class=\"p\">(</span><span class=\"n\">a</span><span class=\"p\">,</span><span class=\"n\">b</span><span class=\"p\">):</span>\n    <span class=\"k\">if</span> <span class=\"n\">a</span> <span class=\"o\">&gt;</span> <span class=\"n\">b</span><span class=\"p\">:</span>\n        <span class=\"k\">return</span> <span class=\"n\">a</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"k\">return</span> <span class=\"n\">b</span>\n</pre></div>\n</div>\n</div>\n<p>上の関数 <code class=\"docutils literal notranslate\"><span class=\"pre\">bmax</span></code> は、2つの引数の大きい方 （正確には小さくない方）を返します。</p>\n<p>ここで <code class=\"docutils literal notranslate\"><span class=\"pre\">if</span></code> による条件分岐が用いられています。</p>\n<div class=\"highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>if a &gt; b:\n    return a\nelse:\n    return b\n</pre></div>\n</div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">a</span></code> が <code class=\"docutils literal notranslate\"><span class=\"pre\">b</span></code> より大きければ <code class=\"docutils literal notranslate\"><span class=\"pre\">a</span></code> が返され、そうでなければ、<code class=\"docutils literal notranslate\"><span class=\"pre\">b</span></code> が返されます。</p>\n<p>ここで、<code class=\"docutils literal notranslate\"><span class=\"pre\">return</span> <span class=\"pre\">a</span></code> が、<code class=\"docutils literal notranslate\"><span class=\"pre\">if</span></code> より右にインデントされていることに注意してください。 <code class=\"docutils literal notranslate\"><span class=\"pre\">return</span> <span class=\"pre\">a</span></code> は、<code class=\"docutils literal notranslate\"><span class=\"pre\">a</span> <span class=\"pre\">&gt;</span> <span class=\"pre\">b</span></code> が成り立つときのみ実行されます。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">else</span></code> は <code class=\"docutils literal notranslate\"><span class=\"pre\">if</span></code> の右の条件が成り立たない場合を示しています。 <code class=\"docutils literal notranslate\"><span class=\"pre\">else:</span></code> として、必ず <code class=\"docutils literal notranslate\"><span class=\"pre\">:</span></code> が付くことに注意してください。</p>\n<p>また、<code class=\"docutils literal notranslate\"><span class=\"pre\">return</span> <span class=\"pre\">b</span></code> も、<code class=\"docutils literal notranslate\"><span class=\"pre\">else</span></code> より右にインデントされていることに注意してください。 <code class=\"docutils literal notranslate\"><span class=\"pre\">if</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">else</span></code> は同じインデントになります。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[2]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">bmax</span><span class=\"p\">(</span><span class=\"mi\">3</span><span class=\"p\">,</span><span class=\"mi\">5</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[2]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n5\n</pre></div></div>\n</div>\n<p>関数の中で <code class=\"docutils literal notranslate\"><span class=\"pre\">return</span></code> と式が実行されますと、関数は即座に返りますので、 関数定義の中のその後の部分は実行されません。</p>\n<p>たとえば、上の条件分岐は以下のように書くこともできます。</p>\n<div class=\"highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>if a &gt; b:\n    return a\nreturn b\n</pre></div>\n</div>\n<p>ここでは、<code class=\"docutils literal notranslate\"><span class=\"pre\">if</span></code> から始まる条件分岐には <code class=\"docutils literal notranslate\"><span class=\"pre\">else:</span></code> の部分がありません。 条件分岐の後に <code class=\"docutils literal notranslate\"><span class=\"pre\">return</span> <span class=\"pre\">b</span></code> が続いています。 （<code class=\"docutils literal notranslate\"><span class=\"pre\">if</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">return</span> <span class=\"pre\">b</span></code> のインデントは同じです。）</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">a</span> <span class=\"pre\">&gt;</span> <span class=\"pre\">b</span></code> が成り立っていれば、<code class=\"docutils literal notranslate\"><span class=\"pre\">return</span> <span class=\"pre\">a</span></code> が実行されて a の値が返ります。 したがって、その次の <code class=\"docutils literal notranslate\"><span class=\"pre\">return</span> <span class=\"pre\">b</span></code> は実行されません。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">a</span> <span class=\"pre\">&gt;</span> <span class=\"pre\">b</span></code> が成り立っていなければ、<code class=\"docutils literal notranslate\"><span class=\"pre\">return</span> <span class=\"pre\">a</span></code> は実行されません。 これで条件分岐は終わりますので、その次にある <code class=\"docutils literal notranslate\"><span class=\"pre\">return</span> <span class=\"pre\">b</span></code> が実行されます。</p>\n<p>なお、Pythonでは、<code class=\"docutils literal notranslate\"><span class=\"pre\">max</span></code> という関数があらかじめ定義されています。（すなわち、<code class=\"docutils literal notranslate\"><span class=\"pre\">max</span></code> は組み込み関数です。）</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[3]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">max</span><span class=\"p\">(</span><span class=\"mi\">3</span><span class=\"p\">,</span><span class=\"mi\">5</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[3]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n5\n</pre></div></div>\n</div>\n</section>\n<section id=\"様々な条件\">\n<h2>様々な条件<a class=\"headerlink\" href=\"#様々な条件\" title=\"Link to this heading\">¶</a></h2>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">if</span></code> の右などに来る条件として様々なものを書くことができます。これらの条件には <code class=\"docutils literal notranslate\"><span class=\"pre\">&gt;</span></code> や <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;</span></code> などの<strong>比較演算子</strong>が含まれています。</p>\n<div class=\"highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>x &lt; y         # x は y より小さい\nx &lt;= y        # x は y 以下\nx &gt; y         # x は y より大きい\nx &gt;= y        # x は y 以上\nx == y        # x と y は等しい\nx != y        # x と y は等しくない\n</pre></div>\n</div>\n<p>特に等しいかどうかの比較には <code class=\"docutils literal notranslate\"><span class=\"pre\">==</span></code> という演算子が使われることに注意してください。 <code class=\"docutils literal notranslate\"><span class=\"pre\">=</span></code> は代入の演算子です。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;=</span></code> は小さいか等しいか、<code class=\"docutils literal notranslate\"><span class=\"pre\">&gt;=</span></code> は大きいか等しいかを表します。 <code class=\"docutils literal notranslate\"><span class=\"pre\">!=</span></code> は等しくないことを表します。</p>\n<p>さらに、このような基本的な条件を、 <code class=\"docutils literal notranslate\"><span class=\"pre\">and</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">or</span></code> を用いて組み合わせることができます。</p>\n<div class=\"highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>i &gt;= 0 and j &gt; 0   # i は 0 以上で、かつ、j は 0 より大きい\ni &lt; 0 or j &gt; 0     # i は 0 より小さいか、または、j は 0 より大きい\n</pre></div>\n</div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">i</span></code> が 1 または 2 または 3 である、という条件は以下のようになります。</p>\n<div class=\"highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>i == 1 or i == 2 or i == 3\n</pre></div>\n</div>\n<p>これを <code class=\"docutils literal notranslate\"><span class=\"pre\">i</span> <span class=\"pre\">==</span> <span class=\"pre\">1</span> <span class=\"pre\">or</span> <span class=\"pre\">2</span> <span class=\"pre\">or</span> <span class=\"pre\">3</span></code> と書くことはできませんので、注意してください。</p>\n<p>また、<code class=\"docutils literal notranslate\"><span class=\"pre\">not</span></code> によって条件の否定をとることもできます。</p>\n<div class=\"highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>not x &lt; y          # x は y より小さくない（x は y 以上）\n</pre></div>\n</div>\n<p>比較演算子は、以下のように連続して用いることもできます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[4]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"mi\">1</span> <span class=\"o\">&lt;</span> <span class=\"mi\">2</span> <span class=\"o\">&lt;</span> <span class=\"mi\">3</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[4]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nTrue\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[5]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"mi\">3</span> <span class=\"o\">&gt;=</span> <span class=\"mi\">2</span> <span class=\"o\">&lt;</span> <span class=\"mi\">5</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[5]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nTrue\n</pre></div></div>\n</div>\n<section id=\"練習-absolute\">\n<h3>練習 <code class=\"docutils literal notranslate\"><span class=\"pre\">absolute</span></code><a class=\"headerlink\" href=\"#練習-absolute\" title=\"Link to this heading\">¶</a></h3>\n<p>数値 <code class=\"docutils literal notranslate\"><span class=\"pre\">x</span></code> の絶対値を求める関数 <code class=\"docutils literal notranslate\"><span class=\"pre\">absolute(x)</span></code> を定義してください。 Pythonには <code class=\"docutils literal notranslate\"><span class=\"pre\">abs</span></code> という絶対値を求める組み込み関数が用意されていますが、それを使わずに定義してください。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[6]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">def</span> <span class=\"nf\">absolute</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">):</span>\n    <span class=\"o\">...</span>\n</pre></div>\n</div>\n</div>\n<p>定義ができたら、次のセルを実行して、エラーがでないことを確認してください。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[7]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">assert</span> <span class=\"n\">absolute</span><span class=\"p\">(</span><span class=\"mi\">5</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"mi\">5</span>\n<span class=\"k\">assert</span> <span class=\"n\">absolute</span><span class=\"p\">(</span><span class=\"o\">-</span><span class=\"mi\">5</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"mi\">5</span>\n<span class=\"k\">assert</span> <span class=\"n\">absolute</span><span class=\"p\">(</span><span class=\"mi\">0</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"mi\">0</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n<span class=\"ansi-red-fg\">---------------------------------------------------------------------------</span>\n<span class=\"ansi-red-fg\">AssertionError</span>                            Traceback (most recent call last)\nCell <span class=\"ansi-green-fg\">In[7], line 1</span>\n<span class=\"ansi-green-fg\">----&gt; 1</span> <span class=\"ansi-bold\" style=\"color: rgb(0,135,0)\">assert</span> absolute(<span style=\"color: rgb(98,98,98)\">5</span>) <span style=\"color: rgb(98,98,98)\">==</span> <span style=\"color: rgb(98,98,98)\">5</span>\n<span class=\"ansi-green-intense-fg ansi-bold\">      2</span> <span class=\"ansi-bold\" style=\"color: rgb(0,135,0)\">assert</span> absolute(<span style=\"color: rgb(98,98,98)\">-</span><span style=\"color: rgb(98,98,98)\">5</span>) <span style=\"color: rgb(98,98,98)\">==</span> <span style=\"color: rgb(98,98,98)\">5</span>\n<span class=\"ansi-green-intense-fg ansi-bold\">      3</span> <span class=\"ansi-bold\" style=\"color: rgb(0,135,0)\">assert</span> absolute(<span style=\"color: rgb(98,98,98)\">0</span>) <span style=\"color: rgb(98,98,98)\">==</span> <span style=\"color: rgb(98,98,98)\">0</span>\n\n<span class=\"ansi-red-fg\">AssertionError</span>:\n</pre></div></div>\n</div>\n</section>\n<section id=\"練習-sign\">\n<h3>練習 <code class=\"docutils literal notranslate\"><span class=\"pre\">sign</span></code><a class=\"headerlink\" href=\"#練習-sign\" title=\"Link to this heading\">¶</a></h3>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">x</span></code> が正ならば 1、負ならば -1、ゼロならば 0 を返す関数 <code class=\"docutils literal notranslate\"><span class=\"pre\">sign(x)</span></code> を定義してください。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[8]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">def</span> <span class=\"nf\">sign</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">):</span>\n    <span class=\"o\">...</span>\n</pre></div>\n</div>\n</div>\n<p>定義ができたら、次のセルを実行して、エラーがでないことを確認してください。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[9]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">assert</span> <span class=\"n\">sign</span><span class=\"p\">(</span><span class=\"mi\">5</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"mi\">1</span>\n<span class=\"k\">assert</span> <span class=\"n\">sign</span><span class=\"p\">(</span><span class=\"o\">-</span><span class=\"mi\">5</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"o\">-</span><span class=\"mi\">1</span>\n<span class=\"k\">assert</span> <span class=\"n\">sign</span><span class=\"p\">(</span><span class=\"mi\">0</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"mi\">0</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n<span class=\"ansi-red-fg\">---------------------------------------------------------------------------</span>\n<span class=\"ansi-red-fg\">AssertionError</span>                            Traceback (most recent call last)\nCell <span class=\"ansi-green-fg\">In[9], line 1</span>\n<span class=\"ansi-green-fg\">----&gt; 1</span> <span class=\"ansi-bold\" style=\"color: rgb(0,135,0)\">assert</span> sign(<span style=\"color: rgb(98,98,98)\">5</span>) <span style=\"color: rgb(98,98,98)\">==</span> <span style=\"color: rgb(98,98,98)\">1</span>\n<span class=\"ansi-green-intense-fg ansi-bold\">      2</span> <span class=\"ansi-bold\" style=\"color: rgb(0,135,0)\">assert</span> sign(<span style=\"color: rgb(98,98,98)\">-</span><span style=\"color: rgb(98,98,98)\">5</span>) <span style=\"color: rgb(98,98,98)\">==</span> <span style=\"color: rgb(98,98,98)\">-</span><span style=\"color: rgb(98,98,98)\">1</span>\n<span class=\"ansi-green-intense-fg ansi-bold\">      3</span> <span class=\"ansi-bold\" style=\"color: rgb(0,135,0)\">assert</span> sign(<span style=\"color: rgb(98,98,98)\">0</span>) <span style=\"color: rgb(98,98,98)\">==</span> <span style=\"color: rgb(98,98,98)\">0</span>\n\n<span class=\"ansi-red-fg\">AssertionError</span>:\n</pre></div></div>\n</div>\n</section>\n</section>\n<section id=\"真理値を返す関数\">\n<h2>真理値を返す関数<a class=\"headerlink\" href=\"#真理値を返す関数\" title=\"Link to this heading\">¶</a></h2>\n<p>ここで、真理値を返す関数について説明します。</p>\n<p>Pythonが扱うデータには様々な種類があります。 数については既に見て来ました。</p>\n<p><strong>真理値</strong>とは、 <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> または <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code> のどちらかの値のことです。 これらは変数ではなく、<strong>組み込み定数</strong>であることに注意してください。</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> は、正しいこと（<strong>真</strong>）を表します。</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code> は、間違ったこと（<strong>偽</strong>）を表します。</p></li>\n</ul>\n<p>実は、<code class=\"docutils literal notranslate\"><span class=\"pre\">if</span></code> の後の条件の式は、<code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> か <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code> を値として持ちます。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[10]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">x</span> <span class=\"o\">=</span> <span class=\"mi\">3</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[11]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">x</span> <span class=\"o\">&gt;</span> <span class=\"mi\">1</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[11]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nTrue\n</pre></div></div>\n</div>\n<p>上のように、<code class=\"docutils literal notranslate\"><span class=\"pre\">x</span></code> に 3 を代入しておくと、 <code class=\"docutils literal notranslate\"><span class=\"pre\">x</span> <span class=\"pre\">&gt;</span> <span class=\"pre\">1</span></code> という条件は成り立ちます。 したがって、<code class=\"docutils literal notranslate\"><span class=\"pre\">x</span> <span class=\"pre\">&gt;</span> <span class=\"pre\">1</span></code> という式の値は <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> になるのです。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[12]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">x</span> <span class=\"o\">&lt;</span> <span class=\"mi\">1</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[12]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nFalse\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[13]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">x</span><span class=\"o\">%</span><span class=\"k\">2</span> == 0\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[13]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nFalse\n</pre></div></div>\n</div>\n<p>そして、真理値を返す関数を定義することができます。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[14]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">def</span> <span class=\"nf\">is_even</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">):</span>\n    <span class=\"k\">return</span> <span class=\"n\">x</span><span class=\"o\">%</span><span class=\"k\">2</span> == 0\n</pre></div>\n</div>\n</div>\n<p>この関数は、<code class=\"docutils literal notranslate\"><span class=\"pre\">x</span></code> を 2 で割った余りが 0 に等しいかどうかという 条件の結果である真理値を返します。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">x</span> <span class=\"pre\">==</span> <span class=\"pre\">y</span></code> は、<code class=\"docutils literal notranslate\"><span class=\"pre\">x</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">y</span></code> が等しいかどうかという条件です。 この関数は、この条件の結果である真理値を <code class=\"docutils literal notranslate\"><span class=\"pre\">return</span></code> によって返しています。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[15]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">is_even</span><span class=\"p\">(</span><span class=\"mi\">2</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[15]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nTrue\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[16]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">is_even</span><span class=\"p\">(</span><span class=\"mi\">3</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[16]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nFalse\n</pre></div></div>\n</div>\n<p>このような関数は、<code class=\"docutils literal notranslate\"><span class=\"pre\">if</span></code> の後に使うことができます。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[17]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">def</span> <span class=\"nf\">is_odd</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">):</span>\n    <span class=\"k\">if</span> <span class=\"n\">is_even</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"kc\">False</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"k\">return</span> <span class=\"kc\">True</span>\n</pre></div>\n</div>\n</div>\n<p>このように、直接に <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> や <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code> を返すこともできます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[18]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">is_odd</span><span class=\"p\">(</span><span class=\"mi\">2</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[18]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nFalse\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[19]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">is_odd</span><span class=\"p\">(</span><span class=\"mi\">3</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[19]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nTrue\n</pre></div></div>\n</div>\n</section>\n<section id=\"オブジェクト\">\n<h2>オブジェクト<a class=\"headerlink\" href=\"#オブジェクト\" title=\"Link to this heading\">¶</a></h2>\n<p>Pythonにおける値（式の評価結果）は全て<strong>オブジェクト</strong>と総称されます。 変数の値もオブジェクトです。</p>\n<p>したがって、数や真理値もオブジェクトです。 今後、文字列やリストなど、様々な種類のデータが登場しますが、 それらは全てオブジェクトです。</p>\n<p>今後、オブジェクトという用語がところどころで出て来ますが、 オブジェクトとデータは同義と思って差し支えありません。 正確には、式の評価結果や変数の値となるデータがオブジェクトです。</p>\n</section>\n<section id=\"None\">\n<h2><code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code><a class=\"headerlink\" href=\"#None\" title=\"Link to this heading\">¶</a></h2>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code> というデータがあります。</p>\n<p>セルの中の式を評価した結果が <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code> になると、 何も表示されません。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[20]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"kc\">None</span>\n</pre></div>\n</div>\n</div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">print</span></code> で無理やり表示させると以下のようになります。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[21]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"kc\">None</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nNone\n</pre></div></div>\n</div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code> という値は、特段の値が何もない、 ということを表すために使われることがあります。</p>\n<p>条件としては、<code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code> は偽と同様に扱われます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[22]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">if</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s1\">&#39;OK&#39;</span><span class=\"p\">)</span>\n<span class=\"k\">else</span><span class=\"p\">:</span>\n    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s1\">&#39;NG&#39;</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nNG\n</pre></div></div>\n</div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">return</span></code> の後に式を書かないことがあります。</p>\n<div class=\"highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>return\n</pre></div>\n</div>\n<p>この場合、以下のように <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code> が指定されているとみなされます。</p>\n<div class=\"highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>return None\n</pre></div>\n</div>\n<p>このようなreturn文を実行すると、関数の実行はそこで終了して <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code> が返ります。</p>\n</section>\n<section id=\"▲条件として使われる他の値\">\n<h2>▲条件として使われる他の値<a class=\"headerlink\" href=\"#▲条件として使われる他の値\" title=\"Link to this heading\">¶</a></h2>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code> の他に、他の種類のデータも、条件としても用いることができます。</p>\n<p>たとえば:</p>\n<ul class=\"simple\">\n<li><p>数のうち、0 や 0.0 は偽、その他は真とみなされます。</p></li>\n<li><p>文字列では、空文字列 <code class=\"docutils literal notranslate\"><span class=\"pre\">''</span></code> のみ偽、その他は真とみなされます。（文字列については2-1を参照。）</p></li>\n<li><p>組み込み定数 <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code> は偽とみなされます。（<code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code> については上記参照。）</p></li>\n</ul>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[23]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">if</span> <span class=\"mi\">0</span><span class=\"p\">:</span>\n    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s1\">&#39;OK&#39;</span><span class=\"p\">)</span>\n<span class=\"k\">else</span><span class=\"p\">:</span>\n    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s1\">&#39;NG&#39;</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nNG\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[24]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">if</span> <span class=\"o\">-</span><span class=\"mf\">1.1</span><span class=\"p\">:</span>\n    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s1\">&#39;OK&#39;</span><span class=\"p\">)</span>\n<span class=\"k\">else</span><span class=\"p\">:</span>\n    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s1\">&#39;NG&#39;</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nOK\n</pre></div></div>\n</div>\n</section>\n<section id=\"▲再帰\">\n<h2>▲再帰<a class=\"headerlink\" href=\"#▲再帰\" title=\"Link to this heading\">¶</a></h2>\n<p>一般に、定義しようとするもの自身を定義の中で参照することを、 <strong>再帰</strong>と言います。 再帰による定義を再帰的定義と言います。</p>\n<p>たとえば、数列の漸化式は再帰的定義と考えられます。 実際に、<code class=\"docutils literal notranslate\"><span class=\"pre\">n</span></code> 番目のフィボナッチ数を <code class=\"docutils literal notranslate\"><span class=\"pre\">fib(n)</span></code> とおくと、 <code class=\"docutils literal notranslate\"><span class=\"pre\">fib(n)</span></code> は次のような漸化式を満たします。</p>\n<div class=\"highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>fib(n) = n  ただし n&lt;2\nfib(n) = fib(n-1) + fib(n-2)  ただし n&gt;=2\n</pre></div>\n</div>\n<p>この漸化式を用いて以下のように実際にフィボナッチ数を計算することができます。</p>\n<div class=\"highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>fib(0) = 0\nfib(1) = 1\nfib(2) = fib(1) + fib(0) = 1 + 0 = 1\nfib(3) = fib(2) + fib(1) = 1 + 1 = 2\nfib(4) = fib(3) + fib(2) = 2 + 1 = 3\nfib(5) = fib(4) + fib(3) = 3 + 2 = 5\n...\n</pre></div>\n</div>\n<p>この漸化式から、以下のように <code class=\"docutils literal notranslate\"><span class=\"pre\">fib(n)</span></code> の再帰的定義が得られます。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[25]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">def</span> <span class=\"nf\">fib</span><span class=\"p\">(</span><span class=\"n\">n</span><span class=\"p\">):</span>\n    <span class=\"k\">if</span> <span class=\"n\">n</span> <span class=\"o\">&lt;</span> <span class=\"mi\">2</span><span class=\"p\">:</span>\n        <span class=\"k\">return</span> <span class=\"n\">n</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"k\">return</span> <span class=\"n\">fib</span><span class=\"p\">(</span><span class=\"n\">n</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">)</span> <span class=\"o\">+</span> <span class=\"n\">fib</span><span class=\"p\">(</span><span class=\"n\">n</span><span class=\"o\">-</span><span class=\"mi\">2</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<p>実際に、以下のように <code class=\"docutils literal notranslate\"><span class=\"pre\">fib(n)</span></code> の値が求まります。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[26]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">fib</span><span class=\"p\">(</span><span class=\"mi\">10</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[26]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n55\n</pre></div></div>\n</div>\n</section>\n<section id=\"練習の解答\">\n<h2>練習の解答<a class=\"headerlink\" href=\"#練習の解答\" title=\"Link to this heading\">¶</a></h2>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[27]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">def</span> <span class=\"nf\">absolute</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">):</span>\n    <span class=\"k\">if</span> <span class=\"n\">x</span> <span class=\"o\">&lt;</span> <span class=\"mi\">0</span><span class=\"p\">:</span>\n        <span class=\"k\">return</span> <span class=\"o\">-</span><span class=\"n\">x</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"k\">return</span> <span class=\"n\">x</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[28]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">def</span> <span class=\"nf\">sign</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">):</span>\n    <span class=\"k\">if</span> <span class=\"n\">x</span> <span class=\"o\">&lt;</span> <span class=\"mi\">0</span><span class=\"p\">:</span>\n        <span class=\"k\">return</span> <span class=\"o\">-</span><span class=\"mi\">1</span>\n    <span class=\"k\">if</span> <span class=\"n\">x</span> <span class=\"o\">&gt;</span> <span class=\"mi\">0</span><span class=\"p\">:</span>\n        <span class=\"k\">return</span> <span class=\"mi\">1</span>\n    <span class=\"k\">return</span> <span class=\"mi\">0</span>\n</pre></div>\n</div>\n</div>\n</section>\n</section>\n\n\n          </div>\n          \n        </div>\n      </div>\n      <div class=\"sphinxsidebar\" role=\"navigation\" aria-label=\"Main\">\n        <div class=\"sphinxsidebarwrapper\">\n<h1 class=\"logo\"><a href=\"../index.html\">Pythonプログラミング入門</a></h1>\n\n\n\n\n\n\n\n\n<p>\n  <a style=\"font-family: sans-serif; font-size: smaller; background: linear-gradient(to top, #353535 0%, #141414 100%); -webkit-font-smoothing: antialiased; font-weight: normal; text-shadow: rgb(0 0 0 / 40%) 0 -1px 0; padding: 2px 6px; color: #fff; text-decoration: none; border-radius: 4px; border: 1px solid #0d0d0d; box-shadow: inset 0 1px 1px 0 #8f8f8f;\" href=\"https://github.com/utokyo-ipp/utokyo-ipp.github.io\">View on GitHub</a>\n</p><p>\n  <a style=\"font-family: sans-serif; font-size: smaller; background: linear-gradient(to top, #ff1e00 0%, #de1e00 100%); -webkit-font-smoothing: antialiased; font-weight: normal; text-shadow: rgb(0 0 0 / 40%) 0 -1px 0; padding: 2px 6px; color: #fff; text-decoration: none; border-radius: 4px; border: 1px solid #0d0d0d; box-shadow: inset 0 1px 1px 0 #ff8e70;\" href=\"https://utokyo-ipp.github.io/IPP_textbook.pdf\">View PDF</a>\n</p><p>\n  <a style=\"border-bottom: none;\" href=\"https://colab.research.google.com/github/utokyo-ipp/utokyo-ipp.github.io/blob/master/colab/1/1-3.ipynb\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Google Colaboratory\"></a>\n</p><h3>Navigation</h3>\n<ul class=\"current\">\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"1-0.html\">1-0. Colaboratory (Colab) の使い方</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"1-1.html\">1-1. 数値演算</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"1-2.html\">1-2. 変数と関数の基礎</a></li>\n<li class=\"toctree-l1 current\"><a class=\"current reference internal\" href=\"#\">1-3. 論理・比較演算と条件分岐の基礎</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#if文による条件分岐\">if文による条件分岐</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#様々な条件\">様々な条件</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#真理値を返す関数\">真理値を返す関数</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#オブジェクト\">オブジェクト</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#None\"><code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code></a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#▲条件として使われる他の値\">▲条件として使われる他の値</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#▲再帰\">▲再帰</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#練習の解答\">練習の解答</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"1-4.html\">1-4. テストとデバッグ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../2/2-1.html\">2-1. 文字列 (string)</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../2/2-2.html\">2-2. リスト (list)</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../2/2-3.html\">2-3. 条件分岐</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../3/3-1.html\">3-1. 辞書 (dictionary)</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../3/3-2.html\">3-2. 繰り返し</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../3/3-3.html\">3-3. 関数</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../4/4-1.html\">4-1. ファイル入出力の基本</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../4/4-2.html\">4-2. イテラブルとイテレータ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../4/4-3.html\">4-3. ディレクトリと木構造</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../5/5-1.html\">5-1. モジュールの使い方</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../5/5-2.html\">5-2. モジュールの作り方</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../5/5-3.html\">5-3. NumPyライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../6/6-1.html\">6-1. 内包表記</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../6/6-2.html\">6-2. 高階関数</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../6/6-3.html\">6-3. クラス</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../7/7-1.html\">7-1. pandasライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../7/7-2.html\">7-2. scikit-learnライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/1-jupyter-notebook.html\">▲Jupyter Notebook の使い方</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/2-set.html\">▲セット (set)</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/3-recursion.html\">▲再帰</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/3-visualization.html\">▲簡単なデータの可視化</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/4-csv.html\">▲CSVファイルの入出力</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/5-bokeh.html\">▲Bokehライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/5-command.html\">▲Pythonスクリプトとコマンドライン実行</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/5-matplotlib.html\">▲Matplotlibライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/5-re.html\">▲正規表現</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../index_of_terms.html\">索引</a></li>\n</ul>\n\n<div class=\"relations\">\n<h3>Related Topics</h3>\n<ul>\n  <li><a href=\"../index.html\">Documentation overview</a><ul>\n      <li>Previous: <a href=\"1-2.html\" title=\"previous chapter\">1-2. 変数と関数の基礎</a></li>\n      <li>Next: <a href=\"1-4.html\" title=\"next chapter\">1-4. テストとデバッグ</a></li>\n  </ul></li>\n</ul>\n</div>\n<search id=\"searchbox\" style=\"display: none\" role=\"search\">\n  <h3 id=\"searchlabel\">Quick search</h3>\n    <div class=\"searchformwrapper\">\n    <form class=\"search\" action=\"../search.html\" method=\"get\">\n      <input type=\"text\" name=\"q\" aria-labelledby=\"searchlabel\" autocomplete=\"off\" autocorrect=\"off\" autocapitalize=\"off\" spellcheck=\"false\"/>\n      <input type=\"submit\" value=\"Go\" />\n    </form>\n    </div>\n</search>\n<script>document.getElementById('searchbox').style.display = \"block\"</script>\n\n\n\n\n\n\n\n\n        </div>\n      </div>\n      <div class=\"clearer\"></div>\n    </div>\n    <div class=\"footer\">\n      &#169;2020–2024, 東京大学 数理・情報教育研究センター (CC BY-NC-ND 4.0).\n      \n      |\n      Powered by <a href=\"https://www.sphinx-doc.org/\">Sphinx 8.0.2</a>\n      &amp; <a href=\"https://alabaster.readthedocs.io\">Alabaster 1.0.0</a>\n      \n    </div>\n\n    \n\n    \n    <script>\n\n      var _gaq = _gaq || [];\n      _gaq.push(['_setAccount', 'G-8M0RXGPPSR']);\n      _gaq.push(['_setDomainName', 'none']);\n      _gaq.push(['_setAllowLinker', true]);\n      _gaq.push(['_trackPageview']);\n\n      (function() {\n        var ga = document.createElement('script'); ga.async = true;\n        ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'https://www') + '.google-analytics.com/ga.js';\n        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);\n      })();\n\n    </script>\n    \n  </body>\n</html>"
  },
  {
    "path": "docs/1/1-4.html",
    "content": "<!DOCTYPE html>\n\n<html lang=\"jp\" data-content_root=\"../\">\n  <head>\n    <meta charset=\"utf-8\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" /><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n\n    <!-- Google tag (gtag.js) -->\n    <script async src=\"https://www.googletagmanager.com/gtag/js?id=G-8M0RXGPPSR\"></script>\n    <script>\n        window.dataLayer = window.dataLayer || [];\n        function gtag(){dataLayer.push(arguments);}\n        gtag('js', new Date());\n        gtag('config', 'G-8M0RXGPPSR');\n    </script>\n    \n    <title>1-4. テストとデバッグ &#8212; Pythonプログラミング入門  documentation</title>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/pygments.css?v=d1102ebc\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/basic.css?v=c058f7c8\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/alabaster.css?v=27fed22d\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/nbsphinx-code-cells.css\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/custom.css?v=1a1aa8dd\" />\n    <script src=\"../_static/documentation_options.js?v=3ff7d7a7\"></script>\n    <script src=\"../_static/doctools.js?v=9a2dae69\"></script>\n    <script src=\"../_static/sphinx_highlight.js?v=dc90522c\"></script>\n    <script crossorigin=\"anonymous\" integrity=\"sha256-Ae2Vz/4ePdIu6ZyI/5ZGsYnb+m0JlOmKPjt6XZ9JJkA=\" src=\"https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.4/require.min.js\"></script>\n    <script>window.MathJax = {\"tex\": {\"inlineMath\": [[\"$\", \"$\"], [\"\\\\(\", \"\\\\)\"]], \"processEscapes\": true}, \"options\": {\"ignoreHtmlClass\": \"tex2jax_ignore|mathjax_ignore|document\", \"processHtmlClass\": \"tex2jax_process|mathjax_process|math|output_area\"}}</script>\n    <script defer=\"defer\" src=\"https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js\"></script>\n    <link rel=\"index\" title=\"Index\" href=\"../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../search.html\" />\n    <link rel=\"next\" title=\"2-1. 文字列 (string)\" href=\"../2/2-1.html\" />\n    <link rel=\"prev\" title=\"1-3. 論理・比較演算と条件分岐の基礎\" href=\"1-3.html\" />\n   \n  <link rel=\"stylesheet\" href=\"../_static/custom.css\" type=\"text/css\" />\n  \n\n  \n  \n\n  </head><body>\n  \n\n    <div class=\"document\">\n      <div class=\"documentwrapper\">\n        <div class=\"bodywrapper\">\n          \n\n          <div class=\"body\" role=\"main\">\n            \n  <section id=\"1-4.-テストとデバッグ\">\n<h1>1-4. テストとデバッグ<a class=\"headerlink\" href=\"#1-4.-テストとデバッグ\" title=\"Link to this heading\">¶</a></h1>\n<p>テストとデバッグについて説明します。</p>\n<p>参考</p>\n<ul class=\"simple\">\n<li><p><a class=\"reference external\" href=\"https://docs.python.org/ja/3/tutorial/errors.html\">https://docs.python.org/ja/3/tutorial/errors.html</a></p></li>\n</ul>\n<section id=\"仕様・テスト・デバッグ\">\n<h2>仕様・テスト・デバッグ<a class=\"headerlink\" href=\"#仕様・テスト・デバッグ\" title=\"Link to this heading\">¶</a></h2>\n<p>プログラムを書くときに、実現しようとしている事柄を<strong>仕様</strong>と呼びます。</p>\n<p>対象のプログラムが仕様に適合しているかを、実際にプログラムを動作させて検査することを、<strong>テスト</strong>と呼びます。 テストの際に、テスト対象に与える入出力ペアのことを、<strong>テストケース</strong>と呼びます。</p>\n<p>書いたプログラムが仕様に適合しているかは、一般に自明ではありません。 テストによって、仕様に反したプログラムの振舞いが、しばしば浮き彫りになります。 仕様に反したプログラムの振舞いの原因を、<strong>バグ</strong>と呼び、それを取り除くことを<strong>デバッグ</strong>と呼びます。</p>\n<p>プログラミングでは、典型的には</p>\n<ul class=\"simple\">\n<li><p>仕様を分析する</p></li>\n<li><p>プログラムを書く</p></li>\n<li><p>テストする</p></li>\n<li><p>デバッグする</p></li>\n</ul>\n<p>という4つの行いを、必要に応じて繰り返すことになります。</p>\n</section>\n<section id=\"assert文\">\n<h2>assert文<a class=\"headerlink\" href=\"#assert文\" title=\"Link to this heading\">¶</a></h2>\n<p>テストとデバッグに有用なのが、<strong>assert文</strong>です。 これは、<code class=\"docutils literal notranslate\"><span class=\"pre\">assert</span></code> の次に書かれた条件式が真であるべきだと仕様を宣言する文です。 偽であった場合は、<code class=\"docutils literal notranslate\"><span class=\"pre\">AssertionError</span></code> が発生してプログラムがそこで停止します。</p>\n<p>与えられた引数を二乗する関数 <code class=\"docutils literal notranslate\"><span class=\"pre\">square</span></code> を用いた具体例を示します。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[1]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">def</span> <span class=\"nf\">square</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">):</span>\n    <span class=\"k\">return</span> <span class=\"n\">x</span><span class=\"o\">*</span><span class=\"n\">x</span>\n\n<span class=\"n\">x</span> <span class=\"o\">=</span> <span class=\"o\">-</span><span class=\"mi\">2</span>\n<span class=\"k\">assert</span> <span class=\"n\">square</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">)</span> <span class=\"o\">&gt;=</span> <span class=\"mi\">0</span>\n</pre></div>\n</div>\n</div>\n<p>このassert文では、仕様として条件式 <code class=\"docutils literal notranslate\"><span class=\"pre\">square(x)</span> <span class=\"pre\">&gt;=</span> <span class=\"pre\">0</span></code> を宣言しています。 <code class=\"docutils literal notranslate\"><span class=\"pre\">square</span></code> 関数が「二乗する」という仕様に沿っているなら、その条件式は真であるべきです。 そして、実際 <code class=\"docutils literal notranslate\"><span class=\"pre\">square</span></code> はその仕様に適合しているので、ここではassert文が実行されても何も起きません。</p>\n<p>しかし、<code class=\"docutils literal notranslate\"><span class=\"pre\">square</span></code> にバグがあった場合は、話が変わります。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[2]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">def</span> <span class=\"nf\">square</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">):</span>\n    <span class=\"k\">return</span> <span class=\"n\">x</span><span class=\"o\">+</span><span class=\"n\">x</span> <span class=\"c1\"># バグがある</span>\n\n<span class=\"n\">x</span> <span class=\"o\">=</span> <span class=\"o\">-</span><span class=\"mi\">2</span>\n<span class=\"k\">assert</span> <span class=\"n\">square</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">)</span> <span class=\"o\">&gt;=</span> <span class=\"mi\">0</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n<span class=\"ansi-red-fg\">---------------------------------------------------------------------------</span>\n<span class=\"ansi-red-fg\">AssertionError</span>                            Traceback (most recent call last)\nCell <span class=\"ansi-green-fg\">In[2], line 5</span>\n<span class=\"ansi-green-intense-fg ansi-bold\">      2</span>     <span class=\"ansi-bold\" style=\"color: rgb(0,135,0)\">return</span> x<span style=\"color: rgb(98,98,98)\">+</span>x <span style=\"color: rgb(95,135,135)\"># バグがある</span>\n<span class=\"ansi-green-intense-fg ansi-bold\">      4</span> x <span style=\"color: rgb(98,98,98)\">=</span> <span style=\"color: rgb(98,98,98)\">-</span><span style=\"color: rgb(98,98,98)\">2</span>\n<span class=\"ansi-green-fg\">----&gt; 5</span> <span class=\"ansi-bold\" style=\"color: rgb(0,135,0)\">assert</span> square(x) <span style=\"color: rgb(98,98,98)\">&gt;</span><span style=\"color: rgb(98,98,98)\">=</span> <span style=\"color: rgb(98,98,98)\">0</span>\n\n<span class=\"ansi-red-fg\">AssertionError</span>:\n</pre></div></div>\n</div>\n<p>上のセルを実行すると、 <code class=\"docutils literal notranslate\"><span class=\"pre\">AssertionError</span></code> が生じます。</p>\n<p>このように、assert文は、それが存在する場所で、満たされていなければならない前提条件を記述するために用います。 assert文で停止したら、記述された前提条件に関わる部分にバグがあることが判明します。</p>\n<p>テストケースは、テスト対象が満たすべき仕様という側面があるので、assert文はテストにも用いられます。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[3]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">def</span> <span class=\"nf\">square</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">):</span>\n    <span class=\"k\">return</span> <span class=\"n\">x</span><span class=\"o\">*</span><span class=\"n\">x</span>\n\n<span class=\"k\">assert</span> <span class=\"n\">square</span><span class=\"p\">(</span><span class=\"mi\">2</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"mi\">4</span>\n<span class=\"k\">assert</span> <span class=\"n\">square</span><span class=\"p\">(</span><span class=\"o\">-</span><span class=\"mi\">2</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"mi\">4</span>\n<span class=\"k\">assert</span> <span class=\"n\">square</span><span class=\"p\">(</span><span class=\"mi\">0</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"mi\">0</span>\n</pre></div>\n</div>\n</div>\n<p>上の例では、<code class=\"docutils literal notranslate\"><span class=\"pre\">square</span></code>に対する3つのテストケースについて、assert文でテストしています。テストケースが満たされた（つまりassert文で停止しなかった）からと言って、テスト対象の <code class=\"docutils literal notranslate\"><span class=\"pre\">square</span></code> が正しいとは言えませんが、仕様への適合度が高いことから、尤もらしいとは言えます。</p>\n</section>\n<section id=\"エラーの分類\">\n<h2>エラーの分類<a class=\"headerlink\" href=\"#エラーの分類\" title=\"Link to this heading\">¶</a></h2>\n<p>不正なプログラムからは、様々なエラーが生じます。</p>\n<p>エラーには大きく分けて、構文エラー・実行時エラー・論理エラーの3つがあります。 以下では、それぞれの意味と、典型例を示します。</p>\n<section id=\"構文エラー\">\n<h3>構文エラー<a class=\"headerlink\" href=\"#構文エラー\" title=\"Link to this heading\">¶</a></h3>\n<p><strong>構文エラー</strong>（syntax error）とは、プログラムコードが、Pythonの構文に違反しているときに生じるエラーです。</p>\n<p>Pythonにおける構文エラーの典型例として、</p>\n<ul class=\"simple\">\n<li><p>クォートや括弧の閉じ忘れ</p></li>\n<li><p>コロンのつけ忘れ</p></li>\n<li><p>インデントの崩れ</p></li>\n<li><p>全角スペースの利用</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">==</span></code> の代わりに <code class=\"docutils literal notranslate\"><span class=\"pre\">=</span></code> を使う</p></li>\n<li><p>変数の代わりに文字列を使う（Cf. <a class=\"reference internal\" href=\"../2/2-1.html\"><span class=\"doc\">2-1 文字列</span></a>）</p></li>\n</ul>\n<p>などが挙げられます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[4]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s1\">&#39;This is the error) # クォートの閉じ忘れ</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n<span class=\"ansi-cyan-fg\">  Cell </span><span class=\"ansi-green-fg\">In[4], line 1</span>\n<span class=\"ansi-red-fg\">    print(&#39;This is the error) # クォートの閉じ忘れ</span>\n          ^\n<span class=\"ansi-red-fg\">SyntaxError</span><span class=\"ansi-red-fg\">:</span> unterminated string literal (detected at line 1)\n\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[5]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">def</span> <span class=\"nf\">f</span><span class=\"p\">()</span>  <span class=\"c1\"># コロンの付け忘れ</span>\n   <span class=\"k\">return</span> <span class=\"mi\">1</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n<span class=\"ansi-cyan-fg\">  Cell </span><span class=\"ansi-green-fg\">In[5], line 1</span>\n<span class=\"ansi-red-fg\">    def f()  # コロンの付け忘れ</span>\n             ^\n<span class=\"ansi-red-fg\">SyntaxError</span><span class=\"ansi-red-fg\">:</span> expected &#39;:&#39;\n\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[6]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">def</span> <span class=\"nf\">f</span><span class=\"p\">():</span>\n<span class=\"k\">return</span> <span class=\"mi\">1</span> <span class=\"c1\"># インデントの崩れ</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n<span class=\"ansi-cyan-fg\">  Cell </span><span class=\"ansi-green-fg\">In[6], line 2</span>\n<span class=\"ansi-red-fg\">    return 1 # インデントの崩れ</span>\n    ^\n<span class=\"ansi-red-fg\">IndentationError</span><span class=\"ansi-red-fg\">:</span> expected an indented block after function definition on line 1\n\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[7]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"mi\">1</span> <span class=\"o\">+</span>　<span class=\"mi\">1</span> <span class=\"c1\"># 全角スペースの利用</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n<span class=\"ansi-cyan-fg\">  Cell </span><span class=\"ansi-green-fg\">In[7], line 1</span>\n<span class=\"ansi-red-fg\">    1 +　1 # 全角スペースの利用</span>\n       ^\n<span class=\"ansi-red-fg\">SyntaxError</span><span class=\"ansi-red-fg\">:</span> invalid non-printable character U+3000\n\n</pre></div></div>\n</div>\n<p>上の例を実行するとわかるように、構文エラーがあると <code class=\"docutils literal notranslate\"><span class=\"pre\">SyntaxError</span></code> や <code class=\"docutils literal notranslate\"><span class=\"pre\">IndentationError</span></code> などが発生します。 それに付随するエラーメッセージが、構文エラーの具体的内容とおおよその位置を説明してくれます。</p>\n<p>構文エラーに直面した際は、エラーメッセージをよく読んで、原因を推察しましょう。 上の例が示すように、エラーメッセージの説明は、必ずしも分かり易くないですが、原因の位置を絞りこむには有用です。</p>\n<p>Pythonでは、構文エラーが実行時に発生しているように見えますが、実際には、実行しようとするプログラムコードの解釈に失敗することでエラーが生じています。 つまり、構文エラーは、プログラムの実行によって生じるエラーではなく、実行できなかったことで生じるエラーです。</p>\n</section>\n<section id=\"実行時エラー\">\n<h3>実行時エラー<a class=\"headerlink\" href=\"#実行時エラー\" title=\"Link to this heading\">¶</a></h3>\n<p><strong>実行時エラー</strong>（runtime error）とは、プログラムを実行した際に生じるエラー全般を指します。 簡単に言えば、プログラムを異常停止させるエラーです。</p>\n<p>実行時エラーが生じる典型的な状況として、</p>\n<ul class=\"simple\">\n<li><p>存在しない名前の利用（変数名・関数名・メソッド名の誤植）</p></li>\n<li><p>グローバル変数のつもりでローカル変数を参照（Cf. <a class=\"reference internal\" href=\"../3/3-3.html\"><span class=\"doc\">3-3 関数</span></a>）</p></li>\n<li><p>ゼロによる除算</p></li>\n<li><p>辞書に登録されていないキーに対する値を取得（Cf. <a class=\"reference internal\" href=\"../3/3-1.html\"><span class=\"doc\">3-1 辞書</span></a>）</p></li>\n<li><p>存在しないファイルの読み込み（Cf. <a class=\"reference internal\" href=\"../4/4-1.html\"><span class=\"doc\">4-1 ファイル入出力</span></a>）</p></li>\n<li><p>assert文における条件の不成立</p></li>\n</ul>\n<p>などが挙げられます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[8]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">undefined_variable</span> <span class=\"c1\"># 未定義の変数の参照</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n<span class=\"ansi-red-fg\">---------------------------------------------------------------------------</span>\n<span class=\"ansi-red-fg\">NameError</span>                                 Traceback (most recent call last)\nCell <span class=\"ansi-green-fg\">In[8], line 1</span>\n<span class=\"ansi-green-fg\">----&gt; 1</span> <span class=\"ansi-yellow-bg\">undefined_variable</span> <span style=\"color: rgb(95,135,135)\"># 未定義の変数の参照</span>\n\n<span class=\"ansi-red-fg\">NameError</span>: name &#39;undefined_variable&#39; is not defined\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[9]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">x</span> <span class=\"o\">=</span> <span class=\"mi\">1</span>\n<span class=\"k\">def</span> <span class=\"nf\">f</span><span class=\"p\">():</span>\n    <span class=\"n\">x</span> <span class=\"o\">=</span> <span class=\"n\">x</span> <span class=\"c1\"># グローバル変数のつもりでローカル変数を参照</span>\n<span class=\"n\">f</span><span class=\"p\">()</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n<span class=\"ansi-red-fg\">---------------------------------------------------------------------------</span>\n<span class=\"ansi-red-fg\">UnboundLocalError</span>                         Traceback (most recent call last)\nCell <span class=\"ansi-green-fg\">In[9], line 4</span>\n<span class=\"ansi-green-intense-fg ansi-bold\">      2</span> <span class=\"ansi-bold\" style=\"color: rgb(0,135,0)\">def</span> <span style=\"color: rgb(0,0,255)\">f</span>():\n<span class=\"ansi-green-intense-fg ansi-bold\">      3</span>     x <span style=\"color: rgb(98,98,98)\">=</span> x <span style=\"color: rgb(95,135,135)\"># グローバル変数のつもりでローカル変数を参照</span>\n<span class=\"ansi-green-fg\">----&gt; 4</span> <span class=\"ansi-yellow-bg\">f</span><span class=\"ansi-yellow-bg\">(</span><span class=\"ansi-yellow-bg\">)</span>\n\nCell <span class=\"ansi-green-fg\">In[9], line 3</span>, in <span class=\"ansi-cyan-fg\">f</span><span class=\"ansi-blue-fg\">()</span>\n<span class=\"ansi-green-intense-fg ansi-bold\">      2</span> <span class=\"ansi-bold\" style=\"color: rgb(0,135,0)\">def</span> <span style=\"color: rgb(0,0,255)\">f</span>():\n<span class=\"ansi-green-fg\">----&gt; 3</span>     x <span style=\"color: rgb(98,98,98)\">=</span> <span class=\"ansi-yellow-bg\">x</span>\n\n<span class=\"ansi-red-fg\">UnboundLocalError</span>: cannot access local variable &#39;x&#39; where it is not associated with a value\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[10]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"mi\">1</span><span class=\"o\">/</span><span class=\"mi\">0</span> <span class=\"c1\"># ゼロによる除算</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n<span class=\"ansi-red-fg\">---------------------------------------------------------------------------</span>\n<span class=\"ansi-red-fg\">ZeroDivisionError</span>                         Traceback (most recent call last)\nCell <span class=\"ansi-green-fg\">In[10], line 1</span>\n<span class=\"ansi-green-fg\">----&gt; 1</span> <span class=\"ansi-yellow-bg\" style=\"color: rgb(98,98,98)\">1</span><span class=\"ansi-yellow-bg\" style=\"color: rgb(98,98,98)\">/</span><span class=\"ansi-yellow-bg\" style=\"color: rgb(98,98,98)\">0</span> <span style=\"color: rgb(95,135,135)\"># ゼロによる除算</span>\n\n<span class=\"ansi-red-fg\">ZeroDivisionError</span>: division by zero\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[11]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"p\">{</span><span class=\"s1\">&#39;a&#39;</span><span class=\"p\">:</span> <span class=\"mi\">1</span><span class=\"p\">}[</span><span class=\"s1\">&#39;b&#39;</span><span class=\"p\">]</span> <span class=\"c1\"># 登録されていないキーに対する値を参照</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n<span class=\"ansi-red-fg\">---------------------------------------------------------------------------</span>\n<span class=\"ansi-red-fg\">KeyError</span>                                  Traceback (most recent call last)\nCell <span class=\"ansi-green-fg\">In[11], line 1</span>\n<span class=\"ansi-green-fg\">----&gt; 1</span> <span class=\"ansi-yellow-bg\">{</span><span class=\"ansi-yellow-bg\" style=\"color: rgb(175,0,0)\">&#39;</span><span class=\"ansi-yellow-bg\" style=\"color: rgb(175,0,0)\">a</span><span class=\"ansi-yellow-bg\" style=\"color: rgb(175,0,0)\">&#39;</span><span class=\"ansi-yellow-bg\">:</span><span class=\"ansi-yellow-bg\"> </span><span class=\"ansi-yellow-bg\" style=\"color: rgb(98,98,98)\">1</span><span class=\"ansi-yellow-bg\">}</span><span class=\"ansi-yellow-bg\">[</span><span class=\"ansi-yellow-bg\" style=\"color: rgb(175,0,0)\">&#39;</span><span class=\"ansi-yellow-bg\" style=\"color: rgb(175,0,0)\">b</span><span class=\"ansi-yellow-bg\" style=\"color: rgb(175,0,0)\">&#39;</span><span class=\"ansi-yellow-bg\">]</span> <span style=\"color: rgb(95,135,135)\"># 登録されていないキーに対する値を参照</span>\n\n<span class=\"ansi-red-fg\">KeyError</span>: &#39;b&#39;\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[12]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">open</span><span class=\"p\">(</span><span class=\"s1\">&#39;non-existent.txt&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;r&#39;</span><span class=\"p\">)</span> <span class=\"c1\"># 存在しないファイルの読み込み</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n<span class=\"ansi-red-fg\">---------------------------------------------------------------------------</span>\n<span class=\"ansi-red-fg\">FileNotFoundError</span>                         Traceback (most recent call last)\nCell <span class=\"ansi-green-fg\">In[12], line 1</span>\n<span class=\"ansi-green-fg\">----&gt; 1</span> <span class=\"ansi-yellow-bg\" style=\"color: rgb(0,135,0)\">open</span><span class=\"ansi-yellow-bg\">(</span><span class=\"ansi-yellow-bg\" style=\"color: rgb(175,0,0)\">&#39;</span><span class=\"ansi-yellow-bg\" style=\"color: rgb(175,0,0)\">non-existent.txt</span><span class=\"ansi-yellow-bg\" style=\"color: rgb(175,0,0)\">&#39;</span><span class=\"ansi-yellow-bg\">,</span><span class=\"ansi-yellow-bg\"> </span><span class=\"ansi-yellow-bg\" style=\"color: rgb(175,0,0)\">&#39;</span><span class=\"ansi-yellow-bg\" style=\"color: rgb(175,0,0)\">r</span><span class=\"ansi-yellow-bg\" style=\"color: rgb(175,0,0)\">&#39;</span><span class=\"ansi-yellow-bg\">)</span> <span style=\"color: rgb(95,135,135)\"># 存在しないファイルの読み込み</span>\n\nFile <span class=\"ansi-green-fg\">~/Projects/utpython/lib/python3.12/site-packages/IPython/core/interactiveshell.py:324</span>, in <span class=\"ansi-cyan-fg\">_modified_open</span><span class=\"ansi-blue-fg\">(file, *args, **kwargs)</span>\n<span class=\"ansi-green-intense-fg ansi-bold\">    317</span> <span class=\"ansi-bold\" style=\"color: rgb(0,135,0)\">if</span> file <span class=\"ansi-bold\" style=\"color: rgb(175,0,255)\">in</span> {<span style=\"color: rgb(98,98,98)\">0</span>, <span style=\"color: rgb(98,98,98)\">1</span>, <span style=\"color: rgb(98,98,98)\">2</span>}:\n<span class=\"ansi-green-intense-fg ansi-bold\">    318</span>     <span class=\"ansi-bold\" style=\"color: rgb(0,135,0)\">raise</span> <span class=\"ansi-bold\" style=\"color: rgb(215,95,95)\">ValueError</span>(\n<span class=\"ansi-green-intense-fg ansi-bold\">    319</span>         <span style=\"color: rgb(175,0,0)\">f</span><span style=\"color: rgb(175,0,0)\">&#34;</span><span style=\"color: rgb(175,0,0)\">IPython won</span><span style=\"color: rgb(175,0,0)\">&#39;</span><span style=\"color: rgb(175,0,0)\">t let you open fd=</span><span class=\"ansi-bold\" style=\"color: rgb(175,95,135)\">{</span>file<span class=\"ansi-bold\" style=\"color: rgb(175,95,135)\">}</span><span style=\"color: rgb(175,0,0)\"> by default </span><span style=\"color: rgb(175,0,0)\">&#34;</span>\n<span class=\"ansi-green-intense-fg ansi-bold\">    320</span>         <span style=\"color: rgb(175,0,0)\">&#34;</span><span style=\"color: rgb(175,0,0)\">as it is likely to crash IPython. If you know what you are doing, </span><span style=\"color: rgb(175,0,0)\">&#34;</span>\n<span class=\"ansi-green-intense-fg ansi-bold\">    321</span>         <span style=\"color: rgb(175,0,0)\">&#34;</span><span style=\"color: rgb(175,0,0)\">you can use builtins</span><span style=\"color: rgb(175,0,0)\">&#39;</span><span style=\"color: rgb(175,0,0)\"> open.</span><span style=\"color: rgb(175,0,0)\">&#34;</span>\n<span class=\"ansi-green-intense-fg ansi-bold\">    322</span>     )\n<span class=\"ansi-green-fg\">--&gt; 324</span> <span class=\"ansi-bold\" style=\"color: rgb(0,135,0)\">return</span> <span class=\"ansi-yellow-bg\">io_open</span><span class=\"ansi-yellow-bg\">(</span><span class=\"ansi-yellow-bg\">file</span><span class=\"ansi-yellow-bg\">,</span><span class=\"ansi-yellow-bg\"> </span><span class=\"ansi-yellow-bg\" style=\"color: rgb(98,98,98)\">*</span><span class=\"ansi-yellow-bg\">args</span><span class=\"ansi-yellow-bg\">,</span><span class=\"ansi-yellow-bg\"> </span><span class=\"ansi-yellow-bg\" style=\"color: rgb(98,98,98)\">*</span><span class=\"ansi-yellow-bg\" style=\"color: rgb(98,98,98)\">*</span><span class=\"ansi-yellow-bg\">kwargs</span><span class=\"ansi-yellow-bg\">)</span>\n\n<span class=\"ansi-red-fg\">FileNotFoundError</span>: [Errno 2] No such file or directory: &#39;non-existent.txt&#39;\n</pre></div></div>\n</div>\n<p>実行時エラーについては、送出される例外名（上の例では <code class=\"docutils literal notranslate\"><span class=\"pre\">NameError</span></code>・<code class=\"docutils literal notranslate\"><span class=\"pre\">UnboundLocalError</span></code>・<code class=\"docutils literal notranslate\"><span class=\"pre\">ZeroDivisionError</span></code>・<code class=\"docutils literal notranslate\"><span class=\"pre\">KeyError</span></code>・<code class=\"docutils literal notranslate\"><span class=\"pre\">FileNotFoundError</span></code>）が自己説明的であり、それに付随するエラーメッセージも、大抵原因を分かり易く説明してくれます。</p>\n<p>実行時エラーに直面した際は、発生した例外名とエラーメッセージをよく読んで、エラーに関連する言語機能（たとえば辞書やファイル）の仕組みを改めて確認しましょう。</p>\n</section>\n<section id=\"論理エラー\">\n<h3>論理エラー<a class=\"headerlink\" href=\"#論理エラー\" title=\"Link to this heading\">¶</a></h3>\n<p><strong>論理エラー</strong>（logic error）とは、プログラムを実行できるが、意図したように動作しないことを意味します。 これは、プログラムから発生するエラーではなく、プログラムを書いた人のエラーです。</p>\n<p>バグと呼ばれるものの多くは、論理エラーです。 したがって、デバッグでは、プログラムを書いた人の意図と、プログラムの振舞いを比較検証することになります。</p>\n<p>assert文は、仕様違反という論理エラーを、 <code class=\"docutils literal notranslate\"><span class=\"pre\">AssertionError</span></code> という実行時エラーに変換していると見做すことができます。</p>\n</section>\n</section>\n<section id=\"デバッグの具体例\">\n<h2>デバッグの具体例<a class=\"headerlink\" href=\"#デバッグの具体例\" title=\"Link to this heading\">¶</a></h2>\n<p>デバッグの具体的なシナリオを説明します。 次の関数 <code class=\"docutils literal notranslate\"><span class=\"pre\">median(x,</span> <span class=\"pre\">y,</span> <span class=\"pre\">z)</span></code> は、<code class=\"docutils literal notranslate\"><span class=\"pre\">x</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">y</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">z</span></code> の中央値（真ん中の値）を求めようとするものです。 ただし、 <code class=\"docutils literal notranslate\"><span class=\"pre\">x</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">y</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">z</span></code> は相異なる数であると仮定します。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[13]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">def</span> <span class=\"nf\">median</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">,</span> <span class=\"n\">y</span><span class=\"p\">,</span> <span class=\"n\">z</span><span class=\"p\">):</span>\n    <span class=\"k\">if</span> <span class=\"n\">x</span> <span class=\"o\">&gt;</span> <span class=\"n\">y</span><span class=\"p\">:</span>\n        <span class=\"n\">x</span> <span class=\"o\">=</span> <span class=\"n\">y</span>\n        <span class=\"n\">y</span> <span class=\"o\">=</span> <span class=\"n\">x</span>\n    <span class=\"k\">if</span> <span class=\"n\">z</span> <span class=\"o\">&lt;</span> <span class=\"n\">x</span><span class=\"p\">:</span>\n        <span class=\"k\">return</span> <span class=\"n\">x</span>\n    <span class=\"k\">if</span> <span class=\"n\">z</span> <span class=\"o\">&lt;</span> <span class=\"n\">y</span><span class=\"p\">:</span>\n        <span class=\"k\">return</span> <span class=\"n\">z</span>\n    <span class=\"k\">return</span> <span class=\"n\">y</span>\n\n<span class=\"k\">assert</span> <span class=\"n\">median</span><span class=\"p\">(</span><span class=\"mi\">3</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"mi\">2</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n<span class=\"ansi-red-fg\">---------------------------------------------------------------------------</span>\n<span class=\"ansi-red-fg\">AssertionError</span>                            Traceback (most recent call last)\nCell <span class=\"ansi-green-fg\">In[13], line 11</span>\n<span class=\"ansi-green-intense-fg ansi-bold\">      8</span>         <span class=\"ansi-bold\" style=\"color: rgb(0,135,0)\">return</span> z\n<span class=\"ansi-green-intense-fg ansi-bold\">      9</span>     <span class=\"ansi-bold\" style=\"color: rgb(0,135,0)\">return</span> y\n<span class=\"ansi-green-fg\">---&gt; 11</span> <span class=\"ansi-bold\" style=\"color: rgb(0,135,0)\">assert</span> median(<span style=\"color: rgb(98,98,98)\">3</span>, <span style=\"color: rgb(98,98,98)\">1</span>, <span style=\"color: rgb(98,98,98)\">2</span>) <span style=\"color: rgb(98,98,98)\">==</span> <span style=\"color: rgb(98,98,98)\">2</span>\n\n<span class=\"ansi-red-fg\">AssertionError</span>:\n</pre></div></div>\n</div>\n<p>このように、この <code class=\"docutils literal notranslate\"><span class=\"pre\">median</span></code> は間違っています。</p>\n<p>さて、<code class=\"docutils literal notranslate\"><span class=\"pre\">median</span></code> は、ローカル変数の <code class=\"docutils literal notranslate\"><span class=\"pre\">x</span></code>・<code class=\"docutils literal notranslate\"><span class=\"pre\">y</span></code>・<code class=\"docutils literal notranslate\"><span class=\"pre\">z</span></code> のいずれかを返す関数です。 これらの変数の値が期待通りの値であるか、 <code class=\"docutils literal notranslate\"><span class=\"pre\">print</span></code> を入れて印字し、観察してみましょう。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[14]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">def</span> <span class=\"nf\">median</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">,</span> <span class=\"n\">y</span><span class=\"p\">,</span> <span class=\"n\">z</span><span class=\"p\">):</span>\n    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">,</span> <span class=\"n\">y</span><span class=\"p\">,</span> <span class=\"n\">z</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">x</span> <span class=\"o\">&gt;</span> <span class=\"n\">y</span><span class=\"p\">:</span>\n        <span class=\"n\">x</span> <span class=\"o\">=</span> <span class=\"n\">y</span>\n        <span class=\"n\">y</span> <span class=\"o\">=</span> <span class=\"n\">x</span>\n    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">,</span> <span class=\"n\">y</span><span class=\"p\">,</span> <span class=\"n\">z</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">z</span> <span class=\"o\">&lt;</span> <span class=\"n\">x</span><span class=\"p\">:</span>\n        <span class=\"k\">return</span> <span class=\"n\">x</span>\n    <span class=\"k\">if</span> <span class=\"n\">z</span> <span class=\"o\">&lt;</span> <span class=\"n\">y</span><span class=\"p\">:</span>\n        <span class=\"k\">return</span> <span class=\"n\">z</span>\n    <span class=\"k\">return</span> <span class=\"n\">y</span>\n\n<span class=\"k\">assert</span> <span class=\"n\">median</span><span class=\"p\">(</span><span class=\"mi\">3</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"mi\">2</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n3 1 2\n1 1 2\n</pre></div></div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n<span class=\"ansi-red-fg\">---------------------------------------------------------------------------</span>\n<span class=\"ansi-red-fg\">AssertionError</span>                            Traceback (most recent call last)\nCell <span class=\"ansi-green-fg\">In[14], line 13</span>\n<span class=\"ansi-green-intense-fg ansi-bold\">     10</span>         <span class=\"ansi-bold\" style=\"color: rgb(0,135,0)\">return</span> z\n<span class=\"ansi-green-intense-fg ansi-bold\">     11</span>     <span class=\"ansi-bold\" style=\"color: rgb(0,135,0)\">return</span> y\n<span class=\"ansi-green-fg\">---&gt; 13</span> <span class=\"ansi-bold\" style=\"color: rgb(0,135,0)\">assert</span> median(<span style=\"color: rgb(98,98,98)\">3</span>, <span style=\"color: rgb(98,98,98)\">1</span>, <span style=\"color: rgb(98,98,98)\">2</span>) <span style=\"color: rgb(98,98,98)\">==</span> <span style=\"color: rgb(98,98,98)\">2</span>\n\n<span class=\"ansi-red-fg\">AssertionError</span>:\n</pre></div></div>\n</div>\n<p>関数の入口にある最初の <code class=\"docutils literal notranslate\"><span class=\"pre\">print</span></code> では、期待通りに実引数となる <code class=\"docutils literal notranslate\"><span class=\"pre\">3</span></code>・<code class=\"docutils literal notranslate\"><span class=\"pre\">1</span></code>・<code class=\"docutils literal notranslate\"><span class=\"pre\">2</span></code> が、<code class=\"docutils literal notranslate\"><span class=\"pre\">x</span></code>・<code class=\"docutils literal notranslate\"><span class=\"pre\">y</span></code>・<code class=\"docutils literal notranslate\"><span class=\"pre\">z</span></code> に代入されています。 しかし、2番目の <code class=\"docutils literal notranslate\"><span class=\"pre\">print</span></code> では、 <code class=\"docutils literal notranslate\"><span class=\"pre\">3</span></code> が消えて <code class=\"docutils literal notranslate\"><span class=\"pre\">1</span></code> が複製されています。 このことから、この2つの <code class=\"docutils literal notranslate\"><span class=\"pre\">print</span></code> の間にあるif文が疑わしいことが分かります。</p>\n<p>問題のif文は、<code class=\"docutils literal notranslate\"><span class=\"pre\">x</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">y</span></code> の値を入れ替える意図があるものでした。 その意図を正しく反映すると、次のようになります。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[15]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">def</span> <span class=\"nf\">median</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">,</span> <span class=\"n\">y</span><span class=\"p\">,</span> <span class=\"n\">z</span><span class=\"p\">):</span>\n    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">,</span> <span class=\"n\">y</span><span class=\"p\">,</span> <span class=\"n\">z</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">x</span> <span class=\"o\">&gt;</span> <span class=\"n\">y</span><span class=\"p\">:</span>\n        <span class=\"n\">w</span> <span class=\"o\">=</span> <span class=\"n\">x</span>\n        <span class=\"n\">x</span> <span class=\"o\">=</span> <span class=\"n\">y</span>\n        <span class=\"n\">y</span> <span class=\"o\">=</span> <span class=\"n\">w</span>\n    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">,</span> <span class=\"n\">y</span><span class=\"p\">,</span> <span class=\"n\">z</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">z</span> <span class=\"o\">&lt;</span> <span class=\"n\">x</span><span class=\"p\">:</span>\n        <span class=\"k\">return</span> <span class=\"n\">x</span>\n    <span class=\"k\">if</span> <span class=\"n\">z</span> <span class=\"o\">&lt;</span> <span class=\"n\">y</span><span class=\"p\">:</span>\n        <span class=\"k\">return</span> <span class=\"n\">z</span>\n    <span class=\"k\">return</span> <span class=\"n\">y</span>\n\n<span class=\"k\">assert</span> <span class=\"n\">median</span><span class=\"p\">(</span><span class=\"mi\">3</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"mi\">2</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n3 1 2\n1 3 2\n</pre></div></div>\n</div>\n<p>期待通りに動きました。 最後に、デバッグ用に導入した <code class=\"docutils literal notranslate\"><span class=\"pre\">print</span></code> は、<code class=\"docutils literal notranslate\"><span class=\"pre\">median</span></code> の仕様には含まれないので、きちんと消しましょう。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[16]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">def</span> <span class=\"nf\">median</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">,</span> <span class=\"n\">y</span><span class=\"p\">,</span> <span class=\"n\">z</span><span class=\"p\">):</span>\n    <span class=\"k\">if</span> <span class=\"n\">x</span> <span class=\"o\">&gt;</span> <span class=\"n\">y</span><span class=\"p\">:</span>\n        <span class=\"n\">w</span> <span class=\"o\">=</span> <span class=\"n\">x</span>\n        <span class=\"n\">x</span> <span class=\"o\">=</span> <span class=\"n\">y</span>\n        <span class=\"n\">y</span> <span class=\"o\">=</span> <span class=\"n\">w</span>\n    <span class=\"k\">if</span> <span class=\"n\">z</span> <span class=\"o\">&lt;</span> <span class=\"n\">x</span><span class=\"p\">:</span>\n        <span class=\"k\">return</span> <span class=\"n\">x</span>\n    <span class=\"k\">if</span> <span class=\"n\">z</span> <span class=\"o\">&lt;</span> <span class=\"n\">y</span><span class=\"p\">:</span>\n        <span class=\"k\">return</span> <span class=\"n\">z</span>\n    <span class=\"k\">return</span> <span class=\"n\">y</span>\n\n<span class=\"k\">assert</span> <span class=\"n\">median</span><span class=\"p\">(</span><span class=\"mi\">3</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"mi\">2</span>\n</pre></div>\n</div>\n</div>\n</section>\n<section id=\"コーディングスタイル\">\n<h2>コーディングスタイル<a class=\"headerlink\" href=\"#コーディングスタイル\" title=\"Link to this heading\">¶</a></h2>\n<p>実は、生じたバグを取る対処法よりも、そもそもバグが生じにくくする予防法の方が大切です。 Pythonにおいて特に重要視されているのが、<strong>コーディングスタイル</strong>、つまりコードの書き方です。 読みにくい（可読性の低い）コードだと、些細なミスが生じやすく、また見つけにくいからです。</p>\n<p>Pythonでは<a class=\"reference external\" href=\"https://www.python.org/dev/peps/pep-0008/\">PEP8</a>（<a class=\"reference external\" href=\"http://pep8-ja.readthedocs.io/ja/latest/\">非公式日本語訳</a>）と呼ばれる公式のスタイルガイドがあります。 PEP8には様々な側面でスタイルに関する規則があり、コードの可読性を高めることが強く推奨されています。 ここまでに扱った言語の要素について、たとえば、</p>\n<ul class=\"simple\">\n<li><p>インデントは半角スペースを4つで1レベル</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">=</span></code> <code class=\"docutils literal notranslate\"><span class=\"pre\">+=</span></code> <code class=\"docutils literal notranslate\"><span class=\"pre\">==</span></code> などの演算子の前後に半角スペースを1つ入れる</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">*</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">+</span></code> の複合式では <code class=\"docutils literal notranslate\"><span class=\"pre\">+</span></code> の前後に半角スペースを1つ入れる（例：<code class=\"docutils literal notranslate\"><span class=\"pre\">2*x</span> <span class=\"pre\">+</span> <span class=\"pre\">y</span></code>）</p></li>\n<li><p>関数の開き括弧の前にスペースを入れない</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">l</span></code> <code class=\"docutils literal notranslate\"><span class=\"pre\">I</span></code> <code class=\"docutils literal notranslate\"><span class=\"pre\">O</span></code> を変数名として使わない</p></li>\n<li><p>真理値の比較に <code class=\"docutils literal notranslate\"><span class=\"pre\">==</span></code> や <code class=\"docutils literal notranslate\"><span class=\"pre\">is</span></code> を使わない</p></li>\n</ul>\n<p>などが代表的です。</p>\n<p>PEP8に基づいたコーディングスタイルの自動検査器もあります（参照：<a class=\"reference external\" href=\"https://pypi.org/project/pycodestyle/\">pycodestyle</a>）。 オンラインサービスもいくつか利用できるので（例：<a class=\"reference external\" href=\"http://pep8online.com/\">PEP8 online</a>）、適宜活用してみましょう。</p>\n<p>PEP8には陽に言及されていないものの、プログラミング一般に重要なこともあります。 たとえば、</p>\n<ul class=\"simple\">\n<li><p>自己説明的でない“マジックナンバー”ではなく記号的に意味がわかる変数を使う</p></li>\n<li><p>不要なコードは削除する</p></li>\n<li><p>1つの関数では1つのタスクだけを処理する</p></li>\n</ul>\n<p>などは、可読性を上げる代表的なポイントです。</p>\n<p>勘違いはバグを引き起こします。自らが勘違いしないコードを書くことが肝要です。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[ ]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span>\n</pre></div>\n</div>\n</div>\n</section>\n</section>\n\n\n          </div>\n          \n        </div>\n      </div>\n      <div class=\"sphinxsidebar\" role=\"navigation\" aria-label=\"Main\">\n        <div class=\"sphinxsidebarwrapper\">\n<h1 class=\"logo\"><a href=\"../index.html\">Pythonプログラミング入門</a></h1>\n\n\n\n\n\n\n\n\n<p>\n  <a style=\"font-family: sans-serif; font-size: smaller; background: linear-gradient(to top, #353535 0%, #141414 100%); -webkit-font-smoothing: antialiased; font-weight: normal; text-shadow: rgb(0 0 0 / 40%) 0 -1px 0; padding: 2px 6px; color: #fff; text-decoration: none; border-radius: 4px; border: 1px solid #0d0d0d; box-shadow: inset 0 1px 1px 0 #8f8f8f;\" href=\"https://github.com/utokyo-ipp/utokyo-ipp.github.io\">View on GitHub</a>\n</p><p>\n  <a style=\"font-family: sans-serif; font-size: smaller; background: linear-gradient(to top, #ff1e00 0%, #de1e00 100%); -webkit-font-smoothing: antialiased; font-weight: normal; text-shadow: rgb(0 0 0 / 40%) 0 -1px 0; padding: 2px 6px; color: #fff; text-decoration: none; border-radius: 4px; border: 1px solid #0d0d0d; box-shadow: inset 0 1px 1px 0 #ff8e70;\" href=\"https://utokyo-ipp.github.io/IPP_textbook.pdf\">View PDF</a>\n</p><p>\n  <a style=\"border-bottom: none;\" href=\"https://colab.research.google.com/github/utokyo-ipp/utokyo-ipp.github.io/blob/master/colab/1/1-4.ipynb\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Google Colaboratory\"></a>\n</p><h3>Navigation</h3>\n<ul class=\"current\">\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"1-0.html\">1-0. Colaboratory (Colab) の使い方</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"1-1.html\">1-1. 数値演算</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"1-2.html\">1-2. 変数と関数の基礎</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"1-3.html\">1-3. 論理・比較演算と条件分岐の基礎</a></li>\n<li class=\"toctree-l1 current\"><a class=\"current reference internal\" href=\"#\">1-4. テストとデバッグ</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#仕様・テスト・デバッグ\">仕様・テスト・デバッグ</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#assert文\">assert文</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#エラーの分類\">エラーの分類</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#デバッグの具体例\">デバッグの具体例</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#コーディングスタイル\">コーディングスタイル</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../2/2-1.html\">2-1. 文字列 (string)</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../2/2-2.html\">2-2. リスト (list)</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../2/2-3.html\">2-3. 条件分岐</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../3/3-1.html\">3-1. 辞書 (dictionary)</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../3/3-2.html\">3-2. 繰り返し</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../3/3-3.html\">3-3. 関数</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../4/4-1.html\">4-1. ファイル入出力の基本</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../4/4-2.html\">4-2. イテラブルとイテレータ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../4/4-3.html\">4-3. ディレクトリと木構造</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../5/5-1.html\">5-1. モジュールの使い方</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../5/5-2.html\">5-2. モジュールの作り方</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../5/5-3.html\">5-3. NumPyライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../6/6-1.html\">6-1. 内包表記</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../6/6-2.html\">6-2. 高階関数</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../6/6-3.html\">6-3. クラス</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../7/7-1.html\">7-1. pandasライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../7/7-2.html\">7-2. scikit-learnライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/1-jupyter-notebook.html\">▲Jupyter Notebook の使い方</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/2-set.html\">▲セット (set)</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/3-recursion.html\">▲再帰</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/3-visualization.html\">▲簡単なデータの可視化</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/4-csv.html\">▲CSVファイルの入出力</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/5-bokeh.html\">▲Bokehライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/5-command.html\">▲Pythonスクリプトとコマンドライン実行</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/5-matplotlib.html\">▲Matplotlibライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/5-re.html\">▲正規表現</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../index_of_terms.html\">索引</a></li>\n</ul>\n\n<div class=\"relations\">\n<h3>Related Topics</h3>\n<ul>\n  <li><a href=\"../index.html\">Documentation overview</a><ul>\n      <li>Previous: <a href=\"1-3.html\" title=\"previous chapter\">1-3. 論理・比較演算と条件分岐の基礎</a></li>\n      <li>Next: <a href=\"../2/2-1.html\" title=\"next chapter\">2-1. 文字列 (string)</a></li>\n  </ul></li>\n</ul>\n</div>\n<search id=\"searchbox\" style=\"display: none\" role=\"search\">\n  <h3 id=\"searchlabel\">Quick search</h3>\n    <div class=\"searchformwrapper\">\n    <form class=\"search\" action=\"../search.html\" method=\"get\">\n      <input type=\"text\" name=\"q\" aria-labelledby=\"searchlabel\" autocomplete=\"off\" autocorrect=\"off\" autocapitalize=\"off\" spellcheck=\"false\"/>\n      <input type=\"submit\" value=\"Go\" />\n    </form>\n    </div>\n</search>\n<script>document.getElementById('searchbox').style.display = \"block\"</script>\n\n\n\n\n\n\n\n\n        </div>\n      </div>\n      <div class=\"clearer\"></div>\n    </div>\n    <div class=\"footer\">\n      &#169;2020–2024, 東京大学 数理・情報教育研究センター (CC BY-NC-ND 4.0).\n      \n      |\n      Powered by <a href=\"https://www.sphinx-doc.org/\">Sphinx 8.0.2</a>\n      &amp; <a href=\"https://alabaster.readthedocs.io\">Alabaster 1.0.0</a>\n      \n    </div>\n\n    \n\n    \n    <script>\n\n      var _gaq = _gaq || [];\n      _gaq.push(['_setAccount', 'G-8M0RXGPPSR']);\n      _gaq.push(['_setDomainName', 'none']);\n      _gaq.push(['_setAllowLinker', true]);\n      _gaq.push(['_trackPageview']);\n\n      (function() {\n        var ga = document.createElement('script'); ga.async = true;\n        ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'https://www') + '.google-analytics.com/ga.js';\n        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);\n      })();\n\n    </script>\n    \n  </body>\n</html>"
  },
  {
    "path": "docs/2/2-1.html",
    "content": "<!DOCTYPE html>\n\n<html lang=\"jp\" data-content_root=\"../\">\n  <head>\n    <meta charset=\"utf-8\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" /><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n\n    <!-- Google tag (gtag.js) -->\n    <script async src=\"https://www.googletagmanager.com/gtag/js?id=G-8M0RXGPPSR\"></script>\n    <script>\n        window.dataLayer = window.dataLayer || [];\n        function gtag(){dataLayer.push(arguments);}\n        gtag('js', new Date());\n        gtag('config', 'G-8M0RXGPPSR');\n    </script>\n    \n    <title>2-1. 文字列 (string) &#8212; Pythonプログラミング入門  documentation</title>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/pygments.css?v=d1102ebc\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/basic.css?v=c058f7c8\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/alabaster.css?v=27fed22d\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/nbsphinx-code-cells.css\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/custom.css?v=1a1aa8dd\" />\n    <script src=\"../_static/documentation_options.js?v=3ff7d7a7\"></script>\n    <script src=\"../_static/doctools.js?v=9a2dae69\"></script>\n    <script src=\"../_static/sphinx_highlight.js?v=dc90522c\"></script>\n    <script crossorigin=\"anonymous\" integrity=\"sha256-Ae2Vz/4ePdIu6ZyI/5ZGsYnb+m0JlOmKPjt6XZ9JJkA=\" src=\"https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.4/require.min.js\"></script>\n    <script>window.MathJax = {\"tex\": {\"inlineMath\": [[\"$\", \"$\"], [\"\\\\(\", \"\\\\)\"]], \"processEscapes\": true}, \"options\": {\"ignoreHtmlClass\": \"tex2jax_ignore|mathjax_ignore|document\", \"processHtmlClass\": \"tex2jax_process|mathjax_process|math|output_area\"}}</script>\n    <script defer=\"defer\" src=\"https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js\"></script>\n    <link rel=\"index\" title=\"Index\" href=\"../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../search.html\" />\n    <link rel=\"next\" title=\"2-2. リスト (list)\" href=\"2-2.html\" />\n    <link rel=\"prev\" title=\"1-4. テストとデバッグ\" href=\"../1/1-4.html\" />\n   \n  <link rel=\"stylesheet\" href=\"../_static/custom.css\" type=\"text/css\" />\n  \n\n  \n  \n\n  </head><body>\n  \n\n    <div class=\"document\">\n      <div class=\"documentwrapper\">\n        <div class=\"bodywrapper\">\n          \n\n          <div class=\"body\" role=\"main\">\n            \n  <section id=\"2-1.-文字列-(string)\">\n<h1>2-1. 文字列 (string)<a class=\"headerlink\" href=\"#2-1.-文字列-(string)\" title=\"Link to this heading\">¶</a></h1>\n<p>文書処理などに必要な文字列について説明します。</p>\n<p>参考</p>\n<ul class=\"simple\">\n<li><p><a class=\"reference external\" href=\"https://docs.python.org/ja/3/tutorial/introduction.html#strings\">https://docs.python.org/ja/3/tutorial/introduction.html#strings</a></p></li>\n</ul>\n<p>Pythonが扱うデータには様々な種類がありますが、<strong>文字列</strong>はいくつかの文字の並びから構成されるデータです。 Pythonは標準で多言語に対応しており、 英語アルファベットだけではなく日本語をはじめとする多くの言語を取り扱えます。</p>\n<p>文字列は、文字の並びをシングルクォート <code class=\"docutils literal notranslate\"><span class=\"pre\">'...'</span></code>、もしくはダブルクォート <code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;...&quot;</span></code> で囲んで記述します。</p>\n<p>以下の例では文字列をそれぞれ、変数 <code class=\"docutils literal notranslate\"><span class=\"pre\">word1</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">word2</span></code> に代入しています。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[1]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">word1</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;hello&#39;</span>\n<span class=\"n\">word1</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[1]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n&#39;hello&#39;\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[2]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">word2</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;Hello&#39;</span>\n<span class=\"n\">word2</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[2]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n&#39;Hello&#39;\n</pre></div></div>\n</div>\n<p>上の変数の値が確かに文字列であることは、組み込み関数 <code class=\"docutils literal notranslate\"><span class=\"pre\">type</span></code> によって確認できます。 <code class=\"docutils literal notranslate\"><span class=\"pre\">type</span></code> は、任意のデータを引数として、そのデータの種類を返します。 データの種類は、<strong>データ型</strong>もしくは<strong>型</strong>と呼ばれます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[3]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">type</span><span class=\"p\">(</span><span class=\"n\">word1</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[3]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nstr\n</pre></div></div>\n</div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">str</span></code> は文字列のデータ型を意味します。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[4]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">type</span><span class=\"p\">(</span><span class=\"n\">word2</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[4]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nstr\n</pre></div></div>\n</div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">str</span></code> は組み込み関数としても用いられます。 組み込み関数 <code class=\"docutils literal notranslate\"><span class=\"pre\">str</span></code> を使えば、任意のデータを文字列に変換できます。 一般に、データ型は、そのデータ型への変換を行う関数として用いられることが多いです。</p>\n<p>1-1で学んだ数値を文字列に変換したい場合、次のように行います。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[5]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">word3</span> <span class=\"o\">=</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"mi\">123</span><span class=\"p\">)</span>\n<span class=\"n\">word3</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[5]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n&#39;123&#39;\n</pre></div></div>\n</div>\n<p>逆に、<code class=\"docutils literal notranslate\"><span class=\"pre\">'123'</span></code> という文字列を整数に変換するには、1-1で述べた <code class=\"docutils literal notranslate\"><span class=\"pre\">int</span></code> という関数を用いることができます。 （実は <code class=\"docutils literal notranslate\"><span class=\"pre\">int</span></code> は整数の型でもあります。）</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[6]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">i</span> <span class=\"o\">=</span> <span class=\"nb\">int</span><span class=\"p\">(</span><span class=\"s1\">&#39;123&#39;</span><span class=\"p\">)</span>\n<span class=\"n\">i</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[6]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n123\n</pre></div></div>\n</div>\n<p>関数 <code class=\"docutils literal notranslate\"><span class=\"pre\">float</span></code> を用いれば文字列を実数に変換できます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[7]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">f</span> <span class=\"o\">=</span> <span class=\"nb\">float</span><span class=\"p\">(</span><span class=\"s1\">&#39;123.4&#39;</span><span class=\"p\">)</span>\n<span class=\"n\">f</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[7]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n123.4\n</pre></div></div>\n</div>\n<p>文字列の長さは、組み込み関数 <code class=\"docutils literal notranslate\"><span class=\"pre\">len</span></code> を用いて次のようにして求めます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[8]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">word1</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[8]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n5\n</pre></div></div>\n</div>\n<p>複数行にわたる文字列を記述するには、トリプルクォート（<code class=\"docutils literal notranslate\"><span class=\"pre\">'''...'''</span></code> もしくは <code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;&quot;&quot;...&quot;&quot;&quot;</span></code>）を用いることができます。 上記の参考URLを参照してください。 トリプルクォートはコメントとしても用いられます。 なお、1-4 のコーディングスタイルのところで紹介したスタイルガイドのPEP8では、 トリプルクォートには <code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;&quot;&quot;...&quot;&quot;&quot;</span></code> を使うのが適切と定められています。</p>\n<section id=\"文字列とインデックス\">\n<h2>文字列とインデックス<a class=\"headerlink\" href=\"#文字列とインデックス\" title=\"Link to this heading\">¶</a></h2>\n<p>文字列はいくつかの文字によって構成されています。</p>\n<p>文字列 <code class=\"docutils literal notranslate\"><span class=\"pre\">'hello'</span></code> の3番目の文字を得たい場合は、以下のような記法を用います。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[9]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"s1\">&#39;hello&#39;</span><span class=\"p\">[</span><span class=\"mi\">2</span><span class=\"p\">]</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[9]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n&#39;l&#39;\n</pre></div></div>\n</div>\n<p>文字列を値とする変数に対しても同様の記法を用います。多くの場合は変数に対してこの記法を用います。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[10]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">word1</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;hello&#39;</span>\n<span class=\"n\">word1</span><span class=\"p\">[</span><span class=\"mi\">2</span><span class=\"p\">]</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[10]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n&#39;l&#39;\n</pre></div></div>\n</div>\n<p>この括弧内の数値のことを<strong>インデックス</strong>と呼びます。インデックスは <code class=\"docutils literal notranslate\"><span class=\"pre\">0</span></code> から始まるので、 ある文字列の <code class=\"docutils literal notranslate\"><span class=\"pre\">x</span></code> 番目の要素を得るには、インデックスとして <code class=\"docutils literal notranslate\"><span class=\"pre\">x-1</span></code> を指定する必要があります。</p>\n<p>こうして取得した文字は、Pythonでは長さが 1 の文字列として扱われます。 （プログラミング言語によっては、文字列ではなく別の型のデータとして扱われるものもありますので注意してください。）</p>\n<p>文字列に対して、インデックスを指定してその要素を変更することはできません。（次のセルはエラーとなります） Pythonのデータは、大きく、変更可能なものと変更不可能なものに分類できますが、 文字列は変更不可能なデータです。 したがって、文字列を加工する場合は、新たに別の文字列を作成します。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[11]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">word1</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;hello&#39;</span>\n<span class=\"n\">word1</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;H&#39;</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n<span class=\"ansi-red-fg\">---------------------------------------------------------------------------</span>\n<span class=\"ansi-red-fg\">TypeError</span>                                 Traceback (most recent call last)\nCell <span class=\"ansi-green-fg\">In[11], line 2</span>\n<span class=\"ansi-green-intense-fg ansi-bold\">      1</span> word1 <span style=\"color: rgb(98,98,98)\">=</span> <span style=\"color: rgb(175,0,0)\">&#39;</span><span style=\"color: rgb(175,0,0)\">hello</span><span style=\"color: rgb(175,0,0)\">&#39;</span>\n<span class=\"ansi-green-fg\">----&gt; 2</span> <span class=\"ansi-yellow-bg\">word1</span><span class=\"ansi-yellow-bg\">[</span><span class=\"ansi-yellow-bg\" style=\"color: rgb(98,98,98)\">0</span><span class=\"ansi-yellow-bg\">]</span> <span style=\"color: rgb(98,98,98)\">=</span> <span style=\"color: rgb(175,0,0)\">&#39;</span><span style=\"color: rgb(175,0,0)\">H</span><span style=\"color: rgb(175,0,0)\">&#39;</span>\n\n<span class=\"ansi-red-fg\">TypeError</span>: &#39;str&#39; object does not support item assignment\n</pre></div></div>\n</div>\n<p>また、文字列の長さ以上のインデックスを指定することはできません。（次はエラーとなります）</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[12]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">word1</span><span class=\"p\">[</span><span class=\"mi\">100</span><span class=\"p\">]</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n<span class=\"ansi-red-fg\">---------------------------------------------------------------------------</span>\n<span class=\"ansi-red-fg\">IndexError</span>                                Traceback (most recent call last)\nCell <span class=\"ansi-green-fg\">In[12], line 1</span>\n<span class=\"ansi-green-fg\">----&gt; 1</span> <span class=\"ansi-yellow-bg\">word1</span><span class=\"ansi-yellow-bg\">[</span><span class=\"ansi-yellow-bg\" style=\"color: rgb(98,98,98)\">100</span><span class=\"ansi-yellow-bg\">]</span>\n\n<span class=\"ansi-red-fg\">IndexError</span>: string index out of range\n</pre></div></div>\n</div>\n<p>インデックスに負数を指定すると、 文字列を後ろから数えた順序に従って文字列を構成する文字を得ます。 たとえば、文字列の最後の文字を取得するには、<code class=\"docutils literal notranslate\"><span class=\"pre\">-1</span></code> を指定します。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[13]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">word1</span><span class=\"p\">[</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">]</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[13]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n&#39;o&#39;\n</pre></div></div>\n</div>\n<p>まとめると文字列 <code class=\"docutils literal notranslate\"><span class=\"pre\">hello</span></code> の正負のインデックスは以下の表の関係になります。</p>\n<table class=\"docutils align-default\">\n<thead>\n<tr class=\"row-odd\"><th class=\"head\"><p>インデックス</p></th>\n<th class=\"head\"><p>h</p></th>\n<th class=\"head\"><p>e</p></th>\n<th class=\"head\"><p>l</p></th>\n<th class=\"head\"><p>l</p></th>\n<th class=\"head\"><p>o</p></th>\n</tr>\n</thead>\n<tbody>\n<tr class=\"row-even\"><td><p>0か正</p></td>\n<td><p>0</p></td>\n<td><p>1</p></td>\n<td><p>2</p></td>\n<td><p>3</p></td>\n<td><p>4</p></td>\n</tr>\n<tr class=\"row-odd\"><td><p>負</p></td>\n<td><p>-5</p></td>\n<td><p>-4</p></td>\n<td><p>-3</p></td>\n<td><p>-2</p></td>\n<td><p>-1</p></td>\n</tr>\n</tbody>\n</table>\n</section>\n<section id=\"文字列とスライス\">\n<h2>文字列とスライス<a class=\"headerlink\" href=\"#文字列とスライス\" title=\"Link to this heading\">¶</a></h2>\n<p><strong>スライス</strong>と呼ばれる機能を利用して、文字列の一部（部分文字列）を取得できます。</p>\n<p>具体的には、取得したい部分文字列の先頭の文字のインデックスと最後の文字のインデックスに <code class=\"docutils literal notranslate\"><span class=\"pre\">1</span></code> を加えた値を指定します。 たとえば、ある文字列の2番目の文字から4番目までの文字の部分文字列を得るには次のようにします。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[14]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">digits1</span><span class=\"o\">=</span><span class=\"s1\">&#39;0123456789&#39;</span>\n<span class=\"n\">digits1</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">:</span><span class=\"mi\">4</span><span class=\"p\">]</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[14]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n&#39;123&#39;\n</pre></div></div>\n</div>\n<p>文字列の先頭（すなわち、インデックスが <code class=\"docutils literal notranslate\"><span class=\"pre\">0</span></code> の文字）を指定する場合、次のように行えます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[15]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">digits1</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">:</span><span class=\"mi\">3</span><span class=\"p\">]</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[15]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n&#39;012&#39;\n</pre></div></div>\n</div>\n<p>しかし、最初の <code class=\"docutils literal notranslate\"><span class=\"pre\">0</span></code> は省略しても同じ結果となります。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[16]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">digits1</span><span class=\"p\">[:</span><span class=\"mi\">3</span><span class=\"p\">]</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[16]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n&#39;012&#39;\n</pre></div></div>\n</div>\n<p>同様に、最後尾の文字のインデックスも、値を省略することもできます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[17]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">digits1</span><span class=\"p\">[</span><span class=\"mi\">3</span><span class=\"p\">:]</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[17]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n&#39;3456789&#39;\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[18]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">digits1</span><span class=\"p\">[</span><span class=\"mi\">3</span><span class=\"p\">:</span><span class=\"mi\">5</span><span class=\"p\">]</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[18]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n&#39;34&#39;\n</pre></div></div>\n</div>\n<p>スライスにおいても負数を指定して、 文字列の最後の方から部分文字列を取得できます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[19]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">digits1</span><span class=\"p\">[</span><span class=\"o\">-</span><span class=\"mi\">4</span><span class=\"p\">:</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">]</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[19]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n&#39;678&#39;\n</pre></div></div>\n</div>\n<p>スライスでは3番目の値を指定することで、とびとびの文字を指定できます。次のように <code class=\"docutils literal notranslate\"><span class=\"pre\">digits1[3:9:2]</span></code> と指定すると、インデックス <code class=\"docutils literal notranslate\"><span class=\"pre\">3</span></code> から2文字おきにインデックス <code class=\"docutils literal notranslate\"><span class=\"pre\">9</span></code> より小さい文字を並べた部分文字列を得ます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[20]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">digits1</span><span class=\"p\">[</span><span class=\"mi\">3</span><span class=\"p\">:</span><span class=\"mi\">9</span><span class=\"p\">:</span><span class=\"mi\">2</span><span class=\"p\">]</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[20]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n&#39;357&#39;\n</pre></div></div>\n</div>\n<p>3番目の値に <code class=\"docutils literal notranslate\"><span class=\"pre\">-1</span></code> を指定することもできます。これを使えば元の文字列の逆向きの文字列を得ることができます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[21]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">digits1</span><span class=\"p\">[</span><span class=\"mi\">8</span><span class=\"p\">:</span><span class=\"mi\">4</span><span class=\"p\">:</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">]</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[21]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n&#39;8765&#39;\n</pre></div></div>\n</div>\n</section>\n<section id=\"空文字列\">\n<h2>空文字列<a class=\"headerlink\" href=\"#空文字列\" title=\"Link to this heading\">¶</a></h2>\n<p>シングルクォート（もしくはダブルクォート）で、何も囲まない場合、長さ 0 の文字列（<strong>空文字列</strong>（くうもじれつ）もしくは、<strong>空列</strong>（くうれつ））となります。 具体的には、下記のように使用します。</p>\n<div class=\"highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>blank = &#39;&#39;\n</pre></div>\n</div>\n<p>空文字列は、次のように、たとえば文字列中からある部分文字列を取り除くのに使用します。 （<code class=\"docutils literal notranslate\"><span class=\"pre\">replace</span></code> は後で説明します。）</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[22]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">price</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;2,980円&#39;</span>\n<span class=\"n\">price</span><span class=\"o\">.</span><span class=\"n\">replace</span><span class=\"p\">(</span><span class=\"s1\">&#39;,&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;&#39;</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[22]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n&#39;2980円&#39;\n</pre></div></div>\n</div>\n<p>文字列のスライスにおいて、指定したインデックスの範囲に文字列が存在しない場合、 たとえば、最初に指定したインデックス <code class=\"docutils literal notranslate\"><span class=\"pre\">x</span></code> に対して、 2番目のインデックスの値に <code class=\"docutils literal notranslate\"><span class=\"pre\">x</span></code> 以下のインデックスの値を指定するとどうなるでしょうか？ （ただし、2つのインデックスは同じ符号を持つとし、スライスの3番目の値は用いないとします。） このような場合、結果は次のように空文字列となります（エラーが出たり、結果が <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code> にはならないことに注意してください）。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[23]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">digits1</span><span class=\"o\">=</span><span class=\"s1\">&#39;0123456789&#39;</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s1\">&#39;空文字列1 = &#39;</span><span class=\"p\">,</span> <span class=\"n\">digits1</span><span class=\"p\">[</span><span class=\"mi\">4</span><span class=\"p\">:</span><span class=\"mi\">2</span><span class=\"p\">])</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s1\">&#39;空文字列2 = &#39;</span><span class=\"p\">,</span> <span class=\"n\">digits1</span><span class=\"p\">[</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">:</span><span class=\"o\">-</span><span class=\"mi\">4</span><span class=\"p\">])</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s1\">&#39;空文字列3 = &#39;</span><span class=\"p\">,</span> <span class=\"n\">digits1</span><span class=\"p\">[</span><span class=\"mi\">3</span><span class=\"p\">:</span><span class=\"mi\">3</span><span class=\"p\">])</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s1\">&#39;空文字列ではない = &#39;</span><span class=\"p\">,</span> <span class=\"n\">digits1</span><span class=\"p\">[</span><span class=\"mi\">3</span><span class=\"p\">:</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">])</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n空文字列1 =\n空文字列2 =\n空文字列3 =\n空文字列ではない =  345678\n</pre></div></div>\n</div>\n</section>\n<section id=\"文字列の検索\">\n<h2>文字列の検索<a class=\"headerlink\" href=\"#文字列の検索\" title=\"Link to this heading\">¶</a></h2>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">文字列A</span></code> が <code class=\"docutils literal notranslate\"><span class=\"pre\">文字列B</span></code> を含むかどうかを調べるには、<code class=\"docutils literal notranslate\"><span class=\"pre\">in</span></code> 演算子を使います。 具体的には、次のように使用します。</p>\n<div class=\"highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>文字列B in 文字列A\n</pre></div>\n</div>\n<p>調べたい <code class=\"docutils literal notranslate\"><span class=\"pre\">文字列B</span></code> が含まれていれば <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> が、そうでなければ <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code> が返ります。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[24]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"s1\">&#39;lo&#39;</span> <span class=\"ow\">in</span> <span class=\"s1\">&#39;hello&#39;</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[24]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nTrue\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[25]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"s1\">&#39;z&#39;</span> <span class=\"ow\">in</span> <span class=\"s1\">&#39;hello&#39;</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[25]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nFalse\n</pre></div></div>\n</div>\n<p>実際のプログラムでは文字列を値とする変数を用いることが多いでしょう。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[26]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">word1</span> <span class=\"o\">=</span>  <span class=\"s1\">&#39;hello&#39;</span>\n<span class=\"n\">substr1</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;lo&#39;</span>\n<span class=\"n\">substr1</span> <span class=\"ow\">in</span> <span class=\"n\">word1</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[26]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nTrue\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[27]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">substr2</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;z&#39;</span>\n<span class=\"n\">substr2</span> <span class=\"ow\">in</span> <span class=\"n\">word1</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[27]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nFalse\n</pre></div></div>\n</div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">not</span> <span class=\"pre\">in</span></code> 演算子は、<code class=\"docutils literal notranslate\"><span class=\"pre\">in</span></code> 演算子の逆を意味します。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[28]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">word1</span> <span class=\"o\">=</span>  <span class=\"s1\">&#39;hello&#39;</span>\n<span class=\"n\">substr2</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;z&#39;</span>\n<span class=\"n\">substr2</span> <span class=\"ow\">not</span> <span class=\"ow\">in</span> <span class=\"n\">word1</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[28]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nTrue\n</pre></div></div>\n</div>\n</section>\n<section id=\"▲エスケープシーケンス\">\n<h2>▲エスケープシーケンス<a class=\"headerlink\" href=\"#▲エスケープシーケンス\" title=\"Link to this heading\">¶</a></h2>\n<p>文字列を作成するにはシングル <code class=\"docutils literal notranslate\"><span class=\"pre\">'</span></code> あるいはダブルクォート <code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;</span></code> で囲むと説明しました。 これらの文字を含む文字列を作成するには、<strong>エスケープシーケンス</strong>と呼ばれる特殊な文字列を使う必要があります。</p>\n<p>たとえば、下のように文字列に <code class=\"docutils literal notranslate\"><span class=\"pre\">'</span></code> を含む文字列を <code class=\"docutils literal notranslate\"><span class=\"pre\">'</span></code> で囲むと文字列の範囲がずれてエラーとなります。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[29]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">non_escaped</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;This is &#39;</span><span class=\"n\">MINE</span><span class=\"s1\">&#39;&#39;</span>\n<span class=\"n\">non_escaped</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n<span class=\"ansi-cyan-fg\">  Cell </span><span class=\"ansi-green-fg\">In[29], line 1</span>\n<span class=\"ansi-red-fg\">    non_escaped = &#39;This is &#39;MINE&#39;&#39;</span>\n                            ^\n<span class=\"ansi-red-fg\">SyntaxError</span><span class=\"ansi-red-fg\">:</span> invalid syntax\n\n</pre></div></div>\n</div>\n<p>エラーを避けるには、エスケープシーケンスで <code class=\"docutils literal notranslate\"><span class=\"pre\">'</span></code> を記述します、具体的には <code class=\"docutils literal notranslate\"><span class=\"pre\">'</span></code> の前に <code class=\"docutils literal notranslate\"><span class=\"pre\">\\</span></code> と記述すると、<code class=\"docutils literal notranslate\"><span class=\"pre\">'</span></code> を含む文字列を作成できます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[30]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">escaped1</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;This is </span><span class=\"se\">\\&#39;</span><span class=\"s1\">MINE</span><span class=\"se\">\\&#39;</span><span class=\"s1\">&#39;</span>\n<span class=\"n\">escaped1</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[30]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n&#34;This is &#39;MINE&#39;&#34;\n</pre></div></div>\n</div>\n<p>実は、シングルクォートで囲む代わりにダブルクォートを使えばエスケープシーケンスを使わずに記述できます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[31]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">doublequated</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;This is &#39;MINE&#39;&quot;</span>\n<span class=\"n\">doublequated</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[31]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n&#34;This is &#39;MINE&#39;&#34;\n</pre></div></div>\n</div>\n<p>他にも、ダブルクォートを表す <code class=\"docutils literal notranslate\"><span class=\"pre\">\\&quot;</span></code>、<code class=\"docutils literal notranslate\"><span class=\"pre\">\\</span></code> を表す <code class=\"docutils literal notranslate\"><span class=\"pre\">\\\\</span></code> 、改行を表す <code class=\"docutils literal notranslate\"><span class=\"pre\">\\n</span></code> など、様々なエスケープシーケンスがあります。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[32]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">escaped2</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;時は金なり</span><span class=\"se\">\\n\\&quot;</span><span class=\"s2\">Time is money</span><span class=\"se\">\\&quot;\\n</span><span class=\"s2\">Time is </span><span class=\"se\">\\\\</span><span class=\"s2\">&quot;</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">escaped2</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n時は金なり\n&#34;Time is money&#34;\nTime is \\\n</pre></div></div>\n</div>\n<p>3連のシングルクォート、もしくはダブルクォートを利用すれば、 <code class=\"docutils literal notranslate\"><span class=\"pre\">\\&quot;</span></code> や <code class=\"docutils literal notranslate\"><span class=\"pre\">\\n</span></code> を使わずに記述できます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[33]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">triple_single_quated</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;&#39;&#39;時は金なり</span>\n<span class=\"s1\">&#39;Time is money&#39;</span>\n<span class=\"s1\">Time is </span><span class=\"se\">\\\\</span><span class=\"s1\">&#39;&#39;&#39;</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">triple_single_quated</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n時は金なり\n&#39;Time is money&#39;\nTime is \\\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[34]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">triple_double_quated</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;&quot;&quot;時は金なり</span>\n<span class=\"s2\">&#39;Time is money&#39;</span>\n<span class=\"s2\">Time is </span><span class=\"se\">\\\\</span><span class=\"s2\">&quot;&quot;&quot;</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">triple_single_quated</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n時は金なり\n&#39;Time is money&#39;\nTime is \\\n</pre></div></div>\n</div>\n<p>なお、プログラムの一部を無効に（コメントアウト）したいとき、 3連のクォートで囲んで文字列にしてしまうことがあります。</p>\n</section>\n<section id=\"バックスラッシュの表示と入力\">\n<h2>バックスラッシュの表示と入力<a class=\"headerlink\" href=\"#バックスラッシュの表示と入力\" title=\"Link to this heading\">¶</a></h2>\n<p>エスケープシーケンスの先頭にある文字は、バックスラッシュ <code class=\"docutils literal notranslate\"><span class=\"pre\">\\</span></code>（Unicode <code class=\"docutils literal notranslate\"><span class=\"pre\">U+005C</span></code>）です。 これはPythonに限った話ではないですが、バックスラッシュは環境（正確にはフォント）によって見え方が異なります。 Windows上のフォントでは、円記号 <code class=\"docutils literal notranslate\"><span class=\"pre\">¥</span></code> として見えることが多いです。 macOS上のフォントでは、そのままバックスラッシュとして見えることが多いです。</p>\n<p>JIS配列キーボードでは、バックスラッシュキーがないことがあります。 Windows上では、円記号 <code class=\"docutils literal notranslate\"><span class=\"pre\">¥</span></code> キーでバックスラッシュが入力できます。 macOS上では、<code class=\"docutils literal notranslate\"><span class=\"pre\">Alt</span></code> + <code class=\"docutils literal notranslate\"><span class=\"pre\">¥</span></code> キーでバックスラッシュが入力できます。 ただし、IME設定によっても入力方法は変わるので注意してください。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[35]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s1\">&#39;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span><span class=\"p\">)</span> <span class=\"c1\"># 改行文字（バックスラッシュ + n）</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s1\">&#39;¥n&#39;</span><span class=\"p\">)</span> <span class=\"c1\"># 改行文字でない（円記号 + n）</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s1\">&#39;⧵n&#39;</span><span class=\"p\">)</span> <span class=\"c1\"># 改行文字でない（Unicode U+29F5 のバックスラッシュ演算子 + n）</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n\n\n¥n\n⧵n\n</pre></div></div>\n</div>\n</section>\n<section id=\"文字列の連結\">\n<h2>文字列の連結<a class=\"headerlink\" href=\"#文字列の連結\" title=\"Link to this heading\">¶</a></h2>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">+</span></code> 演算子を用いれば文字列同士を<strong>連結</strong>できます。 この演算では新しい文字列が作られ、元の文字列は変化しません。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[36]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">word1</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;hello&#39;</span>\n<span class=\"n\">word2</span> <span class=\"o\">=</span> <span class=\"s1\">&#39; world&#39;</span>\n<span class=\"n\">text1</span> <span class=\"o\">=</span> <span class=\"n\">word1</span> <span class=\"o\">+</span> <span class=\"n\">word2</span>\n<span class=\"n\">text1</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[36]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n&#39;hello world&#39;\n</pre></div></div>\n</div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">*</span></code> 演算子で文字列の繰り返し回数を指定できます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[37]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">word1</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;hello&#39;</span>\n<span class=\"n\">word1</span> <span class=\"o\">*</span> <span class=\"mi\">3</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[37]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n&#39;hellohellohello&#39;\n</pre></div></div>\n</div>\n</section>\n<section id=\"文字列とメソッド\">\n<h2>文字列とメソッド<a class=\"headerlink\" href=\"#文字列とメソッド\" title=\"Link to this heading\">¶</a></h2>\n<p>文字列に対する操作を行うため、様々な<strong>メソッド</strong>（関数のようなもの）が用意されています。</p>\n<p>メソッドは必要に応じて <code class=\"docutils literal notranslate\"><span class=\"pre\">(...)</span></code> 内に引数を与え、以下のように使用します。</p>\n<div class=\"highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>文字列.メソッド名(式, ...)\n# あるいは\n文字列変数.メソッド名(式, ...)\n</pre></div>\n</div>\n<p>文字列には以下のようなメソッドが用意されています。</p>\n<section id=\"置換\">\n<h3><strong>置換</strong><a class=\"headerlink\" href=\"#置換\" title=\"Link to this heading\">¶</a></h3>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">replace</span></code> メソッドは、指定した <code class=\"docutils literal notranslate\"><span class=\"pre\">部分文字列A</span></code> を、別に指定した <code class=\"docutils literal notranslate\"><span class=\"pre\">文字列B</span></code> で置き換えた文字列を作成します。 この操作では、元の文字列は変化しません。具体的には、次のように使用します。</p>\n<div class=\"highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>文字列.replace(部分文字列A, 文字列B)\n</pre></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[38]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">word1</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;hello&#39;</span>\n<span class=\"n\">word1</span><span class=\"o\">.</span><span class=\"n\">replace</span><span class=\"p\">(</span><span class=\"s1\">&#39;l&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;123&#39;</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[38]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n&#39;he123123o&#39;\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[39]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">word1</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[39]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n&#39;hello&#39;\n</pre></div></div>\n</div>\n</section>\n<section id=\"練習\">\n<h3>練習<a class=\"headerlink\" href=\"#練習\" title=\"Link to this heading\">¶</a></h3>\n<p>英語の文章からなる文字列 <code class=\"docutils literal notranslate\"><span class=\"pre\">str_engsentences</span></code> が引数として与えられたとき、<code class=\"docutils literal notranslate\"><span class=\"pre\">str_engsentences</span></code> 中に含まれる全ての句読点（<code class=\"docutils literal notranslate\"><span class=\"pre\">.</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">,</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">:</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">;</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">!</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">?</span></code>）を削除した文字列を返す関数 <code class=\"docutils literal notranslate\"><span class=\"pre\">remove_punctuations</span></code> を作成してください。 （練習の解答はこのノートブックの一番最後にあります。）</p>\n<p>次のセルの <code class=\"docutils literal notranslate\"><span class=\"pre\">...</span></code> のところを書き換えて <code class=\"docutils literal notranslate\"><span class=\"pre\">remove_punctuations(str_engsentences)</span></code> を作成してください。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[40]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">def</span> <span class=\"nf\">remove_punctuations</span><span class=\"p\">(</span><span class=\"n\">str_engsentences</span><span class=\"p\">):</span>\n    <span class=\"o\">...</span>\n</pre></div>\n</div>\n</div>\n<p>上のセルで解答を作成した後、以下のセルを実行し、実行結果が <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> になることを確認してください。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[41]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">remove_punctuations</span><span class=\"p\">(</span><span class=\"s1\">&#39;Quiet, uh, donations, you want me to make a donation to the coast guard youth auxiliary?&#39;</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;Quiet uh donations you want me to make a donation to the coast guard youth auxiliary&#39;</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nFalse\n</pre></div></div>\n</div>\n</section>\n<section id=\"id11\">\n<h3>練習<a class=\"headerlink\" href=\"#id11\" title=\"Link to this heading\">¶</a></h3>\n<p>ATGCの4種類の文字から成る文字列 <code class=\"docutils literal notranslate\"><span class=\"pre\">str_atgc</span></code> が引数として与えられたとき、文字列 <code class=\"docutils literal notranslate\"><span class=\"pre\">str_pair</span></code> を返す関数 <code class=\"docutils literal notranslate\"><span class=\"pre\">atgc_bppair</span></code> を作成してください。ただし、<code class=\"docutils literal notranslate\"><span class=\"pre\">str_pair</span></code> は、<code class=\"docutils literal notranslate\"><span class=\"pre\">str_atgc</span></code> 中の各文字列に対して、 <code class=\"docutils literal notranslate\"><span class=\"pre\">A</span></code> を <code class=\"docutils literal notranslate\"><span class=\"pre\">T</span></code> に、<code class=\"docutils literal notranslate\"><span class=\"pre\">T</span></code> を <code class=\"docutils literal notranslate\"><span class=\"pre\">A</span></code> に、<code class=\"docutils literal notranslate\"><span class=\"pre\">G</span></code> を <code class=\"docutils literal notranslate\"><span class=\"pre\">C</span></code> に、<code class=\"docutils literal notranslate\"><span class=\"pre\">C</span></code> を <code class=\"docutils literal notranslate\"><span class=\"pre\">G</span></code> に置き換えたものです。</p>\n<p>次のセルの <code class=\"docutils literal notranslate\"><span class=\"pre\">...</span></code> のところを書き換えて <code class=\"docutils literal notranslate\"><span class=\"pre\">atgc_bppair(str_atgc)</span></code> を作成してください。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[42]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">def</span> <span class=\"nf\">atgc_bppair</span><span class=\"p\">(</span><span class=\"n\">str_atgc</span><span class=\"p\">):</span>\n    <span class=\"o\">...</span>\n</pre></div>\n</div>\n</div>\n<p>上のセルで解答を作成した後、以下のセルを実行し、実行結果が <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> になることを確認してください。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[43]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">atgc_bppair</span><span class=\"p\">(</span><span class=\"s1\">&#39;AAGCCCCATGGTAA&#39;</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;TTCGGGGTACCATT&#39;</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nFalse\n</pre></div></div>\n</div>\n</section>\n<section id=\"検索\">\n<h3><strong>検索</strong><a class=\"headerlink\" href=\"#検索\" title=\"Link to this heading\">¶</a></h3>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">index</span></code> メソッドにより、指定した <code class=\"docutils literal notranslate\"><span class=\"pre\">部分文字列B</span></code> が <code class=\"docutils literal notranslate\"><span class=\"pre\">文字列A</span></code> のどこに存在するか調べることができます。具体的には、次のように使用します。</p>\n<div class=\"highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>文字列A.index(部分文字列B)\n</pre></div>\n</div>\n<p>ただし、指定した部分文字列が文字列に複数回含まれる場合、最初のインデックスが返されます。また、指定した部分文字列が文字列に含まれない場合は、エラーとなります。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[44]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">word1</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;hello&#39;</span>\n<span class=\"n\">word1</span><span class=\"o\">.</span><span class=\"n\">index</span><span class=\"p\">(</span><span class=\"s1\">&#39;lo&#39;</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[44]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n3\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[45]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">word1</span><span class=\"o\">.</span><span class=\"n\">index</span><span class=\"p\">(</span><span class=\"s1\">&#39;l&#39;</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[45]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n2\n</pre></div></div>\n</div>\n<p>以下はエラーとなります。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[46]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">word1</span><span class=\"o\">.</span><span class=\"n\">index</span><span class=\"p\">(</span><span class=\"s1\">&#39;a&#39;</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n<span class=\"ansi-red-fg\">---------------------------------------------------------------------------</span>\n<span class=\"ansi-red-fg\">ValueError</span>                                Traceback (most recent call last)\nCell <span class=\"ansi-green-fg\">In[46], line 1</span>\n<span class=\"ansi-green-fg\">----&gt; 1</span> <span class=\"ansi-yellow-bg\">word1</span><span class=\"ansi-yellow-bg\" style=\"color: rgb(98,98,98)\">.</span><span class=\"ansi-yellow-bg\">index</span><span class=\"ansi-yellow-bg\">(</span><span class=\"ansi-yellow-bg\" style=\"color: rgb(175,0,0)\">&#39;</span><span class=\"ansi-yellow-bg\" style=\"color: rgb(175,0,0)\">a</span><span class=\"ansi-yellow-bg\" style=\"color: rgb(175,0,0)\">&#39;</span><span class=\"ansi-yellow-bg\">)</span>\n\n<span class=\"ansi-red-fg\">ValueError</span>: substring not found\n</pre></div></div>\n</div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">find</span></code> メソッドも <code class=\"docutils literal notranslate\"><span class=\"pre\">index</span></code> と同様に部分文字列を検索し、最初に出現するインデックスを返します。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">index</span></code> との違いは、部分文字列が含まれない場合エラーとはならず <code class=\"docutils literal notranslate\"><span class=\"pre\">-1</span></code> が返されることです。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[47]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">word1</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;hello&#39;</span>\n<span class=\"n\">word1</span><span class=\"o\">.</span><span class=\"n\">find</span><span class=\"p\">(</span><span class=\"s1\">&#39;a&#39;</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[47]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n-1\n</pre></div></div>\n</div>\n</section>\n<section id=\"id13\">\n<h3>練習<a class=\"headerlink\" href=\"#id13\" title=\"Link to this heading\">¶</a></h3>\n<p>コロン (<code class=\"docutils literal notranslate\"><span class=\"pre\">:</span></code>) を1つだけ含む文字列 <code class=\"docutils literal notranslate\"><span class=\"pre\">str1</span></code> を引数として与えると、コロンの左右に存在する文字列を入れ替えた文字列を返す関数 <code class=\"docutils literal notranslate\"><span class=\"pre\">swap_colon(str1)</span></code> を作成してください。</p>\n<p>次のセルの <code class=\"docutils literal notranslate\"><span class=\"pre\">...</span></code> のところを書き換えて <code class=\"docutils literal notranslate\"><span class=\"pre\">swap_colon(str1)</span></code> を作成してください。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[48]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">def</span> <span class=\"nf\">swap_colon</span><span class=\"p\">(</span><span class=\"n\">str1</span><span class=\"p\">):</span>\n    <span class=\"o\">...</span>\n</pre></div>\n</div>\n</div>\n<p>上のセルで解答を作成した後、以下のセルを実行し、実行結果が <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> になることを確認してください。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[49]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">swap_colon</span><span class=\"p\">(</span><span class=\"s1\">&#39;hello:world&#39;</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;world:hello&#39;</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nFalse\n</pre></div></div>\n</div>\n</section>\n<section id=\"数え上げ\">\n<h3><strong>数え上げ</strong><a class=\"headerlink\" href=\"#数え上げ\" title=\"Link to this heading\">¶</a></h3>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">count</span></code> メソッドにより、指定した <code class=\"docutils literal notranslate\"><span class=\"pre\">部分文字列B</span></code> が <code class=\"docutils literal notranslate\"><span class=\"pre\">文字列A</span></code> にいくつ存在するか調べることができます。</p>\n<div class=\"highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>文字列A.count(部分文字列B)\n</pre></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[50]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">word1</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;hello&#39;</span>\n<span class=\"n\">word1</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">(</span><span class=\"s1\">&#39;l&#39;</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[50]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n2\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[51]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"s1\">&#39;aaaaaaa&#39;</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">(</span><span class=\"s1\">&#39;aa&#39;</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[51]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n3\n</pre></div></div>\n</div>\n</section>\n<section id=\"id15\">\n<h3>練習<a class=\"headerlink\" href=\"#id15\" title=\"Link to this heading\">¶</a></h3>\n<p>ATGCの4種類の文字から成る文字列 <code class=\"docutils literal notranslate\"><span class=\"pre\">str_atgc</span></code> と塩基名（<code class=\"docutils literal notranslate\"><span class=\"pre\">A</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">T</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">G</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">C</span></code> のいずれか）を指定する文字列 <code class=\"docutils literal notranslate\"><span class=\"pre\">str_bpname</span></code> が引数として与えられたとき、<code class=\"docutils literal notranslate\"><span class=\"pre\">str_atgc</span></code> 中に含まれる塩基 <code class=\"docutils literal notranslate\"><span class=\"pre\">str_bpname</span></code> の数を返す関数 <code class=\"docutils literal notranslate\"><span class=\"pre\">atgc_count</span></code> を作成してください。</p>\n<p>次のセルの <code class=\"docutils literal notranslate\"><span class=\"pre\">...</span></code> のところを書き換えて <code class=\"docutils literal notranslate\"><span class=\"pre\">atgc_count(str_atgc,</span> <span class=\"pre\">str_bpname)</span></code> を作成してください。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[52]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">def</span> <span class=\"nf\">atgc_count</span><span class=\"p\">(</span><span class=\"n\">str_atgc</span><span class=\"p\">,</span> <span class=\"n\">str_bpname</span><span class=\"p\">):</span>\n    <span class=\"o\">...</span>\n</pre></div>\n</div>\n</div>\n<p>上のセルで解答を作成した後、以下のセルを実行し、実行結果が <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> になることを確認してください。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[53]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">atgc_count</span><span class=\"p\">(</span><span class=\"s1\">&#39;AAGCCCCATGGTAA&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;A&#39;</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"mi\">5</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nFalse\n</pre></div></div>\n</div>\n</section>\n<section id=\"大文字・小文字\">\n<h3><strong>大文字</strong>・<strong>小文字</strong><a class=\"headerlink\" href=\"#大文字・小文字\" title=\"Link to this heading\">¶</a></h3>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">lower</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">capitalize</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">upper</span></code> メソッドを用いると、文字列の中の英文字を小文字に変換したり、大文字に変換したりすることができます。</p>\n<p>これらの操作では、元の文字列は変化しません。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[54]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">upper_dna</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;DNA&#39;</span>\n<span class=\"n\">upper_dna</span><span class=\"o\">.</span><span class=\"n\">lower</span><span class=\"p\">()</span> <span class=\"c1\"># 全ての文字を小文字にする</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[54]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n&#39;dna&#39;\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[55]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">upper_dna</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[55]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n&#39;DNA&#39;\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[56]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">lower_text</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;hello world!&#39;</span>\n<span class=\"n\">lower_text</span><span class=\"o\">.</span><span class=\"n\">capitalize</span><span class=\"p\">()</span> <span class=\"c1\"># 先頭文字を大文字にする</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[56]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n&#39;Hello world!&#39;\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[57]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">lower_text</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[57]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n&#39;hello world!&#39;\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[58]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">lower_text</span><span class=\"o\">.</span><span class=\"n\">upper</span><span class=\"p\">()</span> <span class=\"c1\">#全ての文字を大文字にする</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[58]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n&#39;HELLO WORLD!&#39;\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[59]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">lower_text</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[59]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n&#39;hello world!&#39;\n</pre></div></div>\n</div>\n</section>\n<section id=\"▲空白文字の削除\">\n<h3>▲空白文字の削除<a class=\"headerlink\" href=\"#▲空白文字の削除\" title=\"Link to this heading\">¶</a></h3>\n<p>半角スペース <code class=\"docutils literal notranslate\"><span class=\"pre\">'</span> <span class=\"pre\">'</span></code>・改行文字 <code class=\"docutils literal notranslate\"><span class=\"pre\">'\\n'</span></code>・タブ文字 <code class=\"docutils literal notranslate\"><span class=\"pre\">'\\t'</span></code>・全角スペース <code class=\"docutils literal notranslate\"><span class=\"pre\">'　'</span></code> などを総称して<strong>空白文字</strong>と呼びます。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">strip</span></code> メソッドを用いると、文字列の前後にある連続した空白文字を削除した文字列を取得できます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[60]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"s1\">&#39;  abc</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span><span class=\"o\">.</span><span class=\"n\">strip</span><span class=\"p\">()</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[60]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n&#39;abc&#39;\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[61]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"s1\">&#39;　a b c　</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span><span class=\"o\">.</span><span class=\"n\">strip</span><span class=\"p\">()</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[61]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n&#39;a b c&#39;\n</pre></div></div>\n</div>\n<p>左側の空白だけ削除する <code class=\"docutils literal notranslate\"><span class=\"pre\">lstrip</span></code> と右側の空白だけ削除する <code class=\"docutils literal notranslate\"><span class=\"pre\">rstrip</span></code> もあります。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[62]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"s1\">&#39;  abc</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span><span class=\"o\">.</span><span class=\"n\">lstrip</span><span class=\"p\">()</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[62]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n&#39;abc\\n&#39;\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[63]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"s1\">&#39;  abc</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span><span class=\"o\">.</span><span class=\"n\">rstrip</span><span class=\"p\">()</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[63]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n&#39;  abc&#39;\n</pre></div></div>\n</div>\n</section>\n</section>\n<section id=\"文字列の比較演算\">\n<h2><strong>文字列の比較演算</strong><a class=\"headerlink\" href=\"#文字列の比較演算\" title=\"Link to this heading\">¶</a></h2>\n<p>比較演算子、<code class=\"docutils literal notranslate\"><span class=\"pre\">==</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">&gt;</span></code> などを用いて、2つの文字列を比較することもできます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[64]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s1\">&#39;abc&#39;</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;abc&#39;</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s1\">&#39;ab&#39;</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;abc&#39;</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nTrue\nFalse\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[65]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s1\">&#39;abc&#39;</span> <span class=\"o\">!=</span> <span class=\"s1\">&#39;abc&#39;</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s1\">&#39;ab&#39;</span> <span class=\"o\">!=</span> <span class=\"s1\">&#39;abc&#39;</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nFalse\nTrue\n</pre></div></div>\n</div>\n<p>文字列の大小の比較は、いわゆる辞書式による比較で、文字列の最初の文字から順に比較して大小を決めます。 片方がもう片方を拡張したものであれば、拡張した方を大きいとします。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[66]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s1\">&#39;abc&#39;</span> <span class=\"o\">&lt;=</span> <span class=\"s1\">&#39;abc&#39;</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s1\">&#39;abc&#39;</span> <span class=\"o\">&lt;</span> <span class=\"s1\">&#39;abc&#39;</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s1\">&#39;abc&#39;</span> <span class=\"o\">&lt;</span> <span class=\"s1\">&#39;abd&#39;</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s1\">&#39;ab&#39;</span> <span class=\"o\">&lt;</span> <span class=\"s1\">&#39;abc&#39;</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nTrue\nFalse\nTrue\nTrue\n</pre></div></div>\n</div>\n</section>\n<section id=\"id19\">\n<h2>練習<a class=\"headerlink\" href=\"#id19\" title=\"Link to this heading\">¶</a></h2>\n<p>英語の文字列 <code class=\"docutils literal notranslate\"><span class=\"pre\">str_engsentences</span></code> が引数として与えられたとき、それが全て小文字である場合、<code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> を返し、そうでない場合、 <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code> を返す関数 <code class=\"docutils literal notranslate\"><span class=\"pre\">check_lower</span></code> を作成してください。</p>\n<p>次のセルの <code class=\"docutils literal notranslate\"><span class=\"pre\">...</span></code> のところを書き換えて <code class=\"docutils literal notranslate\"><span class=\"pre\">check_lower(str_engsentences)</span></code> を作成してください。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[67]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">def</span> <span class=\"nf\">check_lower</span><span class=\"p\">(</span><span class=\"n\">str_engsentences</span><span class=\"p\">):</span>\n    <span class=\"o\">...</span>\n</pre></div>\n</div>\n</div>\n<p>上のセルで解答を作成した後、以下のセルを実行し、実行結果が全て <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> になることを確認してください。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[68]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">check_lower</span><span class=\"p\">(</span><span class=\"s1\">&#39;down down down&#39;</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">check_lower</span><span class=\"p\">(</span><span class=\"s1\">&#39;There were doors all round the hall, but they were all locked&#39;</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"kc\">False</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nFalse\nFalse\n</pre></div></div>\n</div>\n</section>\n<section id=\"初心者によくある誤解-----変数と文字列の混乱\">\n<h2>初心者によくある誤解 — <strong>変数</strong>と<strong>文字列</strong>の混乱<a class=\"headerlink\" href=\"#初心者によくある誤解-----変数と文字列の混乱\" title=\"Link to this heading\">¶</a></h2>\n<p>初心者によくある誤解として、変数と文字列を混乱する例が見られます。たとえば、文字列を引数に取る次のような関数 <code class=\"docutils literal notranslate\"><span class=\"pre\">func</span></code> を考えます（ <code class=\"docutils literal notranslate\"><span class=\"pre\">func</span></code> は引数として与えられた文字列を大文字にして返す関数です）。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[69]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">def</span> <span class=\"nf\">func</span><span class=\"p\">(</span><span class=\"n\">str1</span><span class=\"p\">):</span>\n    <span class=\"k\">return</span> <span class=\"n\">str1</span><span class=\"o\">.</span><span class=\"n\">upper</span><span class=\"p\">()</span>\n</pre></div>\n</div>\n</div>\n<p>ここで変数 <code class=\"docutils literal notranslate\"><span class=\"pre\">str2</span></code> を引数として <code class=\"docutils literal notranslate\"><span class=\"pre\">func</span></code> を呼ぶと、<code class=\"docutils literal notranslate\"><span class=\"pre\">str2</span></code> に格納されている文字列が大文字になって返ってきます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[70]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">str2</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;abc&#39;</span>\n<span class=\"n\">func</span><span class=\"p\">(</span><span class=\"n\">str2</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[70]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n&#39;ABC&#39;\n</pre></div></div>\n</div>\n<p>次のように <code class=\"docutils literal notranslate\"><span class=\"pre\">func</span></code> を呼ぶと上とは結果が異なります。次の例では変数 <code class=\"docutils literal notranslate\"><span class=\"pre\">str2</span></code> （に格納されている文字列 <code class=\"docutils literal notranslate\"><span class=\"pre\">abc</span></code>）ではなく、文字列 <code class=\"docutils literal notranslate\"><span class=\"pre\">'str2'</span></code> を引数として <code class=\"docutils literal notranslate\"><span class=\"pre\">func</span></code> を呼び出しています。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[71]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">str2</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;abc&#39;</span>\n<span class=\"n\">func</span><span class=\"p\">(</span><span class=\"s1\">&#39;str2&#39;</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[71]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n&#39;STR2&#39;\n</pre></div></div>\n</div>\n</section>\n<section id=\"id21\">\n<h2>練習<a class=\"headerlink\" href=\"#id21\" title=\"Link to this heading\">¶</a></h2>\n<p>コンマ (<code class=\"docutils literal notranslate\"><span class=\"pre\">,</span></code>) を含む英語の文章からなる文字列 <code class=\"docutils literal notranslate\"><span class=\"pre\">str_engsentences</span></code> が引数として与えられたとき、<code class=\"docutils literal notranslate\"><span class=\"pre\">str_engsentences</span></code> 中の一番最初のコンマより後の文章のみかならなる文字列 <code class=\"docutils literal notranslate\"><span class=\"pre\">str_res</span></code> を返す関数 <code class=\"docutils literal notranslate\"><span class=\"pre\">remove_clause</span></code> を作成してください。ただし、 <code class=\"docutils literal notranslate\"><span class=\"pre\">str_res</span></code> の先頭は大文字のアルファベットとしてください。</p>\n<p>次のセルの <code class=\"docutils literal notranslate\"><span class=\"pre\">...</span></code> のところを書き換えて <code class=\"docutils literal notranslate\"><span class=\"pre\">remove_clause(str_engsentences)</span></code> を作成してください。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[72]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">def</span> <span class=\"nf\">remove_clause</span><span class=\"p\">(</span><span class=\"n\">str_engsentences</span><span class=\"p\">):</span>\n    <span class=\"o\">...</span>\n</pre></div>\n</div>\n</div>\n<p>上のセルで解答を作成した後、以下のセルを実行し、実行結果が <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> になることを確認してください。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[73]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">remove_clause</span><span class=\"p\">(</span><span class=\"s2\">&quot;It&#39;s being seen, but you aren&#39;t observing.&quot;</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"s2\">&quot;But you aren&#39;t observing.&quot;</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nFalse\n</pre></div></div>\n</div>\n</section>\n<section id=\"練習の解答\">\n<h2>練習の解答<a class=\"headerlink\" href=\"#練習の解答\" title=\"Link to this heading\">¶</a></h2>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[74]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">def</span> <span class=\"nf\">remove_punctuations</span><span class=\"p\">(</span><span class=\"n\">str_engsentences</span><span class=\"p\">):</span>\n    <span class=\"n\">str1</span> <span class=\"o\">=</span> <span class=\"n\">str_engsentences</span><span class=\"o\">.</span><span class=\"n\">replace</span><span class=\"p\">(</span><span class=\"s1\">&#39;.&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;&#39;</span><span class=\"p\">)</span> <span class=\"c1\"># 指定の文字を空文字に置換</span>\n    <span class=\"n\">str1</span> <span class=\"o\">=</span> <span class=\"n\">str1</span><span class=\"o\">.</span><span class=\"n\">replace</span><span class=\"p\">(</span><span class=\"s1\">&#39;,&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">str1</span> <span class=\"o\">=</span> <span class=\"n\">str1</span><span class=\"o\">.</span><span class=\"n\">replace</span><span class=\"p\">(</span><span class=\"s1\">&#39;:&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">str1</span> <span class=\"o\">=</span> <span class=\"n\">str1</span><span class=\"o\">.</span><span class=\"n\">replace</span><span class=\"p\">(</span><span class=\"s1\">&#39;;&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">str1</span> <span class=\"o\">=</span> <span class=\"n\">str1</span><span class=\"o\">.</span><span class=\"n\">replace</span><span class=\"p\">(</span><span class=\"s1\">&#39;!&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">str1</span> <span class=\"o\">=</span> <span class=\"n\">str1</span><span class=\"o\">.</span><span class=\"n\">replace</span><span class=\"p\">(</span><span class=\"s1\">&#39;?&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;&#39;</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span> <span class=\"n\">str1</span>\n<span class=\"c1\">#remove_punctuations(&#39;Quiet, uh, donations, you want me to make a donation to the coast guard youth auxiliary?&#39;)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[75]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">def</span> <span class=\"nf\">atgc_bppair</span><span class=\"p\">(</span><span class=\"n\">str_atgc</span><span class=\"p\">):</span>\n    <span class=\"n\">str_pair</span> <span class=\"o\">=</span> <span class=\"n\">str_atgc</span><span class=\"o\">.</span><span class=\"n\">replace</span><span class=\"p\">(</span><span class=\"s1\">&#39;A&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;t&#39;</span><span class=\"p\">)</span><span class=\"c1\"># 指定の文字に置換。ただし全て小文字</span>\n    <span class=\"n\">str_pair</span> <span class=\"o\">=</span> <span class=\"n\">str_pair</span><span class=\"o\">.</span><span class=\"n\">replace</span><span class=\"p\">(</span><span class=\"s1\">&#39;T&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;a&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">str_pair</span> <span class=\"o\">=</span> <span class=\"n\">str_pair</span><span class=\"o\">.</span><span class=\"n\">replace</span><span class=\"p\">(</span><span class=\"s1\">&#39;G&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;c&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">str_pair</span> <span class=\"o\">=</span> <span class=\"n\">str_pair</span><span class=\"o\">.</span><span class=\"n\">replace</span><span class=\"p\">(</span><span class=\"s1\">&#39;C&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;g&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">str_pair</span> <span class=\"o\">=</span> <span class=\"n\">str_pair</span><span class=\"o\">.</span><span class=\"n\">upper</span><span class=\"p\">()</span> <span class=\"c1\"># 置換済みの小文字の列を大文字に変換</span>\n    <span class=\"k\">return</span> <span class=\"n\">str_pair</span>\n<span class=\"c1\">#atgc_bppair(&#39;AAGCCCCATGGTAA&#39;)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[76]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">def</span> <span class=\"nf\">swap_colon</span><span class=\"p\">(</span><span class=\"n\">str1</span><span class=\"p\">):</span>\n    <span class=\"c1\">#コロンの位置を取得する # findでもOK</span>\n    <span class=\"n\">col_index</span> <span class=\"o\">=</span> <span class=\"n\">str1</span><span class=\"o\">.</span><span class=\"n\">index</span><span class=\"p\">(</span><span class=\"s1\">&#39;:&#39;</span><span class=\"p\">)</span>\n    <span class=\"c1\">#コロンの位置を基準に前半と後半の部分文字列を取得する</span>\n    <span class=\"n\">str2</span><span class=\"p\">,</span> <span class=\"n\">str3</span> <span class=\"o\">=</span> <span class=\"n\">str1</span><span class=\"p\">[:</span><span class=\"n\">col_index</span><span class=\"p\">],</span> <span class=\"n\">str1</span><span class=\"p\">[</span><span class=\"n\">col_index</span><span class=\"o\">+</span><span class=\"mi\">1</span><span class=\"p\">:]</span>\n    <span class=\"c1\">#部分文字列の順序を入れ替えて結合する</span>\n    <span class=\"n\">str4</span> <span class=\"o\">=</span> <span class=\"n\">str3</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;:&#39;</span> <span class=\"o\">+</span> <span class=\"n\">str2</span>\n    <span class=\"k\">return</span> <span class=\"n\">str4</span>\n<span class=\"c1\">#swap_colon(&#39;hello:world&#39;)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[77]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">def</span> <span class=\"nf\">atgc_count</span><span class=\"p\">(</span><span class=\"n\">str_atgc</span><span class=\"p\">,</span> <span class=\"n\">str_bpname</span><span class=\"p\">):</span>\n    <span class=\"k\">return</span> <span class=\"n\">str_atgc</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">(</span><span class=\"n\">str_bpname</span><span class=\"p\">)</span>\n<span class=\"c1\">#atgc_count(&#39;AAGCCCCATGGTAA&#39;, &#39;A&#39;)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[78]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">def</span> <span class=\"nf\">check_lower</span><span class=\"p\">(</span><span class=\"n\">str_engsentences</span><span class=\"p\">):</span>\n    <span class=\"k\">if</span> <span class=\"n\">str_engsentences</span> <span class=\"o\">==</span> <span class=\"n\">str_engsentences</span><span class=\"o\">.</span><span class=\"n\">lower</span><span class=\"p\">():</span><span class=\"c1\">#元の文字列と小文字に変換した文字列を比較する</span>\n        <span class=\"k\">return</span> <span class=\"kc\">True</span>\n    <span class=\"k\">return</span> <span class=\"kc\">False</span>\n<span class=\"c1\">#check_lower(&#39;down down down&#39;)</span>\n<span class=\"c1\">#check_lower(&#39;There were doors all round the hall, but they were all locked&#39;)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[79]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">def</span> <span class=\"nf\">remove_clause</span><span class=\"p\">(</span><span class=\"n\">str_engsentences</span><span class=\"p\">):</span>\n    <span class=\"n\">int_index</span> <span class=\"o\">=</span> <span class=\"n\">str_engsentences</span><span class=\"o\">.</span><span class=\"n\">find</span><span class=\"p\">(</span><span class=\"s1\">&#39;,&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">str1</span> <span class=\"o\">=</span> <span class=\"n\">str_engsentences</span><span class=\"p\">[</span><span class=\"n\">int_index</span><span class=\"o\">+</span><span class=\"mi\">2</span><span class=\"p\">:]</span>\n    <span class=\"k\">return</span> <span class=\"n\">str1</span><span class=\"o\">.</span><span class=\"n\">capitalize</span><span class=\"p\">()</span>\n<span class=\"c1\">#remove_clause(&quot;It&#39;s being seen, but you aren&#39;t observing.&quot;)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[ ]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span>\n</pre></div>\n</div>\n</div>\n</section>\n</section>\n\n\n          </div>\n          \n        </div>\n      </div>\n      <div class=\"sphinxsidebar\" role=\"navigation\" aria-label=\"Main\">\n        <div class=\"sphinxsidebarwrapper\">\n<h1 class=\"logo\"><a href=\"../index.html\">Pythonプログラミング入門</a></h1>\n\n\n\n\n\n\n\n\n<p>\n  <a style=\"font-family: sans-serif; font-size: smaller; background: linear-gradient(to top, #353535 0%, #141414 100%); -webkit-font-smoothing: antialiased; font-weight: normal; text-shadow: rgb(0 0 0 / 40%) 0 -1px 0; padding: 2px 6px; color: #fff; text-decoration: none; border-radius: 4px; border: 1px solid #0d0d0d; box-shadow: inset 0 1px 1px 0 #8f8f8f;\" href=\"https://github.com/utokyo-ipp/utokyo-ipp.github.io\">View on GitHub</a>\n</p><p>\n  <a style=\"font-family: sans-serif; font-size: smaller; background: linear-gradient(to top, #ff1e00 0%, #de1e00 100%); -webkit-font-smoothing: antialiased; font-weight: normal; text-shadow: rgb(0 0 0 / 40%) 0 -1px 0; padding: 2px 6px; color: #fff; text-decoration: none; border-radius: 4px; border: 1px solid #0d0d0d; box-shadow: inset 0 1px 1px 0 #ff8e70;\" href=\"https://utokyo-ipp.github.io/IPP_textbook.pdf\">View PDF</a>\n</p><p>\n  <a style=\"border-bottom: none;\" href=\"https://colab.research.google.com/github/utokyo-ipp/utokyo-ipp.github.io/blob/master/colab/2/2-1.ipynb\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Google Colaboratory\"></a>\n</p><h3>Navigation</h3>\n<ul class=\"current\">\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../1/1-0.html\">1-0. Colaboratory (Colab) の使い方</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../1/1-1.html\">1-1. 数値演算</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../1/1-2.html\">1-2. 変数と関数の基礎</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../1/1-3.html\">1-3. 論理・比較演算と条件分岐の基礎</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../1/1-4.html\">1-4. テストとデバッグ</a></li>\n<li class=\"toctree-l1 current\"><a class=\"current reference internal\" href=\"#\">2-1. 文字列 (string)</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#文字列とインデックス\">文字列とインデックス</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#文字列とスライス\">文字列とスライス</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#空文字列\">空文字列</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#文字列の検索\">文字列の検索</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#▲エスケープシーケンス\">▲エスケープシーケンス</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#バックスラッシュの表示と入力\">バックスラッシュの表示と入力</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#文字列の連結\">文字列の連結</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#文字列とメソッド\">文字列とメソッド</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#文字列の比較演算\"><strong>文字列の比較演算</strong></a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#id19\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#初心者によくある誤解-----変数と文字列の混乱\">初心者によくある誤解 — <strong>変数</strong>と<strong>文字列</strong>の混乱</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#id21\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#練習の解答\">練習の解答</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"2-2.html\">2-2. リスト (list)</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"2-3.html\">2-3. 条件分岐</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../3/3-1.html\">3-1. 辞書 (dictionary)</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../3/3-2.html\">3-2. 繰り返し</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../3/3-3.html\">3-3. 関数</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../4/4-1.html\">4-1. ファイル入出力の基本</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../4/4-2.html\">4-2. イテラブルとイテレータ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../4/4-3.html\">4-3. ディレクトリと木構造</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../5/5-1.html\">5-1. モジュールの使い方</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../5/5-2.html\">5-2. モジュールの作り方</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../5/5-3.html\">5-3. NumPyライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../6/6-1.html\">6-1. 内包表記</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../6/6-2.html\">6-2. 高階関数</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../6/6-3.html\">6-3. クラス</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../7/7-1.html\">7-1. pandasライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../7/7-2.html\">7-2. scikit-learnライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/1-jupyter-notebook.html\">▲Jupyter Notebook の使い方</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/2-set.html\">▲セット (set)</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/3-recursion.html\">▲再帰</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/3-visualization.html\">▲簡単なデータの可視化</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/4-csv.html\">▲CSVファイルの入出力</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/5-bokeh.html\">▲Bokehライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/5-command.html\">▲Pythonスクリプトとコマンドライン実行</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/5-matplotlib.html\">▲Matplotlibライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/5-re.html\">▲正規表現</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../index_of_terms.html\">索引</a></li>\n</ul>\n\n<div class=\"relations\">\n<h3>Related Topics</h3>\n<ul>\n  <li><a href=\"../index.html\">Documentation overview</a><ul>\n      <li>Previous: <a href=\"../1/1-4.html\" title=\"previous chapter\">1-4. テストとデバッグ</a></li>\n      <li>Next: <a href=\"2-2.html\" title=\"next chapter\">2-2. リスト (list)</a></li>\n  </ul></li>\n</ul>\n</div>\n<search id=\"searchbox\" style=\"display: none\" role=\"search\">\n  <h3 id=\"searchlabel\">Quick search</h3>\n    <div class=\"searchformwrapper\">\n    <form class=\"search\" action=\"../search.html\" method=\"get\">\n      <input type=\"text\" name=\"q\" aria-labelledby=\"searchlabel\" autocomplete=\"off\" autocorrect=\"off\" autocapitalize=\"off\" spellcheck=\"false\"/>\n      <input type=\"submit\" value=\"Go\" />\n    </form>\n    </div>\n</search>\n<script>document.getElementById('searchbox').style.display = \"block\"</script>\n\n\n\n\n\n\n\n\n        </div>\n      </div>\n      <div class=\"clearer\"></div>\n    </div>\n    <div class=\"footer\">\n      &#169;2020–2024, 東京大学 数理・情報教育研究センター (CC BY-NC-ND 4.0).\n      \n      |\n      Powered by <a href=\"https://www.sphinx-doc.org/\">Sphinx 8.0.2</a>\n      &amp; <a href=\"https://alabaster.readthedocs.io\">Alabaster 1.0.0</a>\n      \n    </div>\n\n    \n\n    \n    <script>\n\n      var _gaq = _gaq || [];\n      _gaq.push(['_setAccount', 'G-8M0RXGPPSR']);\n      _gaq.push(['_setDomainName', 'none']);\n      _gaq.push(['_setAllowLinker', true]);\n      _gaq.push(['_trackPageview']);\n\n      (function() {\n        var ga = document.createElement('script'); ga.async = true;\n        ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'https://www') + '.google-analytics.com/ga.js';\n        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);\n      })();\n\n    </script>\n    \n  </body>\n</html>"
  },
  {
    "path": "docs/2/2-2.html",
    "content": "<!DOCTYPE html>\n\n<html lang=\"jp\" data-content_root=\"../\">\n  <head>\n    <meta charset=\"utf-8\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" /><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n\n    <!-- Google tag (gtag.js) -->\n    <script async src=\"https://www.googletagmanager.com/gtag/js?id=G-8M0RXGPPSR\"></script>\n    <script>\n        window.dataLayer = window.dataLayer || [];\n        function gtag(){dataLayer.push(arguments);}\n        gtag('js', new Date());\n        gtag('config', 'G-8M0RXGPPSR');\n    </script>\n    \n    <title>2-2. リスト (list) &#8212; Pythonプログラミング入門  documentation</title>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/pygments.css?v=d1102ebc\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/basic.css?v=c058f7c8\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/alabaster.css?v=27fed22d\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/nbsphinx-code-cells.css\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/custom.css?v=1a1aa8dd\" />\n    <script src=\"../_static/documentation_options.js?v=3ff7d7a7\"></script>\n    <script src=\"../_static/doctools.js?v=9a2dae69\"></script>\n    <script src=\"../_static/sphinx_highlight.js?v=dc90522c\"></script>\n    <script crossorigin=\"anonymous\" integrity=\"sha256-Ae2Vz/4ePdIu6ZyI/5ZGsYnb+m0JlOmKPjt6XZ9JJkA=\" src=\"https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.4/require.min.js\"></script>\n    <script>window.MathJax = {\"tex\": {\"inlineMath\": [[\"$\", \"$\"], [\"\\\\(\", \"\\\\)\"]], \"processEscapes\": true}, \"options\": {\"ignoreHtmlClass\": \"tex2jax_ignore|mathjax_ignore|document\", \"processHtmlClass\": \"tex2jax_process|mathjax_process|math|output_area\"}}</script>\n    <script defer=\"defer\" src=\"https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js\"></script>\n    <link rel=\"index\" title=\"Index\" href=\"../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../search.html\" />\n    <link rel=\"next\" title=\"2-3. 条件分岐\" href=\"2-3.html\" />\n    <link rel=\"prev\" title=\"2-1. 文字列 (string)\" href=\"2-1.html\" />\n   \n  <link rel=\"stylesheet\" href=\"../_static/custom.css\" type=\"text/css\" />\n  \n\n  \n  \n\n  </head><body>\n  \n\n    <div class=\"document\">\n      <div class=\"documentwrapper\">\n        <div class=\"bodywrapper\">\n          \n\n          <div class=\"body\" role=\"main\">\n            \n  <section id=\"2-2.-リスト-(list)\">\n<h1>2-2. リスト (list)<a class=\"headerlink\" href=\"#2-2.-リスト-(list)\" title=\"Link to this heading\">¶</a></h1>\n<p>複数のデータを要素としてまとめて取り扱うデータとして、リストとタプルについて説明します。</p>\n<p>参考</p>\n<ul class=\"simple\">\n<li><p><a class=\"reference external\" href=\"https://docs.python.org/ja/3/tutorial/introduction.html#lists\">https://docs.python.org/ja/3/tutorial/introduction.html#lists</a></p></li>\n<li><p><a class=\"reference external\" href=\"https://docs.python.org/ja/3/tutorial/datastructures.html#tuples-and-sequences\">https://docs.python.org/ja/3/tutorial/datastructures.html#tuples-and-sequences</a></p></li>\n</ul>\n<p>文字列を構成する要素は文字のみでしたが、<strong>リスト</strong>では構成する要素としてあらゆる型のデータを指定できます。 他のプログラミング言語では、リストに相当するものとして<strong>配列</strong>（もしくはアレイ）やベクターなどがあります。</p>\n<p>リストを作成するには、リストを構成する要素をコンマで区切り全体をかぎ括弧 <code class=\"docutils literal notranslate\"><span class=\"pre\">[...]</span></code> で囲みます。</p>\n<p>以下のセルでは数値を要素とするリストを作成して、変数に代入しています。 さらに、文字列と同様に組み込み関数 <code class=\"docutils literal notranslate\"><span class=\"pre\">type</span></code> を用いて、変数の値がリストであることを確認しています。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[1]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">numbers</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"mi\">10</span><span class=\"p\">,</span> <span class=\"mi\">20</span><span class=\"p\">,</span> <span class=\"mi\">30</span><span class=\"p\">,</span> <span class=\"mi\">40</span><span class=\"p\">,</span> <span class=\"mi\">50</span><span class=\"p\">]</span>\n<span class=\"n\">numbers</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[1]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n[0, 10, 20, 30, 40, 50]\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[2]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">type</span><span class=\"p\">(</span><span class=\"n\">numbers</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[2]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nlist\n</pre></div></div>\n</div>\n<p>リストのデータ型は <code class=\"docutils literal notranslate\"><span class=\"pre\">list</span></code> です。 （なお、後で見るように、<code class=\"docutils literal notranslate\"><span class=\"pre\">list</span></code> は他のデータをリストに変換する関数としても用いられます。）</p>\n<p>次に文字列を構成要素とするリストを作成してみます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[3]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">fruits</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s1\">&#39;apple&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;banana&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;chelly&#39;</span><span class=\"p\">]</span>\n<span class=\"n\">fruits</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[3]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n[&#39;apple&#39;, &#39;banana&#39;, &#39;chelly&#39;]\n</pre></div></div>\n</div>\n<p>リストの要素としてあらゆる型のデータを指定でき、それらは混在してもかまいません。 以下のセルでは、数値と文字列が混在しています。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[4]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">numbers_fruits</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"mi\">10</span><span class=\"p\">,</span> <span class=\"s1\">&#39;apple&#39;</span><span class=\"p\">,</span> <span class=\"mi\">20</span><span class=\"p\">,</span> <span class=\"s1\">&#39;banana&#39;</span><span class=\"p\">,</span> <span class=\"mi\">30</span><span class=\"p\">]</span>\n<span class=\"n\">numbers_fruits</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[4]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n[10, &#39;apple&#39;, 20, &#39;banana&#39;, 30]\n</pre></div></div>\n</div>\n<p>次のように、何も要素を格納していないリスト（<strong>空リスト</strong>）を作成できます。 空リストはプログラム実行の途中結果を記録する場合などによく使われています。 具体的な例については、後述する <code class=\"docutils literal notranslate\"><span class=\"pre\">append</span></code> メソッドの項を参照してください。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[5]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">empty</span><span class=\"o\">=</span><span class=\"p\">[]</span>\n<span class=\"n\">empty</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[5]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n[]\n</pre></div></div>\n</div>\n<p>なお、<code class=\"docutils literal notranslate\"><span class=\"pre\">[]</span></code> を用いて空リストを作成するたびに、 常に新しいオブジェクト（それまでに作られたオブジェクトとは同一でないオブジェクト）が生成されます。 詳しくは「▲オブジェクトの等価性と同一性」を参照してください。</p>\n<section id=\"リストとインデックス\">\n<h2>リストとインデックス<a class=\"headerlink\" href=\"#リストとインデックス\" title=\"Link to this heading\">¶</a></h2>\n<p>文字列の場合と同様に、インデックスを指定してリストの要素を取り出せます。 リストの <code class=\"docutils literal notranslate\"><span class=\"pre\">x</span></code> 番目の要素を取得するには次のような記法を用います。 インデックスは 0 から始まることに注意してください。</p>\n<div class=\"highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>リスト[x-1]\n</pre></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[6]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">abcd</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s1\">&#39;a&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;b&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;c&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;d&#39;</span><span class=\"p\">]</span>\n<span class=\"n\">abcd</span><span class=\"p\">[</span><span class=\"mi\">2</span><span class=\"p\">]</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[6]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n&#39;c&#39;\n</pre></div></div>\n</div>\n<p>文字列の場合とは異なり、リストは変更可能なデータです。 すなわちインデックスで指定されるリストの要素は、代入によって変更できます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[7]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">abcd</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s1\">&#39;a&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;b&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;c&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;d&#39;</span><span class=\"p\">]</span>\n<span class=\"n\">abcd</span><span class=\"p\">[</span><span class=\"mi\">2</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;hello&#39;</span>\n<span class=\"n\">abcd</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[7]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n[&#39;a&#39;, &#39;b&#39;, &#39;hello&#39;, &#39;d&#39;]\n</pre></div></div>\n</div>\n<p>文字列と同様に、スライスを使った範囲指定も可能です。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[8]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">abcd</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s1\">&#39;a&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;b&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;c&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;d&#39;</span><span class=\"p\">]</span>\n<span class=\"n\">abcd</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">:</span><span class=\"mi\">3</span><span class=\"p\">]</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[8]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n[&#39;b&#39;, &#39;c&#39;]\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[9]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">abcd</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s1\">&#39;a&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;b&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;c&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;d&#39;</span><span class=\"p\">]</span>\n<span class=\"n\">abcd</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">:</span><span class=\"mi\">4</span><span class=\"p\">:</span><span class=\"mi\">2</span><span class=\"p\">]</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[9]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n[&#39;a&#39;, &#39;c&#39;]\n</pre></div></div>\n</div>\n<p>リストのスライスに対しては、代入も可能です。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[10]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">abcd</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s1\">&#39;a&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;b&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;c&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;d&#39;</span><span class=\"p\">]</span>\n<span class=\"n\">abcd</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">:</span><span class=\"mi\">3</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s1\">&#39;x&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;y&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;z&#39;</span><span class=\"p\">]</span>\n<span class=\"n\">abcd</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[10]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n[&#39;a&#39;, &#39;x&#39;, &#39;y&#39;, &#39;z&#39;, &#39;d&#39;]\n</pre></div></div>\n</div>\n</section>\n<section id=\"練習\">\n<h2>練習<a class=\"headerlink\" href=\"#練習\" title=\"Link to this heading\">¶</a></h2>\n<p>リスト <code class=\"docutils literal notranslate\"><span class=\"pre\">ln</span></code> を引数として取り、<code class=\"docutils literal notranslate\"><span class=\"pre\">ln</span></code> の偶数番目のインデックスの値を削除したリストを返す関数 <code class=\"docutils literal notranslate\"><span class=\"pre\">remove_evenindex</span></code> を作成してください（ただし、0 は偶数として扱うものとします）。</p>\n<p>ヒント：スライスを使います。</p>\n<p>以下のセルの <code class=\"docutils literal notranslate\"><span class=\"pre\">...</span></code> のところを書き換えて <code class=\"docutils literal notranslate\"><span class=\"pre\">remove_evenindex(ln)</span></code> を作成してください。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[11]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">def</span> <span class=\"nf\">remove_evenindex</span><span class=\"p\">(</span><span class=\"n\">ln</span><span class=\"p\">):</span>\n    <span class=\"o\">...</span>\n</pre></div>\n</div>\n</div>\n<p>上のセルで解答を作成した後、以下のセルを実行し、実行結果が全て <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> になることを確認してください。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[12]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">remove_evenindex</span><span class=\"p\">([</span><span class=\"s1\">&#39;a&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;b&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;c&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;d&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;e&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;f&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;g&#39;</span><span class=\"p\">])</span> <span class=\"o\">==</span> <span class=\"p\">[</span><span class=\"s1\">&#39;b&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;d&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;f&#39;</span><span class=\"p\">]</span> <span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">remove_evenindex</span><span class=\"p\">([</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"mi\">3</span><span class=\"p\">,</span> <span class=\"mi\">4</span><span class=\"p\">,</span> <span class=\"mi\">5</span><span class=\"p\">])</span> <span class=\"o\">==</span> <span class=\"p\">[</span><span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"mi\">4</span><span class=\"p\">])</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nFalse\nFalse\n</pre></div></div>\n</div>\n</section>\n<section id=\"多重リスト\">\n<h2><strong>多重リスト</strong><a class=\"headerlink\" href=\"#多重リスト\" title=\"Link to this heading\">¶</a></h2>\n<p>リストの要素としてリストを指定することもできます。 リストを要素とするリストは多重リストと呼ばれます。 次は二重リストの例です。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[13]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">lns</span> <span class=\"o\">=</span> <span class=\"p\">[[</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"mi\">3</span><span class=\"p\">],</span> <span class=\"p\">[</span><span class=\"mi\">10</span><span class=\"p\">,</span> <span class=\"mi\">20</span><span class=\"p\">,</span> <span class=\"mi\">30</span><span class=\"p\">],</span> <span class=\"p\">[</span><span class=\"s1\">&#39;a&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;b&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;c&#39;</span><span class=\"p\">]]</span>\n</pre></div>\n</div>\n</div>\n<p>多重リストの要素指定は複数のインデックスで行います。 前の例で外側の <code class=\"docutils literal notranslate\"><span class=\"pre\">[]</span></code> で示されるリストの2番目の要素のリスト、 すなわち <code class=\"docutils literal notranslate\"><span class=\"pre\">[10,</span> <span class=\"pre\">20,</span> <span class=\"pre\">30]</span></code> の最初の要素は次のように指定します。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[14]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">lns</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">][</span><span class=\"mi\">0</span><span class=\"p\">]</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[14]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n10\n</pre></div></div>\n</div>\n<p>3番目のリストそのものを取り出したいときは、次のように指定します。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[15]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">lns</span><span class=\"p\">[</span><span class=\"mi\">2</span><span class=\"p\">]</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[15]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n[&#39;a&#39;, &#39;b&#39;, &#39;c&#39;]\n</pre></div></div>\n</div>\n<p>以下のようにリストの要素として、リストを値とする変数を指定することもできます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[16]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">lns2</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"n\">lns</span><span class=\"p\">,</span> <span class=\"p\">[</span><span class=\"s1\">&#39;x&#39;</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"p\">[</span><span class=\"mi\">11</span><span class=\"p\">,</span> <span class=\"mi\">12</span><span class=\"p\">,</span> <span class=\"mi\">13</span><span class=\"p\">]],</span> <span class=\"p\">[</span><span class=\"s1\">&#39;y&#39;</span><span class=\"p\">,</span> <span class=\"p\">[</span><span class=\"mi\">100</span><span class=\"p\">,</span> <span class=\"mi\">120</span><span class=\"p\">,</span> <span class=\"mi\">140</span><span class=\"p\">]]</span> <span class=\"p\">]</span>\n<span class=\"n\">lns2</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[16]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n[[[1, 2, 3], [10, 20, 30], [&#39;a&#39;, &#39;b&#39;, &#39;c&#39;]],\n [&#39;x&#39;, 1, [11, 12, 13]],\n [&#39;y&#39;, [100, 120, 140]]]\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[17]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">lns2</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[17]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n[[1, 2, 3], [10, 20, 30], [&#39;a&#39;, &#39;b&#39;, &#39;c&#39;]]\n</pre></div></div>\n</div>\n</section>\n<section id=\"リストに対する関数・演算子・メソッド\">\n<h2>リストに対する関数・演算子・メソッド<a class=\"headerlink\" href=\"#リストに対する関数・演算子・メソッド\" title=\"Link to this heading\">¶</a></h2>\n<section id=\"リストの要素数\">\n<h3>リストの要素数<a class=\"headerlink\" href=\"#リストの要素数\" title=\"Link to this heading\">¶</a></h3>\n<p>組み込み関数 <code class=\"docutils literal notranslate\"><span class=\"pre\">len</span></code> はリストの長さ、すなわち要素数、を返します。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[18]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">numbers</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"mi\">10</span><span class=\"p\">,</span> <span class=\"mi\">20</span><span class=\"p\">,</span> <span class=\"mi\">30</span><span class=\"p\">,</span> <span class=\"mi\">40</span><span class=\"p\">,</span> <span class=\"mi\">50</span><span class=\"p\">]</span>\n<span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">numbers</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[18]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n6\n</pre></div></div>\n</div>\n</section>\n<section id=\"max-と-min\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">max</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">min</span></code><a class=\"headerlink\" href=\"#max-と-min\" title=\"Link to this heading\">¶</a></h3>\n<p>リストを引数とする関数は色々とあります。 関数 <code class=\"docutils literal notranslate\"><span class=\"pre\">max</span></code> は、数のリストが与えられると、その中の最大値を返します。 同様に関数 <code class=\"docutils literal notranslate\"><span class=\"pre\">min</span></code> はリストの中の最小値を返します。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[19]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">numbers</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"mi\">30</span><span class=\"p\">,</span> <span class=\"mi\">50</span><span class=\"p\">,</span> <span class=\"mi\">10</span><span class=\"p\">,</span> <span class=\"mi\">20</span><span class=\"p\">,</span> <span class=\"mi\">40</span><span class=\"p\">,</span> <span class=\"mi\">60</span><span class=\"p\">]</span>\n<span class=\"nb\">max</span><span class=\"p\">(</span><span class=\"n\">numbers</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[19]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n60\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[20]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">numbers</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"mi\">30</span><span class=\"p\">,</span> <span class=\"mi\">50</span><span class=\"p\">,</span> <span class=\"mi\">10</span><span class=\"p\">,</span> <span class=\"mi\">20</span><span class=\"p\">,</span> <span class=\"mi\">40</span><span class=\"p\">,</span> <span class=\"mi\">60</span><span class=\"p\">]</span>\n<span class=\"nb\">min</span><span class=\"p\">(</span><span class=\"n\">numbers</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[20]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n10\n</pre></div></div>\n</div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">max</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">min</span></code> は文字列のリストに対しても適用できます。文字列の比較は、いわゆる辞書順で行われます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[21]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">characters</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s1\">&#39;e&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;d&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;a&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;c&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;f&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;b&#39;</span><span class=\"p\">]</span>\n<span class=\"nb\">min</span><span class=\"p\">(</span><span class=\"n\">characters</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[21]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n&#39;a&#39;\n</pre></div></div>\n</div>\n</section>\n<section id=\"sum\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">sum</span></code><a class=\"headerlink\" href=\"#sum\" title=\"Link to this heading\">¶</a></h3>\n<p>関数 <code class=\"docutils literal notranslate\"><span class=\"pre\">sum</span></code> は、数のリストが与えられると、その要素の総和を返します。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[22]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">numbers</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"mi\">30</span><span class=\"p\">,</span> <span class=\"mi\">50</span><span class=\"p\">,</span> <span class=\"mi\">10</span><span class=\"p\">,</span> <span class=\"mi\">20</span><span class=\"p\">,</span> <span class=\"mi\">40</span><span class=\"p\">,</span> <span class=\"mi\">60</span><span class=\"p\">]</span>\n<span class=\"nb\">sum</span><span class=\"p\">(</span><span class=\"n\">numbers</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[22]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n210\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[23]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">sum</span><span class=\"p\">([])</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[23]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n0\n</pre></div></div>\n</div>\n</section>\n<section id=\"リストと演算子\">\n<h3>リストと演算子<a class=\"headerlink\" href=\"#リストと演算子\" title=\"Link to this heading\">¶</a></h3>\n<p>演算子 <code class=\"docutils literal notranslate\"><span class=\"pre\">+</span></code> によってリストの連結、<code class=\"docutils literal notranslate\"><span class=\"pre\">*</span></code> によって連結における繰り返し回数を指定することができます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[24]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">numbers</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"mi\">10</span><span class=\"p\">,</span> <span class=\"mi\">20</span><span class=\"p\">,</span> <span class=\"mi\">30</span><span class=\"p\">,</span> <span class=\"mi\">40</span><span class=\"p\">,</span> <span class=\"mi\">50</span><span class=\"p\">]</span>\n<span class=\"n\">numbers</span> <span class=\"o\">+</span> <span class=\"p\">[</span><span class=\"s1\">&#39;a&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;b&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;c&#39;</span><span class=\"p\">]</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[24]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n[0, 10, 20, 30, 40, 50, &#39;a&#39;, &#39;b&#39;, &#39;c&#39;]\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[25]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">numbers</span><span class=\"o\">*</span><span class=\"mi\">3</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[25]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n[0, 10, 20, 30, 40, 50, 0, 10, 20, 30, 40, 50, 0, 10, 20, 30, 40, 50]\n</pre></div></div>\n</div>\n<p>要素が全て同じ値（たとえば、<code class=\"docutils literal notranslate\"><span class=\"pre\">0</span></code> ）のリストを作る最も簡単な方法は、この <code class=\"docutils literal notranslate\"><span class=\"pre\">*</span></code> 演算子を使う方法です。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[26]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">zero10</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]</span> <span class=\"o\">*</span> <span class=\"mi\">10</span>\n<span class=\"n\">zero10</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[26]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]\n</pre></div></div>\n</div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">*</span></code> は <code class=\"docutils literal notranslate\"><span class=\"pre\">+</span></code> を繰り返し行うのと同じ結果を返します。 たとえば、<code class=\"docutils literal notranslate\"><span class=\"pre\">x*3</span></code> は <code class=\"docutils literal notranslate\"><span class=\"pre\">x+x+x</span></code> と同じ結果を返します。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">x</span></code> が多重リストのとき、<code class=\"docutils literal notranslate\"><span class=\"pre\">x</span></code> の要素であるリストが <code class=\"docutils literal notranslate\"><span class=\"pre\">y</span></code> の中に複数回現れます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[27]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">x</span> <span class=\"o\">=</span> <span class=\"p\">[[</span><span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">],</span> <span class=\"p\">[</span><span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"mi\">3</span><span class=\"p\">]]</span>\n<span class=\"n\">y</span> <span class=\"o\">=</span> <span class=\"n\">x</span><span class=\"o\">*</span><span class=\"mi\">3</span>\n<span class=\"n\">y</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[27]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n[[0, 1], [2, 3], [0, 1], [2, 3], [0, 1], [2, 3]]\n</pre></div></div>\n</div>\n<p>このとき、<code class=\"docutils literal notranslate\"><span class=\"pre\">x</span></code> の要素が変更されると、<code class=\"docutils literal notranslate\"><span class=\"pre\">y</span></code> の中では複数箇所に変化が起こるので、注意してください。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[28]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">x</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">][</span><span class=\"mi\">0</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"mi\">99</span>\n<span class=\"n\">y</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[28]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n[[99, 1], [2, 3], [99, 1], [2, 3], [99, 1], [2, 3]]\n</pre></div></div>\n</div>\n<p>これは、<code class=\"docutils literal notranslate\"><span class=\"pre\">y</span></code> の中の複数個所にあるオブジェクトが同一だからです。 詳しくは、以下の「▲オブジェクトの等価性と同一性」を参照してください。</p>\n<p>演算子 <code class=\"docutils literal notranslate\"><span class=\"pre\">in</span></code> は、左辺の要素がリストに含まれれば <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> を、それ以外では <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code> を返します。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[29]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"mi\">10</span> <span class=\"ow\">in</span> <span class=\"n\">numbers</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[29]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nTrue\n</pre></div></div>\n</div>\n<p>リストに対する <code class=\"docutils literal notranslate\"><span class=\"pre\">in</span></code> 演算子は、論理演算 <code class=\"docutils literal notranslate\"><span class=\"pre\">or</span></code> を簡潔に記述するのに用いることもできます。 たとえば、</p>\n<div class=\"highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>a1 == 1 or a1 == 3 or a1 == 7:\n</pre></div>\n</div>\n<p>は</p>\n<div class=\"highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>a1 in [1, 3, 7]:\n</pre></div>\n</div>\n<p>と同じ結果を得られます。 <code class=\"docutils literal notranslate\"><span class=\"pre\">or</span></code> の数が多くなる場合は、<code class=\"docutils literal notranslate\"><span class=\"pre\">in</span></code> を用いた方がより読みやすいプログラムを書くことができます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[30]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">a1</span> <span class=\"o\">=</span> <span class=\"mi\">1</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">a1</span> <span class=\"o\">==</span> <span class=\"mi\">1</span> <span class=\"ow\">or</span> <span class=\"n\">a1</span> <span class=\"o\">==</span> <span class=\"mi\">3</span> <span class=\"ow\">or</span> <span class=\"n\">a1</span> <span class=\"o\">==</span> <span class=\"mi\">7</span><span class=\"p\">,</span> <span class=\"n\">a1</span> <span class=\"ow\">in</span> <span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">3</span><span class=\"p\">,</span> <span class=\"mi\">7</span><span class=\"p\">])</span>\n<span class=\"n\">a1</span> <span class=\"o\">=</span> <span class=\"mi\">3</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">a1</span> <span class=\"o\">==</span> <span class=\"mi\">1</span> <span class=\"ow\">or</span> <span class=\"n\">a1</span> <span class=\"o\">==</span> <span class=\"mi\">3</span> <span class=\"ow\">or</span> <span class=\"n\">a1</span> <span class=\"o\">==</span> <span class=\"mi\">7</span><span class=\"p\">,</span> <span class=\"n\">a1</span> <span class=\"ow\">in</span> <span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">3</span><span class=\"p\">,</span> <span class=\"mi\">7</span><span class=\"p\">])</span>\n<span class=\"n\">a1</span> <span class=\"o\">=</span> <span class=\"mi\">5</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">a1</span> <span class=\"o\">==</span> <span class=\"mi\">1</span> <span class=\"ow\">or</span> <span class=\"n\">a1</span> <span class=\"o\">==</span> <span class=\"mi\">3</span> <span class=\"ow\">or</span> <span class=\"n\">a1</span> <span class=\"o\">==</span> <span class=\"mi\">7</span><span class=\"p\">,</span> <span class=\"n\">a1</span> <span class=\"ow\">in</span> <span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">3</span><span class=\"p\">,</span> <span class=\"mi\">7</span><span class=\"p\">])</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nTrue True\nTrue True\nFalse False\n</pre></div></div>\n</div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">in</span></code> 演算子は、左辺の要素がリストに含まれるかどうかを、 リストの要素を最初から順に調べることで判定しています。 したがって、リストの長さに比例した時間がかかります。 つまり、リストの長さが大きければ、それなりの時間がかかることに注意してください。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">not</span> <span class=\"pre\">in</span></code> 演算子は、<code class=\"docutils literal notranslate\"><span class=\"pre\">in</span></code> 演算子の逆を意味します。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[31]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"mi\">10</span> <span class=\"ow\">not</span> <span class=\"ow\">in</span> <span class=\"n\">numbers</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[31]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nFalse\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[32]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"mi\">11</span> <span class=\"ow\">not</span> <span class=\"ow\">in</span> <span class=\"n\">numbers</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[32]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nTrue\n</pre></div></div>\n</div>\n</section>\n<section id=\"指定した要素のインデックス取得と数えあげ\">\n<h3>指定した要素のインデックス取得と数えあげ<a class=\"headerlink\" href=\"#指定した要素のインデックス取得と数えあげ\" title=\"Link to this heading\">¶</a></h3>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">index</span></code> メソッドは引数で指定した要素のインデックスの番号を返します。 文字列には <code class=\"docutils literal notranslate\"><span class=\"pre\">index</span></code> に加えてこれと似た <code class=\"docutils literal notranslate\"><span class=\"pre\">find</span></code> メソッドもありましたが、リストでは使えません。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[33]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">numbers</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"mi\">10</span><span class=\"p\">,</span> <span class=\"mi\">20</span><span class=\"p\">,</span> <span class=\"mi\">30</span><span class=\"p\">,</span> <span class=\"mi\">40</span><span class=\"p\">,</span> <span class=\"mi\">50</span><span class=\"p\">]</span>\n<span class=\"n\">numbers</span><span class=\"o\">.</span><span class=\"n\">index</span><span class=\"p\">(</span><span class=\"mi\">20</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[33]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n2\n</pre></div></div>\n</div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">count</span></code> メソッドは指定した要素の数を返します。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[34]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">all20</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"mi\">20</span><span class=\"p\">]</span><span class=\"o\">*</span><span class=\"mi\">3</span>\n<span class=\"n\">all20</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">(</span><span class=\"mi\">20</span><span class=\"p\">)</span> <span class=\"c1\"># 指定した要素のリスト内の数</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[34]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n3\n</pre></div></div>\n</div>\n</section>\n<section id=\"並べ替え（sort-メソッド）\">\n<h3>並べ替え（<code class=\"docutils literal notranslate\"><span class=\"pre\">sort</span></code> メソッド）<a class=\"headerlink\" href=\"#並べ替え（sort-メソッド）\" title=\"Link to this heading\">¶</a></h3>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">sort</span></code> メソッドはリスト内の要素を並べ替えます。 引数に何も指定しなければ昇順でとなります。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[35]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">numbers</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"mi\">30</span><span class=\"p\">,</span> <span class=\"mi\">50</span><span class=\"p\">,</span> <span class=\"mi\">10</span><span class=\"p\">,</span> <span class=\"mi\">20</span><span class=\"p\">,</span> <span class=\"mi\">40</span><span class=\"p\">,</span> <span class=\"mi\">60</span><span class=\"p\">]</span>\n<span class=\"n\">numbers</span><span class=\"o\">.</span><span class=\"n\">sort</span><span class=\"p\">()</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[36]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">numbers</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[36]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n[10, 20, 30, 40, 50, 60]\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[37]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">characters</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s1\">&#39;e&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;d&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;a&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;c&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;f&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;b&#39;</span><span class=\"p\">]</span>\n<span class=\"n\">characters</span><span class=\"o\">.</span><span class=\"n\">sort</span><span class=\"p\">()</span>\n<span class=\"n\">characters</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[37]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n[&#39;a&#39;, &#39;b&#39;, &#39;c&#39;, &#39;d&#39;, &#39;e&#39;, &#39;f&#39;]\n</pre></div></div>\n</div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">reverse</span> <span class=\"pre\">=</span> <span class=\"pre\">True</span></code> オプションを指定すれば、要素を降順に並べ替えることもできます。 （これは 3.3 のキーワード引数と呼ばれるものですが、ここでは天下り的に、 並べ替えの方法を指定する情報と理解しておいてください。）</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[38]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">numbers</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"mi\">30</span><span class=\"p\">,</span> <span class=\"mi\">50</span><span class=\"p\">,</span> <span class=\"mi\">10</span><span class=\"p\">,</span> <span class=\"mi\">20</span><span class=\"p\">,</span> <span class=\"mi\">40</span><span class=\"p\">,</span> <span class=\"mi\">60</span><span class=\"p\">]</span>\n<span class=\"n\">numbers</span><span class=\"o\">.</span><span class=\"n\">sort</span><span class=\"p\">(</span><span class=\"n\">reverse</span> <span class=\"o\">=</span> <span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"n\">numbers</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[38]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n[60, 50, 40, 30, 20, 10]\n</pre></div></div>\n</div>\n</section>\n<section id=\"並べ替え（sorted-組み込み関数）\">\n<h3>並べ替え（<code class=\"docutils literal notranslate\"><span class=\"pre\">sorted</span></code> 組み込み関数）<a class=\"headerlink\" href=\"#並べ替え（sorted-組み込み関数）\" title=\"Link to this heading\">¶</a></h3>\n<p>関数 <code class=\"docutils literal notranslate\"><span class=\"pre\">sorted</span></code> ではリストを引数に取って、そのリスト内の要素を昇順に並べ替えた結果をリストとして返します。</p>\n<div class=\"highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>sorted(リスト)\n</pre></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[39]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">numbers</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"mi\">30</span><span class=\"p\">,</span> <span class=\"mi\">50</span><span class=\"p\">,</span> <span class=\"mi\">10</span><span class=\"p\">,</span> <span class=\"mi\">20</span><span class=\"p\">,</span> <span class=\"mi\">40</span><span class=\"p\">,</span> <span class=\"mi\">60</span><span class=\"p\">]</span>\n<span class=\"nb\">sorted</span><span class=\"p\">(</span><span class=\"n\">numbers</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[39]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n[10, 20, 30, 40, 50, 60]\n</pre></div></div>\n</div>\n<p>文字列の比較は、いわゆる辞書順で行われます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[40]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">characters</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s1\">&#39;e&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;d&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;a&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;c&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;f&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;b&#39;</span><span class=\"p\">]</span>\n<span class=\"nb\">sorted</span><span class=\"p\">(</span><span class=\"n\">characters</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[40]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n[&#39;a&#39;, &#39;b&#39;, &#39;c&#39;, &#39;d&#39;, &#39;e&#39;, &#39;f&#39;]\n</pre></div></div>\n</div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">sorted</span></code> においても、 <code class=\"docutils literal notranslate\"><span class=\"pre\">reverse</span> <span class=\"pre\">=</span> <span class=\"pre\">True</span></code> と記述することで要素を降順に並べ替えることができます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[41]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">numbers</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"mi\">30</span><span class=\"p\">,</span> <span class=\"mi\">50</span><span class=\"p\">,</span> <span class=\"mi\">10</span><span class=\"p\">,</span> <span class=\"mi\">20</span><span class=\"p\">,</span> <span class=\"mi\">40</span><span class=\"p\">,</span> <span class=\"mi\">60</span><span class=\"p\">]</span>\n<span class=\"nb\">sorted</span><span class=\"p\">(</span><span class=\"n\">numbers</span><span class=\"p\">,</span> <span class=\"n\">reverse</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[41]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n[60, 50, 40, 30, 20, 10]\n</pre></div></div>\n</div>\n<p>ついでですが、多重リストをソートするとどのような結果が得られるか確かめてみてください。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[42]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">lns</span> <span class=\"o\">=</span> <span class=\"p\">[[</span><span class=\"mi\">20</span><span class=\"p\">,</span> <span class=\"mi\">5</span><span class=\"p\">],</span> <span class=\"p\">[</span><span class=\"mi\">10</span><span class=\"p\">,</span> <span class=\"mi\">30</span><span class=\"p\">],</span> <span class=\"p\">[</span><span class=\"mi\">40</span><span class=\"p\">,</span> <span class=\"mi\">20</span><span class=\"p\">],</span> <span class=\"p\">[</span><span class=\"mi\">30</span><span class=\"p\">,</span> <span class=\"mi\">10</span><span class=\"p\">]]</span>\n<span class=\"n\">lns</span><span class=\"o\">.</span><span class=\"n\">sort</span><span class=\"p\">()</span>\n<span class=\"n\">lns</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[42]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n[[10, 30], [20, 5], [30, 10], [40, 20]]\n</pre></div></div>\n</div>\n</section>\n</section>\n<section id=\"破壊的（インプレース）な操作と非破壊的な生成\">\n<h2>破壊的（インプレース）な操作と非破壊的な生成<a class=\"headerlink\" href=\"#破壊的（インプレース）な操作と非破壊的な生成\" title=\"Link to this heading\">¶</a></h2>\n<p>上記では、<code class=\"docutils literal notranslate\"><span class=\"pre\">sort</span></code> メソッドと <code class=\"docutils literal notranslate\"><span class=\"pre\">sorted</span></code> 関数を紹介しましたが、両者の使い方が異なることに気が付きましたか？</p>\n<p>具体的には、<code class=\"docutils literal notranslate\"><span class=\"pre\">sort</span></code> メソッドでは元のリストが変更されています。 一方、<code class=\"docutils literal notranslate\"><span class=\"pre\">sorted</span></code> 関数では元のリストはそのままになっています。もう一度確認してみましょう。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[43]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">numbers</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"mi\">30</span><span class=\"p\">,</span> <span class=\"mi\">50</span><span class=\"p\">,</span> <span class=\"mi\">10</span><span class=\"p\">,</span> <span class=\"mi\">20</span><span class=\"p\">,</span> <span class=\"mi\">40</span><span class=\"p\">,</span> <span class=\"mi\">60</span><span class=\"p\">]</span>\n<span class=\"n\">numbers</span><span class=\"o\">.</span><span class=\"n\">sort</span><span class=\"p\">()</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s1\">&#39;sortメソッドの実行後の元のリスト:&#39;</span><span class=\"p\">,</span> <span class=\"n\">numbers</span><span class=\"p\">)</span>\n<span class=\"n\">numbers</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"mi\">30</span><span class=\"p\">,</span> <span class=\"mi\">50</span><span class=\"p\">,</span> <span class=\"mi\">10</span><span class=\"p\">,</span> <span class=\"mi\">20</span><span class=\"p\">,</span> <span class=\"mi\">40</span><span class=\"p\">,</span> <span class=\"mi\">60</span><span class=\"p\">]</span>\n<span class=\"nb\">sorted</span><span class=\"p\">(</span><span class=\"n\">numbers</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s1\">&#39;sorted関数の実行後の元のリスト:&#39;</span><span class=\"p\">,</span> <span class=\"n\">numbers</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nsortメソッドの実行後の元のリスト: [10, 20, 30, 40, 50, 60]\nsorted関数の実行後の元のリスト: [30, 50, 10, 20, 40, 60]\n</pre></div></div>\n</div>\n<p>このように、<code class=\"docutils literal notranslate\"><span class=\"pre\">sort</span></code> メソッドは元のリストを変更してしまいます。 このような操作を<strong>破壊的</strong>あるいは<strong>インプレース</strong> (<strong>in-place</strong>) であるといいます。</p>\n<p>一方、<code class=\"docutils literal notranslate\"><span class=\"pre\">sorted</span></code> 関数は新しいリストを生成し元のリストを破壊しません、このような操作は<strong>非破壊的</strong>であるといいます。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">sorted</span></code> 関数を用いた場合、その返値（並べ替えの結果）は新しい変数に代入して使うことができます。</p>\n<p>一方、<code class=\"docutils literal notranslate\"><span class=\"pre\">sort</span></code> メソッドはリストを返さないためそのような使い方はできません。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[44]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">numbers</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"mi\">30</span><span class=\"p\">,</span> <span class=\"mi\">50</span><span class=\"p\">,</span> <span class=\"mi\">10</span><span class=\"p\">,</span> <span class=\"mi\">20</span><span class=\"p\">,</span> <span class=\"mi\">40</span><span class=\"p\">,</span> <span class=\"mi\">60</span><span class=\"p\">]</span>\n<span class=\"n\">numbers1</span> <span class=\"o\">=</span> <span class=\"nb\">sorted</span><span class=\"p\">(</span><span class=\"n\">numbers</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s1\">&#39;sorted関数の返値:&#39;</span><span class=\"p\">,</span> <span class=\"n\">numbers1</span><span class=\"p\">)</span>\n\n<span class=\"n\">numbers</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"mi\">30</span><span class=\"p\">,</span> <span class=\"mi\">50</span><span class=\"p\">,</span> <span class=\"mi\">10</span><span class=\"p\">,</span> <span class=\"mi\">20</span><span class=\"p\">,</span> <span class=\"mi\">40</span><span class=\"p\">,</span> <span class=\"mi\">60</span><span class=\"p\">]</span>\n<span class=\"n\">numbers2</span> <span class=\"o\">=</span> <span class=\"n\">numbers</span><span class=\"o\">.</span><span class=\"n\">sort</span><span class=\"p\">()</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s1\">&#39;sortメソッドの返値:&#39;</span><span class=\"p\">,</span> <span class=\"n\">numbers2</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nsorted関数の返値: [10, 20, 30, 40, 50, 60]\nsortメソッドの返値: None\n</pre></div></div>\n</div>\n</section>\n<section id=\"リストを操作するメソッドなど\">\n<h2>リストを操作するメソッドなど<a class=\"headerlink\" href=\"#リストを操作するメソッドなど\" title=\"Link to this heading\">¶</a></h2>\n<p>ここからはリストを操作するためのメソッドなどを紹介していきます。</p>\n<p>メソッドや組み込み関数が破壊的であるかどうかは、一般にその名称などからは判断できません。 それぞれ破壊的かどうか理解してから利用しなければなりません。</p>\n<p>なお、次の <code class=\"docutils literal notranslate\"><span class=\"pre\">append</span></code> メソッド以外は、必要に応じて参照すればよく、 それ以降タプルの項まで飛ばして構いません。</p>\n<section id=\"リストに要素を追加する\">\n<h3>リストに要素を追加する<a class=\"headerlink\" href=\"#リストに要素を追加する\" title=\"Link to this heading\">¶</a></h3>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">append</span></code> メソッドはリストの最後尾に指定した要素を付け加えます。</p>\n<div class=\"highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>リスト.append(追加する要素)\n</pre></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[45]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">numbers</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"mi\">10</span><span class=\"p\">,</span> <span class=\"mi\">20</span><span class=\"p\">,</span> <span class=\"mi\">30</span><span class=\"p\">,</span> <span class=\"mi\">40</span><span class=\"p\">,</span> <span class=\"mi\">50</span><span class=\"p\">]</span>\n<span class=\"n\">numbers</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"mi\">100</span><span class=\"p\">)</span>\n<span class=\"n\">numbers</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[45]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n[10, 20, 30, 40, 50, 100]\n</pre></div></div>\n</div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">append</span></code> は、上述した空のリストと組み合わせて、あるリストから特定の条件を満たす要素のみからなる新たなリストを構成する、というような状況でしばしば用いられます。たとえば、リスト <code class=\"docutils literal notranslate\"><span class=\"pre\">numbers1</span> <span class=\"pre\">=</span> <span class=\"pre\">[10,</span> <span class=\"pre\">-10,</span> <span class=\"pre\">20,</span> <span class=\"pre\">30,</span> <span class=\"pre\">-20,</span> <span class=\"pre\">40,</span> <span class=\"pre\">-30]</span></code> から <code class=\"docutils literal notranslate\"><span class=\"pre\">0</span></code> より大きい要素のみを抜き出したリスト <code class=\"docutils literal notranslate\"><span class=\"pre\">positives</span></code> は次のように構成することができます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[46]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">numbers1</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"mi\">10</span><span class=\"p\">,</span> <span class=\"o\">-</span><span class=\"mi\">10</span><span class=\"p\">,</span> <span class=\"mi\">20</span><span class=\"p\">,</span> <span class=\"mi\">30</span><span class=\"p\">,</span> <span class=\"o\">-</span><span class=\"mi\">20</span><span class=\"p\">,</span> <span class=\"mi\">40</span><span class=\"p\">,</span> <span class=\"o\">-</span><span class=\"mi\">30</span><span class=\"p\">]</span>\n<span class=\"n\">positives</span> <span class=\"o\">=</span> <span class=\"p\">[]</span> <span class=\"c1\"># 空のリストを作成する</span>\n<span class=\"n\">positives</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">numbers1</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">])</span>\n<span class=\"n\">positives</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">numbers1</span><span class=\"p\">[</span><span class=\"mi\">2</span><span class=\"p\">])</span>\n<span class=\"n\">positives</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">numbers1</span><span class=\"p\">[</span><span class=\"mi\">3</span><span class=\"p\">])</span>\n<span class=\"n\">positives</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">numbers1</span><span class=\"p\">[</span><span class=\"mi\">5</span><span class=\"p\">])</span>\n<span class=\"n\">positives</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[46]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n[10, 20, 30, 40]\n</pre></div></div>\n</div>\n</section>\n<section id=\"▲リストにリストの要素を追加する\">\n<h3>▲リストにリストの要素を追加する<a class=\"headerlink\" href=\"#▲リストにリストの要素を追加する\" title=\"Link to this heading\">¶</a></h3>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">extend</span></code> メソッドはリストの最後尾に指定したリストの要素を付け加えます。</p>\n<div class=\"highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>リスト.extend(追加するリスト)\n</pre></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[47]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">numbers</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"mi\">10</span><span class=\"p\">,</span> <span class=\"mi\">20</span><span class=\"p\">,</span> <span class=\"mi\">30</span><span class=\"p\">,</span> <span class=\"mi\">40</span><span class=\"p\">,</span> <span class=\"mi\">50</span><span class=\"p\">]</span>\n<span class=\"n\">numbers</span><span class=\"o\">.</span><span class=\"n\">extend</span><span class=\"p\">([</span><span class=\"mi\">200</span><span class=\"p\">,</span> <span class=\"mi\">300</span><span class=\"p\">,</span> <span class=\"mi\">400</span><span class=\"p\">,</span> <span class=\"mi\">200</span><span class=\"p\">])</span> <span class=\"c1\"># numbers += [200, 300, 400, 200] と同じ</span>\n<span class=\"n\">numbers</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[47]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n[10, 20, 30, 40, 50, 200, 300, 400, 200]\n</pre></div></div>\n</div>\n</section>\n<section id=\"▲リストに要素を挿入する\">\n<h3>▲リストに要素を挿入する<a class=\"headerlink\" href=\"#▲リストに要素を挿入する\" title=\"Link to this heading\">¶</a></h3>\n<p><strong>insert</strong> メソッドはリストのインデックスを指定した位置に新しい要素を挿入します。</p>\n<div class=\"highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>リスト.insert(インデックス, 新しい要素)\n</pre></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[48]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">numbers</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"mi\">10</span><span class=\"p\">,</span> <span class=\"mi\">20</span><span class=\"p\">,</span> <span class=\"mi\">30</span><span class=\"p\">,</span> <span class=\"mi\">40</span><span class=\"p\">,</span> <span class=\"mi\">50</span><span class=\"p\">]</span>\n<span class=\"n\">numbers</span><span class=\"o\">.</span><span class=\"n\">insert</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">1000</span><span class=\"p\">)</span>\n<span class=\"n\">numbers</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[48]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n[10, 1000, 20, 30, 40, 50]\n</pre></div></div>\n</div>\n</section>\n<section id=\"▲リストから要素を削除する\">\n<h3>▲リストから要素を削除する<a class=\"headerlink\" href=\"#▲リストから要素を削除する\" title=\"Link to this heading\">¶</a></h3>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">remove</span></code> メソッドは指定した要素をリストから削除します。</p>\n<div class=\"highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>リスト.remove(削除したい要素)\n</pre></div>\n</div>\n<p>ただし、指定した要素が複数個リストに含まれる場合、一番最初の要素が削除されます。また、指定した値がリストに含まれない場合はエラーとなります。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[49]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">numbers</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"mi\">10</span><span class=\"p\">,</span> <span class=\"mi\">20</span><span class=\"p\">,</span> <span class=\"mi\">30</span><span class=\"p\">,</span> <span class=\"mi\">40</span><span class=\"p\">,</span> <span class=\"mi\">20</span><span class=\"p\">]</span>\n<span class=\"n\">numbers</span><span class=\"o\">.</span><span class=\"n\">remove</span><span class=\"p\">(</span><span class=\"mi\">30</span><span class=\"p\">)</span> <span class=\"c1\"># 指定した要素を削除</span>\n<span class=\"n\">numbers</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[49]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n[10, 20, 40, 20]\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[50]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">numbers</span><span class=\"o\">.</span><span class=\"n\">remove</span><span class=\"p\">(</span><span class=\"mi\">20</span><span class=\"p\">)</span> <span class=\"c1\"># 指定した要素が複数個リストに含まれる場合、一番最初の要素を削除</span>\n<span class=\"n\">numbers</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[50]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n[10, 40, 20]\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[51]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">numbers</span><span class=\"o\">.</span><span class=\"n\">remove</span><span class=\"p\">(</span><span class=\"mi\">100</span><span class=\"p\">)</span> <span class=\"c1\"># リストに含まれない値を指定するとエラー</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n<span class=\"ansi-red-fg\">---------------------------------------------------------------------------</span>\n<span class=\"ansi-red-fg\">ValueError</span>                                Traceback (most recent call last)\nCell <span class=\"ansi-green-fg\">In[51], line 1</span>\n<span class=\"ansi-green-fg\">----&gt; 1</span> <span class=\"ansi-yellow-bg\">numbers</span><span class=\"ansi-yellow-bg\" style=\"color: rgb(98,98,98)\">.</span><span class=\"ansi-yellow-bg\">remove</span><span class=\"ansi-yellow-bg\">(</span><span class=\"ansi-yellow-bg\" style=\"color: rgb(98,98,98)\">100</span><span class=\"ansi-yellow-bg\">)</span> <span style=\"color: rgb(95,135,135)\"># リストに含まれない値を指定するとエラー</span>\n\n<span class=\"ansi-red-fg\">ValueError</span>: list.remove(x): x not in list\n</pre></div></div>\n</div>\n</section>\n<section id=\"▲リストからインデックスで指定した要素を削除する\">\n<h3>▲リストからインデックスで指定した要素を削除する<a class=\"headerlink\" href=\"#▲リストからインデックスで指定した要素を削除する\" title=\"Link to this heading\">¶</a></h3>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">pop</span></code> メソッドはリストから指定したインデックスを削除し、その要素を返します。</p>\n<div class=\"highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>リスト.pop(削除したい要素のインデックス)\n</pre></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[52]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">numbers</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"mi\">10</span><span class=\"p\">,</span> <span class=\"mi\">20</span><span class=\"p\">,</span> <span class=\"mi\">20</span><span class=\"p\">,</span> <span class=\"mi\">30</span><span class=\"p\">,</span> <span class=\"mi\">20</span><span class=\"p\">,</span> <span class=\"mi\">40</span><span class=\"p\">]</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">numbers</span><span class=\"o\">.</span><span class=\"n\">pop</span><span class=\"p\">(</span><span class=\"mi\">3</span><span class=\"p\">))</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">numbers</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n30\n[10, 20, 20, 20, 40]\n</pre></div></div>\n</div>\n<p>インデックスを指定しない場合、最後尾の要素を削除して返します。</p>\n<div class=\"highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>リスト.pop()\n</pre></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[53]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">ln</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"mi\">10</span><span class=\"p\">,</span> <span class=\"mi\">20</span><span class=\"p\">,</span> <span class=\"mi\">30</span><span class=\"p\">,</span> <span class=\"mi\">20</span><span class=\"p\">,</span> <span class=\"mi\">40</span><span class=\"p\">]</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">ln</span><span class=\"o\">.</span><span class=\"n\">pop</span><span class=\"p\">())</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">ln</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n40\n[10, 20, 30, 20]\n</pre></div></div>\n</div>\n</section>\n<section id=\"▲リスト要素を削除する\">\n<h3>▲リスト要素を削除する<a class=\"headerlink\" href=\"#▲リスト要素を削除する\" title=\"Link to this heading\">¶</a></h3>\n<div class=\"line-block\">\n<div class=\"line\"><code class=\"docutils literal notranslate\"><span class=\"pre\">del</span></code> 文は指定するリストの要素を削除します。具体的には以下のように削除したい要素をインデックスで指定します。</div>\n<div class=\"line\"><code class=\"docutils literal notranslate\"><span class=\"pre\">del</span></code> も破壊的であることに注意してください。</div>\n</div>\n<div class=\"highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>del リスト[x]\n</pre></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[54]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">numbers</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"mi\">10</span><span class=\"p\">,</span> <span class=\"mi\">20</span><span class=\"p\">,</span> <span class=\"mi\">30</span><span class=\"p\">,</span> <span class=\"mi\">40</span><span class=\"p\">,</span> <span class=\"mi\">50</span><span class=\"p\">]</span>\n<span class=\"k\">del</span> <span class=\"n\">numbers</span><span class=\"p\">[</span><span class=\"mi\">2</span><span class=\"p\">]</span>\n<span class=\"n\">numbers</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[54]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n[10, 20, 40, 50]\n</pre></div></div>\n</div>\n<p>スライスを使うことも可能です。</p>\n<div class=\"highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>del リスト[x:y]\n</pre></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[55]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">numbers</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"mi\">10</span><span class=\"p\">,</span> <span class=\"mi\">20</span><span class=\"p\">,</span> <span class=\"mi\">30</span><span class=\"p\">,</span> <span class=\"mi\">40</span><span class=\"p\">,</span> <span class=\"mi\">50</span><span class=\"p\">]</span>\n<span class=\"k\">del</span> <span class=\"n\">numbers</span><span class=\"p\">[</span><span class=\"mi\">2</span><span class=\"p\">:</span><span class=\"mi\">4</span><span class=\"p\">]</span>\n<span class=\"n\">numbers</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[55]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n[10, 20, 50]\n</pre></div></div>\n</div>\n</section>\n<section id=\"▲リストの要素を逆順にする\">\n<h3>▲リストの要素を逆順にする<a class=\"headerlink\" href=\"#▲リストの要素を逆順にする\" title=\"Link to this heading\">¶</a></h3>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">reverse</span></code> メソッドはリスト内の要素の順序を逆順にします。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[56]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">characters</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s1\">&#39;e&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;d&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;a&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;c&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;f&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;b&#39;</span><span class=\"p\">]</span>\n<span class=\"n\">characters</span><span class=\"o\">.</span><span class=\"n\">reverse</span><span class=\"p\">()</span>\n<span class=\"n\">characters</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[56]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n[&#39;b&#39;, &#39;f&#39;, &#39;c&#39;, &#39;a&#39;, &#39;d&#39;, &#39;e&#39;]\n</pre></div></div>\n</div>\n</section>\n<section id=\"▲-copy\">\n<h3>▲ <code class=\"docutils literal notranslate\"><span class=\"pre\">copy</span></code><a class=\"headerlink\" href=\"#▲-copy\" title=\"Link to this heading\">¶</a></h3>\n<p>リストを複製します。 すなわち、<code class=\"docutils literal notranslate\"><span class=\"pre\">ln</span></code> の値がリストであるとき、<code class=\"docutils literal notranslate\"><span class=\"pre\">ln.copy()</span></code> は <code class=\"docutils literal notranslate\"><span class=\"pre\">ln</span></code> と同じ長さのリストを新たに作って、 <code class=\"docutils literal notranslate\"><span class=\"pre\">ln</span></code> の要素を新しいリストに同じ順番で格納して、その新しいリストを返します。</p>\n<p>複製されたリストに変更を加えたとしても、もとのリストは影響を受けません。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[57]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">numbers</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"mi\">10</span><span class=\"p\">,</span> <span class=\"mi\">20</span><span class=\"p\">,</span> <span class=\"mi\">30</span><span class=\"p\">,</span> <span class=\"mi\">40</span><span class=\"p\">,</span> <span class=\"mi\">50</span><span class=\"p\">]</span>\n<span class=\"n\">numbers2</span> <span class=\"o\">=</span> <span class=\"n\">numbers</span><span class=\"o\">.</span><span class=\"n\">copy</span><span class=\"p\">()</span>\n<span class=\"k\">del</span> <span class=\"n\">numbers</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">:</span><span class=\"mi\">3</span><span class=\"p\">]</span>\n<span class=\"n\">numbers</span><span class=\"o\">.</span><span class=\"n\">reverse</span><span class=\"p\">()</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">numbers</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">numbers2</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n[50, 40, 10]\n[10, 20, 30, 40, 50]\n</pre></div></div>\n</div>\n<p>一方、代入を用いた場合には影響を受けることに注意してください。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[58]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">numbers</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"mi\">10</span><span class=\"p\">,</span> <span class=\"mi\">20</span><span class=\"p\">,</span> <span class=\"mi\">30</span><span class=\"p\">,</span> <span class=\"mi\">40</span><span class=\"p\">,</span> <span class=\"mi\">50</span><span class=\"p\">]</span>\n<span class=\"n\">numbers2</span> <span class=\"o\">=</span> <span class=\"n\">numbers</span>\n<span class=\"k\">del</span> <span class=\"n\">numbers</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">:</span><span class=\"mi\">3</span><span class=\"p\">]</span>\n<span class=\"n\">numbers</span><span class=\"o\">.</span><span class=\"n\">reverse</span><span class=\"p\">()</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">numbers</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">numbers2</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n[50, 40, 10]\n[50, 40, 10]\n</pre></div></div>\n</div>\n</section>\n</section>\n<section id=\"リストと文字列の相互変換\">\n<h2>リストと文字列の相互変換<a class=\"headerlink\" href=\"#リストと文字列の相互変換\" title=\"Link to this heading\">¶</a></h2>\n<p>文字列は変更不可能である一方、リスト変更可能です。 そのため、文字列処理をする際は、文字列のリストに一旦変換してから、変更を加えて、文字列に変換することが典型的です。 ここでは、文字列とリストの相互変換の方法を示します。</p>\n<p>まず、文字列 <code class=\"docutils literal notranslate\"><span class=\"pre\">s</span></code> を <code class=\"docutils literal notranslate\"><span class=\"pre\">list</span></code> 関数に渡すと、<code class=\"docutils literal notranslate\"><span class=\"pre\">s</span></code> を文字単位で区切ったリストが得られます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[59]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">list</span><span class=\"p\">(</span><span class=\"s1\">&#39;abc123&#39;</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[59]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n[&#39;a&#39;, &#39;b&#39;, &#39;c&#39;, &#39;1&#39;, &#39;2&#39;, &#39;3&#39;]\n</pre></div></div>\n</div>\n<p>文字単位ではなく、指定された文字列で区切ってリストにする際は、 <code class=\"docutils literal notranslate\"><span class=\"pre\">split</span></code> メソッドを使います。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[60]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"s1\">&#39;banana&#39;</span><span class=\"o\">.</span><span class=\"n\">split</span><span class=\"p\">(</span><span class=\"s1\">&#39;n&#39;</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[60]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n[&#39;ba&#39;, &#39;a&#39;, &#39;a&#39;]\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[61]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"s1\">&#39;A and B and C&#39;</span><span class=\"o\">.</span><span class=\"n\">split</span><span class=\"p\">(</span><span class=\"s1\">&#39; and &#39;</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[61]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n[&#39;A&#39;, &#39;B&#39;, &#39;C&#39;]\n</pre></div></div>\n</div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">split</span></code> を無引数で呼び出すと、連続した空白文字を区切りと見做します。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[62]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"s1\">&#39;A   B</span><span class=\"se\">\\n</span><span class=\"s1\">C  &#39;</span><span class=\"o\">.</span><span class=\"n\">split</span><span class=\"p\">()</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[62]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n[&#39;A&#39;, &#39;B&#39;, &#39;C&#39;]\n</pre></div></div>\n</div>\n<p>逆に、文字のリストを連結して1つの文字列にする際は、 <code class=\"docutils literal notranslate\"><span class=\"pre\">join</span></code> メソッドを次のように使います。</p>\n<div class=\"highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>接合点に挿入する文字列.join(文字列のリスト)\n</pre></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[63]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"s1\">&#39;&#39;</span><span class=\"o\">.</span><span class=\"n\">join</span><span class=\"p\">([</span><span class=\"s1\">&#39;a&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;b&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;c&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;1&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;2&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;3&#39;</span><span class=\"p\">])</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[63]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n&#39;abc123&#39;\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[64]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"s1\">&#39;n&#39;</span><span class=\"o\">.</span><span class=\"n\">join</span><span class=\"p\">([</span><span class=\"s1\">&#39;ba&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;a&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;a&#39;</span><span class=\"p\">])</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[64]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n&#39;banana&#39;\n</pre></div></div>\n</div>\n<p>なお、 <code class=\"docutils literal notranslate\"><span class=\"pre\">join</span></code> の引数は、文字列のリストだけでなく、文字列のタプルでも問題ありません。 タプルについては、次で述べます。</p>\n<section id=\"id18\">\n<h3>練習<a class=\"headerlink\" href=\"#id18\" title=\"Link to this heading\">¶</a></h3>\n<p>emailアドレス <code class=\"docutils literal notranslate\"><span class=\"pre\">email</span></code> とドメイン名 <code class=\"docutils literal notranslate\"><span class=\"pre\">domain</span></code> を引数に取って、<code class=\"docutils literal notranslate\"><span class=\"pre\">email</span></code> のドメイン名を <code class=\"docutils literal notranslate\"><span class=\"pre\">domain</span></code> に置き換える関数 <code class=\"docutils literal notranslate\"><span class=\"pre\">change_domain(email,</span> <span class=\"pre\">domain)</span></code> を作成してください。 なお、emailアドレスのドメイン名とは、 <code class=\"docutils literal notranslate\"><span class=\"pre\">'&#64;'</span></code> で区切られた右側の部分を意味します。</p>\n<p>次のセルの <code class=\"docutils literal notranslate\"><span class=\"pre\">...</span></code> のところを書き換えて <code class=\"docutils literal notranslate\"><span class=\"pre\">change_domain(email,</span> <span class=\"pre\">domain)</span></code> を完成させてください。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[65]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">def</span> <span class=\"nf\">change_domain</span><span class=\"p\">(</span><span class=\"n\">email</span><span class=\"p\">,</span> <span class=\"n\">domain</span><span class=\"p\">):</span>\n    <span class=\"o\">...</span>\n</pre></div>\n</div>\n</div>\n<p>上のセルで解答を作成した後、以下のセルを実行し、実行結果が <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> になることを確認してください。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[66]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">change_domain</span><span class=\"p\">(</span><span class=\"s1\">&#39;spam@utokyo-ipp.org&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;ipp.u-tokyo.ac.jp&#39;</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;spam@ipp.u-tokyo.ac.jp&#39;</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nFalse\n</pre></div></div>\n</div>\n</section>\n</section>\n<section id=\"タプル-(tuple)\">\n<h2>タプル (tuple)<a class=\"headerlink\" href=\"#タプル-(tuple)\" title=\"Link to this heading\">¶</a></h2>\n<p><strong>タプル</strong>は、リストと同じようにデータの並びであり、あらゆる種類のデータを要素にできます。 ただし、リストと違ってタプルは一度設定した要素を変更できません（文字列も同様でした）。 すなわち、タプルは変更不可能なデータです。 したがって、リストの項で説明したメソッドの多く、要素を操作するもの、は適用できないのですが、 逆にいうと、作成した後で要素を変更する必要がない場合は、 タプルの方が実装の効率がよいので、リストよりもタプルを使うべきです。</p>\n<p>たとえば、関数が複数の値をリストにして返し、呼び出し側がすぐにリストをばらばらにして値を取り出すような場合は、 リストよりもタプルを使うべきです。 また、平面上の点を表そうとするとき、x座標とy座標を別々に変化させる必要がなければ、 <code class=\"docutils literal notranslate\"><span class=\"pre\">(3,</span> <span class=\"pre\">5)</span></code> のようなタプルを使うのが自然です。 このように、タプルを作成するには数学におけるのと同様に要素を丸括弧 <code class=\"docutils literal notranslate\"><span class=\"pre\">(...)</span></code> で囲みます。</p>\n<p>例を見ましょう。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[67]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">x</span> <span class=\"o\">=</span> <span class=\"mi\">3</span>\n<span class=\"n\">y</span> <span class=\"o\">=</span> <span class=\"mi\">5</span>\n<span class=\"n\">point</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">,</span> <span class=\"n\">y</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[68]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">point</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[68]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n(3, 5)\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[69]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">type</span><span class=\"p\">(</span><span class=\"n\">point</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[69]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\ntuple\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[70]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">numbers3</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"mi\">3</span><span class=\"p\">)</span>\n<span class=\"n\">numbers3</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[70]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n(1, 2, 3)\n</pre></div></div>\n</div>\n<p>実は、丸括弧なしでもタプルを作成できます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[71]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">numbers3</span> <span class=\"o\">=</span> <span class=\"mi\">1</span><span class=\"p\">,</span><span class=\"mi\">2</span><span class=\"p\">,</span><span class=\"mi\">3</span>\n<span class=\"n\">numbers3</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[71]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n(1, 2, 3)\n</pre></div></div>\n</div>\n<p>要素が1つだけの場合は、 <code class=\"docutils literal notranslate\"><span class=\"pre\">t</span> <span class=\"pre\">=</span> <span class=\"pre\">(1)</span></code> ではなく、次のようにします。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[72]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">onlyone</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">,)</span>\n<span class=\"n\">onlyone</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[72]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n(1,)\n</pre></div></div>\n</div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">t</span> <span class=\"pre\">=</span> <span class=\"pre\">(1)</span></code> だと、<code class=\"docutils literal notranslate\"><span class=\"pre\">t</span> <span class=\"pre\">=</span> <span class=\"pre\">1</span></code> と同じになってしまいます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[73]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">onlyone</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n<span class=\"n\">onlyone</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[73]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n1\n</pre></div></div>\n</div>\n<p>何も要素を格納していないタプル（<strong>空タプル</strong>）は <code class=\"docutils literal notranslate\"><span class=\"pre\">()</span></code> で作成できます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[74]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">empty</span> <span class=\"o\">=</span> <span class=\"p\">()</span>\n<span class=\"n\">empty</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[74]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n()\n</pre></div></div>\n</div>\n<p>リストや文字列と同様に、インデックスや組み込み関数を使った操作が可能です。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[75]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">numbers3</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"mi\">3</span><span class=\"p\">)</span>\n<span class=\"n\">numbers3</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">]</span> <span class=\"c1\"># インデックスの指定による値の取得</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[75]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n2\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[76]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">numbers3</span><span class=\"p\">)</span> <span class=\"c1\"># lenはタプルを構成する要素の数</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[76]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n3\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[77]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">numbers3</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">:</span><span class=\"mi\">3</span><span class=\"p\">]</span> <span class=\"c1\"># スライス</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[77]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n(2, 3)\n</pre></div></div>\n</div>\n<p>上述しましたが、一度作成したタプルの要素を後から変更することはできません。 したがって以下のプログラムはエラーとなります。</p>\n<div class=\"highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>numbers3 = (1, 2, 3)\nnumbers3[1] = 5\n</pre></div>\n</div>\n<p>組み込み関数 <code class=\"docutils literal notranslate\"><span class=\"pre\">list</span></code> を使って、タプルをリストに変換できます。 （<code class=\"docutils literal notranslate\"><span class=\"pre\">list</span></code> はリストのデータ型でもあります。）</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[78]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">numbers3</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"mi\">3</span><span class=\"p\">)</span>\n<span class=\"nb\">list</span><span class=\"p\">(</span><span class=\"n\">numbers3</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[78]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n[1, 2, 3]\n</pre></div></div>\n</div>\n<p>組み込み関数 <code class=\"docutils literal notranslate\"><span class=\"pre\">tuple</span></code> を使って、逆にリストをタプルに変換できます。 （<code class=\"docutils literal notranslate\"><span class=\"pre\">tuple</span></code> はタプルのデータ型でもあります。）</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[79]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">numbers2</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">]</span>\n<span class=\"nb\">tuple</span><span class=\"p\">(</span><span class=\"n\">numbers2</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[79]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n(1, 2)\n</pre></div></div>\n</div>\n</section>\n<section id=\"id19\">\n<h2>練習<a class=\"headerlink\" href=\"#id19\" title=\"Link to this heading\">¶</a></h2>\n<p>整数の要素からなるリスト <code class=\"docutils literal notranslate\"><span class=\"pre\">ln</span></code> を引数として取り、 <code class=\"docutils literal notranslate\"><span class=\"pre\">ln</span></code> に含まれる要素を逆順に格納したタプルを返す関数 <code class=\"docutils literal notranslate\"><span class=\"pre\">reverse_totuple</span></code> を作成してください。</p>\n<p>以下のセルの <code class=\"docutils literal notranslate\"><span class=\"pre\">...</span></code> のところを書き換えて <code class=\"docutils literal notranslate\"><span class=\"pre\">reverse_totuple(ln)</span></code> を作成してください。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[80]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">def</span> <span class=\"nf\">reverse_totuple</span><span class=\"p\">(</span><span class=\"n\">ln</span><span class=\"p\">):</span>\n    <span class=\"o\">...</span>\n</pre></div>\n</div>\n</div>\n<p>上のセルで解答を作成した後、以下のセルを実行し、実行結果が <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> になることを確認してください。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[81]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">reverse_totuple</span><span class=\"p\">([</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"mi\">3</span><span class=\"p\">,</span> <span class=\"mi\">4</span><span class=\"p\">,</span> <span class=\"mi\">5</span><span class=\"p\">])</span> <span class=\"o\">==</span> <span class=\"p\">(</span><span class=\"mi\">5</span><span class=\"p\">,</span> <span class=\"mi\">4</span><span class=\"p\">,</span> <span class=\"mi\">3</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">))</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nFalse\n</pre></div></div>\n</div>\n</section>\n<section id=\"多重代入\">\n<h2>多重代入<a class=\"headerlink\" href=\"#多重代入\" title=\"Link to this heading\">¶</a></h2>\n<p><strong>多重代入</strong>では、左辺に複数の変数などを指定してタプルやリストの全ての要素を一度の操作で代入することができます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[82]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">numbers</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"mi\">10</span><span class=\"p\">,</span> <span class=\"mi\">20</span><span class=\"p\">,</span> <span class=\"mi\">30</span><span class=\"p\">,</span> <span class=\"mi\">40</span><span class=\"p\">]</span>\n<span class=\"p\">[</span><span class=\"n\">a</span><span class=\"p\">,</span> <span class=\"n\">b</span><span class=\"p\">,</span> <span class=\"n\">c</span><span class=\"p\">,</span> <span class=\"n\">d</span><span class=\"p\">,</span> <span class=\"n\">e</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">numbers</span>\n<span class=\"n\">b</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[82]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n10\n</pre></div></div>\n</div>\n<p>以下のようにしても同じ結果を得られます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[83]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">a</span><span class=\"p\">,</span> <span class=\"n\">b</span><span class=\"p\">,</span> <span class=\"n\">c</span><span class=\"p\">,</span> <span class=\"n\">d</span><span class=\"p\">,</span> <span class=\"n\">e</span> <span class=\"o\">=</span> <span class=\"n\">numbers</span>\n<span class=\"n\">b</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[83]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n10\n</pre></div></div>\n</div>\n<p>多重代入は文字列に対しても実行可能です。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[84]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">a</span><span class=\"p\">,</span> <span class=\"n\">b</span><span class=\"p\">,</span> <span class=\"n\">c</span><span class=\"p\">,</span> <span class=\"n\">d</span><span class=\"p\">,</span> <span class=\"n\">e</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;hello&#39;</span>\n<span class=\"n\">d</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[84]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n&#39;l&#39;\n</pre></div></div>\n</div>\n<p>タプルに対しても実行可能です。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[85]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">numbers3</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"mi\">3</span><span class=\"p\">)</span>\n<span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">,</span><span class=\"n\">y</span><span class=\"p\">,</span><span class=\"n\">z</span><span class=\"p\">)</span> <span class=\"o\">=</span> <span class=\"n\">numbers3</span>\n<span class=\"n\">y</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[85]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n2\n</pre></div></div>\n</div>\n<p>以下のように様々な書き方が可能です。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[86]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">x</span><span class=\"p\">,</span><span class=\"n\">y</span><span class=\"p\">,</span><span class=\"n\">z</span> <span class=\"o\">=</span> <span class=\"n\">numbers3</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">y</span><span class=\"p\">)</span>\n<span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">,</span><span class=\"n\">y</span><span class=\"p\">,</span><span class=\"n\">z</span><span class=\"p\">)</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"mi\">3</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">y</span><span class=\"p\">)</span>\n<span class=\"n\">x</span><span class=\"p\">,</span><span class=\"n\">y</span><span class=\"p\">,</span><span class=\"n\">z</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"mi\">3</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">y</span><span class=\"p\">)</span>\n<span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">,</span><span class=\"n\">y</span><span class=\"p\">,</span><span class=\"n\">z</span><span class=\"p\">)</span> <span class=\"o\">=</span> <span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"mi\">3</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">y</span><span class=\"p\">)</span>\n<span class=\"n\">x</span><span class=\"p\">,</span><span class=\"n\">y</span><span class=\"p\">,</span><span class=\"n\">z</span> <span class=\"o\">=</span> <span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"mi\">3</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">y</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n2\n2\n2\n2\n2\n</pre></div></div>\n</div>\n<p>多重代入を使うことで、2つの変数に格納された値の入れ替えを行う手続きはしばしば用いられます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[87]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">x</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;apple&#39;</span>\n<span class=\"n\">y</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;pen&#39;</span>\n<span class=\"n\">x</span><span class=\"p\">,</span> <span class=\"n\">y</span> <span class=\"o\">=</span> <span class=\"n\">y</span><span class=\"p\">,</span> <span class=\"n\">x</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">,</span> <span class=\"n\">y</span><span class=\"p\">)</span> <span class=\"c1\">#w = x; x = y; y = w と同じ結果が得られる</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\npen apple\n</pre></div></div>\n</div>\n</section>\n<section id=\"リストやタプルの比較演算\">\n<h2>リストやタプルの比較演算<a class=\"headerlink\" href=\"#リストやタプルの比較演算\" title=\"Link to this heading\">¶</a></h2>\n<p>数値などを比較するのに用いた比較演算子を用いて、2つのリストやタプルを比較することもできます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[88]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">print</span><span class=\"p\">([</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"mi\">3</span><span class=\"p\">]</span> <span class=\"o\">==</span> <span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"mi\">3</span><span class=\"p\">])</span>\n<span class=\"nb\">print</span><span class=\"p\">([</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">]</span> <span class=\"o\">==</span> <span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"mi\">3</span><span class=\"p\">])</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nTrue\nFalse\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[89]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">print</span><span class=\"p\">((</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"mi\">3</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"mi\">3</span><span class=\"p\">))</span>\n<span class=\"nb\">print</span><span class=\"p\">((</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"mi\">3</span><span class=\"p\">))</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nTrue\nFalse\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[90]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">print</span><span class=\"p\">([</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"mi\">3</span><span class=\"p\">]</span> <span class=\"o\">!=</span> <span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"mi\">3</span><span class=\"p\">])</span>\n<span class=\"nb\">print</span><span class=\"p\">([</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">]</span> <span class=\"o\">!=</span> <span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"mi\">3</span><span class=\"p\">])</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nFalse\nTrue\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[91]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">print</span><span class=\"p\">((</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"mi\">3</span><span class=\"p\">)</span> <span class=\"o\">!=</span> <span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"mi\">3</span><span class=\"p\">))</span>\n<span class=\"nb\">print</span><span class=\"p\">((</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">)</span> <span class=\"o\">!=</span> <span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"mi\">3</span><span class=\"p\">))</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nFalse\nTrue\n</pre></div></div>\n</div>\n<p>大小の比較は、いわゆる辞書式による比較で、リストやタプルの最初の要素から順に比較して大小を決めます。 片方がもう片方を拡張したものであれば、拡張した方を大きいとします。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[92]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">print</span><span class=\"p\">([</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"mi\">3</span><span class=\"p\">]</span> <span class=\"o\">&lt;=</span> <span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"mi\">3</span><span class=\"p\">])</span>\n<span class=\"nb\">print</span><span class=\"p\">([</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"mi\">3</span><span class=\"p\">]</span> <span class=\"o\">&lt;</span> <span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"mi\">3</span><span class=\"p\">])</span>\n<span class=\"nb\">print</span><span class=\"p\">([</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"mi\">3</span><span class=\"p\">]</span> <span class=\"o\">&lt;</span> <span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"mi\">4</span><span class=\"p\">])</span>\n<span class=\"nb\">print</span><span class=\"p\">([</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">]</span> <span class=\"o\">&lt;</span> <span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"mi\">3</span><span class=\"p\">])</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nTrue\nFalse\nTrue\nTrue\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[93]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">print</span><span class=\"p\">((</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"mi\">3</span><span class=\"p\">)</span> <span class=\"o\">&lt;=</span> <span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"mi\">3</span><span class=\"p\">))</span>\n<span class=\"nb\">print</span><span class=\"p\">((</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"mi\">3</span><span class=\"p\">)</span> <span class=\"o\">&lt;</span> <span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"mi\">3</span><span class=\"p\">))</span>\n<span class=\"nb\">print</span><span class=\"p\">((</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"mi\">3</span><span class=\"p\">)</span> <span class=\"o\">&lt;</span> <span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"mi\">4</span><span class=\"p\">))</span>\n<span class=\"nb\">print</span><span class=\"p\">((</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">)</span> <span class=\"o\">&lt;</span> <span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"mi\">3</span><span class=\"p\">))</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nTrue\nFalse\nTrue\nTrue\n</pre></div></div>\n</div>\n</section>\n<section id=\"for文による繰り返しとリスト・タプル\">\n<h2>for文による繰り返しとリスト・タプル<a class=\"headerlink\" href=\"#for文による繰り返しとリスト・タプル\" title=\"Link to this heading\">¶</a></h2>\n<p>きまった操作の繰り返しはコンピュータが最も得意とする処理のひとつです。 リストのそれぞれの要素にわたって操作を繰り返したい場合は<strong>for文</strong>を用います。</p>\n<p>リスト <code class=\"docutils literal notranslate\"><span class=\"pre\">ls</span></code> の要素全てに対して、<code class=\"docutils literal notranslate\"><span class=\"pre\">実行文</span></code> を繰り返すには次のように書きます。</p>\n<div class=\"highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>for value in ls:\n    実行文\n</pre></div>\n</div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">for</span></code> で始まる行の <code class=\"docutils literal notranslate\"><span class=\"pre\">in</span></code> の後に処理対象となるリスト <code class=\"docutils literal notranslate\"><span class=\"pre\">ls</span></code> が、<code class=\"docutils literal notranslate\"><span class=\"pre\">in</span></code> の前に変数 <code class=\"docutils literal notranslate\"><span class=\"pre\">value</span></code> が書かれます。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">ls</span></code> の最初の要素、すなわち <code class=\"docutils literal notranslate\"><span class=\"pre\">ls[0]</span></code> が <code class=\"docutils literal notranslate\"><span class=\"pre\">value</span></code> に代入され <code class=\"docutils literal notranslate\"><span class=\"pre\">実行文</span></code> が処理されます。 <code class=\"docutils literal notranslate\"><span class=\"pre\">実行文</span></code> の処理が終われば、<code class=\"docutils literal notranslate\"><span class=\"pre\">ls</span></code> の次の要素が <code class=\"docutils literal notranslate\"><span class=\"pre\">value</span></code> に代入され、処理が繰り返されます。 このようにして、<code class=\"docutils literal notranslate\"><span class=\"pre\">ls</span></code> の要素に対する処理が <code class=\"docutils literal notranslate\"><span class=\"pre\">len(ls)</span></code> 回繰り返されると、for文の処理が終了します。</p>\n<p>ここでの <code class=\"docutils literal notranslate\"><span class=\"pre\">in</span></code> の働きは、先に説明したリスト要素の有無を検査する <code class=\"docutils literal notranslate\"><span class=\"pre\">in</span></code> とは異なることに、 そして、if文と同様、 <code class=\"docutils literal notranslate\"><span class=\"pre\">実行文</span></code> の前にはスペースが必要であることに注意してください。</p>\n<p>次に具体例を示します。 3つの要素を持つリスト <code class=\"docutils literal notranslate\"><span class=\"pre\">ls</span></code> から1つずつ要素を取り出し、変数 <code class=\"docutils literal notranslate\"><span class=\"pre\">value</span></code> に代入しています。 <code class=\"docutils literal notranslate\"><span class=\"pre\">実行文</span></code> では <code class=\"docutils literal notranslate\"><span class=\"pre\">value</span></code> を用いて取り出した要素を参照しています。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[94]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">ls</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">,</span><span class=\"mi\">1</span><span class=\"p\">,</span><span class=\"mi\">2</span><span class=\"p\">]</span>\n\n<span class=\"k\">for</span> <span class=\"n\">value</span> <span class=\"ow\">in</span> <span class=\"n\">ls</span><span class=\"p\">:</span>\n    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s1\">&#39;For loop:&#39;</span><span class=\"p\">,</span> <span class=\"n\">value</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nFor loop: 0\nFor loop: 1\nFor loop: 2\n</pre></div></div>\n</div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">in</span></code> の後に直接リストを記述することもできます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[95]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">for</span> <span class=\"n\">value</span> <span class=\"ow\">in</span> <span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">,</span><span class=\"mi\">1</span><span class=\"p\">,</span><span class=\"mi\">2</span><span class=\"p\">]:</span>\n    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s1\">&#39;For loop:&#39;</span><span class=\"p\">,</span> <span class=\"n\">value</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nFor loop: 0\nFor loop: 1\nFor loop: 2\n</pre></div></div>\n</div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">実行文</span></code> の前にスペースがないとエラーが出ます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[96]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">for</span> <span class=\"n\">value</span> <span class=\"ow\">in</span>  <span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">,</span><span class=\"mi\">1</span><span class=\"p\">,</span><span class=\"mi\">2</span><span class=\"p\">]:</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s1\">&#39;For loop:&#39;</span><span class=\"p\">,</span> <span class=\"n\">value</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n<span class=\"ansi-cyan-fg\">  Cell </span><span class=\"ansi-green-fg\">In[96], line 2</span>\n<span class=\"ansi-red-fg\">    print(&#39;For loop:&#39;, value)</span>\n    ^\n<span class=\"ansi-red-fg\">IndentationError</span><span class=\"ansi-red-fg\">:</span> expected an indented block after &#39;for&#39; statement on line 1\n\n</pre></div></div>\n</div>\n<p>エラーが出れば意図した通りにプログラムが組めていないのにすぐ気が付きますが、 エラーが出ないために意図したプログラムが組めていないことに気が付かないことがあります。 たとえば、次のような内容を実行しようとしていたとします。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[97]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">for</span> <span class=\"n\">value</span> <span class=\"ow\">in</span>  <span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">,</span><span class=\"mi\">1</span><span class=\"p\">,</span><span class=\"mi\">2</span><span class=\"p\">]:</span>\n    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s1\">&#39;During for loop:&#39;</span><span class=\"p\">,</span> <span class=\"n\">value</span><span class=\"p\">)</span>\n    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s1\">&#39;During for loop, too:&#39;</span><span class=\"p\">,</span> <span class=\"n\">value</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nDuring for loop: 0\nDuring for loop, too: 0\nDuring for loop: 1\nDuring for loop, too: 1\nDuring for loop: 2\nDuring for loop, too: 2\n</pre></div></div>\n</div>\n<p>後者の <code class=\"docutils literal notranslate\"><span class=\"pre\">print</span></code> の行のスペースの数が間違ってると、次のような結果になる場合がありますので注意してください。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[98]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">for</span> <span class=\"n\">value</span> <span class=\"ow\">in</span> <span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">,</span><span class=\"mi\">1</span><span class=\"p\">,</span><span class=\"mi\">2</span><span class=\"p\">]:</span>\n    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s1\">&#39;During for loop:&#39;</span><span class=\"p\">,</span> <span class=\"n\">value</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s1\">&#39;During for loop, too:&#39;</span><span class=\"p\">,</span> <span class=\"n\">value</span><span class=\"p\">)</span> <span class=\"c1\">#この行のスペースの数が間違っていたがエラーは出ない</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nDuring for loop: 0\nDuring for loop: 1\nDuring for loop: 2\nDuring for loop, too: 2\n</pre></div></div>\n</div>\n<p>タプルの要素にまたがる処理もリストと同様に行えます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[99]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">for</span> <span class=\"n\">value</span> <span class=\"ow\">in</span> <span class=\"p\">(</span><span class=\"mi\">0</span><span class=\"p\">,</span><span class=\"mi\">1</span><span class=\"p\">,</span><span class=\"mi\">2</span><span class=\"p\">):</span>\n    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s1\">&#39;For loop:&#39;</span><span class=\"p\">,</span> <span class=\"n\">value</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nFor loop: 0\nFor loop: 1\nFor loop: 2\n</pre></div></div>\n</div>\n<p>以下はリストに対するfor文の典型例です。<code class=\"docutils literal notranslate\"><span class=\"pre\">numbers</span></code> は数のリストとします。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[100]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">numbers</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">,</span><span class=\"mi\">1</span><span class=\"p\">,</span><span class=\"mi\">2</span><span class=\"p\">,</span><span class=\"mi\">3</span><span class=\"p\">,</span><span class=\"mi\">4</span><span class=\"p\">,</span><span class=\"mi\">5</span><span class=\"p\">]</span>\n</pre></div>\n</div>\n</div>\n<p>以下のようにして、このリストの要素の自乗から成るリストを求めることができます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[101]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">squares1</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n<span class=\"k\">for</span> <span class=\"n\">x</span> <span class=\"ow\">in</span> <span class=\"n\">numbers</span><span class=\"p\">:</span>\n    <span class=\"n\">squares1</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"o\">**</span><span class=\"mi\">2</span><span class=\"p\">)</span>\n<span class=\"n\">squares1</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[101]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n[0, 1, 4, 9, 16, 25]\n</pre></div></div>\n</div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">squares1</span></code> には最初に空リストが代入されます。 そして、<code class=\"docutils literal notranslate\"><span class=\"pre\">numbers</span></code> の各要素の自乗がこのリストに次々と追加されます。</p>\n</section>\n<section id=\"id22\">\n<h2>練習<a class=\"headerlink\" href=\"#id22\" title=\"Link to this heading\">¶</a></h2>\n<p>整数の要素からなるリスト <code class=\"docutils literal notranslate\"><span class=\"pre\">ln</span></code> を引数として取り、<code class=\"docutils literal notranslate\"><span class=\"pre\">ln</span></code> の要素の総和を返す関数 <code class=\"docutils literal notranslate\"><span class=\"pre\">sum_list</span></code> を作成してください。</p>\n<p>以下のセルの <code class=\"docutils literal notranslate\"><span class=\"pre\">...</span></code> のところを書き換えて <code class=\"docutils literal notranslate\"><span class=\"pre\">sum_list(ln)</span></code> を作成してください。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[102]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">def</span> <span class=\"nf\">sum_list</span><span class=\"p\">(</span><span class=\"n\">ln</span><span class=\"p\">):</span>\n    <span class=\"o\">...</span>\n</pre></div>\n</div>\n</div>\n<p>上のセルで解答を作成した後、以下のセルを実行し、実行結果が全て True になることを確認してください。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[103]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">sum_list</span><span class=\"p\">([</span><span class=\"mi\">10</span><span class=\"p\">,</span> <span class=\"mi\">20</span><span class=\"p\">,</span> <span class=\"mi\">30</span><span class=\"p\">])</span> <span class=\"o\">==</span> <span class=\"mi\">60</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">sum_list</span><span class=\"p\">([</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"o\">-</span><span class=\"mi\">3</span><span class=\"p\">,</span> <span class=\"mi\">4</span><span class=\"p\">,</span> <span class=\"o\">-</span><span class=\"mi\">5</span><span class=\"p\">])</span> <span class=\"o\">==</span> <span class=\"o\">-</span><span class=\"mi\">3</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nFalse\nFalse\n</pre></div></div>\n</div>\n</section>\n<section id=\"for文による繰り返しと文字列\">\n<h2>for文による繰り返しと文字列<a class=\"headerlink\" href=\"#for文による繰り返しと文字列\" title=\"Link to this heading\">¶</a></h2>\n<p>for文を使うと文字列全体にまたがる処理も可能です。 文字列 <code class=\"docutils literal notranslate\"><span class=\"pre\">str1</span></code> をまたがって一文字ずつの繰り返し処理を行う場合は次のように書きます。 ここで、<code class=\"docutils literal notranslate\"><span class=\"pre\">c</span></code> には取り出された一文字（の文字列）が代入されています。</p>\n<div class=\"highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>for c in str1:\n    実行文\n</pre></div>\n</div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">str1</span></code> で与えられる文字列を一文字ずつ大文字で出力する処理は以下のようになります。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[104]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">str1</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;Apple and pen&#39;</span>\n<span class=\"k\">for</span> <span class=\"n\">c</span> <span class=\"ow\">in</span> <span class=\"n\">str1</span><span class=\"p\">:</span>\n    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">c</span><span class=\"o\">.</span><span class=\"n\">upper</span><span class=\"p\">())</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nA\nP\nP\nL\nE\n\nA\nN\nD\n\nP\nE\nN\n</pre></div></div>\n</div>\n</section>\n<section id=\"id24\">\n<h2>練習<a class=\"headerlink\" href=\"#id24\" title=\"Link to this heading\">¶</a></h2>\n<p>ATGCの4種類の文字から成る文字列 <code class=\"docutils literal notranslate\"><span class=\"pre\">str_atgc</span></code> が引数として与えられたとき、次のようなリスト <code class=\"docutils literal notranslate\"><span class=\"pre\">list_count</span></code> を返す関数 <code class=\"docutils literal notranslate\"><span class=\"pre\">atgc_countlist</span></code> を作成してください。ただし、 <code class=\"docutils literal notranslate\"><span class=\"pre\">list_count</span></code> の要素は、各塩基 <code class=\"docutils literal notranslate\"><span class=\"pre\">bp</span></code> に対して <code class=\"docutils literal notranslate\"><span class=\"pre\">str_atgc</span></code> 中の <code class=\"docutils literal notranslate\"><span class=\"pre\">bp</span></code> の出現回数と <code class=\"docutils literal notranslate\"><span class=\"pre\">bp</span></code> の名前を格納した（長さ2の）リストとします。</p>\n<p>ヒント：文字列 <code class=\"docutils literal notranslate\"><span class=\"pre\">'ATGC'</span></code> に対する繰り返しを用いることができます。</p>\n<p>以下のセルの <code class=\"docutils literal notranslate\"><span class=\"pre\">...</span></code> のところを書き換えて <code class=\"docutils literal notranslate\"><span class=\"pre\">atgc_countlist(str_atgc)</span></code> を作成してください。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[105]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">def</span> <span class=\"nf\">atgc_countlist</span><span class=\"p\">(</span><span class=\"n\">str_atgc</span><span class=\"p\">):</span>\n    <span class=\"o\">...</span>\n</pre></div>\n</div>\n</div>\n<p>上のセルで解答を作成した後、以下のセルを実行し、実行結果が <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> になることを確認してください。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[106]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"nb\">sorted</span><span class=\"p\">(</span><span class=\"n\">atgc_countlist</span><span class=\"p\">(</span><span class=\"s1\">&#39;AAGCCCCATGGTAA&#39;</span><span class=\"p\">))</span> <span class=\"o\">==</span> <span class=\"nb\">sorted</span><span class=\"p\">([[</span><span class=\"mi\">5</span><span class=\"p\">,</span> <span class=\"s1\">&#39;A&#39;</span><span class=\"p\">],</span> <span class=\"p\">[</span><span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"s1\">&#39;T&#39;</span><span class=\"p\">],</span> <span class=\"p\">[</span><span class=\"mi\">3</span><span class=\"p\">,</span> <span class=\"s1\">&#39;G&#39;</span><span class=\"p\">],</span> <span class=\"p\">[</span><span class=\"mi\">4</span><span class=\"p\">,</span> <span class=\"s1\">&#39;C&#39;</span><span class=\"p\">]]))</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n<span class=\"ansi-red-fg\">---------------------------------------------------------------------------</span>\n<span class=\"ansi-red-fg\">TypeError</span>                                 Traceback (most recent call last)\nCell <span class=\"ansi-green-fg\">In[106], line 1</span>\n<span class=\"ansi-green-fg\">----&gt; 1</span> <span style=\"color: rgb(0,135,0)\">print</span>(<span class=\"ansi-yellow-bg\" style=\"color: rgb(0,135,0)\">sorted</span><span class=\"ansi-yellow-bg\">(</span><span class=\"ansi-yellow-bg\">atgc_countlist</span><span class=\"ansi-yellow-bg\">(</span><span class=\"ansi-yellow-bg\" style=\"color: rgb(175,0,0)\">&#39;</span><span class=\"ansi-yellow-bg\" style=\"color: rgb(175,0,0)\">AAGCCCCATGGTAA</span><span class=\"ansi-yellow-bg\" style=\"color: rgb(175,0,0)\">&#39;</span><span class=\"ansi-yellow-bg\">)</span><span class=\"ansi-yellow-bg\">)</span> <span style=\"color: rgb(98,98,98)\">==</span> <span style=\"color: rgb(0,135,0)\">sorted</span>([[<span style=\"color: rgb(98,98,98)\">5</span>, <span style=\"color: rgb(175,0,0)\">&#39;</span><span style=\"color: rgb(175,0,0)\">A</span><span style=\"color: rgb(175,0,0)\">&#39;</span>], [<span style=\"color: rgb(98,98,98)\">2</span>, <span style=\"color: rgb(175,0,0)\">&#39;</span><span style=\"color: rgb(175,0,0)\">T</span><span style=\"color: rgb(175,0,0)\">&#39;</span>], [<span style=\"color: rgb(98,98,98)\">3</span>, <span style=\"color: rgb(175,0,0)\">&#39;</span><span style=\"color: rgb(175,0,0)\">G</span><span style=\"color: rgb(175,0,0)\">&#39;</span>], [<span style=\"color: rgb(98,98,98)\">4</span>, <span style=\"color: rgb(175,0,0)\">&#39;</span><span style=\"color: rgb(175,0,0)\">C</span><span style=\"color: rgb(175,0,0)\">&#39;</span>]]))\n\n<span class=\"ansi-red-fg\">TypeError</span>: &#39;NoneType&#39; object is not iterable\n</pre></div></div>\n</div>\n</section>\n<section id=\"for文によるリスト初期化の短縮記法\">\n<h2>for文によるリスト初期化の短縮記法<a class=\"headerlink\" href=\"#for文によるリスト初期化の短縮記法\" title=\"Link to this heading\">¶</a></h2>\n<p>先に、リストの要素の自乗から成るリストを求める例を説明しました。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[107]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">numbers</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">,</span><span class=\"mi\">1</span><span class=\"p\">,</span><span class=\"mi\">2</span><span class=\"p\">,</span><span class=\"mi\">3</span><span class=\"p\">,</span><span class=\"mi\">4</span><span class=\"p\">,</span><span class=\"mi\">5</span><span class=\"p\">]</span>\n\n<span class=\"n\">squares1</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n<span class=\"k\">for</span> <span class=\"n\">x</span> <span class=\"ow\">in</span> <span class=\"n\">numbers</span><span class=\"p\">:</span>\n    <span class=\"n\">squares1</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"o\">**</span><span class=\"mi\">2</span><span class=\"p\">)</span>\n<span class=\"n\">squares1</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[107]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n[0, 1, 4, 9, 16, 25]\n</pre></div></div>\n</div>\n<p>詳しくは6-1で説明されますが、<strong>内包表記</strong>を用いて書き換えると、以下のように1行で書くことができます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[108]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">squares2</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"n\">x</span><span class=\"o\">**</span><span class=\"mi\">2</span> <span class=\"k\">for</span> <span class=\"n\">x</span> <span class=\"ow\">in</span> <span class=\"n\">numbers</span><span class=\"p\">]</span>\n<span class=\"n\">squares2</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[108]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n[0, 1, 4, 9, 16, 25]\n</pre></div></div>\n</div>\n<p>すなわち、</p>\n<div class=\"highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[x を含む式 for x in リストを返す式]\n</pre></div>\n</div>\n<p>という式は、&quot;リストを返す式&quot; が返したリストの各要素を <code class=\"docutils literal notranslate\"><span class=\"pre\">x</span></code> に代入して &quot;<code class=\"docutils literal notranslate\"><span class=\"pre\">x</span></code> を含む式&quot; を計算し、 その結果をリストにして返します。 もちろん、変数は <code class=\"docutils literal notranslate\"><span class=\"pre\">x</span></code> でなくてもよいです。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[109]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"p\">[</span><span class=\"n\">y</span><span class=\"o\">**</span><span class=\"mi\">2</span> <span class=\"k\">for</span> <span class=\"n\">y</span> <span class=\"ow\">in</span> <span class=\"n\">numbers</span><span class=\"p\">]</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[109]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n[0, 1, 4, 9, 16, 25]\n</pre></div></div>\n</div>\n</section>\n<section id=\"▲オブジェクトの等価性と同一性\">\n<h2>▲オブジェクトの等価性と同一性<a class=\"headerlink\" href=\"#▲オブジェクトの等価性と同一性\" title=\"Link to this heading\">¶</a></h2>\n<p>1-3で、Pythonにおける値はオブジェクトと総称されますと述べました。 ここでは、オブジェクトの等価性と同一性について説明します。</p>\n<p>既に見てきたように、演算子 <code class=\"docutils literal notranslate\"><span class=\"pre\">==</span></code> を用いて<strong>オブジェクトの等価性</strong>を判定できます。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[110]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">a</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n<span class=\"n\">b</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n</pre></div>\n</div>\n</div>\n<p>このとき、<code class=\"docutils literal notranslate\"><span class=\"pre\">a</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">b</span></code> の値はどちらも空リストなので、以下のように <code class=\"docutils literal notranslate\"><span class=\"pre\">a</span></code> の値と <code class=\"docutils literal notranslate\"><span class=\"pre\">b</span></code> の値は等価です。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[111]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">a</span> <span class=\"o\">==</span> <span class=\"n\">b</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[111]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nTrue\n</pre></div></div>\n</div>\n<p>しかし、<code class=\"docutils literal notranslate\"><span class=\"pre\">[</span></code> で始まり <code class=\"docutils literal notranslate\"><span class=\"pre\">]</span></code> で終わる式を評価すると、 必ず新しいリスト（オブジェクト）が作られて返されるので、 <code class=\"docutils literal notranslate\"><span class=\"pre\">a</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">b</span></code> の値は同一ではありません。</p>\n<p><strong>オブジェクトの同一性</strong>は演算子 <code class=\"docutils literal notranslate\"><span class=\"pre\">is</span></code> を用いて判定できます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[112]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">a</span> <span class=\"ow\">is</span> <span class=\"n\">b</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[112]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nFalse\n</pre></div></div>\n</div>\n<p>リストの要素はオブジェクトなので、要素ごとに等価性と同一性が定まります。</p>\n<p>例として、<code class=\"docutils literal notranslate\"><span class=\"pre\">a</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">b</span></code> を要素とするリスト <code class=\"docutils literal notranslate\"><span class=\"pre\">c</span></code> を作ります。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[113]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">c</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"n\">a</span><span class=\"p\">,</span> <span class=\"n\">b</span><span class=\"p\">]</span>\n<span class=\"n\">c</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[113]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n[[], []]\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[114]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">c</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]</span> <span class=\"ow\">is</span> <span class=\"n\">c</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">]</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[114]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nFalse\n</pre></div></div>\n</div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">a</span></code> を変化させてみましょう。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[115]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">a</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n<span class=\"n\">a</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[115]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n[1]\n</pre></div></div>\n</div>\n<p>すると <code class=\"docutils literal notranslate\"><span class=\"pre\">c</span></code> は以下のようになります。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[116]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">c</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[116]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n[[1], []]\n</pre></div></div>\n</div>\n<p>ここで、<code class=\"docutils literal notranslate\"><span class=\"pre\">a</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">b</span></code> は等価でなくなりました。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[117]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">a</span> <span class=\"o\">==</span> <span class=\"n\">b</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[117]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nFalse\n</pre></div></div>\n</div>\n<p>次に、<code class=\"docutils literal notranslate\"><span class=\"pre\">b</span></code> を要素として二重に含むリスト <code class=\"docutils literal notranslate\"><span class=\"pre\">d</span></code> を作ります。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[118]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">d</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"n\">b</span><span class=\"p\">,</span> <span class=\"n\">b</span><span class=\"p\">]</span>\n<span class=\"n\">d</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[118]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n[[], []]\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[119]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">d</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]</span> <span class=\"ow\">is</span> <span class=\"n\">d</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">]</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[119]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nTrue\n</pre></div></div>\n</div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">b</span></code> を変化させてみましょう。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[120]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">b</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n<span class=\"n\">b</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[120]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n[1]\n</pre></div></div>\n</div>\n<p>すると <code class=\"docutils literal notranslate\"><span class=\"pre\">d</span></code> は以下のようになります。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[121]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">d</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[121]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n[[1], [1]]\n</pre></div></div>\n</div>\n<p>演算子 <code class=\"docutils literal notranslate\"><span class=\"pre\">==</span></code> でリストを比較すると、要素まで見て等価性を判定します。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[122]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">a</span><span class=\"p\">,</span> <span class=\"n\">b</span><span class=\"p\">)</span>\n<span class=\"n\">a</span> <span class=\"o\">==</span> <span class=\"n\">b</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n[1] [1]\n</pre></div></div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[122]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nTrue\n</pre></div></div>\n</div>\n<p>演算子 <code class=\"docutils literal notranslate\"><span class=\"pre\">==</span></code> は、要素の比較も <code class=\"docutils literal notranslate\"><span class=\"pre\">==</span></code> で行います。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[123]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">c</span><span class=\"p\">,</span> <span class=\"n\">d</span><span class=\"p\">)</span>\n<span class=\"n\">c</span> <span class=\"o\">==</span> <span class=\"n\">d</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n[[1], [1]] [[1], [1]]\n</pre></div></div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[123]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nTrue\n</pre></div></div>\n</div>\n<p>一方、オブジェクトの同一性は変化しません。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[124]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">a</span> <span class=\"ow\">is</span> <span class=\"n\">b</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[124]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nFalse\n</pre></div></div>\n</div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">==</span></code> の否定形は <code class=\"docutils literal notranslate\"><span class=\"pre\">!=</span></code> で、<code class=\"docutils literal notranslate\"><span class=\"pre\">is</span></code> の否定形は <code class=\"docutils literal notranslate\"><span class=\"pre\">is</span> <span class=\"pre\">not</span></code> です。 <code class=\"docutils literal notranslate\"><span class=\"pre\">not</span> <span class=\"pre\">x</span> <span class=\"pre\">==</span> <span class=\"pre\">y</span></code> は <code class=\"docutils literal notranslate\"><span class=\"pre\">x</span> <span class=\"pre\">!=</span> <span class=\"pre\">y</span></code> と書けます。<code class=\"docutils literal notranslate\"><span class=\"pre\">not</span> <span class=\"pre\">x</span> <span class=\"pre\">is</span> <span class=\"pre\">y</span></code> は <code class=\"docutils literal notranslate\"><span class=\"pre\">x</span> <span class=\"pre\">is</span> <span class=\"pre\">not</span> <span class=\"pre\">y</span></code> と書けます。 <code class=\"docutils literal notranslate\"><span class=\"pre\">is</span> <span class=\"pre\">not</span></code> はこれで1つの演算子なので注意してください。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[125]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">c</span> <span class=\"o\">!=</span> <span class=\"n\">d</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[125]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nFalse\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[126]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">a</span> <span class=\"ow\">is</span> <span class=\"ow\">not</span> <span class=\"n\">b</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[126]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nTrue\n</pre></div></div>\n</div>\n</section>\n<section id=\"練習の解答\">\n<h2>練習の解答<a class=\"headerlink\" href=\"#練習の解答\" title=\"Link to this heading\">¶</a></h2>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[127]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">def</span> <span class=\"nf\">remove_evenindex</span><span class=\"p\">(</span><span class=\"n\">ln</span><span class=\"p\">):</span>\n    <span class=\"n\">ln2</span> <span class=\"o\">=</span> <span class=\"n\">ln</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">::</span><span class=\"mi\">2</span><span class=\"p\">]</span>\n    <span class=\"k\">return</span> <span class=\"n\">ln2</span>\n<span class=\"c1\">#remove_evenindex([&#39;a&#39;, &#39;b&#39;, &#39;c&#39;, &#39;d&#39;, &#39;e&#39;, &#39;f&#39;, &#39;g&#39;])</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[128]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">def</span> <span class=\"nf\">change_domain</span><span class=\"p\">(</span><span class=\"n\">email</span><span class=\"p\">,</span> <span class=\"n\">domain</span><span class=\"p\">):</span>\n    <span class=\"k\">return</span> <span class=\"s1\">&#39;@&#39;</span><span class=\"o\">.</span><span class=\"n\">join</span><span class=\"p\">([</span><span class=\"n\">email</span><span class=\"o\">.</span><span class=\"n\">split</span><span class=\"p\">(</span><span class=\"s1\">&#39;@&#39;</span><span class=\"p\">)[</span><span class=\"mi\">0</span><span class=\"p\">],</span> <span class=\"n\">domain</span><span class=\"p\">])</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[129]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">def</span> <span class=\"nf\">reverse_totuple</span><span class=\"p\">(</span><span class=\"n\">ln</span><span class=\"p\">):</span>\n    <span class=\"n\">ln</span><span class=\"o\">.</span><span class=\"n\">reverse</span><span class=\"p\">()</span>\n    <span class=\"n\">tup</span> <span class=\"o\">=</span> <span class=\"nb\">tuple</span><span class=\"p\">(</span><span class=\"n\">ln</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span> <span class=\"n\">tup</span>\n<span class=\"c1\">#reverse_totuple([1, 2, 3, 4, 5])</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[130]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">def</span> <span class=\"nf\">sum_list</span><span class=\"p\">(</span><span class=\"n\">ln</span><span class=\"p\">):</span>\n    <span class=\"n\">int_sum</span> <span class=\"o\">=</span> <span class=\"mi\">0</span>\n    <span class=\"k\">for</span> <span class=\"n\">value</span> <span class=\"ow\">in</span> <span class=\"n\">ln</span><span class=\"p\">:</span>\n        <span class=\"n\">int_sum</span> <span class=\"o\">+=</span> <span class=\"n\">value</span>\n    <span class=\"k\">return</span> <span class=\"n\">int_sum</span>\n<span class=\"c1\">#sum_list([10, 20, 30])</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[131]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">def</span> <span class=\"nf\">atgc_countlist</span><span class=\"p\">(</span><span class=\"n\">str_atgc</span><span class=\"p\">):</span>\n    <span class=\"n\">list_count</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n    <span class=\"k\">for</span> <span class=\"n\">value</span> <span class=\"ow\">in</span> <span class=\"s1\">&#39;ATGC&#39;</span><span class=\"p\">:</span>\n        <span class=\"n\">int_bpcnt</span> <span class=\"o\">=</span> <span class=\"n\">str_atgc</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">(</span><span class=\"n\">value</span><span class=\"p\">)</span>\n        <span class=\"n\">list_count</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">([</span><span class=\"n\">int_bpcnt</span><span class=\"p\">,</span> <span class=\"n\">value</span><span class=\"p\">])</span>\n    <span class=\"k\">return</span> <span class=\"n\">list_count</span>\n<span class=\"c1\">#atgc_countlist(&#39;AAGCCCCATGGTAA&#39;)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[ ]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span>\n</pre></div>\n</div>\n</div>\n</section>\n</section>\n\n\n          </div>\n          \n        </div>\n      </div>\n      <div class=\"sphinxsidebar\" role=\"navigation\" aria-label=\"Main\">\n        <div class=\"sphinxsidebarwrapper\">\n<h1 class=\"logo\"><a href=\"../index.html\">Pythonプログラミング入門</a></h1>\n\n\n\n\n\n\n\n\n<p>\n  <a style=\"font-family: sans-serif; font-size: smaller; background: linear-gradient(to top, #353535 0%, #141414 100%); -webkit-font-smoothing: antialiased; font-weight: normal; text-shadow: rgb(0 0 0 / 40%) 0 -1px 0; padding: 2px 6px; color: #fff; text-decoration: none; border-radius: 4px; border: 1px solid #0d0d0d; box-shadow: inset 0 1px 1px 0 #8f8f8f;\" href=\"https://github.com/utokyo-ipp/utokyo-ipp.github.io\">View on GitHub</a>\n</p><p>\n  <a style=\"font-family: sans-serif; font-size: smaller; background: linear-gradient(to top, #ff1e00 0%, #de1e00 100%); -webkit-font-smoothing: antialiased; font-weight: normal; text-shadow: rgb(0 0 0 / 40%) 0 -1px 0; padding: 2px 6px; color: #fff; text-decoration: none; border-radius: 4px; border: 1px solid #0d0d0d; box-shadow: inset 0 1px 1px 0 #ff8e70;\" href=\"https://utokyo-ipp.github.io/IPP_textbook.pdf\">View PDF</a>\n</p><p>\n  <a style=\"border-bottom: none;\" href=\"https://colab.research.google.com/github/utokyo-ipp/utokyo-ipp.github.io/blob/master/colab/2/2-2.ipynb\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Google Colaboratory\"></a>\n</p><h3>Navigation</h3>\n<ul class=\"current\">\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../1/1-0.html\">1-0. Colaboratory (Colab) の使い方</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../1/1-1.html\">1-1. 数値演算</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../1/1-2.html\">1-2. 変数と関数の基礎</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../1/1-3.html\">1-3. 論理・比較演算と条件分岐の基礎</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../1/1-4.html\">1-4. テストとデバッグ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"2-1.html\">2-1. 文字列 (string)</a></li>\n<li class=\"toctree-l1 current\"><a class=\"current reference internal\" href=\"#\">2-2. リスト (list)</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#リストとインデックス\">リストとインデックス</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#練習\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#多重リスト\"><strong>多重リスト</strong></a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#リストに対する関数・演算子・メソッド\">リストに対する関数・演算子・メソッド</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#破壊的（インプレース）な操作と非破壊的な生成\">破壊的（インプレース）な操作と非破壊的な生成</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#リストを操作するメソッドなど\">リストを操作するメソッドなど</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#リストと文字列の相互変換\">リストと文字列の相互変換</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#タプル-(tuple)\">タプル (tuple)</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#id19\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#多重代入\">多重代入</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#リストやタプルの比較演算\">リストやタプルの比較演算</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#for文による繰り返しとリスト・タプル\">for文による繰り返しとリスト・タプル</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#id22\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#for文による繰り返しと文字列\">for文による繰り返しと文字列</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#id24\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#for文によるリスト初期化の短縮記法\">for文によるリスト初期化の短縮記法</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#▲オブジェクトの等価性と同一性\">▲オブジェクトの等価性と同一性</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#練習の解答\">練習の解答</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"2-3.html\">2-3. 条件分岐</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../3/3-1.html\">3-1. 辞書 (dictionary)</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../3/3-2.html\">3-2. 繰り返し</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../3/3-3.html\">3-3. 関数</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../4/4-1.html\">4-1. ファイル入出力の基本</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../4/4-2.html\">4-2. イテラブルとイテレータ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../4/4-3.html\">4-3. ディレクトリと木構造</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../5/5-1.html\">5-1. モジュールの使い方</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../5/5-2.html\">5-2. モジュールの作り方</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../5/5-3.html\">5-3. NumPyライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../6/6-1.html\">6-1. 内包表記</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../6/6-2.html\">6-2. 高階関数</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../6/6-3.html\">6-3. クラス</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../7/7-1.html\">7-1. pandasライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../7/7-2.html\">7-2. scikit-learnライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/1-jupyter-notebook.html\">▲Jupyter Notebook の使い方</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/2-set.html\">▲セット (set)</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/3-recursion.html\">▲再帰</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/3-visualization.html\">▲簡単なデータの可視化</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/4-csv.html\">▲CSVファイルの入出力</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/5-bokeh.html\">▲Bokehライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/5-command.html\">▲Pythonスクリプトとコマンドライン実行</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/5-matplotlib.html\">▲Matplotlibライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/5-re.html\">▲正規表現</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../index_of_terms.html\">索引</a></li>\n</ul>\n\n<div class=\"relations\">\n<h3>Related Topics</h3>\n<ul>\n  <li><a href=\"../index.html\">Documentation overview</a><ul>\n      <li>Previous: <a href=\"2-1.html\" title=\"previous chapter\">2-1. 文字列 (string)</a></li>\n      <li>Next: <a href=\"2-3.html\" title=\"next chapter\">2-3. 条件分岐</a></li>\n  </ul></li>\n</ul>\n</div>\n<search id=\"searchbox\" style=\"display: none\" role=\"search\">\n  <h3 id=\"searchlabel\">Quick search</h3>\n    <div class=\"searchformwrapper\">\n    <form class=\"search\" action=\"../search.html\" method=\"get\">\n      <input type=\"text\" name=\"q\" aria-labelledby=\"searchlabel\" autocomplete=\"off\" autocorrect=\"off\" autocapitalize=\"off\" spellcheck=\"false\"/>\n      <input type=\"submit\" value=\"Go\" />\n    </form>\n    </div>\n</search>\n<script>document.getElementById('searchbox').style.display = \"block\"</script>\n\n\n\n\n\n\n\n\n        </div>\n      </div>\n      <div class=\"clearer\"></div>\n    </div>\n    <div class=\"footer\">\n      &#169;2020–2024, 東京大学 数理・情報教育研究センター (CC BY-NC-ND 4.0).\n      \n      |\n      Powered by <a href=\"https://www.sphinx-doc.org/\">Sphinx 8.0.2</a>\n      &amp; <a href=\"https://alabaster.readthedocs.io\">Alabaster 1.0.0</a>\n      \n    </div>\n\n    \n\n    \n    <script>\n\n      var _gaq = _gaq || [];\n      _gaq.push(['_setAccount', 'G-8M0RXGPPSR']);\n      _gaq.push(['_setDomainName', 'none']);\n      _gaq.push(['_setAllowLinker', true]);\n      _gaq.push(['_trackPageview']);\n\n      (function() {\n        var ga = document.createElement('script'); ga.async = true;\n        ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'https://www') + '.google-analytics.com/ga.js';\n        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);\n      })();\n\n    </script>\n    \n  </body>\n</html>"
  },
  {
    "path": "docs/2/2-3.html",
    "content": "<!DOCTYPE html>\n\n<html lang=\"jp\" data-content_root=\"../\">\n  <head>\n    <meta charset=\"utf-8\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" /><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n\n    <!-- Google tag (gtag.js) -->\n    <script async src=\"https://www.googletagmanager.com/gtag/js?id=G-8M0RXGPPSR\"></script>\n    <script>\n        window.dataLayer = window.dataLayer || [];\n        function gtag(){dataLayer.push(arguments);}\n        gtag('js', new Date());\n        gtag('config', 'G-8M0RXGPPSR');\n    </script>\n    \n    <title>2-3. 条件分岐 &#8212; Pythonプログラミング入門  documentation</title>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/pygments.css?v=d1102ebc\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/basic.css?v=c058f7c8\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/alabaster.css?v=27fed22d\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/nbsphinx-code-cells.css\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/custom.css?v=1a1aa8dd\" />\n    <script src=\"../_static/documentation_options.js?v=3ff7d7a7\"></script>\n    <script src=\"../_static/doctools.js?v=9a2dae69\"></script>\n    <script src=\"../_static/sphinx_highlight.js?v=dc90522c\"></script>\n    <script crossorigin=\"anonymous\" integrity=\"sha256-Ae2Vz/4ePdIu6ZyI/5ZGsYnb+m0JlOmKPjt6XZ9JJkA=\" src=\"https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.4/require.min.js\"></script>\n    <script>window.MathJax = {\"tex\": {\"inlineMath\": [[\"$\", \"$\"], [\"\\\\(\", \"\\\\)\"]], \"processEscapes\": true}, \"options\": {\"ignoreHtmlClass\": \"tex2jax_ignore|mathjax_ignore|document\", \"processHtmlClass\": \"tex2jax_process|mathjax_process|math|output_area\"}}</script>\n    <script defer=\"defer\" src=\"https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js\"></script>\n    <link rel=\"index\" title=\"Index\" href=\"../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../search.html\" />\n    <link rel=\"next\" title=\"3-1. 辞書 (dictionary)\" href=\"../3/3-1.html\" />\n    <link rel=\"prev\" title=\"2-2. リスト (list)\" href=\"2-2.html\" />\n   \n  <link rel=\"stylesheet\" href=\"../_static/custom.css\" type=\"text/css\" />\n  \n\n  \n  \n\n  </head><body>\n  \n\n    <div class=\"document\">\n      <div class=\"documentwrapper\">\n        <div class=\"bodywrapper\">\n          \n\n          <div class=\"body\" role=\"main\">\n            \n  <section id=\"2-3.-条件分岐\">\n<h1>2-3. 条件分岐<a class=\"headerlink\" href=\"#2-3.-条件分岐\" title=\"Link to this heading\">¶</a></h1>\n<p>制御構造のうち<strong>条件分岐</strong>について説明します。</p>\n<p>参考:</p>\n<ul class=\"simple\">\n<li><p><a class=\"reference external\" href=\"https://docs.python.org/ja/3/tutorial/controlflow.html#if-statements\">https://docs.python.org/ja/3/tutorial/controlflow.html#if-statements</a></p></li>\n</ul>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">if</span></code> で始まり条件分岐を行う制御構造によって、条件に応じてプログラムの動作を変えることができます。</p>\n<p>ここではまず「インデント」について説明し、そのあとで条件分岐について説明します。</p>\n<section id=\"インデントによる構文\">\n<h2>インデントによる構文<a class=\"headerlink\" href=\"#インデントによる構文\" title=\"Link to this heading\">¶</a></h2>\n<p>条件分岐の前に、Pythonの<strong>インデント</strong>（行頭の空白、字下げ）について説明します。 Pythonのインデントは実行文をグループにまとめる機能を持ちます。</p>\n<p>プログラム文はインデントレベル（深さ）の違いによって異なるグループとして扱われます。 細かく言えば、インデントレベルが進む（深くなる）とプログラム文はもとのグループの下に位置する 別のグループに属するものとして扱われます。 逆に、インデントレベルが戻る（浅くなる）までプログラム文は同じグループに属することになります。</p>\n<p>具体例として、第1回で定義した関数 <code class=\"docutils literal notranslate\"><span class=\"pre\">bmax()</span></code> を使って説明します:</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[1]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">def</span> <span class=\"nf\">bmax</span><span class=\"p\">(</span><span class=\"n\">a</span><span class=\"p\">,</span><span class=\"n\">b</span><span class=\"p\">):</span>\n    <span class=\"k\">if</span> <span class=\"n\">a</span> <span class=\"o\">&gt;</span> <span class=\"n\">b</span><span class=\"p\">:</span>\n        <span class=\"k\">return</span> <span class=\"n\">a</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"k\">return</span> <span class=\"n\">b</span>\n\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s1\">&#39;Hello World&#39;</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nHello World\n</pre></div></div>\n</div>\n<p>この例では1行目の関数定義 <code class=\"docutils literal notranslate\"><span class=\"pre\">def</span> <span class=\"pre\">bmax(a,b):</span></code> の後から第1レベルのインデントが開始され5行目まで続きます。 すなわち、5行目までは関数 <code class=\"docutils literal notranslate\"><span class=\"pre\">bmax</span></code> を記述するプログラム文のグループということです。</p>\n<p>次に、3行目の一行のみの第2レベルのインデントの実行文は、 if文（<code class=\"docutils literal notranslate\"><span class=\"pre\">if</span></code> による条件分岐）の論理式 <code class=\"docutils literal notranslate\"><span class=\"pre\">a</span> <span class=\"pre\">&gt;</span> <span class=\"pre\">b</span></code> が <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> の場合にのみ実行されるグループに属します。 そして、4行目の <code class=\"docutils literal notranslate\"><span class=\"pre\">else</span></code> ではインデントが戻されています。 5行目から再び始まる第2レベルの実行文は2行目の論理式が <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code> の場合に実行されるグループに属します。</p>\n<p>最後に、7行目ではインデントが戻されており、これ以降は関数 <code class=\"docutils literal notranslate\"><span class=\"pre\">bmax()</span></code> の定義とは関係ないことがわかります。</p>\n<p>Pythonではインデントとして半角スペース4つが広く利用されています。 本教材でもこの書式を利用します。 1-4 のコーディングスタイルのところで紹介したスタイルガイドのPEP8でも、 半角スペース4つが推奨されています。</p>\n<p>Codeセルでは行の先頭でTabを入力すれば、自動的にこの書式のインデントが挿入されます。 また、インデントを戻すときはShift-Tabが便利です。 なお、Colaboratoryでは、Tabを入力すると半角スペース2つのインデントが挿入されます。</p>\n</section>\n<section id=\"if-...-else-による条件分岐\">\n<h2><code class=\"docutils literal notranslate\"><span class=\"pre\">if</span></code> … <code class=\"docutils literal notranslate\"><span class=\"pre\">else</span></code> による条件分岐<a class=\"headerlink\" href=\"#if-...-else-による条件分岐\" title=\"Link to this heading\">¶</a></h2>\n<p>これまで関数 <code class=\"docutils literal notranslate\"><span class=\"pre\">bmax</span></code> を例にとって説明しましたが、一般にif文では、 <code class=\"docutils literal notranslate\"><span class=\"pre\">式</span></code> が真であれば <code class=\"docutils literal notranslate\"><span class=\"pre\">if</span></code> 直後のグループが、偽であれば <code class=\"docutils literal notranslate\"><span class=\"pre\">else</span></code> 直後のグループが、それぞれ実行されます。（真であった場合、<code class=\"docutils literal notranslate\"><span class=\"pre\">else</span></code> 直後のグループは実行されません。）</p>\n<div class=\"highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>if 式:\n    ここのグループは「式」が真のときにのみ実行される\nelse:\n    ここのグループは「式」が偽のときにのみ実行される\n</pre></div>\n</div>\n<p>また、<code class=\"docutils literal notranslate\"><span class=\"pre\">else</span></code> は省略することができます。省略した場合、「式」が真のときに <code class=\"docutils literal notranslate\"><span class=\"pre\">if</span></code> 直後のグループが実行されるのみになります。</p>\n<div class=\"highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>if 式:\n    ここのグループは「式」が真のときにのみ実行される\nここのグループは常に実行される\n</pre></div>\n</div>\n<p>条件が複雑になってくると、if文の中にさらにif文を記述して、条件分岐を<strong>入れ子</strong>（<strong>ネスト</strong>）にすることがあります。 この場合は、インデントはさらに深くなります。</p>\n<p>そして、下の2つのプログラムの動作は明らかに異なることに注意が必要です。</p>\n<div class=\"highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>if 式1:\n    ここのグループは「式1」が真のときにのみ実行される\n    if 式2:\n        ここのグループは「式1」「式2」が共に真のときにのみ実行される\n        if 式3:\n            ここのグループは「式1」「式2」「式3」が全て真のときにのみ実行される\n        ここのグループは「式1」と「式2」が共に真のときにのみ実行される\n    ここのグループは「式1」が真のときにのみ実行される\nここのグループは常に実行される\n</pre></div>\n</div>\n<div class=\"highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>if 式1:\n    ここのグループは「式1」が真のときにのみ実行される\nここのグループは常に実行される\nif 式2:\n    ここのグループは「式2」が真のときにのみ実行される (「式1」には影響されない)\nここのグループは常に実行される\nif 式3:\n    ここのグループは「式3」が真のときにのみ実行される (「式1」「式2」には影響されない)\nここのグループは常に実行される\n</pre></div>\n</div>\n</section>\n<section id=\"if-...-elif-...-else-による条件分岐\">\n<h2><code class=\"docutils literal notranslate\"><span class=\"pre\">if</span></code> … <code class=\"docutils literal notranslate\"><span class=\"pre\">elif</span></code> … <code class=\"docutils literal notranslate\"><span class=\"pre\">else</span></code> による条件分岐<a class=\"headerlink\" href=\"#if-...-elif-...-else-による条件分岐\" title=\"Link to this heading\">¶</a></h2>\n<p>ここまでで <code class=\"docutils literal notranslate\"><span class=\"pre\">if</span> <span class=\"pre\">...</span> <span class=\"pre\">else</span></code> 文について紹介しましたが、複数の条件分岐を続けて書くことができる <code class=\"docutils literal notranslate\"><span class=\"pre\">elif</span></code> を紹介します。</p>\n<p>たとえばテストの点数から評定（優、良、可、…）を計算したい場合など、「条件1のときは処理1、条件1に該当しなくても条件2であれば処理2、更にどちらでもない場合、条件3であれば処理3、…」という処理を考えます。 <code class=\"docutils literal notranslate\"><span class=\"pre\">if</span> <span class=\"pre\">...</span> <span class=\"pre\">else</span></code> による文のみでこの処理を行う場合、次のようなプログラムになってしまいます:</p>\n<div class=\"highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>if 式1:\n    「式1」が真のときにのみ実行するグループ\nelse:\n    if 式2:\n        「式1」が偽 かつ「式2」が真のときにのみ実行するグループ\n    else:\n        if 式3:\n            「式1」「式2」が偽 かつ「式3」が真のときにのみ実行するグループ\n        else:\n            ...\n</pre></div>\n</div>\n<p>このような場合には、以下のように <code class=\"docutils literal notranslate\"><span class=\"pre\">elif</span></code> を使うとより簡潔にできます:</p>\n<div class=\"highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>if 式1:\n    ここのグループは「式1」が真のときにのみ実行される\nelif 式2:\n    ここのグループは「式1」が偽 かつ「式2」が真のときにのみ実行される\nelif 式3:\n    ここのグループは「式1」「式2」が偽 かつ「式3」が真のときにのみ実行される\nelse:\n    ここのグループは「式1」「式2」「式3」がいずれも偽のときにのみ実行される\n</pre></div>\n</div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">if</span></code> … <code class=\"docutils literal notranslate\"><span class=\"pre\">elif</span></code> … <code class=\"docutils literal notranslate\"><span class=\"pre\">else</span></code> では、条件は上から順に評価され、式が真の場合、 直後の実行文グループのみが実行され終了します。 その他の場合、すなわち全ての条件が <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code> のときは、<code class=\"docutils literal notranslate\"><span class=\"pre\">else</span></code> 以降のグループが実行されます。</p>\n<p>なお、<code class=\"docutils literal notranslate\"><span class=\"pre\">elif</span></code> もしくは <code class=\"docutils literal notranslate\"><span class=\"pre\">else</span></code> 以降を省略することも可能です。</p>\n</section>\n<section id=\"練習\">\n<h2>練習<a class=\"headerlink\" href=\"#練習\" title=\"Link to this heading\">¶</a></h2>\n<p>関数 <code class=\"docutils literal notranslate\"><span class=\"pre\">exception3(x,y,z)</span></code> の引数は以下の条件を満たすとします。</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">x</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">y</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">z</span></code> の値は整数です。</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">x</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">y</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">z</span></code> のうち、2つの値は同じで、もう1つの値は他の2つの値とは異なるとします。</p></li>\n</ul>\n<p>その異なる値を返すように、以下のセルの <code class=\"docutils literal notranslate\"><span class=\"pre\">...</span></code> のところを書き換えて <code class=\"docutils literal notranslate\"><span class=\"pre\">exception3(x,y,z)</span></code> を定義してください。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[2]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">def</span> <span class=\"nf\">exception3</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">,</span><span class=\"n\">y</span><span class=\"p\">,</span><span class=\"n\">z</span><span class=\"p\">):</span>\n    <span class=\"o\">...</span>\n</pre></div>\n</div>\n</div>\n<p>次のセルで動作を確認してください。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[3]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">exception3</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">,</span><span class=\"mi\">2</span><span class=\"p\">,</span><span class=\"mi\">2</span><span class=\"p\">))</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">exception3</span><span class=\"p\">(</span><span class=\"mi\">4</span><span class=\"p\">,</span><span class=\"mi\">2</span><span class=\"p\">,</span><span class=\"mi\">4</span><span class=\"p\">))</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">exception3</span><span class=\"p\">(</span><span class=\"mi\">9</span><span class=\"p\">,</span><span class=\"mi\">3</span><span class=\"p\">,</span><span class=\"mi\">9</span><span class=\"p\">))</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nNone\nNone\nNone\n</pre></div></div>\n</div>\n</section>\n<section id=\"id4\">\n<h2>練習<a class=\"headerlink\" href=\"#id4\" title=\"Link to this heading\">¶</a></h2>\n<p>関数 <code class=\"docutils literal notranslate\"><span class=\"pre\">exception9(a)</span></code> の引数は以下の条件を満たすとします。</p>\n<ul class=\"simple\">\n<li><p>引数 <code class=\"docutils literal notranslate\"><span class=\"pre\">a</span></code> には、長さが9のリストが渡されます。</p></li>\n<li><p>このリストの要素は整数ですが、1つの要素を除いて、残りは要素の値は全て同じとします。</p></li>\n</ul>\n<p>その1つの要素の値を返すように、以下のセルの <code class=\"docutils literal notranslate\"><span class=\"pre\">...</span></code> のところを書き換えて <code class=\"docutils literal notranslate\"><span class=\"pre\">exception9(a)</span></code> を定義してください。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[4]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">def</span> <span class=\"nf\">exception9</span><span class=\"p\">(</span><span class=\"n\">a</span><span class=\"p\">):</span>\n    <span class=\"o\">...</span>\n</pre></div>\n</div>\n</div>\n<p>次のセルで動作を確認してください。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[5]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">exception9</span><span class=\"p\">([</span><span class=\"mi\">1</span><span class=\"p\">,</span><span class=\"mi\">2</span><span class=\"p\">,</span><span class=\"mi\">2</span><span class=\"p\">,</span><span class=\"mi\">2</span><span class=\"p\">,</span><span class=\"mi\">2</span><span class=\"p\">,</span><span class=\"mi\">2</span><span class=\"p\">,</span><span class=\"mi\">2</span><span class=\"p\">,</span><span class=\"mi\">2</span><span class=\"p\">,</span><span class=\"mi\">2</span><span class=\"p\">]))</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">exception9</span><span class=\"p\">([</span><span class=\"mi\">4</span><span class=\"p\">,</span><span class=\"mi\">4</span><span class=\"p\">,</span><span class=\"mi\">4</span><span class=\"p\">,</span><span class=\"mi\">4</span><span class=\"p\">,</span><span class=\"mi\">4</span><span class=\"p\">,</span><span class=\"mi\">2</span><span class=\"p\">,</span><span class=\"mi\">4</span><span class=\"p\">,</span><span class=\"mi\">4</span><span class=\"p\">,</span><span class=\"mi\">4</span><span class=\"p\">]))</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">exception9</span><span class=\"p\">([</span><span class=\"mi\">9</span><span class=\"p\">,</span><span class=\"mi\">9</span><span class=\"p\">,</span><span class=\"mi\">9</span><span class=\"p\">,</span><span class=\"mi\">9</span><span class=\"p\">,</span><span class=\"mi\">9</span><span class=\"p\">,</span><span class=\"mi\">9</span><span class=\"p\">,</span><span class=\"mi\">9</span><span class=\"p\">,</span><span class=\"mi\">9</span><span class=\"p\">,</span><span class=\"mi\">3</span><span class=\"p\">]))</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nNone\nNone\nNone\n</pre></div></div>\n</div>\n</section>\n<section id=\"▲複数行にまたがる条件式\">\n<h2>▲複数行にまたがる条件式<a class=\"headerlink\" href=\"#▲複数行にまたがる条件式\" title=\"Link to this heading\">¶</a></h2>\n<p>複雑な条件式では複数行に分割した方が見やすい場合もありあます。 ここでは、式を複数行にまたがって記述する1つの方法を示します。 1つ目は、丸括弧で括られた式を複数の行にまたがって記述する方法です。 2つ目は、行末にバックスラッシュ <code class=\"docutils literal notranslate\"><span class=\"pre\">\\</span></code> を置く方法です。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[6]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"c1\">### 丸括弧で括る方法</span>\n<span class=\"n\">x</span><span class=\"p\">,</span> <span class=\"n\">y</span><span class=\"p\">,</span> <span class=\"n\">z</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"o\">-</span><span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"o\">-</span><span class=\"mi\">3</span><span class=\"p\">)</span>\n<span class=\"k\">if</span> <span class=\"p\">(</span><span class=\"n\">x</span> <span class=\"o\">&lt;</span> <span class=\"mi\">0</span> <span class=\"ow\">and</span> <span class=\"n\">y</span> <span class=\"o\">&lt;</span> <span class=\"mi\">0</span> <span class=\"ow\">and</span> <span class=\"n\">z</span> <span class=\"o\">&lt;</span> <span class=\"mi\">0</span> <span class=\"ow\">and</span>\n    <span class=\"n\">x</span> <span class=\"o\">!=</span> <span class=\"n\">y</span> <span class=\"ow\">and</span> <span class=\"n\">y</span> <span class=\"o\">!=</span> <span class=\"n\">z</span> <span class=\"ow\">and</span> <span class=\"n\">x</span> <span class=\"o\">!=</span> <span class=\"n\">z</span><span class=\"p\">):</span>\n    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s1\">&#39;x, y and z are different and negatives.&#39;</span><span class=\"p\">)</span>\n\n<span class=\"c1\">### 行末にバックスラッシュ(\\) を入れる方法</span>\n\n<span class=\"n\">x</span><span class=\"p\">,</span> <span class=\"n\">y</span><span class=\"p\">,</span> <span class=\"n\">z</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"o\">-</span><span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"o\">-</span><span class=\"mi\">3</span><span class=\"p\">)</span>\n<span class=\"k\">if</span> <span class=\"n\">x</span> <span class=\"o\">&lt;</span> <span class=\"mi\">0</span> <span class=\"ow\">and</span> <span class=\"n\">y</span> <span class=\"o\">&lt;</span> <span class=\"mi\">0</span> <span class=\"ow\">and</span> <span class=\"n\">z</span> <span class=\"o\">&lt;</span> <span class=\"mi\">0</span> <span class=\"ow\">and</span> \\\n    <span class=\"n\">x</span> <span class=\"o\">!=</span> <span class=\"n\">y</span> <span class=\"ow\">and</span> <span class=\"n\">y</span> <span class=\"o\">!=</span> <span class=\"n\">z</span> <span class=\"ow\">and</span> <span class=\"n\">x</span> <span class=\"o\">!=</span> <span class=\"n\">z</span><span class=\"p\">:</span>\n    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s1\">&#39;x, y and z are different and negatives.&#39;</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nx, y and z are different and negatives.\nx, y and z are different and negatives.\n</pre></div></div>\n</div>\n</section>\n<section id=\"if-...-elif-...-else-における条件の評価\">\n<h2><code class=\"docutils literal notranslate\"><span class=\"pre\">if</span></code> … <code class=\"docutils literal notranslate\"><span class=\"pre\">elif</span></code> … <code class=\"docutils literal notranslate\"><span class=\"pre\">else</span></code> における条件の評価<a class=\"headerlink\" href=\"#if-...-elif-...-else-における条件の評価\" title=\"Link to this heading\">¶</a></h2>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">if</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">elif</span></code> による条件分岐では、<code class=\"docutils literal notranslate\"><span class=\"pre\">if</span></code> あるいは <code class=\"docutils literal notranslate\"><span class=\"pre\">elif</span></code> に続く条件式が <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> の場合、 それ以降の <code class=\"docutils literal notranslate\"><span class=\"pre\">elif</span></code> に続く条件式の評価は行われません。</p>\n<p>以下のプログラムで <code class=\"docutils literal notranslate\"><span class=\"pre\">x</span></code> を <code class=\"docutils literal notranslate\"><span class=\"pre\">3</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">0</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">-4</span></code> とした際に何が表示されるかを予想したのちに実行してみましょう。</p>\n<p>特に、 <code class=\"docutils literal notranslate\"><span class=\"pre\">x</span> <span class=\"pre\">=</span> <span class=\"pre\">-4</span></code> としたときの動作に注意してください。（<code class=\"docutils literal notranslate\"><span class=\"pre\">x</span> <span class=\"pre\">is</span> <span class=\"pre\">zero.</span></code> は表示されません。）</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[7]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">x</span> <span class=\"o\">=</span> <span class=\"mi\">3</span>  <span class=\"c1\"># example: 3, 0, -4</span>\n\n<span class=\"k\">if</span> <span class=\"n\">x</span> <span class=\"o\">&gt;</span> <span class=\"mi\">0</span><span class=\"p\">:</span>\n    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s1\">&#39;x is greater than zero.&#39;</span><span class=\"p\">)</span>\n<span class=\"k\">elif</span> <span class=\"n\">x</span> <span class=\"o\">&lt;</span> <span class=\"mi\">0</span><span class=\"p\">:</span>\n    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s1\">&#39;x is less than zero, but x will be 0&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">x</span> <span class=\"o\">=</span> <span class=\"mi\">0</span>\n<span class=\"k\">else</span><span class=\"p\">:</span>\n    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s1\">&#39;x is zero.&#39;</span><span class=\"p\">)</span>\n\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nx is greater than zero.\n3\n</pre></div></div>\n</div>\n</section>\n<section id=\"id7\">\n<h2>練習<a class=\"headerlink\" href=\"#id7\" title=\"Link to this heading\">¶</a></h2>\n<p>以下のプログラムはプログラマの意図どおりに動作しません。 <code class=\"docutils literal notranslate\"><span class=\"pre\">print</span></code> の出力内容から意図を判断して条件分岐を書き換えてください。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[8]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">x</span> <span class=\"o\">=</span> <span class=\"o\">-</span><span class=\"mi\">1</span>\n<span class=\"k\">if</span> <span class=\"n\">x</span> <span class=\"o\">&lt;</span> <span class=\"mi\">3</span><span class=\"p\">:</span>\n    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s1\">&#39;x is larger than or equal to 2, and less than 3&#39;</span><span class=\"p\">)</span>\n<span class=\"k\">elif</span> <span class=\"n\">x</span> <span class=\"o\">&lt;</span> <span class=\"mi\">2</span><span class=\"p\">:</span>\n    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s1\">&#39;x is larger than or equal to 1, and less than 2&#39;</span><span class=\"p\">)</span>\n<span class=\"k\">elif</span> <span class=\"n\">x</span> <span class=\"o\">&lt;</span> <span class=\"mi\">1</span><span class=\"p\">:</span>\n    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s1\">&#39;x is less than 1&#39;</span><span class=\"p\">)</span>\n<span class=\"k\">else</span><span class=\"p\">:</span>\n    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s1\">&#39;x is larger or equal to 3&#39;</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nx is larger than or equal to 2, and less than 3\n</pre></div></div>\n</div>\n</section>\n<section id=\"or-もしくは-and-で結合された条件の評価\">\n<h2><code class=\"docutils literal notranslate\"><span class=\"pre\">or</span></code> もしくは <code class=\"docutils literal notranslate\"><span class=\"pre\">and</span></code> で結合された条件の評価<a class=\"headerlink\" href=\"#or-もしくは-and-で結合された条件の評価\" title=\"Link to this heading\">¶</a></h2>\n<p>if文に与える条件が <code class=\"docutils literal notranslate\"><span class=\"pre\">or</span></code> もしくは <code class=\"docutils literal notranslate\"><span class=\"pre\">and</span></code> で結合されている場合、条件は左から順に評価され、 不要（以降の式を評価するまでもなく自明）な評価は省かれます。</p>\n<p>たとえば、<code class=\"docutils literal notranslate\"><span class=\"pre\">if</span> <span class=\"pre\">a</span> <span class=\"pre\">==</span> <span class=\"pre\">0</span> <span class=\"pre\">or</span> <span class=\"pre\">b</span> <span class=\"pre\">==</span> <span class=\"pre\">0:</span></code> において 最初の式 <code class=\"docutils literal notranslate\"><span class=\"pre\">a</span> <span class=\"pre\">==</span> <span class=\"pre\">0</span></code> が <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> の場合、式全体の結果が <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> となることは自明なので、 二番目の式 <code class=\"docutils literal notranslate\"><span class=\"pre\">b</span> <span class=\"pre\">==</span> <span class=\"pre\">0</span></code> を評価することなく続く実行文グループが実行されます。</p>\n<p>逆に、<code class=\"docutils literal notranslate\"><span class=\"pre\">if</span> <span class=\"pre\">a</span> <span class=\"pre\">==</span> <span class=\"pre\">0</span> <span class=\"pre\">and</span> <span class=\"pre\">b</span> <span class=\"pre\">==</span> <span class=\"pre\">0:</span></code> において、 最初の式が <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code> の場合、以降の式は評価されることなく処理が進みます。</p>\n<p>以下のセルで示す例の1行目で、<code class=\"docutils literal notranslate\"><span class=\"pre\">x</span></code> の値を <code class=\"docutils literal notranslate\"><span class=\"pre\">0</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">-4</span></code> に変更し、表示される内容を予想し、予想通りか確認してください。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[9]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">x</span> <span class=\"o\">=</span> <span class=\"mi\">10</span>          <span class=\"c1\"># del x のエラーを抑制するため</span>\n<span class=\"n\">y</span> <span class=\"o\">=</span> <span class=\"mi\">10</span>\n\n<span class=\"k\">del</span> <span class=\"n\">x</span>           <span class=\"c1\"># x を未定義に</span>\n\n<span class=\"k\">if</span> <span class=\"n\">x</span> <span class=\"o\">&gt;</span> <span class=\"mi\">5</span> <span class=\"ow\">or</span> <span class=\"n\">y</span> <span class=\"o\">&gt;</span> <span class=\"mi\">5</span><span class=\"p\">:</span>\n    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s2\">&quot;&#39;x&#39; or &#39;y&#39; is larger than 5&quot;</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n<span class=\"ansi-red-fg\">---------------------------------------------------------------------------</span>\n<span class=\"ansi-red-fg\">NameError</span>                                 Traceback (most recent call last)\nCell <span class=\"ansi-green-fg\">In[9], line 6</span>\n<span class=\"ansi-green-intense-fg ansi-bold\">      2</span> y <span style=\"color: rgb(98,98,98)\">=</span> <span style=\"color: rgb(98,98,98)\">10</span>\n<span class=\"ansi-green-intense-fg ansi-bold\">      4</span> <span class=\"ansi-bold\" style=\"color: rgb(0,135,0)\">del</span> x           <span style=\"color: rgb(95,135,135)\"># x を未定義に</span>\n<span class=\"ansi-green-fg\">----&gt; 6</span> <span class=\"ansi-bold\" style=\"color: rgb(0,135,0)\">if</span> <span class=\"ansi-yellow-bg\">x</span> <span style=\"color: rgb(98,98,98)\">&gt;</span> <span style=\"color: rgb(98,98,98)\">5</span> <span class=\"ansi-bold\" style=\"color: rgb(175,0,255)\">or</span> y <span style=\"color: rgb(98,98,98)\">&gt;</span> <span style=\"color: rgb(98,98,98)\">5</span>:\n<span class=\"ansi-green-intense-fg ansi-bold\">      7</span>     <span style=\"color: rgb(0,135,0)\">print</span>(<span style=\"color: rgb(175,0,0)\">&#34;</span><span style=\"color: rgb(175,0,0)\">&#39;</span><span style=\"color: rgb(175,0,0)\">x</span><span style=\"color: rgb(175,0,0)\">&#39;</span><span style=\"color: rgb(175,0,0)\"> or </span><span style=\"color: rgb(175,0,0)\">&#39;</span><span style=\"color: rgb(175,0,0)\">y</span><span style=\"color: rgb(175,0,0)\">&#39;</span><span style=\"color: rgb(175,0,0)\"> is larger than 5</span><span style=\"color: rgb(175,0,0)\">&#34;</span>)\n\n<span class=\"ansi-red-fg\">NameError</span>: name &#39;x&#39; is not defined\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[10]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">x</span> <span class=\"o\">=</span> <span class=\"mi\">10</span>\n<span class=\"n\">y</span> <span class=\"o\">=</span> <span class=\"mi\">10</span>          <span class=\"c1\"># del y のエラーを抑制するため</span>\n\n<span class=\"k\">del</span> <span class=\"n\">y</span>           <span class=\"c1\"># y を未定義に</span>\n\n<span class=\"k\">if</span> <span class=\"n\">x</span> <span class=\"o\">&gt;</span> <span class=\"mi\">5</span> <span class=\"ow\">or</span> <span class=\"n\">y</span> <span class=\"o\">&gt;</span> <span class=\"mi\">5</span><span class=\"p\">:</span>\n    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s2\">&quot;&#39;x&#39; or &#39;y&#39; is larger than 5&quot;</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n&#39;x&#39; or &#39;y&#39; is larger than 5\n</pre></div></div>\n</div>\n</section>\n<section id=\"▲3項演算子（条件式）\">\n<h2>▲<strong>3項演算子</strong>（条件式）<a class=\"headerlink\" href=\"#▲3項演算子（条件式）\" title=\"Link to this heading\">¶</a></h2>\n<p>Pythonでは以下のように <code class=\"docutils literal notranslate\"><span class=\"pre\">if</span> <span class=\"pre\">...</span> <span class=\"pre\">else</span></code> を1行に書くこともできます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[11]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">x</span> <span class=\"o\">=</span> <span class=\"mi\">0</span>\n<span class=\"n\">sign</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;positive or zero&#39;</span> <span class=\"k\">if</span> <span class=\"n\">x</span> <span class=\"o\">&gt;=</span> <span class=\"mi\">0</span> <span class=\"k\">else</span> <span class=\"s1\">&#39;negative&#39;</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">sign</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\npositive or zero\n</pre></div></div>\n</div>\n<p>これは、以下と等価です。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[12]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">x</span> <span class=\"o\">=</span> <span class=\"mi\">0</span>\n<span class=\"k\">if</span> <span class=\"n\">x</span> <span class=\"o\">&gt;=</span> <span class=\"mi\">0</span> <span class=\"p\">:</span>\n    <span class=\"n\">sign</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;positive or zero&#39;</span>\n<span class=\"k\">else</span><span class=\"p\">:</span>\n    <span class=\"n\">sign</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;negative&#39;</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">sign</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\npositive or zero\n</pre></div></div>\n</div>\n</section>\n<section id=\"練習の解答\">\n<h2>練習の解答<a class=\"headerlink\" href=\"#練習の解答\" title=\"Link to this heading\">¶</a></h2>\n<p>以下は解答例です。これ以外にも様々な解答があり得ます。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[13]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">def</span> <span class=\"nf\">exception3</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">,</span><span class=\"n\">y</span><span class=\"p\">,</span><span class=\"n\">z</span><span class=\"p\">):</span>\n    <span class=\"k\">if</span> <span class=\"n\">x</span><span class=\"o\">==</span><span class=\"n\">y</span><span class=\"p\">:</span>\n        <span class=\"k\">return</span> <span class=\"n\">z</span>\n    <span class=\"k\">elif</span> <span class=\"n\">x</span><span class=\"o\">==</span><span class=\"n\">z</span><span class=\"p\">:</span>\n        <span class=\"k\">return</span> <span class=\"n\">y</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"k\">return</span> <span class=\"n\">x</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[14]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">def</span> <span class=\"nf\">exception9</span><span class=\"p\">(</span><span class=\"n\">a</span><span class=\"p\">):</span>\n    <span class=\"n\">x</span> <span class=\"o\">=</span> <span class=\"n\">a</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]</span> <span class=\"o\">+</span> <span class=\"n\">a</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">]</span> <span class=\"o\">+</span> <span class=\"n\">a</span><span class=\"p\">[</span><span class=\"mi\">2</span><span class=\"p\">]</span>\n    <span class=\"n\">y</span> <span class=\"o\">=</span> <span class=\"n\">a</span><span class=\"p\">[</span><span class=\"mi\">3</span><span class=\"p\">]</span> <span class=\"o\">+</span> <span class=\"n\">a</span><span class=\"p\">[</span><span class=\"mi\">4</span><span class=\"p\">]</span> <span class=\"o\">+</span> <span class=\"n\">a</span><span class=\"p\">[</span><span class=\"mi\">5</span><span class=\"p\">]</span>\n    <span class=\"n\">z</span> <span class=\"o\">=</span> <span class=\"n\">a</span><span class=\"p\">[</span><span class=\"mi\">6</span><span class=\"p\">]</span> <span class=\"o\">+</span> <span class=\"n\">a</span><span class=\"p\">[</span><span class=\"mi\">7</span><span class=\"p\">]</span> <span class=\"o\">+</span> <span class=\"n\">a</span><span class=\"p\">[</span><span class=\"mi\">8</span><span class=\"p\">]</span>\n    <span class=\"k\">if</span> <span class=\"n\">x</span><span class=\"o\">==</span><span class=\"n\">y</span><span class=\"p\">:</span>\n        <span class=\"k\">return</span> <span class=\"n\">exception3</span><span class=\"p\">(</span><span class=\"n\">a</span><span class=\"p\">[</span><span class=\"mi\">6</span><span class=\"p\">],</span> <span class=\"n\">a</span><span class=\"p\">[</span><span class=\"mi\">7</span><span class=\"p\">],</span> <span class=\"n\">a</span><span class=\"p\">[</span><span class=\"mi\">8</span><span class=\"p\">])</span>\n    <span class=\"k\">elif</span> <span class=\"n\">x</span><span class=\"o\">==</span><span class=\"n\">z</span><span class=\"p\">:</span>\n        <span class=\"k\">return</span> <span class=\"n\">exception3</span><span class=\"p\">(</span><span class=\"n\">a</span><span class=\"p\">[</span><span class=\"mi\">3</span><span class=\"p\">],</span> <span class=\"n\">a</span><span class=\"p\">[</span><span class=\"mi\">4</span><span class=\"p\">],</span> <span class=\"n\">a</span><span class=\"p\">[</span><span class=\"mi\">5</span><span class=\"p\">])</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"k\">return</span> <span class=\"n\">exception3</span><span class=\"p\">(</span><span class=\"n\">a</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">],</span> <span class=\"n\">a</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">],</span> <span class=\"n\">a</span><span class=\"p\">[</span><span class=\"mi\">2</span><span class=\"p\">])</span>\n</pre></div>\n</div>\n</div>\n</section>\n<section id=\"練習の解説\">\n<h2>練習の解説<a class=\"headerlink\" href=\"#練習の解説\" title=\"Link to this heading\">¶</a></h2>\n<p>最後の練習では、条件文の順番を修正する必要があります。 条件は上から順に処理され、式が真の場合にその「直後の実行文グループのみ」が処理されます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[15]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">x</span> <span class=\"o\">=</span> <span class=\"o\">-</span><span class=\"mi\">1</span>\n<span class=\"k\">if</span> <span class=\"n\">x</span> <span class=\"o\">&lt;</span> <span class=\"mi\">1</span><span class=\"p\">:</span>\n    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s1\">&#39;x is less than 1&#39;</span><span class=\"p\">)</span>\n<span class=\"k\">elif</span> <span class=\"n\">x</span> <span class=\"o\">&lt;</span> <span class=\"mi\">2</span><span class=\"p\">:</span>\n    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s1\">&#39;x is larger or equal to 1, and less than 2&#39;</span><span class=\"p\">)</span>\n<span class=\"k\">elif</span> <span class=\"n\">x</span> <span class=\"o\">&lt;</span> <span class=\"mi\">3</span><span class=\"p\">:</span>\n    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s1\">&#39;x is larger or equal to 2, and less than 3&#39;</span><span class=\"p\">)</span>\n<span class=\"k\">else</span><span class=\"p\">:</span>\n    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s1\">&#39;x is larger or equal to 3&#39;</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nx is less than 1\n</pre></div></div>\n</div>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[ ]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span>\n</pre></div>\n</div>\n</div>\n</section>\n</section>\n\n\n          </div>\n          \n        </div>\n      </div>\n      <div class=\"sphinxsidebar\" role=\"navigation\" aria-label=\"Main\">\n        <div class=\"sphinxsidebarwrapper\">\n<h1 class=\"logo\"><a href=\"../index.html\">Pythonプログラミング入門</a></h1>\n\n\n\n\n\n\n\n\n<p>\n  <a style=\"font-family: sans-serif; font-size: smaller; background: linear-gradient(to top, #353535 0%, #141414 100%); -webkit-font-smoothing: antialiased; font-weight: normal; text-shadow: rgb(0 0 0 / 40%) 0 -1px 0; padding: 2px 6px; color: #fff; text-decoration: none; border-radius: 4px; border: 1px solid #0d0d0d; box-shadow: inset 0 1px 1px 0 #8f8f8f;\" href=\"https://github.com/utokyo-ipp/utokyo-ipp.github.io\">View on GitHub</a>\n</p><p>\n  <a style=\"font-family: sans-serif; font-size: smaller; background: linear-gradient(to top, #ff1e00 0%, #de1e00 100%); -webkit-font-smoothing: antialiased; font-weight: normal; text-shadow: rgb(0 0 0 / 40%) 0 -1px 0; padding: 2px 6px; color: #fff; text-decoration: none; border-radius: 4px; border: 1px solid #0d0d0d; box-shadow: inset 0 1px 1px 0 #ff8e70;\" href=\"https://utokyo-ipp.github.io/IPP_textbook.pdf\">View PDF</a>\n</p><p>\n  <a style=\"border-bottom: none;\" href=\"https://colab.research.google.com/github/utokyo-ipp/utokyo-ipp.github.io/blob/master/colab/2/2-3.ipynb\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Google Colaboratory\"></a>\n</p><h3>Navigation</h3>\n<ul class=\"current\">\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../1/1-0.html\">1-0. Colaboratory (Colab) の使い方</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../1/1-1.html\">1-1. 数値演算</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../1/1-2.html\">1-2. 変数と関数の基礎</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../1/1-3.html\">1-3. 論理・比較演算と条件分岐の基礎</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../1/1-4.html\">1-4. テストとデバッグ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"2-1.html\">2-1. 文字列 (string)</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"2-2.html\">2-2. リスト (list)</a></li>\n<li class=\"toctree-l1 current\"><a class=\"current reference internal\" href=\"#\">2-3. 条件分岐</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#インデントによる構文\">インデントによる構文</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#if-...-else-による条件分岐\"><code class=\"docutils literal notranslate\"><span class=\"pre\">if</span></code> … <code class=\"docutils literal notranslate\"><span class=\"pre\">else</span></code> による条件分岐</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#if-...-elif-...-else-による条件分岐\"><code class=\"docutils literal notranslate\"><span class=\"pre\">if</span></code> … <code class=\"docutils literal notranslate\"><span class=\"pre\">elif</span></code> … <code class=\"docutils literal notranslate\"><span class=\"pre\">else</span></code> による条件分岐</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#練習\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#id4\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#▲複数行にまたがる条件式\">▲複数行にまたがる条件式</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#if-...-elif-...-else-における条件の評価\"><code class=\"docutils literal notranslate\"><span class=\"pre\">if</span></code> … <code class=\"docutils literal notranslate\"><span class=\"pre\">elif</span></code> … <code class=\"docutils literal notranslate\"><span class=\"pre\">else</span></code> における条件の評価</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#id7\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#or-もしくは-and-で結合された条件の評価\"><code class=\"docutils literal notranslate\"><span class=\"pre\">or</span></code> もしくは <code class=\"docutils literal notranslate\"><span class=\"pre\">and</span></code> で結合された条件の評価</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#▲3項演算子（条件式）\">▲<strong>3項演算子</strong>（条件式）</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#練習の解答\">練習の解答</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#練習の解説\">練習の解説</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../3/3-1.html\">3-1. 辞書 (dictionary)</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../3/3-2.html\">3-2. 繰り返し</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../3/3-3.html\">3-3. 関数</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../4/4-1.html\">4-1. ファイル入出力の基本</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../4/4-2.html\">4-2. イテラブルとイテレータ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../4/4-3.html\">4-3. ディレクトリと木構造</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../5/5-1.html\">5-1. モジュールの使い方</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../5/5-2.html\">5-2. モジュールの作り方</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../5/5-3.html\">5-3. NumPyライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../6/6-1.html\">6-1. 内包表記</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../6/6-2.html\">6-2. 高階関数</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../6/6-3.html\">6-3. クラス</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../7/7-1.html\">7-1. pandasライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../7/7-2.html\">7-2. scikit-learnライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/1-jupyter-notebook.html\">▲Jupyter Notebook の使い方</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/2-set.html\">▲セット (set)</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/3-recursion.html\">▲再帰</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/3-visualization.html\">▲簡単なデータの可視化</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/4-csv.html\">▲CSVファイルの入出力</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/5-bokeh.html\">▲Bokehライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/5-command.html\">▲Pythonスクリプトとコマンドライン実行</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/5-matplotlib.html\">▲Matplotlibライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/5-re.html\">▲正規表現</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../index_of_terms.html\">索引</a></li>\n</ul>\n\n<div class=\"relations\">\n<h3>Related Topics</h3>\n<ul>\n  <li><a href=\"../index.html\">Documentation overview</a><ul>\n      <li>Previous: <a href=\"2-2.html\" title=\"previous chapter\">2-2. リスト (list)</a></li>\n      <li>Next: <a href=\"../3/3-1.html\" title=\"next chapter\">3-1. 辞書 (dictionary)</a></li>\n  </ul></li>\n</ul>\n</div>\n<search id=\"searchbox\" style=\"display: none\" role=\"search\">\n  <h3 id=\"searchlabel\">Quick search</h3>\n    <div class=\"searchformwrapper\">\n    <form class=\"search\" action=\"../search.html\" method=\"get\">\n      <input type=\"text\" name=\"q\" aria-labelledby=\"searchlabel\" autocomplete=\"off\" autocorrect=\"off\" autocapitalize=\"off\" spellcheck=\"false\"/>\n      <input type=\"submit\" value=\"Go\" />\n    </form>\n    </div>\n</search>\n<script>document.getElementById('searchbox').style.display = \"block\"</script>\n\n\n\n\n\n\n\n\n        </div>\n      </div>\n      <div class=\"clearer\"></div>\n    </div>\n    <div class=\"footer\">\n      &#169;2020–2024, 東京大学 数理・情報教育研究センター (CC BY-NC-ND 4.0).\n      \n      |\n      Powered by <a href=\"https://www.sphinx-doc.org/\">Sphinx 8.0.2</a>\n      &amp; <a href=\"https://alabaster.readthedocs.io\">Alabaster 1.0.0</a>\n      \n    </div>\n\n    \n\n    \n    <script>\n\n      var _gaq = _gaq || [];\n      _gaq.push(['_setAccount', 'G-8M0RXGPPSR']);\n      _gaq.push(['_setDomainName', 'none']);\n      _gaq.push(['_setAllowLinker', true]);\n      _gaq.push(['_trackPageview']);\n\n      (function() {\n        var ga = document.createElement('script'); ga.async = true;\n        ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'https://www') + '.google-analytics.com/ga.js';\n        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);\n      })();\n\n    </script>\n    \n  </body>\n</html>"
  },
  {
    "path": "docs/3/3-1.html",
    "content": "<!DOCTYPE html>\n\n<html lang=\"jp\" data-content_root=\"../\">\n  <head>\n    <meta charset=\"utf-8\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" /><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n\n    <!-- Google tag (gtag.js) -->\n    <script async src=\"https://www.googletagmanager.com/gtag/js?id=G-8M0RXGPPSR\"></script>\n    <script>\n        window.dataLayer = window.dataLayer || [];\n        function gtag(){dataLayer.push(arguments);}\n        gtag('js', new Date());\n        gtag('config', 'G-8M0RXGPPSR');\n    </script>\n    \n    <title>3-1. 辞書 (dictionary) &#8212; Pythonプログラミング入門  documentation</title>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/pygments.css?v=d1102ebc\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/basic.css?v=c058f7c8\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/alabaster.css?v=27fed22d\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/nbsphinx-code-cells.css\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/custom.css?v=1a1aa8dd\" />\n    <script src=\"../_static/documentation_options.js?v=3ff7d7a7\"></script>\n    <script src=\"../_static/doctools.js?v=9a2dae69\"></script>\n    <script src=\"../_static/sphinx_highlight.js?v=dc90522c\"></script>\n    <script crossorigin=\"anonymous\" integrity=\"sha256-Ae2Vz/4ePdIu6ZyI/5ZGsYnb+m0JlOmKPjt6XZ9JJkA=\" src=\"https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.4/require.min.js\"></script>\n    <script>window.MathJax = {\"tex\": {\"inlineMath\": [[\"$\", \"$\"], [\"\\\\(\", \"\\\\)\"]], \"processEscapes\": true}, \"options\": {\"ignoreHtmlClass\": \"tex2jax_ignore|mathjax_ignore|document\", \"processHtmlClass\": \"tex2jax_process|mathjax_process|math|output_area\"}}</script>\n    <script defer=\"defer\" src=\"https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js\"></script>\n    <link rel=\"index\" title=\"Index\" href=\"../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../search.html\" />\n    <link rel=\"next\" title=\"3-2. 繰り返し\" href=\"3-2.html\" />\n    <link rel=\"prev\" title=\"2-3. 条件分岐\" href=\"../2/2-3.html\" />\n   \n  <link rel=\"stylesheet\" href=\"../_static/custom.css\" type=\"text/css\" />\n  \n\n  \n  \n\n  </head><body>\n  \n\n    <div class=\"document\">\n      <div class=\"documentwrapper\">\n        <div class=\"bodywrapper\">\n          \n\n          <div class=\"body\" role=\"main\">\n            \n  <section id=\"3-1.-辞書-(dictionary)\">\n<h1>3-1. 辞書 (dictionary)<a class=\"headerlink\" href=\"#3-1.-辞書-(dictionary)\" title=\"Link to this heading\">¶</a></h1>\n<p>キーと値を対応させるデータ構造である辞書について説明します。</p>\n<p>参考</p>\n<ul class=\"simple\">\n<li><p><a class=\"reference external\" href=\"https://docs.python.org/ja/3/tutorial/datastructures.html#dictionaries\">https://docs.python.org/ja/3/tutorial/datastructures.html#dictionaries</a></p></li>\n</ul>\n<p><strong>辞書</strong>は、<strong>キー</strong> (<strong>key</strong>) と<strong>値</strong> (<strong>value</strong>) を対応づけるデータです。 キーとしては、文字列・数値・タプルなどの変更不可能なデータを使うことができますが、 変更可能なデータであるリスト・辞書を使うことはできません。 （辞書も変更可能なデータです。） 一方、値としては、変更の可否にかかわらずあらゆる種類のデータを指定できます。</p>\n<p>たとえば、文字列 <code class=\"docutils literal notranslate\"><span class=\"pre\">'apple'</span></code> をキーとし値として数値 <code class=\"docutils literal notranslate\"><span class=\"pre\">3</span></code> を、<code class=\"docutils literal notranslate\"><span class=\"pre\">'pen'</span></code> をキーとして <code class=\"docutils literal notranslate\"><span class=\"pre\">5</span></code> を対応付けた辞書は、 次のように作成します。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[1]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">ppap</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;apple&#39;</span> <span class=\"p\">:</span> <span class=\"mi\">3</span><span class=\"p\">,</span> <span class=\"s1\">&#39;pen&#39;</span> <span class=\"p\">:</span> <span class=\"mi\">5</span><span class=\"p\">}</span>\n<span class=\"n\">ppap</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[1]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n{&#39;apple&#39;: 3, &#39;pen&#39;: 5}\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[2]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">type</span><span class=\"p\">(</span><span class=\"n\">ppap</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[2]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\ndict\n</pre></div></div>\n</div>\n<p>辞書の <code class=\"docutils literal notranslate\"><span class=\"pre\">キー1</span></code> に対応する値を得るには、リストにおけるインデックスと同様に、</p>\n<div class=\"highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>辞書[キー1]\n</pre></div>\n</div>\n<p>とします。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[3]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">ppap</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;apple&#39;</span> <span class=\"p\">:</span> <span class=\"mi\">3</span><span class=\"p\">,</span> <span class=\"s1\">&#39;pen&#39;</span> <span class=\"p\">:</span> <span class=\"mi\">5</span><span class=\"p\">}</span>\n<span class=\"n\">ppap</span><span class=\"p\">[</span><span class=\"s1\">&#39;apple&#39;</span><span class=\"p\">]</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[3]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n3\n</pre></div></div>\n</div>\n<p>辞書に登録されていないキーを指定すると、エラーになります。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[4]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">ppap</span><span class=\"p\">[</span><span class=\"s1\">&#39;orange&#39;</span><span class=\"p\">]</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n<span class=\"ansi-red-fg\">---------------------------------------------------------------------------</span>\n<span class=\"ansi-red-fg\">KeyError</span>                                  Traceback (most recent call last)\nCell <span class=\"ansi-green-fg\">In[4], line 1</span>\n<span class=\"ansi-green-fg\">----&gt; 1</span> <span class=\"ansi-yellow-bg\">ppap</span><span class=\"ansi-yellow-bg\">[</span><span class=\"ansi-yellow-bg\" style=\"color: rgb(175,0,0)\">&#39;</span><span class=\"ansi-yellow-bg\" style=\"color: rgb(175,0,0)\">orange</span><span class=\"ansi-yellow-bg\" style=\"color: rgb(175,0,0)\">&#39;</span><span class=\"ansi-yellow-bg\">]</span>\n\n<span class=\"ansi-red-fg\">KeyError</span>: &#39;orange&#39;\n</pre></div></div>\n</div>\n<p>キーに対する値を変更したり、新たなキーと値を登録するには代入文を用います。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[5]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">ppap</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;apple&#39;</span> <span class=\"p\">:</span> <span class=\"mi\">3</span><span class=\"p\">,</span> <span class=\"s1\">&#39;pen&#39;</span> <span class=\"p\">:</span> <span class=\"mi\">5</span><span class=\"p\">}</span>\n<span class=\"n\">ppap</span><span class=\"p\">[</span><span class=\"s1\">&#39;apple&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"mi\">10</span>\n<span class=\"n\">ppap</span><span class=\"p\">[</span><span class=\"s1\">&#39;pinapple&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"mi\">7</span>\n<span class=\"n\">ppap</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[5]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n{&#39;apple&#39;: 10, &#39;pen&#39;: 5, &#39;pinapple&#39;: 7}\n</pre></div></div>\n</div>\n<p>上のようにキーから値は取り出せますが、値からキーを直接取り出すことはできません。 また、リストのようにインデックスを指定して値を取得することはできません。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[6]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">ppap</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">]</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n<span class=\"ansi-red-fg\">---------------------------------------------------------------------------</span>\n<span class=\"ansi-red-fg\">KeyError</span>                                  Traceback (most recent call last)\nCell <span class=\"ansi-green-fg\">In[6], line 1</span>\n<span class=\"ansi-green-fg\">----&gt; 1</span> <span class=\"ansi-yellow-bg\">ppap</span><span class=\"ansi-yellow-bg\">[</span><span class=\"ansi-yellow-bg\" style=\"color: rgb(98,98,98)\">1</span><span class=\"ansi-yellow-bg\">]</span>\n\n<span class=\"ansi-red-fg\">KeyError</span>: 1\n</pre></div></div>\n</div>\n<p>キーが辞書に登録されているかどうかは、演算子 <code class=\"docutils literal notranslate\"><span class=\"pre\">in</span></code> を用いて調べることができます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[7]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">ppap</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;apple&#39;</span><span class=\"p\">:</span> <span class=\"mi\">3</span><span class=\"p\">,</span> <span class=\"s1\">&#39;pen&#39;</span><span class=\"p\">:</span> <span class=\"mi\">5</span><span class=\"p\">}</span>\n<span class=\"s1\">&#39;apple&#39;</span> <span class=\"ow\">in</span> <span class=\"n\">ppap</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[7]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nTrue\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[8]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"s1\">&#39;banana&#39;</span> <span class=\"ow\">in</span> <span class=\"n\">ppap</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[8]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nFalse\n</pre></div></div>\n</div>\n<p>組み込み関数 <code class=\"docutils literal notranslate\"><span class=\"pre\">len</span></code> によって、辞書に登録されている要素、キーと値のペア、の数が得られます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[9]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">ppap</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;apple&#39;</span><span class=\"p\">:</span> <span class=\"mi\">3</span><span class=\"p\">,</span> <span class=\"s1\">&#39;pen&#39;</span><span class=\"p\">:</span> <span class=\"mi\">5</span><span class=\"p\">}</span>\n<span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">ppap</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[9]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n2\n</pre></div></div>\n</div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">del</span></code> 文によって、登録されているキーの要素を削除することができます。具体的には、次のように削除します。</p>\n<div class=\"highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>del 辞書[削除したいキー]\n</pre></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[10]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">ppap</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;apple&#39;</span> <span class=\"p\">:</span> <span class=\"mi\">3</span><span class=\"p\">,</span> <span class=\"s1\">&#39;pen&#39;</span> <span class=\"p\">:</span> <span class=\"mi\">5</span><span class=\"p\">}</span>\n<span class=\"k\">del</span> <span class=\"n\">ppap</span><span class=\"p\">[</span><span class=\"s1\">&#39;pen&#39;</span><span class=\"p\">]</span>\n<span class=\"n\">ppap</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[10]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n{&#39;apple&#39;: 3}\n</pre></div></div>\n</div>\n<p>空のリストと同様に空の辞書を作ることもできます。このような空のデータは繰り返し処理でしばしば使われます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[11]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">empty_d</span> <span class=\"o\">=</span> <span class=\"p\">{}</span>\n<span class=\"n\">empty_d</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[11]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n{}\n</pre></div></div>\n</div>\n<section id=\"練習\">\n<h2>練習<a class=\"headerlink\" href=\"#練習\" title=\"Link to this heading\">¶</a></h2>\n<p>リスト <code class=\"docutils literal notranslate\"><span class=\"pre\">list1</span></code> が引数として与えられたとき、<code class=\"docutils literal notranslate\"><span class=\"pre\">list1</span></code> の各要素 <code class=\"docutils literal notranslate\"><span class=\"pre\">value</span></code> をキー、<code class=\"docutils literal notranslate\"><span class=\"pre\">value</span></code> の <code class=\"docutils literal notranslate\"><span class=\"pre\">list1</span></code> におけるインデックスをキーに対応する値とした辞書を返す関数 <code class=\"docutils literal notranslate\"><span class=\"pre\">reverse_lookup</span></code> を作成してください。</p>\n<p>以下のセルの <code class=\"docutils literal notranslate\"><span class=\"pre\">...</span></code> のところを書き換えて <code class=\"docutils literal notranslate\"><span class=\"pre\">reverse_lookup(list1)</span></code> を作成してください。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[12]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">def</span> <span class=\"nf\">reverse_lookup</span><span class=\"p\">(</span><span class=\"n\">list1</span><span class=\"p\">):</span>\n    <span class=\"o\">...</span>\n</pre></div>\n</div>\n</div>\n<p>上のセルで解答を作成した後、以下のセルを実行し、実行結果が <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> になることを確認してください。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[13]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">reverse_lookup</span><span class=\"p\">([</span><span class=\"s1\">&#39;apple&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;pen&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;orange&#39;</span><span class=\"p\">])</span> <span class=\"o\">==</span> <span class=\"p\">{</span><span class=\"s1\">&#39;apple&#39;</span><span class=\"p\">:</span> <span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"s1\">&#39;orange&#39;</span><span class=\"p\">:</span> <span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"s1\">&#39;pen&#39;</span><span class=\"p\">:</span> <span class=\"mi\">1</span><span class=\"p\">})</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nFalse\n</pre></div></div>\n</div>\n</section>\n<section id=\"辞書のメソッド\">\n<h2>辞書のメソッド<a class=\"headerlink\" href=\"#辞書のメソッド\" title=\"Link to this heading\">¶</a></h2>\n<p>辞書のメソッドを紹介しておきます。</p>\n<section id=\"キーを指定して値を得るメソッド\">\n<h3>キーを指定して値を得るメソッド<a class=\"headerlink\" href=\"#キーを指定して値を得るメソッド\" title=\"Link to this heading\">¶</a></h3>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">get</span></code> メソッドは、引数として指定したキーが辞書に含まれてる場合にはその値を取得し、 指定したキーが含まれていない場合には <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code> を返します。 <code class=\"docutils literal notranslate\"><span class=\"pre\">get</span></code> を利用することで、エラーを回避し、登録されているかどうかわからないキーを使うことができます。 先に説明したキーを括弧、<code class=\"docutils literal notranslate\"><span class=\"pre\">[...]</span></code>、で指定する方法では、 辞書にキーが存在しないとエラーとなりプログラムの実行が停止してしまいます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[14]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">ppap</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;apple&#39;</span> <span class=\"p\">:</span> <span class=\"mi\">3</span><span class=\"p\">,</span> <span class=\"s1\">&#39;pen&#39;</span> <span class=\"p\">:</span> <span class=\"mi\">5</span><span class=\"p\">}</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s1\">&#39;キーappleに対応する値 = &#39;</span><span class=\"p\">,</span> <span class=\"n\">ppap</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s1\">&#39;apple&#39;</span><span class=\"p\">))</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s1\">&#39;キーorangeに対応する値 = &#39;</span><span class=\"p\">,</span> <span class=\"n\">ppap</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s1\">&#39;orange&#39;</span><span class=\"p\">))</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s1\">&#39;キーorangeに対応する値（エラー） = &#39;</span><span class=\"p\">,</span> <span class=\"n\">ppap</span><span class=\"p\">[</span><span class=\"s1\">&#39;orange&#39;</span><span class=\"p\">])</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nキーappleに対応する値 =  3\nキーorangeに対応する値 =  None\n</pre></div></div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n<span class=\"ansi-red-fg\">---------------------------------------------------------------------------</span>\n<span class=\"ansi-red-fg\">KeyError</span>                                  Traceback (most recent call last)\nCell <span class=\"ansi-green-fg\">In[14], line 4</span>\n<span class=\"ansi-green-intense-fg ansi-bold\">      2</span> <span style=\"color: rgb(0,135,0)\">print</span>(<span style=\"color: rgb(175,0,0)\">&#39;</span><span style=\"color: rgb(175,0,0)\">キーappleに対応する値 = </span><span style=\"color: rgb(175,0,0)\">&#39;</span>, ppap<span style=\"color: rgb(98,98,98)\">.</span>get(<span style=\"color: rgb(175,0,0)\">&#39;</span><span style=\"color: rgb(175,0,0)\">apple</span><span style=\"color: rgb(175,0,0)\">&#39;</span>))\n<span class=\"ansi-green-intense-fg ansi-bold\">      3</span> <span style=\"color: rgb(0,135,0)\">print</span>(<span style=\"color: rgb(175,0,0)\">&#39;</span><span style=\"color: rgb(175,0,0)\">キーorangeに対応する値 = </span><span style=\"color: rgb(175,0,0)\">&#39;</span>, ppap<span style=\"color: rgb(98,98,98)\">.</span>get(<span style=\"color: rgb(175,0,0)\">&#39;</span><span style=\"color: rgb(175,0,0)\">orange</span><span style=\"color: rgb(175,0,0)\">&#39;</span>))\n<span class=\"ansi-green-fg\">----&gt; 4</span> <span style=\"color: rgb(0,135,0)\">print</span>(<span style=\"color: rgb(175,0,0)\">&#39;</span><span style=\"color: rgb(175,0,0)\">キーorangeに対応する値（エラー） = </span><span style=\"color: rgb(175,0,0)\">&#39;</span>, <span class=\"ansi-yellow-bg\">ppap</span><span class=\"ansi-yellow-bg\">[</span><span class=\"ansi-yellow-bg\" style=\"color: rgb(175,0,0)\">&#39;</span><span class=\"ansi-yellow-bg\" style=\"color: rgb(175,0,0)\">orange</span><span class=\"ansi-yellow-bg\" style=\"color: rgb(175,0,0)\">&#39;</span><span class=\"ansi-yellow-bg\">]</span>)\n\n<span class=\"ansi-red-fg\">KeyError</span>: &#39;orange&#39;\n</pre></div></div>\n</div>\n<p>また、<code class=\"docutils literal notranslate\"><span class=\"pre\">get</span></code> に2番目の引数を与えると、その引数の値を「指定したキーが含まれていない場合」に <code class=\"docutils literal notranslate\"><span class=\"pre\">get</span></code> が返す値とすることができます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[15]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">ppap</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;apple&#39;</span> <span class=\"p\">:</span> <span class=\"mi\">3</span><span class=\"p\">,</span> <span class=\"s1\">&#39;pen&#39;</span> <span class=\"p\">:</span> <span class=\"mi\">5</span><span class=\"p\">}</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s1\">&#39;キーappleに対応する値 = &#39;</span><span class=\"p\">,</span> <span class=\"n\">ppap</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s1\">&#39;apple&#39;</span><span class=\"p\">,</span> <span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">))</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s1\">&#39;キーorangeに対応する値 = &#39;</span><span class=\"p\">,</span> <span class=\"n\">ppap</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s1\">&#39;orange&#39;</span><span class=\"p\">,</span> <span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">))</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nキーappleに対応する値 =  3\nキーorangeに対応する値 =  -1\n</pre></div></div>\n</div>\n</section>\n<section id=\"▲キーがない場合に登録を行う\">\n<h3>▲キーがない場合に登録を行う<a class=\"headerlink\" href=\"#▲キーがない場合に登録を行う\" title=\"Link to this heading\">¶</a></h3>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">setdefault</span></code> メソッドは、 指定したキーが辞書に含まれてる場合には、対応する値を返します。 キーが含まれていない場合には、2番目の引数として指定した値を返すと同時に、キーに対応する値として登録します。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[16]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">ppap</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;apple&#39;</span> <span class=\"p\">:</span> <span class=\"mi\">3</span><span class=\"p\">,</span> <span class=\"s1\">&#39;pen&#39;</span> <span class=\"p\">:</span> <span class=\"mi\">5</span><span class=\"p\">}</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s1\">&#39;キーappleに対応する値 = &#39;</span><span class=\"p\">,</span> <span class=\"n\">ppap</span><span class=\"o\">.</span><span class=\"n\">setdefault</span><span class=\"p\">(</span><span class=\"s1\">&#39;apple&#39;</span><span class=\"p\">,</span> <span class=\"mi\">7</span><span class=\"p\">))</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s1\">&#39;setdefault(&quot;apple&quot;, 7)を実行後の辞書 = &#39;</span><span class=\"p\">,</span> <span class=\"n\">ppap</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s1\">&#39;キーorangeに対応する値 = &#39;</span><span class=\"p\">,</span> <span class=\"n\">ppap</span><span class=\"o\">.</span><span class=\"n\">setdefault</span><span class=\"p\">(</span><span class=\"s1\">&#39;orange&#39;</span><span class=\"p\">,</span> <span class=\"mi\">7</span><span class=\"p\">))</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s1\">&#39;setdefault(&quot;orange&quot;, 7)を実行後の辞書 = &#39;</span><span class=\"p\">,</span> <span class=\"n\">ppap</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nキーappleに対応する値 =  3\nsetdefault(&#34;apple&#34;, 7)を実行後の辞書 =  {&#39;apple&#39;: 3, &#39;pen&#39;: 5}\nキーorangeに対応する値 =  7\nsetdefault(&#34;orange&#34;, 7)を実行後の辞書 =  {&#39;apple&#39;: 3, &#39;pen&#39;: 5, &#39;orange&#39;: 7}\n</pre></div></div>\n</div>\n<p>上のような <code class=\"docutils literal notranslate\"><span class=\"pre\">setdefault</span></code> を用いた手続きを、<code class=\"docutils literal notranslate\"><span class=\"pre\">[...]</span></code> を用いて書き換えるとたとえば次のようになります。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[17]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">ppap</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;apple&#39;</span> <span class=\"p\">:</span> <span class=\"mi\">3</span><span class=\"p\">,</span> <span class=\"s1\">&#39;pen&#39;</span> <span class=\"p\">:</span> <span class=\"mi\">5</span><span class=\"p\">}</span>\n<span class=\"k\">if</span> <span class=\"s1\">&#39;apple&#39;</span> <span class=\"ow\">not</span> <span class=\"ow\">in</span> <span class=\"n\">ppap</span><span class=\"p\">:</span>\n    <span class=\"n\">ppap</span><span class=\"p\">[</span><span class=\"s1\">&#39;apple&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"mi\">7</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s1\">&#39;キーappleに対応する値 = &#39;</span><span class=\"p\">,</span> <span class=\"n\">ppap</span><span class=\"p\">[</span><span class=\"s1\">&#39;apple&#39;</span><span class=\"p\">])</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s1\">&#39;実行後の辞書 = &#39;</span><span class=\"p\">,</span> <span class=\"n\">ppap</span><span class=\"p\">)</span>\n<span class=\"k\">if</span> <span class=\"s1\">&#39;orange&#39;</span> <span class=\"ow\">not</span> <span class=\"ow\">in</span> <span class=\"n\">ppap</span><span class=\"p\">:</span>\n    <span class=\"n\">ppap</span><span class=\"p\">[</span><span class=\"s1\">&#39;orange&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"mi\">7</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s1\">&#39;キーorangeに対応する値 = &#39;</span><span class=\"p\">,</span> <span class=\"n\">ppap</span><span class=\"p\">[</span><span class=\"s1\">&#39;orange&#39;</span><span class=\"p\">])</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s1\">&#39;実行後の辞書 = &#39;</span><span class=\"p\">,</span> <span class=\"n\">ppap</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nキーappleに対応する値 =  3\n実行後の辞書 =  {&#39;apple&#39;: 3, &#39;pen&#39;: 5}\nキーorangeに対応する値 =  7\n実行後の辞書 =  {&#39;apple&#39;: 3, &#39;pen&#39;: 5, &#39;orange&#39;: 7}\n</pre></div></div>\n</div>\n</section>\n<section id=\"▲キーを指定した削除\">\n<h3>▲キーを指定した削除<a class=\"headerlink\" href=\"#▲キーを指定した削除\" title=\"Link to this heading\">¶</a></h3>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">pop</span></code> メソッドは指定したキーおよびそれに対応する値を削除し、削除されるキーに対応付けられた値を返します。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[18]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">ppap</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;apple&#39;</span> <span class=\"p\">:</span> <span class=\"mi\">3</span><span class=\"p\">,</span> <span class=\"s1\">&#39;pen&#39;</span> <span class=\"p\">:</span> <span class=\"mi\">5</span><span class=\"p\">}</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">ppap</span><span class=\"o\">.</span><span class=\"n\">pop</span><span class=\"p\">(</span><span class=\"s1\">&#39;pen&#39;</span><span class=\"p\">))</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">ppap</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n5\n{&#39;apple&#39;: 3}\n</pre></div></div>\n</div>\n</section>\n<section id=\"▲全てのキーと値の削除\">\n<h3>▲全てのキーと値の削除<a class=\"headerlink\" href=\"#▲全てのキーと値の削除\" title=\"Link to this heading\">¶</a></h3>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">clear</span></code> メソッドは全てのキーと値を削除します。その結果、辞書は空となります。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[19]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">ppap</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;apple&#39;</span> <span class=\"p\">:</span> <span class=\"mi\">3</span><span class=\"p\">,</span> <span class=\"s1\">&#39;pen&#39;</span> <span class=\"p\">:</span> <span class=\"mi\">5</span><span class=\"p\">}</span>\n<span class=\"n\">ppap</span><span class=\"o\">.</span><span class=\"n\">clear</span><span class=\"p\">()</span>\n<span class=\"n\">ppap</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[19]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n{}\n</pre></div></div>\n</div>\n</section>\n<section id=\"キーの一覧を得る\">\n<h3>キーの一覧を得る<a class=\"headerlink\" href=\"#キーの一覧を得る\" title=\"Link to this heading\">¶</a></h3>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">keys</span></code> メソッドはキーの一覧を返します。これはリストのようなものとして扱うことができ、 <code class=\"docutils literal notranslate\"><span class=\"pre\">for</span></code> ループと組み合わせて繰り返し処理で利用されます（3-2を参照してください）。 以下のように、<code class=\"docutils literal notranslate\"><span class=\"pre\">keys</span></code> メソッドが返した結果に関数 <code class=\"docutils literal notranslate\"><span class=\"pre\">list</span></code> を適用すると、 通常のリストになります。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[20]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">ppap</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;apple&#39;</span> <span class=\"p\">:</span> <span class=\"mi\">3</span><span class=\"p\">,</span> <span class=\"s1\">&#39;pen&#39;</span> <span class=\"p\">:</span> <span class=\"mi\">5</span><span class=\"p\">}</span>\n<span class=\"nb\">list</span><span class=\"p\">(</span><span class=\"n\">ppap</span><span class=\"o\">.</span><span class=\"n\">keys</span><span class=\"p\">())</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[20]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n[&#39;apple&#39;, &#39;pen&#39;]\n</pre></div></div>\n</div>\n</section>\n<section id=\"値の一覧を得る\">\n<h3>値の一覧を得る<a class=\"headerlink\" href=\"#値の一覧を得る\" title=\"Link to this heading\">¶</a></h3>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">values</span></code> メソッドはキーに対応する全ての値の一覧を返します。これもリストのようなものとして扱うことができます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[21]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">list</span><span class=\"p\">(</span><span class=\"n\">ppap</span><span class=\"o\">.</span><span class=\"n\">values</span><span class=\"p\">())</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[21]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n[3, 5]\n</pre></div></div>\n</div>\n</section>\n<section id=\"キーと値の一覧を得る\">\n<h3>キーと値の一覧を得る<a class=\"headerlink\" href=\"#キーと値の一覧を得る\" title=\"Link to this heading\">¶</a></h3>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">items</span></code> メソッドはキーとそれに対応する値をタプルにした一覧を返します。 これもタプルを要素とするリストのようなものとして扱うことができ、forループなどで活用します（3-2を参照してください）。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[22]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">list</span><span class=\"p\">(</span><span class=\"n\">ppap</span><span class=\"o\">.</span><span class=\"n\">items</span><span class=\"p\">())</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[22]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n[(&#39;apple&#39;, 3), (&#39;pen&#39;, 5)]\n</pre></div></div>\n</div>\n</section>\n<section id=\"▲辞書を複製する\">\n<h3>▲辞書を複製する<a class=\"headerlink\" href=\"#▲辞書を複製する\" title=\"Link to this heading\">¶</a></h3>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">copy</span></code> メソッドは辞書を複製します。リストの場合と同様に一方の辞書を変更してももう一方の辞書は影響を受けません。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[23]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">ppap</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;apple&#39;</span><span class=\"p\">:</span> <span class=\"mi\">3</span><span class=\"p\">,</span> <span class=\"s1\">&#39;pen&#39;</span><span class=\"p\">:</span> <span class=\"mi\">5</span><span class=\"p\">,</span> <span class=\"s1\">&#39;orange&#39;</span><span class=\"p\">:</span> <span class=\"mi\">7</span><span class=\"p\">}</span>\n<span class=\"n\">ppap2</span> <span class=\"o\">=</span> <span class=\"n\">ppap</span><span class=\"o\">.</span><span class=\"n\">copy</span><span class=\"p\">()</span>\n<span class=\"n\">ppap</span><span class=\"p\">[</span><span class=\"s1\">&#39;banana&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"mi\">9</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">ppap</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">ppap2</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n{&#39;apple&#39;: 3, &#39;pen&#39;: 5, &#39;orange&#39;: 7, &#39;banana&#39;: 9}\n{&#39;apple&#39;: 3, &#39;pen&#39;: 5, &#39;orange&#39;: 7}\n</pre></div></div>\n</div>\n</section>\n<section id=\"▲-keys,-values,-items-の返値\">\n<h3>▲ <code class=\"docutils literal notranslate\"><span class=\"pre\">keys</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">values</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">items</span></code> の返値<a class=\"headerlink\" href=\"#▲-keys,-values,-items-の返値\" title=\"Link to this heading\">¶</a></h3>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">keys</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">values</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">items</span></code> メソッドの一連の説明では、返値を「リストのようなもの」と表現してきました。 通常のリストとどう違うのでしょうか？</p>\n<p>次の例では、<code class=\"docutils literal notranslate\"><span class=\"pre\">ppap</span></code> の <code class=\"docutils literal notranslate\"><span class=\"pre\">keys</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">values</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">items</span></code> メソッドの返値をそれぞれ <code class=\"docutils literal notranslate\"><span class=\"pre\">ks</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">vs</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">itms</span></code> に代入し、 <code class=\"docutils literal notranslate\"><span class=\"pre\">print</span></code> でそれぞれの内容を表示させています。</p>\n<p>次いで、<code class=\"docutils literal notranslate\"><span class=\"pre\">ppap</span></code> に新たな要素を加えたのちに、同じ変数の内容を表示させています。 1, 2回目の <code class=\"docutils literal notranslate\"><span class=\"pre\">print</span></code> で内容が異なることに注意してください。 もとの辞書が更新されると、これらの内容も動的に変わります。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[24]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">ppap</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;apple&#39;</span><span class=\"p\">:</span> <span class=\"mi\">3</span><span class=\"p\">,</span> <span class=\"s1\">&#39;pen&#39;</span><span class=\"p\">:</span> <span class=\"mi\">5</span><span class=\"p\">,</span> <span class=\"s1\">&#39;orange&#39;</span><span class=\"p\">:</span> <span class=\"mi\">7</span><span class=\"p\">}</span>\n<span class=\"n\">ks</span> <span class=\"o\">=</span> <span class=\"n\">ppap</span><span class=\"o\">.</span><span class=\"n\">keys</span><span class=\"p\">()</span>\n<span class=\"n\">vs</span> <span class=\"o\">=</span> <span class=\"n\">ppap</span><span class=\"o\">.</span><span class=\"n\">values</span><span class=\"p\">()</span>\n<span class=\"n\">itms</span> <span class=\"o\">=</span> <span class=\"n\">ppap</span><span class=\"o\">.</span><span class=\"n\">items</span><span class=\"p\">()</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"nb\">list</span><span class=\"p\">(</span><span class=\"n\">ks</span><span class=\"p\">))</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"nb\">list</span><span class=\"p\">(</span><span class=\"n\">vs</span><span class=\"p\">))</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"nb\">list</span><span class=\"p\">(</span><span class=\"n\">itms</span><span class=\"p\">))</span>\n<span class=\"n\">ppap</span><span class=\"p\">[</span><span class=\"s1\">&#39;kiwi&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"mi\">9</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"nb\">list</span><span class=\"p\">(</span><span class=\"n\">ks</span><span class=\"p\">))</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"nb\">list</span><span class=\"p\">(</span><span class=\"n\">vs</span><span class=\"p\">))</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"nb\">list</span><span class=\"p\">(</span><span class=\"n\">itms</span><span class=\"p\">))</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n[&#39;apple&#39;, &#39;pen&#39;, &#39;orange&#39;]\n[3, 5, 7]\n[(&#39;apple&#39;, 3), (&#39;pen&#39;, 5), (&#39;orange&#39;, 7)]\n[&#39;apple&#39;, &#39;pen&#39;, &#39;orange&#39;, &#39;kiwi&#39;]\n[3, 5, 7, 9]\n[(&#39;apple&#39;, 3), (&#39;pen&#39;, 5), (&#39;orange&#39;, 7), (&#39;kiwi&#39;, 9)]\n</pre></div></div>\n</div>\n</section>\n</section>\n<section id=\"辞書とリスト\">\n<h2>辞書とリスト<a class=\"headerlink\" href=\"#辞書とリスト\" title=\"Link to this heading\">¶</a></h2>\n<p>冒頭で述べたように、辞書では値としてあらゆる型のデータを使用できます。 すなわち、次のように値としてリストを使用する辞書を作成可能です。 リストの要素を参照するには数字インデックスをさらに指定します。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[25]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">numbers</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;dozens&#39;</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"mi\">10</span><span class=\"p\">,</span> <span class=\"mi\">20</span><span class=\"p\">,</span> <span class=\"mi\">40</span><span class=\"p\">],</span> <span class=\"s1\">&#39;hundreds&#39;</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"mi\">100</span><span class=\"p\">,</span> <span class=\"mi\">101</span><span class=\"p\">,</span> <span class=\"mi\">120</span><span class=\"p\">,</span> <span class=\"mi\">140</span><span class=\"p\">]}</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">numbers</span><span class=\"p\">[</span><span class=\"s1\">&#39;dozens&#39;</span><span class=\"p\">])</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">numbers</span><span class=\"p\">[</span><span class=\"s1\">&#39;dozens&#39;</span><span class=\"p\">][</span><span class=\"mi\">1</span><span class=\"p\">])</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n[10, 20, 40]\n20\n</pre></div></div>\n</div>\n<p>逆に、辞書を要素とするリストを作成することもできます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[26]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">ppap</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;apple&#39;</span><span class=\"p\">:</span> <span class=\"mi\">3</span><span class=\"p\">,</span> <span class=\"s1\">&#39;pen&#39;</span><span class=\"p\">:</span> <span class=\"mi\">5</span><span class=\"p\">}</span>\n<span class=\"n\">pets</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;cat&#39;</span><span class=\"p\">:</span> <span class=\"mi\">3</span><span class=\"p\">,</span> <span class=\"s1\">&#39;dog&#39;</span><span class=\"p\">:</span> <span class=\"mi\">3</span><span class=\"p\">,</span> <span class=\"s1\">&#39;elephant&#39;</span><span class=\"p\">:</span> <span class=\"mi\">8</span><span class=\"p\">}</span>\n<span class=\"n\">ld</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"n\">ppap</span><span class=\"p\">,</span> <span class=\"n\">pets</span><span class=\"p\">]</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">ld</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">])</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">ld</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">][</span><span class=\"s1\">&#39;dog&#39;</span><span class=\"p\">])</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n{&#39;cat&#39;: 3, &#39;dog&#39;: 3, &#39;elephant&#39;: 8}\n3\n</pre></div></div>\n</div>\n</section>\n<section id=\"id12\">\n<h2>練習<a class=\"headerlink\" href=\"#id12\" title=\"Link to this heading\">¶</a></h2>\n<p>辞書 <code class=\"docutils literal notranslate\"><span class=\"pre\">dic1</span></code> と文字列 <code class=\"docutils literal notranslate\"><span class=\"pre\">str1</span></code> が引数として与えられたとき、 以下のように <code class=\"docutils literal notranslate\"><span class=\"pre\">dic1</span></code> を変更する関数 <code class=\"docutils literal notranslate\"><span class=\"pre\">handle_collision</span></code> を作成してください。 ただし、<code class=\"docutils literal notranslate\"><span class=\"pre\">dic1</span></code> のキーは整数、キーに対応する値は文字列を要素とするリストとします。</p>\n<ol class=\"arabic simple\">\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">dic1</span></code> に <code class=\"docutils literal notranslate\"><span class=\"pre\">str1</span></code> の長さ <code class=\"docutils literal notranslate\"><span class=\"pre\">n</span></code> がキーとして登録されていない場合、<code class=\"docutils literal notranslate\"><span class=\"pre\">str1</span></code> のみを要素とするリスト <code class=\"docutils literal notranslate\"><span class=\"pre\">ls</span></code> を作成し、 <code class=\"docutils literal notranslate\"><span class=\"pre\">dic1</span></code> にキー <code class=\"docutils literal notranslate\"><span class=\"pre\">n</span></code>、<code class=\"docutils literal notranslate\"><span class=\"pre\">n</span></code> に対応する値 <code class=\"docutils literal notranslate\"><span class=\"pre\">ls</span></code> を登録します。</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">dic1</span></code> に <code class=\"docutils literal notranslate\"><span class=\"pre\">str1</span></code> の長さ <code class=\"docutils literal notranslate\"><span class=\"pre\">n</span></code> がキーとして登録されている場合、そのキーに対応する値（リスト）に <code class=\"docutils literal notranslate\"><span class=\"pre\">str1</span></code> を追加します。</p></li>\n</ol>\n<p>以下のセルの <code class=\"docutils literal notranslate\"><span class=\"pre\">...</span></code> のところを書き換えて <code class=\"docutils literal notranslate\"><span class=\"pre\">handle_collision(dic1,</span> <span class=\"pre\">str1)</span></code> を作成してください。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[27]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">def</span> <span class=\"nf\">handle_collision</span><span class=\"p\">(</span><span class=\"n\">dic1</span><span class=\"p\">,</span> <span class=\"n\">str1</span><span class=\"p\">):</span>\n    <span class=\"o\">...</span>\n</pre></div>\n</div>\n</div>\n<p>上のセルで解答を作成した後、以下のセルを実行し、実行結果が <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> になることを確認してください。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[28]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">dic1_orig</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"mi\">3</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"s1\">&#39;ham&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;egg&#39;</span><span class=\"p\">],</span> <span class=\"mi\">6</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"s1\">&#39;coffee&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;brandy&#39;</span><span class=\"p\">],</span> <span class=\"mi\">9</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"s1\">&#39;port wine&#39;</span><span class=\"p\">],</span> <span class=\"mi\">15</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"s1\">&#39;curried chicken&#39;</span><span class=\"p\">]}</span>\n<span class=\"n\">dic1_result</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"mi\">3</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"s1\">&#39;ham&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;egg&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;tea&#39;</span><span class=\"p\">],</span> <span class=\"mi\">6</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"s1\">&#39;coffee&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;brandy&#39;</span><span class=\"p\">],</span> <span class=\"mi\">9</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"s1\">&#39;port wine&#39;</span><span class=\"p\">],</span> <span class=\"mi\">15</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"s1\">&#39;curried chicken&#39;</span><span class=\"p\">]}</span>\n<span class=\"n\">handle_collision</span><span class=\"p\">(</span><span class=\"n\">dic1_orig</span><span class=\"p\">,</span> <span class=\"s1\">&#39;tea&#39;</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">dic1_orig</span> <span class=\"o\">==</span> <span class=\"n\">dic1_result</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nFalse\n</pre></div></div>\n</div>\n</section>\n<section id=\"練習の解答\">\n<h2>練習の解答<a class=\"headerlink\" href=\"#練習の解答\" title=\"Link to this heading\">¶</a></h2>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[29]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">def</span> <span class=\"nf\">reverse_lookup</span><span class=\"p\">(</span><span class=\"n\">list1</span><span class=\"p\">):</span>\n    <span class=\"n\">dic1</span> <span class=\"o\">=</span> <span class=\"p\">{}</span>  <span class=\"c1\"># 空の辞書を作成する</span>\n    <span class=\"k\">for</span> <span class=\"n\">value</span> <span class=\"ow\">in</span> <span class=\"n\">list1</span><span class=\"p\">:</span>\n        <span class=\"n\">dic1</span><span class=\"p\">[</span><span class=\"n\">value</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">list1</span><span class=\"o\">.</span><span class=\"n\">index</span><span class=\"p\">(</span><span class=\"n\">value</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span> <span class=\"n\">dic1</span>\n<span class=\"c1\">#reverse_lookup([&#39;apple&#39;, &#39;pen&#39;, &#39;orange&#39;])</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[30]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">def</span> <span class=\"nf\">handle_collision</span><span class=\"p\">(</span><span class=\"n\">dic1</span><span class=\"p\">,</span> <span class=\"n\">str1</span><span class=\"p\">):</span>\n    <span class=\"k\">if</span> <span class=\"n\">dic1</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">str1</span><span class=\"p\">))</span> <span class=\"ow\">is</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n        <span class=\"n\">ls</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"n\">str1</span><span class=\"p\">]</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"n\">ls</span> <span class=\"o\">=</span> <span class=\"n\">dic1</span><span class=\"p\">[</span><span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">str1</span><span class=\"p\">)]</span>\n        <span class=\"n\">ls</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">str1</span><span class=\"p\">)</span>\n    <span class=\"n\">dic1</span><span class=\"p\">[</span><span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">str1</span><span class=\"p\">)]</span> <span class=\"o\">=</span> <span class=\"n\">ls</span>\n<span class=\"c1\">#handle_collision({3: [&#39;ham&#39;, &#39;egg&#39;], 6: [&#39;coffee&#39;, &#39;brandy&#39;], 9: [&#39;port wine&#39;], 15: [&#39;curried chicken&#39;]}, &#39;tea&#39;)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[ ]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span>\n</pre></div>\n</div>\n</div>\n</section>\n</section>\n\n\n          </div>\n          \n        </div>\n      </div>\n      <div class=\"sphinxsidebar\" role=\"navigation\" aria-label=\"Main\">\n        <div class=\"sphinxsidebarwrapper\">\n<h1 class=\"logo\"><a href=\"../index.html\">Pythonプログラミング入門</a></h1>\n\n\n\n\n\n\n\n\n<p>\n  <a style=\"font-family: sans-serif; font-size: smaller; background: linear-gradient(to top, #353535 0%, #141414 100%); -webkit-font-smoothing: antialiased; font-weight: normal; text-shadow: rgb(0 0 0 / 40%) 0 -1px 0; padding: 2px 6px; color: #fff; text-decoration: none; border-radius: 4px; border: 1px solid #0d0d0d; box-shadow: inset 0 1px 1px 0 #8f8f8f;\" href=\"https://github.com/utokyo-ipp/utokyo-ipp.github.io\">View on GitHub</a>\n</p><p>\n  <a style=\"font-family: sans-serif; font-size: smaller; background: linear-gradient(to top, #ff1e00 0%, #de1e00 100%); -webkit-font-smoothing: antialiased; font-weight: normal; text-shadow: rgb(0 0 0 / 40%) 0 -1px 0; padding: 2px 6px; color: #fff; text-decoration: none; border-radius: 4px; border: 1px solid #0d0d0d; box-shadow: inset 0 1px 1px 0 #ff8e70;\" href=\"https://utokyo-ipp.github.io/IPP_textbook.pdf\">View PDF</a>\n</p><p>\n  <a style=\"border-bottom: none;\" href=\"https://colab.research.google.com/github/utokyo-ipp/utokyo-ipp.github.io/blob/master/colab/3/3-1.ipynb\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Google Colaboratory\"></a>\n</p><h3>Navigation</h3>\n<ul class=\"current\">\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../1/1-0.html\">1-0. Colaboratory (Colab) の使い方</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../1/1-1.html\">1-1. 数値演算</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../1/1-2.html\">1-2. 変数と関数の基礎</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../1/1-3.html\">1-3. 論理・比較演算と条件分岐の基礎</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../1/1-4.html\">1-4. テストとデバッグ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../2/2-1.html\">2-1. 文字列 (string)</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../2/2-2.html\">2-2. リスト (list)</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../2/2-3.html\">2-3. 条件分岐</a></li>\n<li class=\"toctree-l1 current\"><a class=\"current reference internal\" href=\"#\">3-1. 辞書 (dictionary)</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#練習\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#辞書のメソッド\">辞書のメソッド</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#辞書とリスト\">辞書とリスト</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#id12\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#練習の解答\">練習の解答</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"3-2.html\">3-2. 繰り返し</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"3-3.html\">3-3. 関数</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../4/4-1.html\">4-1. ファイル入出力の基本</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../4/4-2.html\">4-2. イテラブルとイテレータ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../4/4-3.html\">4-3. ディレクトリと木構造</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../5/5-1.html\">5-1. モジュールの使い方</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../5/5-2.html\">5-2. モジュールの作り方</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../5/5-3.html\">5-3. NumPyライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../6/6-1.html\">6-1. 内包表記</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../6/6-2.html\">6-2. 高階関数</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../6/6-3.html\">6-3. クラス</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../7/7-1.html\">7-1. pandasライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../7/7-2.html\">7-2. scikit-learnライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/1-jupyter-notebook.html\">▲Jupyter Notebook の使い方</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/2-set.html\">▲セット (set)</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/3-recursion.html\">▲再帰</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/3-visualization.html\">▲簡単なデータの可視化</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/4-csv.html\">▲CSVファイルの入出力</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/5-bokeh.html\">▲Bokehライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/5-command.html\">▲Pythonスクリプトとコマンドライン実行</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/5-matplotlib.html\">▲Matplotlibライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/5-re.html\">▲正規表現</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../index_of_terms.html\">索引</a></li>\n</ul>\n\n<div class=\"relations\">\n<h3>Related Topics</h3>\n<ul>\n  <li><a href=\"../index.html\">Documentation overview</a><ul>\n      <li>Previous: <a href=\"../2/2-3.html\" title=\"previous chapter\">2-3. 条件分岐</a></li>\n      <li>Next: <a href=\"3-2.html\" title=\"next chapter\">3-2. 繰り返し</a></li>\n  </ul></li>\n</ul>\n</div>\n<search id=\"searchbox\" style=\"display: none\" role=\"search\">\n  <h3 id=\"searchlabel\">Quick search</h3>\n    <div class=\"searchformwrapper\">\n    <form class=\"search\" action=\"../search.html\" method=\"get\">\n      <input type=\"text\" name=\"q\" aria-labelledby=\"searchlabel\" autocomplete=\"off\" autocorrect=\"off\" autocapitalize=\"off\" spellcheck=\"false\"/>\n      <input type=\"submit\" value=\"Go\" />\n    </form>\n    </div>\n</search>\n<script>document.getElementById('searchbox').style.display = \"block\"</script>\n\n\n\n\n\n\n\n\n        </div>\n      </div>\n      <div class=\"clearer\"></div>\n    </div>\n    <div class=\"footer\">\n      &#169;2020–2024, 東京大学 数理・情報教育研究センター (CC BY-NC-ND 4.0).\n      \n      |\n      Powered by <a href=\"https://www.sphinx-doc.org/\">Sphinx 8.0.2</a>\n      &amp; <a href=\"https://alabaster.readthedocs.io\">Alabaster 1.0.0</a>\n      \n    </div>\n\n    \n\n    \n    <script>\n\n      var _gaq = _gaq || [];\n      _gaq.push(['_setAccount', 'G-8M0RXGPPSR']);\n      _gaq.push(['_setDomainName', 'none']);\n      _gaq.push(['_setAllowLinker', true]);\n      _gaq.push(['_trackPageview']);\n\n      (function() {\n        var ga = document.createElement('script'); ga.async = true;\n        ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'https://www') + '.google-analytics.com/ga.js';\n        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);\n      })();\n\n    </script>\n    \n  </body>\n</html>"
  },
  {
    "path": "docs/3/3-2.html",
    "content": "<!DOCTYPE html>\n\n<html lang=\"jp\" data-content_root=\"../\">\n  <head>\n    <meta charset=\"utf-8\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" /><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n\n    <!-- Google tag (gtag.js) -->\n    <script async src=\"https://www.googletagmanager.com/gtag/js?id=G-8M0RXGPPSR\"></script>\n    <script>\n        window.dataLayer = window.dataLayer || [];\n        function gtag(){dataLayer.push(arguments);}\n        gtag('js', new Date());\n        gtag('config', 'G-8M0RXGPPSR');\n    </script>\n    \n    <title>3-2. 繰り返し &#8212; Pythonプログラミング入門  documentation</title>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/pygments.css?v=d1102ebc\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/basic.css?v=c058f7c8\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/alabaster.css?v=27fed22d\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/nbsphinx-code-cells.css\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/custom.css?v=1a1aa8dd\" />\n    <script src=\"../_static/documentation_options.js?v=3ff7d7a7\"></script>\n    <script src=\"../_static/doctools.js?v=9a2dae69\"></script>\n    <script src=\"../_static/sphinx_highlight.js?v=dc90522c\"></script>\n    <script crossorigin=\"anonymous\" integrity=\"sha256-Ae2Vz/4ePdIu6ZyI/5ZGsYnb+m0JlOmKPjt6XZ9JJkA=\" src=\"https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.4/require.min.js\"></script>\n    <script>window.MathJax = {\"tex\": {\"inlineMath\": [[\"$\", \"$\"], [\"\\\\(\", \"\\\\)\"]], \"processEscapes\": true}, \"options\": {\"ignoreHtmlClass\": \"tex2jax_ignore|mathjax_ignore|document\", \"processHtmlClass\": \"tex2jax_process|mathjax_process|math|output_area\"}}</script>\n    <script defer=\"defer\" src=\"https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js\"></script>\n    <link rel=\"index\" title=\"Index\" href=\"../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../search.html\" />\n    <link rel=\"next\" title=\"3-3. 関数\" href=\"3-3.html\" />\n    <link rel=\"prev\" title=\"3-1. 辞書 (dictionary)\" href=\"3-1.html\" />\n   \n  <link rel=\"stylesheet\" href=\"../_static/custom.css\" type=\"text/css\" />\n  \n\n  \n  \n\n  </head><body>\n  \n\n    <div class=\"document\">\n      <div class=\"documentwrapper\">\n        <div class=\"bodywrapper\">\n          \n\n          <div class=\"body\" role=\"main\">\n            \n  <section id=\"3-2.-繰り返し\">\n<h1>3-2. 繰り返し<a class=\"headerlink\" href=\"#3-2.-繰り返し\" title=\"Link to this heading\">¶</a></h1>\n<p>制御構造のうち<strong>繰り返し</strong>について説明します。</p>\n<p>参考:</p>\n<ul class=\"simple\">\n<li><p><a class=\"reference external\" href=\"https://docs.python.org/ja/3/tutorial/controlflow.html#for-statements\">https://docs.python.org/ja/3/tutorial/controlflow.html#for-statements</a></p></li>\n<li><p><a class=\"reference external\" href=\"https://docs.python.org/ja/3/tutorial/controlflow.html#the-range-function\">https://docs.python.org/ja/3/tutorial/controlflow.html#the-range-function</a></p></li>\n<li><p><a class=\"reference external\" href=\"https://docs.python.org/ja/3/tutorial/introduction.html#first-steps-towards-programming\">https://docs.python.org/ja/3/tutorial/introduction.html#first-steps-towards-programming</a></p></li>\n<li><p><a class=\"reference external\" href=\"https://docs.python.org/ja/3/tutorial/controlflow.html#break-and-continue-statements-and-else-clauses-on-loops\">https://docs.python.org/ja/3/tutorial/controlflow.html#break-and-continue-statements-and-else-clauses-on-loops</a></p></li>\n<li><p><a class=\"reference external\" href=\"https://docs.python.org/ja/3/tutorial/controlflow.html#pass-statements\">https://docs.python.org/ja/3/tutorial/controlflow.html#pass-statements</a></p></li>\n</ul>\n<p>繰り返しを行う制御構造 <code class=\"docutils literal notranslate\"><span class=\"pre\">for</span></code> や <code class=\"docutils literal notranslate\"><span class=\"pre\">while</span></code> によって、同じ処理の繰り返しを簡単にプログラムすることができます。</p>\n<section id=\"for文による繰り返し\">\n<h2>for文による繰り返し<a class=\"headerlink\" href=\"#for文による繰り返し\" title=\"Link to this heading\">¶</a></h2>\n<p>2-2で、リストと文字列に対するfor文の繰り返しについて説明しました。 Pythonにおける<strong>for文</strong>の一般的な文法は以下のとおりです。</p>\n<div class=\"highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>for 変数 in 文字列・リスト・辞書など:\n    実行文\n</pre></div>\n</div>\n<p>if文と同様、 実行文のインデントは深くなっていることに注意してください。</p>\n<p>for文では <code class=\"docutils literal notranslate\"><span class=\"pre\">in</span></code> 以降に与えられる、<code class=\"docutils literal notranslate\"><span class=\"pre\">文字列・リスト・辞書など</span></code> にわたって、 <code class=\"docutils literal notranslate\"><span class=\"pre\">実行文</span></code> のグループを繰り返します。 一般に繰り返しの順番は文字列・リスト・辞書などに要素が現れる順番で、 要素は <code class=\"docutils literal notranslate\"><span class=\"pre\">for</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">in</span></code> の間の <code class=\"docutils literal notranslate\"><span class=\"pre\">変数</span></code> に代入されます。</p>\n<p>リストの場合、リストの要素が最初から順番に取り出されます。以下に具体例を示します。関数 <code class=\"docutils literal notranslate\"><span class=\"pre\">len</span></code> は文字列の長さを返します。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[1]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">words</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s1\">&#39;dog&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;cat&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;mouse&#39;</span><span class=\"p\">]</span>\n<span class=\"k\">for</span> <span class=\"n\">w</span> <span class=\"ow\">in</span> <span class=\"n\">words</span><span class=\"p\">:</span>\n    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">w</span><span class=\"p\">,</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">w</span><span class=\"p\">))</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s1\">&#39;finish&#39;</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\ndog 3\ncat 3\nmouse 5\nfinish\n</pre></div></div>\n</div>\n<p>このプログラムで、for文には3つの文字列で構成されるリスト <code class=\"docutils literal notranslate\"><span class=\"pre\">words</span></code> が与えられています。 リストの要素は変数 <code class=\"docutils literal notranslate\"><span class=\"pre\">w</span></code> に順番に代入され、文字列とその長さが印字されます。 そして、最後の要素の処理がおわればfor文の繰り返し（<strong>ループ</strong>）を抜け、完了メッセージを印字します。</p>\n<p>次は文字列に対する for文の例です。文字列を構成する文字が先頭から一文字ずつ文字列として取り出されます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[2]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">word</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;supercalifragilisticexpialidocious&#39;</span>\n<span class=\"k\">for</span> <span class=\"n\">c</span> <span class=\"ow\">in</span> <span class=\"n\">word</span><span class=\"p\">:</span>\n    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">c</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\ns\nu\np\ne\nr\nc\na\nl\ni\nf\nr\na\ng\ni\nl\ni\ns\nt\ni\nc\ne\nx\np\ni\na\nl\ni\nd\no\nc\ni\no\nu\ns\n</pre></div></div>\n</div>\n<p>組み込み関数 <code class=\"docutils literal notranslate\"><span class=\"pre\">ord</span></code> は与えられた文字の番号（コード）を整数として返します。 組み込み関数 <code class=\"docutils literal notranslate\"><span class=\"pre\">chr</span></code> は逆に与えられた整数をコードとする文字を返します。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[3]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"nb\">ord</span><span class=\"p\">(</span><span class=\"s1\">&#39;a&#39;</span><span class=\"p\">))</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"nb\">ord</span><span class=\"p\">(</span><span class=\"s1\">&#39;b&#39;</span><span class=\"p\">))</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"nb\">ord</span><span class=\"p\">(</span><span class=\"s1\">&#39;z&#39;</span><span class=\"p\">))</span>\n\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"nb\">chr</span><span class=\"p\">(</span><span class=\"mi\">97</span><span class=\"p\">))</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n97\n98\n122\na\n</pre></div></div>\n</div>\n<p>上で確認しているように、文字 <code class=\"docutils literal notranslate\"><span class=\"pre\">'a'</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">'b'</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">'z'</span></code> のコードはそれぞれ <code class=\"docutils literal notranslate\"><span class=\"pre\">97</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">98</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">112</span></code> です。文字のコードは <code class=\"docutils literal notranslate\"><span class=\"pre\">'a'</span></code> から <code class=\"docutils literal notranslate\"><span class=\"pre\">'z'</span></code> までは連続して <code class=\"docutils literal notranslate\"><span class=\"pre\">1</span></code> ずつ増えていきます。</p>\n<p>これを用いて以下のように英小文字から成る文字列の中の各文字の頻度を求めることができます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[4]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">height</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]</span> <span class=\"o\">*</span> <span class=\"mi\">26</span>\n<span class=\"k\">for</span> <span class=\"n\">c</span> <span class=\"ow\">in</span> <span class=\"n\">word</span><span class=\"p\">:</span>\n    <span class=\"n\">height</span><span class=\"p\">[</span><span class=\"nb\">ord</span><span class=\"p\">(</span><span class=\"n\">c</span><span class=\"p\">)</span> <span class=\"o\">-</span> <span class=\"nb\">ord</span><span class=\"p\">(</span><span class=\"s1\">&#39;a&#39;</span><span class=\"p\">)]</span> <span class=\"o\">+=</span> <span class=\"mi\">1</span>\n\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">height</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n[3, 0, 3, 1, 2, 1, 1, 0, 7, 0, 0, 3, 0, 0, 2, 2, 0, 2, 3, 1, 2, 0, 0, 1, 0, 0]\n</pre></div></div>\n</div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">height</span></code> を視覚化してみましょう。詳しくは、付録の 5-matplotlib を参照してください。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[5]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"kn\">import</span> <span class=\"nn\">matplotlib.pyplot</span> <span class=\"k\">as</span> <span class=\"nn\">plt</span>\n\n<span class=\"n\">plt</span><span class=\"o\">.</span><span class=\"n\">plot</span><span class=\"p\">(</span><span class=\"n\">height</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[5]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n[&lt;matplotlib.lines.Line2D at 0x104efa090&gt;]\n</pre></div></div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<img alt=\"../_images/3_3-2_11_1.png\" src=\"../_images/3_3-2_11_1.png\" />\n</div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[6]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">left</span> <span class=\"o\">=</span> <span class=\"nb\">list</span><span class=\"p\">(</span><span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"mi\">26</span><span class=\"p\">))</span>  <span class=\"c1\"># range関数については以下を参照してください。</span>\n<span class=\"n\">labels</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"nb\">chr</span><span class=\"p\">(</span><span class=\"n\">i</span> <span class=\"o\">+</span> <span class=\"nb\">ord</span><span class=\"p\">(</span><span class=\"s1\">&#39;a&#39;</span><span class=\"p\">))</span> <span class=\"k\">for</span> <span class=\"n\">i</span> <span class=\"ow\">in</span> <span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"mi\">26</span><span class=\"p\">)]</span>  <span class=\"c1\"># 内包表記については 6-1 を参照ください。</span>\n<span class=\"n\">plt</span><span class=\"o\">.</span><span class=\"n\">bar</span><span class=\"p\">(</span><span class=\"n\">left</span><span class=\"p\">,</span><span class=\"n\">height</span><span class=\"p\">,</span><span class=\"n\">tick_label</span><span class=\"o\">=</span><span class=\"n\">labels</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[6]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n&lt;BarContainer object of 26 artists&gt;\n</pre></div></div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<img alt=\"../_images/3_3-2_12_1.png\" src=\"../_images/3_3-2_12_1.png\" />\n</div>\n</div>\n</section>\n<section id=\"for文による繰り返しと辞書\">\n<h2>for文による繰り返しと辞書<a class=\"headerlink\" href=\"#for文による繰り返しと辞書\" title=\"Link to this heading\">¶</a></h2>\n<p>辞書の要素にわたって操作を繰り返したい場合もfor文を用います。 辞書 <code class=\"docutils literal notranslate\"><span class=\"pre\">dic1</span></code> の全てのキーを変数 <code class=\"docutils literal notranslate\"><span class=\"pre\">key</span></code> に代入しながら、<code class=\"docutils literal notranslate\"><span class=\"pre\">実行文</span></code> を繰り返すには次のように書きます。</p>\n<div class=\"highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>for key in dic1:\n    実行文\n</pre></div>\n</div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">for</span></code> の行の <code class=\"docutils literal notranslate\"><span class=\"pre\">in</span></code> の後を、<code class=\"docutils literal notranslate\"><span class=\"pre\">dic1</span></code> の代わりに <code class=\"docutils literal notranslate\"><span class=\"pre\">dic1.keys()</span></code> としても振舞いは同等であり、辞書のキー一覧を返す <code class=\"docutils literal notranslate\"><span class=\"pre\">keys</span></code> メソッドが自動的に使われます。</p>\n<p>次の例では、キーを1つずつ取り出し、<code class=\"docutils literal notranslate\"><span class=\"pre\">key</span></code> に代入した後、 <code class=\"docutils literal notranslate\"><span class=\"pre\">key</span></code> に対応する値を参照しています。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[7]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">dic1</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;cat&#39;</span><span class=\"p\">:</span> <span class=\"mi\">3</span><span class=\"p\">,</span> <span class=\"s1\">&#39;dog&#39;</span><span class=\"p\">:</span> <span class=\"mi\">3</span><span class=\"p\">,</span> <span class=\"s1\">&#39;elephant&#39;</span><span class=\"p\">:</span> <span class=\"mi\">8</span><span class=\"p\">}</span>\n<span class=\"k\">for</span> <span class=\"n\">key</span> <span class=\"ow\">in</span> <span class=\"n\">dic1</span><span class=\"p\">:</span>\n    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s1\">&#39;key:&#39;</span><span class=\"p\">,</span> <span class=\"n\">key</span><span class=\"p\">,</span> <span class=\"s1\">&#39;, value:&#39;</span><span class=\"p\">,</span> <span class=\"n\">dic1</span><span class=\"p\">[</span><span class=\"n\">key</span><span class=\"p\">])</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nkey: cat , value: 3\nkey: dog , value: 3\nkey: elephant , value: 8\n</pre></div></div>\n</div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">values</span></code> メソッドを使えば（キーを使わずに）値を1つずつ取り出すこともできます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[8]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">dic1</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;cat&#39;</span><span class=\"p\">:</span> <span class=\"mi\">3</span><span class=\"p\">,</span> <span class=\"s1\">&#39;dog&#39;</span><span class=\"p\">:</span> <span class=\"mi\">3</span><span class=\"p\">,</span> <span class=\"s1\">&#39;elephant&#39;</span><span class=\"p\">:</span> <span class=\"mi\">8</span><span class=\"p\">}</span>\n<span class=\"k\">for</span> <span class=\"n\">value</span> <span class=\"ow\">in</span> <span class=\"n\">dic1</span><span class=\"o\">.</span><span class=\"n\">values</span><span class=\"p\">():</span>\n    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s1\">&#39;value:&#39;</span><span class=\"p\">,</span> <span class=\"n\">value</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nvalue: 3\nvalue: 3\nvalue: 8\n</pre></div></div>\n</div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">items</span></code> メソッドを使えばキーと値を一度に取り出すこともできます。 次の例では、<code class=\"docutils literal notranslate\"><span class=\"pre\">in</span></code> の左辺に複数の変数を指定し多重代入を行っています。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[9]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">dic1</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;cat&#39;</span><span class=\"p\">:</span> <span class=\"mi\">3</span><span class=\"p\">,</span> <span class=\"s1\">&#39;dog&#39;</span><span class=\"p\">:</span> <span class=\"mi\">3</span><span class=\"p\">,</span> <span class=\"s1\">&#39;elephant&#39;</span><span class=\"p\">:</span> <span class=\"mi\">8</span><span class=\"p\">}</span>\n<span class=\"k\">for</span> <span class=\"n\">key</span><span class=\"p\">,</span> <span class=\"n\">value</span> <span class=\"ow\">in</span> <span class=\"n\">dic1</span><span class=\"o\">.</span><span class=\"n\">items</span><span class=\"p\">():</span>\n    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s1\">&#39;key:&#39;</span><span class=\"p\">,</span> <span class=\"n\">key</span><span class=\"p\">,</span> <span class=\"s1\">&#39;value:&#39;</span><span class=\"p\">,</span> <span class=\"n\">value</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nkey: cat value: 3\nkey: dog value: 3\nkey: elephant value: 8\n</pre></div></div>\n</div>\n<p>実は、辞書の <code class=\"docutils literal notranslate\"><span class=\"pre\">items</span></code> でなくとも、タプルのリストもしくはリストのリストに対しても、同様に複数の変数を指定することができます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[10]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">list1</span> <span class=\"o\">=</span> <span class=\"p\">[[</span><span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"mi\">10</span><span class=\"p\">],</span> <span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">20</span><span class=\"p\">],</span> <span class=\"p\">[</span><span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"mi\">30</span><span class=\"p\">]]</span>\n<span class=\"k\">for</span> <span class=\"n\">i</span><span class=\"p\">,</span> <span class=\"n\">j</span> <span class=\"ow\">in</span> <span class=\"n\">list1</span><span class=\"p\">:</span>\n    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">i</span><span class=\"p\">,</span> <span class=\"n\">j</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n0 10\n1 20\n2 30\n</pre></div></div>\n</div>\n</section>\n<section id=\"練習\">\n<h2>練習<a class=\"headerlink\" href=\"#練習\" title=\"Link to this heading\">¶</a></h2>\n<p>辞書 <code class=\"docutils literal notranslate\"><span class=\"pre\">dic1</span></code> が引数として与えられたとき、次のような辞書 <code class=\"docutils literal notranslate\"><span class=\"pre\">dic2</span></code> を返す関数 <code class=\"docutils literal notranslate\"><span class=\"pre\">reverse_lookup2</span></code> を作成してください。ただし、 <code class=\"docutils literal notranslate\"><span class=\"pre\">dic1</span></code> のキー <code class=\"docutils literal notranslate\"><span class=\"pre\">key</span></code> の値が <code class=\"docutils literal notranslate\"><span class=\"pre\">value</span></code> である場合、 <code class=\"docutils literal notranslate\"><span class=\"pre\">dic2</span></code> には <code class=\"docutils literal notranslate\"><span class=\"pre\">value</span></code> というキーが登録されており、その値は <code class=\"docutils literal notranslate\"><span class=\"pre\">key</span></code> であるとします。また、 <code class=\"docutils literal notranslate\"><span class=\"pre\">dic1</span></code> は異なる2つのキーに対応する値は必ず異なるとします。</p>\n<p>以下のセルの <code class=\"docutils literal notranslate\"><span class=\"pre\">...</span></code> のところを書き換えて <code class=\"docutils literal notranslate\"><span class=\"pre\">reverse_lookup2</span></code> を作成してください。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[11]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">def</span> <span class=\"nf\">reverse_lookup2</span><span class=\"p\">(</span><span class=\"n\">dic1</span><span class=\"p\">):</span>\n    <span class=\"o\">...</span>\n</pre></div>\n</div>\n</div>\n<p>上のセルで解答を作成した後、以下のセルを実行し、実行結果が <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> になることを確認してください。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[12]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">reverse_lookup2</span><span class=\"p\">({</span><span class=\"s1\">&#39;apple&#39;</span><span class=\"p\">:</span> <span class=\"mi\">3</span><span class=\"p\">,</span> <span class=\"s1\">&#39;pen&#39;</span><span class=\"p\">:</span> <span class=\"mi\">5</span><span class=\"p\">,</span> <span class=\"s1\">&#39;orange&#39;</span><span class=\"p\">:</span> <span class=\"mi\">7</span><span class=\"p\">})</span> <span class=\"o\">==</span> <span class=\"p\">{</span><span class=\"mi\">3</span><span class=\"p\">:</span> <span class=\"s1\">&#39;apple&#39;</span><span class=\"p\">,</span> <span class=\"mi\">5</span><span class=\"p\">:</span> <span class=\"s1\">&#39;pen&#39;</span><span class=\"p\">,</span> <span class=\"mi\">7</span><span class=\"p\">:</span> <span class=\"s1\">&#39;orange&#39;</span><span class=\"p\">})</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nFalse\n</pre></div></div>\n</div>\n</section>\n<section id=\"range\">\n<h2><code class=\"docutils literal notranslate\"><span class=\"pre\">range</span></code><a class=\"headerlink\" href=\"#range\" title=\"Link to this heading\">¶</a></h2>\n<p>特定の回数の繰り返し処理が必要なときは、<code class=\"docutils literal notranslate\"><span class=\"pre\">range</span></code> 関数を用います。</p>\n<div class=\"highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>for value in range(j):\n    実行文\n</pre></div>\n</div>\n<p>これによって実行文を <code class=\"docutils literal notranslate\"><span class=\"pre\">j</span></code> 回実行します。具体例を見てみましょう。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[13]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">for</span> <span class=\"n\">value</span> <span class=\"ow\">in</span> <span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"mi\">5</span><span class=\"p\">):</span>\n    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s1\">&#39;Hi!&#39;</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nHi!\nHi!\nHi!\nHi!\nHi!\n</pre></div></div>\n</div>\n<p>さて、<code class=\"docutils literal notranslate\"><span class=\"pre\">for</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">in</span></code> の間の <code class=\"docutils literal notranslate\"><span class=\"pre\">value</span></code> は変数ですが、 <code class=\"docutils literal notranslate\"><span class=\"pre\">value</span></code> には何が入っているのか確認してみましょう。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[14]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">for</span> <span class=\"n\">value</span> <span class=\"ow\">in</span> <span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"mi\">5</span><span class=\"p\">):</span>\n    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">value</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n0\n1\n2\n3\n4\n</pre></div></div>\n</div>\n<p>すなわち、<code class=\"docutils literal notranslate\"><span class=\"pre\">value</span></code> は <code class=\"docutils literal notranslate\"><span class=\"pre\">0</span></code> ～ <code class=\"docutils literal notranslate\"><span class=\"pre\">4</span></code> を動くことがわかります。</p>\n<p>この <code class=\"docutils literal notranslate\"><span class=\"pre\">value</span></code> の値を用いることでリスト <code class=\"docutils literal notranslate\"><span class=\"pre\">ln</span></code> の要素を順番に用いることもできます。 回数としてリストの長さ <code class=\"docutils literal notranslate\"><span class=\"pre\">len(ln)</span></code> を指定します。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[15]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">ln</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s1\">&#39;e&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;d&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;a&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;c&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;f&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;b&#39;</span><span class=\"p\">]</span>\n<span class=\"k\">for</span> <span class=\"n\">value</span> <span class=\"ow\">in</span> <span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">ln</span><span class=\"p\">)):</span>\n    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">ln</span><span class=\"p\">[</span><span class=\"n\">value</span><span class=\"p\">])</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\ne\nd\na\nc\nf\nb\n</pre></div></div>\n</div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">range()</span></code> 関数は:</p>\n<ol class=\"arabic simple\">\n<li><p>引数を1つ与えると <code class=\"docutils literal notranslate\"><span class=\"pre\">0</span></code> から引数までの整数列を返します。 このとき引数の値は含まれないことの注意してください。</p></li>\n<li><p>引数を2つあるいは3つ与えると:</p>\n<ul class=\"simple\">\n<li><p>最初の引数を数列の開始 (start)、2番目を停止 (stop)、3番目を数列の刻み (step) とする整数列を返します。</p></li>\n<li><p>3番目の引数は省略可能で、既定値は <code class=\"docutils literal notranslate\"><span class=\"pre\">1</span></code> となっています。</p></li>\n<li><p>2番目の引数の値は含まれないことの注意してください。</p></li>\n</ul>\n</li>\n</ol>\n<p>以下の例は、<code class=\"docutils literal notranslate\"><span class=\"pre\">0</span></code> から <code class=\"docutils literal notranslate\"><span class=\"pre\">9</span></code> までの整数列の総和を計算、印字するプログラムです:</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[16]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">s</span> <span class=\"o\">=</span> <span class=\"mi\">0</span>\n<span class=\"k\">for</span> <span class=\"n\">i</span> <span class=\"ow\">in</span> <span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"mi\">10</span><span class=\"p\">):</span>\n    <span class=\"n\">s</span> <span class=\"o\">=</span> <span class=\"n\">s</span> <span class=\"o\">+</span> <span class=\"n\">i</span>\n\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">s</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n45\n</pre></div></div>\n</div>\n<p>以下の例は、<code class=\"docutils literal notranslate\"><span class=\"pre\">1</span></code> から <code class=\"docutils literal notranslate\"><span class=\"pre\">9</span></code> までの奇数の総和を計算、印字するプログラムです。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[17]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">s</span> <span class=\"o\">=</span> <span class=\"mi\">0</span>\n<span class=\"k\">for</span> <span class=\"n\">i</span> <span class=\"ow\">in</span> <span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">,</span><span class=\"mi\">10</span><span class=\"p\">,</span><span class=\"mi\">2</span><span class=\"p\">):</span>\n    <span class=\"n\">s</span> <span class=\"o\">=</span> <span class=\"n\">s</span> <span class=\"o\">+</span> <span class=\"n\">i</span>\n\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">s</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n25\n</pre></div></div>\n</div>\n</section>\n<section id=\"id4\">\n<h2>練習<a class=\"headerlink\" href=\"#id4\" title=\"Link to this heading\">¶</a></h2>\n<p>引数で与えられる2つの整数 <code class=\"docutils literal notranslate\"><span class=\"pre\">x</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">y</span></code> 間（<code class=\"docutils literal notranslate\"><span class=\"pre\">x</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">y</span></code> を含む）の整数の総和を返す関数 <code class=\"docutils literal notranslate\"><span class=\"pre\">sum_n</span></code> を for文を利用して作成してください。 たとえば、<code class=\"docutils literal notranslate\"><span class=\"pre\">sum_n(1,3)</span></code> の結果は <code class=\"docutils literal notranslate\"><span class=\"pre\">1</span> <span class=\"pre\">+</span> <span class=\"pre\">2</span> <span class=\"pre\">+</span> <span class=\"pre\">3</span> <span class=\"pre\">=</span> <span class=\"pre\">6</span></code> となります。</p>\n<p>以下のセルの <code class=\"docutils literal notranslate\"><span class=\"pre\">...</span></code> のところを書き換えて <code class=\"docutils literal notranslate\"><span class=\"pre\">sum_n</span></code> を作成してください。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[18]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">def</span> <span class=\"nf\">sum_n</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">,</span> <span class=\"n\">y</span><span class=\"p\">):</span>\n    <span class=\"o\">...</span>\n</pre></div>\n</div>\n</div>\n<p>上のセルで解答を作成した後、以下のセルを実行し、実行結果が <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> になることを確認してください。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[19]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">sum_n</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">3</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"mi\">6</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nFalse\n</pre></div></div>\n</div>\n</section>\n<section id=\"id5\">\n<h2>練習<a class=\"headerlink\" href=\"#id5\" title=\"Link to this heading\">¶</a></h2>\n<p>整数 <code class=\"docutils literal notranslate\"><span class=\"pre\">int_size</span></code> を引数として取り、 長さが <code class=\"docutils literal notranslate\"><span class=\"pre\">int_size</span></code> であるリスト <code class=\"docutils literal notranslate\"><span class=\"pre\">ln</span></code> を返す関数 <code class=\"docutils literal notranslate\"><span class=\"pre\">construct_list</span></code> を作成してください。 ただし、 <code class=\"docutils literal notranslate\"><span class=\"pre\">ln</span></code> の <code class=\"docutils literal notranslate\"><span class=\"pre\">i</span></code> 番目の要素は <code class=\"docutils literal notranslate\"><span class=\"pre\">i</span></code> とします（<code class=\"docutils literal notranslate\"><span class=\"pre\">i</span></code> は 0 以上 <code class=\"docutils literal notranslate\"><span class=\"pre\">int_size-1</span></code> 以下の整数）。</p>\n<p>以下のセルの <code class=\"docutils literal notranslate\"><span class=\"pre\">...</span></code> のところを書き換えて <code class=\"docutils literal notranslate\"><span class=\"pre\">construct_list(int_size)</span></code> を作成してください。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[20]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">def</span> <span class=\"nf\">construct_list</span><span class=\"p\">(</span><span class=\"n\">int_size</span><span class=\"p\">):</span>\n    <span class=\"o\">...</span>\n</pre></div>\n</div>\n</div>\n<p>上のセルで解答を作成した後、以下のセルを実行し、実行結果が <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> になることを確認してください。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[21]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">construct_list</span><span class=\"p\">(</span><span class=\"mi\">10</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"mi\">3</span><span class=\"p\">,</span> <span class=\"mi\">4</span><span class=\"p\">,</span> <span class=\"mi\">5</span><span class=\"p\">,</span> <span class=\"mi\">6</span><span class=\"p\">,</span> <span class=\"mi\">7</span><span class=\"p\">,</span> <span class=\"mi\">8</span><span class=\"p\">,</span> <span class=\"mi\">9</span><span class=\"p\">])</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nFalse\n</pre></div></div>\n</div>\n</section>\n<section id=\"range-とリスト\">\n<h2><code class=\"docutils literal notranslate\"><span class=\"pre\">range</span></code> とリスト<a class=\"headerlink\" href=\"#range-とリスト\" title=\"Link to this heading\">¶</a></h2>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">range</span></code> 関数は整数列を返しますが、リストを返さないことに注意してください。 これは、繰り返し回数の大きな for文などで大きなリストを作ると無駄が大きくなるためです。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">range</span></code> 関数を利用して整数列のリストを生成するには、 以下のように <code class=\"docutils literal notranslate\"><span class=\"pre\">list</span></code> を関数として用いて、明示的にリスト化する必要があります。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[22]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">seq_list</span> <span class=\"o\">=</span> <span class=\"nb\">list</span><span class=\"p\">(</span><span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"mi\">5</span><span class=\"p\">))</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">seq_list</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n[0, 1, 2, 3, 4]\n</pre></div></div>\n</div>\n</section>\n<section id=\"for文の入れ子\">\n<h2>for文の<strong>入れ子</strong><a class=\"headerlink\" href=\"#for文の入れ子\" title=\"Link to this heading\">¶</a></h2>\n<p>for文を多重に<strong>入れ子</strong>（<strong>ネスト</strong>）して使うこともよくあります。 まずは次の例を実行してみてください。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[23]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">list1</span> <span class=\"o\">=</span> <span class=\"p\">[[</span><span class=\"s1\">&#39;a&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;b&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;c&#39;</span><span class=\"p\">],</span> <span class=\"p\">[</span><span class=\"s1\">&#39;d&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;e&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;f&#39;</span><span class=\"p\">],</span> <span class=\"p\">[</span><span class=\"s1\">&#39;g&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;h&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;i&#39;</span><span class=\"p\">],</span> <span class=\"p\">[</span><span class=\"s1\">&#39;j&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;k&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;l&#39;</span><span class=\"p\">]]</span>\n\n<span class=\"k\">for</span> <span class=\"n\">i</span> <span class=\"ow\">in</span> <span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"mi\">4</span><span class=\"p\">):</span>\n    <span class=\"k\">for</span> <span class=\"n\">j</span> <span class=\"ow\">in</span> <span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"mi\">3</span><span class=\"p\">):</span>\n        <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s1\">&#39;list1の&#39;</span><span class=\"p\">,</span> <span class=\"n\">i</span> <span class=\"o\">+</span> <span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"s1\">&#39;番目の要素（リスト）の&#39;</span><span class=\"p\">,</span> <span class=\"n\">j</span> <span class=\"o\">+</span> <span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"s1\">&#39;番目の要素 =&#39;</span><span class=\"p\">,</span> <span class=\"n\">list1</span><span class=\"p\">[</span><span class=\"n\">i</span><span class=\"p\">][</span><span class=\"n\">j</span><span class=\"p\">])</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nlist1の 1 番目の要素（リスト）の 1 番目の要素 = a\nlist1の 1 番目の要素（リスト）の 2 番目の要素 = b\nlist1の 1 番目の要素（リスト）の 3 番目の要素 = c\nlist1の 2 番目の要素（リスト）の 1 番目の要素 = d\nlist1の 2 番目の要素（リスト）の 2 番目の要素 = e\nlist1の 2 番目の要素（リスト）の 3 番目の要素 = f\nlist1の 3 番目の要素（リスト）の 1 番目の要素 = g\nlist1の 3 番目の要素（リスト）の 2 番目の要素 = h\nlist1の 3 番目の要素（リスト）の 3 番目の要素 = i\nlist1の 4 番目の要素（リスト）の 1 番目の要素 = j\nlist1の 4 番目の要素（リスト）の 2 番目の要素 = k\nlist1の 4 番目の要素（リスト）の 3 番目の要素 = l\n</pre></div></div>\n</div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">i</span> <span class=\"pre\">=</span> <span class=\"pre\">0</span></code> のときに、2番目（内側）のfor文において、 <code class=\"docutils literal notranslate\"><span class=\"pre\">j</span></code> に <code class=\"docutils literal notranslate\"><span class=\"pre\">0</span></code> から <code class=\"docutils literal notranslate\"><span class=\"pre\">2</span></code> までの値が順に代入されて、各場合に <code class=\"docutils literal notranslate\"><span class=\"pre\">print</span></code> が実行されます。 その後、2番目の for文の実行が終わると、1番目（外側）のfor文の最初に戻って、 <code class=\"docutils literal notranslate\"><span class=\"pre\">i</span></code> の値に新しい値が代入されて、<code class=\"docutils literal notranslate\"><span class=\"pre\">i</span> <span class=\"pre\">=</span> <span class=\"pre\">1</span></code> になります。 その後、再度 2番目のfor文を実行することになります。 このときに、この2番目の for文の中で <code class=\"docutils literal notranslate\"><span class=\"pre\">j</span></code> には再度、<code class=\"docutils literal notranslate\"><span class=\"pre\">0</span></code> から <code class=\"docutils literal notranslate\"><span class=\"pre\">2</span></code> までの値が順に代入されることになります。</p>\n<p>決して、「最初に <code class=\"docutils literal notranslate\"><span class=\"pre\">j</span> <span class=\"pre\">=</span> <span class=\"pre\">2</span></code> まで代入したから、 もう2番目のfor文は実行しない」という訳ではないことに注意してください。 一度for文の実行を終えて、再度同じfor文（上の例でいうところの2番目の for文）に戻ってきた場合、 その手続きはまた最初からやり直すことになるのです。</p>\n<p>以下のプログラムは、変数 <code class=\"docutils literal notranslate\"><span class=\"pre\">C</span></code> に組み合わせの数をリストのリストとして求めます。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">C[i][j]</span></code> は、<code class=\"docutils literal notranslate\"><span class=\"pre\">i</span></code> 個から <code class=\"docutils literal notranslate\"><span class=\"pre\">j</span></code> 個を選ぶ組み合わせの数になります。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[24]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">C</span> <span class=\"o\">=</span> <span class=\"p\">[[</span><span class=\"mi\">1</span><span class=\"p\">]]</span>\n<span class=\"k\">for</span> <span class=\"n\">i</span> <span class=\"ow\">in</span> <span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"mi\">100</span><span class=\"p\">):</span>\n    <span class=\"n\">C</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">([</span><span class=\"mi\">1</span><span class=\"p\">]</span><span class=\"o\">+</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]</span><span class=\"o\">*</span><span class=\"n\">i</span><span class=\"o\">+</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">])</span>\n    <span class=\"k\">for</span> <span class=\"n\">j</span> <span class=\"ow\">in</span> <span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"n\">i</span><span class=\"p\">):</span>\n        <span class=\"n\">C</span><span class=\"p\">[</span><span class=\"n\">i</span><span class=\"o\">+</span><span class=\"mi\">1</span><span class=\"p\">][</span><span class=\"n\">j</span><span class=\"o\">+</span><span class=\"mi\">1</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">C</span><span class=\"p\">[</span><span class=\"n\">i</span><span class=\"p\">][</span><span class=\"n\">j</span><span class=\"p\">]</span> <span class=\"o\">+</span> <span class=\"n\">C</span><span class=\"p\">[</span><span class=\"n\">i</span><span class=\"p\">][</span><span class=\"n\">j</span><span class=\"o\">+</span><span class=\"mi\">1</span><span class=\"p\">]</span>\n\n<span class=\"n\">C</span><span class=\"p\">[:</span><span class=\"mi\">10</span><span class=\"p\">]</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[24]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n[[1],\n [1, 1],\n [1, 2, 1],\n [1, 3, 3, 1],\n [1, 4, 6, 4, 1],\n [1, 5, 10, 10, 5, 1],\n [1, 6, 15, 20, 15, 6, 1],\n [1, 7, 21, 35, 35, 21, 7, 1],\n [1, 8, 28, 56, 70, 56, 28, 8, 1],\n [1, 9, 36, 84, 126, 126, 84, 36, 9, 1]]\n</pre></div></div>\n</div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">C[100]</span></code> を視覚化してみましょう。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[25]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">plt</span><span class=\"o\">.</span><span class=\"n\">plot</span><span class=\"p\">(</span><span class=\"n\">C</span><span class=\"p\">[</span><span class=\"mi\">100</span><span class=\"p\">])</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[25]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n[&lt;matplotlib.lines.Line2D at 0x1050aa090&gt;]\n</pre></div></div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<img alt=\"../_images/3_3-2_51_1.png\" src=\"../_images/3_3-2_51_1.png\" />\n</div>\n</div>\n</section>\n<section id=\"id8\">\n<h2>練習<a class=\"headerlink\" href=\"#id8\" title=\"Link to this heading\">¶</a></h2>\n<p>次のような関数 <code class=\"docutils literal notranslate\"><span class=\"pre\">sum_lists</span></code> を作成してください。</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">sum_lists</span></code> はリスト <code class=\"docutils literal notranslate\"><span class=\"pre\">list1</span></code> を引数とします。</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">list1</span></code> の各要素はリストであり、そのリストの要素は数です。</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">sum_lists</span></code> は、<code class=\"docutils literal notranslate\"><span class=\"pre\">list1</span></code> の各要素であるリストの総和を求め、それらの総和を足し合せて返します。</p></li>\n</ul>\n<p>以下のセルの <code class=\"docutils literal notranslate\"><span class=\"pre\">...</span></code> のところを書き換えて <code class=\"docutils literal notranslate\"><span class=\"pre\">sum_lists</span></code> を作成してください。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[26]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">def</span> <span class=\"nf\">sum_lists</span><span class=\"p\">(</span><span class=\"n\">list1</span><span class=\"p\">):</span>\n    <span class=\"o\">...</span>\n</pre></div>\n</div>\n</div>\n<p>上のセルで解答を作成した後、以下のセルを実行し、実行結果が <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> になることを確認してください。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[27]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">sum_lists</span><span class=\"p\">([[</span><span class=\"mi\">20</span><span class=\"p\">,</span> <span class=\"mi\">5</span><span class=\"p\">],</span> <span class=\"p\">[</span><span class=\"mi\">6</span><span class=\"p\">,</span> <span class=\"mi\">16</span><span class=\"p\">,</span> <span class=\"mi\">14</span><span class=\"p\">,</span> <span class=\"mi\">5</span><span class=\"p\">],</span> <span class=\"p\">[</span><span class=\"mi\">16</span><span class=\"p\">,</span> <span class=\"mi\">8</span><span class=\"p\">,</span> <span class=\"mi\">16</span><span class=\"p\">,</span> <span class=\"mi\">17</span><span class=\"p\">,</span> <span class=\"mi\">14</span><span class=\"p\">],</span> <span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">],</span> <span class=\"p\">[</span><span class=\"mi\">5</span><span class=\"p\">,</span> <span class=\"mi\">3</span><span class=\"p\">,</span> <span class=\"mi\">5</span><span class=\"p\">,</span> <span class=\"mi\">7</span><span class=\"p\">]])</span> <span class=\"o\">==</span> <span class=\"mi\">158</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nFalse\n</pre></div></div>\n</div>\n</section>\n<section id=\"id9\">\n<h2>練習<a class=\"headerlink\" href=\"#id9\" title=\"Link to this heading\">¶</a></h2>\n<p>リスト <code class=\"docutils literal notranslate\"><span class=\"pre\">list1</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">list2</span></code> が引数として与えられたとき、次のようなリスト <code class=\"docutils literal notranslate\"><span class=\"pre\">list3</span></code> を返す関数 <code class=\"docutils literal notranslate\"><span class=\"pre\">sum_matrix</span></code> を作成してください。</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">list1</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">list2</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">list3</span></code> は、3つの要素を持ちます。</p></li>\n<li><p>各要素は大きさ3のリストになっており、そのリストの要素は全て数です。</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">list3[i][j]</span></code> （ただし、<code class=\"docutils literal notranslate\"><span class=\"pre\">i</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">j</span></code> は共に、0以上2以下の整数）は <code class=\"docutils literal notranslate\"><span class=\"pre\">list1[i][j]</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">list2[i][j]</span></code> の値の和になっています。</p></li>\n</ul>\n<p>以下のセルの <code class=\"docutils literal notranslate\"><span class=\"pre\">...</span></code> のところを書き換えて <code class=\"docutils literal notranslate\"><span class=\"pre\">sum_matrix</span></code> を作成してください。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[28]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">def</span> <span class=\"nf\">sum_matrix</span><span class=\"p\">(</span><span class=\"n\">list1</span><span class=\"p\">,</span> <span class=\"n\">list2</span><span class=\"p\">):</span>\n    <span class=\"o\">...</span>\n</pre></div>\n</div>\n</div>\n<p>上のセルで解答を作成した後、以下のセルを実行し、実行結果が <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> になることを確認してください。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[29]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">sum_matrix</span><span class=\"p\">([[</span><span class=\"mi\">1</span><span class=\"p\">,</span><span class=\"mi\">2</span><span class=\"p\">,</span><span class=\"mi\">3</span><span class=\"p\">],[</span><span class=\"mi\">4</span><span class=\"p\">,</span><span class=\"mi\">5</span><span class=\"p\">,</span><span class=\"mi\">6</span><span class=\"p\">],[</span><span class=\"mi\">7</span><span class=\"p\">,</span><span class=\"mi\">8</span><span class=\"p\">,</span><span class=\"mi\">9</span><span class=\"p\">]],</span> <span class=\"p\">[[</span><span class=\"mi\">1</span><span class=\"p\">,</span><span class=\"mi\">4</span><span class=\"p\">,</span><span class=\"mi\">7</span><span class=\"p\">],[</span><span class=\"mi\">2</span><span class=\"p\">,</span><span class=\"mi\">5</span><span class=\"p\">,</span><span class=\"mi\">8</span><span class=\"p\">],[</span><span class=\"mi\">3</span><span class=\"p\">,</span><span class=\"mi\">6</span><span class=\"p\">,</span><span class=\"mi\">9</span><span class=\"p\">]])</span> <span class=\"o\">==</span> <span class=\"p\">[[</span><span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"mi\">6</span><span class=\"p\">,</span> <span class=\"mi\">10</span><span class=\"p\">],</span> <span class=\"p\">[</span><span class=\"mi\">6</span><span class=\"p\">,</span> <span class=\"mi\">10</span><span class=\"p\">,</span> <span class=\"mi\">14</span><span class=\"p\">],</span> <span class=\"p\">[</span><span class=\"mi\">10</span><span class=\"p\">,</span> <span class=\"mi\">14</span><span class=\"p\">,</span> <span class=\"mi\">18</span><span class=\"p\">]])</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nFalse\n</pre></div></div>\n</div>\n</section>\n<section id=\"for文の計算量\">\n<h2>for文の<strong>計算量</strong><a class=\"headerlink\" href=\"#for文の計算量\" title=\"Link to this heading\">¶</a></h2>\n<p>山口和紀編「情報」第2版（東京大学出版会）には、「<strong>計算量</strong>とは、 アルゴリズムをもとにしたプログラムの実行時間を見積もるための指標である。」と書かれています。 さらに、「この見積もりは<strong>計算量のオーダー</strong>と呼ばれる非常におおまかな尺度で考える。」と書かれています。 （太字は引用時に追加しました。）</p>\n<p>たとえば、リストに対するfor文</p>\n<div class=\"highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>for x in リスト:\n    要素xに対する処理\n</pre></div>\n</div>\n<p>では、「要素に対する処理」が要素の数だけ実行されます。 この処理の時間が一定であるとすると、要素の数を <span class=\"math notranslate nohighlight\">\\(n\\)</span> としたとき、 全体の処理には <span class=\"math notranslate nohighlight\">\\(n\\)</span> に比例する時間がかかります。 このことを、<strong>オーダー</strong> <span class=\"math notranslate nohighlight\">\\(n\\)</span> といって、<span class=\"math notranslate nohighlight\">\\(O(n)\\)</span> と書きます。 一方、</p>\n<div class=\"highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>for x in リスト:\n    for y in 同じリスト:\n        要素の組み合わせ(x,y)に対する処理\n</pre></div>\n</div>\n<p>という二重のループでは、要素の組み合わせに対する処理が一定時間で終わるとしても、 ループの中でループが実行されるので、 全体の処理には、<span class=\"math notranslate nohighlight\">\\(n^2\\)</span> に比例する時間がかかります。 このことを <span class=\"math notranslate nohighlight\">\\(O(n^2)\\)</span> と書きます。 <span class=\"math notranslate nohighlight\">\\(n\\)</span> が10倍になったとき、 一重のループの実行時間は10倍にしかなりませんが、 二重ループの実行時間は100倍になります。 <span class=\"math notranslate nohighlight\">\\(n\\)</span> が100倍になったときは、前者は100倍ですが後者は10000倍になります。</p>\n<p>二重ループが明らかでないこともあります。 以下の関数は、リストとして与えられたデータの平均と分散を計算するものです。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[30]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">def</span> <span class=\"nf\">average</span><span class=\"p\">(</span><span class=\"n\">d</span><span class=\"p\">):</span>\n    <span class=\"n\">s</span> <span class=\"o\">=</span> <span class=\"mi\">0</span>\n    <span class=\"k\">for</span> <span class=\"n\">x</span> <span class=\"ow\">in</span> <span class=\"n\">d</span><span class=\"p\">:</span>\n        <span class=\"n\">s</span> <span class=\"o\">=</span> <span class=\"n\">s</span> <span class=\"o\">+</span> <span class=\"n\">x</span>\n    <span class=\"k\">return</span> <span class=\"n\">s</span><span class=\"o\">/</span><span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">d</span><span class=\"p\">)</span>\n\n<span class=\"k\">def</span> <span class=\"nf\">variance</span><span class=\"p\">(</span><span class=\"n\">d</span><span class=\"p\">):</span>\n    <span class=\"n\">s</span> <span class=\"o\">=</span> <span class=\"mi\">0</span>\n    <span class=\"k\">for</span> <span class=\"n\">x</span> <span class=\"ow\">in</span> <span class=\"n\">d</span><span class=\"p\">:</span>\n        <span class=\"n\">s</span> <span class=\"o\">=</span> <span class=\"n\">s</span> <span class=\"o\">+</span> <span class=\"p\">(</span><span class=\"n\">x</span><span class=\"o\">-</span><span class=\"n\">average</span><span class=\"p\">(</span><span class=\"n\">d</span><span class=\"p\">))</span><span class=\"o\">**</span><span class=\"mi\">2</span>\n    <span class=\"k\">return</span> <span class=\"n\">s</span><span class=\"o\">/</span><span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">d</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<p>ガウス分布から100個のデータと10000個のデータを生成して分散を計算してみましょう。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[31]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"kn\">import</span> <span class=\"nn\">random</span>\n<span class=\"n\">d100</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n<span class=\"k\">for</span> <span class=\"n\">i</span> <span class=\"ow\">in</span> <span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"mi\">100</span><span class=\"p\">):</span>\n    <span class=\"n\">d100</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">random</span><span class=\"o\">.</span><span class=\"n\">gauss</span><span class=\"p\">(</span><span class=\"mi\">0</span><span class=\"p\">,</span><span class=\"mi\">10</span><span class=\"p\">))</span>\n<span class=\"n\">d10000</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n<span class=\"k\">for</span> <span class=\"n\">i</span> <span class=\"ow\">in</span> <span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"mi\">10000</span><span class=\"p\">):</span>\n    <span class=\"n\">d10000</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">random</span><span class=\"o\">.</span><span class=\"n\">gauss</span><span class=\"p\">(</span><span class=\"mi\">0</span><span class=\"p\">,</span><span class=\"mi\">10</span><span class=\"p\">))</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[32]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">variance</span><span class=\"p\">(</span><span class=\"n\">d100</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[32]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n119.19853794590166\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[33]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">variance</span><span class=\"p\">(</span><span class=\"n\">d10000</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[33]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n102.13222070717606\n</pre></div></div>\n</div>\n<p>10000個の場合は相当に時間がかかることがわかります。 これは、<code class=\"docutils literal notranslate\"><span class=\"pre\">variance</span></code> のfor文の中で <code class=\"docutils literal notranslate\"><span class=\"pre\">average</span></code> を呼んでいるためです。 見かけ上は一重ループなのですが、<code class=\"docutils literal notranslate\"><span class=\"pre\">average</span></code> の中にもループがあるため、 二重ループと同じ時間がかかります。 したがって、10000個の場合は、100個の場合に比べて10000倍時間がかかります。</p>\n<p>ローカル変数を用いて <code class=\"docutils literal notranslate\"><span class=\"pre\">variance</span></code> の定義を書き直してみましょう。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[34]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">def</span> <span class=\"nf\">variance</span><span class=\"p\">(</span><span class=\"n\">d</span><span class=\"p\">):</span>\n    <span class=\"n\">av</span> <span class=\"o\">=</span> <span class=\"n\">average</span><span class=\"p\">(</span><span class=\"n\">d</span><span class=\"p\">)</span>\n    <span class=\"n\">s</span> <span class=\"o\">=</span> <span class=\"mi\">0</span>\n    <span class=\"k\">for</span> <span class=\"n\">x</span> <span class=\"ow\">in</span> <span class=\"n\">d</span><span class=\"p\">:</span>\n        <span class=\"n\">s</span> <span class=\"o\">=</span> <span class=\"n\">s</span> <span class=\"o\">+</span> <span class=\"p\">(</span><span class=\"n\">x</span><span class=\"o\">-</span><span class=\"n\">av</span><span class=\"p\">)</span><span class=\"o\">**</span><span class=\"mi\">2</span>\n    <span class=\"k\">return</span> <span class=\"n\">s</span><span class=\"o\">/</span><span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">d</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[35]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">variance</span><span class=\"p\">(</span><span class=\"n\">d100</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[35]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n119.19853794590166\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[36]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">variance</span><span class=\"p\">(</span><span class=\"n\">d10000</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[36]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n102.13222070717606\n</pre></div></div>\n</div>\n<p>10000個の場合でも一瞬で実行が終わったことでしょう。 この場合、一重のループを2回実行しているだけだからです。</p>\n</section>\n<section id=\"enumerate\">\n<h2><code class=\"docutils literal notranslate\"><span class=\"pre\">enumerate</span></code><a class=\"headerlink\" href=\"#enumerate\" title=\"Link to this heading\">¶</a></h2>\n<p>for文の繰り返し処理では、要素の順序を把握したいことがあります。 これまで学んだ方法では以下のように書けます。</p>\n<div class=\"highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>i = 0\nfor val in some_list:\n    print(i, val)\n    # 繰り返させたい処理\n    i += 1\n</pre></div>\n</div>\n<p>Pythonでは <code class=\"docutils literal notranslate\"><span class=\"pre\">enumerate()</span></code> 関数が用意されており、上のプログラムは以下のように書き換えることができます。</p>\n<div class=\"highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>for i, val in enumerate(some_list):\n    # 繰り返させたい処理\n</pre></div>\n</div>\n<p>2つの変数 <code class=\"docutils literal notranslate\"><span class=\"pre\">i</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">val</span></code> が指定されています。 <code class=\"docutils literal notranslate\"><span class=\"pre\">i</span></code> には <code class=\"docutils literal notranslate\"><span class=\"pre\">0</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">1</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">2</span></code>, … が順に代入されます。 <code class=\"docutils literal notranslate\"><span class=\"pre\">val</span></code> にはリストの要素が順に代入されます。</p>\n<p>たとえば、リストの要素をキー、そのインデックスを値とする辞書が欲しい場合は、以下のように書くことができます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[37]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">words</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s1\">&#39;dog&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;cat&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;mouse&#39;</span><span class=\"p\">]</span>\n<span class=\"n\">mapping</span> <span class=\"o\">=</span> <span class=\"p\">{}</span>\n<span class=\"k\">for</span> <span class=\"n\">i</span><span class=\"p\">,</span> <span class=\"n\">w</span> <span class=\"ow\">in</span> <span class=\"nb\">enumerate</span><span class=\"p\">(</span><span class=\"n\">words</span><span class=\"p\">):</span>\n    <span class=\"n\">mapping</span><span class=\"p\">[</span><span class=\"n\">w</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">i</span>\n\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">mapping</span><span class=\"p\">)</span>            <span class=\"c1\"># {&#39;dog&#39;: 0, &#39;cat&#39;: 1, &#39;mouse&#39;: 2} が得られる。</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n{&#39;dog&#39;: 0, &#39;cat&#39;: 1, &#39;mouse&#39;: 2}\n</pre></div></div>\n</div>\n</section>\n<section id=\"in\">\n<h2><code class=\"docutils literal notranslate\"><span class=\"pre\">in</span></code><a class=\"headerlink\" href=\"#in\" title=\"Link to this heading\">¶</a></h2>\n<p>Pythonでは <code class=\"docutils literal notranslate\"><span class=\"pre\">for</span></code> ループでリストを展開する <code class=\"docutils literal notranslate\"><span class=\"pre\">in</span></code> とは別に、 2-2 で説明したように、リスト内の要素の有無を検査する <code class=\"docutils literal notranslate\"><span class=\"pre\">in</span></code> 演算子と <code class=\"docutils literal notranslate\"><span class=\"pre\">not</span> <span class=\"pre\">in</span></code> 演算子が定義されています。 以下のように、<code class=\"docutils literal notranslate\"><span class=\"pre\">if</span></code> 文の条件に <code class=\"docutils literal notranslate\"><span class=\"pre\">in</span></code> が出現した場合、for文とは動作が異なるので注意してください。</p>\n<div class=\"highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>colors = [&#39;red&#39;, &#39;green&#39;, &#39;blue&#39;]\ncolor = &#39;red&#39;\n\nif color in colors:\n    # do something\n</pre></div>\n</div>\n</section>\n<section id=\"while文による繰り返し\">\n<h2>while文による繰り返し<a class=\"headerlink\" href=\"#while文による繰り返し\" title=\"Link to this heading\">¶</a></h2>\n<p><strong>while文</strong>では <code class=\"docutils literal notranslate\"><span class=\"pre\">while</span></code> の後の条件式が <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code> となるまで、実行文グループを繰り返します。</p>\n<p>下記のプログラムでは、<span class=\"math notranslate nohighlight\">\\(\\sum_{x=1}^{10}x\\)</span> が <code class=\"docutils literal notranslate\"><span class=\"pre\">total</span></code> の値となります。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[38]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">x</span> <span class=\"o\">=</span> <span class=\"mi\">1</span>\n<span class=\"n\">total</span> <span class=\"o\">=</span> <span class=\"mi\">0</span>\n<span class=\"k\">while</span> <span class=\"n\">x</span> <span class=\"o\">&lt;=</span> <span class=\"mi\">10</span><span class=\"p\">:</span>\n    <span class=\"n\">total</span> <span class=\"o\">+=</span> <span class=\"n\">x</span>\n    <span class=\"n\">x</span> <span class=\"o\">+=</span> <span class=\"mi\">1</span>\n\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">,</span> <span class=\"n\">total</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n11 55\n</pre></div></div>\n</div>\n<p>条件式が <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code> になったときに、 while文から抜けているので、 終了後の <code class=\"docutils literal notranslate\"><span class=\"pre\">x</span></code> の値が <code class=\"docutils literal notranslate\"><span class=\"pre\">11</span></code> になっていることに注意してください。 なお、上の例を for文で実行する場合には以下のようになります。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[39]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">total</span> <span class=\"o\">=</span> <span class=\"mi\">0</span>\n<span class=\"k\">for</span> <span class=\"n\">x</span> <span class=\"ow\">in</span> <span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"mi\">11</span><span class=\"p\">):</span>\n    <span class=\"n\">total</span> <span class=\"o\">+=</span> <span class=\"n\">x</span>\n\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">,</span> <span class=\"n\">total</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n10 55\n</pre></div></div>\n</div>\n</section>\n<section id=\"制御構造とreturn文\">\n<h2>制御構造とreturn文<a class=\"headerlink\" href=\"#制御構造とreturn文\" title=\"Link to this heading\">¶</a></h2>\n<p><strong>return文</strong>は1-2で説明したように関数を終了し、値を返す（返値）機能を持ちます。 <code class=\"docutils literal notranslate\"><span class=\"pre\">if</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">for</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">while</span></code> といった制御構造の中でreturn文が実行された場合、 ただちに関数の処理を終了し、その後の処理は行われません。</p>\n<p>以下の関数 <code class=\"docutils literal notranslate\"><span class=\"pre\">simple_lsearch</span></code> は与えられたリスト、<code class=\"docutils literal notranslate\"><span class=\"pre\">lst</span></code> に <code class=\"docutils literal notranslate\"><span class=\"pre\">myitem</span></code> と等しいものがあれば <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> を、なければ <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code> を返します。</p>\n<ul class=\"simple\">\n<li><p>2行目のfor文で <code class=\"docutils literal notranslate\"><span class=\"pre\">lst</span></code> の各要素に対して繰り返しを実行するように指定されています。</p></li>\n<li><p>3行目のif文で要素 <code class=\"docutils literal notranslate\"><span class=\"pre\">item</span></code> が <code class=\"docutils literal notranslate\"><span class=\"pre\">myitem</span></code> と等しい場合、4行目の <code class=\"docutils literal notranslate\"><span class=\"pre\">return</span> <span class=\"pre\">True</span></code> でただちに関数を終了しています。</p></li>\n<li><p>for文で全てのリスト要素に対してテストが終わり、等しいものがない場合は、5行目の <code class=\"docutils literal notranslate\"><span class=\"pre\">return</span> <span class=\"pre\">False</span></code> が実行されます。</p></li>\n</ul>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[40]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">def</span> <span class=\"nf\">simple_lsearch</span><span class=\"p\">(</span><span class=\"n\">lst</span><span class=\"p\">,</span> <span class=\"n\">myitem</span><span class=\"p\">):</span>\n    <span class=\"k\">for</span> <span class=\"n\">item</span> <span class=\"ow\">in</span> <span class=\"n\">lst</span><span class=\"p\">:</span>\n        <span class=\"k\">if</span> <span class=\"n\">item</span> <span class=\"o\">==</span> <span class=\"n\">myitem</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"kc\">True</span>\n    <span class=\"k\">return</span> <span class=\"kc\">False</span>\n</pre></div>\n</div>\n</div>\n</section>\n<section id=\"break文\">\n<h2><strong>break文</strong><a class=\"headerlink\" href=\"#break文\" title=\"Link to this heading\">¶</a></h2>\n<p><strong>break文</strong>は、 for文もしくはwhile文の実行文グループで利用可能です。 break文は実行中のプログラムで最も内側の繰り返し処理を中断し、そのループを終了させる目的で利用されます。 以下のプログラムは、初項 <code class=\"docutils literal notranslate\"><span class=\"pre\">256</span></code>、公比 1/2、の等比級数の和を求めるものです。 ただし、総和が <code class=\"docutils literal notranslate\"><span class=\"pre\">500</span></code> をこえれば打ち切られます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[41]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">x</span> <span class=\"o\">=</span> <span class=\"mi\">256</span>\n<span class=\"n\">total</span> <span class=\"o\">=</span> <span class=\"mi\">0</span>\n<span class=\"k\">while</span> <span class=\"n\">x</span> <span class=\"o\">&gt;</span> <span class=\"mi\">0</span><span class=\"p\">:</span>\n    <span class=\"k\">if</span> <span class=\"n\">total</span> <span class=\"o\">&gt;</span> <span class=\"mi\">500</span><span class=\"p\">:</span>\n        <span class=\"k\">break</span>           <span class=\"c1\"># 500 を超えれば while ループを抜ける</span>\n    <span class=\"n\">total</span> <span class=\"o\">+=</span> <span class=\"n\">x</span>\n    <span class=\"n\">x</span> <span class=\"o\">=</span> <span class=\"n\">x</span> <span class=\"o\">//</span> <span class=\"mi\">2</span>          <span class=\"c1\"># // は少数点以下を切り捨てる除算</span>\n\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">,</span> <span class=\"n\">total</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n4 504\n</pre></div></div>\n</div>\n</section>\n<section id=\"id11\">\n<h2>練習<a class=\"headerlink\" href=\"#id11\" title=\"Link to this heading\">¶</a></h2>\n<p>文字列 <code class=\"docutils literal notranslate\"><span class=\"pre\">str1</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">str2</span></code> が引数として与えられたとき、 <code class=\"docutils literal notranslate\"><span class=\"pre\">str1</span></code> が <code class=\"docutils literal notranslate\"><span class=\"pre\">str2</span></code> を部分文字列として含むかどうか判定する関数 <code class=\"docutils literal notranslate\"><span class=\"pre\">simple_match</span></code> を作成してください。 具体的には、<code class=\"docutils literal notranslate\"><span class=\"pre\">str2</span></code> を含む場合、 その部分文字列が開始される <code class=\"docutils literal notranslate\"><span class=\"pre\">str1</span></code> のインデックスを返値として返してください。 <code class=\"docutils literal notranslate\"><span class=\"pre\">str2</span></code> を含まない場合、 <code class=\"docutils literal notranslate\"><span class=\"pre\">-1</span></code> を返してください。 ただし、<code class=\"docutils literal notranslate\"><span class=\"pre\">simple_match</span></code> の中で文字列のメソッドやモジュール（正規表現など）を使ってはいけません。</p>\n<p>以下のセルの <code class=\"docutils literal notranslate\"><span class=\"pre\">...</span></code> のところを書き換えて <code class=\"docutils literal notranslate\"><span class=\"pre\">simple_match</span></code> を作成してください。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[42]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">def</span> <span class=\"nf\">simple_match</span><span class=\"p\">(</span><span class=\"n\">str1</span><span class=\"p\">,</span> <span class=\"n\">str2</span><span class=\"p\">):</span>\n    <span class=\"o\">...</span>\n</pre></div>\n</div>\n</div>\n<p>上のセルで解答を作成した後、以下のセルを実行し、実行結果が <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> になることを確認してください。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[43]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">simple_match</span><span class=\"p\">(</span><span class=\"s1\">&#39;location&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;cat&#39;</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"mi\">2</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">simple_match</span><span class=\"p\">(</span><span class=\"s1\">&#39;soccer&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;cat&#39;</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">simple_match</span><span class=\"p\">(</span><span class=\"s1\">&#39;category&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;cat&#39;</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"mi\">0</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">simple_match</span><span class=\"p\">(</span><span class=\"s1\">&#39;carpet&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;cat&#39;</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nFalse\nFalse\nFalse\nFalse\n</pre></div></div>\n</div>\n</section>\n<section id=\"continue文\">\n<h2><strong>continue文</strong><a class=\"headerlink\" href=\"#continue文\" title=\"Link to this heading\">¶</a></h2>\n<p>continue文はbreak文同様に、<code class=\"docutils literal notranslate\"><span class=\"pre\">for</span></code> および <code class=\"docutils literal notranslate\"><span class=\"pre\">while</span></code> ループの実行文グループで利用可能です。 continue文は実行中のプログラムで最も内側の繰り返し処理を中断し、次のループの繰り返しの処理を開始します。</p>\n<p>下記のプログラムでは、<code class=\"docutils literal notranslate\"><span class=\"pre\">colors</span></code> リストの <code class=\"docutils literal notranslate\"><span class=\"pre\">'black'</span></code> は印字されませんが <code class=\"docutils literal notranslate\"><span class=\"pre\">'white'</span></code> は印字されます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[44]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">colors</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s1\">&#39;red&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;green&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;blue&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;black&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;white&#39;</span><span class=\"p\">]</span>\n<span class=\"k\">for</span> <span class=\"n\">c</span> <span class=\"ow\">in</span> <span class=\"n\">colors</span><span class=\"p\">:</span>\n    <span class=\"k\">if</span> <span class=\"n\">c</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;black&#39;</span><span class=\"p\">:</span>\n           <span class=\"k\">continue</span>\n    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">c</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nred\ngreen\nblue\nwhite\n</pre></div></div>\n</div>\n</section>\n<section id=\"▲for文とwhile文における-else\">\n<h2>▲for文とwhile文における <code class=\"docutils literal notranslate\"><span class=\"pre\">else</span></code><a class=\"headerlink\" href=\"#▲for文とwhile文における-else\" title=\"Link to this heading\">¶</a></h2>\n<p>for文およびwhile文では <code class=\"docutils literal notranslate\"><span class=\"pre\">else</span></code> を書くこともできます。 この実行文グループは、ループの最後に一度だけ実行されます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[45]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">colors</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s1\">&#39;red&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;green&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;blue&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;black&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;white&#39;</span><span class=\"p\">]</span>\n<span class=\"k\">for</span> <span class=\"n\">c</span> <span class=\"ow\">in</span> <span class=\"n\">colors</span><span class=\"p\">:</span>\n    <span class=\"k\">if</span> <span class=\"n\">c</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;black&#39;</span><span class=\"p\">:</span>\n        <span class=\"k\">continue</span>\n    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">c</span><span class=\"p\">)</span>\n<span class=\"k\">else</span><span class=\"p\">:</span>\n    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s1\">&#39;&#39;</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nred\ngreen\nblue\nwhite\n\n</pre></div></div>\n</div>\n<p>for文およびwhile文の <code class=\"docutils literal notranslate\"><span class=\"pre\">else</span></code> ブロックの内容は <code class=\"docutils literal notranslate\"><span class=\"pre\">continue</span></code> で終了したときは実行されますが、一方で <code class=\"docutils literal notranslate\"><span class=\"pre\">break</span></code> でループを終了したときは実行されません。</p>\n</section>\n<section id=\"pass文\">\n<h2><strong>pass文</strong><a class=\"headerlink\" href=\"#pass文\" title=\"Link to this heading\">¶</a></h2>\n<p>Pythonでは空の実行文グループは許されていません。 一方で、空白のコードブロックを用いることでプログラムが読みやすくなる場合があります。 たとえば以下の、<code class=\"docutils literal notranslate\"><span class=\"pre\">if</span></code> … <code class=\"docutils literal notranslate\"><span class=\"pre\">elif</span></code> … <code class=\"docutils literal notranslate\"><span class=\"pre\">else</span></code> プログラムはエラーとなります。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[46]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">x</span> <span class=\"o\">=</span> <span class=\"o\">-</span><span class=\"mi\">1</span>\n<span class=\"k\">if</span> <span class=\"n\">x</span> <span class=\"o\">&lt;</span> <span class=\"mi\">0</span><span class=\"p\">:</span>\n    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s1\">&#39;x is positive&#39;</span><span class=\"p\">)</span>\n<span class=\"k\">elif</span> <span class=\"n\">x</span> <span class=\"o\">==</span> <span class=\"mi\">0</span><span class=\"p\">:</span>\n    <span class=\"c1\"># IndentationError: expected an indented block</span>\n<span class=\"k\">elif</span> <span class=\"mi\">0</span> <span class=\"o\">&lt;</span> <span class=\"n\">x</span> <span class=\"o\">&lt;</span> <span class=\"mi\">5</span><span class=\"p\">:</span>\n    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s1\">&#39;x is positive and smaller than 5&#39;</span><span class=\"p\">)</span>\n<span class=\"k\">else</span><span class=\"p\">:</span>\n    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s1\">&#39;x is positive and larger than or equal to 5&#39;</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n<span class=\"ansi-cyan-fg\">  Cell </span><span class=\"ansi-green-fg\">In[46], line 6</span>\n<span class=\"ansi-red-fg\">    elif 0 &lt; x &lt; 5:</span>\n    ^\n<span class=\"ansi-red-fg\">IndentationError</span><span class=\"ansi-red-fg\">:</span> expected an indented block after &#39;elif&#39; statement on line 4\n\n</pre></div></div>\n</div>\n<p>なにもしないpass文を用いて、以下のように書き換えることで正常に実行されます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[47]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">x</span> <span class=\"o\">=</span> <span class=\"o\">-</span><span class=\"mi\">1</span>\n<span class=\"k\">if</span> <span class=\"n\">x</span> <span class=\"o\">&lt;</span> <span class=\"mi\">0</span><span class=\"p\">:</span>\n    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s1\">&#39;x is positive&#39;</span><span class=\"p\">)</span>\n<span class=\"k\">elif</span> <span class=\"n\">x</span> <span class=\"o\">==</span> <span class=\"mi\">0</span><span class=\"p\">:</span>\n    <span class=\"c1\"># no error</span>\n    <span class=\"k\">pass</span>\n<span class=\"k\">elif</span> <span class=\"mi\">0</span> <span class=\"o\">&lt;</span> <span class=\"n\">x</span> <span class=\"o\">&lt;</span> <span class=\"mi\">5</span><span class=\"p\">:</span>\n    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s1\">&#39;x is positive and smaller than 5&#39;</span><span class=\"p\">)</span>\n<span class=\"k\">else</span><span class=\"p\">:</span>\n    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s1\">&#39;x is positive and larger than or equal to 5&#39;</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nx is positive\n</pre></div></div>\n</div>\n</section>\n<section id=\"id12\">\n<h2>練習<a class=\"headerlink\" href=\"#id12\" title=\"Link to this heading\">¶</a></h2>\n<p>以下のプログラムでは1秒おきに <code class=\"docutils literal notranslate\"><span class=\"pre\">print</span></code> が永久に実行されます。</p>\n<div class=\"highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>from time import sleep\n\nwhile True:\n    print(&#39;Yeah!&#39;)\n    sleep(1)\n</pre></div>\n</div>\n<p>10回 <code class=\"docutils literal notranslate\"><span class=\"pre\">print</span></code> が実行された後にwhile文を終了するように書き換えてください。 実行中のセルを停止させるには、ストップボタンが使えます。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[ ]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span>\n</pre></div>\n</div>\n</div>\n</section>\n<section id=\"id13\">\n<h2>練習<a class=\"headerlink\" href=\"#id13\" title=\"Link to this heading\">¶</a></h2>\n<p>英語の文章からなる文字列 <code class=\"docutils literal notranslate\"><span class=\"pre\">str_engsentence</span></code> が引数として与えられたとき、 <code class=\"docutils literal notranslate\"><span class=\"pre\">str_engsentence</span></code> 中に含まれる3文字以上の全ての英単語を要素とするリストを返す関数 <code class=\"docutils literal notranslate\"><span class=\"pre\">collect_engwords</span></code> を作成してください。ただし、同じ単語を重複して含んでいて構いません。</p>\n<p>以下のセルの <code class=\"docutils literal notranslate\"><span class=\"pre\">...</span></code> のところを書き換えて <code class=\"docutils literal notranslate\"><span class=\"pre\">collect_engwords(str_engsentence)</span></code> を作成してください。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[48]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">def</span> <span class=\"nf\">collect_engwords</span><span class=\"p\">(</span><span class=\"n\">str_engsentence</span><span class=\"p\">):</span>\n    <span class=\"o\">...</span>\n</pre></div>\n</div>\n</div>\n<p>上のセルで解答を作成した後、以下のセルを実行し、実行結果が <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> になることを確認してください。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[49]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">collect_engwords</span><span class=\"p\">(</span><span class=\"s1\">&#39;Unfortunately no, it requires something with a little more kick, plutonium.&#39;</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"p\">[</span><span class=\"s1\">&#39;Unfortunately&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;requires&#39;</span><span class=\"p\">,</span>\n<span class=\"s1\">&#39;something&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;with&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;little&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;more&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;kick&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;plutonium&#39;</span><span class=\"p\">])</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nFalse\n</pre></div></div>\n</div>\n</section>\n<section id=\"id14\">\n<h2>練習<a class=\"headerlink\" href=\"#id14\" title=\"Link to this heading\">¶</a></h2>\n<p>2つの同じ大きさのリストが引数として与えられたとき、 2つのリストの奇数インデックスの要素を入れ替えて、 その結果得られる2つのリストをタプルにして返す関数 <code class=\"docutils literal notranslate\"><span class=\"pre\">swap_lists</span></code> を作成してください （ただし、0 は偶数として扱うものとします）。 与えられたリストは破壊しても構いません。</p>\n<p>以下のセルの <code class=\"docutils literal notranslate\"><span class=\"pre\">...</span></code> のところを書き換えて <code class=\"docutils literal notranslate\"><span class=\"pre\">swap_lists(ln1,</span> <span class=\"pre\">ln2)</span></code> を作成してください。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[50]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">def</span> <span class=\"nf\">swap_lists</span><span class=\"p\">(</span><span class=\"n\">ln1</span><span class=\"p\">,</span> <span class=\"n\">ln2</span><span class=\"p\">):</span>\n    <span class=\"o\">...</span>\n</pre></div>\n</div>\n</div>\n<p>上のセルで解答を作成した後、以下のセルを実行し、実行結果が <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> になることを確認してください。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[51]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">swap_lists</span><span class=\"p\">([</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"mi\">3</span><span class=\"p\">,</span> <span class=\"mi\">4</span><span class=\"p\">,</span> <span class=\"mi\">5</span><span class=\"p\">],</span> <span class=\"p\">[</span><span class=\"s1\">&#39;a&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;b&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;c&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;d&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;e&#39;</span><span class=\"p\">])</span> <span class=\"o\">==</span> <span class=\"p\">([</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"s1\">&#39;b&#39;</span><span class=\"p\">,</span> <span class=\"mi\">3</span><span class=\"p\">,</span> <span class=\"s1\">&#39;d&#39;</span><span class=\"p\">,</span> <span class=\"mi\">5</span><span class=\"p\">],</span> <span class=\"p\">[</span><span class=\"s1\">&#39;a&#39;</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"s1\">&#39;c&#39;</span><span class=\"p\">,</span> <span class=\"mi\">4</span><span class=\"p\">,</span> <span class=\"s1\">&#39;e&#39;</span><span class=\"p\">]))</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nFalse\n</pre></div></div>\n</div>\n</section>\n<section id=\"id15\">\n<h2>練習<a class=\"headerlink\" href=\"#id15\" title=\"Link to this heading\">¶</a></h2>\n<p>文字列 <code class=\"docutils literal notranslate\"><span class=\"pre\">str1</span></code> を引数として取り、 <code class=\"docutils literal notranslate\"><span class=\"pre\">str1</span></code> の中に含まれる大文字の数を返す関数 <code class=\"docutils literal notranslate\"><span class=\"pre\">count_capitalletters</span></code> を作成してください。</p>\n<p>以下のセルの <code class=\"docutils literal notranslate\"><span class=\"pre\">...</span></code> のところを書き換えて <code class=\"docutils literal notranslate\"><span class=\"pre\">count_capitalletters(str1)</span></code> を作成してください。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[52]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">def</span> <span class=\"nf\">count_capitalletters</span><span class=\"p\">(</span><span class=\"n\">str1</span><span class=\"p\">):</span>\n    <span class=\"o\">...</span>\n</pre></div>\n</div>\n</div>\n<p>上のセルで解答を作成した後、以下のセルを実行し、実行結果が <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> になることを確認してください。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[53]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">count_capitalletters</span><span class=\"p\">(</span><span class=\"s1\">&#39;Que Será, Será&#39;</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"mi\">3</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nFalse\n</pre></div></div>\n</div>\n</section>\n<section id=\"id16\">\n<h2>練習<a class=\"headerlink\" href=\"#id16\" title=\"Link to this heading\">¶</a></h2>\n<p>長さが 3 の倍数である文字列 <code class=\"docutils literal notranslate\"><span class=\"pre\">str_augc</span></code> が引数として与えられたとき、 <code class=\"docutils literal notranslate\"><span class=\"pre\">str_augc</span></code> を長さ 3 の文字列に区切り、それらを順に格納したリストを返す関数 <code class=\"docutils literal notranslate\"><span class=\"pre\">identify_codons</span></code> を作成してください。</p>\n<p>以下のセルの <code class=\"docutils literal notranslate\"><span class=\"pre\">...</span></code> のところを書き換えて <code class=\"docutils literal notranslate\"><span class=\"pre\">identify_codons(str_augc)</span></code> を作成してください。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[54]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">def</span> <span class=\"nf\">identify_codons</span><span class=\"p\">(</span><span class=\"n\">str_augc</span><span class=\"p\">):</span>\n    <span class=\"o\">...</span>\n</pre></div>\n</div>\n</div>\n<p>上のセルで解答を作成した後、以下のセルを実行し、実行結果が <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> になることを確認してください。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[55]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">identify_codons</span><span class=\"p\">(</span><span class=\"s1\">&#39;CCCCCGGCACCT&#39;</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"p\">[</span><span class=\"s1\">&#39;CCC&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;CCG&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;GCA&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;CCT&#39;</span><span class=\"p\">])</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nFalse\n</pre></div></div>\n</div>\n</section>\n<section id=\"id17\">\n<h2>練習<a class=\"headerlink\" href=\"#id17\" title=\"Link to this heading\">¶</a></h2>\n<p>正の整数 <code class=\"docutils literal notranslate\"><span class=\"pre\">int1</span></code> が引数として与えられたとき、 <code class=\"docutils literal notranslate\"><span class=\"pre\">int1</span></code> の値の下桁から3桁毎にコンマ (<code class=\"docutils literal notranslate\"><span class=\"pre\">,</span></code>) を入れた文字列を返す関数 <code class=\"docutils literal notranslate\"><span class=\"pre\">add_commas</span></code> を作成してください。 ただし、数の先頭にコンマを入れる必要はありません。</p>\n<p>以下のセルの <code class=\"docutils literal notranslate\"><span class=\"pre\">...</span></code> のところを書き換えて <code class=\"docutils literal notranslate\"><span class=\"pre\">add_commas</span></code> を作成してください。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[56]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">def</span> <span class=\"nf\">add_commas</span><span class=\"p\">(</span><span class=\"n\">int1</span><span class=\"p\">):</span>\n    <span class=\"o\">...</span>\n</pre></div>\n</div>\n</div>\n<p>上のセルで解答を作成した後、以下のセルを実行し、全ての実行結果が <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> になることを確認してください。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[57]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">add_commas</span><span class=\"p\">(</span><span class=\"mi\">14980</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;14,980&#39;</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">add_commas</span><span class=\"p\">(</span><span class=\"mi\">3980</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;3,980&#39;</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">add_commas</span><span class=\"p\">(</span><span class=\"mi\">298</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;298&#39;</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">add_commas</span><span class=\"p\">(</span><span class=\"mi\">1000000</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;1,000,000&#39;</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nFalse\nFalse\nFalse\nFalse\n</pre></div></div>\n</div>\n</section>\n<section id=\"id18\">\n<h2>練習<a class=\"headerlink\" href=\"#id18\" title=\"Link to this heading\">¶</a></h2>\n<p>リスト <code class=\"docutils literal notranslate\"><span class=\"pre\">list1</span></code> が引数として与えられ、次のような文字列 <code class=\"docutils literal notranslate\"><span class=\"pre\">str1</span></code> を返す関数 <code class=\"docutils literal notranslate\"><span class=\"pre\">sum_strings</span></code> を作成してください。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">list1</span></code> は <code class=\"docutils literal notranslate\"><span class=\"pre\">k</span></code> 個の要素を持つとします（ただし、<code class=\"docutils literal notranslate\"><span class=\"pre\">k</span></code> は正の整数）。 <code class=\"docutils literal notranslate\"><span class=\"pre\">list1</span></code> の要素が文字列でなければ文字列に変換してください。 その上で、<code class=\"docutils literal notranslate\"><span class=\"pre\">list1</span></code> の1番目から <code class=\"docutils literal notranslate\"><span class=\"pre\">k-2</span></code> 番目の各要素の後ろにコンマとスペースからなる文字列 <code class=\"docutils literal notranslate\"><span class=\"pre\">',</span> <span class=\"pre\">'</span></code> を加え、 <code class=\"docutils literal notranslate\"><span class=\"pre\">k-1</span></code> 番目の要素の後ろには、<code class=\"docutils literal notranslate\"><span class=\"pre\">'</span> <span class=\"pre\">and</span> <span class=\"pre\">'</span></code> を加え、1番目から <code class=\"docutils literal notranslate\"><span class=\"pre\">k</span></code> 番目までの要素を繋げた文字列を <code class=\"docutils literal notranslate\"><span class=\"pre\">str1</span></code> とします。</p>\n<p>以下のセルの <code class=\"docutils literal notranslate\"><span class=\"pre\">...</span></code> のところを書き換えて <code class=\"docutils literal notranslate\"><span class=\"pre\">sum_strings</span></code> を作成してください。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[58]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">def</span> <span class=\"nf\">sum_strings</span><span class=\"p\">(</span><span class=\"n\">list1</span><span class=\"p\">):</span>\n    <span class=\"o\">...</span>\n</pre></div>\n</div>\n</div>\n<p>上のセルで解答を作成した後、以下のセルを実行し、実行結果が <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> になることを確認してください。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[59]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">sum_strings</span><span class=\"p\">([</span><span class=\"s1\">&#39;a&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;b&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;c&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;d&#39;</span><span class=\"p\">])</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;a, b, c and d&#39;</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">sum_strings</span><span class=\"p\">([</span><span class=\"s1\">&#39;a&#39;</span><span class=\"p\">])</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;a&#39;</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">sum_strings</span><span class=\"p\">([</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"mi\">3</span><span class=\"p\">])</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;1, 2 and 3&#39;</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nFalse\nFalse\nFalse\n</pre></div></div>\n</div>\n</section>\n<section id=\"id19\">\n<h2>練習<a class=\"headerlink\" href=\"#id19\" title=\"Link to this heading\">¶</a></h2>\n<p>辞書 <code class=\"docutils literal notranslate\"><span class=\"pre\">dic1</span></code> と長さ 10 以下の文字列 <code class=\"docutils literal notranslate\"><span class=\"pre\">str1</span></code> が引数として与えられたとき、 以下のように <code class=\"docutils literal notranslate\"><span class=\"pre\">dic1</span></code> を変更する関数 <code class=\"docutils literal notranslate\"><span class=\"pre\">handle_collision2</span></code> を作成してください。 ただし、<code class=\"docutils literal notranslate\"><span class=\"pre\">dic1</span></code> のキーは、1 以上 10 以下の整数、キーに対応する値は文字列とします。</p>\n<ol class=\"arabic simple\">\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">dic1</span></code> に <code class=\"docutils literal notranslate\"><span class=\"pre\">str1</span></code> の長さ <code class=\"docutils literal notranslate\"><span class=\"pre\">n</span></code> がキーとして登録されていない場合、<code class=\"docutils literal notranslate\"><span class=\"pre\">dic1</span></code> に キー <code class=\"docutils literal notranslate\"><span class=\"pre\">n</span></code>、<code class=\"docutils literal notranslate\"><span class=\"pre\">n</span></code> に対応する値 <code class=\"docutils literal notranslate\"><span class=\"pre\">str1</span></code> を登録します。</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">dic1</span></code> に <code class=\"docutils literal notranslate\"><span class=\"pre\">str1</span></code> の長さ <code class=\"docutils literal notranslate\"><span class=\"pre\">n</span></code> がキーとして登録されている場合、<code class=\"docutils literal notranslate\"><span class=\"pre\">i</span></code> の値を <code class=\"docutils literal notranslate\"><span class=\"pre\">n+1</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">n+2</span></code>, …と1つずつ増やしていき、<code class=\"docutils literal notranslate\"><span class=\"pre\">dic1</span></code> にキーとして登録されていない値 <code class=\"docutils literal notranslate\"><span class=\"pre\">i</span></code> を探します。キーとして登録されていない値 <code class=\"docutils literal notranslate\"><span class=\"pre\">i</span></code> が見つかった場合、その <code class=\"docutils literal notranslate\"><span class=\"pre\">i</span></code> をキー、<code class=\"docutils literal notranslate\"><span class=\"pre\">i</span></code> に対応する値として <code class=\"docutils literal notranslate\"><span class=\"pre\">str1</span></code> を登録してください。 ただし、<code class=\"docutils literal notranslate\"><span class=\"pre\">i</span></code> を 10 まで増やしても登録されていない値が見つからない場合は、<code class=\"docutils literal notranslate\"><span class=\"pre\">i</span></code> を 1 に戻した上で <code class=\"docutils literal notranslate\"><span class=\"pre\">i</span></code> を増やす作業を続行してください。</p></li>\n<li><p>2の手順によって、登録可能な <code class=\"docutils literal notranslate\"><span class=\"pre\">i</span></code> が見つからなかった場合、<code class=\"docutils literal notranslate\"><span class=\"pre\">dic1</span></code> を変更しません。</p></li>\n</ol>\n<p>以下のセルの <code class=\"docutils literal notranslate\"><span class=\"pre\">...</span></code> のところを書き換えて <code class=\"docutils literal notranslate\"><span class=\"pre\">handle_collision2(dic1,</span> <span class=\"pre\">str1)</span></code> を作成してください。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[60]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">def</span> <span class=\"nf\">handle_collision2</span><span class=\"p\">(</span><span class=\"n\">dic1</span><span class=\"p\">,</span> <span class=\"n\">str1</span><span class=\"p\">):</span>\n    <span class=\"o\">...</span>\n</pre></div>\n</div>\n</div>\n<p>上のセルで解答を作成した後、以下のセルを実行し、実行結果が <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> になることを確認してください。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[61]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">dic1_orig</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"mi\">6</span><span class=\"p\">:</span> <span class=\"s1\">&#39;Styles&#39;</span><span class=\"p\">,</span> <span class=\"mi\">4</span><span class=\"p\">:</span> <span class=\"s1\">&#39;Link&#39;</span><span class=\"p\">,</span> <span class=\"mi\">7</span><span class=\"p\">:</span> <span class=\"s1\">&#39;Ackroyd&#39;</span><span class=\"p\">}</span>\n<span class=\"n\">handle_collision2</span><span class=\"p\">(</span><span class=\"n\">dic1_orig</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Big Four&#39;</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">dic1_orig</span> <span class=\"o\">==</span> <span class=\"p\">{</span><span class=\"mi\">6</span><span class=\"p\">:</span> <span class=\"s1\">&#39;Styles&#39;</span><span class=\"p\">,</span> <span class=\"mi\">4</span><span class=\"p\">:</span> <span class=\"s1\">&#39;Link&#39;</span><span class=\"p\">,</span> <span class=\"mi\">7</span><span class=\"p\">:</span> <span class=\"s1\">&#39;Ackroyd&#39;</span><span class=\"p\">,</span> <span class=\"mi\">8</span><span class=\"p\">:</span> <span class=\"s1\">&#39;Big Four&#39;</span><span class=\"p\">})</span>\n<span class=\"n\">dic1_orig</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"mi\">6</span><span class=\"p\">:</span> <span class=\"s1\">&#39;Styles&#39;</span><span class=\"p\">,</span> <span class=\"mi\">4</span><span class=\"p\">:</span> <span class=\"s1\">&#39;Link&#39;</span><span class=\"p\">,</span> <span class=\"mi\">7</span><span class=\"p\">:</span> <span class=\"s1\">&#39;Ackroyd&#39;</span><span class=\"p\">,</span> <span class=\"mi\">8</span><span class=\"p\">:</span> <span class=\"s1\">&#39;Big Four&#39;</span><span class=\"p\">,</span> <span class=\"mi\">10</span><span class=\"p\">:</span> <span class=\"s1\">&#39;Blue Train&#39;</span><span class=\"p\">,</span> <span class=\"mi\">9</span><span class=\"p\">:</span> <span class=\"s1\">&#39;End House&#39;</span><span class=\"p\">}</span>\n<span class=\"n\">handle_collision2</span><span class=\"p\">(</span><span class=\"n\">dic1_orig</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Edgware&#39;</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">dic1_orig</span> <span class=\"o\">==</span> <span class=\"p\">{</span><span class=\"mi\">6</span><span class=\"p\">:</span> <span class=\"s1\">&#39;Styles&#39;</span><span class=\"p\">,</span> <span class=\"mi\">4</span><span class=\"p\">:</span> <span class=\"s1\">&#39;Link&#39;</span><span class=\"p\">,</span> <span class=\"mi\">7</span><span class=\"p\">:</span> <span class=\"s1\">&#39;Ackroyd&#39;</span><span class=\"p\">,</span> <span class=\"mi\">8</span><span class=\"p\">:</span> <span class=\"s1\">&#39;Big Four&#39;</span><span class=\"p\">,</span> <span class=\"mi\">10</span><span class=\"p\">:</span> <span class=\"s1\">&#39;Blue Train&#39;</span><span class=\"p\">,</span> <span class=\"mi\">9</span><span class=\"p\">:</span> <span class=\"s1\">&#39;End House&#39;</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">:</span> <span class=\"s1\">&#39;Edgware&#39;</span><span class=\"p\">})</span>\n<span class=\"n\">dic1_orig</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"mi\">6</span><span class=\"p\">:</span> <span class=\"s1\">&#39;Styles&#39;</span><span class=\"p\">,</span> <span class=\"mi\">4</span><span class=\"p\">:</span> <span class=\"s1\">&#39;Link&#39;</span><span class=\"p\">,</span> <span class=\"mi\">7</span><span class=\"p\">:</span> <span class=\"s1\">&#39;Ackroyd&#39;</span><span class=\"p\">,</span> <span class=\"mi\">8</span><span class=\"p\">:</span> <span class=\"s1\">&#39;Big Four&#39;</span><span class=\"p\">,</span> <span class=\"mi\">10</span><span class=\"p\">:</span> <span class=\"s1\">&#39;Blue Train&#39;</span><span class=\"p\">,</span> <span class=\"mi\">9</span><span class=\"p\">:</span> <span class=\"s1\">&#39;End House&#39;</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">:</span> <span class=\"s1\">&#39;Edgware&#39;</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">:</span> <span class=\"s1\">&#39;Orient&#39;</span><span class=\"p\">,</span> <span class=\"mi\">3</span><span class=\"p\">:</span> <span class=\"s1\">&#39;Three Act&#39;</span><span class=\"p\">,</span> <span class=\"mi\">5</span><span class=\"p\">:</span> <span class=\"s1\">&#39;Clouds&#39;</span><span class=\"p\">}</span>\n<span class=\"n\">handle_collision2</span><span class=\"p\">(</span><span class=\"n\">dic1_orig</span><span class=\"p\">,</span> <span class=\"s1\">&#39;ABC&#39;</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">dic1_orig</span> <span class=\"o\">==</span> <span class=\"p\">{</span><span class=\"mi\">6</span><span class=\"p\">:</span> <span class=\"s1\">&#39;Styles&#39;</span><span class=\"p\">,</span> <span class=\"mi\">4</span><span class=\"p\">:</span> <span class=\"s1\">&#39;Link&#39;</span><span class=\"p\">,</span> <span class=\"mi\">7</span><span class=\"p\">:</span> <span class=\"s1\">&#39;Ackroyd&#39;</span><span class=\"p\">,</span> <span class=\"mi\">8</span><span class=\"p\">:</span> <span class=\"s1\">&#39;Big Four&#39;</span><span class=\"p\">,</span> <span class=\"mi\">10</span><span class=\"p\">:</span> <span class=\"s1\">&#39;Blue Train&#39;</span><span class=\"p\">,</span> <span class=\"mi\">9</span><span class=\"p\">:</span> <span class=\"s1\">&#39;End House&#39;</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">:</span> <span class=\"s1\">&#39;Edgware&#39;</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">:</span> <span class=\"s1\">&#39;Orient&#39;</span><span class=\"p\">,</span> <span class=\"mi\">3</span><span class=\"p\">:</span> <span class=\"s1\">&#39;Three Act&#39;</span><span class=\"p\">,</span> <span class=\"mi\">5</span><span class=\"p\">:</span> <span class=\"s1\">&#39;Clouds&#39;</span><span class=\"p\">})</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nFalse\nFalse\nTrue\n</pre></div></div>\n</div>\n</section>\n<section id=\"id20\">\n<h2>練習<a class=\"headerlink\" href=\"#id20\" title=\"Link to this heading\">¶</a></h2>\n<p>整数を最初の要素、文字列をその次の要素とするリスト（これを子リストと呼びます）を要素とするリスト <code class=\"docutils literal notranslate\"><span class=\"pre\">list1</span></code> が引数として与えられたとき、次のような辞書 <code class=\"docutils literal notranslate\"><span class=\"pre\">dic1</span></code> を返す関数 <code class=\"docutils literal notranslate\"><span class=\"pre\">handle_collision3</span></code> を作成してください。</p>\n<ul class=\"simple\">\n<li><p>各子リスト <code class=\"docutils literal notranslate\"><span class=\"pre\">list2</span></code> に対して、<code class=\"docutils literal notranslate\"><span class=\"pre\">dic1</span></code> のキーは <code class=\"docutils literal notranslate\"><span class=\"pre\">list2</span></code> の最初の要素である整数とし、そのキーに対応する値は次の要素である文字列とします。</p></li>\n<li><p>2つ以上の子リストの最初の要素が同じ整数である場合、<code class=\"docutils literal notranslate\"><span class=\"pre\">list1</span></code> においてより小さいインデックスを持つ子リストの文字列を、その整数のキーに対応する値とします。</p></li>\n</ul>\n<p>以下のセルの <code class=\"docutils literal notranslate\"><span class=\"pre\">...</span></code> のところを書き換えて <code class=\"docutils literal notranslate\"><span class=\"pre\">handle_collision3(list1)</span></code> を作成してください。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[62]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">def</span> <span class=\"nf\">handle_collision3</span><span class=\"p\">(</span><span class=\"n\">list1</span><span class=\"p\">):</span>\n    <span class=\"o\">...</span>\n</pre></div>\n</div>\n</div>\n<p>上のセルで解答を作成した後、以下のセルを実行し、実行結果が True になることを確認してください。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[63]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">handle_collision3</span><span class=\"p\">([[</span><span class=\"mi\">3</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Richard III&#39;</span><span class=\"p\">],</span> <span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Othello&#39;</span><span class=\"p\">],</span> <span class=\"p\">[</span><span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Tempest&#39;</span><span class=\"p\">],</span> <span class=\"p\">[</span><span class=\"mi\">3</span><span class=\"p\">,</span> <span class=\"s1\">&#39;King John&#39;</span><span class=\"p\">],</span> <span class=\"p\">[</span><span class=\"mi\">4</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Midsummer&#39;</span><span class=\"p\">],</span> <span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Lear&#39;</span><span class=\"p\">]])</span> <span class=\"o\">==</span> <span class=\"p\">{</span><span class=\"mi\">1</span><span class=\"p\">:</span> <span class=\"s1\">&#39;Othello&#39;</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">:</span> <span class=\"s1\">&#39;Tempest&#39;</span><span class=\"p\">,</span> <span class=\"mi\">3</span><span class=\"p\">:</span> <span class=\"s1\">&#39;Richard III&#39;</span><span class=\"p\">,</span> <span class=\"mi\">4</span><span class=\"p\">:</span> <span class=\"s1\">&#39;Midsummer&#39;</span><span class=\"p\">})</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nFalse\n</pre></div></div>\n</div>\n</section>\n<section id=\"練習の解答\">\n<h2>練習の解答<a class=\"headerlink\" href=\"#練習の解答\" title=\"Link to this heading\">¶</a></h2>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[64]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">def</span> <span class=\"nf\">reverse_lookup2</span><span class=\"p\">(</span><span class=\"n\">dic1</span><span class=\"p\">):</span>\n    <span class=\"n\">dic2</span> <span class=\"o\">=</span> <span class=\"p\">{}</span>  <span class=\"c1\">#辞書を初期化する</span>\n    <span class=\"k\">for</span> <span class=\"n\">key</span><span class=\"p\">,</span> <span class=\"n\">value</span> <span class=\"ow\">in</span> <span class=\"n\">dic1</span><span class=\"o\">.</span><span class=\"n\">items</span><span class=\"p\">():</span>\n        <span class=\"n\">dic2</span><span class=\"p\">[</span><span class=\"n\">value</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">key</span>\n    <span class=\"k\">return</span> <span class=\"n\">dic2</span>\n<span class=\"c1\">#reverse_lookup2({&#39;apple&#39;:3, &#39;pen&#39;:5, &#39;orange&#39;:7})</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[65]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">def</span> <span class=\"nf\">sum_n</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">,</span><span class=\"n\">y</span><span class=\"p\">):</span>\n    <span class=\"nb\">sum</span> <span class=\"o\">=</span> <span class=\"mi\">0</span>\n    <span class=\"k\">for</span> <span class=\"n\">i</span> <span class=\"ow\">in</span> <span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">,</span> <span class=\"n\">y</span> <span class=\"o\">+</span> <span class=\"mi\">1</span><span class=\"p\">):</span>\n        <span class=\"nb\">sum</span> <span class=\"o\">=</span> <span class=\"nb\">sum</span> <span class=\"o\">+</span> <span class=\"n\">i</span>\n    <span class=\"k\">return</span> <span class=\"nb\">sum</span>\n<span class=\"c1\">#sum_n(1,3)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[66]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">def</span> <span class=\"nf\">construct_list</span><span class=\"p\">(</span><span class=\"n\">int_size</span><span class=\"p\">):</span>\n    <span class=\"n\">ln</span> <span class=\"o\">=</span> <span class=\"n\">int_size</span> <span class=\"o\">*</span> <span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]</span>\n    <span class=\"k\">for</span> <span class=\"n\">i</span> <span class=\"ow\">in</span> <span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"n\">int_size</span><span class=\"p\">):</span>\n        <span class=\"n\">ln</span><span class=\"p\">[</span><span class=\"n\">i</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">i</span>\n    <span class=\"k\">return</span> <span class=\"n\">ln</span>\n<span class=\"c1\">#construct_list(10)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[67]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">def</span> <span class=\"nf\">sum_lists</span><span class=\"p\">(</span><span class=\"n\">list1</span><span class=\"p\">):</span>\n    <span class=\"n\">total</span> <span class=\"o\">=</span> <span class=\"mi\">0</span>\n    <span class=\"k\">for</span> <span class=\"n\">list2</span> <span class=\"ow\">in</span> <span class=\"n\">list1</span><span class=\"p\">:</span>  <span class=\"c1\"># for j in range(len(list1)):とlist2 = list1[j]としてもよい</span>\n        <span class=\"c1\">#print(list2)</span>\n        <span class=\"k\">for</span> <span class=\"n\">i</span> <span class=\"ow\">in</span> <span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">list2</span><span class=\"p\">)):</span>\n            <span class=\"c1\">#print(i, list2[i])</span>\n            <span class=\"n\">total</span> <span class=\"o\">+=</span> <span class=\"n\">list2</span><span class=\"p\">[</span><span class=\"n\">i</span><span class=\"p\">]</span>\n    <span class=\"k\">return</span> <span class=\"n\">total</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[68]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">def</span> <span class=\"nf\">sum_matrix</span><span class=\"p\">(</span><span class=\"n\">list1</span><span class=\"p\">,</span> <span class=\"n\">list2</span><span class=\"p\">):</span>\n    <span class=\"n\">list3</span> <span class=\"o\">=</span> <span class=\"p\">[[</span><span class=\"mi\">0</span><span class=\"p\">,</span><span class=\"mi\">0</span><span class=\"p\">,</span><span class=\"mi\">0</span><span class=\"p\">],[</span><span class=\"mi\">0</span><span class=\"p\">,</span><span class=\"mi\">0</span><span class=\"p\">,</span><span class=\"mi\">0</span><span class=\"p\">],[</span><span class=\"mi\">0</span><span class=\"p\">,</span><span class=\"mi\">0</span><span class=\"p\">,</span><span class=\"mi\">0</span><span class=\"p\">]]</span>  <span class=\"c1\">#結果を格納するリストを初期化する（これがない場合も試してみてください）</span>\n    <span class=\"k\">for</span> <span class=\"n\">i</span> <span class=\"ow\">in</span> <span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"mi\">3</span><span class=\"p\">):</span>\n        <span class=\"k\">for</span> <span class=\"n\">j</span> <span class=\"ow\">in</span> <span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"mi\">3</span><span class=\"p\">):</span>\n            <span class=\"n\">list3</span><span class=\"p\">[</span><span class=\"n\">i</span><span class=\"p\">][</span><span class=\"n\">j</span><span class=\"p\">]</span> <span class=\"o\">+=</span> <span class=\"n\">list1</span><span class=\"p\">[</span><span class=\"n\">i</span><span class=\"p\">][</span><span class=\"n\">j</span><span class=\"p\">]</span> <span class=\"o\">+</span> <span class=\"n\">list2</span><span class=\"p\">[</span><span class=\"n\">i</span><span class=\"p\">][</span><span class=\"n\">j</span><span class=\"p\">]</span>\n            <span class=\"c1\">#print(i, j, list1[i][j],&#39;+&#39;, list2[i][j], &#39;=&#39;, list3[i][j])</span>\n    <span class=\"k\">return</span> <span class=\"n\">list3</span>\n<span class=\"c1\">#sum_matrix([[1,2,3],[4,5,6],[7,8,9]], [[1,4,7],[2,5,8],[3,6,9]])</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[69]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">def</span> <span class=\"nf\">simple_match</span><span class=\"p\">(</span><span class=\"n\">str1</span><span class=\"p\">,</span> <span class=\"n\">str2</span><span class=\"p\">):</span>\n    <span class=\"k\">for</span> <span class=\"n\">i</span> <span class=\"ow\">in</span> <span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">str1</span><span class=\"p\">)</span><span class=\"o\">-</span><span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">str2</span><span class=\"p\">)</span><span class=\"o\">+</span><span class=\"mi\">1</span><span class=\"p\">):</span>\n        <span class=\"n\">j</span> <span class=\"o\">=</span> <span class=\"mi\">0</span>\n        <span class=\"k\">while</span> <span class=\"n\">j</span> <span class=\"o\">&lt;</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">str2</span><span class=\"p\">)</span> <span class=\"ow\">and</span> <span class=\"n\">str1</span><span class=\"p\">[</span><span class=\"n\">i</span><span class=\"o\">+</span><span class=\"n\">j</span><span class=\"p\">]</span> <span class=\"o\">==</span> <span class=\"n\">str2</span><span class=\"p\">[</span><span class=\"n\">j</span><span class=\"p\">]:</span>  <span class=\"c1\">#str1とstr2が一致している限りループ（ただし、jがstr2の長さ以上にならないようにする）#この条件がないと…？</span>\n            <span class=\"n\">j</span> <span class=\"o\">+=</span> <span class=\"mi\">1</span>\n        <span class=\"k\">if</span> <span class=\"n\">j</span> <span class=\"o\">==</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">str2</span><span class=\"p\">):</span>  <span class=\"c1\">#str2の最後まで一致しているとこの条件が成立</span>\n            <span class=\"k\">return</span> <span class=\"n\">i</span>\n    <span class=\"k\">return</span> <span class=\"o\">-</span><span class=\"mi\">1</span>\n<span class=\"c1\">#for文による別解</span>\n<span class=\"c1\">#def simple_match(str1, str2):</span>\n<span class=\"c1\">#    for i in range(len(str1)-len(str2)+1):</span>\n<span class=\"c1\">#        #print(&#39;i=&#39;, i)</span>\n<span class=\"c1\">#        fMatch = True#マッチ判定</span>\n<span class=\"c1\">#        for j in range(len(str2)):</span>\n<span class=\"c1\">#            #print(&#39;j=&#39;, j, &#39;str1[i+j]=&#39;, str1[i+j], &#39; str2[j]=&#39;, str2[j])</span>\n<span class=\"c1\">#            if str1[i+j] != str2[j]:#str2が終了する前に一致しない箇所があるかどうか</span>\n<span class=\"c1\">#                fMatch = False</span>\n<span class=\"c1\">#                break</span>\n<span class=\"c1\">#        if fMatch:</span>\n<span class=\"c1\">#            return i</span>\n<span class=\"c1\">#    return -1</span>\n<span class=\"c1\">#print(simple_match(&#39;location&#39;, &#39;cat&#39;) == 2)</span>\n<span class=\"c1\">#print(simple_match(&#39;soccer&#39;, &#39;cat&#39;) == -1)</span>\n<span class=\"c1\">#print(simple_match(&#39;category&#39;, &#39;cat&#39;) == 0)</span>\n<span class=\"c1\">#print(simple_match(&#39;carpet&#39;, &#39;cat&#39;) == -1)</span>\n</pre></div>\n</div>\n</div>\n</section>\n<section id=\"練習の解説\">\n<h2>練習の解説<a class=\"headerlink\" href=\"#練習の解説\" title=\"Link to this heading\">¶</a></h2>\n<p>下のセルは、繰り返し回数として <code class=\"docutils literal notranslate\"><span class=\"pre\">count</span></code> 変数を利用した解答例です。回数を理解しやすくするため <code class=\"docutils literal notranslate\"><span class=\"pre\">print()</span></code> 関数で <code class=\"docutils literal notranslate\"><span class=\"pre\">count</span></code> 変数も印字しています。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[70]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"kn\">from</span> <span class=\"nn\">time</span> <span class=\"kn\">import</span> <span class=\"n\">sleep</span>\n\n<span class=\"n\">count</span> <span class=\"o\">=</span> <span class=\"mi\">0</span>\n<span class=\"k\">while</span> <span class=\"kc\">True</span><span class=\"p\">:</span>\n    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s1\">&#39;Yeah!&#39;</span><span class=\"p\">,</span> <span class=\"n\">count</span><span class=\"p\">)</span>\n    <span class=\"n\">count</span> <span class=\"o\">+=</span> <span class=\"mi\">1</span>\n    <span class=\"k\">if</span><span class=\"p\">(</span><span class=\"n\">count</span> <span class=\"o\">&gt;=</span> <span class=\"mi\">10</span><span class=\"p\">):</span>\n        <span class=\"k\">break</span>\n    <span class=\"n\">sleep</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nYeah! 0\nYeah! 1\nYeah! 2\nYeah! 3\nYeah! 4\nYeah! 5\nYeah! 6\nYeah! 7\nYeah! 8\nYeah! 9\n</pre></div></div>\n</div>\n</section>\n<section id=\"id23\">\n<h2>練習の解答<a class=\"headerlink\" href=\"#id23\" title=\"Link to this heading\">¶</a></h2>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[71]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">def</span> <span class=\"nf\">collect_engwords</span><span class=\"p\">(</span><span class=\"n\">str_engsentences</span><span class=\"p\">):</span>\n    <span class=\"n\">list_punctuation</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s1\">&#39;.&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;,&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;:&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;;&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;!&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;?&#39;</span><span class=\"p\">]</span>\n    <span class=\"k\">for</span> <span class=\"n\">j</span> <span class=\"ow\">in</span> <span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">list_punctuation</span><span class=\"p\">)):</span>  <span class=\"c1\">#list_punctuationの中の文字列（この場合、句読点）を空文字列に置換する</span>\n        <span class=\"n\">str_engsentences</span> <span class=\"o\">=</span> <span class=\"n\">str_engsentences</span><span class=\"o\">.</span><span class=\"n\">replace</span><span class=\"p\">(</span><span class=\"n\">list_punctuation</span><span class=\"p\">[</span><span class=\"n\">j</span><span class=\"p\">],</span> <span class=\"s1\">&#39;&#39;</span><span class=\"p\">)</span>\n    <span class=\"c1\">#print(str_engsentences)</span>\n    <span class=\"n\">list_str1</span> <span class=\"o\">=</span> <span class=\"n\">str_engsentences</span><span class=\"o\">.</span><span class=\"n\">split</span><span class=\"p\">(</span><span class=\"s1\">&#39; &#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">list_str2</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n    <span class=\"k\">for</span> <span class=\"n\">j</span> <span class=\"ow\">in</span> <span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">list_str1</span><span class=\"p\">)):</span>\n        <span class=\"k\">if</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">list_str1</span><span class=\"p\">[</span><span class=\"n\">j</span><span class=\"p\">])</span> <span class=\"o\">&gt;=</span> <span class=\"mi\">3</span><span class=\"p\">:</span>\n            <span class=\"n\">list_str2</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">list_str1</span><span class=\"p\">[</span><span class=\"n\">j</span><span class=\"p\">])</span>\n    <span class=\"k\">return</span> <span class=\"n\">list_str2</span>\n<span class=\"c1\">#collect_engwords(&#39;Unfortunately no, it requires something with a little more kick, plutonium.&#39;)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[72]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">def</span> <span class=\"nf\">swap_lists</span><span class=\"p\">(</span><span class=\"n\">ln1</span><span class=\"p\">,</span> <span class=\"n\">ln2</span><span class=\"p\">):</span>\n    <span class=\"k\">for</span> <span class=\"n\">j</span> <span class=\"ow\">in</span> <span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">ln1</span><span class=\"p\">)):</span>\n        <span class=\"k\">if</span> <span class=\"n\">j</span> <span class=\"o\">%</span> <span class=\"mi\">2</span> <span class=\"o\">==</span> <span class=\"mi\">1</span><span class=\"p\">:</span>\n            <span class=\"n\">ln1</span><span class=\"p\">[</span><span class=\"n\">j</span><span class=\"p\">],</span> <span class=\"n\">ln2</span><span class=\"p\">[</span><span class=\"n\">j</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">ln2</span><span class=\"p\">[</span><span class=\"n\">j</span><span class=\"p\">],</span> <span class=\"n\">ln1</span><span class=\"p\">[</span><span class=\"n\">j</span><span class=\"p\">]</span>\n    <span class=\"k\">return</span> <span class=\"n\">ln1</span><span class=\"p\">,</span> <span class=\"n\">ln2</span>\n<span class=\"c1\">#swap_lists([1, 2, 3, 4, 5], [&#39;a&#39;, &#39;b&#39;, &#39;c&#39;, &#39;d&#39;, &#39;e&#39;])</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[73]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">def</span> <span class=\"nf\">count_capitalletters</span><span class=\"p\">(</span><span class=\"n\">str1</span><span class=\"p\">):</span>\n    <span class=\"n\">int_count</span> <span class=\"o\">=</span> <span class=\"mi\">0</span>\n    <span class=\"k\">for</span> <span class=\"n\">i</span> <span class=\"ow\">in</span> <span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">str1</span><span class=\"p\">)):</span>\n        <span class=\"n\">str2</span> <span class=\"o\">=</span> <span class=\"n\">str1</span><span class=\"p\">[</span><span class=\"n\">i</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">upper</span><span class=\"p\">()</span>\n        <span class=\"n\">str3</span> <span class=\"o\">=</span> <span class=\"n\">str1</span><span class=\"p\">[</span><span class=\"n\">i</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">lower</span><span class=\"p\">()</span>\n        <span class=\"k\">if</span> <span class=\"n\">str1</span><span class=\"p\">[</span><span class=\"n\">i</span><span class=\"p\">]</span> <span class=\"o\">==</span> <span class=\"n\">str2</span> <span class=\"ow\">and</span> <span class=\"n\">str2</span> <span class=\"o\">!=</span> <span class=\"n\">str3</span><span class=\"p\">:</span><span class=\"c1\">#前者の条件で大文字であることを、後者の条件で句読点などでないことを判定する</span>\n            <span class=\"n\">int_count</span> <span class=\"o\">+=</span> <span class=\"mi\">1</span>\n    <span class=\"k\">return</span> <span class=\"n\">int_count</span>\n<span class=\"c1\">#count_capitalletters(&#39;Que Será, Será&#39;)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[74]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">def</span> <span class=\"nf\">identify_codons</span><span class=\"p\">(</span><span class=\"n\">str_augc</span><span class=\"p\">):</span>\n    <span class=\"n\">str_codons</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n    <span class=\"n\">int_codonnum</span> <span class=\"o\">=</span> <span class=\"nb\">int</span><span class=\"p\">(</span><span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">str_augc</span><span class=\"p\">)</span><span class=\"o\">/</span><span class=\"mi\">3</span><span class=\"p\">)</span>\n    <span class=\"k\">for</span> <span class=\"n\">i</span> <span class=\"ow\">in</span> <span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"n\">int_codonnum</span><span class=\"p\">):</span>\n        <span class=\"n\">str_codons</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">str_augc</span><span class=\"p\">[</span><span class=\"n\">i</span><span class=\"o\">*</span><span class=\"mi\">3</span><span class=\"p\">:</span> <span class=\"n\">i</span><span class=\"o\">*</span><span class=\"mi\">3</span><span class=\"o\">+</span><span class=\"mi\">3</span><span class=\"p\">])</span>\n    <span class=\"k\">return</span> <span class=\"n\">str_codons</span>\n<span class=\"c1\">#identify_codons(&#39;CCCCCGGCACCT&#39;)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[75]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">def</span> <span class=\"nf\">add_commas</span><span class=\"p\">(</span><span class=\"n\">int1</span><span class=\"p\">):</span>\n    <span class=\"n\">list1</span> <span class=\"o\">=</span> <span class=\"nb\">list</span><span class=\"p\">(</span><span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">int1</span><span class=\"p\">))</span>  <span class=\"c1\">#文字列に変換し、更にそれを1文字ずつリストに格納する</span>\n    <span class=\"n\">str1</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;&#39;</span>\n    <span class=\"n\">ccnt</span> <span class=\"o\">=</span> <span class=\"mi\">1</span>  <span class=\"c1\">#3の倍数の位を調べるのに使う</span>\n    <span class=\"k\">for</span> <span class=\"n\">i</span> <span class=\"ow\">in</span> <span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">list1</span><span class=\"p\">)</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">):</span>  <span class=\"c1\">#1の位の値から、大きい方の位の値に向かって処理を行う</span>\n        <span class=\"n\">str1</span> <span class=\"o\">=</span> <span class=\"n\">list1</span><span class=\"p\">[</span><span class=\"n\">i</span><span class=\"p\">]</span> <span class=\"o\">+</span> <span class=\"n\">str1</span>\n        <span class=\"k\">if</span> <span class=\"n\">ccnt</span> <span class=\"o\">%</span> <span class=\"mi\">3</span> <span class=\"o\">==</span> <span class=\"mi\">0</span> <span class=\"ow\">and</span> <span class=\"n\">i</span> <span class=\"o\">!=</span> <span class=\"mi\">0</span><span class=\"p\">:</span>  <span class=\"c1\">#3の倍数の位の前であり、一番大きい位でないならば</span>\n            <span class=\"n\">str1</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;,&#39;</span> <span class=\"o\">+</span> <span class=\"n\">str1</span>  <span class=\"c1\">#コンマをうつ</span>\n        <span class=\"n\">ccnt</span> <span class=\"o\">+=</span> <span class=\"mi\">1</span>\n    <span class=\"k\">return</span> <span class=\"n\">str1</span>\n<span class=\"c1\">#print(add_commas(14980) == &#39;14,980&#39;)</span>\n<span class=\"c1\">#print(add_commas(2980) == &#39;2,980&#39;)</span>\n<span class=\"c1\">#print(add_commas(298) == &#39;298&#39;)</span>\n<span class=\"c1\">#print(add_commas(1000000) == &#39;1,000,000&#39;)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[76]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">def</span> <span class=\"nf\">sum_strings</span><span class=\"p\">(</span><span class=\"n\">list_str</span><span class=\"p\">):</span>\n    <span class=\"n\">str1</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;&#39;</span>\n    <span class=\"k\">for</span> <span class=\"n\">i</span> <span class=\"ow\">in</span> <span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">list_str</span><span class=\"p\">)):</span>\n        <span class=\"k\">if</span> <span class=\"n\">i</span> <span class=\"o\">&lt;</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">list_str</span><span class=\"p\">)</span> <span class=\"o\">-</span> <span class=\"mi\">2</span><span class=\"p\">:</span><span class=\"c1\">#後ろから3番目までの要素</span>\n            <span class=\"n\">str1</span> <span class=\"o\">=</span> <span class=\"n\">str1</span> <span class=\"o\">+</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">list_str</span><span class=\"p\">[</span><span class=\"n\">i</span><span class=\"p\">])</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;, &#39;</span>\n        <span class=\"k\">elif</span> <span class=\"n\">i</span> <span class=\"o\">==</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">list_str</span><span class=\"p\">)</span> <span class=\"o\">-</span> <span class=\"mi\">2</span><span class=\"p\">:</span><span class=\"c1\">#後ろから2番目の要素</span>\n            <span class=\"n\">str1</span> <span class=\"o\">+=</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">list_str</span><span class=\"p\">[</span><span class=\"n\">i</span><span class=\"p\">])</span> <span class=\"o\">+</span> <span class=\"s1\">&#39; and &#39;</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span><span class=\"c1\">#一番後ろの要素</span>\n            <span class=\"n\">str1</span> <span class=\"o\">+=</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">list_str</span><span class=\"p\">[</span><span class=\"n\">i</span><span class=\"p\">])</span>\n    <span class=\"k\">return</span> <span class=\"n\">str1</span>\n<span class=\"c1\">#sum_strings([&#39;a&#39;, &#39;b&#39;, &#39;c&#39;, &#39;d&#39;])</span>\n<span class=\"c1\">#sum_strings([&#39;a&#39;])</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[77]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">def</span> <span class=\"nf\">handle_collision2</span><span class=\"p\">(</span><span class=\"n\">dic1</span><span class=\"p\">,</span> <span class=\"n\">str1</span><span class=\"p\">):</span>\n    <span class=\"n\">n</span> <span class=\"o\">=</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">str1</span><span class=\"p\">)</span>\n    <span class=\"k\">for</span> <span class=\"n\">i</span> <span class=\"ow\">in</span> <span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"n\">n</span><span class=\"p\">,</span> <span class=\"mi\">11</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span>  <span class=\"n\">dic1</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">i</span><span class=\"p\">)</span> <span class=\"ow\">is</span> <span class=\"kc\">None</span><span class=\"p\">:</span><span class=\"c1\"># == None でもよい</span>\n            <span class=\"n\">dic1</span><span class=\"p\">[</span><span class=\"n\">i</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">str1</span>\n            <span class=\"k\">return</span>\n    <span class=\"k\">for</span> <span class=\"n\">i</span> <span class=\"ow\">in</span> <span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"n\">n</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span>  <span class=\"n\">dic1</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">i</span><span class=\"p\">)</span> <span class=\"ow\">is</span> <span class=\"kc\">None</span><span class=\"p\">:</span><span class=\"c1\"># == None でもよい</span>\n            <span class=\"n\">dic1</span><span class=\"p\">[</span><span class=\"n\">i</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">str1</span>\n            <span class=\"k\">return</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[78]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">def</span> <span class=\"nf\">handle_collision3</span><span class=\"p\">(</span><span class=\"n\">list1</span><span class=\"p\">):</span>\n    <span class=\"n\">dic1</span> <span class=\"o\">=</span> <span class=\"p\">{}</span> <span class=\"c1\"># 空の辞書を作成する</span>\n    <span class=\"k\">for</span> <span class=\"n\">i</span> <span class=\"ow\">in</span> <span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">list1</span><span class=\"p\">)):</span>\n        <span class=\"n\">list2</span> <span class=\"o\">=</span> <span class=\"n\">list1</span><span class=\"p\">[</span><span class=\"n\">i</span><span class=\"p\">]</span>\n        <span class=\"k\">if</span> <span class=\"n\">dic1</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">list2</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">])</span> <span class=\"ow\">is</span> <span class=\"kc\">None</span><span class=\"p\">:</span><span class=\"c1\"># == None でもよい</span>\n            <span class=\"n\">dic1</span><span class=\"p\">[</span><span class=\"n\">list2</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]]</span> <span class=\"o\">=</span> <span class=\"n\">list2</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">]</span>\n    <span class=\"k\">return</span> <span class=\"n\">dic1</span>\n<span class=\"c1\">#handle_collision3([[3, &#39;Richard III&#39;], [1, &#39;Othello&#39;], [2, &#39;Tempest&#39;], [3, &#39;King John&#39;], [4, &#39;Midsummer&#39;], [1, &#39;Lear&#39;]])</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[ ]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span>\n</pre></div>\n</div>\n</div>\n</section>\n</section>\n\n\n          </div>\n          \n        </div>\n      </div>\n      <div class=\"sphinxsidebar\" role=\"navigation\" aria-label=\"Main\">\n        <div class=\"sphinxsidebarwrapper\">\n<h1 class=\"logo\"><a href=\"../index.html\">Pythonプログラミング入門</a></h1>\n\n\n\n\n\n\n\n\n<p>\n  <a style=\"font-family: sans-serif; font-size: smaller; background: linear-gradient(to top, #353535 0%, #141414 100%); -webkit-font-smoothing: antialiased; font-weight: normal; text-shadow: rgb(0 0 0 / 40%) 0 -1px 0; padding: 2px 6px; color: #fff; text-decoration: none; border-radius: 4px; border: 1px solid #0d0d0d; box-shadow: inset 0 1px 1px 0 #8f8f8f;\" href=\"https://github.com/utokyo-ipp/utokyo-ipp.github.io\">View on GitHub</a>\n</p><p>\n  <a style=\"font-family: sans-serif; font-size: smaller; background: linear-gradient(to top, #ff1e00 0%, #de1e00 100%); -webkit-font-smoothing: antialiased; font-weight: normal; text-shadow: rgb(0 0 0 / 40%) 0 -1px 0; padding: 2px 6px; color: #fff; text-decoration: none; border-radius: 4px; border: 1px solid #0d0d0d; box-shadow: inset 0 1px 1px 0 #ff8e70;\" href=\"https://utokyo-ipp.github.io/IPP_textbook.pdf\">View PDF</a>\n</p><p>\n  <a style=\"border-bottom: none;\" href=\"https://colab.research.google.com/github/utokyo-ipp/utokyo-ipp.github.io/blob/master/colab/3/3-2.ipynb\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Google Colaboratory\"></a>\n</p><h3>Navigation</h3>\n<ul class=\"current\">\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../1/1-0.html\">1-0. Colaboratory (Colab) の使い方</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../1/1-1.html\">1-1. 数値演算</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../1/1-2.html\">1-2. 変数と関数の基礎</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../1/1-3.html\">1-3. 論理・比較演算と条件分岐の基礎</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../1/1-4.html\">1-4. テストとデバッグ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../2/2-1.html\">2-1. 文字列 (string)</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../2/2-2.html\">2-2. リスト (list)</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../2/2-3.html\">2-3. 条件分岐</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"3-1.html\">3-1. 辞書 (dictionary)</a></li>\n<li class=\"toctree-l1 current\"><a class=\"current reference internal\" href=\"#\">3-2. 繰り返し</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#for文による繰り返し\">for文による繰り返し</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#for文による繰り返しと辞書\">for文による繰り返しと辞書</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#練習\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#range\"><code class=\"docutils literal notranslate\"><span class=\"pre\">range</span></code></a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#id4\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#id5\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#range-とリスト\"><code class=\"docutils literal notranslate\"><span class=\"pre\">range</span></code> とリスト</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#for文の入れ子\">for文の<strong>入れ子</strong></a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#id8\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#id9\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#for文の計算量\">for文の<strong>計算量</strong></a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#enumerate\"><code class=\"docutils literal notranslate\"><span class=\"pre\">enumerate</span></code></a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#in\"><code class=\"docutils literal notranslate\"><span class=\"pre\">in</span></code></a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#while文による繰り返し\">while文による繰り返し</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#制御構造とreturn文\">制御構造とreturn文</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#break文\"><strong>break文</strong></a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#id11\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#continue文\"><strong>continue文</strong></a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#▲for文とwhile文における-else\">▲for文とwhile文における <code class=\"docutils literal notranslate\"><span class=\"pre\">else</span></code></a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#pass文\"><strong>pass文</strong></a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#id12\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#id13\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#id14\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#id15\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#id16\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#id17\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#id18\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#id19\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#id20\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#練習の解答\">練習の解答</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#練習の解説\">練習の解説</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#id23\">練習の解答</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"3-3.html\">3-3. 関数</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../4/4-1.html\">4-1. ファイル入出力の基本</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../4/4-2.html\">4-2. イテラブルとイテレータ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../4/4-3.html\">4-3. ディレクトリと木構造</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../5/5-1.html\">5-1. モジュールの使い方</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../5/5-2.html\">5-2. モジュールの作り方</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../5/5-3.html\">5-3. NumPyライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../6/6-1.html\">6-1. 内包表記</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../6/6-2.html\">6-2. 高階関数</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../6/6-3.html\">6-3. クラス</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../7/7-1.html\">7-1. pandasライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../7/7-2.html\">7-2. scikit-learnライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/1-jupyter-notebook.html\">▲Jupyter Notebook の使い方</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/2-set.html\">▲セット (set)</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/3-recursion.html\">▲再帰</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/3-visualization.html\">▲簡単なデータの可視化</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/4-csv.html\">▲CSVファイルの入出力</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/5-bokeh.html\">▲Bokehライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/5-command.html\">▲Pythonスクリプトとコマンドライン実行</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/5-matplotlib.html\">▲Matplotlibライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/5-re.html\">▲正規表現</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../index_of_terms.html\">索引</a></li>\n</ul>\n\n<div class=\"relations\">\n<h3>Related Topics</h3>\n<ul>\n  <li><a href=\"../index.html\">Documentation overview</a><ul>\n      <li>Previous: <a href=\"3-1.html\" title=\"previous chapter\">3-1. 辞書 (dictionary)</a></li>\n      <li>Next: <a href=\"3-3.html\" title=\"next chapter\">3-3. 関数</a></li>\n  </ul></li>\n</ul>\n</div>\n<search id=\"searchbox\" style=\"display: none\" role=\"search\">\n  <h3 id=\"searchlabel\">Quick search</h3>\n    <div class=\"searchformwrapper\">\n    <form class=\"search\" action=\"../search.html\" method=\"get\">\n      <input type=\"text\" name=\"q\" aria-labelledby=\"searchlabel\" autocomplete=\"off\" autocorrect=\"off\" autocapitalize=\"off\" spellcheck=\"false\"/>\n      <input type=\"submit\" value=\"Go\" />\n    </form>\n    </div>\n</search>\n<script>document.getElementById('searchbox').style.display = \"block\"</script>\n\n\n\n\n\n\n\n\n        </div>\n      </div>\n      <div class=\"clearer\"></div>\n    </div>\n    <div class=\"footer\">\n      &#169;2020–2024, 東京大学 数理・情報教育研究センター (CC BY-NC-ND 4.0).\n      \n      |\n      Powered by <a href=\"https://www.sphinx-doc.org/\">Sphinx 8.0.2</a>\n      &amp; <a href=\"https://alabaster.readthedocs.io\">Alabaster 1.0.0</a>\n      \n    </div>\n\n    \n\n    \n    <script>\n\n      var _gaq = _gaq || [];\n      _gaq.push(['_setAccount', 'G-8M0RXGPPSR']);\n      _gaq.push(['_setDomainName', 'none']);\n      _gaq.push(['_setAllowLinker', true]);\n      _gaq.push(['_trackPageview']);\n\n      (function() {\n        var ga = document.createElement('script'); ga.async = true;\n        ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'https://www') + '.google-analytics.com/ga.js';\n        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);\n      })();\n\n    </script>\n    \n  </body>\n</html>"
  },
  {
    "path": "docs/3/3-3.html",
    "content": "<!DOCTYPE html>\n\n<html lang=\"jp\" data-content_root=\"../\">\n  <head>\n    <meta charset=\"utf-8\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" /><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n\n    <!-- Google tag (gtag.js) -->\n    <script async src=\"https://www.googletagmanager.com/gtag/js?id=G-8M0RXGPPSR\"></script>\n    <script>\n        window.dataLayer = window.dataLayer || [];\n        function gtag(){dataLayer.push(arguments);}\n        gtag('js', new Date());\n        gtag('config', 'G-8M0RXGPPSR');\n    </script>\n    \n    <title>3-3. 関数 &#8212; Pythonプログラミング入門  documentation</title>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/pygments.css?v=d1102ebc\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/basic.css?v=c058f7c8\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/alabaster.css?v=27fed22d\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/nbsphinx-code-cells.css\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/custom.css?v=1a1aa8dd\" />\n    <script src=\"../_static/documentation_options.js?v=3ff7d7a7\"></script>\n    <script src=\"../_static/doctools.js?v=9a2dae69\"></script>\n    <script src=\"../_static/sphinx_highlight.js?v=dc90522c\"></script>\n    <script crossorigin=\"anonymous\" integrity=\"sha256-Ae2Vz/4ePdIu6ZyI/5ZGsYnb+m0JlOmKPjt6XZ9JJkA=\" src=\"https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.4/require.min.js\"></script>\n    <script>window.MathJax = {\"tex\": {\"inlineMath\": [[\"$\", \"$\"], [\"\\\\(\", \"\\\\)\"]], \"processEscapes\": true}, \"options\": {\"ignoreHtmlClass\": \"tex2jax_ignore|mathjax_ignore|document\", \"processHtmlClass\": \"tex2jax_process|mathjax_process|math|output_area\"}}</script>\n    <script defer=\"defer\" src=\"https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js\"></script>\n    <link rel=\"index\" title=\"Index\" href=\"../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../search.html\" />\n    <link rel=\"next\" title=\"4-1. ファイル入出力の基本\" href=\"../4/4-1.html\" />\n    <link rel=\"prev\" title=\"3-2. 繰り返し\" href=\"3-2.html\" />\n   \n  <link rel=\"stylesheet\" href=\"../_static/custom.css\" type=\"text/css\" />\n  \n\n  \n  \n\n  </head><body>\n  \n\n    <div class=\"document\">\n      <div class=\"documentwrapper\">\n        <div class=\"bodywrapper\">\n          \n\n          <div class=\"body\" role=\"main\">\n            \n  <section id=\"3-3.-関数\">\n<h1>3-3. 関数<a class=\"headerlink\" href=\"#3-3.-関数\" title=\"Link to this heading\">¶</a></h1>\n<p>関数について改めて説明します。</p>\n<p>参考:</p>\n<ul class=\"simple\">\n<li><p><a class=\"reference external\" href=\"https://docs.python.org/ja/3/tutorial/controlflow.html#defining-functions\">https://docs.python.org/ja/3/tutorial/controlflow.html#defining-functions</a></p></li>\n</ul>\n<section id=\"関数の定義\">\n<h2>関数の定義<a class=\"headerlink\" href=\"#関数の定義\" title=\"Link to this heading\">¶</a></h2>\n<p><strong>関数</strong>は処理（手続きの流れ）をまとめた再利用可能なコードです。関数には以下の特徴があります。</p>\n<ul class=\"simple\">\n<li><p>名前を持つ。</p></li>\n<li><p>手続きの流れを含む。</p></li>\n<li><p>返値（明示的あるいは非明示的に）を返す。</p></li>\n</ul>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">len()</span></code> や <code class=\"docutils literal notranslate\"><span class=\"pre\">sum()</span></code> などの<a class=\"reference external\" href=\"https://docs.python.jp/3/library/functions.html\">組み込み関数</a>は関数の例です。</p>\n<p>まず、関数の定義をしてみましょう。関数を定義するには <code class=\"docutils literal notranslate\"><span class=\"pre\">def</span></code> を用います。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[1]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"c1\">#&#39;Hello&#39;を表示する関数greeting</span>\n<span class=\"k\">def</span> <span class=\"nf\">greeting</span><span class=\"p\">():</span>\n    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s1\">&#39;Hello&#39;</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<p>関数を定義したら、それを呼び出すことができます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[2]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"c1\">#関数greetingを呼び出し</span>\n<span class=\"n\">greeting</span><span class=\"p\">()</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nHello\n</pre></div></div>\n</div>\n<p><strong>関数定義</strong>の一般形は以下の通りです。</p>\n<div class=\"highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>def 関数名(引数):\n    関数本体\n</pre></div>\n</div>\n<p>1行名はヘッダと呼ばれ、<strong>関数名</strong>はその関数を呼ぶのに使う名前、<strong>引数</strong>はその関数へ渡す変数の一覧です。 変数がない場合もあります。</p>\n<p><strong>関数本体</strong>はインデントした上で、処理や手続きの流れを記述します。</p>\n</section>\n<section id=\"引数\">\n<h2>引数<a class=\"headerlink\" href=\"#引数\" title=\"Link to this heading\">¶</a></h2>\n<p>関数を定義する際に、ヘッダの括弧の中に関数へ渡す変数の一覧を記述します。 これらの変数は関数の<strong>ローカル変数</strong>となります。 ローカル変数とはプログラムの一部（ここでは関数内）でのみ利用可能な変数です。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[3]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"c1\">#引数greeting_localに渡された値を表示する関数greeting</span>\n<span class=\"k\">def</span> <span class=\"nf\">greeting</span><span class=\"p\">(</span><span class=\"n\">greeting_local</span><span class=\"p\">):</span>\n    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">greeting_local</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<p>関数を呼び出す際に引数に値を渡すことで、関数は受け取った値を処理することができます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[4]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"c1\">#関数greetingに文字列&#39;Hello&#39;を渡して呼び出し</span>\n<span class=\"n\">greeting</span><span class=\"p\">(</span><span class=\"s1\">&#39;Hello&#39;</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nHello\n</pre></div></div>\n</div>\n<p>このようにして引数に渡される値のことを、<strong>実引数</strong>（<strong>argument</strong>）と呼ぶことがあります。 実引数に対して、ここまで説明してきた引数（ローカル変数である引数）は、<strong>仮引数</strong>（<strong>parameter</strong>）と呼ばれます。 参考：<a class=\"reference external\" href=\"https://docs.python.org/ja/3/faq/programming.html#what-is-the-difference-between-arguments-and-parameters\">公式FAQ：実引数と仮引数の違いは何ですか？</a></p>\n<p>実引数のことを引数と呼ぶこともありますので、注意してください。</p>\n</section>\n<section id=\"返値\">\n<h2>返値<a class=\"headerlink\" href=\"#返値\" title=\"Link to this heading\">¶</a></h2>\n<p>関数は受け取った引数を元に処理を行い、その結果の<strong>返値</strong>（1-2で説明済み）を返すことができます。</p>\n<p>返値は、<code class=\"docutils literal notranslate\"><span class=\"pre\">return</span></code> で定義します。関数の返値がない場合は、<code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code> が返されます。 <code class=\"docutils literal notranslate\"><span class=\"pre\">return</span></code> が実行されると、関数の処理はそこで終了するため、次に文があっても実行はされません。 また、ループなどの繰り返し処理の途中でも <code class=\"docutils literal notranslate\"><span class=\"pre\">return</span></code> が実行されると処理は終了します。 関数の処理が最後まで実行され、返値がない場合は最後に <code class=\"docutils literal notranslate\"><span class=\"pre\">return</span></code> を実行したことと同じになります。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">return</span></code> の後に式がない場合は、<code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code> が返されます。 （<code class=\"docutils literal notranslate\"><span class=\"pre\">return</span></code> が実行されずに関数の最後まで来たときも同様です。） <code class=\"docutils literal notranslate\"><span class=\"pre\">return</span></code> を式なしで実行することで、関数の処理を途中で抜けることができます。 また、このような関数は、与えられた配列を破壊的に変更するなど、 呼び出した側に何らかの変化を及ぼす際にも用いられます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[5]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"c1\">#引数greeting_localに渡された値を返す関数greeting</span>\n<span class=\"k\">def</span> <span class=\"nf\">greeting</span><span class=\"p\">(</span><span class=\"n\">greeting_local</span><span class=\"p\">):</span>\n    <span class=\"k\">return</span> <span class=\"n\">greeting_local</span>\n\n<span class=\"c1\">#関数greetingに文字列&#39;Hello&#39;を渡して呼び出し</span>\n<span class=\"n\">greeting</span><span class=\"p\">(</span><span class=\"s1\">&#39;Hello&#39;</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[5]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n&#39;Hello&#39;\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[6]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"c1\">#入力の平均を計算して返す関数average</span>\n<span class=\"k\">def</span> <span class=\"nf\">average</span><span class=\"p\">(</span><span class=\"n\">nums</span><span class=\"p\">):</span>\n    <span class=\"c1\">#組み込み関数のsum()とlen()を利用</span>\n    <span class=\"k\">return</span> <span class=\"nb\">sum</span><span class=\"p\">(</span><span class=\"n\">nums</span><span class=\"p\">)</span><span class=\"o\">/</span><span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">nums</span><span class=\"p\">)</span>\n\n<span class=\"c1\">#関数averageに数字のリストを渡して呼び出し</span>\n<span class=\"n\">average</span><span class=\"p\">([</span><span class=\"mi\">1</span><span class=\"p\">,</span><span class=\"mi\">3</span><span class=\"p\">,</span><span class=\"mi\">5</span><span class=\"p\">,</span><span class=\"mi\">7</span><span class=\"p\">,</span><span class=\"mi\">9</span><span class=\"p\">])</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[6]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n5.0\n</pre></div></div>\n</div>\n<p>関数の返値を変数に代入することもできます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[7]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"c1\">#関数greetingの返値を変数greetに代入</span>\n<span class=\"n\">greet</span> <span class=\"o\">=</span> <span class=\"n\">greeting</span><span class=\"p\">(</span><span class=\"s1\">&#39;Hello&#39;</span><span class=\"p\">)</span>\n<span class=\"n\">greet</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[7]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n&#39;Hello&#39;\n</pre></div></div>\n</div>\n</section>\n<section id=\"複数の引数\">\n<h2>複数の引数<a class=\"headerlink\" href=\"#複数の引数\" title=\"Link to this heading\">¶</a></h2>\n<p>関数は任意の数の引数を受け取ることができます。 複数の引数を受け取る場合は、引数をコンマで区切ります。 これらの引数名は重複しないようにしましょう。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[8]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"c1\">#3つの引数それぞれに渡された値を表示する関数greeting</span>\n<span class=\"k\">def</span> <span class=\"nf\">greeting</span><span class=\"p\">(</span><span class=\"n\">en</span><span class=\"p\">,</span> <span class=\"n\">fr</span><span class=\"p\">,</span> <span class=\"n\">de</span><span class=\"p\">):</span>\n    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">en</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;, &#39;</span> <span class=\"o\">+</span> <span class=\"n\">fr</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;, &#39;</span> <span class=\"o\">+</span> <span class=\"n\">de</span><span class=\"p\">)</span>\n\n<span class=\"c1\">#関数greetingに3つの引数を渡して呼び出し</span>\n<span class=\"n\">greeting</span><span class=\"p\">(</span><span class=\"s1\">&#39;Hello&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Bonjour&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Guten Tag&#39;</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nHello, Bonjour, Guten Tag\n</pre></div></div>\n</div>\n<p>関数は異なる型であっても引数として受け取ることができます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[9]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"c1\">#文字列と数値を引数として受け取る関数greeting</span>\n<span class=\"k\">def</span> <span class=\"nf\">greeting</span><span class=\"p\">(</span><span class=\"n\">en</span><span class=\"p\">,</span> <span class=\"n\">number</span><span class=\"p\">,</span> <span class=\"n\">name</span><span class=\"p\">):</span>\n    <span class=\"c1\">#文字列に数を掛け算すると、文字列を数の回だけ繰り返すことを指定します</span>\n    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">en</span><span class=\"o\">*</span><span class=\"n\">number</span><span class=\"o\">+</span><span class=\"s1\">&#39;,&#39;</span><span class=\"o\">+</span><span class=\"n\">name</span><span class=\"p\">)</span>\n\n<span class=\"c1\">#関数greetingに文字列と数値を引数として渡して呼び出し</span>\n<span class=\"n\">greeting</span><span class=\"p\">(</span><span class=\"s1\">&#39;Hello&#39;</span><span class=\"p\">,</span><span class=\"mi\">3</span><span class=\"p\">,</span> <span class=\"s1\">&#39;World&#39;</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nHelloHelloHello,World\n</pre></div></div>\n</div>\n</section>\n<section id=\"変数とスコープ\">\n<h2>変数とスコープ<a class=\"headerlink\" href=\"#変数とスコープ\" title=\"Link to this heading\">¶</a></h2>\n<p>関数の引数や関数内で定義される変数はローカル変数のため、それらの変数は関数の外からは参照できません。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[10]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"c1\">#引数greeting_localに渡された値を表示する関数greeting</span>\n<span class=\"k\">def</span> <span class=\"nf\">greeting</span><span class=\"p\">(</span><span class=\"n\">greeting_local</span><span class=\"p\">):</span>\n    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">greeting_local</span><span class=\"p\">)</span>\n\n<span class=\"n\">greeting</span><span class=\"p\">(</span><span class=\"s1\">&#39;Hello&#39;</span><span class=\"p\">)</span>\n\n<span class=\"c1\">#ローカル変数（関数greetingの引数）greeting_localを参照</span>\n<span class=\"n\">greeting_local</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nHello\n</pre></div></div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n<span class=\"ansi-red-fg\">---------------------------------------------------------------------------</span>\n<span class=\"ansi-red-fg\">NameError</span>                                 Traceback (most recent call last)\nCell <span class=\"ansi-green-fg\">In[10], line 8</span>\n<span class=\"ansi-green-intense-fg ansi-bold\">      5</span> greeting(<span style=\"color: rgb(175,0,0)\">&#39;</span><span style=\"color: rgb(175,0,0)\">Hello</span><span style=\"color: rgb(175,0,0)\">&#39;</span>)\n<span class=\"ansi-green-intense-fg ansi-bold\">      7</span> <span style=\"color: rgb(95,135,135)\">#ローカル変数（関数greetingの引数）greeting_localを参照</span>\n<span class=\"ansi-green-fg\">----&gt; 8</span> <span class=\"ansi-yellow-bg\">greeting_local</span>\n\n<span class=\"ansi-red-fg\">NameError</span>: name &#39;greeting_local&#39; is not defined\n</pre></div></div>\n</div>\n<p>一方、変数が<strong>グローバル変数</strong>であれば、それらの変数は関数の外からも中からも参照できます。 グローバル変数とはプログラム全体、どこからでも利用可能な変数です。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[11]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"c1\">#グローバル変数greeting_globalの定義</span>\n<span class=\"n\">greeting_global</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;Hello&#39;</span>\n\n<span class=\"c1\">#グローバル変数greeting_globalの値を表示する関数greeting</span>\n<span class=\"k\">def</span> <span class=\"nf\">greeting</span><span class=\"p\">():</span>\n    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">greeting_global</span><span class=\"p\">)</span>\n\n<span class=\"n\">greeting</span><span class=\"p\">()</span>\n\n<span class=\"c1\">#グローバル変数greeting_globalを参照</span>\n<span class=\"n\">greeting_global</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nHello\n</pre></div></div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[11]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n&#39;Hello&#39;\n</pre></div></div>\n</div>\n<p>グローバル変数と同じ名前の変数を関数内で定義すると、 それは通常はグローバル変数とは異なる、関数内のみで利用可能な<strong>ローカル変数</strong>の定義として扱われます。 グローバル変数と同じ名前の引数を用いる場合も同様です。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[12]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"c1\">#グローバル変数greeting_globalと同じ名前の変数に値を代入する関数greeting</span>\n<span class=\"k\">def</span> <span class=\"nf\">greeting</span><span class=\"p\">():</span>\n    <span class=\"n\">greeting_global</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;Bonjour&#39;</span>\n    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">greeting_global</span><span class=\"p\">)</span>\n\n<span class=\"n\">greeting</span><span class=\"p\">()</span>\n\n<span class=\"c1\">#変数greeting_globalを参照</span>\n<span class=\"n\">greeting_global</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nBonjour\n</pre></div></div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[12]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n&#39;Hello&#39;\n</pre></div></div>\n</div>\n<p>しかし、グローバル変数と同名のローカル変数を定義することは、一般に注意が必要です。 何故なら、ローカル変数としての定義を含む関数内では、同名のグローバル変数を参照できないからです。 たとえば、次のコードは、<code class=\"docutils literal notranslate\"><span class=\"pre\">Hello</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">Bonjour</span></code> が順に印字することを期待するかもしれませんが、</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[13]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">def</span> <span class=\"nf\">greeting</span><span class=\"p\">():</span>\n    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">greeting_global</span><span class=\"p\">)</span> <span class=\"c1\"># 最初の参照</span>\n    <span class=\"n\">greeting_global</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;Bonjour&#39;</span> <span class=\"c1\"># ローカル変数の定義</span>\n    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">greeting_global</span><span class=\"p\">)</span>\n\n<span class=\"n\">greeting</span><span class=\"p\">()</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n<span class=\"ansi-red-fg\">---------------------------------------------------------------------------</span>\n<span class=\"ansi-red-fg\">UnboundLocalError</span>                         Traceback (most recent call last)\nCell <span class=\"ansi-green-fg\">In[13], line 6</span>\n<span class=\"ansi-green-intense-fg ansi-bold\">      3</span>     greeting_global <span style=\"color: rgb(98,98,98)\">=</span> <span style=\"color: rgb(175,0,0)\">&#39;</span><span style=\"color: rgb(175,0,0)\">Bonjour</span><span style=\"color: rgb(175,0,0)\">&#39;</span> <span style=\"color: rgb(95,135,135)\"># ローカル変数の定義</span>\n<span class=\"ansi-green-intense-fg ansi-bold\">      4</span>     <span style=\"color: rgb(0,135,0)\">print</span>(greeting_global)\n<span class=\"ansi-green-fg\">----&gt; 6</span> <span class=\"ansi-yellow-bg\">greeting</span><span class=\"ansi-yellow-bg\">(</span><span class=\"ansi-yellow-bg\">)</span>\n\nCell <span class=\"ansi-green-fg\">In[13], line 2</span>, in <span class=\"ansi-cyan-fg\">greeting</span><span class=\"ansi-blue-fg\">()</span>\n<span class=\"ansi-green-intense-fg ansi-bold\">      1</span> <span class=\"ansi-bold\" style=\"color: rgb(0,135,0)\">def</span> <span style=\"color: rgb(0,0,255)\">greeting</span>():\n<span class=\"ansi-green-fg\">----&gt; 2</span>     <span style=\"color: rgb(0,135,0)\">print</span>(<span class=\"ansi-yellow-bg\">greeting_global</span>) <span style=\"color: rgb(95,135,135)\"># 最初の参照</span>\n<span class=\"ansi-green-intense-fg ansi-bold\">      3</span>     greeting_global <span style=\"color: rgb(98,98,98)\">=</span> <span style=\"color: rgb(175,0,0)\">&#39;</span><span style=\"color: rgb(175,0,0)\">Bonjour</span><span style=\"color: rgb(175,0,0)\">&#39;</span> <span style=\"color: rgb(95,135,135)\"># ローカル変数の定義</span>\n<span class=\"ansi-green-intense-fg ansi-bold\">      4</span>     <span style=\"color: rgb(0,135,0)\">print</span>(greeting_global)\n\n<span class=\"ansi-red-fg\">UnboundLocalError</span>: cannot access local variable &#39;greeting_global&#39; where it is not associated with a value\n</pre></div></div>\n</div>\n<p>最初の <code class=\"docutils literal notranslate\"><span class=\"pre\">greeting_global</span></code> の参照でエラーになります。 これは、関数内に <code class=\"docutils literal notranslate\"><span class=\"pre\">greeting_global</span></code> の定義があると、 その関数内どの場所でも <code class=\"docutils literal notranslate\"><span class=\"pre\">greeting_global</span></code> がローカル変数として参照されるためです。 最初の参照時には、ローカル変数の <code class=\"docutils literal notranslate\"><span class=\"pre\">greeting_global</span></code> が未定義なので、エラーが生じます。</p>\n<p>このように、グローバル変数と同じ名前のローカル変数を使おうとするのは間違いの元です。 グローバル変数と名前が衝突しないように、ローカル変数を定義しましょう。</p>\n<section id=\"▲-global-宣言\">\n<h3>▲ global 宣言<a class=\"headerlink\" href=\"#▲-global-宣言\" title=\"Link to this heading\">¶</a></h3>\n<p>関数内ではグローバル変数が更新されないのが基本です。 しかし、どうしても関数内でグローバル変数を更新したいときには、 <code class=\"docutils literal notranslate\"><span class=\"pre\">global</span></code> 宣言を使って更新したいグローバル変数を指定します。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[14]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"c1\">#グローバル変数greeting_globalに値を代入する関数greeting</span>\n<span class=\"k\">def</span> <span class=\"nf\">greeting</span><span class=\"p\">():</span>\n    <span class=\"k\">global</span> <span class=\"n\">greeting_global</span>\n    <span class=\"n\">greeting_global</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;Bonjour&#39;</span>\n    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">greeting_global</span><span class=\"p\">)</span>\n\n<span class=\"n\">greeting</span><span class=\"p\">()</span>\n\n<span class=\"c1\">##変数greeting_globalを参照</span>\n<span class=\"n\">greeting_global</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nBonjour\n</pre></div></div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[14]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n&#39;Bonjour&#39;\n</pre></div></div>\n</div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">global</span></code> 宣言された変数名は、関数内で常にグローバル変数として参照されます。 これを濫用すると間違いの元になるので、原則として利用しないようにしましょう。</p>\n</section>\n</section>\n<section id=\"▲キーワード引数\">\n<h2>▲キーワード引数<a class=\"headerlink\" href=\"#▲キーワード引数\" title=\"Link to this heading\">¶</a></h2>\n<p>上記の一般的な引数（位置引数とも呼ばれます）では、 事前に定義した引数の順番に従って、関数は引数を受け取る必要があります。</p>\n<p>キーワード付き引数（<strong>キーワード引数</strong>）を使うと、関数は引数の変数名とその値の組みを受け取ることができます。 その際、引数は順不同で関数に渡すことができます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[15]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"c1\">#文字列と数値を引数として受け取る関数greeting</span>\n<span class=\"k\">def</span> <span class=\"nf\">greeting</span><span class=\"p\">(</span><span class=\"n\">en</span><span class=\"p\">,</span> <span class=\"n\">number</span><span class=\"p\">,</span> <span class=\"n\">name</span><span class=\"p\">):</span>\n    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">en</span><span class=\"o\">*</span><span class=\"n\">number</span><span class=\"o\">+</span><span class=\"s1\">&#39;,&#39;</span><span class=\"o\">+</span><span class=\"n\">name</span><span class=\"p\">)</span>\n\n<span class=\"c1\">#関数greetingに引数の変数名とその値の組みを渡して呼び出し</span>\n<span class=\"n\">greeting</span><span class=\"p\">(</span><span class=\"n\">en</span><span class=\"o\">=</span><span class=\"s1\">&#39;Hello&#39;</span><span class=\"p\">,</span> <span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s1\">&#39;Japan&#39;</span><span class=\"p\">,</span> <span class=\"n\">number</span><span class=\"o\">=</span><span class=\"mi\">2</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nHelloHello,Japan\n</pre></div></div>\n</div>\n<p>位置引数とキーワード引数を合わせて使う場合は、最初に位置引数を指定する必要があります。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[16]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"c1\">#位置引数とキーワード引数を組み合わせた関数greetingの呼び出し</span>\n<span class=\"n\">greeting</span><span class=\"p\">(</span><span class=\"s1\">&#39;Hello&#39;</span><span class=\"p\">,</span> <span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s1\">&#39;Japan&#39;</span><span class=\"p\">,</span> <span class=\"n\">number</span><span class=\"o\">=</span><span class=\"mi\">2</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nHelloHello,Japan\n</pre></div></div>\n</div>\n</section>\n<section id=\"▲引数の初期値\">\n<h2>▲引数の初期値<a class=\"headerlink\" href=\"#▲引数の初期値\" title=\"Link to this heading\">¶</a></h2>\n<p>関数を呼び出す際に、引数が渡されない場合に、<strong>初期値</strong>を引数として渡すことができます。</p>\n<p>初期値のある引数に値を渡したら、関数はその引数の初期値の代わりに渡された値を受け取ります。</p>\n<p>初期値を持つ引数は、位置引数の後に指定する必要があります。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[17]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"c1\">#引数の初期値（引数の変数enに対する&#39;Hello&#39;）を持つ関数greeting</span>\n<span class=\"k\">def</span> <span class=\"nf\">greeting</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"p\">,</span> <span class=\"n\">en</span><span class=\"o\">=</span><span class=\"s1\">&#39;Hello&#39;</span><span class=\"p\">):</span>\n    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">en</span><span class=\"o\">+</span><span class=\"s1\">&#39;, &#39;</span><span class=\"o\">+</span><span class=\"n\">name</span><span class=\"p\">)</span>\n\n<span class=\"c1\">#引数の初期値を持つ関数greetingの呼び出し</span>\n<span class=\"n\">greeting</span><span class=\"p\">(</span><span class=\"s1\">&#39;World&#39;</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nHello, World\n</pre></div></div>\n</div>\n</section>\n<section id=\"▲可変長引数\">\n<h2>▲可変長引数<a class=\"headerlink\" href=\"#▲可変長引数\" title=\"Link to this heading\">¶</a></h2>\n<p>仮引数の前に <code class=\"docutils literal notranslate\"><span class=\"pre\">*</span></code> を付けて関数を定義すると、複数の引数をタプルとして受け取ることができます。 呼び出す側は、引数の個数を変えることができます。 一般に、個数が可変の引数は<strong>可変長引数</strong>と呼ばれます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[18]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"c1\">#可変長の引数を受け取り、それらを表示する関数greeting</span>\n<span class=\"k\">def</span> <span class=\"nf\">greeting</span><span class=\"p\">(</span><span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">):</span>\n    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">args</span><span class=\"p\">)</span>\n\n<span class=\"c1\">#可変長の引数を受け取る関数greetingに複数の引数を渡して呼び出し</span>\n<span class=\"n\">greeting</span><span class=\"p\">(</span><span class=\"s1\">&#39;Hello&#39;</span><span class=\"p\">,</span><span class=\"s1\">&#39;Bonjour&#39;</span><span class=\"p\">,</span><span class=\"s1\">&#39;Guten Tag&#39;</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n(&#39;Hello&#39;, &#39;Bonjour&#39;, &#39;Guten Tag&#39;)\n</pre></div></div>\n</div>\n<p>リストやタプルの要素を可変長引数として関数に渡す場合は、<code class=\"docutils literal notranslate\"><span class=\"pre\">*</span></code> をリストやタプルの前につけて渡します。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[19]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"c1\">#リスト型オブジェクトgreeting_listを関数greetingに渡して呼び出し</span>\n<span class=\"n\">greeting_list</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s1\">&#39;Hello&#39;</span><span class=\"p\">,</span><span class=\"s1\">&#39;Bonjour&#39;</span><span class=\"p\">,</span><span class=\"s1\">&#39;Guten Tag&#39;</span><span class=\"p\">]</span>\n<span class=\"n\">greeting</span><span class=\"p\">(</span><span class=\"o\">*</span><span class=\"n\">greeting_list</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n(&#39;Hello&#39;, &#39;Bonjour&#39;, &#39;Guten Tag&#39;)\n</pre></div></div>\n</div>\n</section>\n<section id=\"▲辞書型の可変長引数\">\n<h2>▲辞書型の可変長引数<a class=\"headerlink\" href=\"#▲辞書型の可変長引数\" title=\"Link to this heading\">¶</a></h2>\n<p>仮引数の前に <code class=\"docutils literal notranslate\"><span class=\"pre\">**</span></code> を付けて関数を定義すると、複数のキーワード引数を辞書として受け取ることができます。辞書として受け取られる引数は、<strong>辞書型の可変長引数</strong>と呼ばれます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[20]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"c1\">#可変長のキーワード引数を受け取り、それらを表示する関数greeting</span>\n<span class=\"k\">def</span> <span class=\"nf\">greeting</span><span class=\"p\">(</span><span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">kwargs</span><span class=\"p\">)</span>\n\n<span class=\"c1\">#可変長のキーワード引数を受け取る関数greetingに複数の引数を渡して呼び出し</span>\n<span class=\"n\">greeting</span><span class=\"p\">(</span><span class=\"n\">en</span><span class=\"o\">=</span><span class=\"s1\">&#39;Hello&#39;</span><span class=\"p\">,</span> <span class=\"n\">fr</span><span class=\"o\">=</span><span class=\"s1\">&#39;Bonjour&#39;</span><span class=\"p\">,</span> <span class=\"n\">de</span><span class=\"o\">=</span><span class=\"s1\">&#39;Guten Tag&#39;</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n{&#39;en&#39;: &#39;Hello&#39;, &#39;fr&#39;: &#39;Bonjour&#39;, &#39;de&#39;: &#39;Guten Tag&#39;}\n</pre></div></div>\n</div>\n<p>辞書の各キーと値を複数のキーワード引数として関数に渡す場合は、 <code class=\"docutils literal notranslate\"><span class=\"pre\">**</span></code> をその辞書の前につけて渡します。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[21]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"c1\">#辞書型オブジェクトgreeting_dictを関数greetingに渡して呼び出し</span>\n<span class=\"n\">greeting_dict</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;en&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;Hello&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;fr&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;Bonjour&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;de&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;Guten Tag&#39;</span><span class=\"p\">}</span>\n<span class=\"n\">greeting</span><span class=\"p\">(</span><span class=\"o\">**</span><span class=\"n\">greeting_dict</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n{&#39;en&#39;: &#39;Hello&#39;, &#39;fr&#39;: &#39;Bonjour&#39;, &#39;de&#39;: &#39;Guten Tag&#39;}\n</pre></div></div>\n</div>\n</section>\n<section id=\"▲引数の順番\">\n<h2>▲引数の順番<a class=\"headerlink\" href=\"#▲引数の順番\" title=\"Link to this heading\">¶</a></h2>\n<p>位置引数、初期値を持つ引数、可変長引数、辞書型の可変長引数は、同時に指定することができますが、 その際、これらの順番で指定する必要があります。</p>\n<div class=\"highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>def 関数名(位置引数, 初期値を持つ引数, 可変長引数, 辞書型の可変長引数)\n</pre></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[22]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"c1\">#位置引数、初期値を持つ引数、可変長引数、辞書型の可変長引数</span>\n<span class=\"c1\">#それぞれを引数として受け取り、それらを表示する関数greeting</span>\n<span class=\"k\">def</span> <span class=\"nf\">greeting</span><span class=\"p\">(</span><span class=\"n\">greet</span><span class=\"p\">,</span> <span class=\"n\">en</span><span class=\"o\">=</span><span class=\"s1\">&#39;Hello&#39;</span><span class=\"p\">,</span> <span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">greet</span><span class=\"p\">)</span>\n    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">en</span><span class=\"p\">)</span>\n    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">args</span><span class=\"p\">)</span>\n    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">kwargs</span><span class=\"p\">)</span>\n\n<span class=\"c1\">#可変長引数へ渡すリスト</span>\n<span class=\"n\">greeting_list</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s1\">&#39;Bonjour&#39;</span><span class=\"p\">]</span>\n\n<span class=\"c1\">#辞書型の可変長引数へ渡す辞書</span>\n<span class=\"n\">greeting_dict</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;de&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;Guten Tag&#39;</span><span class=\"p\">}</span>\n\n<span class=\"c1\">#関数greetingに引数を渡して呼び出し</span>\n<span class=\"n\">greeting</span><span class=\"p\">(</span><span class=\"s1\">&#39;Hi&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Hello&#39;</span><span class=\"p\">,</span> <span class=\"o\">*</span><span class=\"n\">greeting_list</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">greeting_dict</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nHi\nHello\n(&#39;Bonjour&#39;,)\n{&#39;de&#39;: &#39;Guten Tag&#39;}\n</pre></div></div>\n</div>\n</section>\n<section id=\"▲変数としての関数\">\n<h2>▲変数としての関数<a class=\"headerlink\" href=\"#▲変数としての関数\" title=\"Link to this heading\">¶</a></h2>\n<p>関数は変数でもあります。既存の変数と同じ名前の関数を定義すると、 元の変数はその新たな関数を参照するものとして変更されます。 一方、既存の関数と同じ名前の変数を定義すると、元の関数名の変数はその新たな変数を参照するものとして変更されます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[23]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"c1\">#グローバル変数greeting_globalの定義と参照</span>\n<span class=\"n\">greeting_global</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;Hello&#39;</span>\n<span class=\"nb\">type</span><span class=\"p\">(</span><span class=\"n\">greeting_global</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[23]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nstr\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[24]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"c1\">#グローバル変数greeting_globalと同名の関数の定義</span>\n<span class=\"c1\">#変数greeting_globalは関数を参照する</span>\n<span class=\"k\">def</span> <span class=\"nf\">greeting_global</span><span class=\"p\">():</span>\n    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s1\">&#39;This is the greeting_global function&#39;</span><span class=\"p\">)</span>\n\n<span class=\"nb\">type</span><span class=\"p\">(</span><span class=\"n\">greeting_global</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[24]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nfunction\n</pre></div></div>\n</div>\n</section>\n</section>\n\n\n          </div>\n          \n        </div>\n      </div>\n      <div class=\"sphinxsidebar\" role=\"navigation\" aria-label=\"Main\">\n        <div class=\"sphinxsidebarwrapper\">\n<h1 class=\"logo\"><a href=\"../index.html\">Pythonプログラミング入門</a></h1>\n\n\n\n\n\n\n\n\n<p>\n  <a style=\"font-family: sans-serif; font-size: smaller; background: linear-gradient(to top, #353535 0%, #141414 100%); -webkit-font-smoothing: antialiased; font-weight: normal; text-shadow: rgb(0 0 0 / 40%) 0 -1px 0; padding: 2px 6px; color: #fff; text-decoration: none; border-radius: 4px; border: 1px solid #0d0d0d; box-shadow: inset 0 1px 1px 0 #8f8f8f;\" href=\"https://github.com/utokyo-ipp/utokyo-ipp.github.io\">View on GitHub</a>\n</p><p>\n  <a style=\"font-family: sans-serif; font-size: smaller; background: linear-gradient(to top, #ff1e00 0%, #de1e00 100%); -webkit-font-smoothing: antialiased; font-weight: normal; text-shadow: rgb(0 0 0 / 40%) 0 -1px 0; padding: 2px 6px; color: #fff; text-decoration: none; border-radius: 4px; border: 1px solid #0d0d0d; box-shadow: inset 0 1px 1px 0 #ff8e70;\" href=\"https://utokyo-ipp.github.io/IPP_textbook.pdf\">View PDF</a>\n</p><p>\n  <a style=\"border-bottom: none;\" href=\"https://colab.research.google.com/github/utokyo-ipp/utokyo-ipp.github.io/blob/master/colab/3/3-3.ipynb\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Google Colaboratory\"></a>\n</p><h3>Navigation</h3>\n<ul class=\"current\">\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../1/1-0.html\">1-0. Colaboratory (Colab) の使い方</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../1/1-1.html\">1-1. 数値演算</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../1/1-2.html\">1-2. 変数と関数の基礎</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../1/1-3.html\">1-3. 論理・比較演算と条件分岐の基礎</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../1/1-4.html\">1-4. テストとデバッグ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../2/2-1.html\">2-1. 文字列 (string)</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../2/2-2.html\">2-2. リスト (list)</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../2/2-3.html\">2-3. 条件分岐</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"3-1.html\">3-1. 辞書 (dictionary)</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"3-2.html\">3-2. 繰り返し</a></li>\n<li class=\"toctree-l1 current\"><a class=\"current reference internal\" href=\"#\">3-3. 関数</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#関数の定義\">関数の定義</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#引数\">引数</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#返値\">返値</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#複数の引数\">複数の引数</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#変数とスコープ\">変数とスコープ</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#▲キーワード引数\">▲キーワード引数</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#▲引数の初期値\">▲引数の初期値</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#▲可変長引数\">▲可変長引数</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#▲辞書型の可変長引数\">▲辞書型の可変長引数</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#▲引数の順番\">▲引数の順番</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#▲変数としての関数\">▲変数としての関数</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../4/4-1.html\">4-1. ファイル入出力の基本</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../4/4-2.html\">4-2. イテラブルとイテレータ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../4/4-3.html\">4-3. ディレクトリと木構造</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../5/5-1.html\">5-1. モジュールの使い方</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../5/5-2.html\">5-2. モジュールの作り方</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../5/5-3.html\">5-3. NumPyライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../6/6-1.html\">6-1. 内包表記</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../6/6-2.html\">6-2. 高階関数</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../6/6-3.html\">6-3. クラス</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../7/7-1.html\">7-1. pandasライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../7/7-2.html\">7-2. scikit-learnライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/1-jupyter-notebook.html\">▲Jupyter Notebook の使い方</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/2-set.html\">▲セット (set)</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/3-recursion.html\">▲再帰</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/3-visualization.html\">▲簡単なデータの可視化</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/4-csv.html\">▲CSVファイルの入出力</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/5-bokeh.html\">▲Bokehライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/5-command.html\">▲Pythonスクリプトとコマンドライン実行</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/5-matplotlib.html\">▲Matplotlibライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/5-re.html\">▲正規表現</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../index_of_terms.html\">索引</a></li>\n</ul>\n\n<div class=\"relations\">\n<h3>Related Topics</h3>\n<ul>\n  <li><a href=\"../index.html\">Documentation overview</a><ul>\n      <li>Previous: <a href=\"3-2.html\" title=\"previous chapter\">3-2. 繰り返し</a></li>\n      <li>Next: <a href=\"../4/4-1.html\" title=\"next chapter\">4-1. ファイル入出力の基本</a></li>\n  </ul></li>\n</ul>\n</div>\n<search id=\"searchbox\" style=\"display: none\" role=\"search\">\n  <h3 id=\"searchlabel\">Quick search</h3>\n    <div class=\"searchformwrapper\">\n    <form class=\"search\" action=\"../search.html\" method=\"get\">\n      <input type=\"text\" name=\"q\" aria-labelledby=\"searchlabel\" autocomplete=\"off\" autocorrect=\"off\" autocapitalize=\"off\" spellcheck=\"false\"/>\n      <input type=\"submit\" value=\"Go\" />\n    </form>\n    </div>\n</search>\n<script>document.getElementById('searchbox').style.display = \"block\"</script>\n\n\n\n\n\n\n\n\n        </div>\n      </div>\n      <div class=\"clearer\"></div>\n    </div>\n    <div class=\"footer\">\n      &#169;2020–2024, 東京大学 数理・情報教育研究センター (CC BY-NC-ND 4.0).\n      \n      |\n      Powered by <a href=\"https://www.sphinx-doc.org/\">Sphinx 8.0.2</a>\n      &amp; <a href=\"https://alabaster.readthedocs.io\">Alabaster 1.0.0</a>\n      \n    </div>\n\n    \n\n    \n    <script>\n\n      var _gaq = _gaq || [];\n      _gaq.push(['_setAccount', 'G-8M0RXGPPSR']);\n      _gaq.push(['_setDomainName', 'none']);\n      _gaq.push(['_setAllowLinker', true]);\n      _gaq.push(['_trackPageview']);\n\n      (function() {\n        var ga = document.createElement('script'); ga.async = true;\n        ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'https://www') + '.google-analytics.com/ga.js';\n        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);\n      })();\n\n    </script>\n    \n  </body>\n</html>"
  },
  {
    "path": "docs/4/4-1.html",
    "content": "<!DOCTYPE html>\n\n<html lang=\"jp\" data-content_root=\"../\">\n  <head>\n    <meta charset=\"utf-8\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" /><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n\n    <!-- Google tag (gtag.js) -->\n    <script async src=\"https://www.googletagmanager.com/gtag/js?id=G-8M0RXGPPSR\"></script>\n    <script>\n        window.dataLayer = window.dataLayer || [];\n        function gtag(){dataLayer.push(arguments);}\n        gtag('js', new Date());\n        gtag('config', 'G-8M0RXGPPSR');\n    </script>\n    \n    <title>4-1. ファイル入出力の基本 &#8212; Pythonプログラミング入門  documentation</title>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/pygments.css?v=d1102ebc\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/basic.css?v=c058f7c8\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/alabaster.css?v=27fed22d\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/nbsphinx-code-cells.css\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/custom.css?v=1a1aa8dd\" />\n    <script src=\"../_static/documentation_options.js?v=3ff7d7a7\"></script>\n    <script src=\"../_static/doctools.js?v=9a2dae69\"></script>\n    <script src=\"../_static/sphinx_highlight.js?v=dc90522c\"></script>\n    <script crossorigin=\"anonymous\" integrity=\"sha256-Ae2Vz/4ePdIu6ZyI/5ZGsYnb+m0JlOmKPjt6XZ9JJkA=\" src=\"https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.4/require.min.js\"></script>\n    <script>window.MathJax = {\"tex\": {\"inlineMath\": [[\"$\", \"$\"], [\"\\\\(\", \"\\\\)\"]], \"processEscapes\": true}, \"options\": {\"ignoreHtmlClass\": \"tex2jax_ignore|mathjax_ignore|document\", \"processHtmlClass\": \"tex2jax_process|mathjax_process|math|output_area\"}}</script>\n    <script defer=\"defer\" src=\"https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js\"></script>\n    <link rel=\"index\" title=\"Index\" href=\"../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../search.html\" />\n    <link rel=\"next\" title=\"4-2. イテラブルとイテレータ\" href=\"4-2.html\" />\n    <link rel=\"prev\" title=\"3-3. 関数\" href=\"../3/3-3.html\" />\n   \n  <link rel=\"stylesheet\" href=\"../_static/custom.css\" type=\"text/css\" />\n  \n\n  \n  \n\n  </head><body>\n  \n\n    <div class=\"document\">\n      <div class=\"documentwrapper\">\n        <div class=\"bodywrapper\">\n          \n\n          <div class=\"body\" role=\"main\">\n            \n  <section id=\"4-1.-ファイル入出力の基本\">\n<h1>4-1. ファイル入出力の基本<a class=\"headerlink\" href=\"#4-1.-ファイル入出力の基本\" title=\"Link to this heading\">¶</a></h1>\n<p>ファイル入出力の基本について説明します。</p>\n<p>参考</p>\n<ul class=\"simple\">\n<li><p><a class=\"reference external\" href=\"https://docs.python.org/ja/3/tutorial/inputoutput.html#reading-and-writing-files\">https://docs.python.org/ja/3/tutorial/inputoutput.html#reading-and-writing-files</a></p></li>\n</ul>\n<section id=\"ファイルのオープン\">\n<h2>ファイルのオープン<a class=\"headerlink\" href=\"#ファイルのオープン\" title=\"Link to this heading\">¶</a></h2>\n<p><strong>ファイル</strong>から文字列を読み込んだり、ファイルに書き込んだりするには、 まず、<code class=\"docutils literal notranslate\"><span class=\"pre\">open()</span></code> という関数によってファイルを<strong>オープン</strong>する（開く）必要があります。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[1]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">f</span> <span class=\"o\">=</span> <span class=\"nb\">open</span><span class=\"p\">(</span><span class=\"s1\">&#39;sample.txt&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;r&#39;</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<p>変数 <code class=\"docutils literal notranslate\"><span class=\"pre\">f</span></code> には、ファイルを読み書きするためのデータが入ります。 これを<strong>ファイルオブジェクト</strong>と呼びます。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">'sample.txt'</span></code> はファイル名で、そのファイルの絶対パス名か、このノートブックからの相対パス名を指定します。</p>\n<p>ここでは、<code class=\"docutils literal notranslate\"><span class=\"pre\">sample.txt</span></code> という名前のファイルがこのノートブックと同じディレクトリにあることを想定しています。</p>\n<p>たとえば、<code class=\"docutils literal notranslate\"><span class=\"pre\">novel.txt</span></code> というファイルが、ノートブックの1段上のディレクトリ（このディレクトリが入っているディレクトリ）にあるならば、<code class=\"docutils literal notranslate\"><span class=\"pre\">'../novel.txt'</span></code> と指定します。 ノートブックの1段上のディレクトリに置かれている <code class=\"docutils literal notranslate\"><span class=\"pre\">data</span></code> というディレクトリにあるならば、<code class=\"docutils literal notranslate\"><span class=\"pre\">'../data/novel.txt'</span></code> となります （4-3にもう少し詳しい解説があります）。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">'r'</span></code> はファイルをどのモードで開くかを指しており、<code class=\"docutils literal notranslate\"><span class=\"pre\">'r'</span></code>は<strong>読み込みモード</strong>を意味します。 このモードで開いたファイルに書き込みすることはできません。</p>\n<p>よく使われるモードは、次の3種類です。</p>\n<p>引数 | モード</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">'r'</span></code> | 読み込み <code class=\"docutils literal notranslate\"><span class=\"pre\">'w'</span></code> | 書き込み <code class=\"docutils literal notranslate\"><span class=\"pre\">'a'</span></code> | 追記</p>\n<p>モードの引数がなかった場合は、<code class=\"docutils literal notranslate\"><span class=\"pre\">'r'</span></code> であると解釈されます。 書き込みについては後でも説明します。</p>\n<p>モードの詳細は<a class=\"reference external\" href=\"https://docs.python.org/ja/3/library/functions.html#open\">公式ドキュメント</a>を参照。</p>\n</section>\n<section id=\"ファイルのクローズ\">\n<h2>ファイルのクローズ<a class=\"headerlink\" href=\"#ファイルのクローズ\" title=\"Link to this heading\">¶</a></h2>\n<p>ファイルオブジェクトを使い終わったら、原則として、<code class=\"docutils literal notranslate\"><span class=\"pre\">close()</span></code> メソッドを呼び出して、<strong>クローズ</strong>する（閉じる）必要があります。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[2]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">close</span><span class=\"p\">()</span>\n</pre></div>\n</div>\n</div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">close()</span></code> を呼び出さずに放置すると、そのファイルがまだ使用中だと認識されてしまいます。 これは、同じファイルを利用しようとする他のプログラムの働きを阻害します。（個室のトイレをイメージしてください。）</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">close()</span></code> の呼び出しは重要ですが、忘れがちなものでもあります。 後述するwith文を使うのが安全です。</p>\n</section>\n<section id=\"行の読み込み\">\n<h2>行の読み込み<a class=\"headerlink\" href=\"#行の読み込み\" title=\"Link to this heading\">¶</a></h2>\n<p>ファイルオブジェクトには、<code class=\"docutils literal notranslate\"><span class=\"pre\">readline()</span></code> というメソッドを適用することができます。 ファイルから新たに1行を読んで文字列として返します。 この「1行」というのは、正確には、ファイルの先頭もしくは改行文字の次の文字から、ファイルの終わりもしくは改行文字までの文字列です。 1行は必ずしも改行文字で終わらないという点に注意して下さい。</p>\n<p>ファイルの終わりに来たとき、<code class=\"docutils literal notranslate\"><span class=\"pre\">readline()</span></code> は <code class=\"docutils literal notranslate\"><span class=\"pre\">''</span></code> という空文字列を返します。</p>\n<p>以下のようにして <code class=\"docutils literal notranslate\"><span class=\"pre\">readline()</span></code> を使ってファイルを行単位で読んでみましょう。</p>\n<p>ファイルを読み終わると空文字列が返ることを確認してください。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[3]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">f</span> <span class=\"o\">=</span> <span class=\"nb\">open</span><span class=\"p\">(</span><span class=\"s1\">&#39;sample.txt&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;r&#39;</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[4]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">readline</span><span class=\"p\">()</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[4]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n&#39;Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\\n&#39;\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[5]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">readline</span><span class=\"p\">()</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[5]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n&#39;Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\\n&#39;\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[6]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">readline</span><span class=\"p\">()</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[6]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n&#39;Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\\n&#39;\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[7]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">readline</span><span class=\"p\">()</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[7]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n&#39;&#39;\n</pre></div></div>\n</div>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[8]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">close</span><span class=\"p\">()</span>\n</pre></div>\n</div>\n</div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">readline()</span></code> メソッドの呼び出しは、ファイルオブジェクトを消費します。 改めて読み出したいときには、再度オープンして新しいオブジェクトを使ってください。</p>\n</section>\n<section id=\"練習\">\n<h2>練習<a class=\"headerlink\" href=\"#練習\" title=\"Link to this heading\">¶</a></h2>\n<p>文字列 <code class=\"docutils literal notranslate\"><span class=\"pre\">name</span></code> をファイル名とするファイルの最後の行を文字列として返す関数 <code class=\"docutils literal notranslate\"><span class=\"pre\">last_line(name)</span></code> を定義してください。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[9]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">def</span> <span class=\"nf\">last_line</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"p\">):</span>\n    <span class=\"o\">...</span>\n</pre></div>\n</div>\n</div>\n<p>上のセルで解答を作成した後、以下のセルを実行し、実行結果が <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> になることを確認してください。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[10]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">last_line</span><span class=\"p\">(</span><span class=\"s1\">&#39;sample.txt&#39;</span><span class=\"p\">)</span><span class=\"o\">==</span><span class=\"s2\">&quot;Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</span><span class=\"se\">\\n</span><span class=\"s2\">&quot;</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nFalse\n</pre></div></div>\n</div>\n</section>\n<section id=\"ファイル全体の読み込み\">\n<h2>ファイル全体の読み込み<a class=\"headerlink\" href=\"#ファイル全体の読み込み\" title=\"Link to this heading\">¶</a></h2>\n<p>ファイル全体を一括で読み込んで、1つの文字列を取得したいときには、<code class=\"docutils literal notranslate\"><span class=\"pre\">read()</span></code> メソッドを利用します。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[11]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">f</span> <span class=\"o\">=</span> <span class=\"nb\">open</span><span class=\"p\">(</span><span class=\"s1\">&#39;sample.txt&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;r&#39;</span><span class=\"p\">)</span>\n<span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">read</span><span class=\"p\">()</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[11]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n&#39;Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\\nDuis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\\nExcepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\\n&#39;\n</pre></div></div>\n</div>\n<p>一度 <code class=\"docutils literal notranslate\"><span class=\"pre\">read()</span></code> を呼ぶと、ファイルの終端に達するので、それ以降は空文字列を返します。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[12]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">read</span><span class=\"p\">()</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[12]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n&#39;&#39;\n</pre></div></div>\n</div>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[13]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">close</span><span class=\"p\">()</span>\n</pre></div>\n</div>\n</div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">read()</span></code> メソッドは、内部的には <code class=\"docutils literal notranslate\"><span class=\"pre\">readline()</span></code> メソッドを呼んでいます。 したがって、<code class=\"docutils literal notranslate\"><span class=\"pre\">read()</span></code> メソッドも同様にファイルオブジェクトを消費します。</p>\n</section>\n<section id=\"id7\">\n<h2>練習<a class=\"headerlink\" href=\"#id7\" title=\"Link to this heading\">¶</a></h2>\n<p>文字列 <code class=\"docutils literal notranslate\"><span class=\"pre\">name</span></code> をファイル名とするファイルをオープンして、 <code class=\"docutils literal notranslate\"><span class=\"pre\">read()</span></code> メソッドによってファイル全体を文字列として読み込み、 その文字数を返す関数 <code class=\"docutils literal notranslate\"><span class=\"pre\">number_of_characters(name)</span></code> を作成してください。</p>\n<p>注意：<code class=\"docutils literal notranslate\"><span class=\"pre\">return</span></code> する前にファイルをクローズすることを忘れないようにしてください。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[14]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">def</span>  <span class=\"nf\">number_of_characters</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"p\">):</span>\n    <span class=\"o\">...</span>\n</pre></div>\n</div>\n</div>\n<p>上のセルで解答を作成した後、以下のセルを実行し、実行結果が <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> になることを確認してください。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[15]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">number_of_characters</span><span class=\"p\">(</span><span class=\"s1\">&#39;sample.txt&#39;</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"mi\">446</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nFalse\n</pre></div></div>\n</div>\n</section>\n<section id=\"編集中のファイルの動作\">\n<h2>編集中のファイルの動作<a class=\"headerlink\" href=\"#編集中のファイルの動作\" title=\"Link to this heading\">¶</a></h2>\n<p>プログラムでファイルを開くと、そのプログラム内でそのファイルを閉じるまでは、他のプログラムでそのファイルを編集することはできません。</p>\n<p>下のセルを実行した後で、Windowsならエクスプローラ、macOSならFinderで上のファイルを探して、削除してみてください。 「ファイルを閉じてから再実行してください。（Windowsの場合）」といったメッセージが出て、削除ができないはずです。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[16]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">f</span> <span class=\"o\">=</span> <span class=\"nb\">open</span><span class=\"p\">(</span><span class=\"s1\">&#39;test.txt&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;r&#39;</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<p>下のセルを実行した後だと削除できます。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[17]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">close</span><span class=\"p\">()</span>\n</pre></div>\n</div>\n</div>\n</section>\n<section id=\"ファイルに対するwith文\">\n<h2>ファイルに対するwith文<a class=\"headerlink\" href=\"#ファイルに対するwith文\" title=\"Link to this heading\">¶</a></h2>\n<p>ファイルのオブジェクトは、with文に指定することができます。</p>\n<div class=\"highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>with ファイルオブジェクト as 変数:\n    ...\n</pre></div>\n</div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">with</span></code> の次には、<code class=\"docutils literal notranslate\"><span class=\"pre\">open</span></code> によってファイルをオープンする式を書きます。</p>\n<p>また、<code class=\"docutils literal notranslate\"><span class=\"pre\">as</span></code> の次には、ファイルのオブジェクトが格納される変数を書きます。</p>\n<p>with文は処理後にファイルのクローズを自動的にやってくれますので、 ファイルに対して <code class=\"docutils literal notranslate\"><span class=\"pre\">close()</span></code> を呼び出す必要がありません。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[18]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">with</span> <span class=\"nb\">open</span><span class=\"p\">(</span><span class=\"s1\">&#39;sample.txt&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;r&#39;</span><span class=\"p\">)</span> <span class=\"k\">as</span> <span class=\"n\">f</span><span class=\"p\">:</span>\n    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">read</span><span class=\"p\">())</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nLorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\nDuis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\nExcepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\n\n</pre></div></div>\n</div>\n</section>\n<section id=\"ファイルへの書き込み\">\n<h2>ファイルへの書き込み<a class=\"headerlink\" href=\"#ファイルへの書き込み\" title=\"Link to this heading\">¶</a></h2>\n<p>ファイルへの書き込みは、<code class=\"docutils literal notranslate\"><span class=\"pre\">print</span></code> 関数を使って行えます。 <code class=\"docutils literal notranslate\"><span class=\"pre\">file</span></code> 引数に書き込み先のファイルオブジェクトを指定します。 <code class=\"docutils literal notranslate\"><span class=\"pre\">file</span></code> は3.3で説明されているキーワード引数と呼ばれる引数ですので、 以下のように <code class=\"docutils literal notranslate\"><span class=\"pre\">file=...</span></code> という形で指定します。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[19]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">with</span> <span class=\"nb\">open</span><span class=\"p\">(</span><span class=\"s1\">&#39;print-test.txt&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;w&#39;</span><span class=\"p\">)</span> <span class=\"k\">as</span> <span class=\"n\">f</span><span class=\"p\">:</span>\n    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s1\">&#39;hello</span><span class=\"se\">\\n</span><span class=\"s1\">world&#39;</span><span class=\"p\">,</span> <span class=\"n\">file</span><span class=\"o\">=</span><span class=\"n\">f</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<p>文字列の中の <code class=\"docutils literal notranslate\"><span class=\"pre\">\\n</span></code> は改行文字を表します。<code class=\"docutils literal notranslate\"><span class=\"pre\">\\n</span></code> は<strong>エスケープシーケンス</strong>（2-1に説明があります）の一種です。 エスケープシーケンスには、この他に、復帰文字を表す <code class=\"docutils literal notranslate\"><span class=\"pre\">\\r</span></code> やタブを表す <code class=\"docutils literal notranslate\"><span class=\"pre\">\\t</span></code> などがあります。</p>\n<p>ファイルの読み書きのモードとしては、<strong>書き込みモード</strong>を意味する <code class=\"docutils literal notranslate\"><span class=\"pre\">'w'</span></code> を指定しています。既に同じ名前のファイルが存在する場合は上書きされます（以前の内容はなくなります）。ファイルがない場合は、新たに作成されます。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">'a'</span></code> を指定すると、ファイルが存在する場合、既存の内容の後に追記されます。ファイルがない場合は、新たに作成されます。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">print</span></code> 関数は、デフォルトで、与えられた文字列の末尾に改行文字を加えて印字します。 末尾に加える文字は、<code class=\"docutils literal notranslate\"><span class=\"pre\">end</span></code> 引数で指定できます。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[20]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">with</span> <span class=\"nb\">open</span><span class=\"p\">(</span><span class=\"s1\">&#39;print-test.txt&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;a&#39;</span><span class=\"p\">)</span> <span class=\"k\">as</span> <span class=\"n\">f</span><span class=\"p\">:</span>\n    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s1\">&#39;hello&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;world</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span><span class=\"p\">,</span> <span class=\"n\">end</span><span class=\"o\">=</span><span class=\"s1\">&#39;&#39;</span><span class=\"p\">,</span> <span class=\"n\">file</span><span class=\"o\">=</span><span class=\"n\">f</span><span class=\"p\">)</span> <span class=\"c1\"># 改行文字を加えない</span>\n</pre></div>\n</div>\n</div>\n<p>また、複数の印字対象を渡すと、デフォルトで、空白文字で区切って印字します。 この区切り文字は、<code class=\"docutils literal notranslate\"><span class=\"pre\">sep</span></code> 引数で指定できます。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[21]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">with</span> <span class=\"nb\">open</span><span class=\"p\">(</span><span class=\"s1\">&#39;print-test.txt&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;a&#39;</span><span class=\"p\">)</span> <span class=\"k\">as</span> <span class=\"n\">f</span><span class=\"p\">:</span>\n    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s1\">&#39;hello&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;world&#39;</span><span class=\"p\">,</span> <span class=\"n\">sep</span><span class=\"o\">=</span><span class=\"s1\">&#39;, &#39;</span><span class=\"p\">,</span> <span class=\"n\">file</span><span class=\"o\">=</span><span class=\"n\">f</span><span class=\"p\">)</span> <span class=\"c1\"># &#39;hello, world&#39;が印字される</span>\n</pre></div>\n</div>\n</div>\n<p>この他にも、ファイルオブジェクトには、より原始的な書き込み用メソッドが用意されています。 <code class=\"docutils literal notranslate\"><span class=\"pre\">write()</span></code> メソッドは、与えられた1つの文字列を単に書き込みます。 次に示すように、<code class=\"docutils literal notranslate\"><span class=\"pre\">write()</span></code> メソッドと <code class=\"docutils literal notranslate\"><span class=\"pre\">read()</span></code> メソッドは、対で使うことが良くあります。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[22]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">with</span> <span class=\"nb\">open</span><span class=\"p\">(</span><span class=\"s1\">&#39;sample.txt&#39;</span><span class=\"p\">)</span> <span class=\"k\">as</span> <span class=\"n\">src</span><span class=\"p\">,</span> <span class=\"nb\">open</span><span class=\"p\">(</span><span class=\"s1\">&#39;sample.txt.bak&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;w&#39;</span><span class=\"p\">)</span> <span class=\"k\">as</span> <span class=\"n\">dst</span><span class=\"p\">:</span>\n    <span class=\"n\">dst</span><span class=\"o\">.</span><span class=\"n\">write</span><span class=\"p\">(</span><span class=\"n\">src</span><span class=\"o\">.</span><span class=\"n\">read</span><span class=\"p\">())</span>\n</pre></div>\n</div>\n</div>\n<p>このコードは、<code class=\"docutils literal notranslate\"><span class=\"pre\">sample.txt</span></code> を <code class=\"docutils literal notranslate\"><span class=\"pre\">sample.txt.bak</span></code> にコピーします。</p>\n</section>\n<section id=\"id10\">\n<h2>練習<a class=\"headerlink\" href=\"#id10\" title=\"Link to this heading\">¶</a></h2>\n<p>2つのファイル名 <code class=\"docutils literal notranslate\"><span class=\"pre\">infile</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">outfile</span></code> を引数として、<code class=\"docutils literal notranslate\"><span class=\"pre\">infile</span></code> の半角英文字を全て大文字にした結果を <code class=\"docutils literal notranslate\"><span class=\"pre\">outfile</span></code> に書き込む <code class=\"docutils literal notranslate\"><span class=\"pre\">file_upper(infile,</span> <span class=\"pre\">outfile)</span></code> という関数を作成してください。</p>\n<p>なお、半角英文字の小文字を大文字に変換するには <code class=\"docutils literal notranslate\"><span class=\"pre\">upper()</span></code> というメソッドが使えます。 たとえば <code class=\"docutils literal notranslate\"><span class=\"pre\">line</span></code> という名前の変数に半角文字列が入っている場合、<code class=\"docutils literal notranslate\"><span class=\"pre\">line.upper()</span></code> とすれば大文字に変換した文字列を返します。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[23]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">def</span> <span class=\"nf\">file_upper</span><span class=\"p\">(</span><span class=\"n\">infile</span><span class=\"p\">,</span><span class=\"n\">outfile</span><span class=\"p\">):</span>\n    <span class=\"o\">...</span>\n</pre></div>\n</div>\n</div>\n<p>上のセルで解答を作成した後、以下のセルを実行し、実行結果が <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> になることを確認してください。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[24]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">with</span> <span class=\"nb\">open</span><span class=\"p\">(</span><span class=\"s1\">&#39;print-test.txt&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;w&#39;</span><span class=\"p\">)</span> <span class=\"k\">as</span> <span class=\"n\">f</span><span class=\"p\">:</span>\n    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s1\">&#39;hello&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;world&#39;</span><span class=\"p\">,</span> <span class=\"n\">file</span><span class=\"o\">=</span><span class=\"n\">f</span><span class=\"p\">)</span>\n<span class=\"n\">file_upper</span><span class=\"p\">(</span><span class=\"s1\">&#39;print-test.txt&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;print-test-upper.txt&#39;</span><span class=\"p\">)</span>\n<span class=\"k\">with</span> <span class=\"nb\">open</span><span class=\"p\">(</span><span class=\"s1\">&#39;print-test-upper.txt&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;r&#39;</span><span class=\"p\">)</span> <span class=\"k\">as</span> <span class=\"n\">f</span><span class=\"p\">:</span>\n    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">read</span><span class=\"p\">()</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;HELLO WORLD</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n<span class=\"ansi-red-fg\">---------------------------------------------------------------------------</span>\n<span class=\"ansi-red-fg\">FileNotFoundError</span>                         Traceback (most recent call last)\nCell <span class=\"ansi-green-fg\">In[24], line 4</span>\n<span class=\"ansi-green-intense-fg ansi-bold\">      2</span>     <span style=\"color: rgb(0,135,0)\">print</span>(<span style=\"color: rgb(175,0,0)\">&#39;</span><span style=\"color: rgb(175,0,0)\">hello</span><span style=\"color: rgb(175,0,0)\">&#39;</span>, <span style=\"color: rgb(175,0,0)\">&#39;</span><span style=\"color: rgb(175,0,0)\">world</span><span style=\"color: rgb(175,0,0)\">&#39;</span>, file<span style=\"color: rgb(98,98,98)\">=</span>f)\n<span class=\"ansi-green-intense-fg ansi-bold\">      3</span> file_upper(<span style=\"color: rgb(175,0,0)\">&#39;</span><span style=\"color: rgb(175,0,0)\">print-test.txt</span><span style=\"color: rgb(175,0,0)\">&#39;</span>, <span style=\"color: rgb(175,0,0)\">&#39;</span><span style=\"color: rgb(175,0,0)\">print-test-upper.txt</span><span style=\"color: rgb(175,0,0)\">&#39;</span>)\n<span class=\"ansi-green-fg\">----&gt; 4</span> <span class=\"ansi-bold\" style=\"color: rgb(0,135,0)\">with</span> <span class=\"ansi-yellow-bg\" style=\"color: rgb(0,135,0)\">open</span><span class=\"ansi-yellow-bg\">(</span><span class=\"ansi-yellow-bg\" style=\"color: rgb(175,0,0)\">&#39;</span><span class=\"ansi-yellow-bg\" style=\"color: rgb(175,0,0)\">print-test-upper.txt</span><span class=\"ansi-yellow-bg\" style=\"color: rgb(175,0,0)\">&#39;</span><span class=\"ansi-yellow-bg\">,</span><span class=\"ansi-yellow-bg\"> </span><span class=\"ansi-yellow-bg\" style=\"color: rgb(175,0,0)\">&#39;</span><span class=\"ansi-yellow-bg\" style=\"color: rgb(175,0,0)\">r</span><span class=\"ansi-yellow-bg\" style=\"color: rgb(175,0,0)\">&#39;</span><span class=\"ansi-yellow-bg\">)</span> <span class=\"ansi-bold\" style=\"color: rgb(0,135,0)\">as</span> f:\n<span class=\"ansi-green-intense-fg ansi-bold\">      5</span>     <span style=\"color: rgb(0,135,0)\">print</span>(f<span style=\"color: rgb(98,98,98)\">.</span>read() <span style=\"color: rgb(98,98,98)\">==</span> <span style=\"color: rgb(175,0,0)\">&#39;</span><span style=\"color: rgb(175,0,0)\">HELLO WORLD</span><span class=\"ansi-bold\" style=\"color: rgb(175,95,0)\">\\n</span><span style=\"color: rgb(175,0,0)\">&#39;</span>)\n\nFile <span class=\"ansi-green-fg\">~/Projects/utpython/lib/python3.12/site-packages/IPython/core/interactiveshell.py:324</span>, in <span class=\"ansi-cyan-fg\">_modified_open</span><span class=\"ansi-blue-fg\">(file, *args, **kwargs)</span>\n<span class=\"ansi-green-intense-fg ansi-bold\">    317</span> <span class=\"ansi-bold\" style=\"color: rgb(0,135,0)\">if</span> file <span class=\"ansi-bold\" style=\"color: rgb(175,0,255)\">in</span> {<span style=\"color: rgb(98,98,98)\">0</span>, <span style=\"color: rgb(98,98,98)\">1</span>, <span style=\"color: rgb(98,98,98)\">2</span>}:\n<span class=\"ansi-green-intense-fg ansi-bold\">    318</span>     <span class=\"ansi-bold\" style=\"color: rgb(0,135,0)\">raise</span> <span class=\"ansi-bold\" style=\"color: rgb(215,95,95)\">ValueError</span>(\n<span class=\"ansi-green-intense-fg ansi-bold\">    319</span>         <span style=\"color: rgb(175,0,0)\">f</span><span style=\"color: rgb(175,0,0)\">&#34;</span><span style=\"color: rgb(175,0,0)\">IPython won</span><span style=\"color: rgb(175,0,0)\">&#39;</span><span style=\"color: rgb(175,0,0)\">t let you open fd=</span><span class=\"ansi-bold\" style=\"color: rgb(175,95,135)\">{</span>file<span class=\"ansi-bold\" style=\"color: rgb(175,95,135)\">}</span><span style=\"color: rgb(175,0,0)\"> by default </span><span style=\"color: rgb(175,0,0)\">&#34;</span>\n<span class=\"ansi-green-intense-fg ansi-bold\">    320</span>         <span style=\"color: rgb(175,0,0)\">&#34;</span><span style=\"color: rgb(175,0,0)\">as it is likely to crash IPython. If you know what you are doing, </span><span style=\"color: rgb(175,0,0)\">&#34;</span>\n<span class=\"ansi-green-intense-fg ansi-bold\">    321</span>         <span style=\"color: rgb(175,0,0)\">&#34;</span><span style=\"color: rgb(175,0,0)\">you can use builtins</span><span style=\"color: rgb(175,0,0)\">&#39;</span><span style=\"color: rgb(175,0,0)\"> open.</span><span style=\"color: rgb(175,0,0)\">&#34;</span>\n<span class=\"ansi-green-intense-fg ansi-bold\">    322</span>     )\n<span class=\"ansi-green-fg\">--&gt; 324</span> <span class=\"ansi-bold\" style=\"color: rgb(0,135,0)\">return</span> <span class=\"ansi-yellow-bg\">io_open</span><span class=\"ansi-yellow-bg\">(</span><span class=\"ansi-yellow-bg\">file</span><span class=\"ansi-yellow-bg\">,</span><span class=\"ansi-yellow-bg\"> </span><span class=\"ansi-yellow-bg\" style=\"color: rgb(98,98,98)\">*</span><span class=\"ansi-yellow-bg\">args</span><span class=\"ansi-yellow-bg\">,</span><span class=\"ansi-yellow-bg\"> </span><span class=\"ansi-yellow-bg\" style=\"color: rgb(98,98,98)\">*</span><span class=\"ansi-yellow-bg\" style=\"color: rgb(98,98,98)\">*</span><span class=\"ansi-yellow-bg\">kwargs</span><span class=\"ansi-yellow-bg\">)</span>\n\n<span class=\"ansi-red-fg\">FileNotFoundError</span>: [Errno 2] No such file or directory: &#39;print-test-upper.txt&#39;\n</pre></div></div>\n</div>\n</section>\n<section id=\"ファイルの読み書きにおける文字コード指定\">\n<h2>ファイルの読み書きにおける文字コード指定<a class=\"headerlink\" href=\"#ファイルの読み書きにおける文字コード指定\" title=\"Link to this heading\">¶</a></h2>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">open</span></code> でファイルを開くと、通常そのファイルをテキストモードで開きます（テキストモード以外にバイナリモードもあります）。</p>\n<p>テキストモードでファイルを開くときは、さらに特定の<strong>文字コード</strong>によってそのファイルを開こうとします。 文字コードを指定しないと、デフォルトの文字コードでそのファイルを開こうとしますが、 この文字コードがファイルを書き込む際に指定したものと異なる場合、エラーが出たり文字化けしてしまいます。</p>\n<p>デフォルトの文字コードは、WindowsはShift_JIS、macOSやLinuxはUTF-8になっていることが多いです。 UTF-8で文字を記録されたファイルをWindowsで、ただ <code class=\"docutils literal notranslate\"><span class=\"pre\">open('utf-8.txt',</span> <span class=\"pre\">'w')</span></code> のように文字コードを指定せずに開くとエラーが出ます。 同じく、Shift_JISで文字を記録されたファイルをmacOSで <code class=\"docutils literal notranslate\"><span class=\"pre\">open('shift_jis.txt',</span> <span class=\"pre\">'w')</span></code> として開くとエラーが出ます。</p>\n<p>なお、この教材の冒頭で <code class=\"docutils literal notranslate\"><span class=\"pre\">open('sample.txt',</span> <span class=\"pre\">'r')</span></code> と、文字コードを指定せずにファイルを開きましたがエラーは出ませんでしたね。 これは、<code class=\"docutils literal notranslate\"><span class=\"pre\">sample.txt</span></code> では半角英数字しか使われておらず、半角英数字に関しては、Shift_JISもUTF-8も共通のルールでエンコードされているためです。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[25]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"c1\"># macOSならこちらでエラー</span>\n<span class=\"k\">with</span> <span class=\"nb\">open</span><span class=\"p\">(</span><span class=\"s1\">&#39;shift_jis.txt&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;r&#39;</span><span class=\"p\">)</span> <span class=\"k\">as</span> <span class=\"n\">f</span><span class=\"p\">:</span>\n    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">read</span><span class=\"p\">())</span>\n\n<span class=\"c1\"># Windowsならこちらでエラー</span>\n<span class=\"k\">with</span> <span class=\"nb\">open</span><span class=\"p\">(</span><span class=\"s1\">&#39;utf-8.txt&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;r&#39;</span><span class=\"p\">)</span> <span class=\"k\">as</span> <span class=\"n\">f</span><span class=\"p\">:</span>\n    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">read</span><span class=\"p\">())</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n<span class=\"ansi-red-fg\">---------------------------------------------------------------------------</span>\n<span class=\"ansi-red-fg\">UnicodeDecodeError</span>                        Traceback (most recent call last)\nCell <span class=\"ansi-green-fg\">In[25], line 3</span>\n<span class=\"ansi-green-intense-fg ansi-bold\">      1</span> <span style=\"color: rgb(95,135,135)\"># macOSならこちらでエラー</span>\n<span class=\"ansi-green-intense-fg ansi-bold\">      2</span> <span class=\"ansi-bold\" style=\"color: rgb(0,135,0)\">with</span> <span style=\"color: rgb(0,135,0)\">open</span>(<span style=\"color: rgb(175,0,0)\">&#39;</span><span style=\"color: rgb(175,0,0)\">shift_jis.txt</span><span style=\"color: rgb(175,0,0)\">&#39;</span>, <span style=\"color: rgb(175,0,0)\">&#39;</span><span style=\"color: rgb(175,0,0)\">r</span><span style=\"color: rgb(175,0,0)\">&#39;</span>) <span class=\"ansi-bold\" style=\"color: rgb(0,135,0)\">as</span> f:\n<span class=\"ansi-green-fg\">----&gt; 3</span>     <span style=\"color: rgb(0,135,0)\">print</span>(<span class=\"ansi-yellow-bg\">f</span><span class=\"ansi-yellow-bg\" style=\"color: rgb(98,98,98)\">.</span><span class=\"ansi-yellow-bg\">read</span><span class=\"ansi-yellow-bg\">(</span><span class=\"ansi-yellow-bg\">)</span>)\n<span class=\"ansi-green-intense-fg ansi-bold\">      5</span> <span style=\"color: rgb(95,135,135)\"># Windowsならこちらでエラー</span>\n<span class=\"ansi-green-intense-fg ansi-bold\">      6</span> <span class=\"ansi-bold\" style=\"color: rgb(0,135,0)\">with</span> <span style=\"color: rgb(0,135,0)\">open</span>(<span style=\"color: rgb(175,0,0)\">&#39;</span><span style=\"color: rgb(175,0,0)\">utf-8.txt</span><span style=\"color: rgb(175,0,0)\">&#39;</span>, <span style=\"color: rgb(175,0,0)\">&#39;</span><span style=\"color: rgb(175,0,0)\">r</span><span style=\"color: rgb(175,0,0)\">&#39;</span>) <span class=\"ansi-bold\" style=\"color: rgb(0,135,0)\">as</span> f:\n\nFile <span class=\"ansi-green-fg\">&lt;frozen codecs&gt;:322</span>, in <span class=\"ansi-cyan-fg\">decode</span><span class=\"ansi-blue-fg\">(self, input, final)</span>\n\n<span class=\"ansi-red-fg\">UnicodeDecodeError</span>: &#39;utf-8&#39; codec can&#39;t decode byte 0x82 in position 0: invalid start byte\n</pre></div></div>\n</div>\n<p>特に半角英数以外の文字を記録する際は文字コードを指定すること、またそのようなファイルを開くときは、記録するときに指定した文字コードでファイルを開いてください。</p>\n<p>文字コードは、<code class=\"docutils literal notranslate\"><span class=\"pre\">open</span></code> のキーワード引数として <code class=\"docutils literal notranslate\"><span class=\"pre\">encoding='utf-8'</span></code>（文字コードにUTF-8を指定する場合）のように指定することができます。</p>\n<p>なお、日本語の文字コードには <code class=\"docutils literal notranslate\"><span class=\"pre\">UTF-8</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">Shift_JIS</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">EUC-JP</span></code> などがありますが、PythonではOSの種類に限らず、UTF-8という文字コードがよく使われます。本授業でもUTF-8を推奨します。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[26]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"c1\"># 文字コードを指定しないとmacOSならこちらでエラー</span>\n<span class=\"k\">with</span> <span class=\"nb\">open</span><span class=\"p\">(</span><span class=\"s1\">&#39;shift_jis.txt&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;r&#39;</span><span class=\"p\">,</span> <span class=\"n\">encoding</span><span class=\"o\">=</span><span class=\"s1\">&#39;shift_jis&#39;</span><span class=\"p\">)</span> <span class=\"k\">as</span> <span class=\"n\">f</span><span class=\"p\">:</span>\n    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">read</span><span class=\"p\">())</span>\n\n<span class=\"c1\"># 文字コードを指定しないとWindowsならこちらでエラー</span>\n<span class=\"k\">with</span> <span class=\"nb\">open</span><span class=\"p\">(</span><span class=\"s1\">&#39;utf-8.txt&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;r&#39;</span><span class=\"p\">,</span> <span class=\"n\">encoding</span><span class=\"o\">=</span><span class=\"s1\">&#39;utf-8&#39;</span><span class=\"p\">)</span> <span class=\"k\">as</span> <span class=\"n\">f</span><span class=\"p\">:</span>\n    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">read</span><span class=\"p\">())</span>\n\n<span class=\"c1\"># 文字コードを指定してファイルに書き込む場合</span>\n<span class=\"k\">with</span> <span class=\"nb\">open</span><span class=\"p\">(</span><span class=\"s1\">&#39;text.txt&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;w&#39;</span><span class=\"p\">,</span> <span class=\"n\">encoding</span><span class=\"o\">=</span><span class=\"s1\">&#39;utf-8&#39;</span><span class=\"p\">)</span> <span class=\"k\">as</span> <span class=\"n\">f</span><span class=\"p\">:</span>\n    <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">write</span><span class=\"p\">(</span><span class=\"s1\">&#39;かきくけこ&#39;</span><span class=\"p\">)</span>\n<span class=\"k\">with</span> <span class=\"nb\">open</span><span class=\"p\">(</span><span class=\"s1\">&#39;text.txt&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;r&#39;</span><span class=\"p\">,</span> <span class=\"n\">encoding</span><span class=\"o\">=</span><span class=\"s1\">&#39;utf-8&#39;</span><span class=\"p\">)</span> <span class=\"k\">as</span> <span class=\"n\">f</span><span class=\"p\">:</span>\n    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">read</span><span class=\"p\">())</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nあいうえお\nあいうえお\nかきくけこ\n</pre></div></div>\n</div>\n</section>\n<section id=\"改行文字の削除\">\n<h2>改行文字の削除<a class=\"headerlink\" href=\"#改行文字の削除\" title=\"Link to this heading\">¶</a></h2>\n<p>ファイルをテキストモードで開いて <code class=\"docutils literal notranslate\"><span class=\"pre\">read()</span></code> や <code class=\"docutils literal notranslate\"><span class=\"pre\">readline()</span></code> を呼び出すと、 <code class=\"docutils literal notranslate\"><span class=\"pre\">str</span></code> 型の文字列として読み込まれます。</p>\n<p>文字列の末尾にある改行文字の削除には、2-1で紹介した <code class=\"docutils literal notranslate\"><span class=\"pre\">rstrip</span></code> メソッドが使えます。 ただし、無引数で呼び出すと、改行文字以外の空白文字もまとめて削除されます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[27]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"s1\">&#39;あいうえお </span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span><span class=\"o\">.</span><span class=\"n\">rstrip</span><span class=\"p\">()</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[27]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n&#39;あいうえお&#39;\n</pre></div></div>\n</div>\n<p>削除する空白文字を改行文字 <code class=\"docutils literal notranslate\"><span class=\"pre\">'\\n'</span></code> に限定したい場合には、 <code class=\"docutils literal notranslate\"><span class=\"pre\">rstrip</span></code> の引数に指定します。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[28]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"s1\">&#39;あいうえお </span><span class=\"se\">\\n\\n</span><span class=\"s1\">&#39;</span><span class=\"o\">.</span><span class=\"n\">rstrip</span><span class=\"p\">(</span><span class=\"s1\">&#39;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[28]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n&#39;あいうえお &#39;\n</pre></div></div>\n</div>\n<p>上の例から分かるように、末尾の改行文字をただ1つ削除したい場合には、 <code class=\"docutils literal notranslate\"><span class=\"pre\">rstrip('\\n')</span></code> は適していません。 しかし、 <code class=\"docutils literal notranslate\"><span class=\"pre\">readline()</span></code> の返す文字列には、末尾に高々1つの <code class=\"docutils literal notranslate\"><span class=\"pre\">'\\n'</span></code> しか存在しないので、 <code class=\"docutils literal notranslate\"><span class=\"pre\">rstrip('\\n')</span></code> で問題ありません。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[29]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">with</span> <span class=\"nb\">open</span><span class=\"p\">(</span><span class=\"s1\">&#39;text/novel.txt&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;r&#39;</span><span class=\"p\">,</span> <span class=\"n\">encoding</span><span class=\"o\">=</span><span class=\"s1\">&#39;utf-8&#39;</span><span class=\"p\">)</span> <span class=\"k\">as</span> <span class=\"n\">f</span><span class=\"p\">:</span>\n    <span class=\"k\">while</span> <span class=\"kc\">True</span><span class=\"p\">:</span>\n        <span class=\"n\">line</span> <span class=\"o\">=</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">readline</span><span class=\"p\">()</span>\n        <span class=\"k\">if</span> <span class=\"n\">line</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;&#39;</span><span class=\"p\">:</span>\n            <span class=\"k\">break</span>\n        <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">line</span><span class=\"p\">)</span>\n\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s1\">&#39;------ 末尾の改行文字を削除すると以下のようになります-------&#39;</span><span class=\"p\">)</span>\n<span class=\"k\">with</span> <span class=\"nb\">open</span><span class=\"p\">(</span><span class=\"s1\">&#39;text/novel.txt&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;r&#39;</span><span class=\"p\">,</span> <span class=\"n\">encoding</span><span class=\"o\">=</span><span class=\"s1\">&#39;utf-8&#39;</span><span class=\"p\">)</span> <span class=\"k\">as</span> <span class=\"n\">f</span><span class=\"p\">:</span>\n    <span class=\"k\">while</span> <span class=\"kc\">True</span><span class=\"p\">:</span>\n        <span class=\"n\">line</span> <span class=\"o\">=</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">readline</span><span class=\"p\">()</span>\n        <span class=\"k\">if</span> <span class=\"n\">line</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;&#39;</span><span class=\"p\">:</span>\n            <span class=\"k\">break</span>\n        <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">line</span><span class=\"o\">.</span><span class=\"n\">rstrip</span><span class=\"p\">(</span><span class=\"s1\">&#39;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span><span class=\"p\">))</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n二人の若い紳士が、すつかりイギリスの兵隊のかたちをして、ぴか／＼する鉄砲をかついで、白熊のやうな犬を二疋つれて、だいぶ山奥の、木の葉のかさ／＼したとこを、こんなことを云ひながら、あるいてをりました。\n\n「ぜんたい、こゝらの山は怪しからんね。鳥も獣も一疋も居やがらん。なんでも構はないから、早くタンタアーンと、やつて見たいもんだなあ。」\n\n「鹿の黄いろな横つ腹なんぞに、二三発お見舞まうしたら、ずゐぶん痛快だらうねえ。くる／＼まはつて、それからどたつと倒れるだらうねえ。」\n\n------ 末尾の改行文字を削除すると以下のようになります-------\n二人の若い紳士が、すつかりイギリスの兵隊のかたちをして、ぴか／＼する鉄砲をかついで、白熊のやうな犬を二疋つれて、だいぶ山奥の、木の葉のかさ／＼したとこを、こんなことを云ひながら、あるいてをりました。\n「ぜんたい、こゝらの山は怪しからんね。鳥も獣も一疋も居やがらん。なんでも構はないから、早くタンタアーンと、やつて見たいもんだなあ。」\n「鹿の黄いろな横つ腹なんぞに、二三発お見舞まうしたら、ずゐぶん痛快だらうねえ。くる／＼まはつて、それからどたつと倒れるだらうねえ。」\n</pre></div></div>\n</div>\n</section>\n<section id=\"練習の解答\">\n<h2>練習の解答<a class=\"headerlink\" href=\"#練習の解答\" title=\"Link to this heading\">¶</a></h2>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[30]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">def</span>  <span class=\"nf\">number_of_characters</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"p\">):</span>\n    <span class=\"n\">f</span> <span class=\"o\">=</span> <span class=\"nb\">open</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"p\">,</span> <span class=\"s1\">&#39;r&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">s</span> <span class=\"o\">=</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">read</span><span class=\"p\">()</span>\n    <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">close</span><span class=\"p\">()</span>\n    <span class=\"k\">return</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">s</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[31]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">def</span> <span class=\"nf\">last_line</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"p\">):</span>\n    <span class=\"n\">last</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;&#39;</span>\n    <span class=\"k\">with</span> <span class=\"nb\">open</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"p\">,</span> <span class=\"s1\">&#39;r&#39;</span><span class=\"p\">)</span> <span class=\"k\">as</span> <span class=\"n\">f</span><span class=\"p\">:</span>\n        <span class=\"k\">while</span> <span class=\"kc\">True</span><span class=\"p\">:</span>\n            <span class=\"n\">line</span> <span class=\"o\">=</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">readline</span><span class=\"p\">()</span>\n            <span class=\"k\">if</span> <span class=\"n\">line</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;&#39;</span><span class=\"p\">:</span>\n                <span class=\"k\">return</span> <span class=\"n\">last</span>\n            <span class=\"n\">last</span> <span class=\"o\">=</span> <span class=\"n\">line</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[32]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">def</span> <span class=\"nf\">file_upper</span><span class=\"p\">(</span><span class=\"n\">infile</span><span class=\"p\">,</span><span class=\"n\">outfile</span><span class=\"p\">):</span>\n    <span class=\"k\">with</span> <span class=\"nb\">open</span><span class=\"p\">(</span><span class=\"n\">infile</span><span class=\"p\">,</span> <span class=\"s1\">&#39;r&#39;</span><span class=\"p\">)</span> <span class=\"k\">as</span> <span class=\"n\">f</span><span class=\"p\">:</span>\n        <span class=\"k\">with</span> <span class=\"nb\">open</span><span class=\"p\">(</span><span class=\"n\">outfile</span><span class=\"p\">,</span> <span class=\"s1\">&#39;w&#39;</span><span class=\"p\">)</span> <span class=\"k\">as</span> <span class=\"n\">g</span><span class=\"p\">:</span>\n            <span class=\"n\">g</span><span class=\"o\">.</span><span class=\"n\">write</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">read</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">upper</span><span class=\"p\">())</span>\n</pre></div>\n</div>\n</div>\n<p>以下のように1つのwith文に複数の <code class=\"docutils literal notranslate\"><span class=\"pre\">open</span></code> を書くこともできます。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[33]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">def</span> <span class=\"nf\">file_upper</span><span class=\"p\">(</span><span class=\"n\">infile</span><span class=\"p\">,</span><span class=\"n\">outfile</span><span class=\"p\">):</span>\n    <span class=\"k\">with</span> <span class=\"nb\">open</span><span class=\"p\">(</span><span class=\"n\">infile</span><span class=\"p\">,</span> <span class=\"s1\">&#39;r&#39;</span><span class=\"p\">)</span> <span class=\"k\">as</span> <span class=\"n\">f</span><span class=\"p\">,</span> <span class=\"nb\">open</span><span class=\"p\">(</span><span class=\"n\">outfile</span><span class=\"p\">,</span> <span class=\"s1\">&#39;w&#39;</span><span class=\"p\">)</span> <span class=\"k\">as</span> <span class=\"n\">g</span><span class=\"p\">:</span>\n        <span class=\"n\">g</span><span class=\"o\">.</span><span class=\"n\">write</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">read</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">upper</span><span class=\"p\">())</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[ ]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span>\n</pre></div>\n</div>\n</div>\n</section>\n</section>\n\n\n          </div>\n          \n        </div>\n      </div>\n      <div class=\"sphinxsidebar\" role=\"navigation\" aria-label=\"Main\">\n        <div class=\"sphinxsidebarwrapper\">\n<h1 class=\"logo\"><a href=\"../index.html\">Pythonプログラミング入門</a></h1>\n\n\n\n\n\n\n\n\n<p>\n  <a style=\"font-family: sans-serif; font-size: smaller; background: linear-gradient(to top, #353535 0%, #141414 100%); -webkit-font-smoothing: antialiased; font-weight: normal; text-shadow: rgb(0 0 0 / 40%) 0 -1px 0; padding: 2px 6px; color: #fff; text-decoration: none; border-radius: 4px; border: 1px solid #0d0d0d; box-shadow: inset 0 1px 1px 0 #8f8f8f;\" href=\"https://github.com/utokyo-ipp/utokyo-ipp.github.io\">View on GitHub</a>\n</p><p>\n  <a style=\"font-family: sans-serif; font-size: smaller; background: linear-gradient(to top, #ff1e00 0%, #de1e00 100%); -webkit-font-smoothing: antialiased; font-weight: normal; text-shadow: rgb(0 0 0 / 40%) 0 -1px 0; padding: 2px 6px; color: #fff; text-decoration: none; border-radius: 4px; border: 1px solid #0d0d0d; box-shadow: inset 0 1px 1px 0 #ff8e70;\" href=\"https://utokyo-ipp.github.io/IPP_textbook.pdf\">View PDF</a>\n</p><p>\n  <a style=\"border-bottom: none;\" href=\"https://colab.research.google.com/github/utokyo-ipp/utokyo-ipp.github.io/blob/master/colab/4/4-1.ipynb\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Google Colaboratory\"></a>\n</p><h3>Navigation</h3>\n<ul class=\"current\">\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../1/1-0.html\">1-0. Colaboratory (Colab) の使い方</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../1/1-1.html\">1-1. 数値演算</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../1/1-2.html\">1-2. 変数と関数の基礎</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../1/1-3.html\">1-3. 論理・比較演算と条件分岐の基礎</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../1/1-4.html\">1-4. テストとデバッグ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../2/2-1.html\">2-1. 文字列 (string)</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../2/2-2.html\">2-2. リスト (list)</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../2/2-3.html\">2-3. 条件分岐</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../3/3-1.html\">3-1. 辞書 (dictionary)</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../3/3-2.html\">3-2. 繰り返し</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../3/3-3.html\">3-3. 関数</a></li>\n<li class=\"toctree-l1 current\"><a class=\"current reference internal\" href=\"#\">4-1. ファイル入出力の基本</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#ファイルのオープン\">ファイルのオープン</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#ファイルのクローズ\">ファイルのクローズ</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#行の読み込み\">行の読み込み</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#練習\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#ファイル全体の読み込み\">ファイル全体の読み込み</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#id7\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#編集中のファイルの動作\">編集中のファイルの動作</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#ファイルに対するwith文\">ファイルに対するwith文</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#ファイルへの書き込み\">ファイルへの書き込み</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#id10\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#ファイルの読み書きにおける文字コード指定\">ファイルの読み書きにおける文字コード指定</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#改行文字の削除\">改行文字の削除</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#練習の解答\">練習の解答</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"4-2.html\">4-2. イテラブルとイテレータ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"4-3.html\">4-3. ディレクトリと木構造</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../5/5-1.html\">5-1. モジュールの使い方</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../5/5-2.html\">5-2. モジュールの作り方</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../5/5-3.html\">5-3. NumPyライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../6/6-1.html\">6-1. 内包表記</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../6/6-2.html\">6-2. 高階関数</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../6/6-3.html\">6-3. クラス</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../7/7-1.html\">7-1. pandasライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../7/7-2.html\">7-2. scikit-learnライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/1-jupyter-notebook.html\">▲Jupyter Notebook の使い方</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/2-set.html\">▲セット (set)</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/3-recursion.html\">▲再帰</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/3-visualization.html\">▲簡単なデータの可視化</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/4-csv.html\">▲CSVファイルの入出力</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/5-bokeh.html\">▲Bokehライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/5-command.html\">▲Pythonスクリプトとコマンドライン実行</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/5-matplotlib.html\">▲Matplotlibライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/5-re.html\">▲正規表現</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../index_of_terms.html\">索引</a></li>\n</ul>\n\n<div class=\"relations\">\n<h3>Related Topics</h3>\n<ul>\n  <li><a href=\"../index.html\">Documentation overview</a><ul>\n      <li>Previous: <a href=\"../3/3-3.html\" title=\"previous chapter\">3-3. 関数</a></li>\n      <li>Next: <a href=\"4-2.html\" title=\"next chapter\">4-2. イテラブルとイテレータ</a></li>\n  </ul></li>\n</ul>\n</div>\n<search id=\"searchbox\" style=\"display: none\" role=\"search\">\n  <h3 id=\"searchlabel\">Quick search</h3>\n    <div class=\"searchformwrapper\">\n    <form class=\"search\" action=\"../search.html\" method=\"get\">\n      <input type=\"text\" name=\"q\" aria-labelledby=\"searchlabel\" autocomplete=\"off\" autocorrect=\"off\" autocapitalize=\"off\" spellcheck=\"false\"/>\n      <input type=\"submit\" value=\"Go\" />\n    </form>\n    </div>\n</search>\n<script>document.getElementById('searchbox').style.display = \"block\"</script>\n\n\n\n\n\n\n\n\n        </div>\n      </div>\n      <div class=\"clearer\"></div>\n    </div>\n    <div class=\"footer\">\n      &#169;2020–2024, 東京大学 数理・情報教育研究センター (CC BY-NC-ND 4.0).\n      \n      |\n      Powered by <a href=\"https://www.sphinx-doc.org/\">Sphinx 8.0.2</a>\n      &amp; <a href=\"https://alabaster.readthedocs.io\">Alabaster 1.0.0</a>\n      \n    </div>\n\n    \n\n    \n    <script>\n\n      var _gaq = _gaq || [];\n      _gaq.push(['_setAccount', 'G-8M0RXGPPSR']);\n      _gaq.push(['_setDomainName', 'none']);\n      _gaq.push(['_setAllowLinker', true]);\n      _gaq.push(['_trackPageview']);\n\n      (function() {\n        var ga = document.createElement('script'); ga.async = true;\n        ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'https://www') + '.google-analytics.com/ga.js';\n        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);\n      })();\n\n    </script>\n    \n  </body>\n</html>"
  },
  {
    "path": "docs/4/4-2.html",
    "content": "<!DOCTYPE html>\n\n<html lang=\"jp\" data-content_root=\"../\">\n  <head>\n    <meta charset=\"utf-8\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" /><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n\n    <!-- Google tag (gtag.js) -->\n    <script async src=\"https://www.googletagmanager.com/gtag/js?id=G-8M0RXGPPSR\"></script>\n    <script>\n        window.dataLayer = window.dataLayer || [];\n        function gtag(){dataLayer.push(arguments);}\n        gtag('js', new Date());\n        gtag('config', 'G-8M0RXGPPSR');\n    </script>\n    \n    <title>4-2. イテラブルとイテレータ &#8212; Pythonプログラミング入門  documentation</title>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/pygments.css?v=d1102ebc\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/basic.css?v=c058f7c8\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/alabaster.css?v=27fed22d\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/nbsphinx-code-cells.css\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/custom.css?v=1a1aa8dd\" />\n    <script src=\"../_static/documentation_options.js?v=3ff7d7a7\"></script>\n    <script src=\"../_static/doctools.js?v=9a2dae69\"></script>\n    <script src=\"../_static/sphinx_highlight.js?v=dc90522c\"></script>\n    <script crossorigin=\"anonymous\" integrity=\"sha256-Ae2Vz/4ePdIu6ZyI/5ZGsYnb+m0JlOmKPjt6XZ9JJkA=\" src=\"https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.4/require.min.js\"></script>\n    <script>window.MathJax = {\"tex\": {\"inlineMath\": [[\"$\", \"$\"], [\"\\\\(\", \"\\\\)\"]], \"processEscapes\": true}, \"options\": {\"ignoreHtmlClass\": \"tex2jax_ignore|mathjax_ignore|document\", \"processHtmlClass\": \"tex2jax_process|mathjax_process|math|output_area\"}}</script>\n    <script defer=\"defer\" src=\"https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js\"></script>\n    <link rel=\"index\" title=\"Index\" href=\"../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../search.html\" />\n    <link rel=\"next\" title=\"4-3. ディレクトリと木構造\" href=\"4-3.html\" />\n    <link rel=\"prev\" title=\"4-1. ファイル入出力の基本\" href=\"4-1.html\" />\n   \n  <link rel=\"stylesheet\" href=\"../_static/custom.css\" type=\"text/css\" />\n  \n\n  \n  \n\n  </head><body>\n  \n\n    <div class=\"document\">\n      <div class=\"documentwrapper\">\n        <div class=\"bodywrapper\">\n          \n\n          <div class=\"body\" role=\"main\">\n            \n  <section id=\"4-2.-イテラブルとイテレータ\">\n<h1>4-2. イテラブルとイテレータ<a class=\"headerlink\" href=\"#4-2.-イテラブルとイテレータ\" title=\"Link to this heading\">¶</a></h1>\n<p>イテラブルとイテレータについて説明します。</p>\n<p>参考</p>\n<ul class=\"simple\">\n<li><p><a class=\"reference external\" href=\"https://docs.python.org/ja/3/tutorial/classes.html#iterators\">https://docs.python.org/ja/3/tutorial/classes.html#iterators</a></p></li>\n<li><p><a class=\"reference external\" href=\"https://docs.python.org/ja/3/glossary.html#term-iterable\">https://docs.python.org/ja/3/glossary.html#term-iterable</a></p></li>\n<li><p><a class=\"reference external\" href=\"https://docs.python.org/ja/3/library/stdtypes.html#typeiter\">https://docs.python.org/ja/3/library/stdtypes.html#typeiter</a></p></li>\n</ul>\n<section id=\"for文による繰り返しとファイルオブジェクト\">\n<h2>for文による繰り返しとファイルオブジェクト<a class=\"headerlink\" href=\"#for文による繰り返しとファイルオブジェクト\" title=\"Link to this heading\">¶</a></h2>\n<p>ファイルオブジェクトは、for文の <code class=\"docutils literal notranslate\"><span class=\"pre\">in</span></code> の後に指定することができます。 このとき、ファイルから各行の文字列（改行文字を含む）を順次取り出します。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[1]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">lines</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n<span class=\"k\">with</span> <span class=\"nb\">open</span><span class=\"p\">(</span><span class=\"s1\">&#39;sample.txt&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;r&#39;</span><span class=\"p\">)</span> <span class=\"k\">as</span> <span class=\"n\">f</span><span class=\"p\">:</span>\n    <span class=\"k\">for</span> <span class=\"n\">line</span> <span class=\"ow\">in</span> <span class=\"n\">f</span><span class=\"p\">:</span>\n        <span class=\"n\">lines</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">line</span><span class=\"p\">)</span>\n<span class=\"n\">lines</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[1]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n[&#39;Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\\n&#39;,\n &#39;Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\\n&#39;,\n &#39;Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\\n&#39;]\n</pre></div></div>\n</div>\n<p>for文による行の取り出しは、<code class=\"docutils literal notranslate\"><span class=\"pre\">readline</span></code> メソッドと同様に、ファイルオブジェクトを消費します。</p>\n<p>ファイルオブジェクト <code class=\"docutils literal notranslate\"><span class=\"pre\">f</span></code> をfor文で処理をすると、<code class=\"docutils literal notranslate\"><span class=\"pre\">f</span></code> が終端に到達するまで繰り返されます。 したがって、再度 <code class=\"docutils literal notranslate\"><span class=\"pre\">f</span></code> をfor文に与えても何も実行されません。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[2]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">with</span> <span class=\"nb\">open</span><span class=\"p\">(</span><span class=\"s1\">&#39;sample.txt&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;r&#39;</span><span class=\"p\">)</span> <span class=\"k\">as</span> <span class=\"n\">f</span><span class=\"p\">:</span>\n    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s1\">&#39;---- 最初 ----&#39;</span><span class=\"p\">)</span>\n    <span class=\"k\">for</span> <span class=\"n\">line</span> <span class=\"ow\">in</span> <span class=\"n\">f</span><span class=\"p\">:</span>\n        <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">line</span><span class=\"p\">)</span>\n    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s1\">&#39;---- もう一度 ----&#39;</span><span class=\"p\">)</span>\n    <span class=\"k\">for</span> <span class=\"n\">line</span> <span class=\"ow\">in</span> <span class=\"n\">f</span><span class=\"p\">:</span>\n        <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">line</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n---- 最初 ----\nLorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n\nDuis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\n\nExcepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\n\n---- もう一度 ----\n</pre></div></div>\n</div>\n<p>ファイルをfor文によって二度読みたい場合は、 もう一度ファイルをオープンして、ファイルのオブジェクトを新たに生成してください。</p>\n<section id=\"練習\">\n<h3>練習<a class=\"headerlink\" href=\"#練習\" title=\"Link to this heading\">¶</a></h3>\n<p>文字列 <code class=\"docutils literal notranslate\"><span class=\"pre\">name</span></code> をファイル名とするファイルの最後の行を文字列として返す関数 <code class=\"docutils literal notranslate\"><span class=\"pre\">last_line(name)</span></code> を、 ファイルオブジェクトに対するfor文を用いて定義してください。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[3]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">def</span> <span class=\"nf\">last_line</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"p\">):</span>\n    <span class=\"o\">...</span>\n</pre></div>\n</div>\n</div>\n<p>定義ができたら、次のセルを実行して、エラーがでないことを確認してください。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[4]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">assert</span> <span class=\"n\">last_line</span><span class=\"p\">(</span><span class=\"s1\">&#39;sample.txt&#39;</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n<span class=\"ansi-red-fg\">---------------------------------------------------------------------------</span>\n<span class=\"ansi-red-fg\">AssertionError</span>                            Traceback (most recent call last)\nCell <span class=\"ansi-green-fg\">In[4], line 1</span>\n<span class=\"ansi-green-fg\">----&gt; 1</span> <span class=\"ansi-bold\" style=\"color: rgb(0,135,0)\">assert</span> last_line(<span style=\"color: rgb(175,0,0)\">&#39;</span><span style=\"color: rgb(175,0,0)\">sample.txt</span><span style=\"color: rgb(175,0,0)\">&#39;</span>) <span style=\"color: rgb(98,98,98)\">==</span> <span style=\"color: rgb(175,0,0)\">&#39;</span><span style=\"color: rgb(175,0,0)\">Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</span><span class=\"ansi-bold\" style=\"color: rgb(175,95,0)\">\\n</span><span style=\"color: rgb(175,0,0)\">&#39;</span>\n\n<span class=\"ansi-red-fg\">AssertionError</span>:\n</pre></div></div>\n</div>\n</section>\n</section>\n<section id=\"for文とイテラブルとイテレータ\">\n<h2>for文とイテラブルとイテレータ<a class=\"headerlink\" href=\"#for文とイテラブルとイテレータ\" title=\"Link to this heading\">¶</a></h2>\n<p>さて、<a class=\"reference internal\" href=\"../3/3-2.html\"><span class=\"doc\">3-2</span></a>でも示したように、for文は、ファイルオブジェクトを含む様々なオブジェクトに対して繰り返す処理を記述できます （<a class=\"reference internal\" href=\"../1/1-3.html\"><span class=\"doc\">1-3</span></a>で説明があったように、Pythonにおける値はオブジェクトと総称されます。）</p>\n<p>for文によって繰り返すことができるオブジェクトのことを総称して、<strong>イテラブル</strong> (iterable) と呼びます。</p>\n<p>for文が、様々なデータ型をイテラブルとして統一的に扱えるのは、繰り返して取り出す操作を表現する<strong>イテレータ</strong> (iterator) を経由するからです。</p>\n<p>iterateは繰り返すという意味なので、itaratorは繰り返すもの（反復子とも呼ばれる）、iterableは繰り返すことができるもの、という意味です。</p>\n</section>\n<section id=\"iter\">\n<h2><code class=\"docutils literal notranslate\"><span class=\"pre\">iter</span></code><a class=\"headerlink\" href=\"#iter\" title=\"Link to this heading\">¶</a></h2>\n<p>組み込み関数 <code class=\"docutils literal notranslate\"><span class=\"pre\">iter</span></code> は、イテラブルからイテレータを作ります。たとえば、</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[5]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">it</span> <span class=\"o\">=</span> <span class=\"nb\">iter</span><span class=\"p\">([</span><span class=\"mi\">0</span><span class=\"p\">,</span><span class=\"mi\">1</span><span class=\"p\">,</span><span class=\"mi\">2</span><span class=\"p\">])</span>\n</pre></div>\n</div>\n</div>\n<p>この <code class=\"docutils literal notranslate\"><span class=\"pre\">it</span></code> は、<code class=\"docutils literal notranslate\"><span class=\"pre\">0</span></code> <code class=\"docutils literal notranslate\"><span class=\"pre\">1</span></code> <code class=\"docutils literal notranslate\"><span class=\"pre\">2</span></code> を順に取り出すイテレータです。</p>\n<p>このとき、<code class=\"docutils literal notranslate\"><span class=\"pre\">iter</span></code> に渡されるオブジェクトの種類に応じて、適切なイテレータが構成されます。 この仕組みによって、様々なデータ型を統一的に扱えるわけです。</p>\n</section>\n<section id=\"next\">\n<h2><code class=\"docutils literal notranslate\"><span class=\"pre\">next</span></code><a class=\"headerlink\" href=\"#next\" title=\"Link to this heading\">¶</a></h2>\n<p>さて、<code class=\"docutils literal notranslate\"><span class=\"pre\">iter</span></code> が返したイテレータは、どのように使うのでしょうか。</p>\n<p>組み込み関数 <code class=\"docutils literal notranslate\"><span class=\"pre\">next</span></code> は、イテレータに対して繰り返しを1回分先に進める操作を与えます。具体例を見ましょう。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[6]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">it</span> <span class=\"o\">=</span> <span class=\"nb\">iter</span><span class=\"p\">([</span><span class=\"mi\">0</span><span class=\"p\">,</span><span class=\"mi\">1</span><span class=\"p\">,</span><span class=\"mi\">2</span><span class=\"p\">])</span>\n<span class=\"nb\">next</span><span class=\"p\">(</span><span class=\"n\">it</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[6]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n0\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[7]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">next</span><span class=\"p\">(</span><span class=\"n\">it</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[7]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n1\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[8]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">next</span><span class=\"p\">(</span><span class=\"n\">it</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[8]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n2\n</pre></div></div>\n</div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">next(it)</span></code> を呼び出す毎に、<code class=\"docutils literal notranslate\"><span class=\"pre\">it</span></code> から順に要素が取り出されています。</p>\n<p>与えられたイテレータが繰り返しの終端に到達していたときには、<code class=\"docutils literal notranslate\"><span class=\"pre\">StopIteration</span></code> という例外（処理を緊急停止させる割り込み）が発生します。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[9]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">next</span><span class=\"p\">(</span><span class=\"n\">it</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n<span class=\"ansi-red-fg\">---------------------------------------------------------------------------</span>\n<span class=\"ansi-red-fg\">StopIteration</span>                             Traceback (most recent call last)\nCell <span class=\"ansi-green-fg\">In[9], line 1</span>\n<span class=\"ansi-green-fg\">----&gt; 1</span> <span class=\"ansi-yellow-bg\" style=\"color: rgb(0,135,0)\">next</span><span class=\"ansi-yellow-bg\">(</span><span class=\"ansi-yellow-bg\">it</span><span class=\"ansi-yellow-bg\">)</span>\n\n<span class=\"ansi-red-fg\">StopIteration</span>:\n</pre></div></div>\n</div>\n</section>\n<section id=\"for文の仕組み\">\n<h2>for文の仕組み<a class=\"headerlink\" href=\"#for文の仕組み\" title=\"Link to this heading\">¶</a></h2>\n<p>for文は、実は <code class=\"docutils literal notranslate\"><span class=\"pre\">iter</span></code> <code class=\"docutils literal notranslate\"><span class=\"pre\">next</span></code> <code class=\"docutils literal notranslate\"><span class=\"pre\">StopIteration</span></code> を使ったwhile文の形で表現できます。具体的には、</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[10]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">for</span> <span class=\"n\">x</span> <span class=\"ow\">in</span> <span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">,</span><span class=\"mi\">1</span><span class=\"p\">,</span><span class=\"mi\">2</span><span class=\"p\">]:</span>\n    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n0\n1\n2\n</pre></div></div>\n</div>\n<p>このfor文は、次のwhile文と等価です。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[11]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">try</span><span class=\"p\">:</span>\n    <span class=\"n\">it</span> <span class=\"o\">=</span> <span class=\"nb\">iter</span><span class=\"p\">([</span><span class=\"mi\">0</span><span class=\"p\">,</span><span class=\"mi\">1</span><span class=\"p\">,</span><span class=\"mi\">2</span><span class=\"p\">])</span>\n    <span class=\"k\">while</span> <span class=\"kc\">True</span><span class=\"p\">:</span>\n        <span class=\"n\">x</span> <span class=\"o\">=</span> <span class=\"nb\">next</span><span class=\"p\">(</span><span class=\"n\">it</span><span class=\"p\">)</span>\n        <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">)</span>\n<span class=\"k\">except</span> <span class=\"ne\">StopIteration</span><span class=\"p\">:</span>\n    <span class=\"k\">pass</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n0\n1\n2\n</pre></div></div>\n</div>\n<p>このtry-except文は、発生した例外を捉えて、適切に処理するための構文です。 ここでは、発生した <code class=\"docutils literal notranslate\"><span class=\"pre\">StopIteration</span></code> を捉えて、何もせずに（<code class=\"docutils literal notranslate\"><span class=\"pre\">pass</span></code>）次に処理を進めるという意味になります。 結果として、コードセルの実行が成功裡に完了しています。 （例外とtry-except文の詳細は、<a class=\"reference external\" href=\"https://docs.python.org/ja/3/tutorial/errors.html\">公式チュートリアル</a>を参照してください。）</p>\n</section>\n<section id=\"イテレータは特殊なイテラブル\">\n<h2>イテレータは特殊なイテラブル<a class=\"headerlink\" href=\"#イテレータは特殊なイテラブル\" title=\"Link to this heading\">¶</a></h2>\n<p>イテレータ自身も実はイテラブルです。したがって、イテレータをfor文で繰り返すことができます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[12]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">it</span> <span class=\"o\">=</span> <span class=\"nb\">iter</span><span class=\"p\">([</span><span class=\"mi\">0</span><span class=\"p\">,</span><span class=\"mi\">1</span><span class=\"p\">,</span><span class=\"mi\">2</span><span class=\"p\">])</span>\n<span class=\"k\">for</span> <span class=\"n\">x</span> <span class=\"ow\">in</span> <span class=\"n\">it</span><span class=\"p\">:</span>\n    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n0\n1\n2\n</pre></div></div>\n</div>\n<p>しかし、単なるイテラブルではありません。1つのfor文で使い切りのイテラブルです。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[13]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">for</span> <span class=\"n\">x</span> <span class=\"ow\">in</span> <span class=\"n\">it</span><span class=\"p\">:</span>\n    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s1\">&#39;これは実行されない&#39;</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<p>これは、イテレータ <code class=\"docutils literal notranslate\"><span class=\"pre\">it</span></code> に対して <code class=\"docutils literal notranslate\"><span class=\"pre\">iter</span></code> を適用した時に、<code class=\"docutils literal notranslate\"><span class=\"pre\">it</span></code> 自体が返されるという仕組みによって実現されています。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[14]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">it</span> <span class=\"o\">=</span> <span class=\"nb\">iter</span><span class=\"p\">([</span><span class=\"mi\">0</span><span class=\"p\">,</span><span class=\"mi\">1</span><span class=\"p\">,</span><span class=\"mi\">2</span><span class=\"p\">])</span>\n<span class=\"n\">it</span> <span class=\"ow\">is</span> <span class=\"nb\">iter</span><span class=\"p\">(</span><span class=\"n\">it</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[14]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nTrue\n</pre></div></div>\n</div>\n<p>この <code class=\"docutils literal notranslate\"><span class=\"pre\">is</span></code> は、<a class=\"reference internal\" href=\"../2/2-2.html\"><span class=\"doc\">2-2</span></a>に説明がありますが、その両辺が同一オブジェクトかどうかを調べる演算子です。</p>\n<p>最初のfor文の繰り返しによって終端に到達したイテレータ <code class=\"docutils literal notranslate\"><span class=\"pre\">it</span></code> は、その後の <code class=\"docutils literal notranslate\"><span class=\"pre\">next(it)</span></code> において <code class=\"docutils literal notranslate\"><span class=\"pre\">StopIteration</span></code> を発生させ続けます。 したがって、後続するfor文では、繰り返し処理に入ることなく即座に終了するわけです。 上に示したwhile文の形で考えると、わかりやすいでしょう。</p>\n<section id=\"id6\">\n<h3>練習<a class=\"headerlink\" href=\"#id6\" title=\"Link to this heading\">¶</a></h3>\n<p>リストをもらって、そのイテレータを作り、最初の要素だけ取り出した後、 そのイテレータを返す関数 <code class=\"docutils literal notranslate\"><span class=\"pre\">but_first(ls)</span></code> を定義してください。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[15]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">def</span> <span class=\"nf\">but_first</span><span class=\"p\">(</span><span class=\"n\">ls</span><span class=\"p\">):</span>\n    <span class=\"o\">...</span>\n</pre></div>\n</div>\n</div>\n<p>定義ができたら、次のセルを実行して、エラーがでないことを確認してください。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[16]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">it</span> <span class=\"o\">=</span> <span class=\"n\">but_first</span><span class=\"p\">([</span><span class=\"mi\">0</span><span class=\"p\">,</span><span class=\"mi\">2</span><span class=\"p\">,</span><span class=\"mi\">4</span><span class=\"p\">,</span><span class=\"mi\">6</span><span class=\"p\">,</span><span class=\"mi\">8</span><span class=\"p\">])</span>\n<span class=\"k\">assert</span> <span class=\"nb\">type</span><span class=\"p\">(</span><span class=\"n\">it</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"nb\">type</span><span class=\"p\">(</span><span class=\"nb\">iter</span><span class=\"p\">([]))</span> <span class=\"c1\"># type(it) では it は消費されない</span>\n<span class=\"k\">assert</span> <span class=\"nb\">list</span><span class=\"p\">(</span><span class=\"n\">it</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"p\">[</span><span class=\"mi\">2</span><span class=\"p\">,</span><span class=\"mi\">4</span><span class=\"p\">,</span><span class=\"mi\">6</span><span class=\"p\">,</span><span class=\"mi\">8</span><span class=\"p\">]</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n<span class=\"ansi-red-fg\">---------------------------------------------------------------------------</span>\n<span class=\"ansi-red-fg\">AssertionError</span>                            Traceback (most recent call last)\nCell <span class=\"ansi-green-fg\">In[16], line 2</span>\n<span class=\"ansi-green-intense-fg ansi-bold\">      1</span> it <span style=\"color: rgb(98,98,98)\">=</span> but_first([<span style=\"color: rgb(98,98,98)\">0</span>,<span style=\"color: rgb(98,98,98)\">2</span>,<span style=\"color: rgb(98,98,98)\">4</span>,<span style=\"color: rgb(98,98,98)\">6</span>,<span style=\"color: rgb(98,98,98)\">8</span>])\n<span class=\"ansi-green-fg\">----&gt; 2</span> <span class=\"ansi-bold\" style=\"color: rgb(0,135,0)\">assert</span> <span style=\"color: rgb(0,135,0)\">type</span>(it) <span style=\"color: rgb(98,98,98)\">==</span> <span style=\"color: rgb(0,135,0)\">type</span>(<span style=\"color: rgb(0,135,0)\">iter</span>([])) <span style=\"color: rgb(95,135,135)\"># type(it) では it は消費されない</span>\n<span class=\"ansi-green-intense-fg ansi-bold\">      3</span> <span class=\"ansi-bold\" style=\"color: rgb(0,135,0)\">assert</span> <span style=\"color: rgb(0,135,0)\">list</span>(it) <span style=\"color: rgb(98,98,98)\">==</span> [<span style=\"color: rgb(98,98,98)\">2</span>,<span style=\"color: rgb(98,98,98)\">4</span>,<span style=\"color: rgb(98,98,98)\">6</span>,<span style=\"color: rgb(98,98,98)\">8</span>]\n\n<span class=\"ansi-red-fg\">AssertionError</span>:\n</pre></div></div>\n</div>\n</section>\n</section>\n<section id=\"ファイルオブジェクトはイテレータ\">\n<h2>ファイルオブジェクトはイテレータ<a class=\"headerlink\" href=\"#ファイルオブジェクトはイテレータ\" title=\"Link to this heading\">¶</a></h2>\n<p>ファイルオブジェクトは <code class=\"docutils literal notranslate\"><span class=\"pre\">readline</span></code> メソッドによって、一行ずつ消費しながら、行の文字列を取り出せます。 そして、for文で末尾まで繰り返すと、for文で繰り返すことはもうできません。</p>\n<p>ここまで読んだ方は既に気付いているでしょうが、ファイルオブジェクトはイテレータです。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[17]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">f</span> <span class=\"o\">=</span> <span class=\"nb\">open</span><span class=\"p\">(</span><span class=\"s1\">&#39;sample.txt&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;r&#39;</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[18]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">next</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[18]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n&#39;Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\\n&#39;\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[19]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">next</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[19]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n&#39;Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\\n&#39;\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[20]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">next</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[20]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n&#39;Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\\n&#39;\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[21]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">next</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n<span class=\"ansi-red-fg\">---------------------------------------------------------------------------</span>\n<span class=\"ansi-red-fg\">StopIteration</span>                             Traceback (most recent call last)\nCell <span class=\"ansi-green-fg\">In[21], line 1</span>\n<span class=\"ansi-green-fg\">----&gt; 1</span> <span class=\"ansi-yellow-bg\" style=\"color: rgb(0,135,0)\">next</span><span class=\"ansi-yellow-bg\">(</span><span class=\"ansi-yellow-bg\">f</span><span class=\"ansi-yellow-bg\">)</span>\n\n<span class=\"ansi-red-fg\">StopIteration</span>:\n</pre></div></div>\n</div>\n<p>ファイルオブジェクト <code class=\"docutils literal notranslate\"><span class=\"pre\">f</span></code> に対する <code class=\"docutils literal notranslate\"><span class=\"pre\">f.readline()</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">next(f)</span></code> の振舞いは、<code class=\"docutils literal notranslate\"><span class=\"pre\">f</span></code> が終端に到達していないときは同一です。 <code class=\"docutils literal notranslate\"><span class=\"pre\">f</span></code> が終端にあるときは、<code class=\"docutils literal notranslate\"><span class=\"pre\">f.readline()</span></code> は <code class=\"docutils literal notranslate\"><span class=\"pre\">''</span></code> を返しますが、<code class=\"docutils literal notranslate\"><span class=\"pre\">next(f)</span></code> は <code class=\"docutils literal notranslate\"><span class=\"pre\">StopIteration</span></code> を発生させます。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[22]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">close</span><span class=\"p\">()</span>\n</pre></div>\n</div>\n</div>\n</section>\n<section id=\"イテラブルはイテレータではない\">\n<h2>イテラブルはイテレータではない<a class=\"headerlink\" href=\"#イテラブルはイテレータではない\" title=\"Link to this heading\">¶</a></h2>\n<p>イテラブルは一般に、イテレータではありません。 具体的には、リスト・タプル・文字列・辞書はイテラブルですが、イテレータではありません。 <a class=\"reference internal\" href=\"../3/3-2.html\"><span class=\"doc\">3-2</span></a>で紹介した <code class=\"docutils literal notranslate\"><span class=\"pre\">range</span></code> 関数の返す range オブジェクトも、イテラブルですがイテレータではありません。</p>\n<p>したがって、<code class=\"docutils literal notranslate\"><span class=\"pre\">next</span></code> が適用可能ではなく、<code class=\"docutils literal notranslate\"><span class=\"pre\">iter</span></code> の適用によって毎回別のイテレータが返されます。 つまり、これまで見てきたように、複数のfor文で何度も繰り返す処理が実行できます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[23]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">xs</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">,</span><span class=\"mi\">2</span><span class=\"p\">,</span><span class=\"mi\">3</span><span class=\"p\">]</span>\n<span class=\"k\">for</span> <span class=\"n\">x</span> <span class=\"ow\">in</span> <span class=\"n\">xs</span><span class=\"p\">:</span>\n    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">)</span>\n<span class=\"k\">for</span> <span class=\"n\">x</span> <span class=\"ow\">in</span> <span class=\"n\">xs</span><span class=\"p\">:</span>\n    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n1\n2\n3\n1\n2\n3\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[24]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">r</span> <span class=\"o\">=</span> <span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"mi\">3</span><span class=\"p\">)</span>\n<span class=\"k\">for</span> <span class=\"n\">x</span> <span class=\"ow\">in</span> <span class=\"n\">r</span><span class=\"p\">:</span>\n    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">)</span>\n<span class=\"k\">for</span> <span class=\"n\">x</span> <span class=\"ow\">in</span> <span class=\"n\">r</span><span class=\"p\">:</span>\n    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n0\n1\n2\n0\n1\n2\n</pre></div></div>\n</div>\n</section>\n<section id=\"イテレータを返す-enumerate\">\n<h2>イテレータを返す <code class=\"docutils literal notranslate\"><span class=\"pre\">enumerate</span></code><a class=\"headerlink\" href=\"#イテレータを返す-enumerate\" title=\"Link to this heading\">¶</a></h2>\n<p><a class=\"reference internal\" href=\"../3/3-2.html\"><span class=\"doc\">3-2</span></a>で紹介した組み込み関数の <code class=\"docutils literal notranslate\"><span class=\"pre\">enumerate</span></code> は、イテレータを返します。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[25]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">it</span> <span class=\"o\">=</span> <span class=\"nb\">enumerate</span><span class=\"p\">([</span><span class=\"mi\">10</span><span class=\"p\">,</span><span class=\"mi\">20</span><span class=\"p\">,</span><span class=\"mi\">30</span><span class=\"p\">])</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[26]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">next</span><span class=\"p\">(</span><span class=\"n\">it</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[26]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n(0, 10)\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[27]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">for</span> <span class=\"n\">x</span> <span class=\"ow\">in</span> <span class=\"n\">it</span><span class=\"p\">:</span>\n    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n(1, 20)\n(2, 30)\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[28]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">for</span> <span class=\"n\">i</span><span class=\"p\">,</span> <span class=\"n\">c</span> <span class=\"ow\">in</span> <span class=\"nb\">enumerate</span><span class=\"p\">(</span><span class=\"s1\">&#39;ACDB&#39;</span><span class=\"p\">):</span>\n    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">i</span><span class=\"p\">,</span> <span class=\"s1\">&#39;番目の文字 =&#39;</span><span class=\"p\">,</span> <span class=\"n\">c</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n0 番目の文字 = A\n1 番目の文字 = C\n2 番目の文字 = D\n3 番目の文字 = B\n</pre></div></div>\n</div>\n<p>一方、<code class=\"docutils literal notranslate\"><span class=\"pre\">enumerate</span></code> はイテラブルを引数として受け取ります。上の例で、リストも文字列もイテラブルです。</p>\n<p>イテレータもイテラブルなので、<code class=\"docutils literal notranslate\"><span class=\"pre\">enumerate</span></code> の引数になり得ます。 したがって、ファイルオブジェクトも、次のように <code class=\"docutils literal notranslate\"><span class=\"pre\">enumerate</span></code> に与えることができます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[29]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">with</span> <span class=\"nb\">open</span><span class=\"p\">(</span><span class=\"s1\">&#39;sample.txt&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;r&#39;</span><span class=\"p\">)</span> <span class=\"k\">as</span> <span class=\"n\">f</span><span class=\"p\">:</span>\n    <span class=\"k\">for</span> <span class=\"n\">i</span><span class=\"p\">,</span> <span class=\"n\">s</span> <span class=\"ow\">in</span> <span class=\"nb\">enumerate</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"p\">):</span>\n        <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">i</span><span class=\"p\">,</span> <span class=\"s1\">&#39;行目:&#39;</span><span class=\"p\">)</span>\n        <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">s</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n0 行目:\nLorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n\n1 行目:\nDuis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\n\n2 行目:\nExcepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\n\n</pre></div></div>\n</div>\n<p>変数 <code class=\"docutils literal notranslate\"><span class=\"pre\">i</span></code> は <code class=\"docutils literal notranslate\"><span class=\"pre\">0</span></code> から順に増えていきます。変数 <code class=\"docutils literal notranslate\"><span class=\"pre\">s</span></code> には各行の文字列が代入されます。 <code class=\"docutils literal notranslate\"><span class=\"pre\">i</span></code> は <code class=\"docutils literal notranslate\"><span class=\"pre\">0</span></code> から始まりますが、各行の行番号と考えられます。</p>\n</section>\n<section id=\"▲イテラブルとイテレータの定義\">\n<h2>▲イテラブルとイテレータの定義<a class=\"headerlink\" href=\"#▲イテラブルとイテレータの定義\" title=\"Link to this heading\">¶</a></h2>\n<p>イテラブルとイテレータの形式的な定義をまとめます。</p>\n<ul class=\"simple\">\n<li><p>イテラブル：</p>\n<ul>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">iter</span></code> を適用可能。 <code class=\"docutils literal notranslate\"><span class=\"pre\">__iter__</span></code> メソッドを持つ。</p></li>\n</ul>\n</li>\n<li><p>イテレータ：</p>\n<ul>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">next</span></code> を適用可能。 <code class=\"docutils literal notranslate\"><span class=\"pre\">__next__</span></code> メソッドを持つ。</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">iter</span></code> を適用したとき、引数のオブジェクトをそのまま返す。</p></li>\n</ul>\n</li>\n</ul>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">iter(x)</span></code> は <code class=\"docutils literal notranslate\"><span class=\"pre\">x.__iter__()</span></code> と等価なので、<code class=\"docutils literal notranslate\"><span class=\"pre\">iter</span></code> を適用可能であることと、<code class=\"docutils literal notranslate\"><span class=\"pre\">__iter__</span></code> メソッドを持つことは同義です。 同様に、<code class=\"docutils literal notranslate\"><span class=\"pre\">next(x)</span></code> は <code class=\"docutils literal notranslate\"><span class=\"pre\">x.__next__()</span></code> と等価なので、 <code class=\"docutils literal notranslate\"><span class=\"pre\">next</span></code> を適用可能であることと、<code class=\"docutils literal notranslate\"><span class=\"pre\">__next__</span></code> メソッドを持つことは同義です。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">__iter__</span></code> メソッドと <code class=\"docutils literal notranslate\"><span class=\"pre\">__next__</span></code> メソッドについては、<a class=\"reference internal\" href=\"../6/6-3.html\"><span class=\"doc\">6-3</span></a>で改めて説明します。</p>\n</section>\n<section id=\"練習の解答\">\n<h2>練習の解答<a class=\"headerlink\" href=\"#練習の解答\" title=\"Link to this heading\">¶</a></h2>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[30]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">def</span> <span class=\"nf\">last_line</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"p\">):</span>\n    <span class=\"k\">with</span> <span class=\"nb\">open</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"p\">,</span> <span class=\"s1\">&#39;r&#39;</span><span class=\"p\">,</span> <span class=\"n\">encoding</span><span class=\"o\">=</span><span class=\"s1\">&#39;utf-8&#39;</span><span class=\"p\">)</span> <span class=\"k\">as</span> <span class=\"n\">f</span><span class=\"p\">:</span>\n        <span class=\"k\">for</span> <span class=\"n\">line</span> <span class=\"ow\">in</span> <span class=\"n\">f</span><span class=\"p\">:</span>\n            <span class=\"k\">pass</span>\n    <span class=\"k\">return</span> <span class=\"n\">line</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[31]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">def</span> <span class=\"nf\">last_line</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"p\">):</span>\n    <span class=\"n\">f</span> <span class=\"o\">=</span> <span class=\"nb\">open</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"p\">,</span> <span class=\"s1\">&#39;r&#39;</span><span class=\"p\">,</span> <span class=\"n\">encoding</span><span class=\"o\">=</span><span class=\"s1\">&#39;utf-8&#39;</span><span class=\"p\">)</span>\n    <span class=\"k\">for</span> <span class=\"n\">line</span> <span class=\"ow\">in</span> <span class=\"n\">f</span><span class=\"p\">:</span>\n        <span class=\"k\">pass</span>\n    <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">close</span><span class=\"p\">()</span>\n    <span class=\"k\">return</span> <span class=\"n\">line</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[32]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">def</span> <span class=\"nf\">but_first</span><span class=\"p\">(</span><span class=\"n\">ls</span><span class=\"p\">):</span>\n    <span class=\"n\">it</span> <span class=\"o\">=</span> <span class=\"nb\">iter</span><span class=\"p\">(</span><span class=\"n\">ls</span><span class=\"p\">)</span>\n    <span class=\"nb\">next</span><span class=\"p\">(</span><span class=\"n\">it</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span> <span class=\"n\">it</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[ ]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span>\n</pre></div>\n</div>\n</div>\n</section>\n</section>\n\n\n          </div>\n          \n        </div>\n      </div>\n      <div class=\"sphinxsidebar\" role=\"navigation\" aria-label=\"Main\">\n        <div class=\"sphinxsidebarwrapper\">\n<h1 class=\"logo\"><a href=\"../index.html\">Pythonプログラミング入門</a></h1>\n\n\n\n\n\n\n\n\n<p>\n  <a style=\"font-family: sans-serif; font-size: smaller; background: linear-gradient(to top, #353535 0%, #141414 100%); -webkit-font-smoothing: antialiased; font-weight: normal; text-shadow: rgb(0 0 0 / 40%) 0 -1px 0; padding: 2px 6px; color: #fff; text-decoration: none; border-radius: 4px; border: 1px solid #0d0d0d; box-shadow: inset 0 1px 1px 0 #8f8f8f;\" href=\"https://github.com/utokyo-ipp/utokyo-ipp.github.io\">View on GitHub</a>\n</p><p>\n  <a style=\"font-family: sans-serif; font-size: smaller; background: linear-gradient(to top, #ff1e00 0%, #de1e00 100%); -webkit-font-smoothing: antialiased; font-weight: normal; text-shadow: rgb(0 0 0 / 40%) 0 -1px 0; padding: 2px 6px; color: #fff; text-decoration: none; border-radius: 4px; border: 1px solid #0d0d0d; box-shadow: inset 0 1px 1px 0 #ff8e70;\" href=\"https://utokyo-ipp.github.io/IPP_textbook.pdf\">View PDF</a>\n</p><p>\n  <a style=\"border-bottom: none;\" href=\"https://colab.research.google.com/github/utokyo-ipp/utokyo-ipp.github.io/blob/master/colab/4/4-2.ipynb\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Google Colaboratory\"></a>\n</p><h3>Navigation</h3>\n<ul class=\"current\">\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../1/1-0.html\">1-0. Colaboratory (Colab) の使い方</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../1/1-1.html\">1-1. 数値演算</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../1/1-2.html\">1-2. 変数と関数の基礎</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../1/1-3.html\">1-3. 論理・比較演算と条件分岐の基礎</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../1/1-4.html\">1-4. テストとデバッグ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../2/2-1.html\">2-1. 文字列 (string)</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../2/2-2.html\">2-2. リスト (list)</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../2/2-3.html\">2-3. 条件分岐</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../3/3-1.html\">3-1. 辞書 (dictionary)</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../3/3-2.html\">3-2. 繰り返し</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../3/3-3.html\">3-3. 関数</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"4-1.html\">4-1. ファイル入出力の基本</a></li>\n<li class=\"toctree-l1 current\"><a class=\"current reference internal\" href=\"#\">4-2. イテラブルとイテレータ</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#for文による繰り返しとファイルオブジェクト\">for文による繰り返しとファイルオブジェクト</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#for文とイテラブルとイテレータ\">for文とイテラブルとイテレータ</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#iter\"><code class=\"docutils literal notranslate\"><span class=\"pre\">iter</span></code></a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#next\"><code class=\"docutils literal notranslate\"><span class=\"pre\">next</span></code></a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#for文の仕組み\">for文の仕組み</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#イテレータは特殊なイテラブル\">イテレータは特殊なイテラブル</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#ファイルオブジェクトはイテレータ\">ファイルオブジェクトはイテレータ</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#イテラブルはイテレータではない\">イテラブルはイテレータではない</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#イテレータを返す-enumerate\">イテレータを返す <code class=\"docutils literal notranslate\"><span class=\"pre\">enumerate</span></code></a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#▲イテラブルとイテレータの定義\">▲イテラブルとイテレータの定義</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#練習の解答\">練習の解答</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"4-3.html\">4-3. ディレクトリと木構造</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../5/5-1.html\">5-1. モジュールの使い方</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../5/5-2.html\">5-2. モジュールの作り方</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../5/5-3.html\">5-3. NumPyライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../6/6-1.html\">6-1. 内包表記</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../6/6-2.html\">6-2. 高階関数</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../6/6-3.html\">6-3. クラス</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../7/7-1.html\">7-1. pandasライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../7/7-2.html\">7-2. scikit-learnライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/1-jupyter-notebook.html\">▲Jupyter Notebook の使い方</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/2-set.html\">▲セット (set)</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/3-recursion.html\">▲再帰</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/3-visualization.html\">▲簡単なデータの可視化</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/4-csv.html\">▲CSVファイルの入出力</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/5-bokeh.html\">▲Bokehライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/5-command.html\">▲Pythonスクリプトとコマンドライン実行</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/5-matplotlib.html\">▲Matplotlibライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/5-re.html\">▲正規表現</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../index_of_terms.html\">索引</a></li>\n</ul>\n\n<div class=\"relations\">\n<h3>Related Topics</h3>\n<ul>\n  <li><a href=\"../index.html\">Documentation overview</a><ul>\n      <li>Previous: <a href=\"4-1.html\" title=\"previous chapter\">4-1. ファイル入出力の基本</a></li>\n      <li>Next: <a href=\"4-3.html\" title=\"next chapter\">4-3. ディレクトリと木構造</a></li>\n  </ul></li>\n</ul>\n</div>\n<search id=\"searchbox\" style=\"display: none\" role=\"search\">\n  <h3 id=\"searchlabel\">Quick search</h3>\n    <div class=\"searchformwrapper\">\n    <form class=\"search\" action=\"../search.html\" method=\"get\">\n      <input type=\"text\" name=\"q\" aria-labelledby=\"searchlabel\" autocomplete=\"off\" autocorrect=\"off\" autocapitalize=\"off\" spellcheck=\"false\"/>\n      <input type=\"submit\" value=\"Go\" />\n    </form>\n    </div>\n</search>\n<script>document.getElementById('searchbox').style.display = \"block\"</script>\n\n\n\n\n\n\n\n\n        </div>\n      </div>\n      <div class=\"clearer\"></div>\n    </div>\n    <div class=\"footer\">\n      &#169;2020–2024, 東京大学 数理・情報教育研究センター (CC BY-NC-ND 4.0).\n      \n      |\n      Powered by <a href=\"https://www.sphinx-doc.org/\">Sphinx 8.0.2</a>\n      &amp; <a href=\"https://alabaster.readthedocs.io\">Alabaster 1.0.0</a>\n      \n    </div>\n\n    \n\n    \n    <script>\n\n      var _gaq = _gaq || [];\n      _gaq.push(['_setAccount', 'G-8M0RXGPPSR']);\n      _gaq.push(['_setDomainName', 'none']);\n      _gaq.push(['_setAllowLinker', true]);\n      _gaq.push(['_trackPageview']);\n\n      (function() {\n        var ga = document.createElement('script'); ga.async = true;\n        ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'https://www') + '.google-analytics.com/ga.js';\n        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);\n      })();\n\n    </script>\n    \n  </body>\n</html>"
  },
  {
    "path": "docs/4/4-3.html",
    "content": "<!DOCTYPE html>\n\n<html lang=\"jp\" data-content_root=\"../\">\n  <head>\n    <meta charset=\"utf-8\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" /><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n\n    <!-- Google tag (gtag.js) -->\n    <script async src=\"https://www.googletagmanager.com/gtag/js?id=G-8M0RXGPPSR\"></script>\n    <script>\n        window.dataLayer = window.dataLayer || [];\n        function gtag(){dataLayer.push(arguments);}\n        gtag('js', new Date());\n        gtag('config', 'G-8M0RXGPPSR');\n    </script>\n    \n    <title>4-3. ディレクトリと木構造 &#8212; Pythonプログラミング入門  documentation</title>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/pygments.css?v=d1102ebc\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/basic.css?v=c058f7c8\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/alabaster.css?v=27fed22d\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/nbsphinx-code-cells.css\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/custom.css?v=1a1aa8dd\" />\n    <script src=\"../_static/documentation_options.js?v=3ff7d7a7\"></script>\n    <script src=\"../_static/doctools.js?v=9a2dae69\"></script>\n    <script src=\"../_static/sphinx_highlight.js?v=dc90522c\"></script>\n    <script crossorigin=\"anonymous\" integrity=\"sha256-Ae2Vz/4ePdIu6ZyI/5ZGsYnb+m0JlOmKPjt6XZ9JJkA=\" src=\"https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.4/require.min.js\"></script>\n    <script>window.MathJax = {\"tex\": {\"inlineMath\": [[\"$\", \"$\"], [\"\\\\(\", \"\\\\)\"]], \"processEscapes\": true}, \"options\": {\"ignoreHtmlClass\": \"tex2jax_ignore|mathjax_ignore|document\", \"processHtmlClass\": \"tex2jax_process|mathjax_process|math|output_area\"}}</script>\n    <script defer=\"defer\" src=\"https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js\"></script>\n    <link rel=\"index\" title=\"Index\" href=\"../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../search.html\" />\n    <link rel=\"next\" title=\"5-1. モジュールの使い方\" href=\"../5/5-1.html\" />\n    <link rel=\"prev\" title=\"4-2. イテラブルとイテレータ\" href=\"4-2.html\" />\n   \n  <link rel=\"stylesheet\" href=\"../_static/custom.css\" type=\"text/css\" />\n  \n\n  \n  \n\n  </head><body>\n  \n\n    <div class=\"document\">\n      <div class=\"documentwrapper\">\n        <div class=\"bodywrapper\">\n          \n\n          <div class=\"body\" role=\"main\">\n            \n  <section id=\"4-3.-ディレクトリと木構造\">\n<h1>4-3. ディレクトリと木構造<a class=\"headerlink\" href=\"#4-3.-ディレクトリと木構造\" title=\"Link to this heading\">¶</a></h1>\n<p>ディレクトリと木構造について説明します。 この内容はPythonというよりも、Windows・macOS・Linuxなどの一般的なOSに共通する概念です。 なお、Colaboratoryは、仮想マシン上のLinuxの上で動作しています。</p>\n<section id=\"ディレクトリと階層構造\">\n<h2>ディレクトリと階層構造<a class=\"headerlink\" href=\"#ディレクトリと階層構造\" title=\"Link to this heading\">¶</a></h2>\n<p>OS上でのファイルは一般に、階層的に管理されています。 ファイルが置かれる場所のことを、<strong>ディレクトリ</strong>と呼びます。 ファイルをまとめることから、<strong>フォルダ</strong>とも呼ばれます。</p>\n<p><a class=\"reference external\" href=\"https://utokyo-ipp.github.io/IPP_textbook.zip\">zip版の教材</a>を、<code class=\"docutils literal notranslate\"><span class=\"pre\">IPP_textbook</span></code> ディレクトリに展開すると、次のような階層構造になります。</p>\n<div class=\"highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>IPP_textbook\n├── 1\n│   ├── 1-0.ipynb\n│   ├── 1-1.ipynb\n│   ├── 1-2.ipynb\n│   ├── 1-3.ipynb\n│   ├── 1-4.ipynb\n│   ├── colab1.png\n│   ├── colab2.png\n│   ├── colab3.png\n│   ├── colab4.png\n│   └── colaboratory.png\n├── 2\n│   ├── 2-1.ipynb\n│   ├── 2-2.ipynb\n│   └── 2-3.ipynb\n├── 3\n│   ├── 3-1.ipynb\n│   ├── 3-2.ipynb\n│   └── 3-3.ipynb\n├── 4\n│   ├── 4-1.ipynb\n│   ├── 4-2.ipynb\n│   ├── 4-3.ipynb\n│   ├── sample.txt\n│   ├── shift_jis.txt\n│   ├── test.txt\n│   ├── text\n│   │   └── novel.txt\n│   └── utf-8.txt\n├── 5\n│   ├── 5-1.ipynb\n│   ├── 5-2.ipynb\n│   ├── 5-3.ipynb\n│   ├── factorial.py\n│   └── fig\n│       ├── py_conv_1.png\n│       ├── py_conv_2.png\n│       ├── py_open_1.png\n│       └── py_open_2.png\n├── 6\n│   ├── 6-1.ipynb\n│   ├── 6-2.ipynb\n│   ├── 6-3.ipynb\n│   └── jugemu.txt\n├── 7\n│   ├── 7-1.ipynb\n│   ├── 7-2.ipynb\n│   └── iris.csv\n├── appendix\n│   ├── 1-jupyter-notebook.ipynb\n│   ├── 2-set.ipynb\n│   ├── 3-recursion.ipynb\n│   ├── 3-visualization.ipynb\n│   ├── 4-csv.ipynb\n│   ├── 5-bokeh.ipynb\n│   ├── 5-command.ipynb\n│   ├── 5-matplotlib.ipynb\n│   ├── 5-re.ipynb\n│   ├── argsprint.py\n│   ├── B1S.xml\n│   ├── fig\n│   │   ├── argsprint.png\n│   │   ├── console_in_browser.png\n│   │   ├── py_conv_1.png\n│   │   ├── py_conv_2.png\n│   │   ├── py_open_1.png\n│   │   ├── py_open_2.png\n│   │   ├── sample_py_browser.png\n│   │   ├── sample_py_mac_1.png\n│   │   ├── sample_py_mac_2.png\n│   │   ├── sample_py_mac_3.png\n│   │   ├── sample_py_win_1.png\n│   │   ├── sample_py_win2_1.png\n│   │   ├── sample_py_win2_2.png\n│   │   ├── sample_py_win2_3.png\n│   │   ├── sample_py_win_2.png\n│   │   ├── sample_py_win_3.png\n│   │   └── terminal_in_menu.png\n│   ├── sample.py\n│   ├── small.csv\n│   ├── text-sample.txt\n│   ├── tokyo-july-temps.csv\n│   └── tokyo-temps.csv\n├── index.ipynb\n├── index_of_terms.ipynb\n└── LICENSE\n</pre></div>\n</div>\n<p>ここで、末端にあるものがファイルであり、末端以外にあるものがディレクトリ（フォルダ）です。</p>\n</section>\n<section id=\"カレントワーキングディレクトリ\">\n<h2>カレントワーキングディレクトリ<a class=\"headerlink\" href=\"#カレントワーキングディレクトリ\" title=\"Link to this heading\">¶</a></h2>\n<p>プログラムは、必ずどこかのディレクトリで動いています。 このプログラムが動作しているディレクトリのことを、<strong>ワーキングディレクトリ</strong>（もしくは<strong>作業ディレクトリ</strong>）と呼びます。 通例、特にWindowsやmacOSでは、何らかのファイルをクリックしてアプリケーションが起動したとき、その開いたファイルのある場所がワーキングディレクトリになります。</p>\n<p>ワーキングディレクトリは、プログラムの実行中に変更できます。 Python上では <a class=\"reference external\" href=\"https://docs.python.org/ja/3/library/os.html#os.chdir\">os.chdir</a> を使うことで変更できます。</p>\n<p>プログラム実行中の現在のワーキングディレクトリのことを、<strong>カレントワーキングディレクトリ</strong>、もしくは単に<strong>カレントディレクトリ</strong>と呼びます。 カレントディレクトリは頻繁に利用するので、 <code class=\"docutils literal notranslate\"><span class=\"pre\">.</span></code> という特別な記号によって表現できます。</p>\n</section>\n<section id=\"パス\">\n<h2>パス<a class=\"headerlink\" href=\"#パス\" title=\"Link to this heading\">¶</a></h2>\n<p>カレントディレクトリに置かれているファイルは、ファイル名を指定するだけで開くことができます。 だから、4-1で示したように、カレントディレクトリにある <code class=\"docutils literal notranslate\"><span class=\"pre\">sample.txt</span></code> は、ファイル名を指定するだけで開けます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[1]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">open</span><span class=\"p\">(</span><span class=\"s1\">&#39;sample.txt&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;r&#39;</span><span class=\"p\">,</span> <span class=\"n\">encoding</span><span class=\"o\">=</span><span class=\"s1\">&#39;utf-8&#39;</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[1]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n&lt;_io.TextIOWrapper name=&#39;sample.txt&#39; mode=&#39;r&#39; encoding=&#39;utf-8&#39;&gt;\n</pre></div></div>\n</div>\n<p>一方、それ以外の場所にあるファイルについては、そのファイルのディレクトリまで含めて指定しなければ、開くことができません。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[2]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">open</span><span class=\"p\">(</span><span class=\"s1\">&#39;novel.txt&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;r&#39;</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n<span class=\"ansi-red-fg\">---------------------------------------------------------------------------</span>\n<span class=\"ansi-red-fg\">FileNotFoundError</span>                         Traceback (most recent call last)\nCell <span class=\"ansi-green-fg\">In[2], line 1</span>\n<span class=\"ansi-green-fg\">----&gt; 1</span> <span class=\"ansi-yellow-bg\" style=\"color: rgb(0,135,0)\">open</span><span class=\"ansi-yellow-bg\">(</span><span class=\"ansi-yellow-bg\" style=\"color: rgb(175,0,0)\">&#39;</span><span class=\"ansi-yellow-bg\" style=\"color: rgb(175,0,0)\">novel.txt</span><span class=\"ansi-yellow-bg\" style=\"color: rgb(175,0,0)\">&#39;</span><span class=\"ansi-yellow-bg\">,</span><span class=\"ansi-yellow-bg\"> </span><span class=\"ansi-yellow-bg\" style=\"color: rgb(175,0,0)\">&#39;</span><span class=\"ansi-yellow-bg\" style=\"color: rgb(175,0,0)\">r</span><span class=\"ansi-yellow-bg\" style=\"color: rgb(175,0,0)\">&#39;</span><span class=\"ansi-yellow-bg\">)</span>\n\nFile <span class=\"ansi-green-fg\">~/Projects/utpython/lib/python3.12/site-packages/IPython/core/interactiveshell.py:324</span>, in <span class=\"ansi-cyan-fg\">_modified_open</span><span class=\"ansi-blue-fg\">(file, *args, **kwargs)</span>\n<span class=\"ansi-green-intense-fg ansi-bold\">    317</span> <span class=\"ansi-bold\" style=\"color: rgb(0,135,0)\">if</span> file <span class=\"ansi-bold\" style=\"color: rgb(175,0,255)\">in</span> {<span style=\"color: rgb(98,98,98)\">0</span>, <span style=\"color: rgb(98,98,98)\">1</span>, <span style=\"color: rgb(98,98,98)\">2</span>}:\n<span class=\"ansi-green-intense-fg ansi-bold\">    318</span>     <span class=\"ansi-bold\" style=\"color: rgb(0,135,0)\">raise</span> <span class=\"ansi-bold\" style=\"color: rgb(215,95,95)\">ValueError</span>(\n<span class=\"ansi-green-intense-fg ansi-bold\">    319</span>         <span style=\"color: rgb(175,0,0)\">f</span><span style=\"color: rgb(175,0,0)\">&#34;</span><span style=\"color: rgb(175,0,0)\">IPython won</span><span style=\"color: rgb(175,0,0)\">&#39;</span><span style=\"color: rgb(175,0,0)\">t let you open fd=</span><span class=\"ansi-bold\" style=\"color: rgb(175,95,135)\">{</span>file<span class=\"ansi-bold\" style=\"color: rgb(175,95,135)\">}</span><span style=\"color: rgb(175,0,0)\"> by default </span><span style=\"color: rgb(175,0,0)\">&#34;</span>\n<span class=\"ansi-green-intense-fg ansi-bold\">    320</span>         <span style=\"color: rgb(175,0,0)\">&#34;</span><span style=\"color: rgb(175,0,0)\">as it is likely to crash IPython. If you know what you are doing, </span><span style=\"color: rgb(175,0,0)\">&#34;</span>\n<span class=\"ansi-green-intense-fg ansi-bold\">    321</span>         <span style=\"color: rgb(175,0,0)\">&#34;</span><span style=\"color: rgb(175,0,0)\">you can use builtins</span><span style=\"color: rgb(175,0,0)\">&#39;</span><span style=\"color: rgb(175,0,0)\"> open.</span><span style=\"color: rgb(175,0,0)\">&#34;</span>\n<span class=\"ansi-green-intense-fg ansi-bold\">    322</span>     )\n<span class=\"ansi-green-fg\">--&gt; 324</span> <span class=\"ansi-bold\" style=\"color: rgb(0,135,0)\">return</span> <span class=\"ansi-yellow-bg\">io_open</span><span class=\"ansi-yellow-bg\">(</span><span class=\"ansi-yellow-bg\">file</span><span class=\"ansi-yellow-bg\">,</span><span class=\"ansi-yellow-bg\"> </span><span class=\"ansi-yellow-bg\" style=\"color: rgb(98,98,98)\">*</span><span class=\"ansi-yellow-bg\">args</span><span class=\"ansi-yellow-bg\">,</span><span class=\"ansi-yellow-bg\"> </span><span class=\"ansi-yellow-bg\" style=\"color: rgb(98,98,98)\">*</span><span class=\"ansi-yellow-bg\" style=\"color: rgb(98,98,98)\">*</span><span class=\"ansi-yellow-bg\">kwargs</span><span class=\"ansi-yellow-bg\">)</span>\n\n<span class=\"ansi-red-fg\">FileNotFoundError</span>: [Errno 2] No such file or directory: &#39;novel.txt&#39;\n</pre></div></div>\n</div>\n<p>カレントディレクトリに存在しない <code class=\"docutils literal notranslate\"><span class=\"pre\">novel.txt</span></code> を開こうとしたので <code class=\"docutils literal notranslate\"><span class=\"pre\">FileNotFoundError</span></code> が生じました。 <code class=\"docutils literal notranslate\"><span class=\"pre\">novel.txt</span></code> は、<code class=\"docutils literal notranslate\"><span class=\"pre\">text</span></code> というディレクトリの中にあるので、それ明示するために、<code class=\"docutils literal notranslate\"><span class=\"pre\">/</span></code> で区切って、次のように指定します。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[3]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">open</span><span class=\"p\">(</span><span class=\"s1\">&#39;text/novel.txt&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;r&#39;</span><span class=\"p\">,</span> <span class=\"n\">encoding</span><span class=\"o\">=</span><span class=\"s1\">&#39;utf-8&#39;</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[3]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n&lt;_io.TextIOWrapper name=&#39;text/novel.txt&#39; mode=&#39;r&#39; encoding=&#39;utf-8&#39;&gt;\n</pre></div></div>\n</div>\n<p>実は、カレントディレクトリにあるファイルが、ファイル名の指定だけで開けるのは、自動的に <code class=\"docutils literal notranslate\"><span class=\"pre\">./</span></code> が補われていたからでした。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">open</span></code> の第1引数に渡す文字列ような、ファイルやディレクトリの場所を指定する表記を、<strong>パス</strong>と呼びます。 パス（経路）と呼ぶのは、<code class=\"docutils literal notranslate\"><span class=\"pre\">/</span></code> 区切りで1歩ずつ次に進むディレクトリを指定することに由来しています。</p>\n<p>パスを記述する際、ルートディレクトリは <code class=\"docutils literal notranslate\"><span class=\"pre\">/</span></code> で表されます。 ルートディレクトリから始まるパスを、<strong>絶対パス</strong>と呼びます。 一方、カレントディレクトリからのパスを、<strong>相対パス</strong>と呼びます。 パス表記において <code class=\"docutils literal notranslate\"><span class=\"pre\">/</span></code> 以外から始まる場合は、自動的に先頭に <code class=\"docutils literal notranslate\"><span class=\"pre\">./</span></code> が補われて、相対パスとして扱われます。</p>\n<p>さて、<code class=\"docutils literal notranslate\"><span class=\"pre\">./text/</span></code> というパス表記は、カレントディレクトリにある一段下の <code class=\"docutils literal notranslate\"><span class=\"pre\">text</span></code> ディレクトリに進むことに対応します。 これに、一段上のディレクトリを表す <code class=\"docutils literal notranslate\"><span class=\"pre\">..</span></code> を組み合わせることで、より柔軟にパスを指定できます。</p>\n<p>たとえば、<code class=\"docutils literal notranslate\"><span class=\"pre\">./text/../</span></code> は <code class=\"docutils literal notranslate\"><span class=\"pre\">./</span></code> と同じディレクトリを指します。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[4]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">with</span> <span class=\"nb\">open</span><span class=\"p\">(</span><span class=\"s1\">&#39;sample.txt&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;r&#39;</span><span class=\"p\">,</span> <span class=\"n\">encoding</span><span class=\"o\">=</span><span class=\"s1\">&#39;utf-8&#39;</span><span class=\"p\">)</span> <span class=\"k\">as</span> <span class=\"n\">f</span><span class=\"p\">:</span>\n    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">read</span><span class=\"p\">(),</span> <span class=\"n\">end</span><span class=\"o\">=</span><span class=\"s1\">&#39;&#39;</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nLorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\nDuis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\nExcepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[5]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">with</span> <span class=\"nb\">open</span><span class=\"p\">(</span><span class=\"s1\">&#39;./text/../sample.txt&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;r&#39;</span><span class=\"p\">,</span> <span class=\"n\">encoding</span><span class=\"o\">=</span><span class=\"s1\">&#39;utf-8&#39;</span><span class=\"p\">)</span> <span class=\"k\">as</span> <span class=\"n\">f</span><span class=\"p\">:</span>\n    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">read</span><span class=\"p\">(),</span> <span class=\"n\">end</span><span class=\"o\">=</span><span class=\"s1\">&#39;&#39;</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nLorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\nDuis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\nExcepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\n</pre></div></div>\n</div>\n<p>また、カレントディレクトリを <code class=\"docutils literal notranslate\"><span class=\"pre\">./text/</span></code> に変化させた後に、<code class=\"docutils literal notranslate\"><span class=\"pre\">sample.txt</span></code> を開くときには、<code class=\"docutils literal notranslate\"><span class=\"pre\">../sample.txt</span></code> と指定することができます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[6]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"kn\">import</span> <span class=\"nn\">os</span>\n<span class=\"n\">os</span><span class=\"o\">.</span><span class=\"n\">chdir</span><span class=\"p\">(</span><span class=\"s1\">&#39;./text&#39;</span><span class=\"p\">)</span> <span class=\"c1\"># 1段下の text に行く</span>\n<span class=\"k\">with</span> <span class=\"nb\">open</span><span class=\"p\">(</span><span class=\"s1\">&#39;../sample.txt&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;r&#39;</span><span class=\"p\">,</span> <span class=\"n\">encoding</span><span class=\"o\">=</span><span class=\"s1\">&#39;utf-8&#39;</span><span class=\"p\">)</span> <span class=\"k\">as</span> <span class=\"n\">f</span><span class=\"p\">:</span>\n    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">read</span><span class=\"p\">())</span>\n<span class=\"n\">os</span><span class=\"o\">.</span><span class=\"n\">chdir</span><span class=\"p\">(</span><span class=\"s1\">&#39;..&#39;</span><span class=\"p\">)</span> <span class=\"c1\"># 元のディレクトリに戻る</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nLorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\nDuis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\nExcepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\n\n</pre></div></div>\n</div>\n</section>\n<section id=\"木構造\">\n<h2>木構造<a class=\"headerlink\" href=\"#木構造\" title=\"Link to this heading\">¶</a></h2>\n<p>ディレクトリの階層構造は、木を逆さにしたような形になっています。 このことから、<strong>木構造</strong>もしくは単に<strong>木</strong>（tree）と呼ばれます。</p>\n<p>木構造の観点で、最上位の階層は<strong>根</strong>（root）と呼ばれ、末端は<strong>葉</strong>（leaf）と呼ばれます。 木構造を成す要素（ここではファイルやディレクトリ）は，一般に<strong>ノード</strong>（node）と呼ばれます。</p>\n<p>階層構造における包含関係は、木構造では親子関係と呼ばれます。 たとえば、教材のディレクトリ階層においては、ディレクトリ <code class=\"docutils literal notranslate\"><span class=\"pre\">IPP_textbook</span></code> の中に、ディレクトリ <code class=\"docutils literal notranslate\"><span class=\"pre\">1</span></code> とファイル <code class=\"docutils literal notranslate\"><span class=\"pre\">LICENSE</span></code> が含まれています。 木構造の観点で、<code class=\"docutils literal notranslate\"><span class=\"pre\">IPP_textbook</span></code> は <code class=\"docutils literal notranslate\"><span class=\"pre\">1</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">LICENSE</span></code> の<strong>親</strong>（parent）と呼ばれ、逆に <code class=\"docutils literal notranslate\"><span class=\"pre\">1</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">LICENSE</span></code> は <code class=\"docutils literal notranslate\"><span class=\"pre\">IPP_textbook</span></code> の<strong>子</strong>（child）と呼ばれます。 また、<code class=\"docutils literal notranslate\"><span class=\"pre\">1</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">LICENSE</span></code> のような共通の親を持つノード集合は、<strong>兄弟</strong>（sibling）と呼ばれます。\n親子関係の推移閉包として、<strong>祖先</strong>（ancestor）や<strong>子孫</strong>（descendant）も定義されます。</p>\n</section>\n<section id=\"データ表現としての木構造\">\n<h2>データ表現としての木構造<a class=\"headerlink\" href=\"#データ表現としての木構造\" title=\"Link to this heading\">¶</a></h2>\n<p>OSのディレクトリ構造に限らず、木構造はデータ表現として広く用いられます。 Pythonにおいても、入れ子のデータ構造は、木構造と見做せます。</p>\n<p>たとえば、教材のディレクトリ構造を、辞書の入れ子で表現すると、次のようになります．</p>\n<div class=\"highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>IPP_textbook = {\n  &#39;1&#39;: {&#39;1-0.ipynb&#39;: Data(&#39;1-0.ipynb&#39;),\n        ...,\n        &#39;colaboratory.png&#39;, Data(&#39;colaboratory.png&#39;)},\n  &#39;2&#39;: {&#39;2-1.ipynb&#39;: Data(&#39;2-1.ipynb&#39;),\n        &#39;2-1.ipynb&#39;: Data(&#39;2-2.ipynb&#39;),\n        &#39;2-3.ipynb&#39;: Data(&#39;2-3.ipynb&#39;)},\n  ...\n  &#39;5&#39;: {&#39;5-1.ipynb&#39;: Data(&#39;5-1.ipynb&#39;),\n        &#39;5-1.ipynb&#39;: Data(&#39;5-2.ipynb&#39;),\n        &#39;5-3.ipynb&#39;: Data(&#39;5-3.ipynb&#39;),\n        &#39;factorial.py&#39;, Data(&#39;factorial.py&#39;),\n        &#39;fig&#39;: {&#39;py_conv_1.png&#39;: Data(&#39;py_conv_1.png&#39;),\n                &#39;py_conv_2.png&#39;: Data(&#39;py_conv_2.png&#39;),\n                &#39;py_open_1.png&#39;: Data(&#39;py_open_1.png&#39;),\n                &#39;py_open_2.png&#39;: Data(&#39;py_open_2.png&#39;)}\n       },\n   ...\n}\n</pre></div>\n</div>\n<p>ここで <code class=\"docutils literal notranslate\"><span class=\"pre\">Data(...)</span></code> は、<code class=\"docutils literal notranslate\"><span class=\"pre\">...</span></code> のファイルデータを意味しています。</p>\n<p>このデータ表現では、パス <code class=\"docutils literal notranslate\"><span class=\"pre\">IPP_textbook/2/2-2.ipynb</span></code> へのアクセスが、<code class=\"docutils literal notranslate\"><span class=\"pre\">IPP_textbook['2']['2-2.ipynb']</span></code> と表現されます。</p>\n<p>データを階層的に管理する際は、データ全体を木構造として捉えて表現することを考えましょう。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[ ]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span>\n</pre></div>\n</div>\n</div>\n</section>\n</section>\n\n\n          </div>\n          \n        </div>\n      </div>\n      <div class=\"sphinxsidebar\" role=\"navigation\" aria-label=\"Main\">\n        <div class=\"sphinxsidebarwrapper\">\n<h1 class=\"logo\"><a href=\"../index.html\">Pythonプログラミング入門</a></h1>\n\n\n\n\n\n\n\n\n<p>\n  <a style=\"font-family: sans-serif; font-size: smaller; background: linear-gradient(to top, #353535 0%, #141414 100%); -webkit-font-smoothing: antialiased; font-weight: normal; text-shadow: rgb(0 0 0 / 40%) 0 -1px 0; padding: 2px 6px; color: #fff; text-decoration: none; border-radius: 4px; border: 1px solid #0d0d0d; box-shadow: inset 0 1px 1px 0 #8f8f8f;\" href=\"https://github.com/utokyo-ipp/utokyo-ipp.github.io\">View on GitHub</a>\n</p><p>\n  <a style=\"font-family: sans-serif; font-size: smaller; background: linear-gradient(to top, #ff1e00 0%, #de1e00 100%); -webkit-font-smoothing: antialiased; font-weight: normal; text-shadow: rgb(0 0 0 / 40%) 0 -1px 0; padding: 2px 6px; color: #fff; text-decoration: none; border-radius: 4px; border: 1px solid #0d0d0d; box-shadow: inset 0 1px 1px 0 #ff8e70;\" href=\"https://utokyo-ipp.github.io/IPP_textbook.pdf\">View PDF</a>\n</p><p>\n  <a style=\"border-bottom: none;\" href=\"https://colab.research.google.com/github/utokyo-ipp/utokyo-ipp.github.io/blob/master/colab/4/4-3.ipynb\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Google Colaboratory\"></a>\n</p><h3>Navigation</h3>\n<ul class=\"current\">\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../1/1-0.html\">1-0. Colaboratory (Colab) の使い方</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../1/1-1.html\">1-1. 数値演算</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../1/1-2.html\">1-2. 変数と関数の基礎</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../1/1-3.html\">1-3. 論理・比較演算と条件分岐の基礎</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../1/1-4.html\">1-4. テストとデバッグ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../2/2-1.html\">2-1. 文字列 (string)</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../2/2-2.html\">2-2. リスト (list)</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../2/2-3.html\">2-3. 条件分岐</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../3/3-1.html\">3-1. 辞書 (dictionary)</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../3/3-2.html\">3-2. 繰り返し</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../3/3-3.html\">3-3. 関数</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"4-1.html\">4-1. ファイル入出力の基本</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"4-2.html\">4-2. イテラブルとイテレータ</a></li>\n<li class=\"toctree-l1 current\"><a class=\"current reference internal\" href=\"#\">4-3. ディレクトリと木構造</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#ディレクトリと階層構造\">ディレクトリと階層構造</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#カレントワーキングディレクトリ\">カレントワーキングディレクトリ</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#パス\">パス</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#木構造\">木構造</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#データ表現としての木構造\">データ表現としての木構造</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../5/5-1.html\">5-1. モジュールの使い方</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../5/5-2.html\">5-2. モジュールの作り方</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../5/5-3.html\">5-3. NumPyライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../6/6-1.html\">6-1. 内包表記</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../6/6-2.html\">6-2. 高階関数</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../6/6-3.html\">6-3. クラス</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../7/7-1.html\">7-1. pandasライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../7/7-2.html\">7-2. scikit-learnライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/1-jupyter-notebook.html\">▲Jupyter Notebook の使い方</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/2-set.html\">▲セット (set)</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/3-recursion.html\">▲再帰</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/3-visualization.html\">▲簡単なデータの可視化</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/4-csv.html\">▲CSVファイルの入出力</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/5-bokeh.html\">▲Bokehライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/5-command.html\">▲Pythonスクリプトとコマンドライン実行</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/5-matplotlib.html\">▲Matplotlibライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/5-re.html\">▲正規表現</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../index_of_terms.html\">索引</a></li>\n</ul>\n\n<div class=\"relations\">\n<h3>Related Topics</h3>\n<ul>\n  <li><a href=\"../index.html\">Documentation overview</a><ul>\n      <li>Previous: <a href=\"4-2.html\" title=\"previous chapter\">4-2. イテラブルとイテレータ</a></li>\n      <li>Next: <a href=\"../5/5-1.html\" title=\"next chapter\">5-1. モジュールの使い方</a></li>\n  </ul></li>\n</ul>\n</div>\n<search id=\"searchbox\" style=\"display: none\" role=\"search\">\n  <h3 id=\"searchlabel\">Quick search</h3>\n    <div class=\"searchformwrapper\">\n    <form class=\"search\" action=\"../search.html\" method=\"get\">\n      <input type=\"text\" name=\"q\" aria-labelledby=\"searchlabel\" autocomplete=\"off\" autocorrect=\"off\" autocapitalize=\"off\" spellcheck=\"false\"/>\n      <input type=\"submit\" value=\"Go\" />\n    </form>\n    </div>\n</search>\n<script>document.getElementById('searchbox').style.display = \"block\"</script>\n\n\n\n\n\n\n\n\n        </div>\n      </div>\n      <div class=\"clearer\"></div>\n    </div>\n    <div class=\"footer\">\n      &#169;2020–2024, 東京大学 数理・情報教育研究センター (CC BY-NC-ND 4.0).\n      \n      |\n      Powered by <a href=\"https://www.sphinx-doc.org/\">Sphinx 8.0.2</a>\n      &amp; <a href=\"https://alabaster.readthedocs.io\">Alabaster 1.0.0</a>\n      \n    </div>\n\n    \n\n    \n    <script>\n\n      var _gaq = _gaq || [];\n      _gaq.push(['_setAccount', 'G-8M0RXGPPSR']);\n      _gaq.push(['_setDomainName', 'none']);\n      _gaq.push(['_setAllowLinker', true]);\n      _gaq.push(['_trackPageview']);\n\n      (function() {\n        var ga = document.createElement('script'); ga.async = true;\n        ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'https://www') + '.google-analytics.com/ga.js';\n        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);\n      })();\n\n    </script>\n    \n  </body>\n</html>"
  },
  {
    "path": "docs/5/5-1.html",
    "content": "<!DOCTYPE html>\n\n<html lang=\"jp\" data-content_root=\"../\">\n  <head>\n    <meta charset=\"utf-8\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" /><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n\n    <!-- Google tag (gtag.js) -->\n    <script async src=\"https://www.googletagmanager.com/gtag/js?id=G-8M0RXGPPSR\"></script>\n    <script>\n        window.dataLayer = window.dataLayer || [];\n        function gtag(){dataLayer.push(arguments);}\n        gtag('js', new Date());\n        gtag('config', 'G-8M0RXGPPSR');\n    </script>\n    \n    <title>5-1. モジュールの使い方 &#8212; Pythonプログラミング入門  documentation</title>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/pygments.css?v=d1102ebc\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/basic.css?v=c058f7c8\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/alabaster.css?v=27fed22d\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/nbsphinx-code-cells.css\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/custom.css?v=1a1aa8dd\" />\n    <script src=\"../_static/documentation_options.js?v=3ff7d7a7\"></script>\n    <script src=\"../_static/doctools.js?v=9a2dae69\"></script>\n    <script src=\"../_static/sphinx_highlight.js?v=dc90522c\"></script>\n    <script crossorigin=\"anonymous\" integrity=\"sha256-Ae2Vz/4ePdIu6ZyI/5ZGsYnb+m0JlOmKPjt6XZ9JJkA=\" src=\"https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.4/require.min.js\"></script>\n    <script>window.MathJax = {\"tex\": {\"inlineMath\": [[\"$\", \"$\"], [\"\\\\(\", \"\\\\)\"]], \"processEscapes\": true}, \"options\": {\"ignoreHtmlClass\": \"tex2jax_ignore|mathjax_ignore|document\", \"processHtmlClass\": \"tex2jax_process|mathjax_process|math|output_area\"}}</script>\n    <script defer=\"defer\" src=\"https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js\"></script>\n    <link rel=\"index\" title=\"Index\" href=\"../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../search.html\" />\n    <link rel=\"next\" title=\"5-2. モジュールの作り方\" href=\"5-2.html\" />\n    <link rel=\"prev\" title=\"4-3. ディレクトリと木構造\" href=\"../4/4-3.html\" />\n   \n  <link rel=\"stylesheet\" href=\"../_static/custom.css\" type=\"text/css\" />\n  \n\n  \n  \n\n  </head><body>\n  \n\n    <div class=\"document\">\n      <div class=\"documentwrapper\">\n        <div class=\"bodywrapper\">\n          \n\n          <div class=\"body\" role=\"main\">\n            \n  <section id=\"5-1.-モジュールの使い方\">\n<h1>5-1. モジュールの使い方<a class=\"headerlink\" href=\"#5-1.-モジュールの使い方\" title=\"Link to this heading\">¶</a></h1>\n<p>モジュールの使い方について説明します。</p>\n<p>参考</p>\n<ul class=\"simple\">\n<li><p><a class=\"reference external\" href=\"https://docs.python.org/ja/3/reference/import.html\">https://docs.python.org/ja/3/reference/import.html</a></p></li>\n<li><p><a class=\"reference external\" href=\"https://docs.python.org/ja/3/tutorial/modules.html\">https://docs.python.org/ja/3/tutorial/modules.html</a></p></li>\n<li><p><a class=\"reference external\" href=\"https://docs.python.org/ja/3/library/math.html\">https://docs.python.org/ja/3/library/math.html</a></p></li>\n</ul>\n<section id=\"モジュールのインポート\">\n<h2>モジュールのインポート<a class=\"headerlink\" href=\"#モジュールのインポート\" title=\"Link to this heading\">¶</a></h2>\n<p>Pythonでは特別な関数や値をまとめたもの（これを<strong>モジュール</strong>といいます）を使うために、<code class=\"docutils literal notranslate\"><span class=\"pre\">import</span></code> という文を使います（第1回 (1-1) においても説明しました）。具体的には次のように記述します。</p>\n<div class=\"highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>import モジュール名\n</pre></div>\n</div>\n<p>たとえば、数学関係の機能をまとめた <code class=\"docutils literal notranslate\"><span class=\"pre\">math</span></code> というモジュールがあります。これらの関数や値を使いたいときは、以下のようにして <code class=\"docutils literal notranslate\"><span class=\"pre\">math</span></code> モジュールを <code class=\"docutils literal notranslate\"><span class=\"pre\">import</span></code> で<strong>インポート</strong>します。そうすると、<code class=\"docutils literal notranslate\"><span class=\"pre\">math.関数名</span></code> という形で関数を用いることができます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[1]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"kn\">import</span> <span class=\"nn\">math</span><span class=\"c1\"># importは大抵セルの一番上に記述します</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">math</span><span class=\"o\">.</span><span class=\"n\">sqrt</span><span class=\"p\">(</span><span class=\"mi\">2</span><span class=\"p\">))</span> <span class=\"c1\"># sqrt は平方根を計算する関数</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">math</span><span class=\"o\">.</span><span class=\"n\">pi</span><span class=\"p\">)</span> <span class=\"c1\"># πの値</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">math</span><span class=\"o\">.</span><span class=\"n\">sin</span><span class=\"p\">(</span><span class=\"n\">math</span><span class=\"o\">.</span><span class=\"n\">pi</span><span class=\"o\">/</span><span class=\"mi\">4</span><span class=\"p\">))</span> <span class=\"c1\"># sin関数</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">math</span><span class=\"o\">.</span><span class=\"n\">cos</span><span class=\"p\">(</span><span class=\"mi\">0</span><span class=\"p\">))</span> <span class=\"c1\"># cos関数</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">math</span><span class=\"o\">.</span><span class=\"n\">log</span><span class=\"p\">(</span><span class=\"mi\">32</span><span class=\"p\">,</span><span class=\"mi\">2</span><span class=\"p\">))</span> <span class=\"c1\"># 2を底とする32の対数（texで記述すると、$\\log_2 32$）</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n1.4142135623730951\n3.141592653589793\n0.7071067811865475\n1.0\n5.0\n</pre></div></div>\n</div>\n<p>上の例では、<code class=\"docutils literal notranslate\"><span class=\"pre\">math</span></code> モジュールの中の関数や値を使用しています。</p>\n<p>注意しなければならないのは、モジュールの中の関数を使う場合には、</p>\n<div class=\"highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>モジュール名.モジュールの中の関数名\n</pre></div>\n</div>\n<p>とする必要があるということです。</p>\n<p>モジュールの中の値（たとえば <code class=\"docutils literal notranslate\"><span class=\"pre\">math.pi</span></code>）も同様です。</p>\n<p>なお、複数の関数名をコンマ <code class=\"docutils literal notranslate\"><span class=\"pre\">,</span></code> で区切って並べて同時にインポートすることもできます。</p>\n</section>\n<section id=\"from\">\n<h2><code class=\"docutils literal notranslate\"><span class=\"pre\">from</span></code><a class=\"headerlink\" href=\"#from\" title=\"Link to this heading\">¶</a></h2>\n<p>モジュール内で定義されている関数を「モジュールの中の関数名」のようにして、「モジュール名.」を付けずにそのままの名前で、モジュールの読み込み元のプログラムで使いたい場合には、<code class=\"docutils literal notranslate\"><span class=\"pre\">from</span></code> を以下のように書くことで利用することができます。</p>\n<div class=\"highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>from モジュール名 import モジュールの中の関数名\n</pre></div>\n</div>\n<p>たとえば、次のようになります。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[2]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"kn\">from</span> <span class=\"nn\">math</span> <span class=\"kn\">import</span> <span class=\"n\">sqrt</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">sqrt</span><span class=\"p\">(</span><span class=\"mi\">2</span><span class=\"p\">))</span> <span class=\"c1\"># sqrt は平方根を計算する関数</span>\n<span class=\"kn\">from</span> <span class=\"nn\">math</span> <span class=\"kn\">import</span> <span class=\"n\">pi</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">pi</span><span class=\"p\">)</span> <span class=\"c1\"># πの値</span>\n<span class=\"kn\">from</span> <span class=\"nn\">math</span> <span class=\"kn\">import</span> <span class=\"n\">sin</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">sin</span><span class=\"p\">(</span><span class=\"n\">math</span><span class=\"o\">.</span><span class=\"n\">pi</span><span class=\"o\">/</span><span class=\"mi\">4</span><span class=\"p\">))</span> <span class=\"c1\"># sin関数</span>\n<span class=\"kn\">from</span> <span class=\"nn\">math</span> <span class=\"kn\">import</span> <span class=\"n\">cos</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">cos</span><span class=\"p\">(</span><span class=\"mi\">0</span><span class=\"p\">))</span> <span class=\"c1\"># cos関数</span>\n<span class=\"kn\">from</span> <span class=\"nn\">math</span> <span class=\"kn\">import</span> <span class=\"n\">log</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">log</span><span class=\"p\">(</span><span class=\"mi\">32</span><span class=\"p\">,</span><span class=\"mi\">2</span><span class=\"p\">))</span> <span class=\"c1\"># 2を底とする32の対数（texで記述すると、$\\log_2 32$）</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n1.4142135623730951\n3.141592653589793\n0.7071067811865475\n1.0\n5.0\n</pre></div></div>\n</div>\n<p>この方法では、関数ごとに <code class=\"docutils literal notranslate\"><span class=\"pre\">from</span></code> を用いてインポートする必要があります。</p>\n<p>なお、関数だけではなく、グローバル変数や後に学習するクラスも、 このようにしてインポートすることができます。</p>\n<p>別の方法として、<strong>ワイルドカード</strong> <code class=\"docutils literal notranslate\"><span class=\"pre\">*</span></code> を利用する方法もあります。</p>\n<div class=\"highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>from math import *\n</pre></div>\n</div>\n<p>この方法ではアンダースコア <code class=\"docutils literal notranslate\"><span class=\"pre\">_</span></code> で始まるものを除いた全ての名前が読み込まれるため、明示的に名前を指定する必要はありません。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[3]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"kn\">from</span> <span class=\"nn\">math</span> <span class=\"kn\">import</span> <span class=\"o\">*</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">factorial</span><span class=\"p\">(</span><span class=\"mi\">5</span><span class=\"p\">))</span> <span class=\"c1\"># 5 の階乗 # import mathを使う場合、math.factorial(5)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">floor</span><span class=\"p\">(</span><span class=\"mf\">2.31</span><span class=\"p\">))</span> <span class=\"c1\"># 2.31以下の最大の整数  # import mathを使う場合、math.floor(2.31)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">e</span><span class=\"p\">)</span> <span class=\"c1\"># ネイピア数 # import mathを使う場合、math.e</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n120\n2\n2.718281828459045\n</pre></div></div>\n</div>\n<p>ただしこの方法は推奨されていません。理由は読み込んだモジュール内の未知の名前とプログラム内の名前が衝突する可能性があるためです。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[4]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">pi</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;パイ&#39;</span> <span class=\"c1\"># piという変数に文字列「パイ」を代入する</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">pi</span><span class=\"p\">)</span>\n<span class=\"kn\">from</span> <span class=\"nn\">math</span> <span class=\"kn\">import</span> <span class=\"o\">*</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">pi</span><span class=\"p\">)</span> <span class=\"c1\"># mathモジュールのpiの値で上書きされる（衝突）</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nパイ\n3.141592653589793\n</pre></div></div>\n</div>\n</section>\n<section id=\"as\">\n<h2><code class=\"docutils literal notranslate\"><span class=\"pre\">as</span></code><a class=\"headerlink\" href=\"#as\" title=\"Link to this heading\">¶</a></h2>\n<p>モジュール名が長すぎるなどの理由から別の名前としたい場合は、<code class=\"docutils literal notranslate\"><span class=\"pre\">as</span></code> を利用する方法もあります。 たとえば、5-3において学習するNumPyというライブラリは <code class=\"docutils literal notranslate\"><span class=\"pre\">numpy</span></code> モジュールとして提供されていますが、 次のように、 <code class=\"docutils literal notranslate\"><span class=\"pre\">numpy</span></code> を <code class=\"docutils literal notranslate\"><span class=\"pre\">np</span></code> という略称で使うことがあります。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[5]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"kn\">import</span> <span class=\"nn\">numpy</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">numpy</span><span class=\"o\">.</span><span class=\"n\">ones</span><span class=\"p\">((</span><span class=\"mi\">3</span><span class=\"p\">,</span> <span class=\"mi\">5</span><span class=\"p\">)))</span> <span class=\"c1\"># 3×5の行列を表示</span>\n<span class=\"kn\">import</span> <span class=\"nn\">numpy</span> <span class=\"k\">as</span> <span class=\"nn\">np</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">ones</span><span class=\"p\">((</span><span class=\"mi\">3</span><span class=\"p\">,</span> <span class=\"mi\">5</span><span class=\"p\">)))</span> <span class=\"c1\"># np という短い名称で同じ関数を利用する</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n[[1. 1. 1. 1. 1.]\n [1. 1. 1. 1. 1.]\n [1. 1. 1. 1. 1.]]\n[[1. 1. 1. 1. 1.]\n [1. 1. 1. 1. 1.]\n [1. 1. 1. 1. 1.]]\n</pre></div></div>\n</div>\n<p>個々の関数ごとに別の名前を付けることもできます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[6]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"kn\">import</span> <span class=\"nn\">math</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">math</span><span class=\"o\">.</span><span class=\"n\">factorial</span><span class=\"p\">(</span><span class=\"mi\">5</span><span class=\"p\">))</span> <span class=\"c1\"># 階乗を求める関数factorial # 5の階乗</span>\n<span class=\"kn\">from</span> <span class=\"nn\">math</span> <span class=\"kn\">import</span> <span class=\"n\">factorial</span> <span class=\"k\">as</span> <span class=\"n\">fact</span> <span class=\"c1\"># fact という名前でmath.factorialを使用したい</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">fact</span><span class=\"p\">(</span><span class=\"mi\">5</span><span class=\"p\">))</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n120\n120\n</pre></div></div>\n</div>\n</section>\n<section id=\"練習\">\n<h2>練習<a class=\"headerlink\" href=\"#練習\" title=\"Link to this heading\">¶</a></h2>\n<p>第1回では、数学関数を以下のようにインポートし、<code class=\"docutils literal notranslate\"><span class=\"pre\">math.sqrt()</span></code> のようにして、数学関数や数学関係の変数を利用していました。</p>\n<div class=\"highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>import math\nprint(math.sqrt(2))\nprint(math.sin(math.pi))\n</pre></div>\n</div>\n<p>以下のセルを、モジュール名を付けないでこれらの関数や変数を参照できるように変更してください。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[7]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"kn\">import</span> <span class=\"nn\">...</span>\n<span class=\"o\">...</span>\n\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">sqrt</span><span class=\"p\">(</span><span class=\"mi\">2</span><span class=\"p\">))</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">sin</span><span class=\"p\">(</span><span class=\"n\">pi</span><span class=\"p\">))</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n<span class=\"ansi-cyan-fg\">  Cell </span><span class=\"ansi-green-fg\">In[7], line 1</span>\n<span class=\"ansi-red-fg\">    import ...</span>\n           ^\n<span class=\"ansi-red-fg\">SyntaxError</span><span class=\"ansi-red-fg\">:</span> invalid syntax\n\n</pre></div></div>\n</div>\n</section>\n<section id=\"練習の解答\">\n<h2>練習の解答<a class=\"headerlink\" href=\"#練習の解答\" title=\"Link to this heading\">¶</a></h2>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">from</span></code> を使ってモジュールを指定、参照する関数を <code class=\"docutils literal notranslate\"><span class=\"pre\">import</span></code> でインポートしてください。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[8]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"kn\">from</span> <span class=\"nn\">math</span> <span class=\"kn\">import</span> <span class=\"n\">sqrt</span><span class=\"p\">,</span> <span class=\"n\">sin</span><span class=\"p\">,</span> <span class=\"n\">pi</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">sqrt</span><span class=\"p\">(</span><span class=\"mi\">2</span><span class=\"p\">))</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">sin</span><span class=\"p\">(</span><span class=\"n\">pi</span><span class=\"p\">))</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n1.4142135623730951\n1.2246467991473532e-16\n</pre></div></div>\n</div>\n</section>\n</section>\n\n\n          </div>\n          \n        </div>\n      </div>\n      <div class=\"sphinxsidebar\" role=\"navigation\" aria-label=\"Main\">\n        <div class=\"sphinxsidebarwrapper\">\n<h1 class=\"logo\"><a href=\"../index.html\">Pythonプログラミング入門</a></h1>\n\n\n\n\n\n\n\n\n<p>\n  <a style=\"font-family: sans-serif; font-size: smaller; background: linear-gradient(to top, #353535 0%, #141414 100%); -webkit-font-smoothing: antialiased; font-weight: normal; text-shadow: rgb(0 0 0 / 40%) 0 -1px 0; padding: 2px 6px; color: #fff; text-decoration: none; border-radius: 4px; border: 1px solid #0d0d0d; box-shadow: inset 0 1px 1px 0 #8f8f8f;\" href=\"https://github.com/utokyo-ipp/utokyo-ipp.github.io\">View on GitHub</a>\n</p><p>\n  <a style=\"font-family: sans-serif; font-size: smaller; background: linear-gradient(to top, #ff1e00 0%, #de1e00 100%); -webkit-font-smoothing: antialiased; font-weight: normal; text-shadow: rgb(0 0 0 / 40%) 0 -1px 0; padding: 2px 6px; color: #fff; text-decoration: none; border-radius: 4px; border: 1px solid #0d0d0d; box-shadow: inset 0 1px 1px 0 #ff8e70;\" href=\"https://utokyo-ipp.github.io/IPP_textbook.pdf\">View PDF</a>\n</p><p>\n  <a style=\"border-bottom: none;\" href=\"https://colab.research.google.com/github/utokyo-ipp/utokyo-ipp.github.io/blob/master/colab/5/5-1.ipynb\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Google Colaboratory\"></a>\n</p><h3>Navigation</h3>\n<ul class=\"current\">\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../1/1-0.html\">1-0. Colaboratory (Colab) の使い方</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../1/1-1.html\">1-1. 数値演算</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../1/1-2.html\">1-2. 変数と関数の基礎</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../1/1-3.html\">1-3. 論理・比較演算と条件分岐の基礎</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../1/1-4.html\">1-4. テストとデバッグ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../2/2-1.html\">2-1. 文字列 (string)</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../2/2-2.html\">2-2. リスト (list)</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../2/2-3.html\">2-3. 条件分岐</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../3/3-1.html\">3-1. 辞書 (dictionary)</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../3/3-2.html\">3-2. 繰り返し</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../3/3-3.html\">3-3. 関数</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../4/4-1.html\">4-1. ファイル入出力の基本</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../4/4-2.html\">4-2. イテラブルとイテレータ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../4/4-3.html\">4-3. ディレクトリと木構造</a></li>\n<li class=\"toctree-l1 current\"><a class=\"current reference internal\" href=\"#\">5-1. モジュールの使い方</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#モジュールのインポート\">モジュールのインポート</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#from\"><code class=\"docutils literal notranslate\"><span class=\"pre\">from</span></code></a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#as\"><code class=\"docutils literal notranslate\"><span class=\"pre\">as</span></code></a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#練習\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#練習の解答\">練習の解答</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"5-2.html\">5-2. モジュールの作り方</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"5-3.html\">5-3. NumPyライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../6/6-1.html\">6-1. 内包表記</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../6/6-2.html\">6-2. 高階関数</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../6/6-3.html\">6-3. クラス</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../7/7-1.html\">7-1. pandasライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../7/7-2.html\">7-2. scikit-learnライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/1-jupyter-notebook.html\">▲Jupyter Notebook の使い方</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/2-set.html\">▲セット (set)</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/3-recursion.html\">▲再帰</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/3-visualization.html\">▲簡単なデータの可視化</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/4-csv.html\">▲CSVファイルの入出力</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/5-bokeh.html\">▲Bokehライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/5-command.html\">▲Pythonスクリプトとコマンドライン実行</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/5-matplotlib.html\">▲Matplotlibライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/5-re.html\">▲正規表現</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../index_of_terms.html\">索引</a></li>\n</ul>\n\n<div class=\"relations\">\n<h3>Related Topics</h3>\n<ul>\n  <li><a href=\"../index.html\">Documentation overview</a><ul>\n      <li>Previous: <a href=\"../4/4-3.html\" title=\"previous chapter\">4-3. ディレクトリと木構造</a></li>\n      <li>Next: <a href=\"5-2.html\" title=\"next chapter\">5-2. モジュールの作り方</a></li>\n  </ul></li>\n</ul>\n</div>\n<search id=\"searchbox\" style=\"display: none\" role=\"search\">\n  <h3 id=\"searchlabel\">Quick search</h3>\n    <div class=\"searchformwrapper\">\n    <form class=\"search\" action=\"../search.html\" method=\"get\">\n      <input type=\"text\" name=\"q\" aria-labelledby=\"searchlabel\" autocomplete=\"off\" autocorrect=\"off\" autocapitalize=\"off\" spellcheck=\"false\"/>\n      <input type=\"submit\" value=\"Go\" />\n    </form>\n    </div>\n</search>\n<script>document.getElementById('searchbox').style.display = \"block\"</script>\n\n\n\n\n\n\n\n\n        </div>\n      </div>\n      <div class=\"clearer\"></div>\n    </div>\n    <div class=\"footer\">\n      &#169;2020–2024, 東京大学 数理・情報教育研究センター (CC BY-NC-ND 4.0).\n      \n      |\n      Powered by <a href=\"https://www.sphinx-doc.org/\">Sphinx 8.0.2</a>\n      &amp; <a href=\"https://alabaster.readthedocs.io\">Alabaster 1.0.0</a>\n      \n    </div>\n\n    \n\n    \n    <script>\n\n      var _gaq = _gaq || [];\n      _gaq.push(['_setAccount', 'G-8M0RXGPPSR']);\n      _gaq.push(['_setDomainName', 'none']);\n      _gaq.push(['_setAllowLinker', true]);\n      _gaq.push(['_trackPageview']);\n\n      (function() {\n        var ga = document.createElement('script'); ga.async = true;\n        ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'https://www') + '.google-analytics.com/ga.js';\n        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);\n      })();\n\n    </script>\n    \n  </body>\n</html>"
  },
  {
    "path": "docs/5/5-2.html",
    "content": "<!DOCTYPE html>\n\n<html lang=\"jp\" data-content_root=\"../\">\n  <head>\n    <meta charset=\"utf-8\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" /><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n\n    <!-- Google tag (gtag.js) -->\n    <script async src=\"https://www.googletagmanager.com/gtag/js?id=G-8M0RXGPPSR\"></script>\n    <script>\n        window.dataLayer = window.dataLayer || [];\n        function gtag(){dataLayer.push(arguments);}\n        gtag('js', new Date());\n        gtag('config', 'G-8M0RXGPPSR');\n    </script>\n    \n    <title>5-2. モジュールの作り方 &#8212; Pythonプログラミング入門  documentation</title>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/pygments.css?v=d1102ebc\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/basic.css?v=c058f7c8\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/alabaster.css?v=27fed22d\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/nbsphinx-code-cells.css\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/custom.css?v=1a1aa8dd\" />\n    <script src=\"../_static/documentation_options.js?v=3ff7d7a7\"></script>\n    <script src=\"../_static/doctools.js?v=9a2dae69\"></script>\n    <script src=\"../_static/sphinx_highlight.js?v=dc90522c\"></script>\n    <script crossorigin=\"anonymous\" integrity=\"sha256-Ae2Vz/4ePdIu6ZyI/5ZGsYnb+m0JlOmKPjt6XZ9JJkA=\" src=\"https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.4/require.min.js\"></script>\n    <script>window.MathJax = {\"tex\": {\"inlineMath\": [[\"$\", \"$\"], [\"\\\\(\", \"\\\\)\"]], \"processEscapes\": true}, \"options\": {\"ignoreHtmlClass\": \"tex2jax_ignore|mathjax_ignore|document\", \"processHtmlClass\": \"tex2jax_process|mathjax_process|math|output_area\"}}</script>\n    <script defer=\"defer\" src=\"https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js\"></script>\n    <link rel=\"index\" title=\"Index\" href=\"../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../search.html\" />\n    <link rel=\"next\" title=\"5-3. NumPyライブラリ\" href=\"5-3.html\" />\n    <link rel=\"prev\" title=\"5-1. モジュールの使い方\" href=\"5-1.html\" />\n   \n  <link rel=\"stylesheet\" href=\"../_static/custom.css\" type=\"text/css\" />\n  \n\n  \n  \n\n  </head><body>\n  \n\n    <div class=\"document\">\n      <div class=\"documentwrapper\">\n        <div class=\"bodywrapper\">\n          \n\n          <div class=\"body\" role=\"main\">\n            \n  <section id=\"5-2.-モジュールの作り方\">\n<h1>5-2. モジュールの作り方<a class=\"headerlink\" href=\"#5-2.-モジュールの作り方\" title=\"Link to this heading\">¶</a></h1>\n<p>モジュールの作り方について説明します。</p>\n<p>参考</p>\n<ul class=\"simple\">\n<li><p><a class=\"reference external\" href=\"https://docs.python.org/ja/3/tutorial/modules.html\">https://docs.python.org/ja/3/tutorial/modules.html</a></p></li>\n<li><p><a class=\"reference external\" href=\"https://docs.python.org/ja/3/reference/import.html\">https://docs.python.org/ja/3/reference/import.html</a></p></li>\n</ul>\n<p>Pythonではプログラムを<strong>モジュール</strong>という単位で、複数のファイルに分割することができます。 通例、一度定義した便利な関数などを別のプログラムで再利用するときには、再利用される部分をモジュールとして切り出します。 プログラムが大きくなると、このように複数のファイルに分割した方が開発や保守が簡単になります。</p>\n<section id=\"モジュールファイル\">\n<h2>モジュールファイル<a class=\"headerlink\" href=\"#モジュールファイル\" title=\"Link to this heading\">¶</a></h2>\n<p>本授業で扱ってきたノートブックファイル（拡張子 <code class=\"docutils literal notranslate\"><span class=\"pre\">.ipynb</span></code>）は、コードセル（Codeセル）にPythonソースコード、Markdownセルに文書を持ち、内部的に出力結果も保存しています。 一方、モジュールファイル（拡張子 <code class=\"docutils literal notranslate\"><span class=\"pre\">.py</span></code>）は、Pythonソースコードのみを含んだファイルです。</p>\n<p>モジュールファイルを作るときには、Jupyter Notebook におけるコードセルの内容のみをファイルに記述することになります。</p>\n<p>モジュールファイルの文字コードはUTF-8であることが<a class=\"reference external\" href=\"https://www.python.org/dev/peps/pep-0008/#source-file-encoding\">公式に推奨されています</a>。 原則としてUTF-8でエンコードして保存してください。</p>\n<section id=\"ノートブックファイルをモジュールファイルに変換する\">\n<h3>ノートブックファイルをモジュールファイルに変換する<a class=\"headerlink\" href=\"#ノートブックファイルをモジュールファイルに変換する\" title=\"Link to this heading\">¶</a></h3>\n<p>本授業で利用しているノートブックファイルを <code class=\"docutils literal notranslate\"><span class=\"pre\">.py</span></code> としてセーブするには、 「ファイル」メニューの「.py をダウンロード」項目を選択します。</p>\n<p>そうすると、コードセルだけがプログラム行として有効になり、その他の行はコメントアウトされたモジュールファイルがダウンロードできます。 ダウンロード先はブラウザによって定まりますが、ダウンロードフォルダになることが一般的でしょう。</p>\n<p>この方法では、全てのコードセルの内容を一度に実行するプログラムとして保存されます。 ノートブックのようにセル単位の実行するわけではないことに注意する必要があります。</p>\n</section>\n<section id=\"モジュールファイルをアップロードする\">\n<h3>モジュールファイルをアップロードする<a class=\"headerlink\" href=\"#モジュールファイルをアップロードする\" title=\"Link to this heading\">¶</a></h3>\n<p>次に、ダウンロードしたモジュールファイルをColaboratoryで使うには、 Colaboratoryの実行環境の中のファイルシステムのカレントディレクトリに モジュールファイルをアップロードする必要があります。 このためには、以下のセルを実行してください。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[1]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"kn\">import</span> <span class=\"nn\">sys</span>\n<span class=\"k\">if</span> <span class=\"s1\">&#39;google.colab&#39;</span> <span class=\"ow\">in</span> <span class=\"n\">sys</span><span class=\"o\">.</span><span class=\"n\">modules</span><span class=\"p\">:</span>\n    <span class=\"kn\">from</span> <span class=\"nn\">google.colab</span> <span class=\"kn\">import</span> <span class=\"n\">files</span>\n    <span class=\"n\">uploaded</span> <span class=\"o\">=</span> <span class=\"n\">files</span><span class=\"o\">.</span><span class=\"n\">upload</span><span class=\"p\">()</span> <span class=\"c1\"># Upload to the current directory</span>\n</pre></div>\n</div>\n</div>\n</section>\n</section>\n<section id=\"自作モジュールの使い方\">\n<h2>自作モジュールの使い方<a class=\"headerlink\" href=\"#自作モジュールの使い方\" title=\"Link to this heading\">¶</a></h2>\n<p>モジュールで定義されている関数を利用するには、<code class=\"docutils literal notranslate\"><span class=\"pre\">import</span></code> を用いて <code class=\"docutils literal notranslate\"><span class=\"pre\">import</span> <span class=\"pre\">モジュール名</span></code> と書きます。 <strong>モジュール名</strong>は、モジュールファイル名から拡張子 <code class=\"docutils literal notranslate\"><span class=\"pre\">.py</span></code> を除いたものです。</p>\n<p>すると、モジュールで定義されている関数は <code class=\"docutils literal notranslate\"><span class=\"pre\">モジュール名.関数名</span></code> によって参照できます。</p>\n<p>次の関数が記述された <code class=\"docutils literal notranslate\"><span class=\"pre\">factorial.py</span></code> というモジュールを読み込む場合を説明します。 ただし、読み込み元と同じディレクトリに <code class=\"docutils literal notranslate\"><span class=\"pre\">factorial.py</span></code> が存在すると仮定します。</p>\n<p>factorial.py:</p>\n<div class=\"highlight-none notranslate\"><div class=\"highlight\"><pre><span></span># 階乗n!を返す\ndef fact(n):\n    prod = 1\n    for i in range(1, n + 1):\n        prod *= i\n    return prod\n</pre></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[2]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"kn\">import</span> <span class=\"nn\">factorial</span>\n\n<span class=\"n\">factorial</span><span class=\"o\">.</span><span class=\"n\">fact</span><span class=\"p\">(</span><span class=\"mi\">6</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[2]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n720\n</pre></div></div>\n</div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">from</span></code> や <code class=\"docutils literal notranslate\"><span class=\"pre\">as</span></code> の使い方も既存のモジュールと全く同じです。</p>\n<p>モジュール内で定義されている名前を読み込み元のプログラムでそのまま使いたい場合は、<code class=\"docutils literal notranslate\"><span class=\"pre\">from</span></code> を用いて以下のように書くことができます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[3]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"kn\">from</span> <span class=\"nn\">factorial</span> <span class=\"kn\">import</span> <span class=\"n\">fact</span>\n\n<span class=\"n\">fact</span><span class=\"p\">(</span><span class=\"mi\">6</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[3]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n720\n</pre></div></div>\n</div>\n<p>ワイルドカード <code class=\"docutils literal notranslate\"><span class=\"pre\">*</span></code> を利用する方法もありますが、推奨されていません。 読み込まれるモジュール内の未知の名前と、読み込み元のプログラム中の名前が衝突する可能性があるためです。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[4]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"kn\">from</span> <span class=\"nn\">factorial</span> <span class=\"kn\">import</span> <span class=\"o\">*</span>\n</pre></div>\n</div>\n</div>\n<p>モジュール名が長すぎるなどの理由から別の名前としたい場合は、<code class=\"docutils literal notranslate\"><span class=\"pre\">as</span></code> を利用する方法もあります。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[5]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"kn\">import</span> <span class=\"nn\">factorial</span> <span class=\"k\">as</span> <span class=\"nn\">f</span>\n\n<span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">fact</span><span class=\"p\">(</span><span class=\"mi\">6</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[5]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n720\n</pre></div></div>\n</div>\n</section>\n</section>\n\n\n          </div>\n          \n        </div>\n      </div>\n      <div class=\"sphinxsidebar\" role=\"navigation\" aria-label=\"Main\">\n        <div class=\"sphinxsidebarwrapper\">\n<h1 class=\"logo\"><a href=\"../index.html\">Pythonプログラミング入門</a></h1>\n\n\n\n\n\n\n\n\n<p>\n  <a style=\"font-family: sans-serif; font-size: smaller; background: linear-gradient(to top, #353535 0%, #141414 100%); -webkit-font-smoothing: antialiased; font-weight: normal; text-shadow: rgb(0 0 0 / 40%) 0 -1px 0; padding: 2px 6px; color: #fff; text-decoration: none; border-radius: 4px; border: 1px solid #0d0d0d; box-shadow: inset 0 1px 1px 0 #8f8f8f;\" href=\"https://github.com/utokyo-ipp/utokyo-ipp.github.io\">View on GitHub</a>\n</p><p>\n  <a style=\"font-family: sans-serif; font-size: smaller; background: linear-gradient(to top, #ff1e00 0%, #de1e00 100%); -webkit-font-smoothing: antialiased; font-weight: normal; text-shadow: rgb(0 0 0 / 40%) 0 -1px 0; padding: 2px 6px; color: #fff; text-decoration: none; border-radius: 4px; border: 1px solid #0d0d0d; box-shadow: inset 0 1px 1px 0 #ff8e70;\" href=\"https://utokyo-ipp.github.io/IPP_textbook.pdf\">View PDF</a>\n</p><p>\n  <a style=\"border-bottom: none;\" href=\"https://colab.research.google.com/github/utokyo-ipp/utokyo-ipp.github.io/blob/master/colab/5/5-2.ipynb\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Google Colaboratory\"></a>\n</p><h3>Navigation</h3>\n<ul class=\"current\">\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../1/1-0.html\">1-0. Colaboratory (Colab) の使い方</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../1/1-1.html\">1-1. 数値演算</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../1/1-2.html\">1-2. 変数と関数の基礎</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../1/1-3.html\">1-3. 論理・比較演算と条件分岐の基礎</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../1/1-4.html\">1-4. テストとデバッグ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../2/2-1.html\">2-1. 文字列 (string)</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../2/2-2.html\">2-2. リスト (list)</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../2/2-3.html\">2-3. 条件分岐</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../3/3-1.html\">3-1. 辞書 (dictionary)</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../3/3-2.html\">3-2. 繰り返し</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../3/3-3.html\">3-3. 関数</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../4/4-1.html\">4-1. ファイル入出力の基本</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../4/4-2.html\">4-2. イテラブルとイテレータ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../4/4-3.html\">4-3. ディレクトリと木構造</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"5-1.html\">5-1. モジュールの使い方</a></li>\n<li class=\"toctree-l1 current\"><a class=\"current reference internal\" href=\"#\">5-2. モジュールの作り方</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#モジュールファイル\">モジュールファイル</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#自作モジュールの使い方\">自作モジュールの使い方</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"5-3.html\">5-3. NumPyライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../6/6-1.html\">6-1. 内包表記</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../6/6-2.html\">6-2. 高階関数</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../6/6-3.html\">6-3. クラス</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../7/7-1.html\">7-1. pandasライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../7/7-2.html\">7-2. scikit-learnライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/1-jupyter-notebook.html\">▲Jupyter Notebook の使い方</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/2-set.html\">▲セット (set)</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/3-recursion.html\">▲再帰</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/3-visualization.html\">▲簡単なデータの可視化</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/4-csv.html\">▲CSVファイルの入出力</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/5-bokeh.html\">▲Bokehライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/5-command.html\">▲Pythonスクリプトとコマンドライン実行</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/5-matplotlib.html\">▲Matplotlibライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/5-re.html\">▲正規表現</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../index_of_terms.html\">索引</a></li>\n</ul>\n\n<div class=\"relations\">\n<h3>Related Topics</h3>\n<ul>\n  <li><a href=\"../index.html\">Documentation overview</a><ul>\n      <li>Previous: <a href=\"5-1.html\" title=\"previous chapter\">5-1. モジュールの使い方</a></li>\n      <li>Next: <a href=\"5-3.html\" title=\"next chapter\">5-3. NumPyライブラリ</a></li>\n  </ul></li>\n</ul>\n</div>\n<search id=\"searchbox\" style=\"display: none\" role=\"search\">\n  <h3 id=\"searchlabel\">Quick search</h3>\n    <div class=\"searchformwrapper\">\n    <form class=\"search\" action=\"../search.html\" method=\"get\">\n      <input type=\"text\" name=\"q\" aria-labelledby=\"searchlabel\" autocomplete=\"off\" autocorrect=\"off\" autocapitalize=\"off\" spellcheck=\"false\"/>\n      <input type=\"submit\" value=\"Go\" />\n    </form>\n    </div>\n</search>\n<script>document.getElementById('searchbox').style.display = \"block\"</script>\n\n\n\n\n\n\n\n\n        </div>\n      </div>\n      <div class=\"clearer\"></div>\n    </div>\n    <div class=\"footer\">\n      &#169;2020–2024, 東京大学 数理・情報教育研究センター (CC BY-NC-ND 4.0).\n      \n      |\n      Powered by <a href=\"https://www.sphinx-doc.org/\">Sphinx 8.0.2</a>\n      &amp; <a href=\"https://alabaster.readthedocs.io\">Alabaster 1.0.0</a>\n      \n    </div>\n\n    \n\n    \n    <script>\n\n      var _gaq = _gaq || [];\n      _gaq.push(['_setAccount', 'G-8M0RXGPPSR']);\n      _gaq.push(['_setDomainName', 'none']);\n      _gaq.push(['_setAllowLinker', true]);\n      _gaq.push(['_trackPageview']);\n\n      (function() {\n        var ga = document.createElement('script'); ga.async = true;\n        ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'https://www') + '.google-analytics.com/ga.js';\n        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);\n      })();\n\n    </script>\n    \n  </body>\n</html>"
  },
  {
    "path": "docs/5/5-3.html",
    "content": "<!DOCTYPE html>\n\n<html lang=\"jp\" data-content_root=\"../\">\n  <head>\n    <meta charset=\"utf-8\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" /><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n\n    <!-- Google tag (gtag.js) -->\n    <script async src=\"https://www.googletagmanager.com/gtag/js?id=G-8M0RXGPPSR\"></script>\n    <script>\n        window.dataLayer = window.dataLayer || [];\n        function gtag(){dataLayer.push(arguments);}\n        gtag('js', new Date());\n        gtag('config', 'G-8M0RXGPPSR');\n    </script>\n    \n    <title>5-3. NumPyライブラリ &#8212; Pythonプログラミング入門  documentation</title>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/pygments.css?v=d1102ebc\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/basic.css?v=c058f7c8\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/alabaster.css?v=27fed22d\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/nbsphinx-code-cells.css\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/custom.css?v=1a1aa8dd\" />\n    <script src=\"../_static/documentation_options.js?v=3ff7d7a7\"></script>\n    <script src=\"../_static/doctools.js?v=9a2dae69\"></script>\n    <script src=\"../_static/sphinx_highlight.js?v=dc90522c\"></script>\n    <script crossorigin=\"anonymous\" integrity=\"sha256-Ae2Vz/4ePdIu6ZyI/5ZGsYnb+m0JlOmKPjt6XZ9JJkA=\" src=\"https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.4/require.min.js\"></script>\n    <script>window.MathJax = {\"tex\": {\"inlineMath\": [[\"$\", \"$\"], [\"\\\\(\", \"\\\\)\"]], \"processEscapes\": true}, \"options\": {\"ignoreHtmlClass\": \"tex2jax_ignore|mathjax_ignore|document\", \"processHtmlClass\": \"tex2jax_process|mathjax_process|math|output_area\"}}</script>\n    <script defer=\"defer\" src=\"https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js\"></script>\n    <link rel=\"index\" title=\"Index\" href=\"../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../search.html\" />\n    <link rel=\"next\" title=\"6-1. 内包表記\" href=\"../6/6-1.html\" />\n    <link rel=\"prev\" title=\"5-2. モジュールの作り方\" href=\"5-2.html\" />\n   \n  <link rel=\"stylesheet\" href=\"../_static/custom.css\" type=\"text/css\" />\n  \n\n  \n  \n\n  </head><body>\n  \n\n    <div class=\"document\">\n      <div class=\"documentwrapper\">\n        <div class=\"bodywrapper\">\n          \n\n          <div class=\"body\" role=\"main\">\n            \n  <section id=\"5-3.-NumPyライブラリ\">\n<h1>5-3. NumPyライブラリ<a class=\"headerlink\" href=\"#5-3.-NumPyライブラリ\" title=\"Link to this heading\">¶</a></h1>\n<p>NumPyについて説明します。</p>\n<p>参考</p>\n<ul class=\"simple\">\n<li><p><a class=\"reference external\" href=\"https://docs.scipy.org/doc/numpy/user/quickstart.html\">https://docs.scipy.org/doc/numpy/user/quickstart.html</a></p></li>\n<li><p><a class=\"reference external\" href=\"https://docs.scipy.org/doc/numpy/user/basics.html\">https://docs.scipy.org/doc/numpy/user/basics.html</a></p></li>\n</ul>\n<p><strong>NumPy</strong>とは、多次元配列を効率的に扱うライブラリです。 Pythonの標準ライブラリではありませんが、科学技術計算や機械学習など、ベクトルや行列の演算が多用される分野では、事実上の標準ライブラリとしての地位を確立しています。</p>\n<p>NumPyを用いるには、まず、<code class=\"docutils literal notranslate\"><span class=\"pre\">numpy</span></code> モジュールをインポートする必要があります。 慣習として、<code class=\"docutils literal notranslate\"><span class=\"pre\">np</span></code> と別名をつけて利用されます。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[1]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"kn\">import</span> <span class=\"nn\">numpy</span> <span class=\"k\">as</span> <span class=\"nn\">np</span>\n</pre></div>\n</div>\n</div>\n<p>NumPyでは、Python標準の数値やリストの代わりに、特別な数値や配列を用いることで、格段に効率的な配列演算を実現します。 以下では、配列の基本的な操作や機能を説明します。</p>\n<section id=\"配列の構築\">\n<h2>配列の構築<a class=\"headerlink\" href=\"#配列の構築\" title=\"Link to this heading\">¶</a></h2>\n<p><strong>配列</strong>とは、特定の型の値の並びです。 <code class=\"docutils literal notranslate\"><span class=\"pre\">numpy.array()</span></code> 関数で構築できます。 このとき、配列の要素はPython標準のリストやタプルで指定します。 どちらを用いて作成しても全く同じ配列を作成できます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[2]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">a</span> <span class=\"o\">=</span> <span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">array</span><span class=\"p\">([</span><span class=\"mi\">1</span><span class=\"p\">,</span><span class=\"mi\">2</span><span class=\"p\">,</span><span class=\"mi\">3</span><span class=\"p\">])</span> <span class=\"c1\"># リストから配列作成</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">a</span><span class=\"p\">)</span>\n<span class=\"n\">b</span> <span class=\"o\">=</span> <span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">array</span><span class=\"p\">((</span><span class=\"mi\">1</span><span class=\"p\">,</span><span class=\"mi\">2</span><span class=\"p\">,</span><span class=\"mi\">3</span><span class=\"p\">))</span> <span class=\"c1\"># タプルからの配列作成</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">b</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n[1 2 3]\n[1 2 3]\n</pre></div></div>\n</div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">print</span></code> の結果はリストと似ていますが、要素が <code class=\"docutils literal notranslate\"><span class=\"pre\">,</span></code> ではなく空白で区切られているに注意してください。 <code class=\"docutils literal notranslate\"><span class=\"pre\">print</span></code> ではなく、式の評価結果の場合、より違いが明示されます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[3]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">a</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[3]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\narray([1, 2, 3])\n</pre></div></div>\n</div>\n<p>配列は <code class=\"docutils literal notranslate\"><span class=\"pre\">numpy.ndarray</span></code> というデータ型によって実現されています。 組み込み関数 <code class=\"docutils literal notranslate\"><span class=\"pre\">type()</span></code> を使うと、データ型を調べられます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[4]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">type</span><span class=\"p\">(</span><span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">array</span><span class=\"p\">([</span><span class=\"mi\">1</span><span class=\"p\">,</span><span class=\"mi\">2</span><span class=\"p\">,</span><span class=\"mi\">3</span><span class=\"p\">,</span><span class=\"mi\">4</span><span class=\"p\">,</span><span class=\"mi\">5</span><span class=\"p\">]))</span> <span class=\"c1\"># 配列の型</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[4]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nnumpy.ndarray\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[5]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">type</span><span class=\"p\">([</span><span class=\"mi\">1</span><span class=\"p\">,</span><span class=\"mi\">2</span><span class=\"p\">,</span><span class=\"mi\">3</span><span class=\"p\">,</span><span class=\"mi\">4</span><span class=\"p\">,</span><span class=\"mi\">5</span><span class=\"p\">])</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[5]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nlist\n</pre></div></div>\n</div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">array()</span></code> が、リストではなく <code class=\"docutils literal notranslate\"><span class=\"pre\">ndarray</span></code> を返していることがわかります。</p>\n<section id=\"要素型\">\n<h3>要素型<a class=\"headerlink\" href=\"#要素型\" title=\"Link to this heading\">¶</a></h3>\n<p>配列の要素を構成する値には幾つかの型がありますが、次の4つの型を知っていればとりあえずは十分です。</p>\n<table class=\"docutils align-default\">\n<thead>\n<tr class=\"row-odd\"><th class=\"head\"><p>型名</p></th>\n<th class=\"head\"><p>説明</p></th>\n</tr>\n</thead>\n<tbody>\n<tr class=\"row-even\"><td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">numpy.int32</span></code></p></td>\n<td><p>整数（32-bit）を表す型</p></td>\n</tr>\n<tr class=\"row-odd\"><td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">numpy.float64</span></code></p></td>\n<td><p>実数（64-bit）を表す型</p></td>\n</tr>\n<tr class=\"row-even\"><td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">numpy.complex128</span></code></p></td>\n<td><p>複素数（64-bit実数の組）を表す型</p></td>\n</tr>\n<tr class=\"row-odd\"><td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">numpy.bool_</span></code></p></td>\n<td><p>真理値を表す型</p></td>\n</tr>\n</tbody>\n</table>\n<p>配列は、リストと異なり、型の異なる要素を混在させることはできません。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">array()</span></code> の <code class=\"docutils literal notranslate\"><span class=\"pre\">dtype</span></code> 引数に、要素型を表すオブジェクトや文字列値を与えることで、指定された要素型の配列を構築できます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[6]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">array</span><span class=\"p\">([</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">,</span><span class=\"mi\">0</span><span class=\"p\">,</span><span class=\"mi\">1</span><span class=\"p\">],</span> <span class=\"n\">dtype</span><span class=\"o\">=</span><span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">int32</span><span class=\"p\">))</span> <span class=\"c1\"># np.int32の代わりに&#39;int32&#39;でも同じ</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n[-1  0  1]\n</pre></div></div>\n</div>\n<p>実数には、小数点が付与されて印字されます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[7]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">array</span><span class=\"p\">([</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">,</span><span class=\"mi\">0</span><span class=\"p\">,</span><span class=\"mi\">1</span><span class=\"p\">],</span> <span class=\"n\">dtype</span><span class=\"o\">=</span><span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">float64</span><span class=\"p\">))</span> <span class=\"c1\"># np.float64の代わりに&#39;float64&#39;でも同じ</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n[-1.  0.  1.]\n</pre></div></div>\n</div>\n<p>複素数は実部と虚部を表す実数の組であり、虚部には <code class=\"docutils literal notranslate\"><span class=\"pre\">j</span></code> が付与されて印字されます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[8]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">array</span><span class=\"p\">([</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">,</span><span class=\"mi\">0</span><span class=\"p\">,</span><span class=\"mi\">1</span><span class=\"p\">],</span> <span class=\"n\">dtype</span><span class=\"o\">=</span><span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">complex128</span><span class=\"p\">))</span> <span class=\"c1\"># np.complex128の代わりに&#39;complex128&#39;でも同じ</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n[-1.+0.j  0.+0.j  1.+0.j]\n</pre></div></div>\n</div>\n<p>数値から真理値への変換では、<code class=\"docutils literal notranslate\"><span class=\"pre\">0</span></code> が <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code> で、<code class=\"docutils literal notranslate\"><span class=\"pre\">0</span></code> 以外が <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> になります。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[9]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">array</span><span class=\"p\">([</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">,</span><span class=\"mi\">0</span><span class=\"p\">,</span><span class=\"mi\">1</span><span class=\"p\">],</span> <span class=\"n\">dtype</span><span class=\"o\">=</span><span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">bool_</span><span class=\"p\">))</span> <span class=\"c1\"># np.bool_の代わりに&#39;bool&#39;でも同じ</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n[ True False  True]\n</pre></div></div>\n</div>\n</section>\n<section id=\"多次元配列\">\n<h3>多次元配列<a class=\"headerlink\" href=\"#多次元配列\" title=\"Link to this heading\">¶</a></h3>\n<p><strong>多次元配列</strong>は、配列の中に配列がある入れ子の配列です。 入れ子のリストやタプルを <code class=\"docutils literal notranslate\"><span class=\"pre\">numpy.array()</span></code> に渡すことで構築できます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[10]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">array</span><span class=\"p\">([[</span><span class=\"mi\">1</span><span class=\"p\">,</span><span class=\"mi\">2</span><span class=\"p\">],[</span><span class=\"mi\">3</span><span class=\"p\">,</span><span class=\"mi\">4</span><span class=\"p\">]]))</span> <span class=\"c1\"># 2次元配列の構築</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n[[1 2]\n [3 4]]\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[11]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">array</span><span class=\"p\">([[[</span><span class=\"mi\">1</span><span class=\"p\">,</span><span class=\"mi\">2</span><span class=\"p\">],[</span><span class=\"mi\">3</span><span class=\"p\">,</span><span class=\"mi\">4</span><span class=\"p\">]],[[</span><span class=\"mi\">5</span><span class=\"p\">,</span><span class=\"mi\">6</span><span class=\"p\">],[</span><span class=\"mi\">7</span><span class=\"p\">,</span><span class=\"mi\">8</span><span class=\"p\">]]]))</span> <span class=\"c1\"># 3次元配列の構築</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n[[[1 2]\n  [3 4]]\n\n [[5 6]\n  [7 8]]]\n</pre></div></div>\n</div>\n<p>上の例からわかるように、2次元配列は行列のように、3次元配列は行列の配列のように印字されます。</p>\n<p>多次元配列は、要素となる配列の長さが等しいことが想定されます。 つまり、2次元配列は、行列のように各行の長さが等しくなければなりません。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[12]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">array</span><span class=\"p\">([[</span><span class=\"mi\">1</span><span class=\"p\">,</span><span class=\"mi\">2</span><span class=\"p\">],[</span><span class=\"mi\">3</span><span class=\"p\">]]))</span> <span class=\"c1\"># 行の長さが異なる場合</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n<span class=\"ansi-red-fg\">---------------------------------------------------------------------------</span>\n<span class=\"ansi-red-fg\">ValueError</span>                                Traceback (most recent call last)\nCell <span class=\"ansi-green-fg\">In[12], line 1</span>\n<span class=\"ansi-green-fg\">----&gt; 1</span> <span style=\"color: rgb(0,135,0)\">print</span>(<span class=\"ansi-yellow-bg\">np</span><span class=\"ansi-yellow-bg\" style=\"color: rgb(98,98,98)\">.</span><span class=\"ansi-yellow-bg\">array</span><span class=\"ansi-yellow-bg\">(</span><span class=\"ansi-yellow-bg\">[</span><span class=\"ansi-yellow-bg\">[</span><span class=\"ansi-yellow-bg\" style=\"color: rgb(98,98,98)\">1</span><span class=\"ansi-yellow-bg\">,</span><span class=\"ansi-yellow-bg\" style=\"color: rgb(98,98,98)\">2</span><span class=\"ansi-yellow-bg\">]</span><span class=\"ansi-yellow-bg\">,</span><span class=\"ansi-yellow-bg\">[</span><span class=\"ansi-yellow-bg\" style=\"color: rgb(98,98,98)\">3</span><span class=\"ansi-yellow-bg\">]</span><span class=\"ansi-yellow-bg\">]</span><span class=\"ansi-yellow-bg\">)</span>) <span style=\"color: rgb(95,135,135)\"># 行の長さが異なる場合</span>\n\n<span class=\"ansi-red-fg\">ValueError</span>: setting an array element with a sequence. The requested array has an inhomogeneous shape after 1 dimensions. The detected shape was (2,) + inhomogeneous part.\n</pre></div></div>\n</div>\n<p>このように行の長さが異なる場合は、多次元配列とは見做されません。</p>\n<p>多次元配列の各次元の長さの組を、多次元配列の<strong>形</strong> (shape) と呼びます。 特に2次元配列の場合、行列と同様に、行数（内側にある配列の数）と列数（内側にある配列の要素数）の組を使って、行数×列数で形を表記します。</p>\n<p>1次元配列に対して <code class=\"docutils literal notranslate\"><span class=\"pre\">reshape()</span></code> メソッドを使うと、引数で指定された形の多次元配列に変換することができます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[13]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">a1</span> <span class=\"o\">=</span> <span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">array</span><span class=\"p\">([</span><span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"mi\">3</span><span class=\"p\">,</span> <span class=\"mi\">4</span><span class=\"p\">,</span> <span class=\"mi\">5</span><span class=\"p\">])</span> <span class=\"c1\"># 1次元配列</span>\n<span class=\"n\">a2</span> <span class=\"o\">=</span> <span class=\"n\">a1</span><span class=\"o\">.</span><span class=\"n\">reshape</span><span class=\"p\">(</span><span class=\"mi\">2</span><span class=\"p\">,</span><span class=\"mi\">3</span><span class=\"p\">)</span>              <span class=\"c1\"># 2×3の2次元配列</span>\n<span class=\"n\">a2</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[13]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\narray([[0, 1, 2],\n       [3, 4, 5]])\n</pre></div></div>\n</div>\n<p>ここで、<code class=\"docutils literal notranslate\"><span class=\"pre\">reshape()</span></code> を適用する前後の配列（ここでは <code class=\"docutils literal notranslate\"><span class=\"pre\">a1</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">a2</span></code>）は、内部的にデータを共有していることに注意してください。 つまり、<code class=\"docutils literal notranslate\"><span class=\"pre\">a1</span></code> の要素を更新すると、<code class=\"docutils literal notranslate\"><span class=\"pre\">a2</span></code> にも影響を及ぼします。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[14]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">a1</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"mi\">6</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">a1</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">a2</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n[0 6 2 3 4 5]\n[[0 6 2]\n [3 4 5]]\n</pre></div></div>\n</div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">ravel()</span></code> メソッドを使うと、多次元配列を1次元配列に戻すことができます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[15]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">a</span> <span class=\"o\">=</span> <span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">array</span><span class=\"p\">([</span><span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"mi\">3</span><span class=\"p\">,</span> <span class=\"mi\">4</span><span class=\"p\">,</span> <span class=\"mi\">5</span><span class=\"p\">])</span><span class=\"o\">.</span><span class=\"n\">reshape</span><span class=\"p\">(</span><span class=\"mi\">2</span><span class=\"p\">,</span><span class=\"mi\">3</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">a</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">a</span><span class=\"o\">.</span><span class=\"n\">ravel</span><span class=\"p\">())</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n[[0 1 2]\n [3 4 5]]\n[0 1 2 3 4 5]\n</pre></div></div>\n</div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">ravel()</span></code> の結果も、<code class=\"docutils literal notranslate\"><span class=\"pre\">reshape()</span></code> と同様に、元の配列と要素を共有します。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[16]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">elems</span> <span class=\"o\">=</span> <span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">array</span><span class=\"p\">([</span><span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"mi\">3</span><span class=\"p\">,</span> <span class=\"mi\">4</span><span class=\"p\">,</span> <span class=\"mi\">5</span><span class=\"p\">])</span>\n<span class=\"n\">a</span> <span class=\"o\">=</span> <span class=\"n\">elems</span><span class=\"o\">.</span><span class=\"n\">reshape</span><span class=\"p\">(</span><span class=\"mi\">2</span><span class=\"p\">,</span><span class=\"mi\">3</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">ravel</span><span class=\"p\">()</span> <span class=\"c1\"># ravel()は要素をelemsと共有</span>\n<span class=\"n\">elems</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"mi\">6</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">a</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n[0 6 2 3 4 5]\n</pre></div></div>\n</div>\n<p>なお、要素をコピーして変換する <code class=\"docutils literal notranslate\"><span class=\"pre\">flatten()</span></code> メソッドもありますが、コピーしない <code class=\"docutils literal notranslate\"><span class=\"pre\">ravel()</span></code> の方が効率的です。</p>\n</section>\n<section id=\"▲配列のデータ属性\">\n<h3>▲<strong>配列のデータ属性</strong><a class=\"headerlink\" href=\"#▲配列のデータ属性\" title=\"Link to this heading\">¶</a></h3>\n<p>配列はオブジェクトであり、その配列に関する様々な情報を属性として保持します。 （オブジェクトの属性については6-3に簡単な説明があります。） 配列が持つ代表的なデータ属性（メソッド以外の属性）を次の表にまとめます。</p>\n<table class=\"docutils align-default\">\n<thead>\n<tr class=\"row-odd\"><th class=\"head\"><p>属性</p></th>\n<th class=\"head\"><p>意味</p></th>\n</tr>\n</thead>\n<tbody>\n<tr class=\"row-even\"><td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">a.dtype</span></code></p></td>\n<td><p>配列 <code class=\"docutils literal notranslate\"><span class=\"pre\">a</span></code> の要素型</p></td>\n</tr>\n<tr class=\"row-odd\"><td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">a.shape</span></code></p></td>\n<td><p>配列 <code class=\"docutils literal notranslate\"><span class=\"pre\">a</span></code> の形（各次元の長さのタプル）</p></td>\n</tr>\n<tr class=\"row-even\"><td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">a.ndim</span></code></p></td>\n<td><p>配列 <code class=\"docutils literal notranslate\"><span class=\"pre\">a</span></code> の次元数（<code class=\"docutils literal notranslate\"><span class=\"pre\">len(a.shape)</span></code> と等しい）</p></td>\n</tr>\n<tr class=\"row-odd\"><td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">a.size</span></code></p></td>\n<td><p>配列 <code class=\"docutils literal notranslate\"><span class=\"pre\">a</span></code> の要素数（<code class=\"docutils literal notranslate\"><span class=\"pre\">a.shape</span></code> の総乗と等しい）</p></td>\n</tr>\n<tr class=\"row-even\"><td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">a.flat</span></code></p></td>\n<td><p>配列 <code class=\"docutils literal notranslate\"><span class=\"pre\">a</span></code> の1次元表現（<code class=\"docutils literal notranslate\"><span class=\"pre\">a.ravel()</span></code> と等しい）</p></td>\n</tr>\n<tr class=\"row-odd\"><td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">a.T</span></code></p></td>\n<td><p>配列 <code class=\"docutils literal notranslate\"><span class=\"pre\">a</span></code> を転置した配列（<code class=\"docutils literal notranslate\"><span class=\"pre\">a</span></code> と要素を共有）</p></td>\n</tr>\n</tbody>\n</table>\n</section>\n</section>\n<section id=\"配列要素を生成する構築関数\">\n<h2>配列要素を生成する構築関数<a class=\"headerlink\" href=\"#配列要素を生成する構築関数\" title=\"Link to this heading\">¶</a></h2>\n<p>要素を生成して配列を構築する代表的な関数を紹介します。 特に断りが無い場合、ここで紹介する関数は、<code class=\"docutils literal notranslate\"><span class=\"pre\">array()</span></code> と同様に <code class=\"docutils literal notranslate\"><span class=\"pre\">dtype</span></code> 引数で要素型を指定可能です。</p>\n<section id=\"arange\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">arange</span></code><a class=\"headerlink\" href=\"#arange\" title=\"Link to this heading\">¶</a></h3>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">numpy.arange()</span></code> は、組み込み関数 <code class=\"docutils literal notranslate\"><span class=\"pre\">range()</span></code> の配列版です（<code class=\"docutils literal notranslate\"><span class=\"pre\">arange</span></code> は array range の略）。 開始値・終了値・刻み幅を引数にとります。 デフォルトの開始値は <code class=\"docutils literal notranslate\"><span class=\"pre\">0</span></code>、刻み幅は <code class=\"docutils literal notranslate\"><span class=\"pre\">1</span></code> です。 <code class=\"docutils literal notranslate\"><span class=\"pre\">range()</span></code> と違って、引数の値は整数に限定されません。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[17]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">arange</span><span class=\"p\">(</span><span class=\"mi\">3</span><span class=\"p\">))</span> <span class=\"c1\"># range(3)に対応する配列</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">arange</span><span class=\"p\">(</span><span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mf\">0.2</span><span class=\"p\">))</span> <span class=\"c1\"># 0を開始値として0.2刻みで1未満の要素を生成</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n[0 1 2]\n[0.  0.2 0.4 0.6 0.8]\n</pre></div></div>\n</div>\n</section>\n<section id=\"linspace\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">linspace</span></code><a class=\"headerlink\" href=\"#linspace\" title=\"Link to this heading\">¶</a></h3>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">numpy.linspace()</span></code> 関数は、範囲を等分割した値からなる配列を生成します。 第1引数と第2引数には、それぞれ範囲の開始値と終了値、第3引数には分割数を指定します。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[18]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">linspace</span><span class=\"p\">(</span><span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">4</span><span class=\"p\">))</span> <span class=\"c1\"># 0から1の値を4分割した値を要素に持つ配列</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n[0.         0.33333333 0.66666667 1.        ]\n</pre></div></div>\n</div>\n</section>\n<section id=\"zeros-と-ones\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">zeros</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">ones</span></code><a class=\"headerlink\" href=\"#zeros-と-ones\" title=\"Link to this heading\">¶</a></h3>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">numpy.zeros()</span></code> 関数は、<code class=\"docutils literal notranslate\"><span class=\"pre\">0</span></code> からなる配列を生成します。 同様に、<code class=\"docutils literal notranslate\"><span class=\"pre\">numpy.ones()</span></code> 関数は、<code class=\"docutils literal notranslate\"><span class=\"pre\">1</span></code> からなる配列を生成します。 どちらも、生成される形を第1引数に取ります。 デフォルトの要素型は、実数です。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[19]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">zeros</span><span class=\"p\">(</span><span class=\"mi\">4</span><span class=\"p\">))</span>     <span class=\"c1\"># 長さ4の1次元配列</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">zeros</span><span class=\"p\">((</span><span class=\"mi\">2</span><span class=\"p\">,</span><span class=\"mi\">3</span><span class=\"p\">)))</span> <span class=\"c1\"># 2×3の2次元配列を生成</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">ones</span><span class=\"p\">(</span><span class=\"mi\">4</span><span class=\"p\">))</span>     <span class=\"c1\"># 長さ4の1次元配列</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">ones</span><span class=\"p\">((</span><span class=\"mi\">2</span><span class=\"p\">,</span><span class=\"mi\">3</span><span class=\"p\">)))</span> <span class=\"c1\"># 2×3の2次元配列を生成</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n[0. 0. 0. 0.]\n[[0. 0. 0.]\n [0. 0. 0.]]\n[1. 1. 1. 1.]\n[[1. 1. 1.]\n [1. 1. 1.]]\n</pre></div></div>\n</div>\n</section>\n<section id=\"random.rand\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">random.rand</span></code><a class=\"headerlink\" href=\"#random.rand\" title=\"Link to this heading\">¶</a></h3>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">numpy.random.rand()</span></code> 関数は、0 以上 1 未満の乱数からなる配列を生成します。 引数には生成される配列の形を指定します。 要素型は実数に限定されます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[20]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">random</span><span class=\"o\">.</span><span class=\"n\">rand</span><span class=\"p\">(</span><span class=\"mi\">4</span><span class=\"p\">))</span>   <span class=\"c1\"># 長さ4の1次元配列</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">random</span><span class=\"o\">.</span><span class=\"n\">rand</span><span class=\"p\">(</span><span class=\"mi\">2</span><span class=\"p\">,</span><span class=\"mi\">3</span><span class=\"p\">))</span> <span class=\"c1\"># 2×3の2次元配列を生成</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n[0.29417678 0.7695593  0.31245091 0.06876472]\n[[0.82617042 0.8323276  0.42266024]\n [0.54479955 0.17532302 0.09897153]]\n</pre></div></div>\n</div>\n<p>この他にも、<code class=\"docutils literal notranslate\"><span class=\"pre\">numpy.random.randn()</span></code>・<code class=\"docutils literal notranslate\"><span class=\"pre\">numpy.random.binomial()</span></code>・<code class=\"docutils literal notranslate\"><span class=\"pre\">numpy.random.poisson()</span></code> は、それぞれ、正規分布・二項分布・ポアソン分布の乱数からなる配列を生成します。</p>\n</section>\n</section>\n<section id=\"練習\">\n<h2>練習<a class=\"headerlink\" href=\"#練習\" title=\"Link to this heading\">¶</a></h2>\n<p>引数に整数 <span class=\"math notranslate nohighlight\">\\(n\\)</span> を取り、<span class=\"math notranslate nohighlight\">\\(i\\)</span> から始まる連番の整数からなる配列を<span class=\"math notranslate nohighlight\">\\(i\\)</span>番目 (<span class=\"math notranslate nohighlight\">\\(i\\ge 0\\)</span>) の行として持つ <span class=\"math notranslate nohighlight\">\\(n\\times n\\)</span> の2次元配列を返す関数 <code class=\"docutils literal notranslate\"><span class=\"pre\">range_square_matrix()</span></code> を、<code class=\"docutils literal notranslate\"><span class=\"pre\">arange()</span></code> を用いて定義してください。</p>\n<p>たとえば、<code class=\"docutils literal notranslate\"><span class=\"pre\">range_square_matrix(3)</span></code> は、</p>\n<div class=\"highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[[0 1 2]\n [1 2 3]\n [2 3 4]]\n</pre></div>\n</div>\n<p>と印字されるような2次元配列を返します。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[21]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">def</span> <span class=\"nf\">arange_square_matrix</span><span class=\"p\">(</span><span class=\"n\">n</span><span class=\"p\">):</span>\n    <span class=\"o\">...</span>\n</pre></div>\n</div>\n</div>\n<p>以下のセルを実行して、<code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> が表示されることを確認してください。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[22]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"nb\">all</span><span class=\"p\">(</span><span class=\"nb\">map</span><span class=\"p\">(</span><span class=\"nb\">all</span><span class=\"p\">,(</span><span class=\"n\">arange_square_matrix</span><span class=\"p\">(</span><span class=\"mi\">3</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">array</span><span class=\"p\">([[</span><span class=\"mi\">0</span><span class=\"p\">,</span><span class=\"mi\">1</span><span class=\"p\">,</span><span class=\"mi\">2</span><span class=\"p\">],[</span><span class=\"mi\">1</span><span class=\"p\">,</span><span class=\"mi\">2</span><span class=\"p\">,</span><span class=\"mi\">3</span><span class=\"p\">],[</span><span class=\"mi\">2</span><span class=\"p\">,</span><span class=\"mi\">3</span><span class=\"p\">,</span><span class=\"mi\">4</span><span class=\"p\">]])))))</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nFalse\n</pre></div></div>\n</div>\n</section>\n<section id=\"配列要素の操作\">\n<h2>配列要素の操作<a class=\"headerlink\" href=\"#配列要素の操作\" title=\"Link to this heading\">¶</a></h2>\n<section id=\"インデックスアクセス\">\n<h3>インデックスアクセス<a class=\"headerlink\" href=\"#インデックスアクセス\" title=\"Link to this heading\">¶</a></h3>\n<p>配列の要素には、リストの場合と同様に、<code class=\"docutils literal notranslate\"><span class=\"pre\">0</span></code> から始まるインデックスを使って参照できます。 リストと同じく、配列の先頭要素のインデックスは <code class=\"docutils literal notranslate\"><span class=\"pre\">0</span></code>、最後の要素のインデックスは <code class=\"docutils literal notranslate\"><span class=\"pre\">-1</span></code> となります。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[23]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">a</span> <span class=\"o\">=</span> <span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">arange</span><span class=\"p\">(</span><span class=\"mi\">3</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">a</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n[0 1 2]\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[24]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">a</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[24]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nnp.int64(0)\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[25]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">a</span><span class=\"p\">[</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">]</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[25]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nnp.int64(2)\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[26]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">a</span><span class=\"p\">[</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"mi\">3</span> <span class=\"c1\"># 要素への代入もできる</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">a</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n[0 1 3]\n</pre></div></div>\n</div>\n<p>多次元配列では、高次元（入れ子の外側）から順にインデックスを指定します。 特に2次元配列、すなわち行列の場合は、行インデックスと列インデックスを順に指定します。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[27]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">a</span> <span class=\"o\">=</span> <span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">arange</span><span class=\"p\">(</span><span class=\"mi\">6</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">reshape</span><span class=\"p\">(</span><span class=\"mi\">2</span><span class=\"p\">,</span><span class=\"mi\">3</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">a</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n[[0 1 2]\n [3 4 5]]\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[28]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">a</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">,</span><span class=\"mi\">2</span><span class=\"p\">]</span> <span class=\"c1\"># 行と列のインデックスをまとめて指定</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[28]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nnp.int64(5)\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[29]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">a</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">,</span><span class=\"mi\">2</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"mi\">6</span> <span class=\"c1\"># 要素への代入もできる</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">a</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n[[0 1 2]\n [3 4 6]]\n</pre></div></div>\n</div>\n</section>\n<section id=\"スライス\">\n<h3>スライス<a class=\"headerlink\" href=\"#スライス\" title=\"Link to this heading\">¶</a></h3>\n<p>リストと同様に、配列の<strong>スライス</strong>を構築できます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[30]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">a</span> <span class=\"o\">=</span> <span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">arange</span><span class=\"p\">(</span><span class=\"mi\">5</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">a</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">a</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">:</span><span class=\"mi\">4</span><span class=\"p\">])</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">a</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">:])</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">a</span><span class=\"p\">[:</span><span class=\"o\">-</span><span class=\"mi\">2</span><span class=\"p\">])</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">a</span><span class=\"p\">[::</span><span class=\"mi\">2</span><span class=\"p\">])</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">a</span><span class=\"p\">[::</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">])</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n[0 1 2 3 4]\n[1 2 3]\n[1 2 3 4]\n[0 1 2]\n[0 2 4]\n[4 3 2 1 0]\n</pre></div></div>\n</div>\n<p>配列のスライスに対して代入すると、右辺の値がコピーされて、スライス元の配列にまとめて代入されます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[31]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">a</span> <span class=\"o\">=</span> <span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">arange</span><span class=\"p\">(</span><span class=\"mi\">5</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">a</span><span class=\"p\">)</span>\n<span class=\"n\">a</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">:</span><span class=\"mi\">4</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"mi\">6</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">a</span><span class=\"p\">)</span>\n<span class=\"n\">a</span> <span class=\"o\">=</span> <span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">arange</span><span class=\"p\">(</span><span class=\"mi\">5</span><span class=\"p\">)</span>\n<span class=\"n\">a</span><span class=\"p\">[::</span><span class=\"mi\">2</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"mi\">6</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">a</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n[0 1 2 3 4]\n[0 6 6 6 4]\n[6 1 6 3 6]\n</pre></div></div>\n</div>\n<p>一方、リストに対しては、以下はエラーになります。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[32]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">a</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">,</span><span class=\"mi\">1</span><span class=\"p\">,</span><span class=\"mi\">2</span><span class=\"p\">,</span><span class=\"mi\">3</span><span class=\"p\">,</span><span class=\"mi\">4</span><span class=\"p\">]</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">a</span><span class=\"p\">)</span>\n<span class=\"n\">a</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">:</span><span class=\"mi\">4</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"mi\">6</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n[0, 1, 2, 3, 4]\n</pre></div></div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n<span class=\"ansi-red-fg\">---------------------------------------------------------------------------</span>\n<span class=\"ansi-red-fg\">TypeError</span>                                 Traceback (most recent call last)\nCell <span class=\"ansi-green-fg\">In[32], line 3</span>\n<span class=\"ansi-green-intense-fg ansi-bold\">      1</span> a <span style=\"color: rgb(98,98,98)\">=</span> [<span style=\"color: rgb(98,98,98)\">0</span>,<span style=\"color: rgb(98,98,98)\">1</span>,<span style=\"color: rgb(98,98,98)\">2</span>,<span style=\"color: rgb(98,98,98)\">3</span>,<span style=\"color: rgb(98,98,98)\">4</span>]\n<span class=\"ansi-green-intense-fg ansi-bold\">      2</span> <span style=\"color: rgb(0,135,0)\">print</span>(a)\n<span class=\"ansi-green-fg\">----&gt; 3</span> <span class=\"ansi-yellow-bg\">a</span><span class=\"ansi-yellow-bg\">[</span><span class=\"ansi-yellow-bg\" style=\"color: rgb(98,98,98)\">1</span><span class=\"ansi-yellow-bg\">:</span><span class=\"ansi-yellow-bg\" style=\"color: rgb(98,98,98)\">4</span><span class=\"ansi-yellow-bg\">]</span> <span style=\"color: rgb(98,98,98)\">=</span> <span style=\"color: rgb(98,98,98)\">6</span>\n\n<span class=\"ansi-red-fg\">TypeError</span>: can only assign an iterable\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[33]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">a</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">,</span><span class=\"mi\">1</span><span class=\"p\">,</span><span class=\"mi\">2</span><span class=\"p\">,</span><span class=\"mi\">3</span><span class=\"p\">,</span><span class=\"mi\">4</span><span class=\"p\">]</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">a</span><span class=\"p\">)</span>\n<span class=\"n\">a</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">:</span><span class=\"mi\">4</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"mi\">6</span><span class=\"p\">]</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">a</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n[0, 1, 2, 3, 4]\n[0, 6, 4]\n</pre></div></div>\n</div>\n<p>このように、配列のスライスに対する代入の振舞いは、リストの場合と異なることに注意してください。</p>\n<p>多次元配列に対しては、インデックスの参照と同様に、高い次元のスライスから順に並べて指定します。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[34]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">a</span> <span class=\"o\">=</span> <span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">arange</span><span class=\"p\">(</span><span class=\"mi\">9</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">reshape</span><span class=\"p\">(</span><span class=\"mi\">3</span><span class=\"p\">,</span><span class=\"mi\">3</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">a</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">a</span><span class=\"p\">[:</span><span class=\"mi\">2</span><span class=\"p\">,:</span><span class=\"mi\">2</span><span class=\"p\">])</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">a</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">:,</span><span class=\"mi\">1</span><span class=\"p\">:])</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n[[0 1 2]\n [3 4 5]\n [6 7 8]]\n[[0 1]\n [3 4]]\n[[4 5]\n [7 8]]\n</pre></div></div>\n</div>\n<p>多次元配列に対するスライスは、入れ子リストに対するスライスとは意味が異なることに注意してください。</p>\n</section>\n<section id=\"for文\">\n<h3>for文<a class=\"headerlink\" href=\"#for文\" title=\"Link to this heading\">¶</a></h3>\n<p>リストと同様に、for文を用いて、配列要素への反復処理を記述できます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[35]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">for</span> <span class=\"n\">v</span> <span class=\"ow\">in</span> <span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">arange</span><span class=\"p\">(</span><span class=\"mi\">3</span><span class=\"p\">):</span>\n    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">v</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n0\n1\n2\n</pre></div></div>\n</div>\n<p>多次元配列の場合は、最外の配列に対して反復します。 つまり、2次元配列の場合、行の配列に対する反復処理となります。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[36]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">for</span> <span class=\"n\">row</span> <span class=\"ow\">in</span> <span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">arange</span><span class=\"p\">(</span><span class=\"mi\">6</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">reshape</span><span class=\"p\">(</span><span class=\"mi\">2</span><span class=\"p\">,</span><span class=\"mi\">3</span><span class=\"p\">):</span>\n    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">row</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n[0 1 2]\n[3 4 5]\n</pre></div></div>\n</div>\n<p>for文と併用される <code class=\"docutils literal notranslate\"><span class=\"pre\">enumerate()</span></code> の多次元配列版として、<code class=\"docutils literal notranslate\"><span class=\"pre\">numpy.ndenumerate()</span></code> 関数が提供されています。 <code class=\"docutils literal notranslate\"><span class=\"pre\">numpy.ndenumerate()</span></code> は、（多次元）インデックスと要素の組を列挙します。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[37]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">for</span> <span class=\"n\">idx</span><span class=\"p\">,</span> <span class=\"n\">e</span> <span class=\"ow\">in</span> <span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">ndenumerate</span><span class=\"p\">(</span><span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">arange</span><span class=\"p\">(</span><span class=\"mi\">6</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">reshape</span><span class=\"p\">(</span><span class=\"mi\">2</span><span class=\"p\">,</span><span class=\"mi\">3</span><span class=\"p\">)):</span>\n    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">idx</span><span class=\"p\">,</span> <span class=\"n\">e</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n(0, 0) 0\n(0, 1) 1\n(0, 2) 2\n(1, 0) 3\n(1, 1) 4\n(1, 2) 5\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[38]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">for</span> <span class=\"n\">idx</span><span class=\"p\">,</span> <span class=\"n\">e</span> <span class=\"ow\">in</span> <span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">ndenumerate</span><span class=\"p\">(</span><span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">arange</span><span class=\"p\">(</span><span class=\"mi\">3</span><span class=\"p\">)):</span>\n    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">idx</span><span class=\"p\">,</span> <span class=\"n\">e</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n(0,) 0\n(1,) 1\n(2,) 2\n</pre></div></div>\n</div>\n</section>\n</section>\n<section id=\"要素毎の演算\">\n<h2>要素毎の演算<a class=\"headerlink\" href=\"#要素毎の演算\" title=\"Link to this heading\">¶</a></h2>\n<p>配列に対する要素毎の演算は、簡潔に記述できます。 しかも、for文で記述するより、効率がよいです。 要素毎の演算を上手く使えるかどうかが、NumPyプログラミングの肝と言っても過言ではないでしょう。</p>\n<section id=\"配列のスカラ演算\">\n<h3><strong>配列のスカラ演算</strong><a class=\"headerlink\" href=\"#配列のスカラ演算\" title=\"Link to this heading\">¶</a></h3>\n<p>配列とスカラとの算術演算を記述すると、要素毎のスカラ演算となります。 演算結果として、新しい配列が返ります。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[39]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">a</span> <span class=\"o\">=</span> <span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">arange</span><span class=\"p\">(</span><span class=\"mi\">4</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">a</span><span class=\"p\">)</span>\n\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">a</span> <span class=\"o\">+</span> <span class=\"mi\">1</span><span class=\"p\">)</span> <span class=\"c1\"># 各要素に1を加算</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">a</span> <span class=\"o\">-</span> <span class=\"mi\">1</span><span class=\"p\">)</span> <span class=\"c1\"># 各要素に1を減算</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">a</span> <span class=\"o\">*</span> <span class=\"mi\">2</span><span class=\"p\">)</span> <span class=\"c1\"># 各要素に2を乗算</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">a</span> <span class=\"o\">/</span> <span class=\"mi\">2</span><span class=\"p\">)</span> <span class=\"c1\"># 各要素を2で除算</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">a</span> <span class=\"o\">//</span> <span class=\"mi\">2</span><span class=\"p\">)</span> <span class=\"c1\"># 各要素を2で整数除算</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">a</span> <span class=\"o\">%</span> <span class=\"mi\">2</span><span class=\"p\">)</span> <span class=\"c1\"># 各要素に2の剰余演算</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">a</span> <span class=\"o\">**</span> <span class=\"mi\">2</span><span class=\"p\">)</span> <span class=\"c1\"># 各要素を2乗</span>\n\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"mi\">1</span> <span class=\"o\">+</span> <span class=\"n\">a</span><span class=\"p\">)</span> <span class=\"c1\"># 左側がスカラでもよい</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"mi\">1</span> <span class=\"o\">-</span> <span class=\"n\">a</span><span class=\"p\">)</span> <span class=\"c1\"># 左側がスカラでもよい</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"mi\">2</span> <span class=\"o\">*</span> <span class=\"n\">a</span><span class=\"p\">)</span> <span class=\"c1\"># 左側がスカラでもよい</span>\n<span class=\"n\">b</span> <span class=\"o\">=</span> <span class=\"n\">a</span> <span class=\"o\">+</span> <span class=\"mi\">1</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"mi\">1</span> <span class=\"o\">/</span> <span class=\"n\">b</span><span class=\"p\">)</span> <span class=\"c1\"># 左側がスカラでもよい</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"mi\">9</span> <span class=\"o\">//</span> <span class=\"n\">b</span><span class=\"p\">)</span> <span class=\"c1\"># 左側がスカラでもよい</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n[0 1 2 3]\n[1 2 3 4]\n[-1  0  1  2]\n[0 2 4 6]\n[0.  0.5 1.  1.5]\n[0 0 1 1]\n[0 1 0 1]\n[0 1 4 9]\n[1 2 3 4]\n[ 1  0 -1 -2]\n[0 2 4 6]\n[1.         0.5        0.33333333 0.25      ]\n[9 4 3 2]\n</pre></div></div>\n</div>\n</section>\n<section id=\"配列同士の演算\">\n<h3><strong>配列同士の演算</strong><a class=\"headerlink\" href=\"#配列同士の演算\" title=\"Link to this heading\">¶</a></h3>\n<p>形が同じ配列同士の算術演算は、同じ位置の要素同士の演算となります。 演算結果として、新しい配列が返ります。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[40]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">a</span> <span class=\"o\">=</span> <span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">arange</span><span class=\"p\">(</span><span class=\"mi\">4</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">reshape</span><span class=\"p\">(</span><span class=\"mi\">2</span><span class=\"p\">,</span><span class=\"mi\">2</span><span class=\"p\">)</span>\n<span class=\"n\">b</span> <span class=\"o\">=</span> <span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">arange</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">,</span><span class=\"mi\">5</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">reshape</span><span class=\"p\">(</span><span class=\"mi\">2</span><span class=\"p\">,</span><span class=\"mi\">2</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">a</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">b</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">a</span> <span class=\"o\">+</span> <span class=\"n\">b</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">a</span> <span class=\"o\">-</span> <span class=\"n\">b</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">a</span> <span class=\"o\">*</span> <span class=\"n\">b</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">a</span> <span class=\"o\">/</span> <span class=\"n\">b</span><span class=\"p\">)</span>\n<span class=\"n\">c</span> <span class=\"o\">=</span> <span class=\"mi\">3</span> <span class=\"o\">*</span> <span class=\"n\">a</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">c</span> <span class=\"o\">//</span> <span class=\"n\">b</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">a</span> <span class=\"o\">%</span> <span class=\"n\">b</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">a</span> <span class=\"o\">**</span> <span class=\"n\">b</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n[[0 1]\n [2 3]]\n[[1 2]\n [3 4]]\n[[1 3]\n [5 7]]\n[[-1 -1]\n [-1 -1]]\n[[ 0  2]\n [ 6 12]]\n[[0.         0.5       ]\n [0.66666667 0.75      ]]\n[[0 1]\n [2 2]]\n[[0 1]\n [2 3]]\n[[ 0  1]\n [ 8 81]]\n</pre></div></div>\n</div>\n<p>実は、形が同じでない配列同士の算術演算も可能ですが、振舞いが複雑なので間違いやすいです。 配列同士の算術演算は、形が同じ配列に限定する方が賢明です。</p>\n</section>\n<section id=\"ユニバーサル関数\">\n<h3>ユニバーサル関数<a class=\"headerlink\" href=\"#ユニバーサル関数\" title=\"Link to this heading\">¶</a></h3>\n<p>NumPyには<strong>ユニバーサル関数</strong>と呼ばれる、任意の形の配列を取り、各要素に所定の演算を与えた結果を返す関数があります。 その代表例は、<code class=\"docutils literal notranslate\"><span class=\"pre\">numpy.sqrt()</span></code> 関数です。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[41]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">a</span> <span class=\"o\">=</span> <span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">zeros</span><span class=\"p\">(</span><span class=\"mi\">3</span><span class=\"p\">)</span> <span class=\"o\">+</span> <span class=\"mi\">2</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">a</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">sqrt</span><span class=\"p\">(</span><span class=\"n\">a</span><span class=\"p\">))</span> <span class=\"c1\"># 各要素はsqrt(2)</span>\n<span class=\"n\">b</span> <span class=\"o\">=</span> <span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">zeros</span><span class=\"p\">((</span><span class=\"mi\">2</span><span class=\"p\">,</span><span class=\"mi\">2</span><span class=\"p\">))</span> <span class=\"o\">+</span> <span class=\"mi\">2</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">sqrt</span><span class=\"p\">(</span><span class=\"n\">b</span><span class=\"p\">))</span> <span class=\"c1\"># 各要素はsqrt(2)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">sqrt</span><span class=\"p\">(</span><span class=\"mi\">2</span><span class=\"p\">))</span> <span class=\"c1\"># スカラ（0次元配列）も扱える</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n[2. 2. 2.]\n[1.41421356 1.41421356 1.41421356]\n[[1.41421356 1.41421356]\n [1.41421356 1.41421356]]\n1.4142135623730951\n</pre></div></div>\n</div>\n<p>この他にも、多数のユニバーサル関数が提供されています。 詳しくは、<a class=\"reference external\" href=\"https://docs.scipy.org/doc/numpy-1.14.0/reference/ufuncs.html#available-ufuncs\">ユニバーサル関数の一覧</a>を参照してください。</p>\n</section>\n</section>\n<section id=\"よく使われる配列操作\">\n<h2>よく使われる配列操作<a class=\"headerlink\" href=\"#よく使われる配列操作\" title=\"Link to this heading\">¶</a></h2>\n<section id=\"dot\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">dot</span></code><a class=\"headerlink\" href=\"#dot\" title=\"Link to this heading\">¶</a></h3>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">numpy.dot()</span></code> は、2つの配列を引数に取り、そのドット積を返します。 両者が1次元配列のときは、ベクトル内積と等しいです。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[42]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">dot</span><span class=\"p\">(</span><span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">arange</span><span class=\"p\">(</span><span class=\"mi\">4</span><span class=\"p\">),</span> <span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">arange</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">,</span><span class=\"mi\">5</span><span class=\"p\">))</span> <span class=\"c1\"># 0*1 + 1*2 + 2*3 + 3*4</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[42]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nnp.int64(20)\n</pre></div></div>\n</div>\n<p>2次元配列同士だと、行列乗算と等しいです。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[43]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"c1\"># [[0 1]     [[1 2]</span>\n<span class=\"c1\">#  [2 3]] と  [3 4]] の行列積</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">dot</span><span class=\"p\">(</span><span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">arange</span><span class=\"p\">(</span><span class=\"mi\">4</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">reshape</span><span class=\"p\">(</span><span class=\"mi\">2</span><span class=\"p\">,</span><span class=\"mi\">2</span><span class=\"p\">),</span> <span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">arange</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">,</span><span class=\"mi\">5</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">reshape</span><span class=\"p\">(</span><span class=\"mi\">2</span><span class=\"p\">,</span><span class=\"mi\">2</span><span class=\"p\">)))</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n[[ 3  4]\n [11 16]]\n</pre></div></div>\n</div>\n</section>\n<section id=\"sort\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">sort</span></code><a class=\"headerlink\" href=\"#sort\" title=\"Link to this heading\">¶</a></h3>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">numpy.sort()</span></code> 関数は、昇順でソートされた新しい配列を返します。 これは、組み込み関数 <code class=\"docutils literal notranslate\"><span class=\"pre\">sorted()</span></code> の配列版です。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[44]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">a</span> <span class=\"o\">=</span> <span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">array</span><span class=\"p\">([</span><span class=\"mi\">3</span><span class=\"p\">,</span> <span class=\"mi\">4</span><span class=\"p\">,</span> <span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">])</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">a</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">sort</span><span class=\"p\">(</span><span class=\"n\">a</span><span class=\"p\">))</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n[ 3  4 -1  0  2]\n[-1  0  2  3  4]\n</pre></div></div>\n</div>\n<p>一方、配列の <code class=\"docutils literal notranslate\"><span class=\"pre\">sort()</span></code> メソッドは、配列を破壊的に（インプレースで）ソートします。 これは、リストの <code class=\"docutils literal notranslate\"><span class=\"pre\">sort()</span></code> メソッドの配列版です。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[45]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">a</span> <span class=\"o\">=</span> <span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">array</span><span class=\"p\">([</span><span class=\"mi\">3</span><span class=\"p\">,</span> <span class=\"mi\">4</span><span class=\"p\">,</span> <span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">])</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">a</span><span class=\"p\">)</span>\n<span class=\"n\">a</span><span class=\"o\">.</span><span class=\"n\">sort</span><span class=\"p\">()</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">a</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n[ 3  4 -1  0  2]\n[-1  0  2  3  4]\n</pre></div></div>\n</div>\n</section>\n<section id=\"sum,-max,-min,-mean\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">sum</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">max</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">min</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">mean</span></code><a class=\"headerlink\" href=\"#sum,-max,-min,-mean\" title=\"Link to this heading\">¶</a></h3>\n<p>配列のメソッド <code class=\"docutils literal notranslate\"><span class=\"pre\">sum()</span></code>・<code class=\"docutils literal notranslate\"><span class=\"pre\">max()</span></code>・<code class=\"docutils literal notranslate\"><span class=\"pre\">min()</span></code>・<code class=\"docutils literal notranslate\"><span class=\"pre\">mean()</span></code> は、それぞれ総和・最大値・最小値・算術平均を返します。 これらのメソッドは、引数が与えられない場合、全要素を集計した結果を返します。 多次元配列の場合、集計する次元を指定できます。 具体的には、2次元配列の場合、<code class=\"docutils literal notranslate\"><span class=\"pre\">0</span></code> を指定すると各列に、<code class=\"docutils literal notranslate\"><span class=\"pre\">1</span></code> を指定すると各行に、対応するメソッドを適用した結果が返されます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[46]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">a</span> <span class=\"o\">=</span> <span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">arange</span><span class=\"p\">(</span><span class=\"mi\">6</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">reshape</span><span class=\"p\">(</span><span class=\"mi\">2</span><span class=\"p\">,</span><span class=\"mi\">3</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">a</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">a</span><span class=\"o\">.</span><span class=\"n\">sum</span><span class=\"p\">())</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">a</span><span class=\"o\">.</span><span class=\"n\">sum</span><span class=\"p\">(</span><span class=\"mi\">0</span><span class=\"p\">))</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">a</span><span class=\"o\">.</span><span class=\"n\">sum</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">))</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n[[0 1 2]\n [3 4 5]]\n15\n[3 5 7]\n[ 3 12]\n</pre></div></div>\n</div>\n<p>この他にも、多数の数学・統計関連のメソッドや関数が提供されています。 詳しくは、<a class=\"reference external\" href=\"https://docs.scipy.org/doc/numpy/reference/routines.math.html\">数学関数</a>や<a class=\"reference external\" href=\"https://docs.scipy.org/doc/numpy/reference/routines.statistics.html\">統計関数</a>を参照してください。</p>\n</section>\n</section>\n<section id=\"配列の保存と復元\">\n<h2>配列の保存と復元<a class=\"headerlink\" href=\"#配列の保存と復元\" title=\"Link to this heading\">¶</a></h2>\n<p>配列は、ファイルに保存したり、ファイルから読み出したりすることが、簡単にできます。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">numpy.savetxt()</span></code> 関数は、与えられた配列を指定されたファイル名をつけてテキスト形式で保存します。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[47]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">savetxt</span><span class=\"p\">(</span><span class=\"s1\">&#39;arange3.txt&#39;</span><span class=\"p\">,</span> <span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">arange</span><span class=\"p\">(</span><span class=\"mi\">3</span><span class=\"p\">))</span>\n</pre></div>\n</div>\n</div>\n<p>この <code class=\"docutils literal notranslate\"><span class=\"pre\">arange3.txt</span></code> は、次のような内容になっているはずです。</p>\n<div class=\"highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>0.000000000000000000e+00\n1.000000000000000000e+00\n2.000000000000000000e+00\n</pre></div>\n</div>\n<p>2次元配列は、列が空白区切りで保存されます</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[48]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">savetxt</span><span class=\"p\">(</span><span class=\"s1\">&#39;arange2x3.txt&#39;</span><span class=\"p\">,</span> <span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">arange</span><span class=\"p\">(</span><span class=\"mi\">6</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">reshape</span><span class=\"p\">(</span><span class=\"mi\">2</span><span class=\"p\">,</span><span class=\"mi\">3</span><span class=\"p\">))</span>\n</pre></div>\n</div>\n</div>\n<p>この <code class=\"docutils literal notranslate\"><span class=\"pre\">arange2x3.txt</span></code> は、次のような内容になっているはずです。</p>\n<div class=\"highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>0.000000000000000000e+00 1.000000000000000000e+00 2.000000000000000000e+00\n3.000000000000000000e+00 4.000000000000000000e+00 5.000000000000000000e+00\n</pre></div>\n</div>\n<p>一方、<code class=\"docutils literal notranslate\"><span class=\"pre\">numpy.loadtxt()</span></code> 関数は、与えられた名前のファイルに保存された配列を復元します。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[49]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">a</span> <span class=\"o\">=</span> <span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">loadtxt</span><span class=\"p\">(</span><span class=\"s1\">&#39;arange2x3.txt&#39;</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">a</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n[[0. 1. 2.]\n [3. 4. 5.]]\n</pre></div></div>\n</div>\n<p>保存するときに、列の区切り文字をデフォルトの <code class=\"docutils literal notranslate\"><span class=\"pre\">'</span> <span class=\"pre\">'</span></code> 以外にしたい場合、<code class=\"docutils literal notranslate\"><span class=\"pre\">savetxt()</span></code> の <code class=\"docutils literal notranslate\"><span class=\"pre\">delimiter</span></code> 引数に区切り文字（列）を指定します。これを復元するときには、<code class=\"docutils literal notranslate\"><span class=\"pre\">loadtxt()</span></code> の <code class=\"docutils literal notranslate\"><span class=\"pre\">delimiter</span></code> 引数に同じ値を指定する必要があります。 ただし、区切り文字列はASCII（正確にはLatin-1）で解釈可能でなければなりません。</p>\n<p>大規模な配列をテキスト形式で保存すると、ファイルサイズがとても大きくなります。 そういう場合、圧縮保存が有用です。</p>\n<p>保存するファイル名の拡張子を <code class=\"docutils literal notranslate\"><span class=\"pre\">.gz</span></code> とすることで、<code class=\"docutils literal notranslate\"><span class=\"pre\">savetxt()</span></code> は自動的にGZip形式で圧縮して保存します。 復元するファイル名の拡張子が <code class=\"docutils literal notranslate\"><span class=\"pre\">.gz</span></code> であれば、<code class=\"docutils literal notranslate\"><span class=\"pre\">loadtxt()</span></code> はGZip形式だと判断して、自動的に解凍して復元します。</p>\n</section>\n<section id=\"▲真理値配列によるインデックスアクセス\">\n<h2>▲<strong>真理値配列によるインデックスアクセス</strong><a class=\"headerlink\" href=\"#▲真理値配列によるインデックスアクセス\" title=\"Link to this heading\">¶</a></h2>\n<p>配列に対して、比較演算を適用すると、算術演算と同様に要素毎に演算されて、真理値の配列が返ります。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[50]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">a</span> <span class=\"o\">=</span> <span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">arange</span><span class=\"p\">(</span><span class=\"mi\">6</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">a</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">a</span> <span class=\"o\">&lt;</span> <span class=\"mi\">3</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n[0 1 2 3 4 5]\n[ True  True  True False False False]\n</pre></div></div>\n</div>\n<p>このように作られた真理値配列は、インデックスとして利用することができます。 これによって、条件を満たす範囲を取り出すような記述が可能になります。 次の具体例を見てみましょう。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[51]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">a</span> <span class=\"o\">=</span> <span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">array</span><span class=\"p\">([</span><span class=\"mi\">0</span><span class=\"p\">,</span><span class=\"mi\">1</span><span class=\"p\">,</span><span class=\"mi\">2</span><span class=\"p\">,</span><span class=\"o\">-</span><span class=\"mi\">3</span><span class=\"p\">,</span><span class=\"o\">-</span><span class=\"mi\">4</span><span class=\"p\">,</span><span class=\"mi\">5</span><span class=\"p\">,</span><span class=\"o\">-</span><span class=\"mi\">6</span><span class=\"p\">,</span><span class=\"o\">-</span><span class=\"mi\">7</span><span class=\"p\">])</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">a</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">a</span><span class=\"p\">[</span><span class=\"n\">a</span> <span class=\"o\">&lt;</span> <span class=\"mi\">0</span><span class=\"p\">])</span> <span class=\"c1\"># 負の要素を取り出し</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">a</span><span class=\"p\">[(</span><span class=\"n\">a</span> <span class=\"o\">&lt;</span> <span class=\"mi\">0</span><span class=\"p\">)</span> <span class=\"o\">&amp;</span> <span class=\"p\">(</span><span class=\"n\">a</span> <span class=\"o\">%</span> <span class=\"mi\">2</span> <span class=\"o\">==</span> <span class=\"mi\">0</span><span class=\"p\">)])</span> <span class=\"c1\"># 負で偶数の要素を取り出し</span>\n<span class=\"n\">a</span><span class=\"p\">[</span><span class=\"n\">a</span> <span class=\"o\">&lt;</span> <span class=\"mi\">0</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"mi\">8</span> <span class=\"c1\"># 負の要素を8に上書き</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">a</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n[ 0  1  2 -3 -4  5 -6 -7]\n[-3 -4 -6 -7]\n[-4 -6]\n[0 1 2 8 8 5 8 8]\n</pre></div></div>\n</div>\n<p>一見すると単なる条件式のように見えますが、インデックスとなるのは真理値ではなく真理値の配列です。 したがって、真理値を返す <code class=\"docutils literal notranslate\"><span class=\"pre\">and</span></code>・<code class=\"docutils literal notranslate\"><span class=\"pre\">or</span></code>・<code class=\"docutils literal notranslate\"><span class=\"pre\">not</span></code> の代わりに、要素毎の演算を行う <code class=\"docutils literal notranslate\"><span class=\"pre\">&amp;</span></code>・<code class=\"docutils literal notranslate\"><span class=\"pre\">|</span></code>・<code class=\"docutils literal notranslate\"><span class=\"pre\">~</span></code> を用いる必要があります。</p>\n<p>同様の記法は、7-1で扱うpandasライブラリでも利用されます。</p>\n</section>\n<section id=\"▲線形代数の演算\">\n<h2>▲線形代数の演算<a class=\"headerlink\" href=\"#▲線形代数の演算\" title=\"Link to this heading\">¶</a></h2>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">numpy.dot()</span></code> は、2次元配列を与えたときには、行列積となりました。 それだけでなく、行列積専用の <code class=\"docutils literal notranslate\"><span class=\"pre\">numpy.matmul()</span></code> も提供されています。</p>\n<p>また、単位行列は <code class=\"docutils literal notranslate\"><span class=\"pre\">numpy.identity()</span></code> 関数で作成することができます。 引数に行列のサイズを指定します。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[52]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">I</span> <span class=\"o\">=</span> <span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">identity</span><span class=\"p\">(</span><span class=\"mi\">3</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">I</span><span class=\"p\">)</span>\n<span class=\"n\">a</span> <span class=\"o\">=</span> <span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">arange</span><span class=\"p\">(</span><span class=\"mi\">9</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">reshape</span><span class=\"p\">(</span><span class=\"mi\">3</span><span class=\"p\">,</span><span class=\"mi\">3</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">a</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">matmul</span><span class=\"p\">(</span><span class=\"n\">a</span><span class=\"p\">,</span> <span class=\"n\">I</span><span class=\"p\">))</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n[[1. 0. 0.]\n [0. 1. 0.]\n [0. 0. 1.]]\n[[0 1 2]\n [3 4 5]\n [6 7 8]]\n[[0. 1. 2.]\n [3. 4. 5.]\n [6. 7. 8.]]\n</pre></div></div>\n</div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">numpy.linalg.norm()</span></code> 関数は、与えられたベクトル（1次元配列）もしくは行列（2次元配列）のノルムを返します。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[53]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">linalg</span><span class=\"o\">.</span><span class=\"n\">norm</span><span class=\"p\">(</span><span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">ones</span><span class=\"p\">(</span><span class=\"mi\">3</span><span class=\"p\">))</span> <span class=\"c1\"># ユークリッドノルムを計算するのでsqrt(3)と等しい</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[53]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nnp.float64(1.7320508075688772)\n</pre></div></div>\n</div>\n<p>NumPyでは、行列の分解、転置、行列式などの計算を含む線形代数の演算は、<code class=\"docutils literal notranslate\"><span class=\"pre\">numpy.linalg</span></code> モジュールで提供されています。 詳しくは、<a class=\"reference external\" href=\"https://docs.scipy.org/doc/numpy/reference/routines.linalg.html\">線形代数関連関数</a>を参照してください。</p>\n</section>\n<section id=\"練習の解答\">\n<h2>練習の解答<a class=\"headerlink\" href=\"#練習の解答\" title=\"Link to this heading\">¶</a></h2>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[54]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">def</span> <span class=\"nf\">arange_square_matrix</span><span class=\"p\">(</span><span class=\"n\">n</span><span class=\"p\">):</span>\n    <span class=\"k\">return</span> <span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">array</span><span class=\"p\">([</span><span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">arange</span><span class=\"p\">(</span><span class=\"n\">i</span><span class=\"p\">,</span> <span class=\"n\">n</span><span class=\"o\">+</span><span class=\"n\">i</span><span class=\"p\">)</span> <span class=\"k\">for</span> <span class=\"n\">i</span> <span class=\"ow\">in</span> <span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"n\">n</span><span class=\"p\">)])</span>\n</pre></div>\n</div>\n</div>\n</section>\n</section>\n\n\n          </div>\n          \n        </div>\n      </div>\n      <div class=\"sphinxsidebar\" role=\"navigation\" aria-label=\"Main\">\n        <div class=\"sphinxsidebarwrapper\">\n<h1 class=\"logo\"><a href=\"../index.html\">Pythonプログラミング入門</a></h1>\n\n\n\n\n\n\n\n\n<p>\n  <a style=\"font-family: sans-serif; font-size: smaller; background: linear-gradient(to top, #353535 0%, #141414 100%); -webkit-font-smoothing: antialiased; font-weight: normal; text-shadow: rgb(0 0 0 / 40%) 0 -1px 0; padding: 2px 6px; color: #fff; text-decoration: none; border-radius: 4px; border: 1px solid #0d0d0d; box-shadow: inset 0 1px 1px 0 #8f8f8f;\" href=\"https://github.com/utokyo-ipp/utokyo-ipp.github.io\">View on GitHub</a>\n</p><p>\n  <a style=\"font-family: sans-serif; font-size: smaller; background: linear-gradient(to top, #ff1e00 0%, #de1e00 100%); -webkit-font-smoothing: antialiased; font-weight: normal; text-shadow: rgb(0 0 0 / 40%) 0 -1px 0; padding: 2px 6px; color: #fff; text-decoration: none; border-radius: 4px; border: 1px solid #0d0d0d; box-shadow: inset 0 1px 1px 0 #ff8e70;\" href=\"https://utokyo-ipp.github.io/IPP_textbook.pdf\">View PDF</a>\n</p><p>\n  <a style=\"border-bottom: none;\" href=\"https://colab.research.google.com/github/utokyo-ipp/utokyo-ipp.github.io/blob/master/colab/5/5-3.ipynb\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Google Colaboratory\"></a>\n</p><h3>Navigation</h3>\n<ul class=\"current\">\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../1/1-0.html\">1-0. Colaboratory (Colab) の使い方</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../1/1-1.html\">1-1. 数値演算</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../1/1-2.html\">1-2. 変数と関数の基礎</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../1/1-3.html\">1-3. 論理・比較演算と条件分岐の基礎</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../1/1-4.html\">1-4. テストとデバッグ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../2/2-1.html\">2-1. 文字列 (string)</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../2/2-2.html\">2-2. リスト (list)</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../2/2-3.html\">2-3. 条件分岐</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../3/3-1.html\">3-1. 辞書 (dictionary)</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../3/3-2.html\">3-2. 繰り返し</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../3/3-3.html\">3-3. 関数</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../4/4-1.html\">4-1. ファイル入出力の基本</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../4/4-2.html\">4-2. イテラブルとイテレータ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../4/4-3.html\">4-3. ディレクトリと木構造</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"5-1.html\">5-1. モジュールの使い方</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"5-2.html\">5-2. モジュールの作り方</a></li>\n<li class=\"toctree-l1 current\"><a class=\"current reference internal\" href=\"#\">5-3. NumPyライブラリ</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#配列の構築\">配列の構築</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#配列要素を生成する構築関数\">配列要素を生成する構築関数</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#練習\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#配列要素の操作\">配列要素の操作</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#要素毎の演算\">要素毎の演算</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#よく使われる配列操作\">よく使われる配列操作</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#配列の保存と復元\">配列の保存と復元</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#▲真理値配列によるインデックスアクセス\">▲<strong>真理値配列によるインデックスアクセス</strong></a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#▲線形代数の演算\">▲線形代数の演算</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#練習の解答\">練習の解答</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../6/6-1.html\">6-1. 内包表記</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../6/6-2.html\">6-2. 高階関数</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../6/6-3.html\">6-3. クラス</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../7/7-1.html\">7-1. pandasライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../7/7-2.html\">7-2. scikit-learnライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/1-jupyter-notebook.html\">▲Jupyter Notebook の使い方</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/2-set.html\">▲セット (set)</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/3-recursion.html\">▲再帰</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/3-visualization.html\">▲簡単なデータの可視化</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/4-csv.html\">▲CSVファイルの入出力</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/5-bokeh.html\">▲Bokehライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/5-command.html\">▲Pythonスクリプトとコマンドライン実行</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/5-matplotlib.html\">▲Matplotlibライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/5-re.html\">▲正規表現</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../index_of_terms.html\">索引</a></li>\n</ul>\n\n<div class=\"relations\">\n<h3>Related Topics</h3>\n<ul>\n  <li><a href=\"../index.html\">Documentation overview</a><ul>\n      <li>Previous: <a href=\"5-2.html\" title=\"previous chapter\">5-2. モジュールの作り方</a></li>\n      <li>Next: <a href=\"../6/6-1.html\" title=\"next chapter\">6-1. 内包表記</a></li>\n  </ul></li>\n</ul>\n</div>\n<search id=\"searchbox\" style=\"display: none\" role=\"search\">\n  <h3 id=\"searchlabel\">Quick search</h3>\n    <div class=\"searchformwrapper\">\n    <form class=\"search\" action=\"../search.html\" method=\"get\">\n      <input type=\"text\" name=\"q\" aria-labelledby=\"searchlabel\" autocomplete=\"off\" autocorrect=\"off\" autocapitalize=\"off\" spellcheck=\"false\"/>\n      <input type=\"submit\" value=\"Go\" />\n    </form>\n    </div>\n</search>\n<script>document.getElementById('searchbox').style.display = \"block\"</script>\n\n\n\n\n\n\n\n\n        </div>\n      </div>\n      <div class=\"clearer\"></div>\n    </div>\n    <div class=\"footer\">\n      &#169;2020–2024, 東京大学 数理・情報教育研究センター (CC BY-NC-ND 4.0).\n      \n      |\n      Powered by <a href=\"https://www.sphinx-doc.org/\">Sphinx 8.0.2</a>\n      &amp; <a href=\"https://alabaster.readthedocs.io\">Alabaster 1.0.0</a>\n      \n    </div>\n\n    \n\n    \n    <script>\n\n      var _gaq = _gaq || [];\n      _gaq.push(['_setAccount', 'G-8M0RXGPPSR']);\n      _gaq.push(['_setDomainName', 'none']);\n      _gaq.push(['_setAllowLinker', true]);\n      _gaq.push(['_trackPageview']);\n\n      (function() {\n        var ga = document.createElement('script'); ga.async = true;\n        ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'https://www') + '.google-analytics.com/ga.js';\n        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);\n      })();\n\n    </script>\n    \n  </body>\n</html>"
  },
  {
    "path": "docs/6/6-1.html",
    "content": "<!DOCTYPE html>\n\n<html lang=\"jp\" data-content_root=\"../\">\n  <head>\n    <meta charset=\"utf-8\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" /><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n\n    <!-- Google tag (gtag.js) -->\n    <script async src=\"https://www.googletagmanager.com/gtag/js?id=G-8M0RXGPPSR\"></script>\n    <script>\n        window.dataLayer = window.dataLayer || [];\n        function gtag(){dataLayer.push(arguments);}\n        gtag('js', new Date());\n        gtag('config', 'G-8M0RXGPPSR');\n    </script>\n    \n    <title>6-1. 内包表記 &#8212; Pythonプログラミング入門  documentation</title>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/pygments.css?v=d1102ebc\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/basic.css?v=c058f7c8\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/alabaster.css?v=27fed22d\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/nbsphinx-code-cells.css\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/custom.css?v=1a1aa8dd\" />\n    <script src=\"../_static/documentation_options.js?v=3ff7d7a7\"></script>\n    <script src=\"../_static/doctools.js?v=9a2dae69\"></script>\n    <script src=\"../_static/sphinx_highlight.js?v=dc90522c\"></script>\n    <script crossorigin=\"anonymous\" integrity=\"sha256-Ae2Vz/4ePdIu6ZyI/5ZGsYnb+m0JlOmKPjt6XZ9JJkA=\" src=\"https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.4/require.min.js\"></script>\n    <script>window.MathJax = {\"tex\": {\"inlineMath\": [[\"$\", \"$\"], [\"\\\\(\", \"\\\\)\"]], \"processEscapes\": true}, \"options\": {\"ignoreHtmlClass\": \"tex2jax_ignore|mathjax_ignore|document\", \"processHtmlClass\": \"tex2jax_process|mathjax_process|math|output_area\"}}</script>\n    <script defer=\"defer\" src=\"https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js\"></script>\n    <link rel=\"index\" title=\"Index\" href=\"../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../search.html\" />\n    <link rel=\"next\" title=\"6-2. 高階関数\" href=\"6-2.html\" />\n    <link rel=\"prev\" title=\"5-3. NumPyライブラリ\" href=\"../5/5-3.html\" />\n   \n  <link rel=\"stylesheet\" href=\"../_static/custom.css\" type=\"text/css\" />\n  \n\n  \n  \n\n  </head><body>\n  \n\n    <div class=\"document\">\n      <div class=\"documentwrapper\">\n        <div class=\"bodywrapper\">\n          \n\n          <div class=\"body\" role=\"main\">\n            \n  <section id=\"6-1.-内包表記\">\n<h1>6-1. 内包表記<a class=\"headerlink\" href=\"#6-1.-内包表記\" title=\"Link to this heading\">¶</a></h1>\n<p><strong>内包表記</strong>について説明します。</p>\n<p>参考:</p>\n<ul class=\"simple\">\n<li><p><a class=\"reference external\" href=\"https://docs.python.org/ja/3/tutorial/datastructures.html#list-comprehensions\">https://docs.python.org/ja/3/tutorial/datastructures.html#list-comprehensions</a></p></li>\n<li><p><a class=\"reference external\" href=\"https://docs.python.org/ja/3/tutorial/datastructures.html#nested-list-comprehensions\">https://docs.python.org/ja/3/tutorial/datastructures.html#nested-list-comprehensions</a></p></li>\n</ul>\n<section id=\"リスト内包表記\">\n<h2>リスト内包表記<a class=\"headerlink\" href=\"#リスト内包表記\" title=\"Link to this heading\">¶</a></h2>\n<p>Pythonでは各種の<strong>内包表記</strong> (comprehension) が利用できます。</p>\n<p>以下のような整数の自乗を要素に持つリストを作るプログラムでは、</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[1]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">squares1</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n<span class=\"k\">for</span> <span class=\"n\">x</span> <span class=\"ow\">in</span> <span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"mi\">6</span><span class=\"p\">):</span>\n    <span class=\"n\">squares1</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"o\">**</span><span class=\"mi\">2</span><span class=\"p\">)</span>\n<span class=\"n\">squares1</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[1]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n[0, 1, 4, 9, 16, 25]\n</pre></div></div>\n</div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">squares1</span></code> として <code class=\"docutils literal notranslate\"><span class=\"pre\">[0,</span> <span class=\"pre\">1,</span> <span class=\"pre\">4,</span> <span class=\"pre\">9,</span> <span class=\"pre\">16,</span> <span class=\"pre\">25]</span></code> が得られます。 これを内包表記を用いて書き換えると、以下のように一行で書け、プログラムが読みやすくなります。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[2]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">squares2</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"n\">x</span><span class=\"o\">**</span><span class=\"mi\">2</span> <span class=\"k\">for</span> <span class=\"n\">x</span> <span class=\"ow\">in</span> <span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"mi\">6</span><span class=\"p\">)]</span>\n<span class=\"n\">squares2</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[2]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n[0, 1, 4, 9, 16, 25]\n</pre></div></div>\n</div>\n<p>関数 <code class=\"docutils literal notranslate\"><span class=\"pre\">sum</span></code> は与えられた数のリストの総和を求めます。 （2-2の練習にあった <code class=\"docutils literal notranslate\"><span class=\"pre\">sum_list</span></code> と同じ機能を持つ組み込みの関数です。） 内包表記に対して <code class=\"docutils literal notranslate\"><span class=\"pre\">sum</span></code> を適用すると以下のようになります。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[3]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">sum</span><span class=\"p\">([</span><span class=\"n\">x</span><span class=\"o\">**</span><span class=\"mi\">2</span> <span class=\"k\">for</span> <span class=\"n\">x</span> <span class=\"ow\">in</span> <span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"mi\">6</span><span class=\"p\">)])</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[3]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n55\n</pre></div></div>\n</div>\n<p>以下の内包表記は3-2で用いられていました。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[4]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"p\">[</span><span class=\"nb\">chr</span><span class=\"p\">(</span><span class=\"n\">i</span> <span class=\"o\">+</span> <span class=\"nb\">ord</span><span class=\"p\">(</span><span class=\"s1\">&#39;a&#39;</span><span class=\"p\">))</span> <span class=\"k\">for</span> <span class=\"n\">i</span> <span class=\"ow\">in</span> <span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"mi\">26</span><span class=\"p\">)]</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[4]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n[&#39;a&#39;,\n &#39;b&#39;,\n &#39;c&#39;,\n &#39;d&#39;,\n &#39;e&#39;,\n &#39;f&#39;,\n &#39;g&#39;,\n &#39;h&#39;,\n &#39;i&#39;,\n &#39;j&#39;,\n &#39;k&#39;,\n &#39;l&#39;,\n &#39;m&#39;,\n &#39;n&#39;,\n &#39;o&#39;,\n &#39;p&#39;,\n &#39;q&#39;,\n &#39;r&#39;,\n &#39;s&#39;,\n &#39;t&#39;,\n &#39;u&#39;,\n &#39;v&#39;,\n &#39;w&#39;,\n &#39;x&#39;,\n &#39;y&#39;,\n &#39;z&#39;]\n</pre></div></div>\n</div>\n</section>\n<section id=\"練習\">\n<h2>練習<a class=\"headerlink\" href=\"#練習\" title=\"Link to this heading\">¶</a></h2>\n<p>文字列のリストが変数 <code class=\"docutils literal notranslate\"><span class=\"pre\">strings</span></code> に与えられたとき、 それぞれの文字列の長さからなるリストを返す内包表記を記述してください。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">strings</span> <span class=\"pre\">=</span> <span class=\"pre\">['The',</span> <span class=\"pre\">'quick',</span> <span class=\"pre\">'brown']</span></code> のとき、結果は <code class=\"docutils literal notranslate\"><span class=\"pre\">[3,</span> <span class=\"pre\">5,</span> <span class=\"pre\">5]</span></code> となります。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[5]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">strings</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s1\">&#39;The&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;quick&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;brown&#39;</span><span class=\"p\">]</span>\n<span class=\"p\">[</span><span class=\"n\">ここに内包表記を書く</span><span class=\"p\">]</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n<span class=\"ansi-red-fg\">---------------------------------------------------------------------------</span>\n<span class=\"ansi-red-fg\">NameError</span>                                 Traceback (most recent call last)\nCell <span class=\"ansi-green-fg\">In[5], line 2</span>\n<span class=\"ansi-green-intense-fg ansi-bold\">      1</span> strings <span style=\"color: rgb(98,98,98)\">=</span> [<span style=\"color: rgb(175,0,0)\">&#39;</span><span style=\"color: rgb(175,0,0)\">The</span><span style=\"color: rgb(175,0,0)\">&#39;</span>, <span style=\"color: rgb(175,0,0)\">&#39;</span><span style=\"color: rgb(175,0,0)\">quick</span><span style=\"color: rgb(175,0,0)\">&#39;</span>, <span style=\"color: rgb(175,0,0)\">&#39;</span><span style=\"color: rgb(175,0,0)\">brown</span><span style=\"color: rgb(175,0,0)\">&#39;</span>]\n<span class=\"ansi-green-fg\">----&gt; 2</span> [<span class=\"ansi-yellow-bg\">ここに内包表記を書く</span>]\n\n<span class=\"ansi-red-fg\">NameError</span>: name &#39;ここに内包表記を書く&#39; is not defined\n</pre></div></div>\n</div>\n</section>\n<section id=\"id4\">\n<h2>練習<a class=\"headerlink\" href=\"#id4\" title=\"Link to this heading\">¶</a></h2>\n<p>コンマで区切られた10進数からなる文字列が変数 <code class=\"docutils literal notranslate\"><span class=\"pre\">str1</span></code> に与えられたとき、 それぞれの10進数を数に変換して得られるリストを返す内包表記を記述してください。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">str1</span> <span class=\"pre\">=</span> <span class=\"pre\">'123,45,-3'</span></code> のとき、結果は <code class=\"docutils literal notranslate\"><span class=\"pre\">[123,</span> <span class=\"pre\">45,</span> <span class=\"pre\">-3]</span></code> となります。</p>\n<p>なお、コンマで区切られた10進数からなる文字列を、10進数の文字列のリストに変換するには、メソッド <code class=\"docutils literal notranslate\"><span class=\"pre\">split</span></code> を用いることができます。 また、10進数の文字列を数に変換するには、<code class=\"docutils literal notranslate\"><span class=\"pre\">int</span></code> を関数として用いることができます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[6]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">str1</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;123,45,-3&#39;</span>\n<span class=\"p\">[</span><span class=\"n\">ここに内包表記を書く</span><span class=\"p\">]</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n<span class=\"ansi-red-fg\">---------------------------------------------------------------------------</span>\n<span class=\"ansi-red-fg\">NameError</span>                                 Traceback (most recent call last)\nCell <span class=\"ansi-green-fg\">In[6], line 2</span>\n<span class=\"ansi-green-intense-fg ansi-bold\">      1</span> str1 <span style=\"color: rgb(98,98,98)\">=</span> <span style=\"color: rgb(175,0,0)\">&#39;</span><span style=\"color: rgb(175,0,0)\">123,45,-3</span><span style=\"color: rgb(175,0,0)\">&#39;</span>\n<span class=\"ansi-green-fg\">----&gt; 2</span> [<span class=\"ansi-yellow-bg\">ここに内包表記を書く</span>]\n\n<span class=\"ansi-red-fg\">NameError</span>: name &#39;ここに内包表記を書く&#39; is not defined\n</pre></div></div>\n</div>\n</section>\n<section id=\"id5\">\n<h2>練習<a class=\"headerlink\" href=\"#id5\" title=\"Link to this heading\">¶</a></h2>\n<p>数のリストが与えらえたとき、リストの要素の分散を求める関数 <code class=\"docutils literal notranslate\"><span class=\"pre\">var</span></code> を 内包表記と関数 <code class=\"docutils literal notranslate\"><span class=\"pre\">sum</span></code> を用いて定義してください。 以下のセルの <code class=\"docutils literal notranslate\"><span class=\"pre\">...</span></code> のところを書き換えて <code class=\"docutils literal notranslate\"><span class=\"pre\">var</span></code> を作成してください。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[7]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">def</span> <span class=\"nf\">var</span><span class=\"p\">(</span><span class=\"n\">lst</span><span class=\"p\">):</span>\n    <span class=\"o\">...</span>\n</pre></div>\n</div>\n</div>\n<p>上のセルで解答を作成した後、以下のセルを実行し、実行結果が <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> になることを確認してください。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[8]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">var</span><span class=\"p\">([</span><span class=\"mi\">3</span><span class=\"p\">,</span><span class=\"mi\">4</span><span class=\"p\">,</span><span class=\"mi\">1</span><span class=\"p\">,</span><span class=\"mi\">2</span><span class=\"p\">])</span> <span class=\"o\">==</span> <span class=\"mf\">1.25</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nFalse\n</pre></div></div>\n</div>\n</section>\n<section id=\"内包表記の入れ子\">\n<h2>内包表記の入れ子<a class=\"headerlink\" href=\"#内包表記の入れ子\" title=\"Link to this heading\">¶</a></h2>\n<p>また内包表記を<strong>入れ子</strong>（<strong>ネスト</strong>）にすることも可能です:</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[9]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"p\">[[</span><span class=\"n\">x</span><span class=\"o\">*</span><span class=\"n\">y</span> <span class=\"k\">for</span> <span class=\"n\">y</span> <span class=\"ow\">in</span> <span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"o\">+</span><span class=\"mi\">1</span><span class=\"p\">)]</span> <span class=\"k\">for</span> <span class=\"n\">x</span> <span class=\"ow\">in</span> <span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"mi\">4</span><span class=\"p\">)]</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[9]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n[[0], [0, 1], [0, 2, 4], [0, 3, 6, 9]]\n</pre></div></div>\n</div>\n<p>ネストした内包表記は、外側から読むとわかりやすいです。 <code class=\"docutils literal notranslate\"><span class=\"pre\">x</span></code> を <code class=\"docutils literal notranslate\"><span class=\"pre\">0</span></code> から <code class=\"docutils literal notranslate\"><span class=\"pre\">3</span></code> まで動かしてリストが作られます。 そのリストの要素1つ1つは内包表記によるリストになっていて、 それぞれのリストは <code class=\"docutils literal notranslate\"><span class=\"pre\">y</span></code> を 0 から <code class=\"docutils literal notranslate\"><span class=\"pre\">x</span></code> まで動かして得られます。</p>\n<p>以下のリストは、上の2重のリストをフラットにしたものです。 この内包表記では、<code class=\"docutils literal notranslate\"><span class=\"pre\">for</span></code> が2重になっていますが、自然に左から読んでください。 <code class=\"docutils literal notranslate\"><span class=\"pre\">x</span></code> を <code class=\"docutils literal notranslate\"><span class=\"pre\">0</span></code> から <code class=\"docutils literal notranslate\"><span class=\"pre\">3</span></code> まで動かし、そのそれぞれに対して <code class=\"docutils literal notranslate\"><span class=\"pre\">y</span></code> を <code class=\"docutils literal notranslate\"><span class=\"pre\">0</span></code> から <code class=\"docutils literal notranslate\"><span class=\"pre\">x</span></code> まで動かします。 その各ステップで得られた <code class=\"docutils literal notranslate\"><span class=\"pre\">x*y</span></code> の値をリストにします。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[10]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"p\">[</span><span class=\"n\">x</span><span class=\"o\">*</span><span class=\"n\">y</span> <span class=\"k\">for</span> <span class=\"n\">x</span> <span class=\"ow\">in</span> <span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"mi\">4</span><span class=\"p\">)</span> <span class=\"k\">for</span> <span class=\"n\">y</span> <span class=\"ow\">in</span> <span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"o\">+</span><span class=\"mi\">1</span><span class=\"p\">)]</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[10]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n[0, 0, 1, 0, 2, 4, 0, 3, 6, 9]\n</pre></div></div>\n</div>\n<p>以下の関数は、与えられた文字列の全ての空でない部分文字列からなるリストを返します。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[11]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">def</span> <span class=\"nf\">allsubstrings</span><span class=\"p\">(</span><span class=\"n\">s</span><span class=\"p\">):</span>\n    <span class=\"k\">return</span> <span class=\"p\">[</span><span class=\"n\">s</span><span class=\"p\">[</span><span class=\"n\">i</span><span class=\"p\">:</span><span class=\"n\">j</span><span class=\"p\">]</span> <span class=\"k\">for</span> <span class=\"n\">i</span> <span class=\"ow\">in</span> <span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">s</span><span class=\"p\">))</span> <span class=\"k\">for</span> <span class=\"n\">j</span> <span class=\"ow\">in</span> <span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"n\">i</span><span class=\"o\">+</span><span class=\"mi\">1</span><span class=\"p\">,</span><span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">s</span><span class=\"p\">)</span><span class=\"o\">+</span><span class=\"mi\">1</span><span class=\"p\">)]</span>\n\n<span class=\"n\">allsubstrings</span><span class=\"p\">(</span><span class=\"s1\">&#39;abc&#39;</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[11]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n[&#39;a&#39;, &#39;ab&#39;, &#39;abc&#39;, &#39;b&#39;, &#39;bc&#39;, &#39;c&#39;]\n</pre></div></div>\n</div>\n</section>\n<section id=\"id7\">\n<h2>練習<a class=\"headerlink\" href=\"#id7\" title=\"Link to this heading\">¶</a></h2>\n<p>次のような関数 <code class=\"docutils literal notranslate\"><span class=\"pre\">sum_lists</span></code> を作成してください。</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">sum_lists</span></code> はリスト <code class=\"docutils literal notranslate\"><span class=\"pre\">list1</span></code> を引数とします。</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">list1</span></code> の各要素はリストであり、そのリストの要素は数です。</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">sum_lists</span></code> は、<code class=\"docutils literal notranslate\"><span class=\"pre\">list1</span></code> の各要素であるリストの総和を求め、それらの総和を足し合せて返します。</p></li>\n</ul>\n<p>ここでは、内包表記と関数 <code class=\"docutils literal notranslate\"><span class=\"pre\">sum</span></code> を用いて <code class=\"docutils literal notranslate\"><span class=\"pre\">sum_lists</span></code> を定義してください。 以下のセルの <code class=\"docutils literal notranslate\"><span class=\"pre\">...</span></code> のところを書き換えて <code class=\"docutils literal notranslate\"><span class=\"pre\">sum_lists</span></code> を作成してください。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[12]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">def</span> <span class=\"nf\">sum_lists</span><span class=\"p\">(</span><span class=\"n\">list1</span><span class=\"p\">):</span>\n    <span class=\"o\">...</span>\n</pre></div>\n</div>\n</div>\n<p>上のセルで解答を作成した後、以下のセルを実行し、実行結果が <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> になることを確認してください。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[13]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">sum_lists</span><span class=\"p\">([[</span><span class=\"mi\">20</span><span class=\"p\">,</span> <span class=\"mi\">5</span><span class=\"p\">],</span> <span class=\"p\">[</span><span class=\"mi\">6</span><span class=\"p\">,</span> <span class=\"mi\">16</span><span class=\"p\">,</span> <span class=\"mi\">14</span><span class=\"p\">,</span> <span class=\"mi\">5</span><span class=\"p\">],</span> <span class=\"p\">[</span><span class=\"mi\">16</span><span class=\"p\">,</span> <span class=\"mi\">8</span><span class=\"p\">,</span> <span class=\"mi\">16</span><span class=\"p\">,</span> <span class=\"mi\">17</span><span class=\"p\">,</span> <span class=\"mi\">14</span><span class=\"p\">],</span> <span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">],</span> <span class=\"p\">[</span><span class=\"mi\">5</span><span class=\"p\">,</span> <span class=\"mi\">3</span><span class=\"p\">,</span> <span class=\"mi\">5</span><span class=\"p\">,</span> <span class=\"mi\">7</span><span class=\"p\">]])</span> <span class=\"o\">==</span> <span class=\"mi\">158</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nFalse\n</pre></div></div>\n</div>\n</section>\n<section id=\"id8\">\n<h2>練習<a class=\"headerlink\" href=\"#id8\" title=\"Link to this heading\">¶</a></h2>\n<p>リスト <code class=\"docutils literal notranslate\"><span class=\"pre\">list1</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">list2</span></code> が引数として与えられたとき、次のようなリスト <code class=\"docutils literal notranslate\"><span class=\"pre\">list3</span></code> を返す関数 <code class=\"docutils literal notranslate\"><span class=\"pre\">sum_matrix</span></code> を作成してください。</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">list1</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">list2</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">list3</span></code> は、3つの要素を持ちます。</p></li>\n<li><p>各要素は大きさ 3 のリストになっており、そのリストの要素は全て数です。</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">list3[i][j]</span></code> （ただし、<code class=\"docutils literal notranslate\"><span class=\"pre\">i</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">j</span></code> は共に、0 以上 2 以下の整数）は <code class=\"docutils literal notranslate\"><span class=\"pre\">list1[i][j]</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">list2[i][j]</span></code> の値の和になっています。</p></li>\n</ul>\n<p>ここでは、内包表記を用いて<code class=\"docutils literal notranslate\"><span class=\"pre\">sum_matrix</span></code> を定義してください。以下のセルの <code class=\"docutils literal notranslate\"><span class=\"pre\">...</span></code> のところを書き換えて <code class=\"docutils literal notranslate\"><span class=\"pre\">sum_matrix</span></code> を作成してください。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[14]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">def</span> <span class=\"nf\">sum_matrix</span><span class=\"p\">(</span><span class=\"n\">list1</span><span class=\"p\">,</span> <span class=\"n\">list2</span><span class=\"p\">):</span>\n    <span class=\"o\">...</span>\n</pre></div>\n</div>\n</div>\n<p>上のセルで解答を作成した後、以下のセルを実行し、実行結果が <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> になることを確認してください。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[15]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">sum_matrix</span><span class=\"p\">([[</span><span class=\"mi\">1</span><span class=\"p\">,</span><span class=\"mi\">5</span><span class=\"p\">,</span><span class=\"mi\">3</span><span class=\"p\">],[</span><span class=\"mi\">4</span><span class=\"p\">,</span><span class=\"mi\">5</span><span class=\"p\">,</span><span class=\"mi\">6</span><span class=\"p\">],[</span><span class=\"mi\">7</span><span class=\"p\">,</span><span class=\"mi\">8</span><span class=\"p\">,</span><span class=\"mi\">9</span><span class=\"p\">]],</span> <span class=\"p\">[[</span><span class=\"mi\">1</span><span class=\"p\">,</span><span class=\"mi\">4</span><span class=\"p\">,</span><span class=\"mi\">7</span><span class=\"p\">],[</span><span class=\"mi\">2</span><span class=\"p\">,</span><span class=\"mi\">5</span><span class=\"p\">,</span><span class=\"mi\">8</span><span class=\"p\">],[</span><span class=\"mi\">3</span><span class=\"p\">,</span><span class=\"mi\">6</span><span class=\"p\">,</span><span class=\"mi\">9</span><span class=\"p\">]])</span><span class=\"o\">==</span><span class=\"p\">[[</span><span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"mi\">9</span><span class=\"p\">,</span> <span class=\"mi\">10</span><span class=\"p\">],</span> <span class=\"p\">[</span><span class=\"mi\">6</span><span class=\"p\">,</span> <span class=\"mi\">10</span><span class=\"p\">,</span> <span class=\"mi\">14</span><span class=\"p\">],</span> <span class=\"p\">[</span><span class=\"mi\">10</span><span class=\"p\">,</span> <span class=\"mi\">14</span><span class=\"p\">,</span> <span class=\"mi\">18</span><span class=\"p\">]])</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nFalse\n</pre></div></div>\n</div>\n</section>\n<section id=\"▲条件付き内包表記\">\n<h2>▲<strong>条件付き内包表記</strong><a class=\"headerlink\" href=\"#▲条件付き内包表記\" title=\"Link to this heading\">¶</a></h2>\n<p>内包表記は <code class=\"docutils literal notranslate\"><span class=\"pre\">for</span></code> に加えて <code class=\"docutils literal notranslate\"><span class=\"pre\">if</span></code> を使うこともできます:</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[16]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">words</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s1\">&#39;cat&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;dog&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;elephant&#39;</span><span class=\"p\">,</span> <span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"s1\">&#39;giraffe&#39;</span><span class=\"p\">]</span>\n<span class=\"n\">length</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">w</span><span class=\"p\">)</span> <span class=\"k\">for</span> <span class=\"n\">w</span> <span class=\"ow\">in</span> <span class=\"n\">words</span> <span class=\"k\">if</span> <span class=\"n\">w</span> <span class=\"o\">!=</span> <span class=\"kc\">None</span><span class=\"p\">]</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">length</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n[3, 3, 8, 7]\n</pre></div></div>\n</div>\n<p>この場合、<code class=\"docutils literal notranslate\"><span class=\"pre\">length</span></code> として要素が <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code> の場合を除いた <code class=\"docutils literal notranslate\"><span class=\"pre\">[3,</span> <span class=\"pre\">3,</span> <span class=\"pre\">8,</span> <span class=\"pre\">7]</span></code> が得られます。</p>\n</section>\n<section id=\"▲セット内包表記\">\n<h2>▲<strong>セット内包表記</strong><a class=\"headerlink\" href=\"#▲セット内包表記\" title=\"Link to this heading\">¶</a></h2>\n<p>内包表記はセット（集合）に対しても使うことができます:</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[17]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">words</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s1\">&#39;cat&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;dog&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;elephant&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;giraffe&#39;</span><span class=\"p\">]</span>\n<span class=\"n\">length_set</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">w</span><span class=\"p\">)</span> <span class=\"k\">for</span> <span class=\"n\">w</span> <span class=\"ow\">in</span> <span class=\"n\">words</span><span class=\"p\">}</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">length_set</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n{8, 3, 7}\n</pre></div></div>\n</div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">length_set</span></code> として <code class=\"docutils literal notranslate\"><span class=\"pre\">{3,</span> <span class=\"pre\">7,</span> <span class=\"pre\">8}</span></code> が得られます。 セット型なので、リストと異なり重複する要素は除かれます。</p>\n</section>\n<section id=\"▲辞書内包表記\">\n<h2>▲<strong>辞書内包表記</strong><a class=\"headerlink\" href=\"#▲辞書内包表記\" title=\"Link to this heading\">¶</a></h2>\n<p>さらに、内包表記は辞書型でも使うことができます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[18]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">words</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s1\">&#39;cat&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;dog&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;elephant&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;giraffe&#39;</span><span class=\"p\">]</span>\n<span class=\"n\">length_dic</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"n\">w</span><span class=\"p\">:</span><span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">w</span><span class=\"p\">)</span> <span class=\"k\">for</span> <span class=\"n\">w</span> <span class=\"ow\">in</span> <span class=\"n\">words</span><span class=\"p\">}</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">length_dic</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n{&#39;cat&#39;: 3, &#39;dog&#39;: 3, &#39;elephant&#39;: 8, &#39;giraffe&#39;: 7}\n</pre></div></div>\n</div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">length_dic</span></code> として <code class=\"docutils literal notranslate\"><span class=\"pre\">{'cat':</span> <span class=\"pre\">3,</span> <span class=\"pre\">'dog':</span> <span class=\"pre\">3,</span> <span class=\"pre\">'elephant':</span> <span class=\"pre\">8,</span> <span class=\"pre\">'giraffe':</span> <span class=\"pre\">7}</span></code> が得られます。</p>\n<p>長さと文字列を逆にするとどうなるでしょうか。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[19]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">length_rdic</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">w</span><span class=\"p\">):</span> <span class=\"n\">w</span> <span class=\"k\">for</span> <span class=\"n\">w</span> <span class=\"ow\">in</span> <span class=\"n\">words</span><span class=\"p\">}</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">length_rdic</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n{3: &#39;dog&#39;, 8: &#39;elephant&#39;, 7: &#39;giraffe&#39;}\n</pre></div></div>\n</div>\n</section>\n<section id=\"▲ジェネレータ式\">\n<h2>▲<strong>ジェネレータ式</strong><a class=\"headerlink\" href=\"#▲ジェネレータ式\" title=\"Link to this heading\">¶</a></h2>\n<p>内包表記と似たものとして、ジェネレータ式というものがあります。 リスト内包表記の <code class=\"docutils literal notranslate\"><span class=\"pre\">[]</span></code> を <code class=\"docutils literal notranslate\"><span class=\"pre\">()</span></code> に置き換えれば、ジェネレータ式になります。 ジェネレータ式は、4-2で説明した<strong>イテレータ</strong>を構築します。 4-2で説明したように、イテレータは、for文で走査（全要素を訪問）できます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[20]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">it</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"n\">x</span> <span class=\"o\">*</span> <span class=\"mi\">3</span> <span class=\"k\">for</span> <span class=\"n\">x</span> <span class=\"ow\">in</span> <span class=\"s1\">&#39;abc&#39;</span><span class=\"p\">)</span>\n<span class=\"k\">for</span> <span class=\"n\">x</span> <span class=\"ow\">in</span> <span class=\"n\">it</span><span class=\"p\">:</span>\n    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\naaa\nbbb\nccc\n</pre></div></div>\n</div>\n<p>イテレータを組み込み関数 <code class=\"docutils literal notranslate\"><span class=\"pre\">list()</span></code> や <code class=\"docutils literal notranslate\"><span class=\"pre\">tuple()</span></code> に渡すと、対応するリストやタプルが構築されます。 なお、ジェネレータ式を直接引数とするときには、ジェネレータ式の外側の <code class=\"docutils literal notranslate\"><span class=\"pre\">()</span></code> は省略可能です。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[21]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">list</span><span class=\"p\">(</span><span class=\"n\">x</span> <span class=\"o\">**</span> <span class=\"mi\">2</span> <span class=\"k\">for</span> <span class=\"n\">x</span> <span class=\"ow\">in</span> <span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"mi\">5</span><span class=\"p\">))</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[21]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n[0, 1, 4, 9, 16]\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[22]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">tuple</span><span class=\"p\">(</span><span class=\"n\">x</span> <span class=\"o\">**</span> <span class=\"mi\">2</span> <span class=\"k\">for</span> <span class=\"n\">x</span> <span class=\"ow\">in</span> <span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"mi\">5</span><span class=\"p\">))</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[22]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n(0, 1, 4, 9, 16)\n</pre></div></div>\n</div>\n<p>総和を計算する組み込み関数 <code class=\"docutils literal notranslate\"><span class=\"pre\">sum()</span></code> など、リストやタプルを引数に取れる大抵の関数には、イテレータも渡せます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[23]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">sum</span><span class=\"p\">(</span><span class=\"n\">x</span> <span class=\"o\">**</span> <span class=\"mi\">2</span> <span class=\"k\">for</span> <span class=\"n\">x</span> <span class=\"ow\">in</span> <span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"mi\">5</span><span class=\"p\">))</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[23]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n30\n</pre></div></div>\n</div>\n<p>上の例において、ジェネレータ式の代わりにリスト内包表記を用いても同じ結果を得ますが、 計算の途中で実際にリストを構築するので、メモリ消費が大きいです。 ジェネレータ式では、リストのように走査できるイテレータを構築するだけなので、リスト内包表記よりメモリ効率がよいです。 したがって、関数に渡すだけの一時オブジェクトには、リスト内包表記ではなくジェネレータ式を用いるのが有効です。</p>\n</section>\n<section id=\"練習の解答\">\n<h2>練習の解答<a class=\"headerlink\" href=\"#練習の解答\" title=\"Link to this heading\">¶</a></h2>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[24]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">strings</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s1\">&#39;The&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;quick&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;brown&#39;</span><span class=\"p\">]</span>\n<span class=\"p\">[</span><span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">)</span> <span class=\"k\">for</span> <span class=\"n\">x</span> <span class=\"ow\">in</span> <span class=\"n\">strings</span><span class=\"p\">]</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[24]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n[3, 5, 5]\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[25]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">str1</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;123,45,-3&#39;</span>\n<span class=\"p\">[</span><span class=\"nb\">int</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">)</span> <span class=\"k\">for</span> <span class=\"n\">x</span> <span class=\"ow\">in</span> <span class=\"n\">str1</span><span class=\"o\">.</span><span class=\"n\">split</span><span class=\"p\">(</span><span class=\"s1\">&#39;,&#39;</span><span class=\"p\">)]</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[25]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n[123, 45, -3]\n</pre></div></div>\n</div>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[26]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">def</span> <span class=\"nf\">var</span><span class=\"p\">(</span><span class=\"n\">lst</span><span class=\"p\">):</span>\n    <span class=\"n\">n</span> <span class=\"o\">=</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">lst</span><span class=\"p\">)</span>\n    <span class=\"n\">av</span> <span class=\"o\">=</span> <span class=\"nb\">sum</span><span class=\"p\">(</span><span class=\"n\">lst</span><span class=\"p\">)</span><span class=\"o\">/</span><span class=\"n\">n</span>\n    <span class=\"k\">return</span> <span class=\"nb\">sum</span><span class=\"p\">([(</span><span class=\"n\">x</span> <span class=\"o\">-</span> <span class=\"n\">av</span><span class=\"p\">)</span><span class=\"o\">*</span><span class=\"p\">(</span><span class=\"n\">x</span> <span class=\"o\">-</span> <span class=\"n\">av</span><span class=\"p\">)</span> <span class=\"k\">for</span> <span class=\"n\">x</span> <span class=\"ow\">in</span> <span class=\"n\">lst</span><span class=\"p\">])</span><span class=\"o\">/</span><span class=\"n\">n</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[27]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">def</span> <span class=\"nf\">var</span><span class=\"p\">(</span><span class=\"n\">lst</span><span class=\"p\">):</span>\n    <span class=\"n\">n</span> <span class=\"o\">=</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">lst</span><span class=\"p\">)</span>\n    <span class=\"n\">av</span> <span class=\"o\">=</span> <span class=\"nb\">sum</span><span class=\"p\">(</span><span class=\"n\">lst</span><span class=\"p\">)</span><span class=\"o\">/</span><span class=\"n\">n</span>\n    <span class=\"k\">return</span> <span class=\"nb\">sum</span><span class=\"p\">([</span><span class=\"n\">x</span><span class=\"o\">*</span><span class=\"n\">x</span> <span class=\"k\">for</span> <span class=\"n\">x</span> <span class=\"ow\">in</span> <span class=\"n\">lst</span><span class=\"p\">])</span><span class=\"o\">/</span><span class=\"n\">n</span> <span class=\"o\">-</span> <span class=\"n\">av</span><span class=\"o\">*</span><span class=\"n\">av</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[28]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">def</span> <span class=\"nf\">sum_lists</span><span class=\"p\">(</span><span class=\"n\">list1</span><span class=\"p\">):</span>\n    <span class=\"k\">return</span> <span class=\"nb\">sum</span><span class=\"p\">([</span><span class=\"nb\">sum</span><span class=\"p\">(</span><span class=\"n\">lst</span><span class=\"p\">)</span> <span class=\"k\">for</span> <span class=\"n\">lst</span> <span class=\"ow\">in</span> <span class=\"n\">list1</span><span class=\"p\">])</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[29]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">def</span> <span class=\"nf\">sum_matrix</span><span class=\"p\">(</span><span class=\"n\">list1</span><span class=\"p\">,</span><span class=\"n\">list2</span><span class=\"p\">):</span>\n    <span class=\"k\">return</span> <span class=\"p\">[[</span><span class=\"n\">list1</span><span class=\"p\">[</span><span class=\"n\">i</span><span class=\"p\">][</span><span class=\"n\">j</span><span class=\"p\">]</span> <span class=\"o\">+</span> <span class=\"n\">list2</span><span class=\"p\">[</span><span class=\"n\">i</span><span class=\"p\">][</span><span class=\"n\">j</span><span class=\"p\">]</span> <span class=\"k\">for</span> <span class=\"n\">j</span> <span class=\"ow\">in</span> <span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"mi\">3</span><span class=\"p\">)]</span> <span class=\"k\">for</span> <span class=\"n\">i</span> <span class=\"ow\">in</span> <span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"mi\">3</span><span class=\"p\">)]</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[ ]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span>\n</pre></div>\n</div>\n</div>\n</section>\n</section>\n\n\n          </div>\n          \n        </div>\n      </div>\n      <div class=\"sphinxsidebar\" role=\"navigation\" aria-label=\"Main\">\n        <div class=\"sphinxsidebarwrapper\">\n<h1 class=\"logo\"><a href=\"../index.html\">Pythonプログラミング入門</a></h1>\n\n\n\n\n\n\n\n\n<p>\n  <a style=\"font-family: sans-serif; font-size: smaller; background: linear-gradient(to top, #353535 0%, #141414 100%); -webkit-font-smoothing: antialiased; font-weight: normal; text-shadow: rgb(0 0 0 / 40%) 0 -1px 0; padding: 2px 6px; color: #fff; text-decoration: none; border-radius: 4px; border: 1px solid #0d0d0d; box-shadow: inset 0 1px 1px 0 #8f8f8f;\" href=\"https://github.com/utokyo-ipp/utokyo-ipp.github.io\">View on GitHub</a>\n</p><p>\n  <a style=\"font-family: sans-serif; font-size: smaller; background: linear-gradient(to top, #ff1e00 0%, #de1e00 100%); -webkit-font-smoothing: antialiased; font-weight: normal; text-shadow: rgb(0 0 0 / 40%) 0 -1px 0; padding: 2px 6px; color: #fff; text-decoration: none; border-radius: 4px; border: 1px solid #0d0d0d; box-shadow: inset 0 1px 1px 0 #ff8e70;\" href=\"https://utokyo-ipp.github.io/IPP_textbook.pdf\">View PDF</a>\n</p><p>\n  <a style=\"border-bottom: none;\" href=\"https://colab.research.google.com/github/utokyo-ipp/utokyo-ipp.github.io/blob/master/colab/6/6-1.ipynb\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Google Colaboratory\"></a>\n</p><h3>Navigation</h3>\n<ul class=\"current\">\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../1/1-0.html\">1-0. Colaboratory (Colab) の使い方</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../1/1-1.html\">1-1. 数値演算</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../1/1-2.html\">1-2. 変数と関数の基礎</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../1/1-3.html\">1-3. 論理・比較演算と条件分岐の基礎</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../1/1-4.html\">1-4. テストとデバッグ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../2/2-1.html\">2-1. 文字列 (string)</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../2/2-2.html\">2-2. リスト (list)</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../2/2-3.html\">2-3. 条件分岐</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../3/3-1.html\">3-1. 辞書 (dictionary)</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../3/3-2.html\">3-2. 繰り返し</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../3/3-3.html\">3-3. 関数</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../4/4-1.html\">4-1. ファイル入出力の基本</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../4/4-2.html\">4-2. イテラブルとイテレータ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../4/4-3.html\">4-3. ディレクトリと木構造</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../5/5-1.html\">5-1. モジュールの使い方</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../5/5-2.html\">5-2. モジュールの作り方</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../5/5-3.html\">5-3. NumPyライブラリ</a></li>\n<li class=\"toctree-l1 current\"><a class=\"current reference internal\" href=\"#\">6-1. 内包表記</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#リスト内包表記\">リスト内包表記</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#練習\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#id4\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#id5\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#内包表記の入れ子\">内包表記の入れ子</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#id7\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#id8\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#▲条件付き内包表記\">▲<strong>条件付き内包表記</strong></a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#▲セット内包表記\">▲<strong>セット内包表記</strong></a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#▲辞書内包表記\">▲<strong>辞書内包表記</strong></a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#▲ジェネレータ式\">▲<strong>ジェネレータ式</strong></a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#練習の解答\">練習の解答</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"6-2.html\">6-2. 高階関数</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"6-3.html\">6-3. クラス</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../7/7-1.html\">7-1. pandasライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../7/7-2.html\">7-2. scikit-learnライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/1-jupyter-notebook.html\">▲Jupyter Notebook の使い方</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/2-set.html\">▲セット (set)</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/3-recursion.html\">▲再帰</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/3-visualization.html\">▲簡単なデータの可視化</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/4-csv.html\">▲CSVファイルの入出力</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/5-bokeh.html\">▲Bokehライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/5-command.html\">▲Pythonスクリプトとコマンドライン実行</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/5-matplotlib.html\">▲Matplotlibライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/5-re.html\">▲正規表現</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../index_of_terms.html\">索引</a></li>\n</ul>\n\n<div class=\"relations\">\n<h3>Related Topics</h3>\n<ul>\n  <li><a href=\"../index.html\">Documentation overview</a><ul>\n      <li>Previous: <a href=\"../5/5-3.html\" title=\"previous chapter\">5-3. NumPyライブラリ</a></li>\n      <li>Next: <a href=\"6-2.html\" title=\"next chapter\">6-2. 高階関数</a></li>\n  </ul></li>\n</ul>\n</div>\n<search id=\"searchbox\" style=\"display: none\" role=\"search\">\n  <h3 id=\"searchlabel\">Quick search</h3>\n    <div class=\"searchformwrapper\">\n    <form class=\"search\" action=\"../search.html\" method=\"get\">\n      <input type=\"text\" name=\"q\" aria-labelledby=\"searchlabel\" autocomplete=\"off\" autocorrect=\"off\" autocapitalize=\"off\" spellcheck=\"false\"/>\n      <input type=\"submit\" value=\"Go\" />\n    </form>\n    </div>\n</search>\n<script>document.getElementById('searchbox').style.display = \"block\"</script>\n\n\n\n\n\n\n\n\n        </div>\n      </div>\n      <div class=\"clearer\"></div>\n    </div>\n    <div class=\"footer\">\n      &#169;2020–2024, 東京大学 数理・情報教育研究センター (CC BY-NC-ND 4.0).\n      \n      |\n      Powered by <a href=\"https://www.sphinx-doc.org/\">Sphinx 8.0.2</a>\n      &amp; <a href=\"https://alabaster.readthedocs.io\">Alabaster 1.0.0</a>\n      \n    </div>\n\n    \n\n    \n    <script>\n\n      var _gaq = _gaq || [];\n      _gaq.push(['_setAccount', 'G-8M0RXGPPSR']);\n      _gaq.push(['_setDomainName', 'none']);\n      _gaq.push(['_setAllowLinker', true]);\n      _gaq.push(['_trackPageview']);\n\n      (function() {\n        var ga = document.createElement('script'); ga.async = true;\n        ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'https://www') + '.google-analytics.com/ga.js';\n        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);\n      })();\n\n    </script>\n    \n  </body>\n</html>"
  },
  {
    "path": "docs/6/6-2.html",
    "content": "<!DOCTYPE html>\n\n<html lang=\"jp\" data-content_root=\"../\">\n  <head>\n    <meta charset=\"utf-8\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" /><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n\n    <!-- Google tag (gtag.js) -->\n    <script async src=\"https://www.googletagmanager.com/gtag/js?id=G-8M0RXGPPSR\"></script>\n    <script>\n        window.dataLayer = window.dataLayer || [];\n        function gtag(){dataLayer.push(arguments);}\n        gtag('js', new Date());\n        gtag('config', 'G-8M0RXGPPSR');\n    </script>\n    \n    <title>6-2. 高階関数 &#8212; Pythonプログラミング入門  documentation</title>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/pygments.css?v=d1102ebc\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/basic.css?v=c058f7c8\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/alabaster.css?v=27fed22d\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/nbsphinx-code-cells.css\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/custom.css?v=1a1aa8dd\" />\n    <script src=\"../_static/documentation_options.js?v=3ff7d7a7\"></script>\n    <script src=\"../_static/doctools.js?v=9a2dae69\"></script>\n    <script src=\"../_static/sphinx_highlight.js?v=dc90522c\"></script>\n    <script crossorigin=\"anonymous\" integrity=\"sha256-Ae2Vz/4ePdIu6ZyI/5ZGsYnb+m0JlOmKPjt6XZ9JJkA=\" src=\"https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.4/require.min.js\"></script>\n    <script>window.MathJax = {\"tex\": {\"inlineMath\": [[\"$\", \"$\"], [\"\\\\(\", \"\\\\)\"]], \"processEscapes\": true}, \"options\": {\"ignoreHtmlClass\": \"tex2jax_ignore|mathjax_ignore|document\", \"processHtmlClass\": \"tex2jax_process|mathjax_process|math|output_area\"}}</script>\n    <script defer=\"defer\" src=\"https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js\"></script>\n    <link rel=\"index\" title=\"Index\" href=\"../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../search.html\" />\n    <link rel=\"next\" title=\"6-3. クラス\" href=\"6-3.html\" />\n    <link rel=\"prev\" title=\"6-1. 内包表記\" href=\"6-1.html\" />\n   \n  <link rel=\"stylesheet\" href=\"../_static/custom.css\" type=\"text/css\" />\n  \n\n  \n  \n\n  </head><body>\n  \n\n    <div class=\"document\">\n      <div class=\"documentwrapper\">\n        <div class=\"bodywrapper\">\n          \n\n          <div class=\"body\" role=\"main\">\n            \n  <section id=\"6-2.-高階関数\">\n<h1>6-2. 高階関数<a class=\"headerlink\" href=\"#6-2.-高階関数\" title=\"Link to this heading\">¶</a></h1>\n<p>Pythonにおける高階関数について説明します。</p>\n<p>参考</p>\n<ul class=\"simple\">\n<li><p><a class=\"reference external\" href=\"https://docs.python.org/ja/3/howto/functional.html\">https://docs.python.org/ja/3/howto/functional.html</a></p></li>\n</ul>\n<section id=\"max\">\n<h2><code class=\"docutils literal notranslate\"><span class=\"pre\">max</span></code><a class=\"headerlink\" href=\"#max\" title=\"Link to this heading\">¶</a></h2>\n<p>例として、関数 <code class=\"docutils literal notranslate\"><span class=\"pre\">max</span></code> について考察します。<code class=\"docutils literal notranslate\"><span class=\"pre\">max</span></code> は与えられたリストの要素のうち、最大のものを返します。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[1]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">ls</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"mi\">3</span><span class=\"p\">,</span><span class=\"o\">-</span><span class=\"mi\">8</span><span class=\"p\">,</span><span class=\"mi\">1</span><span class=\"p\">,</span><span class=\"mi\">0</span><span class=\"p\">,</span><span class=\"mi\">7</span><span class=\"p\">,</span><span class=\"o\">-</span><span class=\"mi\">5</span><span class=\"p\">]</span>\n<span class=\"nb\">max</span><span class=\"p\">(</span><span class=\"n\">ls</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[1]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n7\n</pre></div></div>\n</div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">max</span></code> に <code class=\"docutils literal notranslate\"><span class=\"pre\">key</span></code> というキーワード引数として、たとえば関数 <code class=\"docutils literal notranslate\"><span class=\"pre\">abs</span></code> を与えることができます。 （キーワード引数について詳しくは、3-3を参照してください。）</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[2]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">max</span><span class=\"p\">(</span><span class=\"n\">ls</span><span class=\"p\">,</span> <span class=\"n\">key</span><span class=\"o\">=</span><span class=\"nb\">abs</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[2]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n-8\n</pre></div></div>\n</div>\n<p>この場合、各要素に関数 <code class=\"docutils literal notranslate\"><span class=\"pre\">abs</span></code> が適用されて、その結果が最も大きい要素が返ります。 （各要素に <code class=\"docutils literal notranslate\"><span class=\"pre\">abs</span></code> 適用した結果の中の最大値が返るわけではないことに注意してください。） なお、<code class=\"docutils literal notranslate\"><span class=\"pre\">abs(x)</span></code> は <code class=\"docutils literal notranslate\"><span class=\"pre\">x</span></code> の絶対値を返します。</p>\n<p>この場合、<code class=\"docutils literal notranslate\"><span class=\"pre\">max</span></code> という関数は、関数を引数として受け取っています。</p>\n<p>一般に、関数を引数として受け取ったり返値として返したりする関数を<strong>高階関数</strong>といいます。</p>\n</section>\n<section id=\"sorted\">\n<h2><code class=\"docutils literal notranslate\"><span class=\"pre\">sorted</span></code><a class=\"headerlink\" href=\"#sorted\" title=\"Link to this heading\">¶</a></h2>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">sorted</span></code> も高階関数で、<code class=\"docutils literal notranslate\"><span class=\"pre\">max</span></code> と同様に <code class=\"docutils literal notranslate\"><span class=\"pre\">key</span></code> というキーワード引数を取ります。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[3]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">sorted</span><span class=\"p\">(</span><span class=\"n\">ls</span><span class=\"p\">,</span> <span class=\"n\">key</span><span class=\"o\">=</span><span class=\"nb\">abs</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[3]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n[0, 1, 3, -5, 7, -8]\n</pre></div></div>\n</div>\n<p>このように、各要素に関数 <code class=\"docutils literal notranslate\"><span class=\"pre\">abs</span></code> を適用した結果によって、各要素をソートします。</p>\n<p>リストを降順にソートするには、次のような関数を用いればよいです。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[4]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">def</span> <span class=\"nf\">invert</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">):</span>\n    <span class=\"k\">return</span> <span class=\"o\">-</span><span class=\"n\">x</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[5]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">sorted</span><span class=\"p\">(</span><span class=\"n\">ls</span><span class=\"p\">,</span> <span class=\"n\">key</span><span class=\"o\">=</span><span class=\"n\">invert</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[5]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n[7, 3, 1, 0, -5, -8]\n</pre></div></div>\n</div>\n<p>なお、リストを降順にソートするには、<code class=\"docutils literal notranslate\"><span class=\"pre\">reverse</span></code> というキーワード引数に <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> を指定するという方法もあります。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[6]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">sorted</span><span class=\"p\">(</span><span class=\"n\">ls</span><span class=\"p\">,</span> <span class=\"n\">reverse</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[6]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n[7, 3, 1, 0, -5, -8]\n</pre></div></div>\n</div>\n</section>\n<section id=\"ラムダ式\">\n<h2>ラムダ式<a class=\"headerlink\" href=\"#ラムダ式\" title=\"Link to this heading\">¶</a></h2>\n<p>上の <code class=\"docutils literal notranslate\"><span class=\"pre\">invert</span></code> のような簡単な関数の場合、 いちいち <code class=\"docutils literal notranslate\"><span class=\"pre\">def</span></code> で定義するのは面倒と思いませんか。</p>\n<p>そのようなときは、<code class=\"docutils literal notranslate\"><span class=\"pre\">lambda</span></code> を使った<strong>ラムダ式</strong>（または<strong>無名関数</strong>）を用いることができます。 上の例は、以下のように書くことができます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[7]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">sorted</span><span class=\"p\">(</span><span class=\"n\">ls</span><span class=\"p\">,</span> <span class=\"n\">key</span><span class=\"o\">=</span><span class=\"k\">lambda</span> <span class=\"n\">x</span><span class=\"p\">:</span> <span class=\"o\">-</span><span class=\"n\">x</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[7]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n[7, 3, 1, 0, -5, -8]\n</pre></div></div>\n</div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">lambda</span> <span class=\"pre\">x:</span> <span class=\"pre\">-x</span></code> という式は、<code class=\"docutils literal notranslate\"><span class=\"pre\">x</span></code> をもらって <code class=\"docutils literal notranslate\"><span class=\"pre\">-x</span></code> を返す関数を表します。 <code class=\"docutils literal notranslate\"><span class=\"pre\">return</span></code> は書かないことに注意してください。</p>\n<p>さて、ここまで関数と呼んでいたものは、Pythonでは、オブジェクトの一種に他なりません。 実際に、<code class=\"docutils literal notranslate\"><span class=\"pre\">abs</span></code> や <code class=\"docutils literal notranslate\"><span class=\"pre\">lambda</span> <span class=\"pre\">x:</span> <span class=\"pre\">-x</span></code> という式の値を調べてみてください。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[8]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">abs</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[8]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n&lt;function abs(x, /)&gt;\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[9]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">lambda</span> <span class=\"n\">x</span><span class=\"p\">:</span> <span class=\"o\">-</span><span class=\"n\">x</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[9]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n&lt;function __main__.&lt;lambda&gt;(x)&gt;\n</pre></div></div>\n</div>\n<p>したがって、Pythonでは、関数を他の種類のデータ（数やリストや文字列など）と同様に、 関数の引数にしたり、リストの要素にしたり、することができます。</p>\n</section>\n<section id=\"リストからイテラブルへ\">\n<h2>リストからイテラブルへ<a class=\"headerlink\" href=\"#リストからイテラブルへ\" title=\"Link to this heading\">¶</a></h2>\n<p>以上の例では、<code class=\"docutils literal notranslate\"><span class=\"pre\">max</span></code> や <code class=\"docutils literal notranslate\"><span class=\"pre\">sorted</span></code> はリストを受け取っていましたが、 リストではなく、タプルでもいいですし、文字列でも構いません。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[10]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">max</span><span class=\"p\">((</span><span class=\"mi\">3</span><span class=\"p\">,</span><span class=\"o\">-</span><span class=\"mi\">8</span><span class=\"p\">,</span><span class=\"mi\">1</span><span class=\"p\">,</span><span class=\"mi\">0</span><span class=\"p\">,</span><span class=\"mi\">7</span><span class=\"p\">,</span><span class=\"o\">-</span><span class=\"mi\">5</span><span class=\"p\">))</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[10]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n7\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[11]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">sorted</span><span class=\"p\">((</span><span class=\"mi\">3</span><span class=\"p\">,</span><span class=\"o\">-</span><span class=\"mi\">8</span><span class=\"p\">,</span><span class=\"mi\">1</span><span class=\"p\">,</span><span class=\"mi\">0</span><span class=\"p\">,</span><span class=\"mi\">7</span><span class=\"p\">,</span><span class=\"o\">-</span><span class=\"mi\">5</span><span class=\"p\">))</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[11]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n[-8, -5, 0, 1, 3, 7]\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[12]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">max</span><span class=\"p\">(</span><span class=\"s1\">&#39;hello world&#39;</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[12]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n&#39;w&#39;\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[13]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">sorted</span><span class=\"p\">(</span><span class=\"s1\">&#39;hello world&#39;</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[13]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n[&#39; &#39;, &#39;d&#39;, &#39;e&#39;, &#39;h&#39;, &#39;l&#39;, &#39;l&#39;, &#39;l&#39;, &#39;o&#39;, &#39;o&#39;, &#39;r&#39;, &#39;w&#39;]\n</pre></div></div>\n</div>\n<p>すなわち、<code class=\"docutils literal notranslate\"><span class=\"pre\">max</span></code> や <code class=\"docutils literal notranslate\"><span class=\"pre\">sorted</span></code> は、一般にイテラブルを引数に取ることができます。</p>\n<p>イテラブルについては4-2に説明がありましたが、 簡単に言うと、<strong>イテラブル</strong>とはfor文の <code class=\"docutils literal notranslate\"><span class=\"pre\">in</span></code> の後に来ることができるものです。 <code class=\"docutils literal notranslate\"><span class=\"pre\">max</span></code> や <code class=\"docutils literal notranslate\"><span class=\"pre\">sorted</span></code> は、イテラブルの各要素を次々と求めて、 その中の最大値を求めたり、整列した結果をリストとして返したりします。</p>\n<p>以下の例では、<code class=\"docutils literal notranslate\"><span class=\"pre\">max</span></code> にファイルオブジェクトが渡されます。 ファイルオブジェクトはイテレータですので、イテラブルでもあります。 ファイルオブジェクトをfor文の <code class=\"docutils literal notranslate\"><span class=\"pre\">in</span></code> の後に指定すると、 ファイルの各行が文字列として得られます。 以下の例では、<code class=\"docutils literal notranslate\"><span class=\"pre\">key</span></code> として関数 <code class=\"docutils literal notranslate\"><span class=\"pre\">len</span></code> が指定されていますので、 ファイルの中で最も長い行が表示されます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[14]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">with</span> <span class=\"nb\">open</span><span class=\"p\">(</span><span class=\"s1\">&#39;jugemu.txt&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;r&#39;</span><span class=\"p\">,</span> <span class=\"n\">encoding</span><span class=\"o\">=</span><span class=\"s1\">&#39;utf-8&#39;</span><span class=\"p\">)</span> <span class=\"k\">as</span> <span class=\"n\">f</span><span class=\"p\">:</span>\n    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"nb\">max</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"p\">,</span> <span class=\"n\">key</span><span class=\"o\">=</span><span class=\"nb\">len</span><span class=\"p\">))</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nグーリンダイのポンポコピーのポンポコナーの、\n\n</pre></div></div>\n</div>\n<p>辞書もイテラブルです。<code class=\"docutils literal notranslate\"><span class=\"pre\">max</span></code> に辞書与えると、最大のキーが返ります。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[15]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">max</span><span class=\"p\">({</span><span class=\"mi\">3</span><span class=\"p\">:</span><span class=\"mi\">10</span><span class=\"p\">,</span> <span class=\"mi\">5</span><span class=\"p\">:</span><span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"mi\">9</span><span class=\"p\">:</span><span class=\"mi\">1</span><span class=\"p\">})</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[15]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n9\n</pre></div></div>\n</div>\n</section>\n<section id=\"練習\">\n<h2>練習<a class=\"headerlink\" href=\"#練習\" title=\"Link to this heading\">¶</a></h2>\n<p>辞書 <code class=\"docutils literal notranslate\"><span class=\"pre\">d</span></code> が与えられたとき、 最大の値を持つキー（複数個ならばそのいずれか）を返す関数 <code class=\"docutils literal notranslate\"><span class=\"pre\">max_value_key(d)</span></code> を、 <code class=\"docutils literal notranslate\"><span class=\"pre\">max</span></code> を使って定義してください。</p>\n<p>ヒント：辞書 <code class=\"docutils literal notranslate\"><span class=\"pre\">d</span></code> のキー <code class=\"docutils literal notranslate\"><span class=\"pre\">k</span></code> に対して、<code class=\"docutils literal notranslate\"><span class=\"pre\">k</span></code> に対応する値を返す関数は <code class=\"docutils literal notranslate\"><span class=\"pre\">lambda</span> <span class=\"pre\">k:</span> <span class=\"pre\">d[k]</span></code> という式で表すことができます。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[16]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">def</span> <span class=\"nf\">max_value_key</span><span class=\"p\">(</span><span class=\"n\">d</span><span class=\"p\">):</span>\n    <span class=\"o\">...</span>\n</pre></div>\n</div>\n</div>\n<p>上のセルで解答を作成した後、以下のセルを実行し、実行結果が <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> になることを確認してください。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[17]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">max_value_key</span><span class=\"p\">({</span><span class=\"mi\">3</span><span class=\"p\">:</span><span class=\"mi\">10</span><span class=\"p\">,</span> <span class=\"mi\">5</span><span class=\"p\">:</span><span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"mi\">9</span><span class=\"p\">:</span><span class=\"mi\">1</span><span class=\"p\">})</span> <span class=\"o\">==</span> <span class=\"mi\">3</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nFalse\n</pre></div></div>\n</div>\n</section>\n<section id=\"map\">\n<h2><code class=\"docutils literal notranslate\"><span class=\"pre\">map</span></code><a class=\"headerlink\" href=\"#map\" title=\"Link to this heading\">¶</a></h2>\n<p>以下は内包表記の例です。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[18]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"p\">[</span><span class=\"nb\">abs</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">)</span> <span class=\"k\">for</span> <span class=\"n\">x</span> <span class=\"ow\">in</span> <span class=\"p\">[</span><span class=\"mi\">3</span><span class=\"p\">,</span><span class=\"o\">-</span><span class=\"mi\">8</span><span class=\"p\">,</span><span class=\"mi\">1</span><span class=\"p\">,</span><span class=\"mi\">0</span><span class=\"p\">,</span><span class=\"mi\">7</span><span class=\"p\">,</span><span class=\"o\">-</span><span class=\"mi\">5</span><span class=\"p\">]]</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[18]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n[3, 8, 1, 0, 7, 5]\n</pre></div></div>\n</div>\n<p>リストの各要素に関数 <code class=\"docutils literal notranslate\"><span class=\"pre\">abs</span></code> が適用された結果がリストになります。</p>\n<p>同様のことを、高階関数 <code class=\"docutils literal notranslate\"><span class=\"pre\">map</span></code> を用いて行うことができます。 関数 <code class=\"docutils literal notranslate\"><span class=\"pre\">map</span></code> は、2番目の引数としてイテラブルを取ります。1番目の引数は関数です。 例を見ましょう。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[19]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">map</span><span class=\"p\">(</span><span class=\"nb\">abs</span><span class=\"p\">,</span> <span class=\"p\">[</span><span class=\"mi\">3</span><span class=\"p\">,</span><span class=\"o\">-</span><span class=\"mi\">8</span><span class=\"p\">,</span><span class=\"mi\">1</span><span class=\"p\">,</span><span class=\"mi\">0</span><span class=\"p\">,</span><span class=\"mi\">7</span><span class=\"p\">,</span><span class=\"o\">-</span><span class=\"mi\">5</span><span class=\"p\">])</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[19]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n&lt;map at 0x11288c2b0&gt;\n</pre></div></div>\n</div>\n<p>何が返ったか、よくわからないと思います。 以下のように、<code class=\"docutils literal notranslate\"><span class=\"pre\">map</span></code> の結果をfor文の <code class=\"docutils literal notranslate\"><span class=\"pre\">in</span></code> の後に指定してみましょう。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[20]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">for</span> <span class=\"n\">x</span> <span class=\"ow\">in</span> <span class=\"nb\">map</span><span class=\"p\">(</span><span class=\"nb\">abs</span><span class=\"p\">,</span> <span class=\"p\">[</span><span class=\"mi\">3</span><span class=\"p\">,</span><span class=\"o\">-</span><span class=\"mi\">8</span><span class=\"p\">,</span><span class=\"mi\">1</span><span class=\"p\">,</span><span class=\"mi\">0</span><span class=\"p\">,</span><span class=\"mi\">7</span><span class=\"p\">,</span><span class=\"o\">-</span><span class=\"mi\">5</span><span class=\"p\">]):</span>\n    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n3\n8\n1\n0\n7\n5\n</pre></div></div>\n</div>\n<p>すなわち、<code class=\"docutils literal notranslate\"><span class=\"pre\">map</span></code> が返すものは<strong>イテレータ</strong>です。 このイテレータは、2番目の引数のイテラブル（この例ではリスト）の各要素に 関数 <code class=\"docutils literal notranslate\"><span class=\"pre\">abs</span></code> を適用したものを、次々と返すようなイテレータです。</p>\n<p>内包表記を使えば、以下のようにリストにまとめることができます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[21]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"p\">[</span><span class=\"n\">x</span> <span class=\"k\">for</span> <span class=\"n\">x</span> <span class=\"ow\">in</span> <span class=\"nb\">map</span><span class=\"p\">(</span><span class=\"nb\">abs</span><span class=\"p\">,</span> <span class=\"p\">[</span><span class=\"mi\">3</span><span class=\"p\">,</span><span class=\"o\">-</span><span class=\"mi\">8</span><span class=\"p\">,</span><span class=\"mi\">1</span><span class=\"p\">,</span><span class=\"mi\">0</span><span class=\"p\">,</span><span class=\"mi\">7</span><span class=\"p\">,</span><span class=\"o\">-</span><span class=\"mi\">5</span><span class=\"p\">])]</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[21]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n[3, 8, 1, 0, 7, 5]\n</pre></div></div>\n</div>\n<p>関数 <code class=\"docutils literal notranslate\"><span class=\"pre\">list</span></code> をイテレータに適用してもよいです。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[22]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">list</span><span class=\"p\">(</span><span class=\"nb\">map</span><span class=\"p\">(</span><span class=\"nb\">abs</span><span class=\"p\">,</span> <span class=\"p\">[</span><span class=\"mi\">3</span><span class=\"p\">,</span><span class=\"o\">-</span><span class=\"mi\">8</span><span class=\"p\">,</span><span class=\"mi\">1</span><span class=\"p\">,</span><span class=\"mi\">0</span><span class=\"p\">,</span><span class=\"mi\">7</span><span class=\"p\">,</span><span class=\"o\">-</span><span class=\"mi\">5</span><span class=\"p\">]))</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[22]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n[3, 8, 1, 0, 7, 5]\n</pre></div></div>\n</div>\n<p>しかし、これでは、イテレータがどのように動くのか、よくわからないと思います。</p>\n<p>以下では、呼ばれるたびにメッセージを出力する関数 <code class=\"docutils literal notranslate\"><span class=\"pre\">abs1</span></code> を用います。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[23]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">def</span> <span class=\"nf\">abs1</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">):</span>\n    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s1\">&#39;abs called on&#39;</span><span class=\"p\">,</span> <span class=\"n\">x</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span> <span class=\"nb\">abs</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[24]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">it</span> <span class=\"o\">=</span> <span class=\"nb\">map</span><span class=\"p\">(</span><span class=\"n\">abs1</span><span class=\"p\">,</span> <span class=\"p\">[</span><span class=\"mi\">3</span><span class=\"p\">,</span><span class=\"o\">-</span><span class=\"mi\">8</span><span class=\"p\">,</span><span class=\"mi\">1</span><span class=\"p\">,</span><span class=\"mi\">0</span><span class=\"p\">,</span><span class=\"mi\">7</span><span class=\"p\">,</span><span class=\"o\">-</span><span class=\"mi\">5</span><span class=\"p\">])</span>\n</pre></div>\n</div>\n</div>\n<p>このように、<code class=\"docutils literal notranslate\"><span class=\"pre\">map</span></code> がイテレータを返した時点では、各要素に対する計算は何も行われません。</p>\n<p>このイテレータに <code class=\"docutils literal notranslate\"><span class=\"pre\">next</span></code> を適用するとどうなるか、見てください。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[25]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">next</span><span class=\"p\">(</span><span class=\"n\">it</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nabs called on 3\n</pre></div></div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[25]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n3\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[26]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">next</span><span class=\"p\">(</span><span class=\"n\">it</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nabs called on -8\n</pre></div></div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[26]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n8\n</pre></div></div>\n</div>\n<p>関数 <code class=\"docutils literal notranslate\"><span class=\"pre\">next</span></code> が呼ばれるたびに、次の要素を求める計算が行われていることがわかります。</p>\n<p>イテレータはイテラブルですから、<code class=\"docutils literal notranslate\"><span class=\"pre\">map</span></code> の結果にさらに <code class=\"docutils literal notranslate\"><span class=\"pre\">map</span></code> を適用することができます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[27]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">list</span><span class=\"p\">(</span><span class=\"nb\">map</span><span class=\"p\">(</span><span class=\"k\">lambda</span> <span class=\"n\">x</span><span class=\"p\">:</span> <span class=\"n\">x</span><span class=\"o\">+</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"nb\">map</span><span class=\"p\">(</span><span class=\"nb\">abs</span><span class=\"p\">,</span> <span class=\"p\">[</span><span class=\"mi\">3</span><span class=\"p\">,</span><span class=\"o\">-</span><span class=\"mi\">8</span><span class=\"p\">,</span><span class=\"mi\">1</span><span class=\"p\">,</span><span class=\"mi\">0</span><span class=\"p\">,</span><span class=\"mi\">7</span><span class=\"p\">,</span><span class=\"o\">-</span><span class=\"mi\">5</span><span class=\"p\">])))</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[27]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n[4, 9, 2, 1, 8, 6]\n</pre></div></div>\n</div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">lambda</span> <span class=\"pre\">x:</span> <span class=\"pre\">x+1</span></code> は、<code class=\"docutils literal notranslate\"><span class=\"pre\">x</span></code> をもらって <code class=\"docutils literal notranslate\"><span class=\"pre\">x+1</span></code> を返す関数です。 すなわち、引数に <code class=\"docutils literal notranslate\"><span class=\"pre\">1</span></code> を足した結果を返します。</p>\n<p>関数 <code class=\"docutils literal notranslate\"><span class=\"pre\">sum</span></code> は、<code class=\"docutils literal notranslate\"><span class=\"pre\">max</span></code> と同様に、イテラブルを受け取って、その要素の総和を返します。 したがって、<code class=\"docutils literal notranslate\"><span class=\"pre\">map</span></code> が返したイテレータに対しても適用できます。 （イテレータをリストに変換する必要はありません。）</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[28]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">sum</span><span class=\"p\">(</span><span class=\"nb\">map</span><span class=\"p\">(</span><span class=\"k\">lambda</span> <span class=\"n\">x</span><span class=\"p\">:</span> <span class=\"n\">x</span><span class=\"o\">+</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"nb\">map</span><span class=\"p\">(</span><span class=\"nb\">abs</span><span class=\"p\">,</span> <span class=\"p\">[</span><span class=\"mi\">3</span><span class=\"p\">,</span><span class=\"o\">-</span><span class=\"mi\">8</span><span class=\"p\">,</span><span class=\"mi\">1</span><span class=\"p\">,</span><span class=\"mi\">0</span><span class=\"p\">,</span><span class=\"mi\">7</span><span class=\"p\">,</span><span class=\"o\">-</span><span class=\"mi\">5</span><span class=\"p\">])))</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[28]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n30\n</pre></div></div>\n</div>\n</section>\n<section id=\"id5\">\n<h2>練習<a class=\"headerlink\" href=\"#id5\" title=\"Link to this heading\">¶</a></h2>\n<p>数のリストが与えられたとき、その要素の絶対値の最大値を返す関数 <code class=\"docutils literal notranslate\"><span class=\"pre\">max_abs</span></code> を、 <code class=\"docutils literal notranslate\"><span class=\"pre\">map</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">max</span></code> を使って定義してください。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[29]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">def</span> <span class=\"nf\">max_abs</span><span class=\"p\">(</span><span class=\"n\">ln</span><span class=\"p\">):</span>\n    <span class=\"o\">...</span>\n</pre></div>\n</div>\n</div>\n<p>上のセルで解答を作成した後、以下のセルを実行し、実行結果が <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> になることを確認してください。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[30]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">max_abs</span><span class=\"p\">([</span><span class=\"mi\">3</span><span class=\"p\">,</span><span class=\"o\">-</span><span class=\"mi\">8</span><span class=\"p\">,</span><span class=\"mi\">1</span><span class=\"p\">,</span><span class=\"mi\">0</span><span class=\"p\">,</span><span class=\"mi\">7</span><span class=\"p\">,</span><span class=\"o\">-</span><span class=\"mi\">5</span><span class=\"p\">])</span> <span class=\"o\">==</span> <span class=\"mi\">8</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nFalse\n</pre></div></div>\n</div>\n</section>\n<section id=\"filter\">\n<h2><code class=\"docutils literal notranslate\"><span class=\"pre\">filter</span></code><a class=\"headerlink\" href=\"#filter\" title=\"Link to this heading\">¶</a></h2>\n<p>関数 <code class=\"docutils literal notranslate\"><span class=\"pre\">filter</span></code> もイテラブルをもらってイテレータを返します。 最初の引数としては、真理値を返す関数を指定します。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[31]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">def</span> <span class=\"nf\">pos</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">):</span>\n    <span class=\"k\">if</span> <span class=\"n\">x</span><span class=\"o\">&gt;</span><span class=\"mi\">0</span><span class=\"p\">:</span>\n        <span class=\"k\">return</span> <span class=\"kc\">True</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"k\">return</span> <span class=\"kc\">False</span>\n</pre></div>\n</div>\n</div>\n<p>この関数 <code class=\"docutils literal notranslate\"><span class=\"pre\">pos</span></code> は、引数が正ならば <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code>、そうでなければ <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code> を返します。</p>\n<p>すると、以下のように、<code class=\"docutils literal notranslate\"><span class=\"pre\">filter</span></code> は <code class=\"docutils literal notranslate\"><span class=\"pre\">pos</span></code> を適用すると <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> が返る要素のみからなるイテレータを返します。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[32]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">list</span><span class=\"p\">(</span><span class=\"nb\">filter</span><span class=\"p\">(</span><span class=\"n\">pos</span><span class=\"p\">,</span> <span class=\"p\">[</span><span class=\"mi\">3</span><span class=\"p\">,</span><span class=\"o\">-</span><span class=\"mi\">8</span><span class=\"p\">,</span><span class=\"mi\">1</span><span class=\"p\">,</span><span class=\"mi\">0</span><span class=\"p\">,</span><span class=\"mi\">7</span><span class=\"p\">,</span><span class=\"o\">-</span><span class=\"mi\">5</span><span class=\"p\">]))</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[32]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n[3, 1, 7]\n</pre></div></div>\n</div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">filter</span></code> は、条件付き内包表記に対応しています。 同じ計算を以下のようにして行うことができます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[33]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"p\">[</span><span class=\"n\">x</span> <span class=\"k\">for</span> <span class=\"n\">x</span> <span class=\"ow\">in</span> <span class=\"p\">[</span><span class=\"mi\">3</span><span class=\"p\">,</span><span class=\"o\">-</span><span class=\"mi\">8</span><span class=\"p\">,</span><span class=\"mi\">1</span><span class=\"p\">,</span><span class=\"mi\">0</span><span class=\"p\">,</span><span class=\"mi\">7</span><span class=\"p\">,</span><span class=\"o\">-</span><span class=\"mi\">5</span><span class=\"p\">]</span> <span class=\"k\">if</span> <span class=\"n\">pos</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">)]</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[33]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n[3, 1, 7]\n</pre></div></div>\n</div>\n</section>\n<section id=\"id6\">\n<h2>練習<a class=\"headerlink\" href=\"#id6\" title=\"Link to this heading\">¶</a></h2>\n<p>数のリスト <code class=\"docutils literal notranslate\"><span class=\"pre\">ln</span></code> と数 <code class=\"docutils literal notranslate\"><span class=\"pre\">n</span></code> を受け取って、<code class=\"docutils literal notranslate\"><span class=\"pre\">ln</span></code> の要素のうち、<code class=\"docutils literal notranslate\"><span class=\"pre\">n</span></code> より大きい個数を返す関数 <code class=\"docutils literal notranslate\"><span class=\"pre\">number_of_big_numbers(ln,</span> <span class=\"pre\">n)</span></code> を、for文やwhile文を用いずに、<code class=\"docutils literal notranslate\"><span class=\"pre\">filter</span></code> を用いて定義してください。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[34]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">def</span> <span class=\"nf\">number_of_big_numbers</span><span class=\"p\">(</span><span class=\"n\">ln</span><span class=\"p\">,</span> <span class=\"n\">n</span><span class=\"p\">):</span>\n    <span class=\"o\">...</span>\n</pre></div>\n</div>\n</div>\n<p>上のセルで解答を作成した後、以下のセルを実行し、実行結果が <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> になることを確認してください。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[35]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">number_of_big_numbers</span><span class=\"p\">([</span><span class=\"mi\">10</span><span class=\"p\">,</span> <span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"mi\">7</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">5</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"mi\">9</span><span class=\"p\">],</span> <span class=\"mi\">5</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"mi\">3</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nFalse\n</pre></div></div>\n</div>\n</section>\n<section id=\"id7\">\n<h2>練習<a class=\"headerlink\" href=\"#id7\" title=\"Link to this heading\">¶</a></h2>\n<p>ファイル名 <code class=\"docutils literal notranslate\"><span class=\"pre\">file</span></code> と整数 <code class=\"docutils literal notranslate\"><span class=\"pre\">n</span></code> を受け取って、そのファイルをオープンし、 （改行文字も含めて）長さが <code class=\"docutils literal notranslate\"><span class=\"pre\">n</span></code> より長い行の数を返す関数 <code class=\"docutils literal notranslate\"><span class=\"pre\">number_of_long_lines(file,n)</span></code> を定義してください。 （ファイルは <code class=\"docutils literal notranslate\"><span class=\"pre\">encoding='utf-8'</span></code> でオープンしてください。）</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[36]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">def</span> <span class=\"nf\">number_of_long_lines</span><span class=\"p\">(</span><span class=\"n\">file</span><span class=\"p\">,</span> <span class=\"n\">n</span><span class=\"p\">):</span>\n    <span class=\"o\">...</span>\n</pre></div>\n</div>\n</div>\n<p>上のセルで解答を作成した後、以下のセルを実行し、実行結果が <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> になることを確認してください。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[37]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">number_of_long_lines</span><span class=\"p\">(</span><span class=\"s1\">&#39;jugemu.txt&#39;</span><span class=\"p\">,</span> <span class=\"mi\">10</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"mi\">6</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nFalse\n</pre></div></div>\n</div>\n</section>\n<section id=\"練習の解答\">\n<h2>練習の解答<a class=\"headerlink\" href=\"#練習の解答\" title=\"Link to this heading\">¶</a></h2>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[38]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">def</span> <span class=\"nf\">max_value_key</span><span class=\"p\">(</span><span class=\"n\">d</span><span class=\"p\">):</span>\n    <span class=\"k\">return</span> <span class=\"nb\">max</span><span class=\"p\">(</span><span class=\"n\">d</span><span class=\"p\">,</span> <span class=\"n\">key</span><span class=\"o\">=</span><span class=\"k\">lambda</span> <span class=\"n\">k</span><span class=\"p\">:</span> <span class=\"n\">d</span><span class=\"p\">[</span><span class=\"n\">k</span><span class=\"p\">])</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[39]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">def</span> <span class=\"nf\">max_abs</span><span class=\"p\">(</span><span class=\"n\">ln</span><span class=\"p\">):</span>\n    <span class=\"k\">return</span> <span class=\"nb\">max</span><span class=\"p\">(</span><span class=\"nb\">map</span><span class=\"p\">(</span><span class=\"nb\">abs</span><span class=\"p\">,</span> <span class=\"n\">ln</span><span class=\"p\">))</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[40]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">def</span> <span class=\"nf\">number_of_big_numbers</span><span class=\"p\">(</span><span class=\"n\">ln</span><span class=\"p\">,</span> <span class=\"n\">n</span><span class=\"p\">):</span>\n    <span class=\"k\">return</span> <span class=\"nb\">sum</span><span class=\"p\">(</span><span class=\"nb\">map</span><span class=\"p\">(</span><span class=\"k\">lambda</span> <span class=\"n\">x</span><span class=\"p\">:</span> <span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"nb\">filter</span><span class=\"p\">(</span><span class=\"k\">lambda</span> <span class=\"n\">x</span><span class=\"p\">:</span> <span class=\"n\">x</span><span class=\"o\">&gt;</span><span class=\"n\">n</span><span class=\"p\">,</span> <span class=\"n\">ln</span><span class=\"p\">)))</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[41]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">def</span> <span class=\"nf\">number_of_long_lines</span><span class=\"p\">(</span><span class=\"n\">file</span><span class=\"p\">,</span> <span class=\"n\">n</span><span class=\"p\">):</span>\n    <span class=\"k\">with</span> <span class=\"nb\">open</span><span class=\"p\">(</span><span class=\"n\">file</span><span class=\"p\">,</span> <span class=\"s1\">&#39;r&#39;</span><span class=\"p\">,</span> <span class=\"n\">encoding</span><span class=\"o\">=</span><span class=\"s1\">&#39;utf-8&#39;</span><span class=\"p\">)</span> <span class=\"k\">as</span> <span class=\"n\">f</span><span class=\"p\">:</span>\n        <span class=\"k\">return</span> <span class=\"nb\">sum</span><span class=\"p\">(</span><span class=\"nb\">map</span><span class=\"p\">(</span><span class=\"k\">lambda</span> <span class=\"n\">x</span><span class=\"p\">:</span> <span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"nb\">filter</span><span class=\"p\">(</span><span class=\"k\">lambda</span> <span class=\"n\">x</span><span class=\"p\">:</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">)</span><span class=\"o\">&gt;</span><span class=\"n\">n</span><span class=\"p\">,</span> <span class=\"n\">f</span><span class=\"p\">)))</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[ ]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span>\n</pre></div>\n</div>\n</div>\n</section>\n</section>\n\n\n          </div>\n          \n        </div>\n      </div>\n      <div class=\"sphinxsidebar\" role=\"navigation\" aria-label=\"Main\">\n        <div class=\"sphinxsidebarwrapper\">\n<h1 class=\"logo\"><a href=\"../index.html\">Pythonプログラミング入門</a></h1>\n\n\n\n\n\n\n\n\n<p>\n  <a style=\"font-family: sans-serif; font-size: smaller; background: linear-gradient(to top, #353535 0%, #141414 100%); -webkit-font-smoothing: antialiased; font-weight: normal; text-shadow: rgb(0 0 0 / 40%) 0 -1px 0; padding: 2px 6px; color: #fff; text-decoration: none; border-radius: 4px; border: 1px solid #0d0d0d; box-shadow: inset 0 1px 1px 0 #8f8f8f;\" href=\"https://github.com/utokyo-ipp/utokyo-ipp.github.io\">View on GitHub</a>\n</p><p>\n  <a style=\"font-family: sans-serif; font-size: smaller; background: linear-gradient(to top, #ff1e00 0%, #de1e00 100%); -webkit-font-smoothing: antialiased; font-weight: normal; text-shadow: rgb(0 0 0 / 40%) 0 -1px 0; padding: 2px 6px; color: #fff; text-decoration: none; border-radius: 4px; border: 1px solid #0d0d0d; box-shadow: inset 0 1px 1px 0 #ff8e70;\" href=\"https://utokyo-ipp.github.io/IPP_textbook.pdf\">View PDF</a>\n</p><p>\n  <a style=\"border-bottom: none;\" href=\"https://colab.research.google.com/github/utokyo-ipp/utokyo-ipp.github.io/blob/master/colab/6/6-2.ipynb\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Google Colaboratory\"></a>\n</p><h3>Navigation</h3>\n<ul class=\"current\">\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../1/1-0.html\">1-0. Colaboratory (Colab) の使い方</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../1/1-1.html\">1-1. 数値演算</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../1/1-2.html\">1-2. 変数と関数の基礎</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../1/1-3.html\">1-3. 論理・比較演算と条件分岐の基礎</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../1/1-4.html\">1-4. テストとデバッグ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../2/2-1.html\">2-1. 文字列 (string)</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../2/2-2.html\">2-2. リスト (list)</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../2/2-3.html\">2-3. 条件分岐</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../3/3-1.html\">3-1. 辞書 (dictionary)</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../3/3-2.html\">3-2. 繰り返し</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../3/3-3.html\">3-3. 関数</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../4/4-1.html\">4-1. ファイル入出力の基本</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../4/4-2.html\">4-2. イテラブルとイテレータ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../4/4-3.html\">4-3. ディレクトリと木構造</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../5/5-1.html\">5-1. モジュールの使い方</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../5/5-2.html\">5-2. モジュールの作り方</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../5/5-3.html\">5-3. NumPyライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"6-1.html\">6-1. 内包表記</a></li>\n<li class=\"toctree-l1 current\"><a class=\"current reference internal\" href=\"#\">6-2. 高階関数</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#max\"><code class=\"docutils literal notranslate\"><span class=\"pre\">max</span></code></a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#sorted\"><code class=\"docutils literal notranslate\"><span class=\"pre\">sorted</span></code></a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#ラムダ式\">ラムダ式</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#リストからイテラブルへ\">リストからイテラブルへ</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#練習\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#map\"><code class=\"docutils literal notranslate\"><span class=\"pre\">map</span></code></a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#id5\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#filter\"><code class=\"docutils literal notranslate\"><span class=\"pre\">filter</span></code></a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#id6\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#id7\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#練習の解答\">練習の解答</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"6-3.html\">6-3. クラス</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../7/7-1.html\">7-1. pandasライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../7/7-2.html\">7-2. scikit-learnライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/1-jupyter-notebook.html\">▲Jupyter Notebook の使い方</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/2-set.html\">▲セット (set)</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/3-recursion.html\">▲再帰</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/3-visualization.html\">▲簡単なデータの可視化</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/4-csv.html\">▲CSVファイルの入出力</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/5-bokeh.html\">▲Bokehライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/5-command.html\">▲Pythonスクリプトとコマンドライン実行</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/5-matplotlib.html\">▲Matplotlibライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/5-re.html\">▲正規表現</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../index_of_terms.html\">索引</a></li>\n</ul>\n\n<div class=\"relations\">\n<h3>Related Topics</h3>\n<ul>\n  <li><a href=\"../index.html\">Documentation overview</a><ul>\n      <li>Previous: <a href=\"6-1.html\" title=\"previous chapter\">6-1. 内包表記</a></li>\n      <li>Next: <a href=\"6-3.html\" title=\"next chapter\">6-3. クラス</a></li>\n  </ul></li>\n</ul>\n</div>\n<search id=\"searchbox\" style=\"display: none\" role=\"search\">\n  <h3 id=\"searchlabel\">Quick search</h3>\n    <div class=\"searchformwrapper\">\n    <form class=\"search\" action=\"../search.html\" method=\"get\">\n      <input type=\"text\" name=\"q\" aria-labelledby=\"searchlabel\" autocomplete=\"off\" autocorrect=\"off\" autocapitalize=\"off\" spellcheck=\"false\"/>\n      <input type=\"submit\" value=\"Go\" />\n    </form>\n    </div>\n</search>\n<script>document.getElementById('searchbox').style.display = \"block\"</script>\n\n\n\n\n\n\n\n\n        </div>\n      </div>\n      <div class=\"clearer\"></div>\n    </div>\n    <div class=\"footer\">\n      &#169;2020–2024, 東京大学 数理・情報教育研究センター (CC BY-NC-ND 4.0).\n      \n      |\n      Powered by <a href=\"https://www.sphinx-doc.org/\">Sphinx 8.0.2</a>\n      &amp; <a href=\"https://alabaster.readthedocs.io\">Alabaster 1.0.0</a>\n      \n    </div>\n\n    \n\n    \n    <script>\n\n      var _gaq = _gaq || [];\n      _gaq.push(['_setAccount', 'G-8M0RXGPPSR']);\n      _gaq.push(['_setDomainName', 'none']);\n      _gaq.push(['_setAllowLinker', true]);\n      _gaq.push(['_trackPageview']);\n\n      (function() {\n        var ga = document.createElement('script'); ga.async = true;\n        ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'https://www') + '.google-analytics.com/ga.js';\n        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);\n      })();\n\n    </script>\n    \n  </body>\n</html>"
  },
  {
    "path": "docs/6/6-3.html",
    "content": "<!DOCTYPE html>\n\n<html lang=\"jp\" data-content_root=\"../\">\n  <head>\n    <meta charset=\"utf-8\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" /><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n\n    <!-- Google tag (gtag.js) -->\n    <script async src=\"https://www.googletagmanager.com/gtag/js?id=G-8M0RXGPPSR\"></script>\n    <script>\n        window.dataLayer = window.dataLayer || [];\n        function gtag(){dataLayer.push(arguments);}\n        gtag('js', new Date());\n        gtag('config', 'G-8M0RXGPPSR');\n    </script>\n    \n    <title>6-3. クラス &#8212; Pythonプログラミング入門  documentation</title>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/pygments.css?v=d1102ebc\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/basic.css?v=c058f7c8\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/alabaster.css?v=27fed22d\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/nbsphinx-code-cells.css\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/custom.css?v=1a1aa8dd\" />\n    <script src=\"../_static/documentation_options.js?v=3ff7d7a7\"></script>\n    <script src=\"../_static/doctools.js?v=9a2dae69\"></script>\n    <script src=\"../_static/sphinx_highlight.js?v=dc90522c\"></script>\n    <script crossorigin=\"anonymous\" integrity=\"sha256-Ae2Vz/4ePdIu6ZyI/5ZGsYnb+m0JlOmKPjt6XZ9JJkA=\" src=\"https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.4/require.min.js\"></script>\n    <script>window.MathJax = {\"tex\": {\"inlineMath\": [[\"$\", \"$\"], [\"\\\\(\", \"\\\\)\"]], \"processEscapes\": true}, \"options\": {\"ignoreHtmlClass\": \"tex2jax_ignore|mathjax_ignore|document\", \"processHtmlClass\": \"tex2jax_process|mathjax_process|math|output_area\"}}</script>\n    <script defer=\"defer\" src=\"https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js\"></script>\n    <link rel=\"index\" title=\"Index\" href=\"../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../search.html\" />\n    <link rel=\"next\" title=\"7-1. pandasライブラリ\" href=\"../7/7-1.html\" />\n    <link rel=\"prev\" title=\"6-2. 高階関数\" href=\"6-2.html\" />\n   \n  <link rel=\"stylesheet\" href=\"../_static/custom.css\" type=\"text/css\" />\n  \n\n  \n  \n\n  </head><body>\n  \n\n    <div class=\"document\">\n      <div class=\"documentwrapper\">\n        <div class=\"bodywrapper\">\n          \n\n          <div class=\"body\" role=\"main\">\n            \n  <section id=\"6-3.-クラス\">\n<h1>6-3. クラス<a class=\"headerlink\" href=\"#6-3.-クラス\" title=\"Link to this heading\">¶</a></h1>\n<p>Pythonにおけるオブジェクト指向プログラミングのうち、クラスを定義する方法について簡単に説明します。</p>\n<p>参考</p>\n<ul class=\"simple\">\n<li><p><a class=\"reference external\" href=\"https://docs.python.org/ja/3/tutorial/classes.html\">https://docs.python.org/ja/3/tutorial/classes.html</a></p></li>\n<li><p><a class=\"reference external\" href=\"https://docs.python.org/ja/3/reference/datamodel.html\">https://docs.python.org/ja/3/reference/datamodel.html</a></p></li>\n</ul>\n<section id=\"クラス定義\">\n<h2>クラス定義<a class=\"headerlink\" href=\"#クラス定義\" title=\"Link to this heading\">¶</a></h2>\n<p>Pythonでは全てのデータはオブジェクトなのですが、 以下では特に、クラス定義によって作成されたクラスを型とするデータを扱います。 このようなデータは、<strong>オブジェクト指向プログラミング</strong>における典型的な<strong>オブジェクト</strong>です。 そこで以下では、オブジェクトという用語をもっぱら使います。</p>\n<p>4-1で見たように、ファイルオブジェクトに対して <code class=\"docutils literal notranslate\"><span class=\"pre\">readline()</span></code> というメソッドを呼び出すと、 ファイルの行が文字列として次々と返されます。 ここでは、ファイルオブジェクトのようなオブジェクトで、 <code class=\"docutils literal notranslate\"><span class=\"pre\">readline()</span></code> というメソッドが呼び出されると、常に <code class=\"docutils literal notranslate\"><span class=\"pre\">'Hello.\\n'</span></code> という文字列を返すようなものを作ってみましょう。</p>\n<p>そのためには、新しいクラスを定義します。 <strong>クラス</strong>とは、オブジェクトの種類を意味します。 新しいクラスを定義すると、そのクラスに属するオブジェクトを作ることができるようになります。 それらのオブジェクトの型は、その新しいクラスになります。</p>\n<p>ここでは、ずっと <code class=\"docutils literal notranslate\"><span class=\"pre\">'Hello.\\n'</span></code> を返し続けるので、 <code class=\"docutils literal notranslate\"><span class=\"pre\">HelloForEver</span></code> という名前を持つクラスを定義しましょう。 そして、<code class=\"docutils literal notranslate\"><span class=\"pre\">HelloForEver</span></code> というクラスを型とするオブジェクトを作ります。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[1]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">class</span> <span class=\"nc\">HelloForEver</span><span class=\"p\">:</span>\n    <span class=\"k\">def</span> <span class=\"nf\">readline</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"s1\">&#39;Hello.</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n</pre></div>\n</div>\n</div>\n<p>一般にクラス定義は、以下のような形をしています。</p>\n<div class=\"highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>class クラス名:\n    def メソッド名(self, 引数, ...):\n        実行文\n    def メソッド名(self, 引数, ...):\n        実行文\n    ...\n</pre></div>\n</div>\n<p>メソッド定義は関数定義と同じ形をしていますが、 クラス定義の中に入っています。 メソッド定義において、その最初の引数には慣例として <code class=\"docutils literal notranslate\"><span class=\"pre\">self</span></code> という名前を付けます。 この引数には、メソッドが呼び出されたオブジェクト自身が渡されます。</p>\n<p>上の例では、<code class=\"docutils literal notranslate\"><span class=\"pre\">readline</span></code> というメソッドが1つ定義されています。</p>\n<p>以下のようにして、このクラスのオブジェクトを作ることができます。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[2]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">f</span> <span class=\"o\">=</span> <span class=\"n\">HelloForEver</span><span class=\"p\">()</span>\n</pre></div>\n</div>\n</div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">HelloForEver</span></code> を型とする新しいオブジェクトが作られて変数 <code class=\"docutils literal notranslate\"><span class=\"pre\">f</span></code> の値となります。</p>\n<p>一般に、オブジェクトの生成は、</p>\n<div class=\"highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>クラス名(式, ...)\n</pre></div>\n</div>\n<p>という式で行います。このようにオブジェクトを生成する式は<strong>コンストラクタ</strong>と呼ばれます。 なお、上の例では、括弧の中に式は1つもありません。</p>\n<p>このようにして作ったオブジェクトの型を確認してください。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[3]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">type</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[3]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n__main__.HelloForEver\n</pre></div></div>\n</div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">__main__.HelloForEver</span></code> と表示されたでしょう。 <code class=\"docutils literal notranslate\"><span class=\"pre\">__main__</span></code> は、ノートブックの式が評価されているモジュールを指すので、 このオブジェクトの型が、上で定義した <code class=\"docutils literal notranslate\"><span class=\"pre\">HelloForEver</span></code> クラスであることがわかります。 クラスのコンストラクタによって生成されたオブジェクトを、そのクラスの<strong>インスタンス</strong>と言います。 上のオブジェクトは <code class=\"docutils literal notranslate\"><span class=\"pre\">HelloForEver</span></code> クラスのインスタンスです。</p>\n<p>オブジェクトそのものは以下のように表示されます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[4]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">f</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[4]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n&lt;__main__.HelloForEver at 0x10f459820&gt;\n</pre></div></div>\n</div>\n<p>このオブジェクトに対して、<code class=\"docutils literal notranslate\"><span class=\"pre\">readline</span></code> というメソッドを呼び出すことができます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[5]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">readline</span><span class=\"p\">()</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[5]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n&#39;Hello.\\n&#39;\n</pre></div></div>\n</div>\n<p>この例では、<code class=\"docutils literal notranslate\"><span class=\"pre\">f</span></code> という変数に入っているオブジェクトが <code class=\"docutils literal notranslate\"><span class=\"pre\">self</span></code> という引数に渡されて、 <code class=\"docutils literal notranslate\"><span class=\"pre\">readline</span></code> の本体である以下の文が実行されました。</p>\n<div class=\"highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>return &#39;Hello.\\n&#39;\n</pre></div>\n</div>\n<p>（この例では <code class=\"docutils literal notranslate\"><span class=\"pre\">self</span></code> は参照されていません。）</p>\n<p>何回やっても同じです。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[6]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">readline</span><span class=\"p\">()</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[6]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n&#39;Hello.\\n&#39;\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[7]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">readline</span><span class=\"p\">()</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[7]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n&#39;Hello.\\n&#39;\n</pre></div></div>\n</div>\n</section>\n<section id=\"初期化と属性\">\n<h2>初期化と属性<a class=\"headerlink\" href=\"#初期化と属性\" title=\"Link to this heading\">¶</a></h2>\n<p>以下の例では、初期化のメソッドが定義され、オブジェクトに属性が与えられます。</p>\n<p><strong>初期化</strong>のメソッドは <code class=\"docutils literal notranslate\"><span class=\"pre\">__init__</span></code> という名前を持ち、 オブジェクトが作られたときに自動的に呼び出されます。 <code class=\"docutils literal notranslate\"><span class=\"pre\">__init__</span></code> の引数は、オブジェクト自身と、クラス名の後に与えられる式の値です。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[8]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">class</span> <span class=\"nc\">HelloFile</span><span class=\"p\">:</span>\n    <span class=\"k\">def</span> <span class=\"fm\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">n</span><span class=\"p\">):</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">n</span> <span class=\"o\">=</span> <span class=\"n\">n</span>\n    <span class=\"k\">def</span> <span class=\"nf\">readline</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">n</span> <span class=\"o\">==</span> <span class=\"mi\">0</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"s1\">&#39;&#39;</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">n</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">n</span> <span class=\"o\">-</span> <span class=\"mi\">1</span>\n        <span class=\"k\">return</span> <span class=\"s1\">&#39;Hello.</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n</pre></div>\n</div>\n</div>\n<p>この例では、以下のようにしてオブジェクトが作られます。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[9]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">f</span> <span class=\"o\">=</span> <span class=\"n\">HelloFile</span><span class=\"p\">(</span><span class=\"mi\">3</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<p>すると、<code class=\"docutils literal notranslate\"><span class=\"pre\">HelloFile</span></code> を型とする新しいオブジェクトが作られて、 そのオブジェクト自身が <code class=\"docutils literal notranslate\"><span class=\"pre\">self</span></code> に、<code class=\"docutils literal notranslate\"><span class=\"pre\">3</span></code> が <code class=\"docutils literal notranslate\"><span class=\"pre\">n</span></code> に渡されて、 <code class=\"docutils literal notranslate\"><span class=\"pre\">self.n</span> <span class=\"pre\">=</span> <span class=\"pre\">n</span></code> という文が実行されます。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">self.n</span></code> という式は、このオブジェクトの <code class=\"docutils literal notranslate\"><span class=\"pre\">n</span></code> という名前の属性を表します。</p>\n<p>一般に、<code class=\"docutils literal notranslate\"><span class=\"pre\">class</span></code> の構文によって定義されたクラスを型とするオブジェクトは、 属性を持つことができます。 <strong>属性</strong>とは、個々のオブジェクトごとに記録される値であり、 オブジェクト内の変数と考えられます。 オブジェクトの属性は、オブジェクトに対してその<strong>属性名</strong>を指定して、参照したり設定したりできます。 オブジェクトの属性は、<code class=\"docutils literal notranslate\"><span class=\"pre\">self.属性名</span></code> という式で参照されます。 <code class=\"docutils literal notranslate\"><span class=\"pre\">self.属性名</span></code> を代入文の左辺に書けば、属性を設定することができます。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">self.n</span> <span class=\"pre\">=</span> <span class=\"pre\">n</span></code> のうち、<code class=\"docutils literal notranslate\"><span class=\"pre\">self.</span></code> の次の <code class=\"docutils literal notranslate\"><span class=\"pre\">n</span></code> は属性を表し、 右辺の <code class=\"docutils literal notranslate\"><span class=\"pre\">n</span></code> は、<code class=\"docutils literal notranslate\"><span class=\"pre\">__init__</span></code> メソッドの引数を表していますので、 混同しないようにしてください。</p>\n<p>この例では、新しく作られたオブジェクトの <code class=\"docutils literal notranslate\"><span class=\"pre\">n</span></code> という属性が、引数 <code class=\"docutils literal notranslate\"><span class=\"pre\">n</span></code> の値である <code class=\"docutils literal notranslate\"><span class=\"pre\">3</span></code> に設定されます。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">readline</span></code> メソッドは以下のように定義されています。</p>\n<div class=\"highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>def readline(self):\n    if self.n == 0:\n        return &#39;&#39;\n    self.n = self.n - 1\n    return &#39;Hello.\\n&#39;\n</pre></div>\n</div>\n<p>オブジェクトの属性 <code class=\"docutils literal notranslate\"><span class=\"pre\">n</span></code> を参照して、それが <code class=\"docutils literal notranslate\"><span class=\"pre\">0</span></code> ならば空文字列を返します。 そうでなければ、属性 <code class=\"docutils literal notranslate\"><span class=\"pre\">n</span></code> を <code class=\"docutils literal notranslate\"><span class=\"pre\">1</span></code> 減らしてから文字列 <code class=\"docutils literal notranslate\"><span class=\"pre\">'Hello.\\n'</span></code> を返します。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[10]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">readline</span><span class=\"p\">()</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[10]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n&#39;Hello.\\n&#39;\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[11]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">readline</span><span class=\"p\">()</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[11]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n&#39;Hello.\\n&#39;\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[12]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">readline</span><span class=\"p\">()</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[12]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n&#39;Hello.\\n&#39;\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[13]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">readline</span><span class=\"p\">()</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[13]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n&#39;&#39;\n</pre></div></div>\n</div>\n<p>変数 <code class=\"docutils literal notranslate\"><span class=\"pre\">f</span></code> の値であるオブジェクトの属性 <code class=\"docutils literal notranslate\"><span class=\"pre\">n</span></code> は、<code class=\"docutils literal notranslate\"><span class=\"pre\">f.n</span></code> という式によって参照できます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[14]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">n</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[14]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n0\n</pre></div></div>\n</div>\n<p>ここでは詳しく説明しませんが、オブジェクトのメソッドも属性の一種です。</p>\n</section>\n<section id=\"継承\">\n<h2>継承<a class=\"headerlink\" href=\"#継承\" title=\"Link to this heading\">¶</a></h2>\n<p><strong>継承</strong>は、既存のクラスをもとにして、変更部分だけを与えることにより、 新たなクラスを定義する機能です。</p>\n<p>以下の例では、<code class=\"docutils literal notranslate\"><span class=\"pre\">HelloForEver</span></code> をもとにして <code class=\"docutils literal notranslate\"><span class=\"pre\">HelloFile</span></code> を定義しています。 一般に、新しく定義されるクラスを<strong>子クラス</strong>、そのもとになるクラスを<strong>親クラス</strong>と言います。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[15]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">class</span> <span class=\"nc\">HelloFile</span><span class=\"p\">(</span><span class=\"n\">HelloForEver</span><span class=\"p\">):</span>\n    <span class=\"k\">def</span> <span class=\"fm\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">n</span><span class=\"p\">):</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">n</span> <span class=\"o\">=</span> <span class=\"n\">n</span>\n    <span class=\"k\">def</span> <span class=\"nf\">readline</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">n</span> <span class=\"o\">==</span> <span class=\"mi\">0</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"s1\">&#39;&#39;</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">n</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">n</span> <span class=\"o\">-</span> <span class=\"mi\">1</span>\n        <span class=\"k\">return</span> <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">readline</span><span class=\"p\">()</span>\n</pre></div>\n</div>\n</div>\n<p>ここでは、<code class=\"docutils literal notranslate\"><span class=\"pre\">__init__</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">readline</span></code> を新たに定義しています。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">HelloForEver</span></code> にも <code class=\"docutils literal notranslate\"><span class=\"pre\">readline</span></code> があります。 こちらの <code class=\"docutils literal notranslate\"><span class=\"pre\">readline</span></code> は、<code class=\"docutils literal notranslate\"><span class=\"pre\">super().readline()</span></code> という式で呼び出すことができます。 <code class=\"docutils literal notranslate\"><span class=\"pre\">super()</span></code> は、子クラスのオブジェクトに対して親クラスのメソッドを呼び出すための構文です。 実際に、<code class=\"docutils literal notranslate\"><span class=\"pre\">HelloFile</span></code> の <code class=\"docutils literal notranslate\"><span class=\"pre\">readline</span></code> の中で、 <code class=\"docutils literal notranslate\"><span class=\"pre\">HelloForEver</span></code> の <code class=\"docutils literal notranslate\"><span class=\"pre\">readline</span></code> を呼び出しています。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[16]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">f</span> <span class=\"o\">=</span> <span class=\"n\">HelloFile</span><span class=\"p\">(</span><span class=\"mi\">3</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[17]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">readline</span><span class=\"p\">()</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[17]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n&#39;Hello.\\n&#39;\n</pre></div></div>\n</div>\n</section>\n<section id=\"特殊メソッド\">\n<h2>特殊メソッド<a class=\"headerlink\" href=\"#特殊メソッド\" title=\"Link to this heading\">¶</a></h2>\n<p>Pythonでは、<strong>特殊メソッド</strong>と呼ばれるメソッドが多数あります。 これらのメソッドの名前は <code class=\"docutils literal notranslate\"><span class=\"pre\">__</span></code> で始まり <code class=\"docutils literal notranslate\"><span class=\"pre\">__</span></code> で終わります。</p>\n<p>クラス定義の中で特殊メソッドを定義すると、そのクラスのオブジェクトに対して、 その特殊メソッドに対応する機能が付与されます。 初期化メソッド <code class=\"docutils literal notranslate\"><span class=\"pre\">__init__</span></code> も特殊メソッドですが、 以下のクラス <code class=\"docutils literal notranslate\"><span class=\"pre\">HelloFileIterator</span></code> では、<code class=\"docutils literal notranslate\"><span class=\"pre\">__iter__</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">__next__</span></code> という特殊メソッドが定義されています。 このクラスは、<code class=\"docutils literal notranslate\"><span class=\"pre\">HelloFile</span></code> を継承して定義されています。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">__iter__</span></code> メソッドは、オブジェクトに対して関数 <code class=\"docutils literal notranslate\"><span class=\"pre\">iter</span></code> が適用されたときに呼び出されます。 <code class=\"docutils literal notranslate\"><span class=\"pre\">__iter__</span></code> メソッドの値が関数 <code class=\"docutils literal notranslate\"><span class=\"pre\">iter</span></code> の値となります。 以下の例では、<code class=\"docutils literal notranslate\"><span class=\"pre\">__iter__</span></code> はオブジェクト自身を返しています。 したがって、オブジェクトに <code class=\"docutils literal notranslate\"><span class=\"pre\">iter</span></code> が適用されると、オブジェクト自身が返ります。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[18]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">class</span> <span class=\"nc\">HelloFileIterator</span><span class=\"p\">(</span><span class=\"n\">HelloFile</span><span class=\"p\">):</span>\n    <span class=\"k\">def</span> <span class=\"fm\">__iter__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span>\n    <span class=\"k\">def</span> <span class=\"fm\">__next__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"n\">line</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">readline</span><span class=\"p\">()</span>\n        <span class=\"k\">if</span> <span class=\"n\">line</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;&#39;</span><span class=\"p\">:</span>\n            <span class=\"k\">raise</span> <span class=\"ne\">StopIteration</span>\n        <span class=\"k\">return</span> <span class=\"n\">line</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[19]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">f</span> <span class=\"o\">=</span> <span class=\"n\">HelloFileIterator</span><span class=\"p\">(</span><span class=\"mi\">3</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[20]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">f</span> <span class=\"ow\">is</span> <span class=\"nb\">iter</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"p\">))</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nTrue\n</pre></div></div>\n</div>\n<p>上の例で、<code class=\"docutils literal notranslate\"><span class=\"pre\">iter(f)</span></code> として関数 <code class=\"docutils literal notranslate\"><span class=\"pre\">iter</span></code> を呼び出すと、 <code class=\"docutils literal notranslate\"><span class=\"pre\">f.__iter__()</span></code> としてメソッド <code class=\"docutils literal notranslate\"><span class=\"pre\">__iter__</span></code> が <code class=\"docutils literal notranslate\"><span class=\"pre\">f</span></code> に対して呼び出され、 その結果が <code class=\"docutils literal notranslate\"><span class=\"pre\">iter(f)</span></code> の値となります。 したがって、<code class=\"docutils literal notranslate\"><span class=\"pre\">iter(f)</span></code> は <code class=\"docutils literal notranslate\"><span class=\"pre\">f</span></code> と同じ値を返します。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">__next__</span></code> メソッドも、オブジェクトに対して関数 <code class=\"docutils literal notranslate\"><span class=\"pre\">next</span></code> が適用されたときに呼び出されます。 <code class=\"docutils literal notranslate\"><span class=\"pre\">__next__</span></code> メソッドの値が <code class=\"docutils literal notranslate\"><span class=\"pre\">next</span></code> の値となります。</p>\n<p>上の例では、<code class=\"docutils literal notranslate\"><span class=\"pre\">self.readline()</span></code> として、オブジェクト自身に対してメソッド <code class=\"docutils literal notranslate\"><span class=\"pre\">readline</span></code> を呼び出しています。 その値が空文字列ならば、</p>\n<div class=\"highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>raise StopIteration\n</pre></div>\n</div>\n<p>という文を実行して、<code class=\"docutils literal notranslate\"><span class=\"pre\">StopIteration</span></code> というエラーを投げます。 実は、このエラーは、for文が捕まえて繰り返しを止める効果を持ちます。 なお、<code class=\"docutils literal notranslate\"><span class=\"pre\">raise</span></code> は強制的にエラーを発生させる構文です。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[21]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">for</span> <span class=\"n\">line</span> <span class=\"ow\">in</span> <span class=\"n\">f</span><span class=\"p\">:</span>\n    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">line</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nHello.\n\nHello.\n\nHello.\n\n</pre></div></div>\n</div>\n<p>4-2で説明したように、上のfor文では、 まず <code class=\"docutils literal notranslate\"><span class=\"pre\">f</span></code> のオブジェクトに対して関数 <code class=\"docutils literal notranslate\"><span class=\"pre\">iter</span></code> が適用されます。 すると <code class=\"docutils literal notranslate\"><span class=\"pre\">f</span></code> のオブジェクト自身が返ります。 そして、このオブジェクトに対して関数 <code class=\"docutils literal notranslate\"><span class=\"pre\">next</span></code> が繰り返し適用されて、 その結果が変数 <code class=\"docutils literal notranslate\"><span class=\"pre\">line</span></code> の値となります。 <code class=\"docutils literal notranslate\"><span class=\"pre\">StopIteration</span></code> のエラーが検知されると、for文が終了します。</p>\n</section>\n<section id=\"継承による振舞いの改変\">\n<h2>継承による振舞いの改変<a class=\"headerlink\" href=\"#継承による振舞いの改変\" title=\"Link to this heading\">¶</a></h2>\n<p>上で示された、<code class=\"docutils literal notranslate\"><span class=\"pre\">HelloFileIterator</span></code> の <code class=\"docutils literal notranslate\"><span class=\"pre\">__next__</span></code> メソッドでは、<code class=\"docutils literal notranslate\"><span class=\"pre\">self.readline()</span></code> というメソッド呼び出しがありました。 上の例の振舞いから、そのメソッド呼び出しは、<code class=\"docutils literal notranslate\"><span class=\"pre\">HelloFileIterator</span></code> には <code class=\"docutils literal notranslate\"><span class=\"pre\">readline</span></code> メソッドが定義されていないので、親の <code class=\"docutils literal notranslate\"><span class=\"pre\">HelloFile</span></code> を見に行って、そこで定義された <code class=\"docutils literal notranslate\"><span class=\"pre\">readline</span></code> メソッドが使われたように見えます。 しかし、それは正確ではありません。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">self.readline()</span></code> では、その呼び出し場所がどこであるかに関わらず、常にオブジェクト <code class=\"docutils literal notranslate\"><span class=\"pre\">self</span></code> の中のメソッドを探索します。 そして、継承があるために、<code class=\"docutils literal notranslate\"><span class=\"pre\">__next__(self)</span></code> における <code class=\"docutils literal notranslate\"><span class=\"pre\">self</span></code> が、<code class=\"docutils literal notranslate\"><span class=\"pre\">HelloFileIterator</span></code> のインスタンスであるとも限りません。 次を見てみましょう。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[22]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">class</span> <span class=\"nc\">EmptyFile</span><span class=\"p\">(</span><span class=\"n\">HelloFileIterator</span><span class=\"p\">):</span>\n    <span class=\"k\">def</span> <span class=\"nf\">readline</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"s1\">&#39;&#39;</span>\n\n<span class=\"n\">f</span> <span class=\"o\">=</span> <span class=\"n\">EmptyFile</span><span class=\"p\">(</span><span class=\"mi\">3</span><span class=\"p\">)</span>\n<span class=\"nb\">next</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n<span class=\"ansi-red-fg\">---------------------------------------------------------------------------</span>\n<span class=\"ansi-red-fg\">StopIteration</span>                             Traceback (most recent call last)\nCell <span class=\"ansi-green-fg\">In[22], line 6</span>\n<span class=\"ansi-green-intense-fg ansi-bold\">      3</span>         <span class=\"ansi-bold\" style=\"color: rgb(0,135,0)\">return</span> <span style=\"color: rgb(175,0,0)\">&#39;</span><span style=\"color: rgb(175,0,0)\">&#39;</span>\n<span class=\"ansi-green-intense-fg ansi-bold\">      5</span> f <span style=\"color: rgb(98,98,98)\">=</span> EmptyFile(<span style=\"color: rgb(98,98,98)\">3</span>)\n<span class=\"ansi-green-fg\">----&gt; 6</span> <span class=\"ansi-yellow-bg\" style=\"color: rgb(0,135,0)\">next</span><span class=\"ansi-yellow-bg\">(</span><span class=\"ansi-yellow-bg\">f</span><span class=\"ansi-yellow-bg\">)</span>\n\nCell <span class=\"ansi-green-fg\">In[18], line 7</span>, in <span class=\"ansi-cyan-fg\">HelloFileIterator.__next__</span><span class=\"ansi-blue-fg\">(self)</span>\n<span class=\"ansi-green-intense-fg ansi-bold\">      5</span> line <span style=\"color: rgb(98,98,98)\">=</span> <span style=\"color: rgb(0,135,0)\">self</span><span style=\"color: rgb(98,98,98)\">.</span>readline()\n<span class=\"ansi-green-intense-fg ansi-bold\">      6</span> <span class=\"ansi-bold\" style=\"color: rgb(0,135,0)\">if</span> line <span style=\"color: rgb(98,98,98)\">==</span> <span style=\"color: rgb(175,0,0)\">&#39;</span><span style=\"color: rgb(175,0,0)\">&#39;</span>:\n<span class=\"ansi-green-fg\">----&gt; 7</span>     <span class=\"ansi-bold\" style=\"color: rgb(0,135,0)\">raise</span> <span class=\"ansi-bold\" style=\"color: rgb(215,95,95)\">StopIteration</span>\n<span class=\"ansi-green-intense-fg ansi-bold\">      8</span> <span class=\"ansi-bold\" style=\"color: rgb(0,135,0)\">return</span> line\n\n<span class=\"ansi-red-fg\">StopIteration</span>:\n</pre></div></div>\n</div>\n<p>コンストラクタに <code class=\"docutils literal notranslate\"><span class=\"pre\">3</span></code> を与えているので、<code class=\"docutils literal notranslate\"><span class=\"pre\">HelloFileIterator</span></code> と同様に <code class=\"docutils literal notranslate\"><span class=\"pre\">next</span></code> を3回適用できてもよさそうですが、即座に <code class=\"docutils literal notranslate\"><span class=\"pre\">StopIteration</span></code> が生じました。 これは、<code class=\"docutils literal notranslate\"><span class=\"pre\">__next__(self)</span></code> における <code class=\"docutils literal notranslate\"><span class=\"pre\">self</span></code> が、<code class=\"docutils literal notranslate\"><span class=\"pre\">EmptyFile</span></code> のインスタンスであり、<code class=\"docutils literal notranslate\"><span class=\"pre\">self.readline()</span></code> が常に <code class=\"docutils literal notranslate\"><span class=\"pre\">''</span></code> を返すからです。</p>\n<p>このように、継承は、メソッドの部分的な再定義を通じて、再定義されたメソッドを呼び出しているメソッドの振舞いを、間接的に改変することを可能にします。</p>\n</section>\n<section id=\"練習\">\n<h2>練習<a class=\"headerlink\" href=\"#練習\" title=\"Link to this heading\">¶</a></h2>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">'Hello.\\n'</span></code> ではなくて、初期時に指定された文字列を繰り返し返すように、 新たなクラス <code class=\"docutils literal notranslate\"><span class=\"pre\">StringFileIterator</span></code> を定義してください。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">StringFileIterator</span></code> は <code class=\"docutils literal notranslate\"><span class=\"pre\">HelloFileIterator</span></code> を継承し、 初期化メソッドには、文字列と回数を指定します。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[23]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">class</span> <span class=\"nc\">StringFileIterator</span><span class=\"p\">(</span><span class=\"n\">HelloFileIterator</span><span class=\"p\">):</span>\n    <span class=\"k\">def</span> <span class=\"fm\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">s</span><span class=\"p\">,</span> <span class=\"n\">n</span><span class=\"p\">):</span>\n        <span class=\"o\">...</span>\n    <span class=\"o\">...</span>\n</pre></div>\n</div>\n</div>\n<p>上のセルで解答を作成した後、以下のセルを実行し、実行結果が <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> になることを確認してください。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[24]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">f</span> <span class=\"o\">=</span> <span class=\"n\">StringFileIterator</span><span class=\"p\">(</span><span class=\"s1\">&#39;abc&#39;</span><span class=\"p\">,</span> <span class=\"mi\">3</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"nb\">list</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"p\">[</span><span class=\"s1\">&#39;abc&#39;</span><span class=\"p\">,</span><span class=\"s1\">&#39;abc&#39;</span><span class=\"p\">,</span><span class=\"s1\">&#39;abc&#39;</span><span class=\"p\">])</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n<span class=\"ansi-red-fg\">---------------------------------------------------------------------------</span>\n<span class=\"ansi-red-fg\">AttributeError</span>                            Traceback (most recent call last)\nCell <span class=\"ansi-green-fg\">In[24], line 2</span>\n<span class=\"ansi-green-intense-fg ansi-bold\">      1</span> f <span style=\"color: rgb(98,98,98)\">=</span> StringFileIterator(<span style=\"color: rgb(175,0,0)\">&#39;</span><span style=\"color: rgb(175,0,0)\">abc</span><span style=\"color: rgb(175,0,0)\">&#39;</span>, <span style=\"color: rgb(98,98,98)\">3</span>)\n<span class=\"ansi-green-fg\">----&gt; 2</span> <span style=\"color: rgb(0,135,0)\">print</span>(<span class=\"ansi-yellow-bg\" style=\"color: rgb(0,135,0)\">list</span><span class=\"ansi-yellow-bg\">(</span><span class=\"ansi-yellow-bg\">f</span><span class=\"ansi-yellow-bg\">)</span> <span style=\"color: rgb(98,98,98)\">==</span> [<span style=\"color: rgb(175,0,0)\">&#39;</span><span style=\"color: rgb(175,0,0)\">abc</span><span style=\"color: rgb(175,0,0)\">&#39;</span>,<span style=\"color: rgb(175,0,0)\">&#39;</span><span style=\"color: rgb(175,0,0)\">abc</span><span style=\"color: rgb(175,0,0)\">&#39;</span>,<span style=\"color: rgb(175,0,0)\">&#39;</span><span style=\"color: rgb(175,0,0)\">abc</span><span style=\"color: rgb(175,0,0)\">&#39;</span>])\n\nCell <span class=\"ansi-green-fg\">In[18], line 5</span>, in <span class=\"ansi-cyan-fg\">HelloFileIterator.__next__</span><span class=\"ansi-blue-fg\">(self)</span>\n<span class=\"ansi-green-intense-fg ansi-bold\">      4</span> <span class=\"ansi-bold\" style=\"color: rgb(0,135,0)\">def</span> <span style=\"color: rgb(0,0,255)\">__next__</span>(<span style=\"color: rgb(0,135,0)\">self</span>):\n<span class=\"ansi-green-fg\">----&gt; 5</span>     line <span style=\"color: rgb(98,98,98)\">=</span> <span class=\"ansi-yellow-bg\" style=\"color: rgb(0,135,0)\">self</span><span class=\"ansi-yellow-bg\" style=\"color: rgb(98,98,98)\">.</span><span class=\"ansi-yellow-bg\">readline</span><span class=\"ansi-yellow-bg\">(</span><span class=\"ansi-yellow-bg\">)</span>\n<span class=\"ansi-green-intense-fg ansi-bold\">      6</span>     <span class=\"ansi-bold\" style=\"color: rgb(0,135,0)\">if</span> line <span style=\"color: rgb(98,98,98)\">==</span> <span style=\"color: rgb(175,0,0)\">&#39;</span><span style=\"color: rgb(175,0,0)\">&#39;</span>:\n<span class=\"ansi-green-intense-fg ansi-bold\">      7</span>         <span class=\"ansi-bold\" style=\"color: rgb(0,135,0)\">raise</span> <span class=\"ansi-bold\" style=\"color: rgb(215,95,95)\">StopIteration</span>\n\nCell <span class=\"ansi-green-fg\">In[15], line 5</span>, in <span class=\"ansi-cyan-fg\">HelloFile.readline</span><span class=\"ansi-blue-fg\">(self)</span>\n<span class=\"ansi-green-intense-fg ansi-bold\">      4</span> <span class=\"ansi-bold\" style=\"color: rgb(0,135,0)\">def</span> <span style=\"color: rgb(0,0,255)\">readline</span>(<span style=\"color: rgb(0,135,0)\">self</span>):\n<span class=\"ansi-green-fg\">----&gt; 5</span>     <span class=\"ansi-bold\" style=\"color: rgb(0,135,0)\">if</span> <span class=\"ansi-yellow-bg\" style=\"color: rgb(0,135,0)\">self</span><span class=\"ansi-yellow-bg\" style=\"color: rgb(98,98,98)\">.</span><span class=\"ansi-yellow-bg\">n</span> <span style=\"color: rgb(98,98,98)\">==</span> <span style=\"color: rgb(98,98,98)\">0</span>:\n<span class=\"ansi-green-intense-fg ansi-bold\">      6</span>         <span class=\"ansi-bold\" style=\"color: rgb(0,135,0)\">return</span> <span style=\"color: rgb(175,0,0)\">&#39;</span><span style=\"color: rgb(175,0,0)\">&#39;</span>\n<span class=\"ansi-green-intense-fg ansi-bold\">      7</span>     <span style=\"color: rgb(0,135,0)\">self</span><span style=\"color: rgb(98,98,98)\">.</span>n <span style=\"color: rgb(98,98,98)\">=</span> <span style=\"color: rgb(0,135,0)\">self</span><span style=\"color: rgb(98,98,98)\">.</span>n <span style=\"color: rgb(98,98,98)\">-</span> <span style=\"color: rgb(98,98,98)\">1</span>\n\n<span class=\"ansi-red-fg\">AttributeError</span>: &#39;StringFileIterator&#39; object has no attribute &#39;n&#39;\n</pre></div></div>\n</div>\n</section>\n<section id=\"▲with文への対応\">\n<h2>▲with文への対応<a class=\"headerlink\" href=\"#▲with文への対応\" title=\"Link to this heading\">¶</a></h2>\n<p>ここでは詳しく説明しませんが、さらに特殊メソッドである <code class=\"docutils literal notranslate\"><span class=\"pre\">__enter__</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">__exit__</span></code> を定義すると、 <strong>with文</strong>にも対応できます。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[25]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">class</span> <span class=\"nc\">HelloFileIterator</span><span class=\"p\">(</span><span class=\"n\">HelloFile</span><span class=\"p\">):</span>\n    <span class=\"k\">def</span> <span class=\"fm\">__enter__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span>\n    <span class=\"k\">def</span> <span class=\"fm\">__exit__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span><span class=\"n\">exception_type</span><span class=\"p\">,</span><span class=\"n\">exception_value</span><span class=\"p\">,</span><span class=\"n\">traceback</span><span class=\"p\">):</span>\n        <span class=\"k\">pass</span>\n    <span class=\"k\">def</span> <span class=\"fm\">__next__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"n\">line</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">readline</span><span class=\"p\">()</span>\n        <span class=\"k\">if</span> <span class=\"n\">line</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;&#39;</span><span class=\"p\">:</span>\n            <span class=\"k\">raise</span> <span class=\"ne\">StopIteration</span>\n        <span class=\"k\">return</span> <span class=\"n\">line</span>\n    <span class=\"k\">def</span> <span class=\"fm\">__iter__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[26]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">with</span> <span class=\"n\">HelloFileIterator</span><span class=\"p\">(</span><span class=\"mi\">3</span><span class=\"p\">)</span> <span class=\"k\">as</span> <span class=\"n\">f</span><span class=\"p\">:</span>\n    <span class=\"k\">for</span> <span class=\"n\">line</span> <span class=\"ow\">in</span> <span class=\"n\">f</span><span class=\"p\">:</span>\n        <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">line</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nHello.\n\nHello.\n\nHello.\n\n</pre></div></div>\n</div>\n</section>\n<section id=\"練習の解答\">\n<h2>練習の解答<a class=\"headerlink\" href=\"#練習の解答\" title=\"Link to this heading\">¶</a></h2>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[27]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">class</span> <span class=\"nc\">StringFileIterator</span><span class=\"p\">(</span><span class=\"n\">HelloFileIterator</span><span class=\"p\">):</span>\n    <span class=\"k\">def</span> <span class=\"fm\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">s</span><span class=\"p\">,</span> <span class=\"n\">n</span><span class=\"p\">):</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">s</span> <span class=\"o\">=</span> <span class=\"n\">s</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">n</span> <span class=\"o\">=</span> <span class=\"n\">n</span>\n    <span class=\"k\">def</span> <span class=\"nf\">readline</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">n</span> <span class=\"o\">==</span> <span class=\"mi\">0</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"s1\">&#39;&#39;</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">n</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">n</span> <span class=\"o\">-</span> <span class=\"mi\">1</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">s</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[ ]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span>\n</pre></div>\n</div>\n</div>\n</section>\n</section>\n\n\n          </div>\n          \n        </div>\n      </div>\n      <div class=\"sphinxsidebar\" role=\"navigation\" aria-label=\"Main\">\n        <div class=\"sphinxsidebarwrapper\">\n<h1 class=\"logo\"><a href=\"../index.html\">Pythonプログラミング入門</a></h1>\n\n\n\n\n\n\n\n\n<p>\n  <a style=\"font-family: sans-serif; font-size: smaller; background: linear-gradient(to top, #353535 0%, #141414 100%); -webkit-font-smoothing: antialiased; font-weight: normal; text-shadow: rgb(0 0 0 / 40%) 0 -1px 0; padding: 2px 6px; color: #fff; text-decoration: none; border-radius: 4px; border: 1px solid #0d0d0d; box-shadow: inset 0 1px 1px 0 #8f8f8f;\" href=\"https://github.com/utokyo-ipp/utokyo-ipp.github.io\">View on GitHub</a>\n</p><p>\n  <a style=\"font-family: sans-serif; font-size: smaller; background: linear-gradient(to top, #ff1e00 0%, #de1e00 100%); -webkit-font-smoothing: antialiased; font-weight: normal; text-shadow: rgb(0 0 0 / 40%) 0 -1px 0; padding: 2px 6px; color: #fff; text-decoration: none; border-radius: 4px; border: 1px solid #0d0d0d; box-shadow: inset 0 1px 1px 0 #ff8e70;\" href=\"https://utokyo-ipp.github.io/IPP_textbook.pdf\">View PDF</a>\n</p><p>\n  <a style=\"border-bottom: none;\" href=\"https://colab.research.google.com/github/utokyo-ipp/utokyo-ipp.github.io/blob/master/colab/6/6-3.ipynb\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Google Colaboratory\"></a>\n</p><h3>Navigation</h3>\n<ul class=\"current\">\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../1/1-0.html\">1-0. Colaboratory (Colab) の使い方</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../1/1-1.html\">1-1. 数値演算</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../1/1-2.html\">1-2. 変数と関数の基礎</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../1/1-3.html\">1-3. 論理・比較演算と条件分岐の基礎</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../1/1-4.html\">1-4. テストとデバッグ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../2/2-1.html\">2-1. 文字列 (string)</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../2/2-2.html\">2-2. リスト (list)</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../2/2-3.html\">2-3. 条件分岐</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../3/3-1.html\">3-1. 辞書 (dictionary)</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../3/3-2.html\">3-2. 繰り返し</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../3/3-3.html\">3-3. 関数</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../4/4-1.html\">4-1. ファイル入出力の基本</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../4/4-2.html\">4-2. イテラブルとイテレータ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../4/4-3.html\">4-3. ディレクトリと木構造</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../5/5-1.html\">5-1. モジュールの使い方</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../5/5-2.html\">5-2. モジュールの作り方</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../5/5-3.html\">5-3. NumPyライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"6-1.html\">6-1. 内包表記</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"6-2.html\">6-2. 高階関数</a></li>\n<li class=\"toctree-l1 current\"><a class=\"current reference internal\" href=\"#\">6-3. クラス</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#クラス定義\">クラス定義</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#初期化と属性\">初期化と属性</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#継承\">継承</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#特殊メソッド\">特殊メソッド</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#継承による振舞いの改変\">継承による振舞いの改変</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#練習\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#▲with文への対応\">▲with文への対応</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#練習の解答\">練習の解答</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../7/7-1.html\">7-1. pandasライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../7/7-2.html\">7-2. scikit-learnライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/1-jupyter-notebook.html\">▲Jupyter Notebook の使い方</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/2-set.html\">▲セット (set)</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/3-recursion.html\">▲再帰</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/3-visualization.html\">▲簡単なデータの可視化</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/4-csv.html\">▲CSVファイルの入出力</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/5-bokeh.html\">▲Bokehライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/5-command.html\">▲Pythonスクリプトとコマンドライン実行</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/5-matplotlib.html\">▲Matplotlibライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/5-re.html\">▲正規表現</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../index_of_terms.html\">索引</a></li>\n</ul>\n\n<div class=\"relations\">\n<h3>Related Topics</h3>\n<ul>\n  <li><a href=\"../index.html\">Documentation overview</a><ul>\n      <li>Previous: <a href=\"6-2.html\" title=\"previous chapter\">6-2. 高階関数</a></li>\n      <li>Next: <a href=\"../7/7-1.html\" title=\"next chapter\">7-1. pandasライブラリ</a></li>\n  </ul></li>\n</ul>\n</div>\n<search id=\"searchbox\" style=\"display: none\" role=\"search\">\n  <h3 id=\"searchlabel\">Quick search</h3>\n    <div class=\"searchformwrapper\">\n    <form class=\"search\" action=\"../search.html\" method=\"get\">\n      <input type=\"text\" name=\"q\" aria-labelledby=\"searchlabel\" autocomplete=\"off\" autocorrect=\"off\" autocapitalize=\"off\" spellcheck=\"false\"/>\n      <input type=\"submit\" value=\"Go\" />\n    </form>\n    </div>\n</search>\n<script>document.getElementById('searchbox').style.display = \"block\"</script>\n\n\n\n\n\n\n\n\n        </div>\n      </div>\n      <div class=\"clearer\"></div>\n    </div>\n    <div class=\"footer\">\n      &#169;2020–2024, 東京大学 数理・情報教育研究センター (CC BY-NC-ND 4.0).\n      \n      |\n      Powered by <a href=\"https://www.sphinx-doc.org/\">Sphinx 8.0.2</a>\n      &amp; <a href=\"https://alabaster.readthedocs.io\">Alabaster 1.0.0</a>\n      \n    </div>\n\n    \n\n    \n    <script>\n\n      var _gaq = _gaq || [];\n      _gaq.push(['_setAccount', 'G-8M0RXGPPSR']);\n      _gaq.push(['_setDomainName', 'none']);\n      _gaq.push(['_setAllowLinker', true]);\n      _gaq.push(['_trackPageview']);\n\n      (function() {\n        var ga = document.createElement('script'); ga.async = true;\n        ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'https://www') + '.google-analytics.com/ga.js';\n        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);\n      })();\n\n    </script>\n    \n  </body>\n</html>"
  },
  {
    "path": "docs/7/7-1.html",
    "content": "<!DOCTYPE html>\n\n<html lang=\"jp\" data-content_root=\"../\">\n  <head>\n    <meta charset=\"utf-8\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" /><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n\n    <!-- Google tag (gtag.js) -->\n    <script async src=\"https://www.googletagmanager.com/gtag/js?id=G-8M0RXGPPSR\"></script>\n    <script>\n        window.dataLayer = window.dataLayer || [];\n        function gtag(){dataLayer.push(arguments);}\n        gtag('js', new Date());\n        gtag('config', 'G-8M0RXGPPSR');\n    </script>\n    \n    <title>7-1. pandasライブラリ &#8212; Pythonプログラミング入門  documentation</title>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/pygments.css?v=d1102ebc\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/basic.css?v=c058f7c8\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/alabaster.css?v=27fed22d\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/nbsphinx-code-cells.css\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/custom.css?v=1a1aa8dd\" />\n    <script src=\"../_static/documentation_options.js?v=3ff7d7a7\"></script>\n    <script src=\"../_static/doctools.js?v=9a2dae69\"></script>\n    <script src=\"../_static/sphinx_highlight.js?v=dc90522c\"></script>\n    <script crossorigin=\"anonymous\" integrity=\"sha256-Ae2Vz/4ePdIu6ZyI/5ZGsYnb+m0JlOmKPjt6XZ9JJkA=\" src=\"https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.4/require.min.js\"></script>\n    <script>window.MathJax = {\"tex\": {\"inlineMath\": [[\"$\", \"$\"], [\"\\\\(\", \"\\\\)\"]], \"processEscapes\": true}, \"options\": {\"ignoreHtmlClass\": \"tex2jax_ignore|mathjax_ignore|document\", \"processHtmlClass\": \"tex2jax_process|mathjax_process|math|output_area\"}}</script>\n    <script defer=\"defer\" src=\"https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js\"></script>\n    <link rel=\"index\" title=\"Index\" href=\"../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../search.html\" />\n    <link rel=\"next\" title=\"7-2. scikit-learnライブラリ\" href=\"7-2.html\" />\n    <link rel=\"prev\" title=\"6-3. クラス\" href=\"../6/6-3.html\" />\n   \n  <link rel=\"stylesheet\" href=\"../_static/custom.css\" type=\"text/css\" />\n  \n\n  \n  \n\n  </head><body>\n  \n\n    <div class=\"document\">\n      <div class=\"documentwrapper\">\n        <div class=\"bodywrapper\">\n          \n\n          <div class=\"body\" role=\"main\">\n            \n  <section id=\"7-1.-pandasライブラリ\">\n<h1>7-1. pandasライブラリ<a class=\"headerlink\" href=\"#7-1.-pandasライブラリ\" title=\"Link to this heading\">¶</a></h1>\n<p>pandasライブラリについて説明します。</p>\n<p>参考</p>\n<ul class=\"simple\">\n<li><p><a class=\"reference external\" href=\"http://pandas.pydata.org/pandas-docs/stable/getting_started/index.html\">http://pandas.pydata.org/pandas-docs/stable/getting_started/index.html</a></p></li>\n<li><p><a class=\"reference external\" href=\"http://pandas.pydata.org/pandas-docs/stable/\">http://pandas.pydata.org/pandas-docs/stable/</a></p></li>\n</ul>\n<p><strong>pandas</strong>ライブラリにはデータ分析作業を支援するためのモジュールが含まれています。以下では、pandasライブラリのモジュールの基本的な使い方について説明します。</p>\n<p>pandasライブラリを使用するには、まず <code class=\"docutils literal notranslate\"><span class=\"pre\">pandas</span></code> モジュールをインポートします。慣例として、同モジュールを <code class=\"docutils literal notranslate\"><span class=\"pre\">pd</span></code> と別名をつけてコードの中で使用します。データの生成に用いるため、ここでは <code class=\"docutils literal notranslate\"><span class=\"pre\">numpy</span></code> モジュールも併せてインポートします。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[1]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"kn\">import</span> <span class=\"nn\">pandas</span> <span class=\"k\">as</span> <span class=\"nn\">pd</span>\n<span class=\"kn\">import</span> <span class=\"nn\">numpy</span> <span class=\"k\">as</span> <span class=\"nn\">np</span>\n</pre></div>\n</div>\n</div>\n<section id=\"シリーズとデータフレーム\">\n<h2>シリーズとデータフレーム<a class=\"headerlink\" href=\"#シリーズとデータフレーム\" title=\"Link to this heading\">¶</a></h2>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">pandas</span></code> モジュールは、リスト、配列や辞書などのデータを<strong>シリーズ</strong> (<code class=\"docutils literal notranslate\"><span class=\"pre\">Series</span></code>) あるいは<strong>データフレーム</strong> (<code class=\"docutils literal notranslate\"><span class=\"pre\">DataFrame</span></code>) のオブジェクトとして保持します。シリーズは列、データフレームは複数の列で構成されます。シリーズやデータフレームの行は<strong>インデックス</strong> <code class=\"docutils literal notranslate\"><span class=\"pre\">index</span></code> で管理され、インデックスには <code class=\"docutils literal notranslate\"><span class=\"pre\">0</span></code>\nから始まる番号、または任意のラベルが付けられています。インデックスが番号の場合は、シリーズやデータフレームはそれぞれNumPyの配列、2次元配列とみなすことができます。また、インデックスがラベルの場合は、ラベルをキー、各行を値とした辞書としてシリーズやデータフレームをみなすことができます。</p>\n</section>\n<section id=\"シリーズ-(Series)-の作成\">\n<h2>シリーズ (<code class=\"docutils literal notranslate\"><span class=\"pre\">Series</span></code>) の作成<a class=\"headerlink\" href=\"#シリーズ-(Series)-の作成\" title=\"Link to this heading\">¶</a></h2>\n<p>シリーズのオブジェクトは、以下のように、リスト、配列や辞書から作成することができます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[2]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"c1\"># リストからシリーズの作成</span>\n<span class=\"n\">s1</span> <span class=\"o\">=</span> <span class=\"n\">pd</span><span class=\"o\">.</span><span class=\"n\">Series</span><span class=\"p\">([</span><span class=\"mi\">0</span><span class=\"p\">,</span><span class=\"mi\">1</span><span class=\"p\">,</span><span class=\"mi\">2</span><span class=\"p\">])</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">s1</span><span class=\"p\">)</span>\n\n<span class=\"c1\"># 配列からシリーズの作成</span>\n<span class=\"n\">s2</span> <span class=\"o\">=</span> <span class=\"n\">pd</span><span class=\"o\">.</span><span class=\"n\">Series</span><span class=\"p\">(</span><span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">random</span><span class=\"o\">.</span><span class=\"n\">rand</span><span class=\"p\">(</span><span class=\"mi\">3</span><span class=\"p\">))</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">s2</span><span class=\"p\">)</span>\n\n<span class=\"c1\"># 辞書からシリーズの作成</span>\n<span class=\"n\">s3</span> <span class=\"o\">=</span> <span class=\"n\">pd</span><span class=\"o\">.</span><span class=\"n\">Series</span><span class=\"p\">({</span><span class=\"mi\">0</span><span class=\"p\">:</span><span class=\"s1\">&#39;boo&#39;</span><span class=\"p\">,</span><span class=\"mi\">1</span><span class=\"p\">:</span><span class=\"s1\">&#39;foo&#39;</span><span class=\"p\">,</span><span class=\"mi\">2</span><span class=\"p\">:</span><span class=\"s1\">&#39;woo&#39;</span><span class=\"p\">})</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">s3</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n0    0\n1    1\n2    2\ndtype: int64\n0    0.296747\n1    0.845386\n2    0.680552\ndtype: float64\n0    boo\n1    foo\n2    woo\ndtype: object\n</pre></div></div>\n</div>\n<p>以下では、シリーズ（列）より一般的なデータフレームの操作と機能について説明していきますが、データフレームオブジェクトの多くの操作や機能はシリーズオブジェクトにも適用できます。</p>\n</section>\n<section id=\"データフレーム-(DataFrame)-の作成\">\n<h2>データフレーム (<code class=\"docutils literal notranslate\"><span class=\"pre\">DataFrame</span></code>) の作成<a class=\"headerlink\" href=\"#データフレーム-(DataFrame)-の作成\" title=\"Link to this heading\">¶</a></h2>\n<p>データフレームのオブジェクトは、以下のように、リスト、配列や辞書から作成することができます。行のラベルは、<code class=\"docutils literal notranslate\"><span class=\"pre\">DataFrame</span></code> の <code class=\"docutils literal notranslate\"><span class=\"pre\">index</span></code> 引数で指定できますが、以下のデータフレーム作成の例、<code class=\"docutils literal notranslate\"><span class=\"pre\">d2</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">d3</span></code>、 では同インデックスを省略しているため、<code class=\"docutils literal notranslate\"><span class=\"pre\">0</span></code> から始まるインデックス番号がラベルとして行に自動的に付けられます。列のラベルは <code class=\"docutils literal notranslate\"><span class=\"pre\">columns</span></code> 引数で指定します。辞書からデータフレームを作成する際は、<code class=\"docutils literal notranslate\"><span class=\"pre\">columns</span></code> 引数で列の順番を指定することになります。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[3]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"c1\"># 多次元リストからデータフレームの作成</span>\n<span class=\"n\">d1</span> <span class=\"o\">=</span> <span class=\"n\">pd</span><span class=\"o\">.</span><span class=\"n\">DataFrame</span><span class=\"p\">([[</span><span class=\"mi\">0</span><span class=\"p\">,</span><span class=\"mi\">1</span><span class=\"p\">,</span><span class=\"mi\">2</span><span class=\"p\">],[</span><span class=\"mi\">3</span><span class=\"p\">,</span><span class=\"mi\">4</span><span class=\"p\">,</span><span class=\"mi\">5</span><span class=\"p\">],[</span><span class=\"mi\">6</span><span class=\"p\">,</span><span class=\"mi\">7</span><span class=\"p\">,</span><span class=\"mi\">8</span><span class=\"p\">],[</span><span class=\"mi\">9</span><span class=\"p\">,</span><span class=\"mi\">10</span><span class=\"p\">,</span><span class=\"mi\">11</span><span class=\"p\">]],</span> <span class=\"n\">index</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"mi\">10</span><span class=\"p\">,</span><span class=\"mi\">11</span><span class=\"p\">,</span><span class=\"mi\">12</span><span class=\"p\">,</span><span class=\"mi\">13</span><span class=\"p\">],</span> <span class=\"n\">columns</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s1\">&#39;c1&#39;</span><span class=\"p\">,</span><span class=\"s1\">&#39;c2&#39;</span><span class=\"p\">,</span><span class=\"s1\">&#39;c3&#39;</span><span class=\"p\">])</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">d1</span><span class=\"p\">)</span>\n\n<span class=\"c1\"># 多次元配列からデータフレームの作成</span>\n<span class=\"n\">d2</span> <span class=\"o\">=</span> <span class=\"n\">pd</span><span class=\"o\">.</span><span class=\"n\">DataFrame</span><span class=\"p\">(</span><span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">random</span><span class=\"o\">.</span><span class=\"n\">rand</span><span class=\"p\">(</span><span class=\"mi\">12</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">reshape</span><span class=\"p\">(</span><span class=\"mi\">4</span><span class=\"p\">,</span><span class=\"mi\">3</span><span class=\"p\">),</span> <span class=\"n\">columns</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s1\">&#39;c1&#39;</span><span class=\"p\">,</span><span class=\"s1\">&#39;c2&#39;</span><span class=\"p\">,</span><span class=\"s1\">&#39;c3&#39;</span><span class=\"p\">])</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">d2</span><span class=\"p\">)</span>\n\n<span class=\"c1\"># 辞書からデータフレームの作成</span>\n<span class=\"n\">d3</span> <span class=\"o\">=</span> <span class=\"n\">pd</span><span class=\"o\">.</span><span class=\"n\">DataFrame</span><span class=\"p\">({</span><span class=\"s1\">&#39;Initial&#39;</span><span class=\"p\">:[</span><span class=\"s1\">&#39;B&#39;</span><span class=\"p\">,</span><span class=\"s1\">&#39;F&#39;</span><span class=\"p\">,</span><span class=\"s1\">&#39;W&#39;</span><span class=\"p\">],</span> <span class=\"s1\">&#39;Name&#39;</span><span class=\"p\">:[</span><span class=\"s1\">&#39;boo&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;foo&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;woo&#39;</span><span class=\"p\">]},</span> <span class=\"n\">columns</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s1\">&#39;Name&#39;</span><span class=\"p\">,</span><span class=\"s1\">&#39;Initial&#39;</span><span class=\"p\">])</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">d3</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n    c1  c2  c3\n10   0   1   2\n11   3   4   5\n12   6   7   8\n13   9  10  11\n         c1        c2        c3\n0  0.373992  0.912874  0.326649\n1  0.044701  0.395272  0.990805\n2  0.914061  0.759766  0.118296\n3  0.712000  0.992865  0.260287\n  Name Initial\n0  boo       B\n1  foo       F\n2  woo       W\n</pre></div></div>\n</div>\n</section>\n<section id=\"CSVファイルからのデータフレームの作成\">\n<h2>CSVファイルからのデータフレームの作成<a class=\"headerlink\" href=\"#CSVファイルからのデータフレームの作成\" title=\"Link to this heading\">¶</a></h2>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">pandas</span></code> モジュールの <code class=\"docutils literal notranslate\"><span class=\"pre\">read_csv()</span></code> 関数を用いて、以下のように<strong>CSVファイル</strong>を読み込んで、データフレームのオブジェクトを作成することができます。<code class=\"docutils literal notranslate\"><span class=\"pre\">read_csv()</span></code> 関数の <code class=\"docutils literal notranslate\"><span class=\"pre\">encoding</span></code> 引数にはファイルの文字コードを指定します。CSVファイル <code class=\"docutils literal notranslate\"><span class=\"pre\">iris.csv</span></code> には、以下のようにアヤメの種類 (species) と花弁 (petal)・がく片 (sepal) の長さ (length) と幅 (width) のデータが含まれています。</p>\n<div class=\"highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>sepal_length, sepal_width, petal_length, petal_width, species\n5.1, 3.5, 1.4, 0.2, setosa\n4.9, 3.0, 1.4, 0.2, setosa\n4.7, 3.2, 1.3, 0.2, setosa\n...\n</pre></div>\n</div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">head()</span></code> メソッドを使うとデータフレームの先頭の複数行を表示させることができます。引数には表示させたい行数を指定し、行数を指定しない場合は、5行分のデータが表示されます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[4]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"c1\"># CSVファイルの読み込み</span>\n<span class=\"n\">iris_d</span> <span class=\"o\">=</span> <span class=\"n\">pd</span><span class=\"o\">.</span><span class=\"n\">read_csv</span><span class=\"p\">(</span><span class=\"s1\">&#39;iris.csv&#39;</span><span class=\"p\">)</span>\n\n<span class=\"c1\"># 先頭10行のデータを表示</span>\n<span class=\"n\">iris_d</span><span class=\"o\">.</span><span class=\"n\">head</span><span class=\"p\">(</span><span class=\"mi\">10</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[4]:\n</pre></div>\n</div>\n<div class=\"output_area rendered_html docutils container\">\n<div>\n<style scoped>\n    .dataframe tbody tr th:only-of-type {\n        vertical-align: middle;\n    }\n\n    .dataframe tbody tr th {\n        vertical-align: top;\n    }\n\n    .dataframe thead th {\n        text-align: right;\n    }\n</style>\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th>sepal_length</th>\n      <th>sepal_width</th>\n      <th>petal_length</th>\n      <th>petal_width</th>\n      <th>species</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>0</th>\n      <td>5.1</td>\n      <td>3.5</td>\n      <td>1.4</td>\n      <td>0.2</td>\n      <td>setosa</td>\n    </tr>\n    <tr>\n      <th>1</th>\n      <td>4.9</td>\n      <td>3.0</td>\n      <td>1.4</td>\n      <td>0.2</td>\n      <td>setosa</td>\n    </tr>\n    <tr>\n      <th>2</th>\n      <td>4.7</td>\n      <td>3.2</td>\n      <td>1.3</td>\n      <td>0.2</td>\n      <td>setosa</td>\n    </tr>\n    <tr>\n      <th>3</th>\n      <td>4.6</td>\n      <td>3.1</td>\n      <td>1.5</td>\n      <td>0.2</td>\n      <td>setosa</td>\n    </tr>\n    <tr>\n      <th>4</th>\n      <td>5.0</td>\n      <td>3.6</td>\n      <td>1.4</td>\n      <td>0.2</td>\n      <td>setosa</td>\n    </tr>\n    <tr>\n      <th>5</th>\n      <td>5.4</td>\n      <td>3.9</td>\n      <td>1.7</td>\n      <td>0.4</td>\n      <td>setosa</td>\n    </tr>\n    <tr>\n      <th>6</th>\n      <td>4.6</td>\n      <td>3.4</td>\n      <td>1.4</td>\n      <td>0.3</td>\n      <td>setosa</td>\n    </tr>\n    <tr>\n      <th>7</th>\n      <td>5.0</td>\n      <td>3.4</td>\n      <td>1.5</td>\n      <td>0.2</td>\n      <td>setosa</td>\n    </tr>\n    <tr>\n      <th>8</th>\n      <td>4.4</td>\n      <td>2.9</td>\n      <td>1.4</td>\n      <td>0.2</td>\n      <td>setosa</td>\n    </tr>\n    <tr>\n      <th>9</th>\n      <td>4.9</td>\n      <td>3.1</td>\n      <td>1.5</td>\n      <td>0.1</td>\n      <td>setosa</td>\n    </tr>\n  </tbody>\n</table>\n</div></div>\n</div>\n<p>データフレームオブジェクトの <code class=\"docutils literal notranslate\"><span class=\"pre\">index</span></code> 属性により、データフレームのインデックスの情報が確認できます。<code class=\"docutils literal notranslate\"><span class=\"pre\">len()</span></code> 関数を用いると、データフレームの行数が取得できます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[5]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">iris_d</span><span class=\"o\">.</span><span class=\"n\">index</span><span class=\"p\">)</span> <span class=\"c1\">#インデックスの情報</span>\n<span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">iris_d</span><span class=\"o\">.</span><span class=\"n\">index</span><span class=\"p\">)</span> <span class=\"c1\">#インデックスの長さ</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nRangeIndex(start=0, stop=150, step=1)\n</pre></div></div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[5]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n150\n</pre></div></div>\n</div>\n</section>\n<section id=\"データの参照\">\n<h2>データの参照<a class=\"headerlink\" href=\"#データの参照\" title=\"Link to this heading\">¶</a></h2>\n<p>シリーズやデータフレームでは、行の位置（行は <code class=\"docutils literal notranslate\"><span class=\"pre\">0</span></code> から始まります）を<strong>スライス</strong>として指定することで任意の行を抽出することができます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[6]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"c1\"># データフレームの先頭5行のデータ</span>\n<span class=\"n\">iris_d</span><span class=\"p\">[:</span><span class=\"mi\">5</span><span class=\"p\">]</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[6]:\n</pre></div>\n</div>\n<div class=\"output_area rendered_html docutils container\">\n<div>\n<style scoped>\n    .dataframe tbody tr th:only-of-type {\n        vertical-align: middle;\n    }\n\n    .dataframe tbody tr th {\n        vertical-align: top;\n    }\n\n    .dataframe thead th {\n        text-align: right;\n    }\n</style>\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th>sepal_length</th>\n      <th>sepal_width</th>\n      <th>petal_length</th>\n      <th>petal_width</th>\n      <th>species</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>0</th>\n      <td>5.1</td>\n      <td>3.5</td>\n      <td>1.4</td>\n      <td>0.2</td>\n      <td>setosa</td>\n    </tr>\n    <tr>\n      <th>1</th>\n      <td>4.9</td>\n      <td>3.0</td>\n      <td>1.4</td>\n      <td>0.2</td>\n      <td>setosa</td>\n    </tr>\n    <tr>\n      <th>2</th>\n      <td>4.7</td>\n      <td>3.2</td>\n      <td>1.3</td>\n      <td>0.2</td>\n      <td>setosa</td>\n    </tr>\n    <tr>\n      <th>3</th>\n      <td>4.6</td>\n      <td>3.1</td>\n      <td>1.5</td>\n      <td>0.2</td>\n      <td>setosa</td>\n    </tr>\n    <tr>\n      <th>4</th>\n      <td>5.0</td>\n      <td>3.6</td>\n      <td>1.4</td>\n      <td>0.2</td>\n      <td>setosa</td>\n    </tr>\n  </tbody>\n</table>\n</div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[7]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"c1\"># データフレームの終端5行のデータ</span>\n<span class=\"n\">iris_d</span><span class=\"p\">[</span><span class=\"o\">-</span><span class=\"mi\">5</span><span class=\"p\">:]</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[7]:\n</pre></div>\n</div>\n<div class=\"output_area rendered_html docutils container\">\n<div>\n<style scoped>\n    .dataframe tbody tr th:only-of-type {\n        vertical-align: middle;\n    }\n\n    .dataframe tbody tr th {\n        vertical-align: top;\n    }\n\n    .dataframe thead th {\n        text-align: right;\n    }\n</style>\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th>sepal_length</th>\n      <th>sepal_width</th>\n      <th>petal_length</th>\n      <th>petal_width</th>\n      <th>species</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>145</th>\n      <td>6.7</td>\n      <td>3.0</td>\n      <td>5.2</td>\n      <td>2.3</td>\n      <td>virginica</td>\n    </tr>\n    <tr>\n      <th>146</th>\n      <td>6.3</td>\n      <td>2.5</td>\n      <td>5.0</td>\n      <td>1.9</td>\n      <td>virginica</td>\n    </tr>\n    <tr>\n      <th>147</th>\n      <td>6.5</td>\n      <td>3.0</td>\n      <td>5.2</td>\n      <td>2.0</td>\n      <td>virginica</td>\n    </tr>\n    <tr>\n      <th>148</th>\n      <td>6.2</td>\n      <td>3.4</td>\n      <td>5.4</td>\n      <td>2.3</td>\n      <td>virginica</td>\n    </tr>\n    <tr>\n      <th>149</th>\n      <td>5.9</td>\n      <td>3.0</td>\n      <td>5.1</td>\n      <td>1.8</td>\n      <td>virginica</td>\n    </tr>\n  </tbody>\n</table>\n</div></div>\n</div>\n<p>データフレームから任意の列を抽出するには、<code class=\"docutils literal notranslate\"><span class=\"pre\">DataFrame.列名</span></code> のように、データフレームオブジェクトに <code class=\"docutils literal notranslate\"><span class=\"pre\">.</span></code> で列名をつなげることで、その列を指定してシリーズオブジェクトとして抽出することができます。なお、列名を文字列として、<code class=\"docutils literal notranslate\"><span class=\"pre\">DataFrame['列名']</span></code> のように添字指定しても同様です。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[8]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"c1\"># データフレームの&#39;species&#39;の列の先頭10行のデータ</span>\n<span class=\"n\">iris_d</span><span class=\"p\">[</span><span class=\"s1\">&#39;species&#39;</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">head</span><span class=\"p\">(</span><span class=\"mi\">10</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[8]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n0    setosa\n1    setosa\n2    setosa\n3    setosa\n4    setosa\n5    setosa\n6    setosa\n7    setosa\n8    setosa\n9    setosa\nName: species, dtype: object\n</pre></div></div>\n</div>\n<p>データフレームの添字として、列名のリストを指定すると複数の列をデータフレームオブジェクトとして抽出することができます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[9]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"c1\"># データフレームの&#39;sepal_length&#39;とspecies&#39;の列の先頭10行のデータ</span>\n<span class=\"n\">iris_d</span><span class=\"p\">[[</span><span class=\"s1\">&#39;sepal_length&#39;</span><span class=\"p\">,</span><span class=\"s1\">&#39;species&#39;</span><span class=\"p\">]]</span><span class=\"o\">.</span><span class=\"n\">head</span><span class=\"p\">(</span><span class=\"mi\">10</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[9]:\n</pre></div>\n</div>\n<div class=\"output_area rendered_html docutils container\">\n<div>\n<style scoped>\n    .dataframe tbody tr th:only-of-type {\n        vertical-align: middle;\n    }\n\n    .dataframe tbody tr th {\n        vertical-align: top;\n    }\n\n    .dataframe thead th {\n        text-align: right;\n    }\n</style>\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th>sepal_length</th>\n      <th>species</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>0</th>\n      <td>5.1</td>\n      <td>setosa</td>\n    </tr>\n    <tr>\n      <th>1</th>\n      <td>4.9</td>\n      <td>setosa</td>\n    </tr>\n    <tr>\n      <th>2</th>\n      <td>4.7</td>\n      <td>setosa</td>\n    </tr>\n    <tr>\n      <th>3</th>\n      <td>4.6</td>\n      <td>setosa</td>\n    </tr>\n    <tr>\n      <th>4</th>\n      <td>5.0</td>\n      <td>setosa</td>\n    </tr>\n    <tr>\n      <th>5</th>\n      <td>5.4</td>\n      <td>setosa</td>\n    </tr>\n    <tr>\n      <th>6</th>\n      <td>4.6</td>\n      <td>setosa</td>\n    </tr>\n    <tr>\n      <th>7</th>\n      <td>5.0</td>\n      <td>setosa</td>\n    </tr>\n    <tr>\n      <th>8</th>\n      <td>4.4</td>\n      <td>setosa</td>\n    </tr>\n    <tr>\n      <th>9</th>\n      <td>4.9</td>\n      <td>setosa</td>\n    </tr>\n  </tbody>\n</table>\n</div></div>\n</div>\n<section id=\"iloc-と-loc\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">iloc</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">loc</span></code><a class=\"headerlink\" href=\"#iloc-と-loc\" title=\"Link to this heading\">¶</a></h3>\n<p>データフレームオブジェクトの <code class=\"docutils literal notranslate\"><span class=\"pre\">iloc</span></code> 属性を用いると、NumPyの多次元配列のスライスと同様に、行と列の位置を指定して任意の行と列を抽出することができます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[10]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"c1\"># データフレームの2行のデータ</span>\n<span class=\"n\">iris_d</span><span class=\"o\">.</span><span class=\"n\">iloc</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">]</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[10]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nsepal_length       4.9\nsepal_width        3.0\npetal_length       1.4\npetal_width        0.2\nspecies         setosa\nName: 1, dtype: object\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[11]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"c1\"># データフレームの2行,2列目のデータ</span>\n<span class=\"n\">iris_d</span><span class=\"o\">.</span><span class=\"n\">iloc</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">]</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[11]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nnp.float64(3.0)\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[12]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"c1\"># データフレームの1から5行目と1から2列目のデータ</span>\n<span class=\"n\">iris_d</span><span class=\"o\">.</span><span class=\"n\">iloc</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">:</span><span class=\"mi\">5</span><span class=\"p\">,</span> <span class=\"mi\">0</span><span class=\"p\">:</span><span class=\"mi\">2</span><span class=\"p\">]</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[12]:\n</pre></div>\n</div>\n<div class=\"output_area rendered_html docutils container\">\n<div>\n<style scoped>\n    .dataframe tbody tr th:only-of-type {\n        vertical-align: middle;\n    }\n\n    .dataframe tbody tr th {\n        vertical-align: top;\n    }\n\n    .dataframe thead th {\n        text-align: right;\n    }\n</style>\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th>sepal_length</th>\n      <th>sepal_width</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>0</th>\n      <td>5.1</td>\n      <td>3.5</td>\n    </tr>\n    <tr>\n      <th>1</th>\n      <td>4.9</td>\n      <td>3.0</td>\n    </tr>\n    <tr>\n      <th>2</th>\n      <td>4.7</td>\n      <td>3.2</td>\n    </tr>\n    <tr>\n      <th>3</th>\n      <td>4.6</td>\n      <td>3.1</td>\n    </tr>\n    <tr>\n      <th>4</th>\n      <td>5.0</td>\n      <td>3.6</td>\n    </tr>\n  </tbody>\n</table>\n</div></div>\n</div>\n<p>データフレームオブジェクトの <code class=\"docutils literal notranslate\"><span class=\"pre\">loc</span></code> 属性を用いると、抽出したい行のインデックス・ラベルや列のラベルを指定して任意の行と列を抽出することができます。複数のラベルはリストで指定します。行のインデックスは各行に割り当てられた番号で、<code class=\"docutils literal notranslate\"><span class=\"pre\">iloc</span></code> で指定する行の位置とは必ずしも一致しないことに注意してください。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[13]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"c1\"># データフレームの行インデックス5のデータ</span>\n<span class=\"n\">iris_d</span><span class=\"o\">.</span><span class=\"n\">loc</span><span class=\"p\">[</span><span class=\"mi\">5</span><span class=\"p\">]</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[13]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nsepal_length       5.4\nsepal_width        3.9\npetal_length       1.7\npetal_width        0.4\nspecies         setosa\nName: 5, dtype: object\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[14]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"c1\"># データフレームの行インデックス5と&#39;sepal_length&#39;と列のデータ</span>\n<span class=\"n\">iris_d</span><span class=\"o\">.</span><span class=\"n\">loc</span><span class=\"p\">[</span><span class=\"mi\">5</span><span class=\"p\">,</span> <span class=\"s1\">&#39;sepal_length&#39;</span><span class=\"p\">]</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[14]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nnp.float64(5.4)\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[15]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"c1\"># データフレームの行インデックス1から5と&#39;sepal_length&#39;とspecies&#39;の列のデータ</span>\n<span class=\"n\">iris_d</span><span class=\"o\">.</span><span class=\"n\">loc</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">:</span><span class=\"mi\">5</span><span class=\"p\">,</span> <span class=\"p\">[</span><span class=\"s1\">&#39;sepal_length&#39;</span><span class=\"p\">,</span><span class=\"s1\">&#39;species&#39;</span><span class=\"p\">]]</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[15]:\n</pre></div>\n</div>\n<div class=\"output_area rendered_html docutils container\">\n<div>\n<style scoped>\n    .dataframe tbody tr th:only-of-type {\n        vertical-align: middle;\n    }\n\n    .dataframe tbody tr th {\n        vertical-align: top;\n    }\n\n    .dataframe thead th {\n        text-align: right;\n    }\n</style>\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th>sepal_length</th>\n      <th>species</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>1</th>\n      <td>4.9</td>\n      <td>setosa</td>\n    </tr>\n    <tr>\n      <th>2</th>\n      <td>4.7</td>\n      <td>setosa</td>\n    </tr>\n    <tr>\n      <th>3</th>\n      <td>4.6</td>\n      <td>setosa</td>\n    </tr>\n    <tr>\n      <th>4</th>\n      <td>5.0</td>\n      <td>setosa</td>\n    </tr>\n    <tr>\n      <th>5</th>\n      <td>5.4</td>\n      <td>setosa</td>\n    </tr>\n  </tbody>\n</table>\n</div></div>\n</div>\n</section>\n</section>\n<section id=\"データの条件取り出し\">\n<h2>データの条件取り出し<a class=\"headerlink\" href=\"#データの条件取り出し\" title=\"Link to this heading\">¶</a></h2>\n<p>データフレームの列の指定と併せて条件を指定することで、条件にあった行からなるデータフレームを抽出することができます。NumPyの多次元配列の<strong>真理値配列によるインデックスアクセス</strong>と同様に、条件式のブール演算では、<code class=\"docutils literal notranslate\"><span class=\"pre\">and</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">or</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">not</span></code> の代わりに <code class=\"docutils literal notranslate\"><span class=\"pre\">&amp;</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">|</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">~</span></code> を用います。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[16]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"c1\"># データフレームの&#39;sepal_length&#39;列の値が7より大きく、&#39;species&#39;列の値が3より小さいデータ</span>\n<span class=\"n\">iris_d</span><span class=\"p\">[(</span><span class=\"n\">iris_d</span><span class=\"p\">[</span><span class=\"s1\">&#39;sepal_length&#39;</span><span class=\"p\">]</span> <span class=\"o\">&gt;</span> <span class=\"mf\">7.0</span><span class=\"p\">)</span> <span class=\"o\">&amp;</span> <span class=\"p\">(</span><span class=\"n\">iris_d</span><span class=\"p\">[</span><span class=\"s1\">&#39;sepal_width&#39;</span><span class=\"p\">]</span> <span class=\"o\">&lt;</span> <span class=\"mf\">3.0</span><span class=\"p\">)]</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[16]:\n</pre></div>\n</div>\n<div class=\"output_area rendered_html docutils container\">\n<div>\n<style scoped>\n    .dataframe tbody tr th:only-of-type {\n        vertical-align: middle;\n    }\n\n    .dataframe tbody tr th {\n        vertical-align: top;\n    }\n\n    .dataframe thead th {\n        text-align: right;\n    }\n</style>\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th>sepal_length</th>\n      <th>sepal_width</th>\n      <th>petal_length</th>\n      <th>petal_width</th>\n      <th>species</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>107</th>\n      <td>7.3</td>\n      <td>2.9</td>\n      <td>6.3</td>\n      <td>1.8</td>\n      <td>virginica</td>\n    </tr>\n    <tr>\n      <th>118</th>\n      <td>7.7</td>\n      <td>2.6</td>\n      <td>6.9</td>\n      <td>2.3</td>\n      <td>virginica</td>\n    </tr>\n    <tr>\n      <th>122</th>\n      <td>7.7</td>\n      <td>2.8</td>\n      <td>6.7</td>\n      <td>2.0</td>\n      <td>virginica</td>\n    </tr>\n    <tr>\n      <th>130</th>\n      <td>7.4</td>\n      <td>2.8</td>\n      <td>6.1</td>\n      <td>1.9</td>\n      <td>virginica</td>\n    </tr>\n  </tbody>\n</table>\n</div></div>\n</div>\n</section>\n<section id=\"列の追加と削除\">\n<h2>列の追加と削除<a class=\"headerlink\" href=\"#列の追加と削除\" title=\"Link to this heading\">¶</a></h2>\n<p>データフレームに列を追加する場合は、以下のように、追加したい新たな列名を指定し、値を代入すると新たな列を追加できます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[17]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"c1\"># データフレームに&#39;mycolumn&#39;という列を追加</span>\n<span class=\"n\">iris_d</span><span class=\"p\">[</span><span class=\"s1\">&#39;mycolumn&#39;</span><span class=\"p\">]</span><span class=\"o\">=</span><span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">random</span><span class=\"o\">.</span><span class=\"n\">rand</span><span class=\"p\">(</span><span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">iris_d</span><span class=\"o\">.</span><span class=\"n\">index</span><span class=\"p\">))</span>\n<span class=\"n\">iris_d</span><span class=\"o\">.</span><span class=\"n\">head</span><span class=\"p\">(</span><span class=\"mi\">10</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[17]:\n</pre></div>\n</div>\n<div class=\"output_area rendered_html docutils container\">\n<div>\n<style scoped>\n    .dataframe tbody tr th:only-of-type {\n        vertical-align: middle;\n    }\n\n    .dataframe tbody tr th {\n        vertical-align: top;\n    }\n\n    .dataframe thead th {\n        text-align: right;\n    }\n</style>\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th>sepal_length</th>\n      <th>sepal_width</th>\n      <th>petal_length</th>\n      <th>petal_width</th>\n      <th>species</th>\n      <th>mycolumn</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>0</th>\n      <td>5.1</td>\n      <td>3.5</td>\n      <td>1.4</td>\n      <td>0.2</td>\n      <td>setosa</td>\n      <td>0.909687</td>\n    </tr>\n    <tr>\n      <th>1</th>\n      <td>4.9</td>\n      <td>3.0</td>\n      <td>1.4</td>\n      <td>0.2</td>\n      <td>setosa</td>\n      <td>0.574082</td>\n    </tr>\n    <tr>\n      <th>2</th>\n      <td>4.7</td>\n      <td>3.2</td>\n      <td>1.3</td>\n      <td>0.2</td>\n      <td>setosa</td>\n      <td>0.716383</td>\n    </tr>\n    <tr>\n      <th>3</th>\n      <td>4.6</td>\n      <td>3.1</td>\n      <td>1.5</td>\n      <td>0.2</td>\n      <td>setosa</td>\n      <td>0.217071</td>\n    </tr>\n    <tr>\n      <th>4</th>\n      <td>5.0</td>\n      <td>3.6</td>\n      <td>1.4</td>\n      <td>0.2</td>\n      <td>setosa</td>\n      <td>0.240634</td>\n    </tr>\n    <tr>\n      <th>5</th>\n      <td>5.4</td>\n      <td>3.9</td>\n      <td>1.7</td>\n      <td>0.4</td>\n      <td>setosa</td>\n      <td>0.903485</td>\n    </tr>\n    <tr>\n      <th>6</th>\n      <td>4.6</td>\n      <td>3.4</td>\n      <td>1.4</td>\n      <td>0.3</td>\n      <td>setosa</td>\n      <td>0.217574</td>\n    </tr>\n    <tr>\n      <th>7</th>\n      <td>5.0</td>\n      <td>3.4</td>\n      <td>1.5</td>\n      <td>0.2</td>\n      <td>setosa</td>\n      <td>0.175367</td>\n    </tr>\n    <tr>\n      <th>8</th>\n      <td>4.4</td>\n      <td>2.9</td>\n      <td>1.4</td>\n      <td>0.2</td>\n      <td>setosa</td>\n      <td>0.316945</td>\n    </tr>\n    <tr>\n      <th>9</th>\n      <td>4.9</td>\n      <td>3.1</td>\n      <td>1.5</td>\n      <td>0.1</td>\n      <td>setosa</td>\n      <td>0.227793</td>\n    </tr>\n  </tbody>\n</table>\n</div></div>\n</div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">del</span></code> 文を用いると、以下のようにデータフレームから任意の列を削除できます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[18]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"c1\"># データフレームから&#39;mycolumn&#39;という列を削除</span>\n<span class=\"k\">del</span> <span class=\"n\">iris_d</span><span class=\"p\">[</span><span class=\"s1\">&#39;mycolumn&#39;</span><span class=\"p\">]</span>\n<span class=\"n\">iris_d</span><span class=\"o\">.</span><span class=\"n\">head</span><span class=\"p\">(</span><span class=\"mi\">10</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[18]:\n</pre></div>\n</div>\n<div class=\"output_area rendered_html docutils container\">\n<div>\n<style scoped>\n    .dataframe tbody tr th:only-of-type {\n        vertical-align: middle;\n    }\n\n    .dataframe tbody tr th {\n        vertical-align: top;\n    }\n\n    .dataframe thead th {\n        text-align: right;\n    }\n</style>\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th>sepal_length</th>\n      <th>sepal_width</th>\n      <th>petal_length</th>\n      <th>petal_width</th>\n      <th>species</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>0</th>\n      <td>5.1</td>\n      <td>3.5</td>\n      <td>1.4</td>\n      <td>0.2</td>\n      <td>setosa</td>\n    </tr>\n    <tr>\n      <th>1</th>\n      <td>4.9</td>\n      <td>3.0</td>\n      <td>1.4</td>\n      <td>0.2</td>\n      <td>setosa</td>\n    </tr>\n    <tr>\n      <th>2</th>\n      <td>4.7</td>\n      <td>3.2</td>\n      <td>1.3</td>\n      <td>0.2</td>\n      <td>setosa</td>\n    </tr>\n    <tr>\n      <th>3</th>\n      <td>4.6</td>\n      <td>3.1</td>\n      <td>1.5</td>\n      <td>0.2</td>\n      <td>setosa</td>\n    </tr>\n    <tr>\n      <th>4</th>\n      <td>5.0</td>\n      <td>3.6</td>\n      <td>1.4</td>\n      <td>0.2</td>\n      <td>setosa</td>\n    </tr>\n    <tr>\n      <th>5</th>\n      <td>5.4</td>\n      <td>3.9</td>\n      <td>1.7</td>\n      <td>0.4</td>\n      <td>setosa</td>\n    </tr>\n    <tr>\n      <th>6</th>\n      <td>4.6</td>\n      <td>3.4</td>\n      <td>1.4</td>\n      <td>0.3</td>\n      <td>setosa</td>\n    </tr>\n    <tr>\n      <th>7</th>\n      <td>5.0</td>\n      <td>3.4</td>\n      <td>1.5</td>\n      <td>0.2</td>\n      <td>setosa</td>\n    </tr>\n    <tr>\n      <th>8</th>\n      <td>4.4</td>\n      <td>2.9</td>\n      <td>1.4</td>\n      <td>0.2</td>\n      <td>setosa</td>\n    </tr>\n    <tr>\n      <th>9</th>\n      <td>4.9</td>\n      <td>3.1</td>\n      <td>1.5</td>\n      <td>0.1</td>\n      <td>setosa</td>\n    </tr>\n  </tbody>\n</table>\n</div></div>\n</div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">assign()</span></code> メソッドを用いると、追加したい列名とその値を指定することで、以下のように新たな列を追加したデータフレームを新たに作成することができます。この際、元のデータフレームは変更されないことに注意してください。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[19]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"c1\"># データフレームに&#39;mycolumn&#39;という列を追加し新しいデータフレームを作成</span>\n<span class=\"n\">myiris1</span> <span class=\"o\">=</span> <span class=\"n\">iris_d</span><span class=\"o\">.</span><span class=\"n\">assign</span><span class=\"p\">(</span><span class=\"n\">mycolumn</span><span class=\"o\">=</span><span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">random</span><span class=\"o\">.</span><span class=\"n\">rand</span><span class=\"p\">(</span><span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">iris_d</span><span class=\"o\">.</span><span class=\"n\">index</span><span class=\"p\">)))</span>\n<span class=\"n\">myiris1</span><span class=\"o\">.</span><span class=\"n\">head</span><span class=\"p\">(</span><span class=\"mi\">5</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[19]:\n</pre></div>\n</div>\n<div class=\"output_area rendered_html docutils container\">\n<div>\n<style scoped>\n    .dataframe tbody tr th:only-of-type {\n        vertical-align: middle;\n    }\n\n    .dataframe tbody tr th {\n        vertical-align: top;\n    }\n\n    .dataframe thead th {\n        text-align: right;\n    }\n</style>\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th>sepal_length</th>\n      <th>sepal_width</th>\n      <th>petal_length</th>\n      <th>petal_width</th>\n      <th>species</th>\n      <th>mycolumn</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>0</th>\n      <td>5.1</td>\n      <td>3.5</td>\n      <td>1.4</td>\n      <td>0.2</td>\n      <td>setosa</td>\n      <td>0.975114</td>\n    </tr>\n    <tr>\n      <th>1</th>\n      <td>4.9</td>\n      <td>3.0</td>\n      <td>1.4</td>\n      <td>0.2</td>\n      <td>setosa</td>\n      <td>0.874244</td>\n    </tr>\n    <tr>\n      <th>2</th>\n      <td>4.7</td>\n      <td>3.2</td>\n      <td>1.3</td>\n      <td>0.2</td>\n      <td>setosa</td>\n      <td>0.479607</td>\n    </tr>\n    <tr>\n      <th>3</th>\n      <td>4.6</td>\n      <td>3.1</td>\n      <td>1.5</td>\n      <td>0.2</td>\n      <td>setosa</td>\n      <td>0.553219</td>\n    </tr>\n    <tr>\n      <th>4</th>\n      <td>5.0</td>\n      <td>3.6</td>\n      <td>1.4</td>\n      <td>0.2</td>\n      <td>setosa</td>\n      <td>0.682090</td>\n    </tr>\n  </tbody>\n</table>\n</div></div>\n</div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">drop()</span></code> メソッドを用いると、削除したい列名を指定することで、以下のように任意の列を削除したデータフレームを新たに作成することができます。列を削除する場合は、<code class=\"docutils literal notranslate\"><span class=\"pre\">axis</span></code> 引数に <code class=\"docutils literal notranslate\"><span class=\"pre\">1</span></code> を指定します。この際、元のデータフレームは変更されないことに注意してください。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[20]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"c1\"># データフレームから&#39;mycolumn&#39;という列を削除し、新しいデータフレームを作成</span>\n<span class=\"n\">myiris2</span> <span class=\"o\">=</span> <span class=\"n\">myiris1</span><span class=\"o\">.</span><span class=\"n\">drop</span><span class=\"p\">(</span><span class=\"s1\">&#39;mycolumn&#39;</span><span class=\"p\">,</span><span class=\"n\">axis</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n<span class=\"n\">myiris2</span><span class=\"o\">.</span><span class=\"n\">head</span><span class=\"p\">(</span><span class=\"mi\">5</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[20]:\n</pre></div>\n</div>\n<div class=\"output_area rendered_html docutils container\">\n<div>\n<style scoped>\n    .dataframe tbody tr th:only-of-type {\n        vertical-align: middle;\n    }\n\n    .dataframe tbody tr th {\n        vertical-align: top;\n    }\n\n    .dataframe thead th {\n        text-align: right;\n    }\n</style>\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th>sepal_length</th>\n      <th>sepal_width</th>\n      <th>petal_length</th>\n      <th>petal_width</th>\n      <th>species</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>0</th>\n      <td>5.1</td>\n      <td>3.5</td>\n      <td>1.4</td>\n      <td>0.2</td>\n      <td>setosa</td>\n    </tr>\n    <tr>\n      <th>1</th>\n      <td>4.9</td>\n      <td>3.0</td>\n      <td>1.4</td>\n      <td>0.2</td>\n      <td>setosa</td>\n    </tr>\n    <tr>\n      <th>2</th>\n      <td>4.7</td>\n      <td>3.2</td>\n      <td>1.3</td>\n      <td>0.2</td>\n      <td>setosa</td>\n    </tr>\n    <tr>\n      <th>3</th>\n      <td>4.6</td>\n      <td>3.1</td>\n      <td>1.5</td>\n      <td>0.2</td>\n      <td>setosa</td>\n    </tr>\n    <tr>\n      <th>4</th>\n      <td>5.0</td>\n      <td>3.6</td>\n      <td>1.4</td>\n      <td>0.2</td>\n      <td>setosa</td>\n    </tr>\n  </tbody>\n</table>\n</div></div>\n</div>\n</section>\n<section id=\"行の追加と削除\">\n<h2>行の追加と削除<a class=\"headerlink\" href=\"#行の追加と削除\" title=\"Link to this heading\">¶</a></h2>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">pandas</span></code> モジュールの <code class=\"docutils literal notranslate\"><span class=\"pre\">concat()</span></code> 関数を用いると、データフレームに新たな行を追加することができます。以下では、<code class=\"docutils literal notranslate\"><span class=\"pre\">iris_d</span></code> データフレームの最終行に新たな行を追加しています。<code class=\"docutils literal notranslate\"><span class=\"pre\">ignore_index</span></code> 引数を <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> にすると追加した行に新たなインデックス番号がつけられます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[21]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"c1\"># 追加する行のデータフレーム</span>\n<span class=\"n\">row</span> <span class=\"o\">=</span> <span class=\"n\">pd</span><span class=\"o\">.</span><span class=\"n\">DataFrame</span><span class=\"p\">([[</span><span class=\"mi\">1</span><span class=\"p\">,</span><span class=\"mi\">1</span><span class=\"p\">,</span><span class=\"mi\">1</span><span class=\"p\">,</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"s1\">&#39;setosa&#39;</span><span class=\"p\">]],</span> <span class=\"n\">columns</span><span class=\"o\">=</span><span class=\"n\">iris_d</span><span class=\"o\">.</span><span class=\"n\">columns</span><span class=\"p\">)</span>\n\n<span class=\"c1\"># データフレームに行を追加し新しいデータフレームを作成</span>\n<span class=\"n\">myiris4</span> <span class=\"o\">=</span> <span class=\"n\">pd</span><span class=\"o\">.</span><span class=\"n\">concat</span><span class=\"p\">([</span><span class=\"n\">iris_d</span><span class=\"p\">,</span> <span class=\"n\">row</span><span class=\"p\">],</span> <span class=\"n\">ignore_index</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"n\">myiris4</span><span class=\"p\">[</span><span class=\"o\">-</span><span class=\"mi\">2</span><span class=\"p\">:]</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[21]:\n</pre></div>\n</div>\n<div class=\"output_area rendered_html docutils container\">\n<div>\n<style scoped>\n    .dataframe tbody tr th:only-of-type {\n        vertical-align: middle;\n    }\n\n    .dataframe tbody tr th {\n        vertical-align: top;\n    }\n\n    .dataframe thead th {\n        text-align: right;\n    }\n</style>\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th>sepal_length</th>\n      <th>sepal_width</th>\n      <th>petal_length</th>\n      <th>petal_width</th>\n      <th>species</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>149</th>\n      <td>5.9</td>\n      <td>3.0</td>\n      <td>5.1</td>\n      <td>1.8</td>\n      <td>virginica</td>\n    </tr>\n    <tr>\n      <th>150</th>\n      <td>1.0</td>\n      <td>1.0</td>\n      <td>1.0</td>\n      <td>1.0</td>\n      <td>setosa</td>\n    </tr>\n  </tbody>\n</table>\n</div></div>\n</div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">drop()</span></code> メソッドを用いると、行のインデックスまたはラベルを指定することで行を削除することもできます。このときに、<code class=\"docutils literal notranslate\"><span class=\"pre\">axis</span></code> 引数は省略することができます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[22]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"c1\"># データフレームから行インデックス150の行を削除し、新しいデータフレームを作成</span>\n<span class=\"n\">myiris4</span> <span class=\"o\">=</span> <span class=\"n\">myiris4</span><span class=\"o\">.</span><span class=\"n\">drop</span><span class=\"p\">(</span><span class=\"mi\">150</span><span class=\"p\">)</span>\n<span class=\"n\">myiris4</span><span class=\"p\">[</span><span class=\"o\">-</span><span class=\"mi\">2</span><span class=\"p\">:]</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[22]:\n</pre></div>\n</div>\n<div class=\"output_area rendered_html docutils container\">\n<div>\n<style scoped>\n    .dataframe tbody tr th:only-of-type {\n        vertical-align: middle;\n    }\n\n    .dataframe tbody tr th {\n        vertical-align: top;\n    }\n\n    .dataframe thead th {\n        text-align: right;\n    }\n</style>\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th>sepal_length</th>\n      <th>sepal_width</th>\n      <th>petal_length</th>\n      <th>petal_width</th>\n      <th>species</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>148</th>\n      <td>6.2</td>\n      <td>3.4</td>\n      <td>5.4</td>\n      <td>2.3</td>\n      <td>virginica</td>\n    </tr>\n    <tr>\n      <th>149</th>\n      <td>5.9</td>\n      <td>3.0</td>\n      <td>5.1</td>\n      <td>1.8</td>\n      <td>virginica</td>\n    </tr>\n  </tbody>\n</table>\n</div></div>\n</div>\n</section>\n<section id=\"データの並び替え\">\n<h2>データの並び替え<a class=\"headerlink\" href=\"#データの並び替え\" title=\"Link to this heading\">¶</a></h2>\n<p>データフレームオブジェクトの <code class=\"docutils literal notranslate\"><span class=\"pre\">sort_index()</span></code> メソッドで、データフレームのインデックスに基づくソートができます。また、<code class=\"docutils literal notranslate\"><span class=\"pre\">sort_values()</span></code> メソッドで、任意の列の値によるソートができます。列は複数指定することもできます。いずれのメソッドでも、<code class=\"docutils literal notranslate\"><span class=\"pre\">inplace</span></code> 引数により、ソートにより新しいデータフレームを作成する (<code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code>) か、元のデータフレームを更新する (<code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code>) を指定できます。デフォルトは <code class=\"docutils literal notranslate\"><span class=\"pre\">inplace</span></code> は <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code> になっており、これらのメソッドは新しいデータフレームを作成します。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[23]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"c1\"># iris_dデータフレームの4つ列の値に基づいて昇順にソート</span>\n<span class=\"n\">sorted_iris</span> <span class=\"o\">=</span> <span class=\"n\">iris_d</span><span class=\"o\">.</span><span class=\"n\">sort_values</span><span class=\"p\">([</span><span class=\"s1\">&#39;sepal_length&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;sepal_width&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;petal_length&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;petal_width&#39;</span><span class=\"p\">])</span>\n<span class=\"n\">sorted_iris</span><span class=\"o\">.</span><span class=\"n\">head</span><span class=\"p\">(</span><span class=\"mi\">10</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[23]:\n</pre></div>\n</div>\n<div class=\"output_area rendered_html docutils container\">\n<div>\n<style scoped>\n    .dataframe tbody tr th:only-of-type {\n        vertical-align: middle;\n    }\n\n    .dataframe tbody tr th {\n        vertical-align: top;\n    }\n\n    .dataframe thead th {\n        text-align: right;\n    }\n</style>\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th>sepal_length</th>\n      <th>sepal_width</th>\n      <th>petal_length</th>\n      <th>petal_width</th>\n      <th>species</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>13</th>\n      <td>4.3</td>\n      <td>3.0</td>\n      <td>1.1</td>\n      <td>0.1</td>\n      <td>setosa</td>\n    </tr>\n    <tr>\n      <th>8</th>\n      <td>4.4</td>\n      <td>2.9</td>\n      <td>1.4</td>\n      <td>0.2</td>\n      <td>setosa</td>\n    </tr>\n    <tr>\n      <th>38</th>\n      <td>4.4</td>\n      <td>3.0</td>\n      <td>1.3</td>\n      <td>0.2</td>\n      <td>setosa</td>\n    </tr>\n    <tr>\n      <th>42</th>\n      <td>4.4</td>\n      <td>3.2</td>\n      <td>1.3</td>\n      <td>0.2</td>\n      <td>setosa</td>\n    </tr>\n    <tr>\n      <th>41</th>\n      <td>4.5</td>\n      <td>2.3</td>\n      <td>1.3</td>\n      <td>0.3</td>\n      <td>setosa</td>\n    </tr>\n    <tr>\n      <th>3</th>\n      <td>4.6</td>\n      <td>3.1</td>\n      <td>1.5</td>\n      <td>0.2</td>\n      <td>setosa</td>\n    </tr>\n    <tr>\n      <th>47</th>\n      <td>4.6</td>\n      <td>3.2</td>\n      <td>1.4</td>\n      <td>0.2</td>\n      <td>setosa</td>\n    </tr>\n    <tr>\n      <th>6</th>\n      <td>4.6</td>\n      <td>3.4</td>\n      <td>1.4</td>\n      <td>0.3</td>\n      <td>setosa</td>\n    </tr>\n    <tr>\n      <th>22</th>\n      <td>4.6</td>\n      <td>3.6</td>\n      <td>1.0</td>\n      <td>0.2</td>\n      <td>setosa</td>\n    </tr>\n    <tr>\n      <th>2</th>\n      <td>4.7</td>\n      <td>3.2</td>\n      <td>1.3</td>\n      <td>0.2</td>\n      <td>setosa</td>\n    </tr>\n  </tbody>\n</table>\n</div></div>\n</div>\n<p>列の値で降順にソートする場合は、<code class=\"docutils literal notranslate\"><span class=\"pre\">sort_values()</span></code> メソッドの <code class=\"docutils literal notranslate\"><span class=\"pre\">ascending</span></code> 引数を <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code> にしてください。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[24]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"c1\"># iris_dデータフレームの4つ列の値に基づいて降順にソート</span>\n<span class=\"n\">sorted_iris</span> <span class=\"o\">=</span> <span class=\"n\">iris_d</span><span class=\"o\">.</span><span class=\"n\">sort_values</span><span class=\"p\">([</span><span class=\"s1\">&#39;sepal_length&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;sepal_width&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;petal_length&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;petal_width&#39;</span><span class=\"p\">],</span><span class=\"n\">ascending</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n<span class=\"n\">sorted_iris</span><span class=\"o\">.</span><span class=\"n\">head</span><span class=\"p\">(</span><span class=\"mi\">10</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[24]:\n</pre></div>\n</div>\n<div class=\"output_area rendered_html docutils container\">\n<div>\n<style scoped>\n    .dataframe tbody tr th:only-of-type {\n        vertical-align: middle;\n    }\n\n    .dataframe tbody tr th {\n        vertical-align: top;\n    }\n\n    .dataframe thead th {\n        text-align: right;\n    }\n</style>\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th>sepal_length</th>\n      <th>sepal_width</th>\n      <th>petal_length</th>\n      <th>petal_width</th>\n      <th>species</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>131</th>\n      <td>7.9</td>\n      <td>3.8</td>\n      <td>6.4</td>\n      <td>2.0</td>\n      <td>virginica</td>\n    </tr>\n    <tr>\n      <th>117</th>\n      <td>7.7</td>\n      <td>3.8</td>\n      <td>6.7</td>\n      <td>2.2</td>\n      <td>virginica</td>\n    </tr>\n    <tr>\n      <th>135</th>\n      <td>7.7</td>\n      <td>3.0</td>\n      <td>6.1</td>\n      <td>2.3</td>\n      <td>virginica</td>\n    </tr>\n    <tr>\n      <th>122</th>\n      <td>7.7</td>\n      <td>2.8</td>\n      <td>6.7</td>\n      <td>2.0</td>\n      <td>virginica</td>\n    </tr>\n    <tr>\n      <th>118</th>\n      <td>7.7</td>\n      <td>2.6</td>\n      <td>6.9</td>\n      <td>2.3</td>\n      <td>virginica</td>\n    </tr>\n    <tr>\n      <th>105</th>\n      <td>7.6</td>\n      <td>3.0</td>\n      <td>6.6</td>\n      <td>2.1</td>\n      <td>virginica</td>\n    </tr>\n    <tr>\n      <th>130</th>\n      <td>7.4</td>\n      <td>2.8</td>\n      <td>6.1</td>\n      <td>1.9</td>\n      <td>virginica</td>\n    </tr>\n    <tr>\n      <th>107</th>\n      <td>7.3</td>\n      <td>2.9</td>\n      <td>6.3</td>\n      <td>1.8</td>\n      <td>virginica</td>\n    </tr>\n    <tr>\n      <th>109</th>\n      <td>7.2</td>\n      <td>3.6</td>\n      <td>6.1</td>\n      <td>2.5</td>\n      <td>virginica</td>\n    </tr>\n    <tr>\n      <th>125</th>\n      <td>7.2</td>\n      <td>3.2</td>\n      <td>6.0</td>\n      <td>1.8</td>\n      <td>virginica</td>\n    </tr>\n  </tbody>\n</table>\n</div></div>\n</div>\n</section>\n<section id=\"データの統計量\">\n<h2>データの統計量<a class=\"headerlink\" href=\"#データの統計量\" title=\"Link to this heading\">¶</a></h2>\n<p>データフレームオブジェクトの <code class=\"docutils literal notranslate\"><span class=\"pre\">describe()</span></code> メソッドで、データフレームの各列の要約統計量を求めることができます。要約統計量には平均、標準偏差、最大値、最小値などが含まれます。その他の統計量を求める <code class=\"docutils literal notranslate\"><span class=\"pre\">pandas</span></code> モジュールのメソッドは以下を参照してください。</p>\n<p><a class=\"reference external\" href=\"https://pandas.pydata.org/pandas-docs/stable/reference/frame.html#computations-descriptive-stats\">pandasでの統計量計算</a></p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[25]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"c1\"># iris_dデータフレームの各数値列の要約統計量を表示</span>\n<span class=\"n\">iris_d</span><span class=\"o\">.</span><span class=\"n\">describe</span><span class=\"p\">()</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[25]:\n</pre></div>\n</div>\n<div class=\"output_area rendered_html docutils container\">\n<div>\n<style scoped>\n    .dataframe tbody tr th:only-of-type {\n        vertical-align: middle;\n    }\n\n    .dataframe tbody tr th {\n        vertical-align: top;\n    }\n\n    .dataframe thead th {\n        text-align: right;\n    }\n</style>\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th>sepal_length</th>\n      <th>sepal_width</th>\n      <th>petal_length</th>\n      <th>petal_width</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>count</th>\n      <td>150.000000</td>\n      <td>150.000000</td>\n      <td>150.000000</td>\n      <td>150.000000</td>\n    </tr>\n    <tr>\n      <th>mean</th>\n      <td>5.843333</td>\n      <td>3.054000</td>\n      <td>3.758667</td>\n      <td>1.198667</td>\n    </tr>\n    <tr>\n      <th>std</th>\n      <td>0.828066</td>\n      <td>0.433594</td>\n      <td>1.764420</td>\n      <td>0.763161</td>\n    </tr>\n    <tr>\n      <th>min</th>\n      <td>4.300000</td>\n      <td>2.000000</td>\n      <td>1.000000</td>\n      <td>0.100000</td>\n    </tr>\n    <tr>\n      <th>25%</th>\n      <td>5.100000</td>\n      <td>2.800000</td>\n      <td>1.600000</td>\n      <td>0.300000</td>\n    </tr>\n    <tr>\n      <th>50%</th>\n      <td>5.800000</td>\n      <td>3.000000</td>\n      <td>4.350000</td>\n      <td>1.300000</td>\n    </tr>\n    <tr>\n      <th>75%</th>\n      <td>6.400000</td>\n      <td>3.300000</td>\n      <td>5.100000</td>\n      <td>1.800000</td>\n    </tr>\n    <tr>\n      <th>max</th>\n      <td>7.900000</td>\n      <td>4.400000</td>\n      <td>6.900000</td>\n      <td>2.500000</td>\n    </tr>\n  </tbody>\n</table>\n</div></div>\n</div>\n</section>\n<section id=\"▲データの連結\">\n<h2>▲データの連結<a class=\"headerlink\" href=\"#▲データの連結\" title=\"Link to this heading\">¶</a></h2>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">pandas</span></code> モジュールの <code class=\"docutils literal notranslate\"><span class=\"pre\">concat()</span></code> 関数を用いると、データフレームを連結して新たなデータフレームを作成することができます。以下では、<code class=\"docutils literal notranslate\"><span class=\"pre\">iris_d</span></code> データフレームの先頭5行と最終5行を連結して、新しいデータフレームを作成しています。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[26]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"c1\"># iris_dデータフレームの先頭5行と最終5行を連結</span>\n<span class=\"n\">concat_iris</span> <span class=\"o\">=</span> <span class=\"n\">pd</span><span class=\"o\">.</span><span class=\"n\">concat</span><span class=\"p\">([</span><span class=\"n\">iris_d</span><span class=\"p\">[:</span><span class=\"mi\">5</span><span class=\"p\">],</span><span class=\"n\">iris_d</span><span class=\"p\">[</span><span class=\"o\">-</span><span class=\"mi\">5</span><span class=\"p\">:]])</span>\n<span class=\"n\">concat_iris</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[26]:\n</pre></div>\n</div>\n<div class=\"output_area rendered_html docutils container\">\n<div>\n<style scoped>\n    .dataframe tbody tr th:only-of-type {\n        vertical-align: middle;\n    }\n\n    .dataframe tbody tr th {\n        vertical-align: top;\n    }\n\n    .dataframe thead th {\n        text-align: right;\n    }\n</style>\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th>sepal_length</th>\n      <th>sepal_width</th>\n      <th>petal_length</th>\n      <th>petal_width</th>\n      <th>species</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>0</th>\n      <td>5.1</td>\n      <td>3.5</td>\n      <td>1.4</td>\n      <td>0.2</td>\n      <td>setosa</td>\n    </tr>\n    <tr>\n      <th>1</th>\n      <td>4.9</td>\n      <td>3.0</td>\n      <td>1.4</td>\n      <td>0.2</td>\n      <td>setosa</td>\n    </tr>\n    <tr>\n      <th>2</th>\n      <td>4.7</td>\n      <td>3.2</td>\n      <td>1.3</td>\n      <td>0.2</td>\n      <td>setosa</td>\n    </tr>\n    <tr>\n      <th>3</th>\n      <td>4.6</td>\n      <td>3.1</td>\n      <td>1.5</td>\n      <td>0.2</td>\n      <td>setosa</td>\n    </tr>\n    <tr>\n      <th>4</th>\n      <td>5.0</td>\n      <td>3.6</td>\n      <td>1.4</td>\n      <td>0.2</td>\n      <td>setosa</td>\n    </tr>\n    <tr>\n      <th>145</th>\n      <td>6.7</td>\n      <td>3.0</td>\n      <td>5.2</td>\n      <td>2.3</td>\n      <td>virginica</td>\n    </tr>\n    <tr>\n      <th>146</th>\n      <td>6.3</td>\n      <td>2.5</td>\n      <td>5.0</td>\n      <td>1.9</td>\n      <td>virginica</td>\n    </tr>\n    <tr>\n      <th>147</th>\n      <td>6.5</td>\n      <td>3.0</td>\n      <td>5.2</td>\n      <td>2.0</td>\n      <td>virginica</td>\n    </tr>\n    <tr>\n      <th>148</th>\n      <td>6.2</td>\n      <td>3.4</td>\n      <td>5.4</td>\n      <td>2.3</td>\n      <td>virginica</td>\n    </tr>\n    <tr>\n      <th>149</th>\n      <td>5.9</td>\n      <td>3.0</td>\n      <td>5.1</td>\n      <td>1.8</td>\n      <td>virginica</td>\n    </tr>\n  </tbody>\n</table>\n</div></div>\n</div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">concat()</span></code> 関数の <code class=\"docutils literal notranslate\"><span class=\"pre\">axis</span></code> 引数に <code class=\"docutils literal notranslate\"><span class=\"pre\">1</span></code> を指定すると、以下のように、データフレームを列方向に連結することができます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[27]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"c1\"># iris_dデータフレームの&#39;sepal_length&#39;列と&#39;species&#39;列を連結</span>\n<span class=\"n\">sepal_len</span> <span class=\"o\">=</span> <span class=\"n\">pd</span><span class=\"o\">.</span><span class=\"n\">concat</span><span class=\"p\">([</span><span class=\"n\">iris_d</span><span class=\"o\">.</span><span class=\"n\">loc</span><span class=\"p\">[:,</span> <span class=\"p\">[</span><span class=\"s1\">&#39;sepal_length&#39;</span><span class=\"p\">]],</span><span class=\"n\">iris_d</span><span class=\"o\">.</span><span class=\"n\">loc</span><span class=\"p\">[:,</span> <span class=\"p\">[</span><span class=\"s1\">&#39;species&#39;</span><span class=\"p\">]]],</span> <span class=\"n\">axis</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n<span class=\"n\">sepal_len</span><span class=\"o\">.</span><span class=\"n\">head</span><span class=\"p\">(</span><span class=\"mi\">10</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[27]:\n</pre></div>\n</div>\n<div class=\"output_area rendered_html docutils container\">\n<div>\n<style scoped>\n    .dataframe tbody tr th:only-of-type {\n        vertical-align: middle;\n    }\n\n    .dataframe tbody tr th {\n        vertical-align: top;\n    }\n\n    .dataframe thead th {\n        text-align: right;\n    }\n</style>\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th>sepal_length</th>\n      <th>species</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>0</th>\n      <td>5.1</td>\n      <td>setosa</td>\n    </tr>\n    <tr>\n      <th>1</th>\n      <td>4.9</td>\n      <td>setosa</td>\n    </tr>\n    <tr>\n      <th>2</th>\n      <td>4.7</td>\n      <td>setosa</td>\n    </tr>\n    <tr>\n      <th>3</th>\n      <td>4.6</td>\n      <td>setosa</td>\n    </tr>\n    <tr>\n      <th>4</th>\n      <td>5.0</td>\n      <td>setosa</td>\n    </tr>\n    <tr>\n      <th>5</th>\n      <td>5.4</td>\n      <td>setosa</td>\n    </tr>\n    <tr>\n      <th>6</th>\n      <td>4.6</td>\n      <td>setosa</td>\n    </tr>\n    <tr>\n      <th>7</th>\n      <td>5.0</td>\n      <td>setosa</td>\n    </tr>\n    <tr>\n      <th>8</th>\n      <td>4.4</td>\n      <td>setosa</td>\n    </tr>\n    <tr>\n      <th>9</th>\n      <td>4.9</td>\n      <td>setosa</td>\n    </tr>\n  </tbody>\n</table>\n</div></div>\n</div>\n</section>\n<section id=\"▲データの結合\">\n<h2>▲データの結合<a class=\"headerlink\" href=\"#▲データの結合\" title=\"Link to this heading\">¶</a></h2>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">pandas</span></code> モジュールの <code class=\"docutils literal notranslate\"><span class=\"pre\">merge()</span></code> 関数を用いると、任意の列の値をキーとして異なるデータフレームを結合することができます。結合のキーとする列名は <code class=\"docutils literal notranslate\"><span class=\"pre\">on</span></code> 引数で指定します。以下では、<code class=\"docutils literal notranslate\"><span class=\"pre\">species</span></code> の列の値をキーに、2つのデータフレーム、<code class=\"docutils literal notranslate\"><span class=\"pre\">sepal_len</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">sepal_wid</span></code>、を結合して新しいデータフレーム <code class=\"docutils literal notranslate\"><span class=\"pre\">sepal</span></code> を作成しています。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[28]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"c1\"># &#39;sepal_length&#39;と&#39;species&#39;列からなる3行のデータ</span>\n<span class=\"n\">sepal_len</span> <span class=\"o\">=</span> <span class=\"n\">pd</span><span class=\"o\">.</span><span class=\"n\">concat</span><span class=\"p\">([</span><span class=\"n\">iris_d</span><span class=\"o\">.</span><span class=\"n\">loc</span><span class=\"p\">[[</span><span class=\"mi\">0</span><span class=\"p\">,</span><span class=\"mi\">51</span><span class=\"p\">,</span><span class=\"mi\">101</span><span class=\"p\">],[</span><span class=\"s1\">&#39;sepal_length&#39;</span><span class=\"p\">]],</span><span class=\"n\">iris_d</span><span class=\"o\">.</span><span class=\"n\">loc</span><span class=\"p\">[[</span><span class=\"mi\">0</span><span class=\"p\">,</span><span class=\"mi\">51</span><span class=\"p\">,</span><span class=\"mi\">101</span><span class=\"p\">],</span> <span class=\"p\">[</span><span class=\"s1\">&#39;species&#39;</span><span class=\"p\">]]],</span> <span class=\"n\">axis</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n<span class=\"c1\"># &#39;sepal_width&#39;と&#39;species&#39;列からなる3行のデータ</span>\n<span class=\"n\">sepal_wid</span> <span class=\"o\">=</span> <span class=\"n\">pd</span><span class=\"o\">.</span><span class=\"n\">concat</span><span class=\"p\">([</span><span class=\"n\">iris_d</span><span class=\"o\">.</span><span class=\"n\">loc</span><span class=\"p\">[[</span><span class=\"mi\">0</span><span class=\"p\">,</span><span class=\"mi\">51</span><span class=\"p\">,</span><span class=\"mi\">101</span><span class=\"p\">],[</span><span class=\"s1\">&#39;sepal_width&#39;</span><span class=\"p\">]],</span><span class=\"n\">iris_d</span><span class=\"o\">.</span><span class=\"n\">loc</span><span class=\"p\">[[</span><span class=\"mi\">0</span><span class=\"p\">,</span><span class=\"mi\">51</span><span class=\"p\">,</span><span class=\"mi\">101</span><span class=\"p\">],</span> <span class=\"p\">[</span><span class=\"s1\">&#39;species&#39;</span><span class=\"p\">]]],</span> <span class=\"n\">axis</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n\n<span class=\"c1\"># sepal_lenとsepal_widを&#39;species&#39;をキーにして結合</span>\n<span class=\"n\">sepal</span> <span class=\"o\">=</span> <span class=\"n\">pd</span><span class=\"o\">.</span><span class=\"n\">merge</span><span class=\"p\">(</span><span class=\"n\">sepal_len</span><span class=\"p\">,</span> <span class=\"n\">sepal_wid</span><span class=\"p\">,</span> <span class=\"n\">on</span><span class=\"o\">=</span><span class=\"s1\">&#39;species&#39;</span><span class=\"p\">)</span>\n<span class=\"n\">sepal</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[28]:\n</pre></div>\n</div>\n<div class=\"output_area rendered_html docutils container\">\n<div>\n<style scoped>\n    .dataframe tbody tr th:only-of-type {\n        vertical-align: middle;\n    }\n\n    .dataframe tbody tr th {\n        vertical-align: top;\n    }\n\n    .dataframe thead th {\n        text-align: right;\n    }\n</style>\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th>sepal_length</th>\n      <th>species</th>\n      <th>sepal_width</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>0</th>\n      <td>5.1</td>\n      <td>setosa</td>\n      <td>3.5</td>\n    </tr>\n    <tr>\n      <th>1</th>\n      <td>6.4</td>\n      <td>versicolor</td>\n      <td>3.2</td>\n    </tr>\n    <tr>\n      <th>2</th>\n      <td>5.8</td>\n      <td>virginica</td>\n      <td>2.7</td>\n    </tr>\n  </tbody>\n</table>\n</div></div>\n</div>\n</section>\n<section id=\"▲データのグループ化\">\n<h2>▲データのグループ化<a class=\"headerlink\" href=\"#▲データのグループ化\" title=\"Link to this heading\">¶</a></h2>\n<p>データフレームオブジェクトの <code class=\"docutils literal notranslate\"><span class=\"pre\">groupby()</span></code> メソッドを使うと、データフレームの任意の列の値に基づいて、同じ値を持つ行をグループにまとめることができます。列は複数指定することもできます。<code class=\"docutils literal notranslate\"><span class=\"pre\">groupby()</span></code> メソッドを適用するとグループ化オブジェクト (<code class=\"docutils literal notranslate\"><span class=\"pre\">DataFrameGroupBy</span></code>) が作成されますが、データフレームと同様の操作を多く適用することができます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[29]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"c1\"># iris_dデータフレームの&#39;species&#39;の値で行をグループ化</span>\n<span class=\"n\">iris_d</span><span class=\"o\">.</span><span class=\"n\">groupby</span><span class=\"p\">(</span><span class=\"s1\">&#39;species&#39;</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[29]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n&lt;pandas.core.groupby.generic.DataFrameGroupBy object at 0x1127a6030&gt;\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[30]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"c1\"># グループごとの先頭5行を表示</span>\n<span class=\"n\">iris_d</span><span class=\"o\">.</span><span class=\"n\">groupby</span><span class=\"p\">(</span><span class=\"s1\">&#39;species&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">head</span><span class=\"p\">(</span><span class=\"mi\">5</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[30]:\n</pre></div>\n</div>\n<div class=\"output_area rendered_html docutils container\">\n<div>\n<style scoped>\n    .dataframe tbody tr th:only-of-type {\n        vertical-align: middle;\n    }\n\n    .dataframe tbody tr th {\n        vertical-align: top;\n    }\n\n    .dataframe thead th {\n        text-align: right;\n    }\n</style>\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th>sepal_length</th>\n      <th>sepal_width</th>\n      <th>petal_length</th>\n      <th>petal_width</th>\n      <th>species</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>0</th>\n      <td>5.1</td>\n      <td>3.5</td>\n      <td>1.4</td>\n      <td>0.2</td>\n      <td>setosa</td>\n    </tr>\n    <tr>\n      <th>1</th>\n      <td>4.9</td>\n      <td>3.0</td>\n      <td>1.4</td>\n      <td>0.2</td>\n      <td>setosa</td>\n    </tr>\n    <tr>\n      <th>2</th>\n      <td>4.7</td>\n      <td>3.2</td>\n      <td>1.3</td>\n      <td>0.2</td>\n      <td>setosa</td>\n    </tr>\n    <tr>\n      <th>3</th>\n      <td>4.6</td>\n      <td>3.1</td>\n      <td>1.5</td>\n      <td>0.2</td>\n      <td>setosa</td>\n    </tr>\n    <tr>\n      <th>4</th>\n      <td>5.0</td>\n      <td>3.6</td>\n      <td>1.4</td>\n      <td>0.2</td>\n      <td>setosa</td>\n    </tr>\n    <tr>\n      <th>50</th>\n      <td>7.0</td>\n      <td>3.2</td>\n      <td>4.7</td>\n      <td>1.4</td>\n      <td>versicolor</td>\n    </tr>\n    <tr>\n      <th>51</th>\n      <td>6.4</td>\n      <td>3.2</td>\n      <td>4.5</td>\n      <td>1.5</td>\n      <td>versicolor</td>\n    </tr>\n    <tr>\n      <th>52</th>\n      <td>6.9</td>\n      <td>3.1</td>\n      <td>4.9</td>\n      <td>1.5</td>\n      <td>versicolor</td>\n    </tr>\n    <tr>\n      <th>53</th>\n      <td>5.5</td>\n      <td>2.3</td>\n      <td>4.0</td>\n      <td>1.3</td>\n      <td>versicolor</td>\n    </tr>\n    <tr>\n      <th>54</th>\n      <td>6.5</td>\n      <td>2.8</td>\n      <td>4.6</td>\n      <td>1.5</td>\n      <td>versicolor</td>\n    </tr>\n    <tr>\n      <th>100</th>\n      <td>6.3</td>\n      <td>3.3</td>\n      <td>6.0</td>\n      <td>2.5</td>\n      <td>virginica</td>\n    </tr>\n    <tr>\n      <th>101</th>\n      <td>5.8</td>\n      <td>2.7</td>\n      <td>5.1</td>\n      <td>1.9</td>\n      <td>virginica</td>\n    </tr>\n    <tr>\n      <th>102</th>\n      <td>7.1</td>\n      <td>3.0</td>\n      <td>5.9</td>\n      <td>2.1</td>\n      <td>virginica</td>\n    </tr>\n    <tr>\n      <th>103</th>\n      <td>6.3</td>\n      <td>2.9</td>\n      <td>5.6</td>\n      <td>1.8</td>\n      <td>virginica</td>\n    </tr>\n    <tr>\n      <th>104</th>\n      <td>6.5</td>\n      <td>3.0</td>\n      <td>5.8</td>\n      <td>2.2</td>\n      <td>virginica</td>\n    </tr>\n  </tbody>\n</table>\n</div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[31]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"c1\"># グループごとの&#39;sepal_length&#39;列,&#39;sepal_width&#39;列の値の平均を表示</span>\n<span class=\"n\">iris_d</span><span class=\"o\">.</span><span class=\"n\">groupby</span><span class=\"p\">(</span><span class=\"s1\">&#39;species&#39;</span><span class=\"p\">)[[</span><span class=\"s1\">&#39;sepal_length&#39;</span><span class=\"p\">,</span><span class=\"s1\">&#39;sepal_width&#39;</span><span class=\"p\">]]</span><span class=\"o\">.</span><span class=\"n\">mean</span><span class=\"p\">()</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[31]:\n</pre></div>\n</div>\n<div class=\"output_area rendered_html docutils container\">\n<div>\n<style scoped>\n    .dataframe tbody tr th:only-of-type {\n        vertical-align: middle;\n    }\n\n    .dataframe tbody tr th {\n        vertical-align: top;\n    }\n\n    .dataframe thead th {\n        text-align: right;\n    }\n</style>\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th>sepal_length</th>\n      <th>sepal_width</th>\n    </tr>\n    <tr>\n      <th>species</th>\n      <th></th>\n      <th></th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>setosa</th>\n      <td>5.006</td>\n      <td>3.418</td>\n    </tr>\n    <tr>\n      <th>versicolor</th>\n      <td>5.936</td>\n      <td>2.770</td>\n    </tr>\n    <tr>\n      <th>virginica</th>\n      <td>6.588</td>\n      <td>2.974</td>\n    </tr>\n  </tbody>\n</table>\n</div></div>\n</div>\n</section>\n<section id=\"▲欠損値、時系列データの処理\">\n<h2>▲欠損値、時系列データの処理<a class=\"headerlink\" href=\"#▲欠損値、時系列データの処理\" title=\"Link to this heading\">¶</a></h2>\n<p>pandasでは、データ分析における欠損値、時系列データの処理を支援するための便利な機能が提供されています。詳細は以下を参照してください。</p>\n<p><a class=\"reference external\" href=\"https://pandas.pydata.org/pandas-docs/stable/missing_data.html#missing-data\">欠損値の処理</a></p>\n<p><a class=\"reference external\" href=\"https://pandas.pydata.org/pandas-docs/stable/timeseries.html\">時系列データの処理</a></p>\n</section>\n</section>\n\n\n          </div>\n          \n        </div>\n      </div>\n      <div class=\"sphinxsidebar\" role=\"navigation\" aria-label=\"Main\">\n        <div class=\"sphinxsidebarwrapper\">\n<h1 class=\"logo\"><a href=\"../index.html\">Pythonプログラミング入門</a></h1>\n\n\n\n\n\n\n\n\n<p>\n  <a style=\"font-family: sans-serif; font-size: smaller; background: linear-gradient(to top, #353535 0%, #141414 100%); -webkit-font-smoothing: antialiased; font-weight: normal; text-shadow: rgb(0 0 0 / 40%) 0 -1px 0; padding: 2px 6px; color: #fff; text-decoration: none; border-radius: 4px; border: 1px solid #0d0d0d; box-shadow: inset 0 1px 1px 0 #8f8f8f;\" href=\"https://github.com/utokyo-ipp/utokyo-ipp.github.io\">View on GitHub</a>\n</p><p>\n  <a style=\"font-family: sans-serif; font-size: smaller; background: linear-gradient(to top, #ff1e00 0%, #de1e00 100%); -webkit-font-smoothing: antialiased; font-weight: normal; text-shadow: rgb(0 0 0 / 40%) 0 -1px 0; padding: 2px 6px; color: #fff; text-decoration: none; border-radius: 4px; border: 1px solid #0d0d0d; box-shadow: inset 0 1px 1px 0 #ff8e70;\" href=\"https://utokyo-ipp.github.io/IPP_textbook.pdf\">View PDF</a>\n</p><p>\n  <a style=\"border-bottom: none;\" href=\"https://colab.research.google.com/github/utokyo-ipp/utokyo-ipp.github.io/blob/master/colab/7/7-1.ipynb\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Google Colaboratory\"></a>\n</p><h3>Navigation</h3>\n<ul class=\"current\">\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../1/1-0.html\">1-0. Colaboratory (Colab) の使い方</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../1/1-1.html\">1-1. 数値演算</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../1/1-2.html\">1-2. 変数と関数の基礎</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../1/1-3.html\">1-3. 論理・比較演算と条件分岐の基礎</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../1/1-4.html\">1-4. テストとデバッグ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../2/2-1.html\">2-1. 文字列 (string)</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../2/2-2.html\">2-2. リスト (list)</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../2/2-3.html\">2-3. 条件分岐</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../3/3-1.html\">3-1. 辞書 (dictionary)</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../3/3-2.html\">3-2. 繰り返し</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../3/3-3.html\">3-3. 関数</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../4/4-1.html\">4-1. ファイル入出力の基本</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../4/4-2.html\">4-2. イテラブルとイテレータ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../4/4-3.html\">4-3. ディレクトリと木構造</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../5/5-1.html\">5-1. モジュールの使い方</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../5/5-2.html\">5-2. モジュールの作り方</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../5/5-3.html\">5-3. NumPyライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../6/6-1.html\">6-1. 内包表記</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../6/6-2.html\">6-2. 高階関数</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../6/6-3.html\">6-3. クラス</a></li>\n<li class=\"toctree-l1 current\"><a class=\"current reference internal\" href=\"#\">7-1. pandasライブラリ</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#シリーズとデータフレーム\">シリーズとデータフレーム</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#シリーズ-(Series)-の作成\">シリーズ (<code class=\"docutils literal notranslate\"><span class=\"pre\">Series</span></code>) の作成</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#データフレーム-(DataFrame)-の作成\">データフレーム (<code class=\"docutils literal notranslate\"><span class=\"pre\">DataFrame</span></code>) の作成</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#CSVファイルからのデータフレームの作成\">CSVファイルからのデータフレームの作成</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#データの参照\">データの参照</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#データの条件取り出し\">データの条件取り出し</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#列の追加と削除\">列の追加と削除</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#行の追加と削除\">行の追加と削除</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#データの並び替え\">データの並び替え</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#データの統計量\">データの統計量</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#▲データの連結\">▲データの連結</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#▲データの結合\">▲データの結合</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#▲データのグループ化\">▲データのグループ化</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#▲欠損値、時系列データの処理\">▲欠損値、時系列データの処理</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"7-2.html\">7-2. scikit-learnライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/1-jupyter-notebook.html\">▲Jupyter Notebook の使い方</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/2-set.html\">▲セット (set)</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/3-recursion.html\">▲再帰</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/3-visualization.html\">▲簡単なデータの可視化</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/4-csv.html\">▲CSVファイルの入出力</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/5-bokeh.html\">▲Bokehライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/5-command.html\">▲Pythonスクリプトとコマンドライン実行</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/5-matplotlib.html\">▲Matplotlibライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/5-re.html\">▲正規表現</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../index_of_terms.html\">索引</a></li>\n</ul>\n\n<div class=\"relations\">\n<h3>Related Topics</h3>\n<ul>\n  <li><a href=\"../index.html\">Documentation overview</a><ul>\n      <li>Previous: <a href=\"../6/6-3.html\" title=\"previous chapter\">6-3. クラス</a></li>\n      <li>Next: <a href=\"7-2.html\" title=\"next chapter\">7-2. scikit-learnライブラリ</a></li>\n  </ul></li>\n</ul>\n</div>\n<search id=\"searchbox\" style=\"display: none\" role=\"search\">\n  <h3 id=\"searchlabel\">Quick search</h3>\n    <div class=\"searchformwrapper\">\n    <form class=\"search\" action=\"../search.html\" method=\"get\">\n      <input type=\"text\" name=\"q\" aria-labelledby=\"searchlabel\" autocomplete=\"off\" autocorrect=\"off\" autocapitalize=\"off\" spellcheck=\"false\"/>\n      <input type=\"submit\" value=\"Go\" />\n    </form>\n    </div>\n</search>\n<script>document.getElementById('searchbox').style.display = \"block\"</script>\n\n\n\n\n\n\n\n\n        </div>\n      </div>\n      <div class=\"clearer\"></div>\n    </div>\n    <div class=\"footer\">\n      &#169;2020–2024, 東京大学 数理・情報教育研究センター (CC BY-NC-ND 4.0).\n      \n      |\n      Powered by <a href=\"https://www.sphinx-doc.org/\">Sphinx 8.0.2</a>\n      &amp; <a href=\"https://alabaster.readthedocs.io\">Alabaster 1.0.0</a>\n      \n    </div>\n\n    \n\n    \n    <script>\n\n      var _gaq = _gaq || [];\n      _gaq.push(['_setAccount', 'G-8M0RXGPPSR']);\n      _gaq.push(['_setDomainName', 'none']);\n      _gaq.push(['_setAllowLinker', true]);\n      _gaq.push(['_trackPageview']);\n\n      (function() {\n        var ga = document.createElement('script'); ga.async = true;\n        ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'https://www') + '.google-analytics.com/ga.js';\n        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);\n      })();\n\n    </script>\n    \n  </body>\n</html>"
  },
  {
    "path": "docs/7/7-2.html",
    "content": "<!DOCTYPE html>\n\n<html lang=\"jp\" data-content_root=\"../\">\n  <head>\n    <meta charset=\"utf-8\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" /><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n\n    <!-- Google tag (gtag.js) -->\n    <script async src=\"https://www.googletagmanager.com/gtag/js?id=G-8M0RXGPPSR\"></script>\n    <script>\n        window.dataLayer = window.dataLayer || [];\n        function gtag(){dataLayer.push(arguments);}\n        gtag('js', new Date());\n        gtag('config', 'G-8M0RXGPPSR');\n    </script>\n    \n    <title>7-2. scikit-learnライブラリ &#8212; Pythonプログラミング入門  documentation</title>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/pygments.css?v=d1102ebc\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/basic.css?v=c058f7c8\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/alabaster.css?v=27fed22d\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/nbsphinx-code-cells.css\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/custom.css?v=1a1aa8dd\" />\n    <script src=\"../_static/documentation_options.js?v=3ff7d7a7\"></script>\n    <script src=\"../_static/doctools.js?v=9a2dae69\"></script>\n    <script src=\"../_static/sphinx_highlight.js?v=dc90522c\"></script>\n    <script crossorigin=\"anonymous\" integrity=\"sha256-Ae2Vz/4ePdIu6ZyI/5ZGsYnb+m0JlOmKPjt6XZ9JJkA=\" src=\"https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.4/require.min.js\"></script>\n    <script>window.MathJax = {\"tex\": {\"inlineMath\": [[\"$\", \"$\"], [\"\\\\(\", \"\\\\)\"]], \"processEscapes\": true}, \"options\": {\"ignoreHtmlClass\": \"tex2jax_ignore|mathjax_ignore|document\", \"processHtmlClass\": \"tex2jax_process|mathjax_process|math|output_area\"}}</script>\n    <script defer=\"defer\" src=\"https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js\"></script>\n    <link rel=\"index\" title=\"Index\" href=\"../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../search.html\" />\n    <link rel=\"next\" title=\"▲Jupyter Notebook の使い方\" href=\"../appendix/1-jupyter-notebook.html\" />\n    <link rel=\"prev\" title=\"7-1. pandasライブラリ\" href=\"7-1.html\" />\n   \n  <link rel=\"stylesheet\" href=\"../_static/custom.css\" type=\"text/css\" />\n  \n\n  \n  \n\n  </head><body>\n  \n\n    <div class=\"document\">\n      <div class=\"documentwrapper\">\n        <div class=\"bodywrapper\">\n          \n\n          <div class=\"body\" role=\"main\">\n            \n  <section id=\"7-2.-scikit-learnライブラリ\">\n<h1>7-2. scikit-learnライブラリ<a class=\"headerlink\" href=\"#7-2.-scikit-learnライブラリ\" title=\"Link to this heading\">¶</a></h1>\n<p>scikit-learnライブラリについて説明します。</p>\n<p>参考</p>\n<ul class=\"simple\">\n<li><p><a class=\"reference external\" href=\"https://scikit-learn.org/stable/tutorial/index.html\">https://scikit-learn.org/stable/tutorial/index.html</a></p></li>\n<li><p><a class=\"reference external\" href=\"https://scikit-learn.org/stable/getting_started.html\">https://scikit-learn.org/stable/getting_started.html</a></p></li>\n</ul>\n<p>機械学習の各手法の詳細については以下を参考にしてください</p>\n<ul class=\"simple\">\n<li><p><a class=\"reference external\" href=\"https://elf-c.he.u-tokyo.ac.jp/courses/364\">https://elf-c.he.u-tokyo.ac.jp/courses/364</a> （線形回帰）</p></li>\n<li><p><a class=\"reference external\" href=\"https://elf-c.he.u-tokyo.ac.jp/courses/365\">https://elf-c.he.u-tokyo.ac.jp/courses/365</a> （ロジスティック回帰)</p></li>\n<li><p><a class=\"reference external\" href=\"https://elf-c.he.u-tokyo.ac.jp/courses/360\">https://elf-c.he.u-tokyo.ac.jp/courses/360</a> （クラスタリング）</p></li>\n<li><p><a class=\"reference external\" href=\"https://elf-c.he.u-tokyo.ac.jp/courses/363\">https://elf-c.he.u-tokyo.ac.jp/courses/363</a> （次元削減（主成分分析））</p></li>\n</ul>\n<p><strong>scikit-learn</strong>ライブラリには分類、回帰、クラスタリング、次元削減、前処理、モデル選択などの機械学習の処理を行うためのモジュールが含まれています。以下では、scikit-learnライブラリのモジュールの基本的な使い方について説明します。</p>\n<section id=\"機械学習について\">\n<h2>機械学習について<a class=\"headerlink\" href=\"#機械学習について\" title=\"Link to this heading\">¶</a></h2>\n<p><strong>機械学習</strong>では、観察されたデータをよく表すようにモデルのパラメータの調整を行います。パラメータを調整することでモデルをデータに適合させるので、「学習」と呼ばれます。学習されたモデルを使って、新たに観測されたデータに対して予測を行うことが可能になります。</p>\n</section>\n<section id=\"教師あり学習\">\n<h2>教師あり学習<a class=\"headerlink\" href=\"#教師あり学習\" title=\"Link to this heading\">¶</a></h2>\n<p>機械学習において、観測されたデータの特徴（特徴量）に対して、そのデータに関するラベルが存在する時、<strong>教師あり学習</strong>と呼びます。教師あり学習では、ラベルを教師として、データからそのラベルを予測するようなモデルを学習することになります。この時、ラベルが連続値であれば回帰、ラベルが離散値であれば分類の問題となります。</p>\n</section>\n<section id=\"教師なし学習\">\n<h2>教師なし学習<a class=\"headerlink\" href=\"#教師なし学習\" title=\"Link to this heading\">¶</a></h2>\n<p>ラベルが存在せず、観測されたデータの特徴のみからそのデータセットの構造やパターンをよく表すようなモデルを学習することを<strong>教師なし学習</strong>と呼びます。クラスタリングや次元削減は教師なし学習です。クラスタリングでは、観測されたデータをクラスタと呼ばれる集合にグループ分けします。次元削減では、データの特徴をより簡潔に（低い次元で）表現します。</p>\n</section>\n<section id=\"データ\">\n<h2>データ<a class=\"headerlink\" href=\"#データ\" title=\"Link to this heading\">¶</a></h2>\n<p>機械学習に用いるデータセットは、データフレームあるいは2次元の配列として表すことができます。行はデータセットの個々のデータを表し、列はデータが持つ特徴を表します。以下では、例として <code class=\"docutils literal notranslate\"><span class=\"pre\">pandas</span></code> モジュールの説明で用いたアイリスデータセットを表示しています。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[1]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"kn\">import</span> <span class=\"nn\">pandas</span> <span class=\"k\">as</span> <span class=\"nn\">pd</span>\n<span class=\"n\">iris</span> <span class=\"o\">=</span> <span class=\"n\">pd</span><span class=\"o\">.</span><span class=\"n\">read_csv</span><span class=\"p\">(</span><span class=\"s1\">&#39;iris.csv&#39;</span><span class=\"p\">)</span>\n<span class=\"n\">iris</span><span class=\"o\">.</span><span class=\"n\">head</span><span class=\"p\">(</span><span class=\"mi\">5</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[1]:\n</pre></div>\n</div>\n<div class=\"output_area rendered_html docutils container\">\n<div>\n<style scoped>\n    .dataframe tbody tr th:only-of-type {\n        vertical-align: middle;\n    }\n\n    .dataframe tbody tr th {\n        vertical-align: top;\n    }\n\n    .dataframe thead th {\n        text-align: right;\n    }\n</style>\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th>sepal_length</th>\n      <th>sepal_width</th>\n      <th>petal_length</th>\n      <th>petal_width</th>\n      <th>species</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>0</th>\n      <td>5.1</td>\n      <td>3.5</td>\n      <td>1.4</td>\n      <td>0.2</td>\n      <td>setosa</td>\n    </tr>\n    <tr>\n      <th>1</th>\n      <td>4.9</td>\n      <td>3.0</td>\n      <td>1.4</td>\n      <td>0.2</td>\n      <td>setosa</td>\n    </tr>\n    <tr>\n      <th>2</th>\n      <td>4.7</td>\n      <td>3.2</td>\n      <td>1.3</td>\n      <td>0.2</td>\n      <td>setosa</td>\n    </tr>\n    <tr>\n      <th>3</th>\n      <td>4.6</td>\n      <td>3.1</td>\n      <td>1.5</td>\n      <td>0.2</td>\n      <td>setosa</td>\n    </tr>\n    <tr>\n      <th>4</th>\n      <td>5.0</td>\n      <td>3.6</td>\n      <td>1.4</td>\n      <td>0.2</td>\n      <td>setosa</td>\n    </tr>\n  </tbody>\n</table>\n</div></div>\n</div>\n<p>データセットの各行は1つの花のデータに対応しており、行数はデータセットの花データの総数を表します。また、1列目から4列目までの各列は花の特徴（特徴量）に対応しています。scikit-learnでは、このデータと<strong>特徴量</strong>からなる2次元配列（行列）をNumPy配列または <code class=\"docutils literal notranslate\"><span class=\"pre\">pandas</span></code> のデータフレームに格納し、入力データとして処理します。5列目は、教師あり学習におけるデータのラベルに対応しており、ここでは各花データの花の種類（全部で3種類）を表しています。ラベルは通常1次元でデータの数だけの長さを持ち、NumPy配列または\n<code class=\"docutils literal notranslate\"><span class=\"pre\">pandas</span></code> のシリーズに格納します。先に述べた通り、ラベルが連続値であれば回帰、ラベルが離散値であれば分類の問題となります。機械学習では、特徴量からこのラベルを予測することになります。</p>\n<p>アイリスデータセットはscikit-learnが持つデータセットにも含まれており、<code class=\"docutils literal notranslate\"><span class=\"pre\">load_iris</span></code> 関数によりアイリスデータセットの特徴量データとラベルデータを以下のようにNumPyの配列として取得することもできます。この時、ラベルは数値 (<code class=\"docutils literal notranslate\"><span class=\"pre\">0</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">1</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">2</span></code>) に置き換えられています。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[2]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"kn\">from</span> <span class=\"nn\">sklearn.datasets</span> <span class=\"kn\">import</span> <span class=\"n\">load_iris</span>\n<span class=\"n\">iris</span> <span class=\"o\">=</span> <span class=\"n\">load_iris</span><span class=\"p\">()</span>\n<span class=\"n\">X_iris</span> <span class=\"o\">=</span> <span class=\"n\">iris</span><span class=\"o\">.</span><span class=\"n\">data</span>\n<span class=\"n\">y_iris</span> <span class=\"o\">=</span> <span class=\"n\">iris</span><span class=\"o\">.</span><span class=\"n\">target</span>\n</pre></div>\n</div>\n</div>\n</section>\n<section id=\"モデル学習の基礎\">\n<h2>モデル学習の基礎<a class=\"headerlink\" href=\"#モデル学習の基礎\" title=\"Link to this heading\">¶</a></h2>\n<p>scikit-learnでは、以下の手順でデータからモデルの学習を行います。</p>\n<ul class=\"simple\">\n<li><p>使用するモデルのクラスの選択</p></li>\n<li><p>モデルのハイパーパラメータの選択とインスタンス化</p></li>\n<li><p>データの準備</p>\n<ul>\n<li><p>教師あり学習では、特徴量データとラベルデータを準備</p></li>\n<li><p>教師あり学習では、特徴量・ラベルデータをモデル学習用の訓練データとモデル評価用のテストデータに分ける</p></li>\n<li><p>教師なし学習では、特徴量データを準備</p></li>\n</ul>\n</li>\n<li><p>モデルをデータに適合（<code class=\"docutils literal notranslate\"><span class=\"pre\">fit()</span></code> メソッド）</p></li>\n<li><p>モデルの評価</p>\n<ul>\n<li><p>教師あり学習では、<code class=\"docutils literal notranslate\"><span class=\"pre\">predict()</span></code> メソッドを用いてテストデータの特徴量データからラベルデータを予測しその精度の評価を行う</p></li>\n<li><p>教師なし学習では、<code class=\"docutils literal notranslate\"><span class=\"pre\">transform()</span></code> または <code class=\"docutils literal notranslate\"><span class=\"pre\">predict()</span></code> メソッドを用いて特徴量データのクラスタリングや次元削減などを行う</p></li>\n</ul>\n</li>\n</ul>\n</section>\n<section id=\"教師あり学習・分類の例\">\n<h2>教師あり学習・分類の例<a class=\"headerlink\" href=\"#教師あり学習・分類の例\" title=\"Link to this heading\">¶</a></h2>\n<p>以下では、アイリスデータセットを用いて花の4つの特徴から3つの花の種類を分類する手続きを示しています。scikit-learnでは、全てのモデルはPythonクラスとして実装されており、ここでは分類を行うモデルの1つである<strong>ロジスティック回帰</strong> (<code class=\"docutils literal notranslate\"><span class=\"pre\">LogisticRegression</span></code>) クラスをインポートしています。</p>\n<p><a class=\"reference external\" href=\"https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html\">LogisticRegressionクラス</a></p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">train_test_split()</span></code> はデータセットを訓練データとテストデータに分割するための関数、<code class=\"docutils literal notranslate\"><span class=\"pre\">accuracy_score()</span></code> はモデルの予測精度を評価するための関数です。</p>\n<p>特徴量データ (<code class=\"docutils literal notranslate\"><span class=\"pre\">X_irist</span></code>) とラベルデータ (<code class=\"docutils literal notranslate\"><span class=\"pre\">y_iris</span></code>) からなるデータセットを訓練データ (<code class=\"docutils literal notranslate\"><span class=\"pre\">X_train</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">y_train</span></code>) とテストデータ (<code class=\"docutils literal notranslate\"><span class=\"pre\">X_test</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">y_test</span></code>) に分割しています。ここでは、<code class=\"docutils literal notranslate\"><span class=\"pre\">train_test_split()</span></code> 関数の <code class=\"docutils literal notranslate\"><span class=\"pre\">test_size</span></code> 引数にデータセットの30%をテストデータとすることを指定しています。また、<code class=\"docutils literal notranslate\"><span class=\"pre\">stratify</span></code> 引数にラベルデータを指定することで、訓練データとテストデータ、それぞれでラベルの分布が同じになるようにしています。</p>\n<p>ロジスティック回帰クラスのインスタンスを作成し、<code class=\"docutils literal notranslate\"><span class=\"pre\">fit()</span></code> メソッドによりモデルを訓練データに適合させています。そして、<code class=\"docutils literal notranslate\"><span class=\"pre\">predict()</span></code> メソッドを用いてテストデータの特徴量データ (<code class=\"docutils literal notranslate\"><span class=\"pre\">X_test</span></code>) のラベルを予測し、<code class=\"docutils literal notranslate\"><span class=\"pre\">accuracy_score()</span></code> 関数で実際のラベルデータ (<code class=\"docutils literal notranslate\"><span class=\"pre\">y_test</span></code>) と比較して予測精度の評価を行なっています。97%の精度で花の4つの特徴から3つの花の種類を分類できていることがわかります。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[3]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"kn\">from</span> <span class=\"nn\">sklearn.linear_model</span> <span class=\"kn\">import</span> <span class=\"n\">LogisticRegression</span>\n<span class=\"kn\">from</span> <span class=\"nn\">sklearn.model_selection</span> <span class=\"kn\">import</span> <span class=\"n\">train_test_split</span>\n<span class=\"kn\">from</span> <span class=\"nn\">sklearn.metrics</span> <span class=\"kn\">import</span> <span class=\"n\">accuracy_score</span>\n<span class=\"kn\">from</span> <span class=\"nn\">sklearn.datasets</span> <span class=\"kn\">import</span> <span class=\"n\">load_iris</span>\n\n<span class=\"n\">iris</span> <span class=\"o\">=</span> <span class=\"n\">load_iris</span><span class=\"p\">()</span>\n<span class=\"n\">X_iris</span> <span class=\"o\">=</span> <span class=\"n\">iris</span><span class=\"o\">.</span><span class=\"n\">data</span> <span class=\"c1\"># 特徴量データ</span>\n<span class=\"n\">y_iris</span> <span class=\"o\">=</span> <span class=\"n\">iris</span><span class=\"o\">.</span><span class=\"n\">target</span> <span class=\"c1\"># ラベルデータ</span>\n\n<span class=\"c1\"># 訓練データとテストデータに分割</span>\n<span class=\"n\">X_train</span><span class=\"p\">,</span> <span class=\"n\">X_test</span><span class=\"p\">,</span> <span class=\"n\">y_train</span><span class=\"p\">,</span> <span class=\"n\">y_test</span> <span class=\"o\">=</span> <span class=\"n\">train_test_split</span><span class=\"p\">(</span><span class=\"n\">X_iris</span><span class=\"p\">,</span> <span class=\"n\">y_iris</span><span class=\"p\">,</span> <span class=\"n\">test_size</span><span class=\"o\">=</span><span class=\"mf\">0.3</span><span class=\"p\">,</span> <span class=\"n\">random_state</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"n\">stratify</span><span class=\"o\">=</span><span class=\"n\">y_iris</span><span class=\"p\">)</span>\n\n<span class=\"c1\"># ロジスティック回帰モデル：solver引数には最適化手法を指定</span>\n<span class=\"n\">model</span><span class=\"o\">=</span><span class=\"n\">LogisticRegression</span><span class=\"p\">(</span><span class=\"n\">solver</span><span class=\"o\">=</span><span class=\"s1\">&#39;lbfgs&#39;</span><span class=\"p\">)</span>\n\n<span class=\"n\">model</span><span class=\"o\">.</span><span class=\"n\">fit</span><span class=\"p\">(</span><span class=\"n\">X_train</span><span class=\"p\">,</span> <span class=\"n\">y_train</span><span class=\"p\">)</span> <span class=\"c1\"># モデルを訓練データに適合</span>\n<span class=\"n\">y_predicted</span><span class=\"o\">=</span><span class=\"n\">model</span><span class=\"o\">.</span><span class=\"n\">predict</span><span class=\"p\">(</span><span class=\"n\">X_test</span><span class=\"p\">)</span> <span class=\"c1\"># テストデータでラベルを予測</span>\n<span class=\"n\">accuracy_score</span><span class=\"p\">(</span><span class=\"n\">y_test</span><span class=\"p\">,</span> <span class=\"n\">y_predicted</span><span class=\"p\">)</span> <span class=\"c1\"># 予測精度（accuracy）の評価</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[3]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n0.9777777777777777\n</pre></div></div>\n</div>\n</section>\n<section id=\"練習\">\n<h2>練習<a class=\"headerlink\" href=\"#練習\" title=\"Link to this heading\">¶</a></h2>\n<p>アイリスデータセットの2つの特徴量、<code class=\"docutils literal notranslate\"><span class=\"pre\">petal_length</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">petal_width</span></code>、から2つの花の種類、<code class=\"docutils literal notranslate\"><span class=\"pre\">versicolor</span></code> か <code class=\"docutils literal notranslate\"><span class=\"pre\">virginica</span></code>、を予測するモデルをロジスティック回帰を用いて学習し、その予測精度を評価してください。以下では <code class=\"docutils literal notranslate\"><span class=\"pre\">pandas</span></code> データフレームの <code class=\"docutils literal notranslate\"><span class=\"pre\">values</span></code> 属性を用いてNumPy配列を取得しています。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[4]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"kn\">from</span> <span class=\"nn\">sklearn.linear_model</span> <span class=\"kn\">import</span> <span class=\"n\">LogisticRegression</span>\n<span class=\"kn\">from</span> <span class=\"nn\">sklearn.model_selection</span> <span class=\"kn\">import</span> <span class=\"n\">train_test_split</span>\n<span class=\"kn\">from</span> <span class=\"nn\">sklearn.metrics</span> <span class=\"kn\">import</span> <span class=\"n\">accuracy_score</span>\n\n<span class=\"n\">iris</span> <span class=\"o\">=</span> <span class=\"n\">pd</span><span class=\"o\">.</span><span class=\"n\">read_csv</span><span class=\"p\">(</span><span class=\"s1\">&#39;iris.csv&#39;</span><span class=\"p\">)</span>\n<span class=\"n\">iris2</span><span class=\"o\">=</span><span class=\"n\">iris</span><span class=\"p\">[(</span><span class=\"n\">iris</span><span class=\"p\">[</span><span class=\"s1\">&#39;species&#39;</span><span class=\"p\">]</span><span class=\"o\">==</span><span class=\"s1\">&#39;versicolor&#39;</span><span class=\"p\">)</span><span class=\"o\">|</span><span class=\"p\">(</span><span class=\"n\">iris</span><span class=\"p\">[</span><span class=\"s1\">&#39;species&#39;</span><span class=\"p\">]</span><span class=\"o\">==</span><span class=\"s1\">&#39;virginica&#39;</span><span class=\"p\">)]</span>\n<span class=\"n\">X_iris</span><span class=\"o\">=</span><span class=\"n\">iris2</span><span class=\"p\">[[</span><span class=\"s1\">&#39;petal_length&#39;</span><span class=\"p\">,</span><span class=\"s1\">&#39;petal_width&#39;</span><span class=\"p\">]]</span><span class=\"o\">.</span><span class=\"n\">values</span>\n<span class=\"n\">y_iris</span><span class=\"o\">=</span><span class=\"n\">iris2</span><span class=\"p\">[</span><span class=\"s1\">&#39;species&#39;</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">values</span>\n\n<span class=\"c1\">###  your code here</span>\n</pre></div>\n</div>\n</div>\n<p>上記のコードが完成したら、以下のコードを実行して、2つの特徴量、<code class=\"docutils literal notranslate\"><span class=\"pre\">petal_length</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">petal_width</span></code>、から2つの花の種類、<code class=\"docutils literal notranslate\"><span class=\"pre\">versicolor</span></code> か <code class=\"docutils literal notranslate\"><span class=\"pre\">virginica</span></code>、を分類するための決定境界を可視化してみてください。<code class=\"docutils literal notranslate\"><span class=\"pre\">model</span></code> は上記の練習で学習されたモデルとします。決定境界は、学習の結果得られた、特徴量の空間においてラベル（クラス）間を分離する境界を表しています。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[5]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"kn\">import</span> <span class=\"nn\">numpy</span> <span class=\"k\">as</span> <span class=\"nn\">np</span>\n<span class=\"kn\">import</span> <span class=\"nn\">matplotlib.pyplot</span> <span class=\"k\">as</span> <span class=\"nn\">plt</span>\n<span class=\"o\">%</span><span class=\"k\">matplotlib</span> inline\n\n<span class=\"n\">w2</span> <span class=\"o\">=</span> <span class=\"n\">model</span><span class=\"o\">.</span><span class=\"n\">coef_</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">,</span><span class=\"mi\">1</span><span class=\"p\">]</span>\n<span class=\"n\">w1</span> <span class=\"o\">=</span> <span class=\"n\">model</span><span class=\"o\">.</span><span class=\"n\">coef_</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">,</span><span class=\"mi\">0</span><span class=\"p\">]</span>\n<span class=\"n\">w0</span> <span class=\"o\">=</span> <span class=\"n\">model</span><span class=\"o\">.</span><span class=\"n\">intercept_</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]</span>\n\n<span class=\"n\">line</span><span class=\"o\">=</span><span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">linspace</span><span class=\"p\">(</span><span class=\"mi\">3</span><span class=\"p\">,</span><span class=\"mi\">7</span><span class=\"p\">)</span>\n<span class=\"n\">plt</span><span class=\"o\">.</span><span class=\"n\">plot</span><span class=\"p\">(</span><span class=\"n\">line</span><span class=\"p\">,</span> <span class=\"o\">-</span><span class=\"p\">(</span><span class=\"n\">w1</span><span class=\"o\">*</span><span class=\"n\">line</span><span class=\"o\">+</span><span class=\"n\">w0</span><span class=\"p\">)</span><span class=\"o\">/</span><span class=\"n\">w2</span><span class=\"p\">)</span>\n<span class=\"n\">y_c</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"n\">y_iris</span><span class=\"o\">==</span><span class=\"s1\">&#39;versicolor&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">astype</span><span class=\"p\">(</span><span class=\"nb\">int</span><span class=\"p\">)</span>\n<span class=\"n\">plt</span><span class=\"o\">.</span><span class=\"n\">scatter</span><span class=\"p\">(</span><span class=\"n\">iris2</span><span class=\"p\">[</span><span class=\"s1\">&#39;petal_length&#39;</span><span class=\"p\">],</span><span class=\"n\">iris2</span><span class=\"p\">[</span><span class=\"s1\">&#39;petal_width&#39;</span><span class=\"p\">],</span><span class=\"n\">c</span><span class=\"o\">=</span><span class=\"n\">y_c</span><span class=\"p\">);</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<img alt=\"../_images/7_7-2_14_0.png\" src=\"../_images/7_7-2_14_0.png\" />\n</div>\n</div>\n</section>\n<section id=\"教師あり学習・回帰の例\">\n<h2>教師あり学習・回帰の例<a class=\"headerlink\" href=\"#教師あり学習・回帰の例\" title=\"Link to this heading\">¶</a></h2>\n<p>以下では、アイリスデータセットを用いて花の特徴の1つ、<code class=\"docutils literal notranslate\"><span class=\"pre\">petal_length</span></code>、からもう1つの特徴、<code class=\"docutils literal notranslate\"><span class=\"pre\">petal_width</span></code>、を回帰する手続きを示しています。この時、<code class=\"docutils literal notranslate\"><span class=\"pre\">petal_length</span></code> は特徴量、<code class=\"docutils literal notranslate\"><span class=\"pre\">petal_width</span></code> は連続値のラベルとなっています。まず、<code class=\"docutils literal notranslate\"><span class=\"pre\">matplotlib</span></code> の散布図を用いて <code class=\"docutils literal notranslate\"><span class=\"pre\">petal_length</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">petal_width</span></code> の関係を可視化してみましょう。関係があるといえそうでしょうか。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[6]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">iris</span> <span class=\"o\">=</span> <span class=\"n\">pd</span><span class=\"o\">.</span><span class=\"n\">read_csv</span><span class=\"p\">(</span><span class=\"s1\">&#39;iris.csv&#39;</span><span class=\"p\">)</span>\n<span class=\"n\">X</span><span class=\"o\">=</span><span class=\"n\">iris</span><span class=\"p\">[[</span><span class=\"s1\">&#39;petal_length&#39;</span><span class=\"p\">]]</span><span class=\"o\">.</span><span class=\"n\">values</span>\n<span class=\"n\">y</span><span class=\"o\">=</span><span class=\"n\">iris</span><span class=\"p\">[</span><span class=\"s1\">&#39;petal_width&#39;</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">values</span>\n<span class=\"n\">plt</span><span class=\"o\">.</span><span class=\"n\">scatter</span><span class=\"p\">(</span><span class=\"n\">X</span><span class=\"p\">,</span><span class=\"n\">y</span><span class=\"p\">);</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<img alt=\"../_images/7_7-2_16_0.png\" src=\"../_images/7_7-2_16_0.png\" />\n</div>\n</div>\n<p>次に、回帰を行うモデルの1つである<strong>線形回帰</strong> (<code class=\"docutils literal notranslate\"><span class=\"pre\">LinearRegression</span></code>) クラスをインポートしています。</p>\n<p><a class=\"reference external\" href=\"https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LinearRegression.html\">LinearRegressionクラス</a></p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">mean_squared_error()</span></code> は平均二乗誤差によりモデルの予測精度を評価するための関数です。</p>\n<p>データセットを訓練データ (<code class=\"docutils literal notranslate\"><span class=\"pre\">X_train</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">y_train</span></code>) とテストデータ (<code class=\"docutils literal notranslate\"><span class=\"pre\">X_test</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">y_test</span></code>) に分割し、線形回帰クラスのインスタンスの <code class=\"docutils literal notranslate\"><span class=\"pre\">fit()</span></code> メソッドによりモデルを訓練データに適合させています。そして、<code class=\"docutils literal notranslate\"><span class=\"pre\">predict()</span></code> メソッドを用いてテストデータの <code class=\"docutils literal notranslate\"><span class=\"pre\">petal_length</span></code> の値から <code class=\"docutils literal notranslate\"><span class=\"pre\">petal_width</span></code> の値を予測し、<code class=\"docutils literal notranslate\"><span class=\"pre\">mean_squared_error()</span></code> 関数で実際の <code class=\"docutils literal notranslate\"><span class=\"pre\">petal_widthの値</span></code> (<code class=\"docutils literal notranslate\"><span class=\"pre\">y_test</span></code>) と比較して予測精度の評価を行なっています。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[7]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"kn\">from</span> <span class=\"nn\">sklearn.linear_model</span> <span class=\"kn\">import</span> <span class=\"n\">LinearRegression</span>\n<span class=\"kn\">from</span> <span class=\"nn\">sklearn.metrics</span> <span class=\"kn\">import</span> <span class=\"n\">mean_squared_error</span>\n\n<span class=\"c1\"># 訓練データとテストデータに分割</span>\n<span class=\"n\">X_train</span><span class=\"p\">,</span> <span class=\"n\">X_test</span><span class=\"p\">,</span> <span class=\"n\">y_train</span><span class=\"p\">,</span> <span class=\"n\">y_test</span> <span class=\"o\">=</span> <span class=\"n\">train_test_split</span><span class=\"p\">(</span><span class=\"n\">X</span><span class=\"p\">,</span> <span class=\"n\">y</span><span class=\"p\">,</span> <span class=\"n\">test_size</span><span class=\"o\">=</span><span class=\"mf\">0.3</span><span class=\"p\">,</span> <span class=\"n\">random_state</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n\n<span class=\"n\">model</span><span class=\"o\">=</span><span class=\"n\">LinearRegression</span><span class=\"p\">()</span> <span class=\"c1\"># 線形回帰モデル</span>\n<span class=\"n\">model</span><span class=\"o\">.</span><span class=\"n\">fit</span><span class=\"p\">(</span><span class=\"n\">X_train</span><span class=\"p\">,</span><span class=\"n\">y_train</span><span class=\"p\">)</span> <span class=\"c1\"># モデルを訓練データに適合</span>\n<span class=\"n\">y_predicted</span><span class=\"o\">=</span><span class=\"n\">model</span><span class=\"o\">.</span><span class=\"n\">predict</span><span class=\"p\">(</span><span class=\"n\">X_test</span><span class=\"p\">)</span> <span class=\"c1\"># テストデータで予測</span>\n<span class=\"n\">mean_squared_error</span><span class=\"p\">(</span><span class=\"n\">y_test</span><span class=\"p\">,</span><span class=\"n\">y_predicted</span><span class=\"p\">)</span> <span class=\"c1\"># 予測精度（平均二乗誤差）の評価</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[7]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nnp.float64(0.03974445760904273)\n</pre></div></div>\n</div>\n<p>以下では、線形回帰モデルにより学習された <code class=\"docutils literal notranslate\"><span class=\"pre\">petal_length</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">petal_width</span></code> の関係を表す回帰式を可視化しています。学習された回帰式が実際のデータに適合していることがわかります。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[8]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">x_plot</span><span class=\"o\">=</span><span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">linspace</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">,</span><span class=\"mi\">7</span><span class=\"p\">)</span>\n<span class=\"n\">X_plot</span><span class=\"o\">=</span><span class=\"n\">x_plot</span><span class=\"p\">[:,</span><span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">newaxis</span><span class=\"p\">]</span>\n<span class=\"n\">y_plot</span><span class=\"o\">=</span><span class=\"n\">model</span><span class=\"o\">.</span><span class=\"n\">predict</span><span class=\"p\">(</span><span class=\"n\">X_plot</span><span class=\"p\">)</span>\n<span class=\"n\">plt</span><span class=\"o\">.</span><span class=\"n\">scatter</span><span class=\"p\">(</span><span class=\"n\">X</span><span class=\"p\">,</span><span class=\"n\">y</span><span class=\"p\">)</span>\n<span class=\"n\">plt</span><span class=\"o\">.</span><span class=\"n\">plot</span><span class=\"p\">(</span><span class=\"n\">x_plot</span><span class=\"p\">,</span><span class=\"n\">y_plot</span><span class=\"p\">);</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<img alt=\"../_images/7_7-2_20_0.png\" src=\"../_images/7_7-2_20_0.png\" />\n</div>\n</div>\n</section>\n<section id=\"教師なし学習・クラスタリングの例\">\n<h2>教師なし学習・クラスタリングの例<a class=\"headerlink\" href=\"#教師なし学習・クラスタリングの例\" title=\"Link to this heading\">¶</a></h2>\n<p>以下では、アイリスデータセットを用いて花の2つの特徴量、<code class=\"docutils literal notranslate\"><span class=\"pre\">petal_lenghとpetal_width</span></code>、を元に花のデータをクラスタリングする手続きを示しています。ここでは<strong>クラスタリング</strong>を行うモデルの1つである <code class=\"docutils literal notranslate\"><span class=\"pre\">KMeans</span></code> クラスをインポートしています。</p>\n<p><a class=\"reference external\" href=\"https://scikit-learn.org/stable/modules/generated/sklearn.cluster.KMeans.html\">KMeansクラス</a></p>\n<p>特徴量データ (<code class=\"docutils literal notranslate\"><span class=\"pre\">X_irist</span></code>) を用意し、引数 <code class=\"docutils literal notranslate\"><span class=\"pre\">n_clusters</span></code> にハイパーパラメータとしてクラスタ数、ここでは <code class=\"docutils literal notranslate\"><span class=\"pre\">3</span></code>、を指定して <code class=\"docutils literal notranslate\"><span class=\"pre\">KMeans</span></code> クラスのインスタンスを作成しています。そして、<code class=\"docutils literal notranslate\"><span class=\"pre\">fit()</span></code> メソッドによりモデルをデータに適合させ、<code class=\"docutils literal notranslate\"><span class=\"pre\">predict()</span></code> メソッドを用いて各データが所属するクラスタの情報 (<code class=\"docutils literal notranslate\"><span class=\"pre\">y_km</span></code>) を取得しています。</p>\n<p>学習された各花データのクラスタ情報を元のデータセットのデータフレームに列として追加し、クラスタごとに異なる色でデータセットを可視化しています。2つの特徴量、<code class=\"docutils literal notranslate\"><span class=\"pre\">petal_lengh</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">petal_width</span></code>、に基づき、3つのクラスタが得られていることがわかります。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[9]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"kn\">from</span> <span class=\"nn\">sklearn.cluster</span> <span class=\"kn\">import</span> <span class=\"n\">KMeans</span>\n\n<span class=\"n\">iris</span> <span class=\"o\">=</span> <span class=\"n\">pd</span><span class=\"o\">.</span><span class=\"n\">read_csv</span><span class=\"p\">(</span><span class=\"s1\">&#39;iris.csv&#39;</span><span class=\"p\">)</span>\n<span class=\"n\">X_iris</span><span class=\"o\">=</span><span class=\"n\">iris</span><span class=\"p\">[[</span><span class=\"s1\">&#39;petal_length&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;petal_width&#39;</span><span class=\"p\">]]</span><span class=\"o\">.</span><span class=\"n\">values</span>\n\n<span class=\"n\">model</span> <span class=\"o\">=</span> <span class=\"n\">KMeans</span><span class=\"p\">(</span><span class=\"n\">n_clusters</span><span class=\"o\">=</span><span class=\"mi\">3</span><span class=\"p\">)</span> <span class=\"c1\"># k-meansモデル</span>\n<span class=\"n\">model</span><span class=\"o\">.</span><span class=\"n\">fit</span><span class=\"p\">(</span><span class=\"n\">X_iris</span><span class=\"p\">)</span> <span class=\"c1\"># モデルをデータに適合</span>\n<span class=\"n\">y_km</span><span class=\"o\">=</span><span class=\"n\">model</span><span class=\"o\">.</span><span class=\"n\">predict</span><span class=\"p\">(</span><span class=\"n\">X_iris</span><span class=\"p\">)</span> <span class=\"c1\"># クラスタを予測</span>\n\n<span class=\"n\">iris</span><span class=\"p\">[</span><span class=\"s1\">&#39;cluster&#39;</span><span class=\"p\">]</span><span class=\"o\">=</span><span class=\"n\">y_km</span>\n<span class=\"n\">iris</span><span class=\"o\">.</span><span class=\"n\">plot</span><span class=\"o\">.</span><span class=\"n\">scatter</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"o\">=</span><span class=\"s1\">&#39;petal_length&#39;</span><span class=\"p\">,</span> <span class=\"n\">y</span><span class=\"o\">=</span><span class=\"s1\">&#39;petal_width&#39;</span><span class=\"p\">,</span> <span class=\"n\">c</span><span class=\"o\">=</span><span class=\"s1\">&#39;cluster&#39;</span><span class=\"p\">,</span> <span class=\"n\">colormap</span><span class=\"o\">=</span><span class=\"s1\">&#39;viridis&#39;</span><span class=\"p\">);</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<img alt=\"../_images/7_7-2_22_0.png\" src=\"../_images/7_7-2_22_0.png\" />\n</div>\n</div>\n<p>3つのクラスタと3つの花の種類の分布を2つの特徴量、<code class=\"docutils literal notranslate\"><span class=\"pre\">petal_lengh</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">petal_width</span></code>、の空間で比較してみると、クラスタと花の種類には対応があり、2つの特徴量から花の種類をクラスタとしてグループ分けできていることがわかります。以下では可視化に <code class=\"docutils literal notranslate\"><span class=\"pre\">seaborn</span></code> モジュールを用いています。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[10]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"kn\">import</span> <span class=\"nn\">seaborn</span> <span class=\"k\">as</span> <span class=\"nn\">sns</span>\n<span class=\"n\">sns</span><span class=\"o\">.</span><span class=\"n\">lmplot</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"o\">=</span><span class=\"s1\">&#39;petal_length&#39;</span><span class=\"p\">,</span><span class=\"n\">y</span><span class=\"o\">=</span><span class=\"s1\">&#39;petal_width&#39;</span><span class=\"p\">,</span><span class=\"n\">hue</span><span class=\"o\">=</span><span class=\"s1\">&#39;cluster&#39;</span><span class=\"p\">,</span><span class=\"n\">data</span><span class=\"o\">=</span><span class=\"n\">iris</span><span class=\"p\">,</span><span class=\"n\">fit_reg</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">);</span>\n<span class=\"n\">sns</span><span class=\"o\">.</span><span class=\"n\">lmplot</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"o\">=</span><span class=\"s1\">&#39;petal_length&#39;</span><span class=\"p\">,</span><span class=\"n\">y</span><span class=\"o\">=</span><span class=\"s1\">&#39;petal_width&#39;</span><span class=\"p\">,</span><span class=\"n\">hue</span><span class=\"o\">=</span><span class=\"s1\">&#39;species&#39;</span><span class=\"p\">,</span><span class=\"n\">data</span><span class=\"o\">=</span><span class=\"n\">iris</span><span class=\"p\">,</span><span class=\"n\">fit_reg</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">);</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<img alt=\"../_images/7_7-2_24_0.png\" src=\"../_images/7_7-2_24_0.png\" />\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<img alt=\"../_images/7_7-2_24_1.png\" src=\"../_images/7_7-2_24_1.png\" />\n</div>\n</div>\n</section>\n<section id=\"id10\">\n<h2>練習<a class=\"headerlink\" href=\"#id10\" title=\"Link to this heading\">¶</a></h2>\n<p>アイリスデータセットの2つの特徴量、<code class=\"docutils literal notranslate\"><span class=\"pre\">sepal_length</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">sepal_width</span></code>、を元に、<code class=\"docutils literal notranslate\"><span class=\"pre\">KMeans</span></code> モデルを用いて花のデータをクラスタリングしてください。クラスタの数は任意に設定してください。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[11]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"kn\">from</span> <span class=\"nn\">sklearn.cluster</span> <span class=\"kn\">import</span> <span class=\"n\">KMeans</span>\n<span class=\"kn\">import</span> <span class=\"nn\">pandas</span> <span class=\"k\">as</span> <span class=\"nn\">pd</span>\n<span class=\"kn\">import</span> <span class=\"nn\">matplotlib.pyplot</span> <span class=\"k\">as</span> <span class=\"nn\">plt</span>\n<span class=\"o\">%</span><span class=\"k\">matplotlib</span> inline\n\n<span class=\"n\">iris</span> <span class=\"o\">=</span> <span class=\"n\">pd</span><span class=\"o\">.</span><span class=\"n\">read_csv</span><span class=\"p\">(</span><span class=\"s1\">&#39;iris.csv&#39;</span><span class=\"p\">)</span>\n<span class=\"n\">X_iris</span><span class=\"o\">=</span><span class=\"n\">iris</span><span class=\"p\">[[</span><span class=\"s1\">&#39;sepal_length&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;sepal_width&#39;</span><span class=\"p\">]]</span><span class=\"o\">.</span><span class=\"n\">values</span>\n\n<span class=\"c1\">### your code here</span>\n</pre></div>\n</div>\n</div>\n</section>\n<section id=\"教師なし学習・次元削減の例\">\n<h2>教師なし学習・次元削減の例<a class=\"headerlink\" href=\"#教師なし学習・次元削減の例\" title=\"Link to this heading\">¶</a></h2>\n<p>以下では、アイリスデータセットを用いて花の4つの特徴量を元に花のデータを<strong>次元削減</strong>する手続きを示しています。ここでは次元削減を行うモデルの1つである <code class=\"docutils literal notranslate\"><span class=\"pre\">PCA</span></code> クラスをインポートしています。</p>\n<p><a class=\"reference external\" href=\"https://scikit-learn.org/stable/modules/generated/sklearn.decomposition.PCA.html\">PCAクラス</a></p>\n<p>特徴量データ (<code class=\"docutils literal notranslate\"><span class=\"pre\">X_irist</span></code>) を用意し、引数 <code class=\"docutils literal notranslate\"><span class=\"pre\">n_components</span></code> にハイパーパラメータとして削減後の次元数、ここでは <code class=\"docutils literal notranslate\"><span class=\"pre\">2</span></code>、を指定して <code class=\"docutils literal notranslate\"><span class=\"pre\">PCA</span></code> クラスのインスタンスを作成しています。そして、<code class=\"docutils literal notranslate\"><span class=\"pre\">fit()</span></code> メソッドによりモデルをデータに適合させ、<code class=\"docutils literal notranslate\"><span class=\"pre\">transform()</span></code> メソッドを用いて4つの特徴量を2次元に削減した特徴量データ (<code class=\"docutils literal notranslate\"><span class=\"pre\">X_2d</span></code>) を取得しています。</p>\n<p>学習された各次元の値を元のデータセットのデータフレームに列として追加し、データセットを削減して得られた次元の空間において、データセットを花の種類ごとに異なる色で可視化しています。削減された次元の空間において、花の種類をグループ分けできていることがわかります。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[12]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"kn\">from</span> <span class=\"nn\">sklearn.decomposition</span> <span class=\"kn\">import</span> <span class=\"n\">PCA</span>\n\n<span class=\"n\">iris</span> <span class=\"o\">=</span> <span class=\"n\">pd</span><span class=\"o\">.</span><span class=\"n\">read_csv</span><span class=\"p\">(</span><span class=\"s1\">&#39;iris.csv&#39;</span><span class=\"p\">)</span>\n<span class=\"n\">X_iris</span><span class=\"o\">=</span><span class=\"n\">iris</span><span class=\"p\">[[</span><span class=\"s1\">&#39;sepal_length&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;sepal_width&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;petal_length&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;petal_width&#39;</span><span class=\"p\">]]</span><span class=\"o\">.</span><span class=\"n\">values</span>\n\n<span class=\"n\">model</span> <span class=\"o\">=</span> <span class=\"n\">PCA</span><span class=\"p\">(</span><span class=\"n\">n_components</span><span class=\"o\">=</span><span class=\"mi\">2</span><span class=\"p\">)</span> <span class=\"c1\"># PCAモデル</span>\n<span class=\"n\">model</span><span class=\"o\">.</span><span class=\"n\">fit</span><span class=\"p\">(</span><span class=\"n\">X_iris</span><span class=\"p\">)</span> <span class=\"c1\"># モデルをデータに適合</span>\n<span class=\"n\">X_2d</span><span class=\"o\">=</span><span class=\"n\">model</span><span class=\"o\">.</span><span class=\"n\">transform</span><span class=\"p\">(</span><span class=\"n\">X_iris</span><span class=\"p\">)</span> <span class=\"c1\"># 次元削減</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[13]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"kn\">import</span> <span class=\"nn\">seaborn</span> <span class=\"k\">as</span> <span class=\"nn\">sns</span>\n<span class=\"n\">iris</span><span class=\"p\">[</span><span class=\"s1\">&#39;pca1&#39;</span><span class=\"p\">]</span><span class=\"o\">=</span><span class=\"n\">X_2d</span><span class=\"p\">[:,</span><span class=\"mi\">0</span><span class=\"p\">]</span>\n<span class=\"n\">iris</span><span class=\"p\">[</span><span class=\"s1\">&#39;pca2&#39;</span><span class=\"p\">]</span><span class=\"o\">=</span><span class=\"n\">X_2d</span><span class=\"p\">[:,</span><span class=\"mi\">1</span><span class=\"p\">]</span>\n<span class=\"n\">sns</span><span class=\"o\">.</span><span class=\"n\">lmplot</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"o\">=</span><span class=\"s1\">&#39;pca1&#39;</span><span class=\"p\">,</span><span class=\"n\">y</span><span class=\"o\">=</span><span class=\"s1\">&#39;pca2&#39;</span><span class=\"p\">,</span><span class=\"n\">hue</span><span class=\"o\">=</span><span class=\"s1\">&#39;species&#39;</span><span class=\"p\">,</span><span class=\"n\">data</span><span class=\"o\">=</span><span class=\"n\">iris</span><span class=\"p\">,</span><span class=\"n\">fit_reg</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">);</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<img alt=\"../_images/7_7-2_29_0.png\" src=\"../_images/7_7-2_29_0.png\" />\n</div>\n</div>\n</section>\n<section id=\"練習の解答例\">\n<h2>練習の解答例<a class=\"headerlink\" href=\"#練習の解答例\" title=\"Link to this heading\">¶</a></h2>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[14]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"kn\">from</span> <span class=\"nn\">sklearn.linear_model</span> <span class=\"kn\">import</span> <span class=\"n\">LogisticRegression</span>\n<span class=\"kn\">from</span> <span class=\"nn\">sklearn.model_selection</span> <span class=\"kn\">import</span> <span class=\"n\">train_test_split</span>\n<span class=\"kn\">from</span> <span class=\"nn\">sklearn.metrics</span> <span class=\"kn\">import</span> <span class=\"n\">accuracy_score</span>\n\n<span class=\"n\">iris</span> <span class=\"o\">=</span> <span class=\"n\">pd</span><span class=\"o\">.</span><span class=\"n\">read_csv</span><span class=\"p\">(</span><span class=\"s1\">&#39;iris.csv&#39;</span><span class=\"p\">)</span>\n<span class=\"n\">iris2</span><span class=\"o\">=</span><span class=\"n\">iris</span><span class=\"p\">[(</span><span class=\"n\">iris</span><span class=\"p\">[</span><span class=\"s1\">&#39;species&#39;</span><span class=\"p\">]</span><span class=\"o\">==</span><span class=\"s1\">&#39;versicolor&#39;</span><span class=\"p\">)</span><span class=\"o\">|</span><span class=\"p\">(</span><span class=\"n\">iris</span><span class=\"p\">[</span><span class=\"s1\">&#39;species&#39;</span><span class=\"p\">]</span><span class=\"o\">==</span><span class=\"s1\">&#39;virginica&#39;</span><span class=\"p\">)]</span>\n<span class=\"n\">X_iris</span><span class=\"o\">=</span><span class=\"n\">iris2</span><span class=\"p\">[[</span><span class=\"s1\">&#39;petal_length&#39;</span><span class=\"p\">,</span><span class=\"s1\">&#39;petal_width&#39;</span><span class=\"p\">]]</span><span class=\"o\">.</span><span class=\"n\">values</span>\n<span class=\"n\">y_iris</span><span class=\"o\">=</span><span class=\"n\">iris2</span><span class=\"p\">[</span><span class=\"s1\">&#39;species&#39;</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">values</span>\n\n<span class=\"n\">X_train</span><span class=\"p\">,</span> <span class=\"n\">X_test</span><span class=\"p\">,</span> <span class=\"n\">y_train</span><span class=\"p\">,</span> <span class=\"n\">y_test</span> <span class=\"o\">=</span> <span class=\"n\">train_test_split</span><span class=\"p\">(</span><span class=\"n\">X_iris</span><span class=\"p\">,</span> <span class=\"n\">y_iris</span><span class=\"p\">,</span> <span class=\"n\">test_size</span><span class=\"o\">=</span><span class=\"mf\">0.3</span><span class=\"p\">,</span> <span class=\"n\">random_state</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"n\">stratify</span><span class=\"o\">=</span><span class=\"n\">y_iris</span><span class=\"p\">)</span>\n\n<span class=\"n\">model</span><span class=\"o\">=</span><span class=\"n\">LogisticRegression</span><span class=\"p\">(</span><span class=\"n\">solver</span><span class=\"o\">=</span><span class=\"s1\">&#39;lbfgs&#39;</span><span class=\"p\">)</span>\n<span class=\"n\">model</span><span class=\"o\">.</span><span class=\"n\">fit</span><span class=\"p\">(</span><span class=\"n\">X_train</span><span class=\"p\">,</span> <span class=\"n\">y_train</span><span class=\"p\">)</span>\n<span class=\"n\">y_model</span><span class=\"o\">=</span><span class=\"n\">model</span><span class=\"o\">.</span><span class=\"n\">predict</span><span class=\"p\">(</span><span class=\"n\">X_test</span><span class=\"p\">)</span>\n<span class=\"n\">accuracy_score</span><span class=\"p\">(</span><span class=\"n\">y_test</span><span class=\"p\">,</span> <span class=\"n\">y_model</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[14]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n0.9666666666666667\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[15]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"kn\">from</span> <span class=\"nn\">sklearn.cluster</span> <span class=\"kn\">import</span> <span class=\"n\">KMeans</span>\n<span class=\"kn\">import</span> <span class=\"nn\">pandas</span> <span class=\"k\">as</span> <span class=\"nn\">pd</span>\n<span class=\"kn\">import</span> <span class=\"nn\">matplotlib.pyplot</span> <span class=\"k\">as</span> <span class=\"nn\">plt</span>\n<span class=\"o\">%</span><span class=\"k\">matplotlib</span> inline\n\n<span class=\"n\">iris</span> <span class=\"o\">=</span> <span class=\"n\">pd</span><span class=\"o\">.</span><span class=\"n\">read_csv</span><span class=\"p\">(</span><span class=\"s1\">&#39;iris.csv&#39;</span><span class=\"p\">)</span>\n<span class=\"n\">X_iris</span><span class=\"o\">=</span><span class=\"n\">iris</span><span class=\"p\">[[</span><span class=\"s1\">&#39;sepal_length&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;sepal_width&#39;</span><span class=\"p\">]]</span><span class=\"o\">.</span><span class=\"n\">values</span>\n\n<span class=\"n\">model</span> <span class=\"o\">=</span> <span class=\"n\">KMeans</span><span class=\"p\">(</span><span class=\"n\">n_clusters</span><span class=\"o\">=</span><span class=\"mi\">3</span><span class=\"p\">)</span>\n<span class=\"n\">model</span><span class=\"o\">.</span><span class=\"n\">fit</span><span class=\"p\">(</span><span class=\"n\">X_iris</span><span class=\"p\">)</span>\n<span class=\"n\">y_km</span><span class=\"o\">=</span><span class=\"n\">model</span><span class=\"o\">.</span><span class=\"n\">predict</span><span class=\"p\">(</span><span class=\"n\">X_iris</span><span class=\"p\">)</span>\n\n<span class=\"n\">iris</span><span class=\"p\">[</span><span class=\"s1\">&#39;cluster&#39;</span><span class=\"p\">]</span><span class=\"o\">=</span><span class=\"n\">y_km</span>\n<span class=\"n\">iris</span><span class=\"o\">.</span><span class=\"n\">plot</span><span class=\"o\">.</span><span class=\"n\">scatter</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"o\">=</span><span class=\"s1\">&#39;sepal_length&#39;</span><span class=\"p\">,</span> <span class=\"n\">y</span><span class=\"o\">=</span><span class=\"s1\">&#39;sepal_width&#39;</span><span class=\"p\">,</span> <span class=\"n\">c</span><span class=\"o\">=</span><span class=\"s1\">&#39;cluster&#39;</span><span class=\"p\">,</span> <span class=\"n\">colormap</span><span class=\"o\">=</span><span class=\"s1\">&#39;viridis&#39;</span><span class=\"p\">);</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<img alt=\"../_images/7_7-2_32_0.png\" src=\"../_images/7_7-2_32_0.png\" />\n</div>\n</div>\n</section>\n</section>\n\n\n          </div>\n          \n        </div>\n      </div>\n      <div class=\"sphinxsidebar\" role=\"navigation\" aria-label=\"Main\">\n        <div class=\"sphinxsidebarwrapper\">\n<h1 class=\"logo\"><a href=\"../index.html\">Pythonプログラミング入門</a></h1>\n\n\n\n\n\n\n\n\n<p>\n  <a style=\"font-family: sans-serif; font-size: smaller; background: linear-gradient(to top, #353535 0%, #141414 100%); -webkit-font-smoothing: antialiased; font-weight: normal; text-shadow: rgb(0 0 0 / 40%) 0 -1px 0; padding: 2px 6px; color: #fff; text-decoration: none; border-radius: 4px; border: 1px solid #0d0d0d; box-shadow: inset 0 1px 1px 0 #8f8f8f;\" href=\"https://github.com/utokyo-ipp/utokyo-ipp.github.io\">View on GitHub</a>\n</p><p>\n  <a style=\"font-family: sans-serif; font-size: smaller; background: linear-gradient(to top, #ff1e00 0%, #de1e00 100%); -webkit-font-smoothing: antialiased; font-weight: normal; text-shadow: rgb(0 0 0 / 40%) 0 -1px 0; padding: 2px 6px; color: #fff; text-decoration: none; border-radius: 4px; border: 1px solid #0d0d0d; box-shadow: inset 0 1px 1px 0 #ff8e70;\" href=\"https://utokyo-ipp.github.io/IPP_textbook.pdf\">View PDF</a>\n</p><p>\n  <a style=\"border-bottom: none;\" href=\"https://colab.research.google.com/github/utokyo-ipp/utokyo-ipp.github.io/blob/master/colab/7/7-2.ipynb\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Google Colaboratory\"></a>\n</p><h3>Navigation</h3>\n<ul class=\"current\">\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../1/1-0.html\">1-0. Colaboratory (Colab) の使い方</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../1/1-1.html\">1-1. 数値演算</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../1/1-2.html\">1-2. 変数と関数の基礎</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../1/1-3.html\">1-3. 論理・比較演算と条件分岐の基礎</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../1/1-4.html\">1-4. テストとデバッグ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../2/2-1.html\">2-1. 文字列 (string)</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../2/2-2.html\">2-2. リスト (list)</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../2/2-3.html\">2-3. 条件分岐</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../3/3-1.html\">3-1. 辞書 (dictionary)</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../3/3-2.html\">3-2. 繰り返し</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../3/3-3.html\">3-3. 関数</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../4/4-1.html\">4-1. ファイル入出力の基本</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../4/4-2.html\">4-2. イテラブルとイテレータ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../4/4-3.html\">4-3. ディレクトリと木構造</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../5/5-1.html\">5-1. モジュールの使い方</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../5/5-2.html\">5-2. モジュールの作り方</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../5/5-3.html\">5-3. NumPyライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../6/6-1.html\">6-1. 内包表記</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../6/6-2.html\">6-2. 高階関数</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../6/6-3.html\">6-3. クラス</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"7-1.html\">7-1. pandasライブラリ</a></li>\n<li class=\"toctree-l1 current\"><a class=\"current reference internal\" href=\"#\">7-2. scikit-learnライブラリ</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#機械学習について\">機械学習について</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#教師あり学習\">教師あり学習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#教師なし学習\">教師なし学習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#データ\">データ</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#モデル学習の基礎\">モデル学習の基礎</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#教師あり学習・分類の例\">教師あり学習・分類の例</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#練習\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#教師あり学習・回帰の例\">教師あり学習・回帰の例</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#教師なし学習・クラスタリングの例\">教師なし学習・クラスタリングの例</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#id10\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#教師なし学習・次元削減の例\">教師なし学習・次元削減の例</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#練習の解答例\">練習の解答例</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/1-jupyter-notebook.html\">▲Jupyter Notebook の使い方</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/2-set.html\">▲セット (set)</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/3-recursion.html\">▲再帰</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/3-visualization.html\">▲簡単なデータの可視化</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/4-csv.html\">▲CSVファイルの入出力</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/5-bokeh.html\">▲Bokehライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/5-command.html\">▲Pythonスクリプトとコマンドライン実行</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/5-matplotlib.html\">▲Matplotlibライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../appendix/5-re.html\">▲正規表現</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../index_of_terms.html\">索引</a></li>\n</ul>\n\n<div class=\"relations\">\n<h3>Related Topics</h3>\n<ul>\n  <li><a href=\"../index.html\">Documentation overview</a><ul>\n      <li>Previous: <a href=\"7-1.html\" title=\"previous chapter\">7-1. pandasライブラリ</a></li>\n      <li>Next: <a href=\"../appendix/1-jupyter-notebook.html\" title=\"next chapter\">▲Jupyter Notebook の使い方</a></li>\n  </ul></li>\n</ul>\n</div>\n<search id=\"searchbox\" style=\"display: none\" role=\"search\">\n  <h3 id=\"searchlabel\">Quick search</h3>\n    <div class=\"searchformwrapper\">\n    <form class=\"search\" action=\"../search.html\" method=\"get\">\n      <input type=\"text\" name=\"q\" aria-labelledby=\"searchlabel\" autocomplete=\"off\" autocorrect=\"off\" autocapitalize=\"off\" spellcheck=\"false\"/>\n      <input type=\"submit\" value=\"Go\" />\n    </form>\n    </div>\n</search>\n<script>document.getElementById('searchbox').style.display = \"block\"</script>\n\n\n\n\n\n\n\n\n        </div>\n      </div>\n      <div class=\"clearer\"></div>\n    </div>\n    <div class=\"footer\">\n      &#169;2020–2024, 東京大学 数理・情報教育研究センター (CC BY-NC-ND 4.0).\n      \n      |\n      Powered by <a href=\"https://www.sphinx-doc.org/\">Sphinx 8.0.2</a>\n      &amp; <a href=\"https://alabaster.readthedocs.io\">Alabaster 1.0.0</a>\n      \n    </div>\n\n    \n\n    \n    <script>\n\n      var _gaq = _gaq || [];\n      _gaq.push(['_setAccount', 'G-8M0RXGPPSR']);\n      _gaq.push(['_setDomainName', 'none']);\n      _gaq.push(['_setAllowLinker', true]);\n      _gaq.push(['_trackPageview']);\n\n      (function() {\n        var ga = document.createElement('script'); ga.async = true;\n        ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'https://www') + '.google-analytics.com/ga.js';\n        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);\n      })();\n\n    </script>\n    \n  </body>\n</html>"
  },
  {
    "path": "docs/_static/alabaster.css",
    "content": "/* -- page layout ----------------------------------------------------------- */\n\nbody {\n    font-family: Georgia, serif;\n    font-size: 17px;\n    background-color: #fff;\n    color: #000;\n    margin: 0;\n    padding: 0;\n}\n\n\ndiv.document {\n    width: 940px;\n    margin: 30px auto 0 auto;\n}\n\ndiv.documentwrapper {\n    float: left;\n    width: 100%;\n}\n\ndiv.bodywrapper {\n    margin: 0 0 0 220px;\n}\n\ndiv.sphinxsidebar {\n    width: 220px;\n    font-size: 14px;\n    line-height: 1.5;\n}\n\nhr {\n    border: 1px solid #B1B4B6;\n}\n\ndiv.body {\n    background-color: #fff;\n    color: #3E4349;\n    padding: 0 30px 0 30px;\n}\n\ndiv.body > .section {\n    text-align: left;\n}\n\ndiv.footer {\n    width: 940px;\n    margin: 20px auto 30px auto;\n    font-size: 14px;\n    color: #888;\n    text-align: right;\n}\n\ndiv.footer a {\n    color: #888;\n}\n\np.caption {\n    font-family: inherit;\n    font-size: inherit;\n}\n\n\ndiv.relations {\n    display: none;\n}\n\n\ndiv.sphinxsidebar {\n    max-height: 100%;\n    overflow-y: auto;\n}\n\ndiv.sphinxsidebar a {\n    color: #444;\n    text-decoration: none;\n    border-bottom: 1px dotted #999;\n}\n\ndiv.sphinxsidebar a:hover {\n    border-bottom: 1px solid #999;\n}\n\ndiv.sphinxsidebarwrapper {\n    padding: 18px 10px;\n}\n\ndiv.sphinxsidebarwrapper p.logo {\n    padding: 0;\n    margin: -10px 0 0 0px;\n    text-align: center;\n}\n\ndiv.sphinxsidebarwrapper h1.logo {\n    margin-top: -10px;\n    text-align: center;\n    margin-bottom: 5px;\n    text-align: left;\n}\n\ndiv.sphinxsidebarwrapper h1.logo-name {\n    margin-top: 0px;\n}\n\ndiv.sphinxsidebarwrapper p.blurb {\n    margin-top: 0;\n    font-style: normal;\n}\n\ndiv.sphinxsidebar h3,\ndiv.sphinxsidebar h4 {\n    font-family: Georgia, serif;\n    color: #444;\n    font-size: 24px;\n    font-weight: normal;\n    margin: 0 0 5px 0;\n    padding: 0;\n}\n\ndiv.sphinxsidebar h4 {\n    font-size: 20px;\n}\n\ndiv.sphinxsidebar h3 a {\n    color: #444;\n}\n\ndiv.sphinxsidebar p.logo a,\ndiv.sphinxsidebar h3 a,\ndiv.sphinxsidebar p.logo a:hover,\ndiv.sphinxsidebar h3 a:hover {\n    border: none;\n}\n\ndiv.sphinxsidebar p {\n    color: #555;\n    margin: 10px 0;\n}\n\ndiv.sphinxsidebar ul {\n    margin: 10px 0;\n    padding: 0;\n    color: #000;\n}\n\ndiv.sphinxsidebar ul li.toctree-l1 > a {\n    font-size: 120%;\n}\n\ndiv.sphinxsidebar ul li.toctree-l2 > a {\n    font-size: 110%;\n}\n\ndiv.sphinxsidebar input {\n    border: 1px solid #CCC;\n    font-family: Georgia, serif;\n    font-size: 1em;\n}\n\ndiv.sphinxsidebar #searchbox {\n    margin: 1em 0;\n}\n\ndiv.sphinxsidebar .search > div {\n    display: table-cell;\n}\n\ndiv.sphinxsidebar hr {\n    border: none;\n    height: 1px;\n    color: #AAA;\n    background: #AAA;\n\n    text-align: left;\n    margin-left: 0;\n    width: 50%;\n}\n\ndiv.sphinxsidebar .badge {\n    border-bottom: none;\n}\n\ndiv.sphinxsidebar .badge:hover {\n    border-bottom: none;\n}\n\n/* To address an issue with donation coming after search */\ndiv.sphinxsidebar h3.donation {\n    margin-top: 10px;\n}\n\n/* -- body styles ----------------------------------------------------------- */\n\na {\n    color: #004B6B;\n    text-decoration: underline;\n}\n\na:hover {\n    color: #6D4100;\n    text-decoration: underline;\n}\n\ndiv.body h1,\ndiv.body h2,\ndiv.body h3,\ndiv.body h4,\ndiv.body h5,\ndiv.body h6 {\n    font-family: Georgia, serif;\n    font-weight: normal;\n    margin: 30px 0px 10px 0px;\n    padding: 0;\n}\n\ndiv.body h1 { margin-top: 0; padding-top: 0; font-size: 240%; }\ndiv.body h2 { font-size: 180%; }\ndiv.body h3 { font-size: 150%; }\ndiv.body h4 { font-size: 130%; }\ndiv.body h5 { font-size: 100%; }\ndiv.body h6 { font-size: 100%; }\n\na.headerlink {\n    color: #DDD;\n    padding: 0 4px;\n    text-decoration: none;\n}\n\na.headerlink:hover {\n    color: #444;\n    background: #EAEAEA;\n}\n\ndiv.body p, div.body dd, div.body li {\n    line-height: 1.4em;\n}\n\ndiv.admonition {\n    margin: 20px 0px;\n    padding: 10px 30px;\n    background-color: #EEE;\n    border: 1px solid #CCC;\n}\n\ndiv.admonition tt.xref, div.admonition code.xref, div.admonition a tt {\n    background-color: #FBFBFB;\n    border-bottom: 1px solid #fafafa;\n}\n\ndiv.admonition p.admonition-title {\n    font-family: Georgia, serif;\n    font-weight: normal;\n    font-size: 24px;\n    margin: 0 0 10px 0;\n    padding: 0;\n    line-height: 1;\n}\n\ndiv.admonition p.last {\n    margin-bottom: 0;\n}\n\ndt:target, .highlight {\n    background: #FAF3E8;\n}\n\ndiv.warning {\n    background-color: #FCC;\n    border: 1px solid #FAA;\n}\n\ndiv.danger {\n    background-color: #FCC;\n    border: 1px solid #FAA;\n    -moz-box-shadow: 2px 2px 4px #D52C2C;\n    -webkit-box-shadow: 2px 2px 4px #D52C2C;\n    box-shadow: 2px 2px 4px #D52C2C;\n}\n\ndiv.error {\n    background-color: #FCC;\n    border: 1px solid #FAA;\n    -moz-box-shadow: 2px 2px 4px #D52C2C;\n    -webkit-box-shadow: 2px 2px 4px #D52C2C;\n    box-shadow: 2px 2px 4px #D52C2C;\n}\n\ndiv.caution {\n    background-color: #FCC;\n    border: 1px solid #FAA;\n}\n\ndiv.attention {\n    background-color: #FCC;\n    border: 1px solid #FAA;\n}\n\ndiv.important {\n    background-color: #EEE;\n    border: 1px solid #CCC;\n}\n\ndiv.note {\n    background-color: #EEE;\n    border: 1px solid #CCC;\n}\n\ndiv.tip {\n    background-color: #EEE;\n    border: 1px solid #CCC;\n}\n\ndiv.hint {\n    background-color: #EEE;\n    border: 1px solid #CCC;\n}\n\ndiv.seealso {\n    background-color: #EEE;\n    border: 1px solid #CCC;\n}\n\ndiv.topic {\n    background-color: #EEE;\n}\n\np.admonition-title {\n    display: inline;\n}\n\np.admonition-title:after {\n    content: \":\";\n}\n\npre, tt, code {\n    font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace;\n    font-size: 0.9em;\n}\n\n.hll {\n    background-color: #FFC;\n    margin: 0 -12px;\n    padding: 0 12px;\n    display: block;\n}\n\nimg.screenshot {\n}\n\ntt.descname, tt.descclassname, code.descname, code.descclassname {\n    font-size: 0.95em;\n}\n\ntt.descname, code.descname {\n    padding-right: 0.08em;\n}\n\nimg.screenshot {\n    -moz-box-shadow: 2px 2px 4px #EEE;\n    -webkit-box-shadow: 2px 2px 4px #EEE;\n    box-shadow: 2px 2px 4px #EEE;\n}\n\ntable.docutils {\n    border: 1px solid #888;\n    -moz-box-shadow: 2px 2px 4px #EEE;\n    -webkit-box-shadow: 2px 2px 4px #EEE;\n    box-shadow: 2px 2px 4px #EEE;\n}\n\ntable.docutils td, table.docutils th {\n    border: 1px solid #888;\n    padding: 0.25em 0.7em;\n}\n\ntable.field-list, table.footnote {\n    border: none;\n    -moz-box-shadow: none;\n    -webkit-box-shadow: none;\n    box-shadow: none;\n}\n\ntable.footnote {\n    margin: 15px 0;\n    width: 100%;\n    border: 1px solid #EEE;\n    background: #FDFDFD;\n    font-size: 0.9em;\n}\n\ntable.footnote + table.footnote {\n    margin-top: -15px;\n    border-top: none;\n}\n\ntable.field-list th {\n    padding: 0 0.8em 0 0;\n}\n\ntable.field-list td {\n    padding: 0;\n}\n\ntable.field-list p {\n    margin-bottom: 0.8em;\n}\n\n/* Cloned from\n * https://github.com/sphinx-doc/sphinx/commit/ef60dbfce09286b20b7385333d63a60321784e68\n */\n.field-name {\n    -moz-hyphens: manual;\n    -ms-hyphens: manual;\n    -webkit-hyphens: manual;\n    hyphens: manual;\n}\n\ntable.footnote td.label {\n    width: .1px;\n    padding: 0.3em 0 0.3em 0.5em;\n}\n\ntable.footnote td {\n    padding: 0.3em 0.5em;\n}\n\ndl {\n    margin-left: 0;\n    margin-right: 0;\n    margin-top: 0;\n    padding: 0;\n}\n\ndl dd {\n    margin-left: 30px;\n}\n\nblockquote {\n    margin: 0 0 0 30px;\n    padding: 0;\n}\n\nul, ol {\n    /* Matches the 30px from the narrow-screen \"li > ul\" selector below */\n    margin: 10px 0 10px 30px;\n    padding: 0;\n}\n\npre {\n    background: unset;\n    padding: 7px 30px;\n    margin: 15px 0px;\n    line-height: 1.3em;\n}\n\ndiv.viewcode-block:target {\n    background: #ffd;\n}\n\ndl pre, blockquote pre, li pre {\n    margin-left: 0;\n    padding-left: 30px;\n}\n\ntt, code {\n    background-color: #ecf0f3;\n    color: #222;\n    /* padding: 1px 2px; */\n}\n\ntt.xref, code.xref, a tt {\n    background-color: #FBFBFB;\n    border-bottom: 1px solid #fff;\n}\n\na.reference {\n    text-decoration: none;\n    border-bottom: 1px dotted #004B6B;\n}\n\na.reference:hover {\n    border-bottom: 1px solid #6D4100;\n}\n\n/* Don't put an underline on images */\na.image-reference, a.image-reference:hover {\n    border-bottom: none;\n}\n\na.footnote-reference {\n    text-decoration: none;\n    font-size: 0.7em;\n    vertical-align: top;\n    border-bottom: 1px dotted #004B6B;\n}\n\na.footnote-reference:hover {\n    border-bottom: 1px solid #6D4100;\n}\n\na:hover tt, a:hover code {\n    background: #EEE;\n}\n\n@media screen and (max-width: 940px) {\n\n    body {\n        margin: 0;\n        padding: 20px 30px;\n    }\n\n    div.documentwrapper {\n        float: none;\n        background: #fff;\n        margin-left: 0;\n        margin-top: 0;\n        margin-right: 0;\n        margin-bottom: 0;\n    }\n\n    div.sphinxsidebar {\n        display: block;\n        float: none;\n        width: unset;\n        margin: 50px -30px -20px -30px;\n        padding: 10px 20px;\n        background: #333;\n        color: #FFF;\n    }\n\n    div.sphinxsidebar h3, div.sphinxsidebar h4, div.sphinxsidebar p,\n    div.sphinxsidebar h3 a {\n        color: #fff;\n    }\n\n    div.sphinxsidebar a {\n        color: #AAA;\n    }\n\n    div.sphinxsidebar p.logo {\n        display: none;\n    }\n\n    div.document {\n        width: 100%;\n        margin: 0;\n    }\n\n    div.footer {\n        display: none;\n    }\n\n    div.bodywrapper {\n        margin: 0;\n    }\n\n    div.body {\n        min-height: 0;\n        min-width: auto; /* fixes width on small screens, breaks .hll */\n        padding: 0;\n    }\n    \n    .hll {\n        /* \"fixes\" the breakage */\n        width: max-content;\n    }\n\n    .rtd_doc_footer {\n        display: none;\n    }\n\n    .document {\n        width: auto;\n    }\n\n    .footer {\n        width: auto;\n    }\n\n    .github {\n        display: none;\n    }\n\n    ul {\n        margin-left: 0;\n    }\n\n    li > ul {\n       /* Matches the 30px from the \"ul, ol\" selector above */\n        margin-left: 30px;\n    }\n}\n\n\n/* misc. */\n\n.revsys-inline {\n    display: none!important;\n}\n\n/* Hide ugly table cell borders in ..bibliography:: directive output */\ntable.docutils.citation, table.docutils.citation td, table.docutils.citation th {\n  border: none;\n  /* Below needed in some edge cases; if not applied, bottom shadows appear */\n  -moz-box-shadow: none;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n\n\n/* relbar */\n\n.related {\n    line-height: 30px;\n    width: 100%;\n    font-size: 0.9rem;\n}\n\n.related.top {\n    border-bottom: 1px solid #EEE;\n    margin-bottom: 20px;\n}\n\n.related.bottom {\n    border-top: 1px solid #EEE;\n}\n\n.related ul {\n    padding: 0;\n    margin: 0;\n    list-style: none;\n}\n\n.related li {\n    display: inline;\n}\n\nnav#rellinks {\n    float: right;\n}\n\nnav#rellinks li+li:before {\n    content: \"|\";\n}\n\nnav#breadcrumbs li+li:before {\n    content: \"\\00BB\";\n}\n\n/* Hide certain items when printing */\n@media print {\n    div.related {\n        display: none;\n    }\n}\n\nimg.github  {\n    position: absolute;\n    top: 0;\n    border: 0;\n    right: 0;\n}"
  },
  {
    "path": "docs/_static/basic.css",
    "content": "/*\n * basic.css\n * ~~~~~~~~~\n *\n * Sphinx stylesheet -- basic theme.\n *\n * :copyright: Copyright 2007-2024 by the Sphinx team, see AUTHORS.\n * :license: BSD, see LICENSE for details.\n *\n */\n\n/* -- main layout ----------------------------------------------------------- */\n\ndiv.clearer {\n    clear: both;\n}\n\ndiv.section::after {\n    display: block;\n    content: '';\n    clear: left;\n}\n\n/* -- relbar ---------------------------------------------------------------- */\n\ndiv.related {\n    width: 100%;\n    font-size: 90%;\n}\n\ndiv.related h3 {\n    display: none;\n}\n\ndiv.related ul {\n    margin: 0;\n    padding: 0 0 0 10px;\n    list-style: none;\n}\n\ndiv.related li {\n    display: inline;\n}\n\ndiv.related li.right {\n    float: right;\n    margin-right: 5px;\n}\n\n/* -- sidebar --------------------------------------------------------------- */\n\ndiv.sphinxsidebarwrapper {\n    padding: 10px 5px 0 10px;\n}\n\ndiv.sphinxsidebar {\n    float: left;\n    width: 230px;\n    margin-left: -100%;\n    font-size: 90%;\n    word-wrap: break-word;\n    overflow-wrap : break-word;\n}\n\ndiv.sphinxsidebar ul {\n    list-style: none;\n}\n\ndiv.sphinxsidebar ul ul,\ndiv.sphinxsidebar ul.want-points {\n    margin-left: 20px;\n    list-style: square;\n}\n\ndiv.sphinxsidebar ul ul {\n    margin-top: 0;\n    margin-bottom: 0;\n}\n\ndiv.sphinxsidebar form {\n    margin-top: 10px;\n}\n\ndiv.sphinxsidebar input {\n    border: 1px solid #98dbcc;\n    font-family: sans-serif;\n    font-size: 1em;\n}\n\ndiv.sphinxsidebar #searchbox form.search {\n    overflow: hidden;\n}\n\ndiv.sphinxsidebar #searchbox input[type=\"text\"] {\n    float: left;\n    width: 80%;\n    padding: 0.25em;\n    box-sizing: border-box;\n}\n\ndiv.sphinxsidebar #searchbox input[type=\"submit\"] {\n    float: left;\n    width: 20%;\n    border-left: none;\n    padding: 0.25em;\n    box-sizing: border-box;\n}\n\n\nimg {\n    border: 0;\n    max-width: 100%;\n}\n\n/* -- search page ----------------------------------------------------------- */\n\nul.search {\n    margin: 10px 0 0 20px;\n    padding: 0;\n}\n\nul.search li {\n    padding: 5px 0 5px 20px;\n    background-image: url(file.png);\n    background-repeat: no-repeat;\n    background-position: 0 7px;\n}\n\nul.search li a {\n    font-weight: bold;\n}\n\nul.search li p.context {\n    color: #888;\n    margin: 2px 0 0 30px;\n    text-align: left;\n}\n\nul.keywordmatches li.goodmatch a {\n    font-weight: bold;\n}\n\n/* -- index page ------------------------------------------------------------ */\n\ntable.contentstable {\n    width: 90%;\n    margin-left: auto;\n    margin-right: auto;\n}\n\ntable.contentstable p.biglink {\n    line-height: 150%;\n}\n\na.biglink {\n    font-size: 1.3em;\n}\n\nspan.linkdescr {\n    font-style: italic;\n    padding-top: 5px;\n    font-size: 90%;\n}\n\n/* -- general index --------------------------------------------------------- */\n\ntable.indextable {\n    width: 100%;\n}\n\ntable.indextable td {\n    text-align: left;\n    vertical-align: top;\n}\n\ntable.indextable ul {\n    margin-top: 0;\n    margin-bottom: 0;\n    list-style-type: none;\n}\n\ntable.indextable > tbody > tr > td > ul {\n    padding-left: 0em;\n}\n\ntable.indextable tr.pcap {\n    height: 10px;\n}\n\ntable.indextable tr.cap {\n    margin-top: 10px;\n    background-color: #f2f2f2;\n}\n\nimg.toggler {\n    margin-right: 3px;\n    margin-top: 3px;\n    cursor: pointer;\n}\n\ndiv.modindex-jumpbox {\n    border-top: 1px solid #ddd;\n    border-bottom: 1px solid #ddd;\n    margin: 1em 0 1em 0;\n    padding: 0.4em;\n}\n\ndiv.genindex-jumpbox {\n    border-top: 1px solid #ddd;\n    border-bottom: 1px solid #ddd;\n    margin: 1em 0 1em 0;\n    padding: 0.4em;\n}\n\n/* -- domain module index --------------------------------------------------- */\n\ntable.modindextable td {\n    padding: 2px;\n    border-collapse: collapse;\n}\n\n/* -- general body styles --------------------------------------------------- */\n\ndiv.body {\n    min-width: inherit;\n    max-width: 800px;\n}\n\ndiv.body p, div.body dd, div.body li, div.body blockquote {\n    -moz-hyphens: auto;\n    -ms-hyphens: auto;\n    -webkit-hyphens: auto;\n    hyphens: auto;\n}\n\na.headerlink {\n    visibility: hidden;\n}\n\na:visited {\n    color: #551A8B;\n}\n\nh1:hover > a.headerlink,\nh2:hover > a.headerlink,\nh3:hover > a.headerlink,\nh4:hover > a.headerlink,\nh5:hover > a.headerlink,\nh6:hover > a.headerlink,\ndt:hover > a.headerlink,\ncaption:hover > a.headerlink,\np.caption:hover > a.headerlink,\ndiv.code-block-caption:hover > a.headerlink {\n    visibility: visible;\n}\n\ndiv.body p.caption {\n    text-align: inherit;\n}\n\ndiv.body td {\n    text-align: left;\n}\n\n.first {\n    margin-top: 0 !important;\n}\n\np.rubric {\n    margin-top: 30px;\n    font-weight: bold;\n}\n\nimg.align-left, figure.align-left, .figure.align-left, object.align-left {\n    clear: left;\n    float: left;\n    margin-right: 1em;\n}\n\nimg.align-right, figure.align-right, .figure.align-right, object.align-right {\n    clear: right;\n    float: right;\n    margin-left: 1em;\n}\n\nimg.align-center, figure.align-center, .figure.align-center, object.align-center {\n  display: block;\n  margin-left: auto;\n  margin-right: auto;\n}\n\nimg.align-default, figure.align-default, .figure.align-default {\n  display: block;\n  margin-left: auto;\n  margin-right: auto;\n}\n\n.align-left {\n    text-align: left;\n}\n\n.align-center {\n    text-align: center;\n}\n\n.align-default {\n    text-align: center;\n}\n\n.align-right {\n    text-align: right;\n}\n\n/* -- sidebars -------------------------------------------------------------- */\n\ndiv.sidebar,\naside.sidebar {\n    margin: 0 0 0.5em 1em;\n    border: 1px solid #ddb;\n    padding: 7px;\n    background-color: #ffe;\n    width: 40%;\n    float: right;\n    clear: right;\n    overflow-x: auto;\n}\n\np.sidebar-title {\n    font-weight: bold;\n}\n\nnav.contents,\naside.topic,\ndiv.admonition, div.topic, blockquote {\n    clear: left;\n}\n\n/* -- topics ---------------------------------------------------------------- */\n\nnav.contents,\naside.topic,\ndiv.topic {\n    border: 1px solid #ccc;\n    padding: 7px;\n    margin: 10px 0 10px 0;\n}\n\np.topic-title {\n    font-size: 1.1em;\n    font-weight: bold;\n    margin-top: 10px;\n}\n\n/* -- admonitions ----------------------------------------------------------- */\n\ndiv.admonition {\n    margin-top: 10px;\n    margin-bottom: 10px;\n    padding: 7px;\n}\n\ndiv.admonition dt {\n    font-weight: bold;\n}\n\np.admonition-title {\n    margin: 0px 10px 5px 0px;\n    font-weight: bold;\n}\n\ndiv.body p.centered {\n    text-align: center;\n    margin-top: 25px;\n}\n\n/* -- content of sidebars/topics/admonitions -------------------------------- */\n\ndiv.sidebar > :last-child,\naside.sidebar > :last-child,\nnav.contents > :last-child,\naside.topic > :last-child,\ndiv.topic > :last-child,\ndiv.admonition > :last-child {\n    margin-bottom: 0;\n}\n\ndiv.sidebar::after,\naside.sidebar::after,\nnav.contents::after,\naside.topic::after,\ndiv.topic::after,\ndiv.admonition::after,\nblockquote::after {\n    display: block;\n    content: '';\n    clear: both;\n}\n\n/* -- tables ---------------------------------------------------------------- */\n\ntable.docutils {\n    margin-top: 10px;\n    margin-bottom: 10px;\n    border: 0;\n    border-collapse: collapse;\n}\n\ntable.align-center {\n    margin-left: auto;\n    margin-right: auto;\n}\n\ntable.align-default {\n    margin-left: auto;\n    margin-right: auto;\n}\n\ntable caption span.caption-number {\n    font-style: italic;\n}\n\ntable caption span.caption-text {\n}\n\ntable.docutils td, table.docutils th {\n    padding: 1px 8px 1px 5px;\n    border-top: 0;\n    border-left: 0;\n    border-right: 0;\n    border-bottom: 1px solid #aaa;\n}\n\nth {\n    text-align: left;\n    padding-right: 5px;\n}\n\ntable.citation {\n    border-left: solid 1px gray;\n    margin-left: 1px;\n}\n\ntable.citation td {\n    border-bottom: none;\n}\n\nth > :first-child,\ntd > :first-child {\n    margin-top: 0px;\n}\n\nth > :last-child,\ntd > :last-child {\n    margin-bottom: 0px;\n}\n\n/* -- figures --------------------------------------------------------------- */\n\ndiv.figure, figure {\n    margin: 0.5em;\n    padding: 0.5em;\n}\n\ndiv.figure p.caption, figcaption {\n    padding: 0.3em;\n}\n\ndiv.figure p.caption span.caption-number,\nfigcaption span.caption-number {\n    font-style: italic;\n}\n\ndiv.figure p.caption span.caption-text,\nfigcaption span.caption-text {\n}\n\n/* -- field list styles ----------------------------------------------------- */\n\ntable.field-list td, table.field-list th {\n    border: 0 !important;\n}\n\n.field-list ul {\n    margin: 0;\n    padding-left: 1em;\n}\n\n.field-list p {\n    margin: 0;\n}\n\n.field-name {\n    -moz-hyphens: manual;\n    -ms-hyphens: manual;\n    -webkit-hyphens: manual;\n    hyphens: manual;\n}\n\n/* -- hlist styles ---------------------------------------------------------- */\n\ntable.hlist {\n    margin: 1em 0;\n}\n\ntable.hlist td {\n    vertical-align: top;\n}\n\n/* -- object description styles --------------------------------------------- */\n\n.sig {\n\tfont-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace;\n}\n\n.sig-name, code.descname {\n    background-color: transparent;\n    font-weight: bold;\n}\n\n.sig-name {\n\tfont-size: 1.1em;\n}\n\ncode.descname {\n    font-size: 1.2em;\n}\n\n.sig-prename, code.descclassname {\n    background-color: transparent;\n}\n\n.optional {\n    font-size: 1.3em;\n}\n\n.sig-paren {\n    font-size: larger;\n}\n\n.sig-param.n {\n\tfont-style: italic;\n}\n\n/* C++ specific styling */\n\n.sig-inline.c-texpr,\n.sig-inline.cpp-texpr {\n\tfont-family: unset;\n}\n\n.sig.c   .k, .sig.c   .kt,\n.sig.cpp .k, .sig.cpp .kt {\n\tcolor: #0033B3;\n}\n\n.sig.c   .m,\n.sig.cpp .m {\n\tcolor: #1750EB;\n}\n\n.sig.c   .s, .sig.c   .sc,\n.sig.cpp .s, .sig.cpp .sc {\n\tcolor: #067D17;\n}\n\n\n/* -- other body styles ----------------------------------------------------- */\n\nol.arabic {\n    list-style: decimal;\n}\n\nol.loweralpha {\n    list-style: lower-alpha;\n}\n\nol.upperalpha {\n    list-style: upper-alpha;\n}\n\nol.lowerroman {\n    list-style: lower-roman;\n}\n\nol.upperroman {\n    list-style: upper-roman;\n}\n\n:not(li) > ol > li:first-child > :first-child,\n:not(li) > ul > li:first-child > :first-child {\n    margin-top: 0px;\n}\n\n:not(li) > ol > li:last-child > :last-child,\n:not(li) > ul > li:last-child > :last-child {\n    margin-bottom: 0px;\n}\n\nol.simple ol p,\nol.simple ul p,\nul.simple ol p,\nul.simple ul p {\n    margin-top: 0;\n}\n\nol.simple > li:not(:first-child) > p,\nul.simple > li:not(:first-child) > p {\n    margin-top: 0;\n}\n\nol.simple p,\nul.simple p {\n    margin-bottom: 0;\n}\n\naside.footnote > span,\ndiv.citation > span {\n    float: left;\n}\naside.footnote > span:last-of-type,\ndiv.citation > span:last-of-type {\n  padding-right: 0.5em;\n}\naside.footnote > p {\n  margin-left: 2em;\n}\ndiv.citation > p {\n  margin-left: 4em;\n}\naside.footnote > p:last-of-type,\ndiv.citation > p:last-of-type {\n    margin-bottom: 0em;\n}\naside.footnote > p:last-of-type:after,\ndiv.citation > p:last-of-type:after {\n    content: \"\";\n    clear: both;\n}\n\ndl.field-list {\n    display: grid;\n    grid-template-columns: fit-content(30%) auto;\n}\n\ndl.field-list > dt {\n    font-weight: bold;\n    word-break: break-word;\n    padding-left: 0.5em;\n    padding-right: 5px;\n}\n\ndl.field-list > dd {\n    padding-left: 0.5em;\n    margin-top: 0em;\n    margin-left: 0em;\n    margin-bottom: 0em;\n}\n\ndl {\n    margin-bottom: 15px;\n}\n\ndd > :first-child {\n    margin-top: 0px;\n}\n\ndd ul, dd table {\n    margin-bottom: 10px;\n}\n\ndd {\n    margin-top: 3px;\n    margin-bottom: 10px;\n    margin-left: 30px;\n}\n\n.sig dd {\n    margin-top: 0px;\n    margin-bottom: 0px;\n}\n\n.sig dl {\n    margin-top: 0px;\n    margin-bottom: 0px;\n}\n\ndl > dd:last-child,\ndl > dd:last-child > :last-child {\n    margin-bottom: 0;\n}\n\ndt:target, span.highlighted {\n    background-color: #fbe54e;\n}\n\nrect.highlighted {\n    fill: #fbe54e;\n}\n\ndl.glossary dt {\n    font-weight: bold;\n    font-size: 1.1em;\n}\n\n.versionmodified {\n    font-style: italic;\n}\n\n.system-message {\n    background-color: #fda;\n    padding: 5px;\n    border: 3px solid red;\n}\n\n.footnote:target  {\n    background-color: #ffa;\n}\n\n.line-block {\n    display: block;\n    margin-top: 1em;\n    margin-bottom: 1em;\n}\n\n.line-block .line-block {\n    margin-top: 0;\n    margin-bottom: 0;\n    margin-left: 1.5em;\n}\n\n.guilabel, .menuselection {\n    font-family: sans-serif;\n}\n\n.accelerator {\n    text-decoration: underline;\n}\n\n.classifier {\n    font-style: oblique;\n}\n\n.classifier:before {\n    font-style: normal;\n    margin: 0 0.5em;\n    content: \":\";\n    display: inline-block;\n}\n\nabbr, acronym {\n    border-bottom: dotted 1px;\n    cursor: help;\n}\n\n.translated {\n    background-color: rgba(207, 255, 207, 0.2)\n}\n\n.untranslated {\n    background-color: rgba(255, 207, 207, 0.2)\n}\n\n/* -- code displays --------------------------------------------------------- */\n\npre {\n    overflow: auto;\n    overflow-y: hidden;  /* fixes display issues on Chrome browsers */\n}\n\npre, div[class*=\"highlight-\"] {\n    clear: both;\n}\n\nspan.pre {\n    -moz-hyphens: none;\n    -ms-hyphens: none;\n    -webkit-hyphens: none;\n    hyphens: none;\n    white-space: nowrap;\n}\n\ndiv[class*=\"highlight-\"] {\n    margin: 1em 0;\n}\n\ntd.linenos pre {\n    border: 0;\n    background-color: transparent;\n    color: #aaa;\n}\n\ntable.highlighttable {\n    display: block;\n}\n\ntable.highlighttable tbody {\n    display: block;\n}\n\ntable.highlighttable tr {\n    display: flex;\n}\n\ntable.highlighttable td {\n    margin: 0;\n    padding: 0;\n}\n\ntable.highlighttable td.linenos {\n    padding-right: 0.5em;\n}\n\ntable.highlighttable td.code {\n    flex: 1;\n    overflow: hidden;\n}\n\n.highlight .hll {\n    display: block;\n}\n\ndiv.highlight pre,\ntable.highlighttable pre {\n    margin: 0;\n}\n\ndiv.code-block-caption + div {\n    margin-top: 0;\n}\n\ndiv.code-block-caption {\n    margin-top: 1em;\n    padding: 2px 5px;\n    font-size: small;\n}\n\ndiv.code-block-caption code {\n    background-color: transparent;\n}\n\ntable.highlighttable td.linenos,\nspan.linenos,\ndiv.highlight span.gp {  /* gp: Generic.Prompt */\n  user-select: none;\n  -webkit-user-select: text; /* Safari fallback only */\n  -webkit-user-select: none; /* Chrome/Safari */\n  -moz-user-select: none; /* Firefox */\n  -ms-user-select: none; /* IE10+ */\n}\n\ndiv.code-block-caption span.caption-number {\n    padding: 0.1em 0.3em;\n    font-style: italic;\n}\n\ndiv.code-block-caption span.caption-text {\n}\n\ndiv.literal-block-wrapper {\n    margin: 1em 0;\n}\n\ncode.xref, a code {\n    background-color: transparent;\n    font-weight: bold;\n}\n\nh1 code, h2 code, h3 code, h4 code, h5 code, h6 code {\n    background-color: transparent;\n}\n\n.viewcode-link {\n    float: right;\n}\n\n.viewcode-back {\n    float: right;\n    font-family: sans-serif;\n}\n\ndiv.viewcode-block:target {\n    margin: -1px -10px;\n    padding: 0 10px;\n}\n\n/* -- math display ---------------------------------------------------------- */\n\nimg.math {\n    vertical-align: middle;\n}\n\ndiv.body div.math p {\n    text-align: center;\n}\n\nspan.eqno {\n    float: right;\n}\n\nspan.eqno a.headerlink {\n    position: absolute;\n    z-index: 1;\n}\n\ndiv.math:hover a.headerlink {\n    visibility: visible;\n}\n\n/* -- printout stylesheet --------------------------------------------------- */\n\n@media print {\n    div.document,\n    div.documentwrapper,\n    div.bodywrapper {\n        margin: 0 !important;\n        width: 100%;\n    }\n\n    div.sphinxsidebar,\n    div.related,\n    div.footer,\n    #top-link {\n        display: none;\n    }\n}"
  },
  {
    "path": "docs/_static/custom.css",
    "content": "@import url('https://fonts.googleapis.com/css2?family=Noto+Sans+JP:wght@400;700&display=swap');\n\nbody,h1,h2,h3,h4,h5,h6,p,a,li {\n    font-family: 'Noto Sans JP', sans-serif !important;\n}\n"
  },
  {
    "path": "docs/_static/custom.css~",
    "content": "@import url('https://fonts.googleapis.com/css2?family=Noto+Sans+JP:wght@400;700&display=swap');\n\nbody,h1,h2,h3,h4,h5,h6,p,a,li {\n    font-family: 'Noto Sans JP', sans-serif;\n}\n"
  },
  {
    "path": "docs/_static/doctools.js",
    "content": "/*\n * doctools.js\n * ~~~~~~~~~~~\n *\n * Base JavaScript utilities for all Sphinx HTML documentation.\n *\n * :copyright: Copyright 2007-2024 by the Sphinx team, see AUTHORS.\n * :license: BSD, see LICENSE for details.\n *\n */\n\"use strict\";\n\nconst BLACKLISTED_KEY_CONTROL_ELEMENTS = new Set([\n  \"TEXTAREA\",\n  \"INPUT\",\n  \"SELECT\",\n  \"BUTTON\",\n]);\n\nconst _ready = (callback) => {\n  if (document.readyState !== \"loading\") {\n    callback();\n  } else {\n    document.addEventListener(\"DOMContentLoaded\", callback);\n  }\n};\n\n/**\n * Small JavaScript module for the documentation.\n */\nconst Documentation = {\n  init: () => {\n    Documentation.initDomainIndexTable();\n    Documentation.initOnKeyListeners();\n  },\n\n  /**\n   * i18n support\n   */\n  TRANSLATIONS: {},\n  PLURAL_EXPR: (n) => (n === 1 ? 0 : 1),\n  LOCALE: \"unknown\",\n\n  // gettext and ngettext don't access this so that the functions\n  // can safely bound to a different name (_ = Documentation.gettext)\n  gettext: (string) => {\n    const translated = Documentation.TRANSLATIONS[string];\n    switch (typeof translated) {\n      case \"undefined\":\n        return string; // no translation\n      case \"string\":\n        return translated; // translation exists\n      default:\n        return translated[0]; // (singular, plural) translation tuple exists\n    }\n  },\n\n  ngettext: (singular, plural, n) => {\n    const translated = Documentation.TRANSLATIONS[singular];\n    if (typeof translated !== \"undefined\")\n      return translated[Documentation.PLURAL_EXPR(n)];\n    return n === 1 ? singular : plural;\n  },\n\n  addTranslations: (catalog) => {\n    Object.assign(Documentation.TRANSLATIONS, catalog.messages);\n    Documentation.PLURAL_EXPR = new Function(\n      \"n\",\n      `return (${catalog.plural_expr})`\n    );\n    Documentation.LOCALE = catalog.locale;\n  },\n\n  /**\n   * helper function to focus on search bar\n   */\n  focusSearchBar: () => {\n    document.querySelectorAll(\"input[name=q]\")[0]?.focus();\n  },\n\n  /**\n   * Initialise the domain index toggle buttons\n   */\n  initDomainIndexTable: () => {\n    const toggler = (el) => {\n      const idNumber = el.id.substr(7);\n      const toggledRows = document.querySelectorAll(`tr.cg-${idNumber}`);\n      if (el.src.substr(-9) === \"minus.png\") {\n        el.src = `${el.src.substr(0, el.src.length - 9)}plus.png`;\n        toggledRows.forEach((el) => (el.style.display = \"none\"));\n      } else {\n        el.src = `${el.src.substr(0, el.src.length - 8)}minus.png`;\n        toggledRows.forEach((el) => (el.style.display = \"\"));\n      }\n    };\n\n    const togglerElements = document.querySelectorAll(\"img.toggler\");\n    togglerElements.forEach((el) =>\n      el.addEventListener(\"click\", (event) => toggler(event.currentTarget))\n    );\n    togglerElements.forEach((el) => (el.style.display = \"\"));\n    if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) togglerElements.forEach(toggler);\n  },\n\n  initOnKeyListeners: () => {\n    // only install a listener if it is really needed\n    if (\n      !DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS &&\n      !DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS\n    )\n      return;\n\n    document.addEventListener(\"keydown\", (event) => {\n      // bail for input elements\n      if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return;\n      // bail with special keys\n      if (event.altKey || event.ctrlKey || event.metaKey) return;\n\n      if (!event.shiftKey) {\n        switch (event.key) {\n          case \"ArrowLeft\":\n            if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break;\n\n            const prevLink = document.querySelector('link[rel=\"prev\"]');\n            if (prevLink && prevLink.href) {\n              window.location.href = prevLink.href;\n              event.preventDefault();\n            }\n            break;\n          case \"ArrowRight\":\n            if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break;\n\n            const nextLink = document.querySelector('link[rel=\"next\"]');\n            if (nextLink && nextLink.href) {\n              window.location.href = nextLink.href;\n              event.preventDefault();\n            }\n            break;\n        }\n      }\n\n      // some keyboard layouts may need Shift to get /\n      switch (event.key) {\n        case \"/\":\n          if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) break;\n          Documentation.focusSearchBar();\n          event.preventDefault();\n      }\n    });\n  },\n};\n\n// quick alias for translations\nconst _ = Documentation.gettext;\n\n_ready(Documentation.init);\n"
  },
  {
    "path": "docs/_static/documentation_options.js",
    "content": "const DOCUMENTATION_OPTIONS = {\n    VERSION: '',\n    LANGUAGE: 'jp',\n    COLLAPSE_INDEX: false,\n    BUILDER: 'html',\n    FILE_SUFFIX: '.html',\n    LINK_SUFFIX: '.html',\n    HAS_SOURCE: true,\n    SOURCELINK_SUFFIX: '.txt',\n    NAVIGATION_WITH_KEYS: false,\n    SHOW_SEARCH_SUMMARY: true,\n    ENABLE_SEARCH_SHORTCUTS: true,\n};"
  },
  {
    "path": "docs/_static/language_data.js",
    "content": "/*\n * language_data.js\n * ~~~~~~~~~~~~~~~~\n *\n * This script contains the language-specific data used by searchtools.js,\n * namely the list of stopwords, stemmer, scorer and splitter.\n *\n * :copyright: Copyright 2007-2024 by the Sphinx team, see AUTHORS.\n * :license: BSD, see LICENSE for details.\n *\n */\n\nvar stopwords = [];\n\n\n/* Non-minified version is copied as a separate JS file, if available */\n\n/**\n * Dummy stemmer for languages without stemming rules.\n */\nvar Stemmer = function() {\n  this.stemWord = function(w) {\n    return w;\n  }\n}\n\n"
  },
  {
    "path": "docs/_static/nbsphinx-code-cells.css",
    "content": "/* remove conflicting styling from Sphinx themes */\ndiv.nbinput.container div.prompt *,\ndiv.nboutput.container div.prompt *,\ndiv.nbinput.container div.input_area pre,\ndiv.nboutput.container div.output_area pre,\ndiv.nbinput.container div.input_area .highlight,\ndiv.nboutput.container div.output_area .highlight {\n    border: none;\n    padding: 0;\n    margin: 0;\n    box-shadow: none;\n}\n\ndiv.nbinput.container > div[class*=highlight],\ndiv.nboutput.container > div[class*=highlight] {\n    margin: 0;\n}\n\ndiv.nbinput.container div.prompt *,\ndiv.nboutput.container div.prompt * {\n    background: none;\n}\n\ndiv.nboutput.container div.output_area .highlight,\ndiv.nboutput.container div.output_area pre {\n    background: unset;\n}\n\ndiv.nboutput.container div.output_area div.highlight {\n    color: unset;  /* override Pygments text color */\n}\n\n/* avoid gaps between output lines */\ndiv.nboutput.container div[class*=highlight] pre {\n    line-height: normal;\n}\n\n/* input/output containers */\ndiv.nbinput.container,\ndiv.nboutput.container {\n    display: -webkit-flex;\n    display: flex;\n    align-items: flex-start;\n    margin: 0;\n    width: 100%;\n}\n@media (max-width: 540px) {\n    div.nbinput.container,\n    div.nboutput.container {\n        flex-direction: column;\n    }\n}\n\n/* input container */\ndiv.nbinput.container {\n    padding-top: 5px;\n}\n\n/* last container */\ndiv.nblast.container {\n    padding-bottom: 5px;\n}\n\n/* input prompt */\ndiv.nbinput.container div.prompt pre,\n/* for sphinx_immaterial theme: */\ndiv.nbinput.container div.prompt pre > code {\n    color: #307FC1;\n}\n\n/* output prompt */\ndiv.nboutput.container div.prompt pre,\n/* for sphinx_immaterial theme: */\ndiv.nboutput.container div.prompt pre > code {\n    color: #BF5B3D;\n}\n\n/* all prompts */\ndiv.nbinput.container div.prompt,\ndiv.nboutput.container div.prompt {\n    width: 4.5ex;\n    padding-top: 5px;\n    position: relative;\n    user-select: none;\n}\n\ndiv.nbinput.container div.prompt > div,\ndiv.nboutput.container div.prompt > div {\n    position: absolute;\n    right: 0;\n    margin-right: 0.3ex;\n}\n\n@media (max-width: 540px) {\n    div.nbinput.container div.prompt,\n    div.nboutput.container div.prompt {\n        width: unset;\n        text-align: left;\n        padding: 0.4em;\n    }\n    div.nboutput.container div.prompt.empty {\n        padding: 0;\n    }\n\n    div.nbinput.container div.prompt > div,\n    div.nboutput.container div.prompt > div {\n        position: unset;\n    }\n}\n\n/* disable scrollbars and line breaks on prompts */\ndiv.nbinput.container div.prompt pre,\ndiv.nboutput.container div.prompt pre {\n    overflow: hidden;\n    white-space: pre;\n}\n\n/* input/output area */\ndiv.nbinput.container div.input_area,\ndiv.nboutput.container div.output_area {\n    -webkit-flex: 1;\n    flex: 1;\n    overflow: auto;\n}\n@media (max-width: 540px) {\n    div.nbinput.container div.input_area,\n    div.nboutput.container div.output_area {\n        width: 100%;\n    }\n}\n\n/* input area */\ndiv.nbinput.container div.input_area {\n    border: 1px solid #e0e0e0;\n    border-radius: 2px;\n    /*background: #f5f5f5;*/\n}\n\n/* override MathJax center alignment in output cells */\ndiv.nboutput.container div[class*=MathJax] {\n    text-align: left !important;\n}\n\n/* override sphinx.ext.imgmath center alignment in output cells */\ndiv.nboutput.container div.math p {\n    text-align: left;\n}\n\n/* standard error */\ndiv.nboutput.container div.output_area.stderr {\n    background: #fdd;\n}\n\n/* ANSI colors */\n.ansi-black-fg { color: #3E424D; }\n.ansi-black-bg { background-color: #3E424D; }\n.ansi-black-intense-fg { color: #282C36; }\n.ansi-black-intense-bg { background-color: #282C36; }\n.ansi-red-fg { color: #E75C58; }\n.ansi-red-bg { background-color: #E75C58; }\n.ansi-red-intense-fg { color: #B22B31; }\n.ansi-red-intense-bg { background-color: #B22B31; }\n.ansi-green-fg { color: #00A250; }\n.ansi-green-bg { background-color: #00A250; }\n.ansi-green-intense-fg { color: #007427; }\n.ansi-green-intense-bg { background-color: #007427; }\n.ansi-yellow-fg { color: #DDB62B; }\n.ansi-yellow-bg { background-color: #DDB62B; }\n.ansi-yellow-intense-fg { color: #B27D12; }\n.ansi-yellow-intense-bg { background-color: #B27D12; }\n.ansi-blue-fg { color: #208FFB; }\n.ansi-blue-bg { background-color: #208FFB; }\n.ansi-blue-intense-fg { color: #0065CA; }\n.ansi-blue-intense-bg { background-color: #0065CA; }\n.ansi-magenta-fg { color: #D160C4; }\n.ansi-magenta-bg { background-color: #D160C4; }\n.ansi-magenta-intense-fg { color: #A03196; }\n.ansi-magenta-intense-bg { background-color: #A03196; }\n.ansi-cyan-fg { color: #60C6C8; }\n.ansi-cyan-bg { background-color: #60C6C8; }\n.ansi-cyan-intense-fg { color: #258F8F; }\n.ansi-cyan-intense-bg { background-color: #258F8F; }\n.ansi-white-fg { color: #C5C1B4; }\n.ansi-white-bg { background-color: #C5C1B4; }\n.ansi-white-intense-fg { color: #A1A6B2; }\n.ansi-white-intense-bg { background-color: #A1A6B2; }\n\n.ansi-default-inverse-fg { color: #FFFFFF; }\n.ansi-default-inverse-bg { background-color: #000000; }\n\n.ansi-bold { font-weight: bold; }\n.ansi-underline { text-decoration: underline; }\n\n\ndiv.nbinput.container div.input_area div[class*=highlight] > pre,\ndiv.nboutput.container div.output_area div[class*=highlight] > pre,\ndiv.nboutput.container div.output_area div[class*=highlight].math,\ndiv.nboutput.container div.output_area.rendered_html,\ndiv.nboutput.container div.output_area > div.output_javascript,\ndiv.nboutput.container div.output_area:not(.rendered_html) > img{\n    padding: 5px;\n    margin: 0;\n}\n\n/* fix copybtn overflow problem in chromium (needed for 'sphinx_copybutton') */\ndiv.nbinput.container div.input_area > div[class^='highlight'],\ndiv.nboutput.container div.output_area > div[class^='highlight']{\n    overflow-y: hidden;\n}\n\n/* hide copy button on prompts for 'sphinx_copybutton' extension ... */\n.prompt .copybtn,\n/* ... and 'sphinx_immaterial' theme */\n.prompt .md-clipboard.md-icon {\n    display: none;\n}\n\n/* Some additional styling taken form the Jupyter notebook CSS */\n.jp-RenderedHTMLCommon table,\ndiv.rendered_html table {\n  border: none;\n  border-collapse: collapse;\n  border-spacing: 0;\n  color: black;\n  font-size: 12px;\n  table-layout: fixed;\n}\n.jp-RenderedHTMLCommon thead,\ndiv.rendered_html thead {\n  border-bottom: 1px solid black;\n  vertical-align: bottom;\n}\n.jp-RenderedHTMLCommon tr,\n.jp-RenderedHTMLCommon th,\n.jp-RenderedHTMLCommon td,\ndiv.rendered_html tr,\ndiv.rendered_html th,\ndiv.rendered_html td {\n  text-align: right;\n  vertical-align: middle;\n  padding: 0.5em 0.5em;\n  line-height: normal;\n  white-space: normal;\n  max-width: none;\n  border: none;\n}\n.jp-RenderedHTMLCommon th,\ndiv.rendered_html th {\n  font-weight: bold;\n}\n.jp-RenderedHTMLCommon tbody tr:nth-child(odd),\ndiv.rendered_html tbody tr:nth-child(odd) {\n  background: #f5f5f5;\n}\n.jp-RenderedHTMLCommon tbody tr:hover,\ndiv.rendered_html tbody tr:hover {\n  background: rgba(66, 165, 245, 0.2);\n}\n\n"
  },
  {
    "path": "docs/_static/nbsphinx-gallery.css",
    "content": ".nbsphinx-gallery {\n    display: grid;\n    grid-template-columns: repeat(auto-fill, minmax(160px, 1fr));\n    gap: 5px;\n    margin-top: 1em;\n    margin-bottom: 1em;\n}\n\n.nbsphinx-gallery > a {\n    padding: 5px;\n    border: 1px dotted currentColor;\n    border-radius: 2px;\n    text-align: center;\n}\n\n.nbsphinx-gallery > a:hover {\n    border-style: solid;\n}\n\n.nbsphinx-gallery img {\n    max-width: 100%;\n    max-height: 100%;\n}\n\n.nbsphinx-gallery > a > div:first-child {\n    display: flex;\n    align-items: start;\n    justify-content: center;\n    height: 120px;\n    margin-bottom: 5px;\n}\n"
  },
  {
    "path": "docs/_static/pygments.css",
    "content": "pre { line-height: 125%; }\ntd.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }\nspan.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }\ntd.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }\nspan.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }\n.highlight .hll { background-color: #ffffcc }\n.highlight { background: #f8f8f8; }\n.highlight .c { color: #8f5902; font-style: italic } /* Comment */\n.highlight .err { color: #a40000; border: 1px solid #ef2929 } /* Error */\n.highlight .g { color: #000000 } /* Generic */\n.highlight .k { color: #004461; font-weight: bold } /* Keyword */\n.highlight .l { color: #000000 } /* Literal */\n.highlight .n { color: #000000 } /* Name */\n.highlight .o { color: #582800 } /* Operator */\n.highlight .x { color: #000000 } /* Other */\n.highlight .p { color: #000000; font-weight: bold } /* Punctuation */\n.highlight .ch { color: #8f5902; font-style: italic } /* Comment.Hashbang */\n.highlight .cm { color: #8f5902; font-style: italic } /* Comment.Multiline */\n.highlight .cp { color: #8f5902 } /* Comment.Preproc */\n.highlight .cpf { color: #8f5902; font-style: italic } /* Comment.PreprocFile */\n.highlight .c1 { color: #8f5902; font-style: italic } /* Comment.Single */\n.highlight .cs { color: #8f5902; font-style: italic } /* Comment.Special */\n.highlight .gd { color: #a40000 } /* Generic.Deleted */\n.highlight .ge { color: #000000; font-style: italic } /* Generic.Emph */\n.highlight .ges { color: #000000 } /* Generic.EmphStrong */\n.highlight .gr { color: #ef2929 } /* Generic.Error */\n.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */\n.highlight .gi { color: #00A000 } /* Generic.Inserted */\n.highlight .go { color: #888888 } /* Generic.Output */\n.highlight .gp { color: #745334 } /* Generic.Prompt */\n.highlight .gs { color: #000000; font-weight: bold } /* Generic.Strong */\n.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */\n.highlight .gt { color: #a40000; font-weight: bold } /* Generic.Traceback */\n.highlight .kc { color: #004461; font-weight: bold } /* Keyword.Constant */\n.highlight .kd { color: #004461; font-weight: bold } /* Keyword.Declaration */\n.highlight .kn { color: #004461; font-weight: bold } /* Keyword.Namespace */\n.highlight .kp { color: #004461; font-weight: bold } /* Keyword.Pseudo */\n.highlight .kr { color: #004461; font-weight: bold } /* Keyword.Reserved */\n.highlight .kt { color: #004461; font-weight: bold } /* Keyword.Type */\n.highlight .ld { color: #000000 } /* Literal.Date */\n.highlight .m { color: #990000 } /* Literal.Number */\n.highlight .s { color: #4e9a06 } /* Literal.String */\n.highlight .na { color: #c4a000 } /* Name.Attribute */\n.highlight .nb { color: #004461 } /* Name.Builtin */\n.highlight .nc { color: #000000 } /* Name.Class */\n.highlight .no { color: #000000 } /* Name.Constant */\n.highlight .nd { color: #888888 } /* Name.Decorator */\n.highlight .ni { color: #ce5c00 } /* Name.Entity */\n.highlight .ne { color: #cc0000; font-weight: bold } /* Name.Exception */\n.highlight .nf { color: #000000 } /* Name.Function */\n.highlight .nl { color: #f57900 } /* Name.Label */\n.highlight .nn { color: #000000 } /* Name.Namespace */\n.highlight .nx { color: #000000 } /* Name.Other */\n.highlight .py { color: #000000 } /* Name.Property */\n.highlight .nt { color: #004461; font-weight: bold } /* Name.Tag */\n.highlight .nv { color: #000000 } /* Name.Variable */\n.highlight .ow { color: #004461; font-weight: bold } /* Operator.Word */\n.highlight .pm { color: #000000; font-weight: bold } /* Punctuation.Marker */\n.highlight .w { color: #f8f8f8 } /* Text.Whitespace */\n.highlight .mb { color: #990000 } /* Literal.Number.Bin */\n.highlight .mf { color: #990000 } /* Literal.Number.Float */\n.highlight .mh { color: #990000 } /* Literal.Number.Hex */\n.highlight .mi { color: #990000 } /* Literal.Number.Integer */\n.highlight .mo { color: #990000 } /* Literal.Number.Oct */\n.highlight .sa { color: #4e9a06 } /* Literal.String.Affix */\n.highlight .sb { color: #4e9a06 } /* Literal.String.Backtick */\n.highlight .sc { color: #4e9a06 } /* Literal.String.Char */\n.highlight .dl { color: #4e9a06 } /* Literal.String.Delimiter */\n.highlight .sd { color: #8f5902; font-style: italic } /* Literal.String.Doc */\n.highlight .s2 { color: #4e9a06 } /* Literal.String.Double */\n.highlight .se { color: #4e9a06 } /* Literal.String.Escape */\n.highlight .sh { color: #4e9a06 } /* Literal.String.Heredoc */\n.highlight .si { color: #4e9a06 } /* Literal.String.Interpol */\n.highlight .sx { color: #4e9a06 } /* Literal.String.Other */\n.highlight .sr { color: #4e9a06 } /* Literal.String.Regex */\n.highlight .s1 { color: #4e9a06 } /* Literal.String.Single */\n.highlight .ss { color: #4e9a06 } /* Literal.String.Symbol */\n.highlight .bp { color: #3465a4 } /* Name.Builtin.Pseudo */\n.highlight .fm { color: #000000 } /* Name.Function.Magic */\n.highlight .vc { color: #000000 } /* Name.Variable.Class */\n.highlight .vg { color: #000000 } /* Name.Variable.Global */\n.highlight .vi { color: #000000 } /* Name.Variable.Instance */\n.highlight .vm { color: #000000 } /* Name.Variable.Magic */\n.highlight .il { color: #990000 } /* Literal.Number.Integer.Long */"
  },
  {
    "path": "docs/_static/searchtools.js",
    "content": "/*\n * searchtools.js\n * ~~~~~~~~~~~~~~~~\n *\n * Sphinx JavaScript utilities for the full-text search.\n *\n * :copyright: Copyright 2007-2024 by the Sphinx team, see AUTHORS.\n * :license: BSD, see LICENSE for details.\n *\n */\n\"use strict\";\n\n/**\n * Simple result scoring code.\n */\nif (typeof Scorer === \"undefined\") {\n  var Scorer = {\n    // Implement the following function to further tweak the score for each result\n    // The function takes a result array [docname, title, anchor, descr, score, filename]\n    // and returns the new score.\n    /*\n    score: result => {\n      const [docname, title, anchor, descr, score, filename] = result\n      return score\n    },\n    */\n\n    // query matches the full name of an object\n    objNameMatch: 11,\n    // or matches in the last dotted part of the object name\n    objPartialMatch: 6,\n    // Additive scores depending on the priority of the object\n    objPrio: {\n      0: 15, // used to be importantResults\n      1: 5, // used to be objectResults\n      2: -5, // used to be unimportantResults\n    },\n    //  Used when the priority is not in the mapping.\n    objPrioDefault: 0,\n\n    // query found in title\n    title: 15,\n    partialTitle: 7,\n    // query found in terms\n    term: 5,\n    partialTerm: 2,\n  };\n}\n\nconst _removeChildren = (element) => {\n  while (element && element.lastChild) element.removeChild(element.lastChild);\n};\n\n/**\n * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#escaping\n */\nconst _escapeRegExp = (string) =>\n  string.replace(/[.*+\\-?^${}()|[\\]\\\\]/g, \"\\\\$&\"); // $& means the whole matched string\n\nconst _displayItem = (item, searchTerms, highlightTerms) => {\n  const docBuilder = DOCUMENTATION_OPTIONS.BUILDER;\n  const docFileSuffix = DOCUMENTATION_OPTIONS.FILE_SUFFIX;\n  const docLinkSuffix = DOCUMENTATION_OPTIONS.LINK_SUFFIX;\n  const showSearchSummary = DOCUMENTATION_OPTIONS.SHOW_SEARCH_SUMMARY;\n  const contentRoot = document.documentElement.dataset.content_root;\n\n  const [docName, title, anchor, descr, score, _filename] = item;\n\n  let listItem = document.createElement(\"li\");\n  let requestUrl;\n  let linkUrl;\n  if (docBuilder === \"dirhtml\") {\n    // dirhtml builder\n    let dirname = docName + \"/\";\n    if (dirname.match(/\\/index\\/$/))\n      dirname = dirname.substring(0, dirname.length - 6);\n    else if (dirname === \"index/\") dirname = \"\";\n    requestUrl = contentRoot + dirname;\n    linkUrl = requestUrl;\n  } else {\n    // normal html builders\n    requestUrl = contentRoot + docName + docFileSuffix;\n    linkUrl = docName + docLinkSuffix;\n  }\n  let linkEl = listItem.appendChild(document.createElement(\"a\"));\n  linkEl.href = linkUrl + anchor;\n  linkEl.dataset.score = score;\n  linkEl.innerHTML = title;\n  if (descr) {\n    listItem.appendChild(document.createElement(\"span\")).innerHTML =\n      \" (\" + descr + \")\";\n    // highlight search terms in the description\n    if (SPHINX_HIGHLIGHT_ENABLED)  // set in sphinx_highlight.js\n      highlightTerms.forEach((term) => _highlightText(listItem, term, \"highlighted\"));\n  }\n  else if (showSearchSummary)\n    fetch(requestUrl)\n      .then((responseData) => responseData.text())\n      .then((data) => {\n        if (data)\n          listItem.appendChild(\n            Search.makeSearchSummary(data, searchTerms, anchor)\n          );\n        // highlight search terms in the summary\n        if (SPHINX_HIGHLIGHT_ENABLED)  // set in sphinx_highlight.js\n          highlightTerms.forEach((term) => _highlightText(listItem, term, \"highlighted\"));\n      });\n  Search.output.appendChild(listItem);\n};\nconst _finishSearch = (resultCount) => {\n  Search.stopPulse();\n  Search.title.innerText = _(\"Search Results\");\n  if (!resultCount)\n    Search.status.innerText = Documentation.gettext(\n      \"Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.\"\n    );\n  else\n    Search.status.innerText = _(\n      \"Search finished, found ${resultCount} page(s) matching the search query.\"\n    ).replace('${resultCount}', resultCount);\n};\nconst _displayNextItem = (\n  results,\n  resultCount,\n  searchTerms,\n  highlightTerms,\n) => {\n  // results left, load the summary and display it\n  // this is intended to be dynamic (don't sub resultsCount)\n  if (results.length) {\n    _displayItem(results.pop(), searchTerms, highlightTerms);\n    setTimeout(\n      () => _displayNextItem(results, resultCount, searchTerms, highlightTerms),\n      5\n    );\n  }\n  // search finished, update title and status message\n  else _finishSearch(resultCount);\n};\n// Helper function used by query() to order search results.\n// Each input is an array of [docname, title, anchor, descr, score, filename].\n// Order the results by score (in opposite order of appearance, since the\n// `_displayNextItem` function uses pop() to retrieve items) and then alphabetically.\nconst _orderResultsByScoreThenName = (a, b) => {\n  const leftScore = a[4];\n  const rightScore = b[4];\n  if (leftScore === rightScore) {\n    // same score: sort alphabetically\n    const leftTitle = a[1].toLowerCase();\n    const rightTitle = b[1].toLowerCase();\n    if (leftTitle === rightTitle) return 0;\n    return leftTitle > rightTitle ? -1 : 1; // inverted is intentional\n  }\n  return leftScore > rightScore ? 1 : -1;\n};\n\n/**\n * Default splitQuery function. Can be overridden in ``sphinx.search`` with a\n * custom function per language.\n *\n * The regular expression works by splitting the string on consecutive characters\n * that are not Unicode letters, numbers, underscores, or emoji characters.\n * This is the same as ``\\W+`` in Python, preserving the surrogate pair area.\n */\nif (typeof splitQuery === \"undefined\") {\n  var splitQuery = (query) => query\n      .split(/[^\\p{Letter}\\p{Number}_\\p{Emoji_Presentation}]+/gu)\n      .filter(term => term)  // remove remaining empty strings\n}\n\n/**\n * Search Module\n */\nconst Search = {\n  _index: null,\n  _queued_query: null,\n  _pulse_status: -1,\n\n  htmlToText: (htmlString, anchor) => {\n    const htmlElement = new DOMParser().parseFromString(htmlString, 'text/html');\n    for (const removalQuery of [\".headerlink\", \"script\", \"style\"]) {\n      htmlElement.querySelectorAll(removalQuery).forEach((el) => { el.remove() });\n    }\n    if (anchor) {\n      const anchorContent = htmlElement.querySelector(`[role=\"main\"] ${anchor}`);\n      if (anchorContent) return anchorContent.textContent;\n\n      console.warn(\n        `Anchored content block not found. Sphinx search tries to obtain it via DOM query '[role=main] ${anchor}'. Check your theme or template.`\n      );\n    }\n\n    // if anchor not specified or not found, fall back to main content\n    const docContent = htmlElement.querySelector('[role=\"main\"]');\n    if (docContent) return docContent.textContent;\n\n    console.warn(\n      \"Content block not found. Sphinx search tries to obtain it via DOM query '[role=main]'. Check your theme or template.\"\n    );\n    return \"\";\n  },\n\n  init: () => {\n    const query = new URLSearchParams(window.location.search).get(\"q\");\n    document\n      .querySelectorAll('input[name=\"q\"]')\n      .forEach((el) => (el.value = query));\n    if (query) Search.performSearch(query);\n  },\n\n  loadIndex: (url) =>\n    (document.body.appendChild(document.createElement(\"script\")).src = url),\n\n  setIndex: (index) => {\n    Search._index = index;\n    if (Search._queued_query !== null) {\n      const query = Search._queued_query;\n      Search._queued_query = null;\n      Search.query(query);\n    }\n  },\n\n  hasIndex: () => Search._index !== null,\n\n  deferQuery: (query) => (Search._queued_query = query),\n\n  stopPulse: () => (Search._pulse_status = -1),\n\n  startPulse: () => {\n    if (Search._pulse_status >= 0) return;\n\n    const pulse = () => {\n      Search._pulse_status = (Search._pulse_status + 1) % 4;\n      Search.dots.innerText = \".\".repeat(Search._pulse_status);\n      if (Search._pulse_status >= 0) window.setTimeout(pulse, 500);\n    };\n    pulse();\n  },\n\n  /**\n   * perform a search for something (or wait until index is loaded)\n   */\n  performSearch: (query) => {\n    // create the required interface elements\n    const searchText = document.createElement(\"h2\");\n    searchText.textContent = _(\"Searching\");\n    const searchSummary = document.createElement(\"p\");\n    searchSummary.classList.add(\"search-summary\");\n    searchSummary.innerText = \"\";\n    const searchList = document.createElement(\"ul\");\n    searchList.classList.add(\"search\");\n\n    const out = document.getElementById(\"search-results\");\n    Search.title = out.appendChild(searchText);\n    Search.dots = Search.title.appendChild(document.createElement(\"span\"));\n    Search.status = out.appendChild(searchSummary);\n    Search.output = out.appendChild(searchList);\n\n    const searchProgress = document.getElementById(\"search-progress\");\n    // Some themes don't use the search progress node\n    if (searchProgress) {\n      searchProgress.innerText = _(\"Preparing search...\");\n    }\n    Search.startPulse();\n\n    // index already loaded, the browser was quick!\n    if (Search.hasIndex()) Search.query(query);\n    else Search.deferQuery(query);\n  },\n\n  _parseQuery: (query) => {\n    // stem the search terms and add them to the correct list\n    const stemmer = new Stemmer();\n    const searchTerms = new Set();\n    const excludedTerms = new Set();\n    const highlightTerms = new Set();\n    const objectTerms = new Set(splitQuery(query.toLowerCase().trim()));\n    splitQuery(query.trim()).forEach((queryTerm) => {\n      const queryTermLower = queryTerm.toLowerCase();\n\n      // maybe skip this \"word\"\n      // stopwords array is from language_data.js\n      if (\n        stopwords.indexOf(queryTermLower) !== -1 ||\n        queryTerm.match(/^\\d+$/)\n      )\n        return;\n\n      // stem the word\n      let word = stemmer.stemWord(queryTermLower);\n      // select the correct list\n      if (word[0] === \"-\") excludedTerms.add(word.substr(1));\n      else {\n        searchTerms.add(word);\n        highlightTerms.add(queryTermLower);\n      }\n    });\n\n    if (SPHINX_HIGHLIGHT_ENABLED) {  // set in sphinx_highlight.js\n      localStorage.setItem(\"sphinx_highlight_terms\", [...highlightTerms].join(\" \"))\n    }\n\n    // console.debug(\"SEARCH: searching for:\");\n    // console.info(\"required: \", [...searchTerms]);\n    // console.info(\"excluded: \", [...excludedTerms]);\n\n    return [query, searchTerms, excludedTerms, highlightTerms, objectTerms];\n  },\n\n  /**\n   * execute search (requires search index to be loaded)\n   */\n  _performSearch: (query, searchTerms, excludedTerms, highlightTerms, objectTerms) => {\n    const filenames = Search._index.filenames;\n    const docNames = Search._index.docnames;\n    const titles = Search._index.titles;\n    const allTitles = Search._index.alltitles;\n    const indexEntries = Search._index.indexentries;\n\n    // Collect multiple result groups to be sorted separately and then ordered.\n    // Each is an array of [docname, title, anchor, descr, score, filename].\n    const normalResults = [];\n    const nonMainIndexResults = [];\n\n    _removeChildren(document.getElementById(\"search-progress\"));\n\n    const queryLower = query.toLowerCase().trim();\n    for (const [title, foundTitles] of Object.entries(allTitles)) {\n      if (title.toLowerCase().trim().includes(queryLower) && (queryLower.length >= title.length/2)) {\n        for (const [file, id] of foundTitles) {\n          const score = Math.round(Scorer.title * queryLower.length / title.length);\n          const boost = titles[file] === title ? 1 : 0;  // add a boost for document titles\n          normalResults.push([\n            docNames[file],\n            titles[file] !== title ? `${titles[file]} > ${title}` : title,\n            id !== null ? \"#\" + id : \"\",\n            null,\n            score + boost,\n            filenames[file],\n          ]);\n        }\n      }\n    }\n\n    // search for explicit entries in index directives\n    for (const [entry, foundEntries] of Object.entries(indexEntries)) {\n      if (entry.includes(queryLower) && (queryLower.length >= entry.length/2)) {\n        for (const [file, id, isMain] of foundEntries) {\n          const score = Math.round(100 * queryLower.length / entry.length);\n          const result = [\n            docNames[file],\n            titles[file],\n            id ? \"#\" + id : \"\",\n            null,\n            score,\n            filenames[file],\n          ];\n          if (isMain) {\n            normalResults.push(result);\n          } else {\n            nonMainIndexResults.push(result);\n          }\n        }\n      }\n    }\n\n    // lookup as object\n    objectTerms.forEach((term) =>\n      normalResults.push(...Search.performObjectSearch(term, objectTerms))\n    );\n\n    // lookup as search terms in fulltext\n    normalResults.push(...Search.performTermsSearch(searchTerms, excludedTerms));\n\n    // let the scorer override scores with a custom scoring function\n    if (Scorer.score) {\n      normalResults.forEach((item) => (item[4] = Scorer.score(item)));\n      nonMainIndexResults.forEach((item) => (item[4] = Scorer.score(item)));\n    }\n\n    // Sort each group of results by score and then alphabetically by name.\n    normalResults.sort(_orderResultsByScoreThenName);\n    nonMainIndexResults.sort(_orderResultsByScoreThenName);\n\n    // Combine the result groups in (reverse) order.\n    // Non-main index entries are typically arbitrary cross-references,\n    // so display them after other results.\n    let results = [...nonMainIndexResults, ...normalResults];\n\n    // remove duplicate search results\n    // note the reversing of results, so that in the case of duplicates, the highest-scoring entry is kept\n    let seen = new Set();\n    results = results.reverse().reduce((acc, result) => {\n      let resultStr = result.slice(0, 4).concat([result[5]]).map(v => String(v)).join(',');\n      if (!seen.has(resultStr)) {\n        acc.push(result);\n        seen.add(resultStr);\n      }\n      return acc;\n    }, []);\n\n    return results.reverse();\n  },\n\n  query: (query) => {\n    const [searchQuery, searchTerms, excludedTerms, highlightTerms, objectTerms] = Search._parseQuery(query);\n    const results = Search._performSearch(searchQuery, searchTerms, excludedTerms, highlightTerms, objectTerms);\n\n    // for debugging\n    //Search.lastresults = results.slice();  // a copy\n    // console.info(\"search results:\", Search.lastresults);\n\n    // print the results\n    _displayNextItem(results, results.length, searchTerms, highlightTerms);\n  },\n\n  /**\n   * search for object names\n   */\n  performObjectSearch: (object, objectTerms) => {\n    const filenames = Search._index.filenames;\n    const docNames = Search._index.docnames;\n    const objects = Search._index.objects;\n    const objNames = Search._index.objnames;\n    const titles = Search._index.titles;\n\n    const results = [];\n\n    const objectSearchCallback = (prefix, match) => {\n      const name = match[4]\n      const fullname = (prefix ? prefix + \".\" : \"\") + name;\n      const fullnameLower = fullname.toLowerCase();\n      if (fullnameLower.indexOf(object) < 0) return;\n\n      let score = 0;\n      const parts = fullnameLower.split(\".\");\n\n      // check for different match types: exact matches of full name or\n      // \"last name\" (i.e. last dotted part)\n      if (fullnameLower === object || parts.slice(-1)[0] === object)\n        score += Scorer.objNameMatch;\n      else if (parts.slice(-1)[0].indexOf(object) > -1)\n        score += Scorer.objPartialMatch; // matches in last name\n\n      const objName = objNames[match[1]][2];\n      const title = titles[match[0]];\n\n      // If more than one term searched for, we require other words to be\n      // found in the name/title/description\n      const otherTerms = new Set(objectTerms);\n      otherTerms.delete(object);\n      if (otherTerms.size > 0) {\n        const haystack = `${prefix} ${name} ${objName} ${title}`.toLowerCase();\n        if (\n          [...otherTerms].some((otherTerm) => haystack.indexOf(otherTerm) < 0)\n        )\n          return;\n      }\n\n      let anchor = match[3];\n      if (anchor === \"\") anchor = fullname;\n      else if (anchor === \"-\") anchor = objNames[match[1]][1] + \"-\" + fullname;\n\n      const descr = objName + _(\", in \") + title;\n\n      // add custom score for some objects according to scorer\n      if (Scorer.objPrio.hasOwnProperty(match[2]))\n        score += Scorer.objPrio[match[2]];\n      else score += Scorer.objPrioDefault;\n\n      results.push([\n        docNames[match[0]],\n        fullname,\n        \"#\" + anchor,\n        descr,\n        score,\n        filenames[match[0]],\n      ]);\n    };\n    Object.keys(objects).forEach((prefix) =>\n      objects[prefix].forEach((array) =>\n        objectSearchCallback(prefix, array)\n      )\n    );\n    return results;\n  },\n\n  /**\n   * search for full-text terms in the index\n   */\n  performTermsSearch: (searchTerms, excludedTerms) => {\n    // prepare search\n    const terms = Search._index.terms;\n    const titleTerms = Search._index.titleterms;\n    const filenames = Search._index.filenames;\n    const docNames = Search._index.docnames;\n    const titles = Search._index.titles;\n\n    const scoreMap = new Map();\n    const fileMap = new Map();\n\n    // perform the search on the required terms\n    searchTerms.forEach((word) => {\n      const files = [];\n      const arr = [\n        { files: terms[word], score: Scorer.term },\n        { files: titleTerms[word], score: Scorer.title },\n      ];\n      // add support for partial matches\n      if (word.length > 2) {\n        const escapedWord = _escapeRegExp(word);\n        if (!terms.hasOwnProperty(word)) {\n          Object.keys(terms).forEach((term) => {\n            if (term.match(escapedWord))\n              arr.push({ files: terms[term], score: Scorer.partialTerm });\n          });\n        }\n        if (!titleTerms.hasOwnProperty(word)) {\n          Object.keys(titleTerms).forEach((term) => {\n            if (term.match(escapedWord))\n              arr.push({ files: titleTerms[term], score: Scorer.partialTitle });\n          });\n        }\n      }\n\n      // no match but word was a required one\n      if (arr.every((record) => record.files === undefined)) return;\n\n      // found search word in contents\n      arr.forEach((record) => {\n        if (record.files === undefined) return;\n\n        let recordFiles = record.files;\n        if (recordFiles.length === undefined) recordFiles = [recordFiles];\n        files.push(...recordFiles);\n\n        // set score for the word in each file\n        recordFiles.forEach((file) => {\n          if (!scoreMap.has(file)) scoreMap.set(file, {});\n          scoreMap.get(file)[word] = record.score;\n        });\n      });\n\n      // create the mapping\n      files.forEach((file) => {\n        if (!fileMap.has(file)) fileMap.set(file, [word]);\n        else if (fileMap.get(file).indexOf(word) === -1) fileMap.get(file).push(word);\n      });\n    });\n\n    // now check if the files don't contain excluded terms\n    const results = [];\n    for (const [file, wordList] of fileMap) {\n      // check if all requirements are matched\n\n      // as search terms with length < 3 are discarded\n      const filteredTermCount = [...searchTerms].filter(\n        (term) => term.length > 2\n      ).length;\n      if (\n        wordList.length !== searchTerms.size &&\n        wordList.length !== filteredTermCount\n      )\n        continue;\n\n      // ensure that none of the excluded terms is in the search result\n      if (\n        [...excludedTerms].some(\n          (term) =>\n            terms[term] === file ||\n            titleTerms[term] === file ||\n            (terms[term] || []).includes(file) ||\n            (titleTerms[term] || []).includes(file)\n        )\n      )\n        break;\n\n      // select one (max) score for the file.\n      const score = Math.max(...wordList.map((w) => scoreMap.get(file)[w]));\n      // add result to the result list\n      results.push([\n        docNames[file],\n        titles[file],\n        \"\",\n        null,\n        score,\n        filenames[file],\n      ]);\n    }\n    return results;\n  },\n\n  /**\n   * helper function to return a node containing the\n   * search summary for a given text. keywords is a list\n   * of stemmed words.\n   */\n  makeSearchSummary: (htmlText, keywords, anchor) => {\n    const text = Search.htmlToText(htmlText, anchor);\n    if (text === \"\") return null;\n\n    const textLower = text.toLowerCase();\n    const actualStartPosition = [...keywords]\n      .map((k) => textLower.indexOf(k.toLowerCase()))\n      .filter((i) => i > -1)\n      .slice(-1)[0];\n    const startWithContext = Math.max(actualStartPosition - 120, 0);\n\n    const top = startWithContext === 0 ? \"\" : \"...\";\n    const tail = startWithContext + 240 < text.length ? \"...\" : \"\";\n\n    let summary = document.createElement(\"p\");\n    summary.classList.add(\"context\");\n    summary.textContent = top + text.substr(startWithContext, 240).trim() + tail;\n\n    return summary;\n  },\n};\n\n_ready(Search.init);\n"
  },
  {
    "path": "docs/_static/sphinx_highlight.js",
    "content": "/* Highlighting utilities for Sphinx HTML documentation. */\n\"use strict\";\n\nconst SPHINX_HIGHLIGHT_ENABLED = true\n\n/**\n * highlight a given string on a node by wrapping it in\n * span elements with the given class name.\n */\nconst _highlight = (node, addItems, text, className) => {\n  if (node.nodeType === Node.TEXT_NODE) {\n    const val = node.nodeValue;\n    const parent = node.parentNode;\n    const pos = val.toLowerCase().indexOf(text);\n    if (\n      pos >= 0 &&\n      !parent.classList.contains(className) &&\n      !parent.classList.contains(\"nohighlight\")\n    ) {\n      let span;\n\n      const closestNode = parent.closest(\"body, svg, foreignObject\");\n      const isInSVG = closestNode && closestNode.matches(\"svg\");\n      if (isInSVG) {\n        span = document.createElementNS(\"http://www.w3.org/2000/svg\", \"tspan\");\n      } else {\n        span = document.createElement(\"span\");\n        span.classList.add(className);\n      }\n\n      span.appendChild(document.createTextNode(val.substr(pos, text.length)));\n      const rest = document.createTextNode(val.substr(pos + text.length));\n      parent.insertBefore(\n        span,\n        parent.insertBefore(\n          rest,\n          node.nextSibling\n        )\n      );\n      node.nodeValue = val.substr(0, pos);\n      /* There may be more occurrences of search term in this node. So call this\n       * function recursively on the remaining fragment.\n       */\n      _highlight(rest, addItems, text, className);\n\n      if (isInSVG) {\n        const rect = document.createElementNS(\n          \"http://www.w3.org/2000/svg\",\n          \"rect\"\n        );\n        const bbox = parent.getBBox();\n        rect.x.baseVal.value = bbox.x;\n        rect.y.baseVal.value = bbox.y;\n        rect.width.baseVal.value = bbox.width;\n        rect.height.baseVal.value = bbox.height;\n        rect.setAttribute(\"class\", className);\n        addItems.push({ parent: parent, target: rect });\n      }\n    }\n  } else if (node.matches && !node.matches(\"button, select, textarea\")) {\n    node.childNodes.forEach((el) => _highlight(el, addItems, text, className));\n  }\n};\nconst _highlightText = (thisNode, text, className) => {\n  let addItems = [];\n  _highlight(thisNode, addItems, text, className);\n  addItems.forEach((obj) =>\n    obj.parent.insertAdjacentElement(\"beforebegin\", obj.target)\n  );\n};\n\n/**\n * Small JavaScript module for the documentation.\n */\nconst SphinxHighlight = {\n\n  /**\n   * highlight the search words provided in localstorage in the text\n   */\n  highlightSearchWords: () => {\n    if (!SPHINX_HIGHLIGHT_ENABLED) return;  // bail if no highlight\n\n    // get and clear terms from localstorage\n    const url = new URL(window.location);\n    const highlight =\n        localStorage.getItem(\"sphinx_highlight_terms\")\n        || url.searchParams.get(\"highlight\")\n        || \"\";\n    localStorage.removeItem(\"sphinx_highlight_terms\")\n    url.searchParams.delete(\"highlight\");\n    window.history.replaceState({}, \"\", url);\n\n    // get individual terms from highlight string\n    const terms = highlight.toLowerCase().split(/\\s+/).filter(x => x);\n    if (terms.length === 0) return; // nothing to do\n\n    // There should never be more than one element matching \"div.body\"\n    const divBody = document.querySelectorAll(\"div.body\");\n    const body = divBody.length ? divBody[0] : document.querySelector(\"body\");\n    window.setTimeout(() => {\n      terms.forEach((term) => _highlightText(body, term, \"highlighted\"));\n    }, 10);\n\n    const searchBox = document.getElementById(\"searchbox\");\n    if (searchBox === null) return;\n    searchBox.appendChild(\n      document\n        .createRange()\n        .createContextualFragment(\n          '<p class=\"highlight-link\">' +\n            '<a href=\"javascript:SphinxHighlight.hideSearchWords()\">' +\n            _(\"Hide Search Matches\") +\n            \"</a></p>\"\n        )\n    );\n  },\n\n  /**\n   * helper function to hide the search marks again\n   */\n  hideSearchWords: () => {\n    document\n      .querySelectorAll(\"#searchbox .highlight-link\")\n      .forEach((el) => el.remove());\n    document\n      .querySelectorAll(\"span.highlighted\")\n      .forEach((el) => el.classList.remove(\"highlighted\"));\n    localStorage.removeItem(\"sphinx_highlight_terms\")\n  },\n\n  initEscapeListener: () => {\n    // only install a listener if it is really needed\n    if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) return;\n\n    document.addEventListener(\"keydown\", (event) => {\n      // bail for input elements\n      if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return;\n      // bail with special keys\n      if (event.shiftKey || event.altKey || event.ctrlKey || event.metaKey) return;\n      if (DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS && (event.key === \"Escape\")) {\n        SphinxHighlight.hideSearchWords();\n        event.preventDefault();\n      }\n    });\n  },\n};\n\n_ready(() => {\n  /* Do not call highlightSearchWords() when we are on the search page.\n   * It will highlight words from the *previous* search query.\n   */\n  if (typeof Search === \"undefined\") SphinxHighlight.highlightSearchWords();\n  SphinxHighlight.initEscapeListener();\n});\n"
  },
  {
    "path": "docs/appendix/1-jupyter-notebook.html",
    "content": "<!DOCTYPE html>\n\n<html lang=\"jp\" data-content_root=\"../\">\n  <head>\n    <meta charset=\"utf-8\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" /><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n\n    <!-- Google tag (gtag.js) -->\n    <script async src=\"https://www.googletagmanager.com/gtag/js?id=G-8M0RXGPPSR\"></script>\n    <script>\n        window.dataLayer = window.dataLayer || [];\n        function gtag(){dataLayer.push(arguments);}\n        gtag('js', new Date());\n        gtag('config', 'G-8M0RXGPPSR');\n    </script>\n    \n    <title>▲Jupyter Notebook の使い方 &#8212; Pythonプログラミング入門  documentation</title>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/pygments.css?v=d1102ebc\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/basic.css?v=c058f7c8\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/alabaster.css?v=27fed22d\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/nbsphinx-code-cells.css\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/custom.css?v=1a1aa8dd\" />\n    <script src=\"../_static/documentation_options.js?v=3ff7d7a7\"></script>\n    <script src=\"../_static/doctools.js?v=9a2dae69\"></script>\n    <script src=\"../_static/sphinx_highlight.js?v=dc90522c\"></script>\n    <script crossorigin=\"anonymous\" integrity=\"sha256-Ae2Vz/4ePdIu6ZyI/5ZGsYnb+m0JlOmKPjt6XZ9JJkA=\" src=\"https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.4/require.min.js\"></script>\n    <script>window.MathJax = {\"tex\": {\"inlineMath\": [[\"$\", \"$\"], [\"\\\\(\", \"\\\\)\"]], \"processEscapes\": true}, \"options\": {\"ignoreHtmlClass\": \"tex2jax_ignore|mathjax_ignore|document\", \"processHtmlClass\": \"tex2jax_process|mathjax_process|math|output_area\"}}</script>\n    <script defer=\"defer\" src=\"https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js\"></script>\n    <link rel=\"index\" title=\"Index\" href=\"../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../search.html\" />\n    <link rel=\"next\" title=\"▲セット (set)\" href=\"2-set.html\" />\n    <link rel=\"prev\" title=\"7-2. scikit-learnライブラリ\" href=\"../7/7-2.html\" />\n   \n  <link rel=\"stylesheet\" href=\"../_static/custom.css\" type=\"text/css\" />\n  \n\n  \n  \n\n  </head><body>\n  \n\n    <div class=\"document\">\n      <div class=\"documentwrapper\">\n        <div class=\"bodywrapper\">\n          \n\n          <div class=\"body\" role=\"main\">\n            \n  <section id=\"▲Jupyter-Notebook-の使い方\">\n<h1>▲Jupyter Notebook の使い方<a class=\"headerlink\" href=\"#▲Jupyter-Notebook-の使い方\" title=\"Link to this heading\">¶</a></h1>\n<p>Jupyter Notebook について説明します。</p>\n<p>参考</p>\n<ul class=\"simple\">\n<li><p><a class=\"reference external\" href=\"https://jupyter.readthedocs.io/en/latest/\">https://jupyter.readthedocs.io/en/latest/</a></p></li>\n</ul>\n<p>教材等の既存のノートブックは、 ディレクトリのページで選択することによって開くことができます。 ノートブックには <code class=\"docutils literal notranslate\"><span class=\"pre\">ipynb</span></code> という拡張子（エクステンション）が付きます。</p>\n<p>ノートブックを新たに作成するには、ディレクトリが表示されているページで、 <code class=\"docutils literal notranslate\"><span class=\"pre\">New</span></code> のメニューで <code class=\"docutils literal notranslate\"><span class=\"pre\">Python3</span></code> を選択してください。 <code class=\"docutils literal notranslate\"><span class=\"pre\">Untitled</span></code>（<code class=\"docutils literal notranslate\"><span class=\"pre\">1</span></code> などが付くことあり）というノートブックが作られます。 タイトルをクリックして変更することができます。</p>\n<p>ノートブックの上方には、<code class=\"docutils literal notranslate\"><span class=\"pre\">File</span></code> や <code class=\"docutils literal notranslate\"><span class=\"pre\">Edit</span></code> などのメニュー、 <code class=\"docutils literal notranslate\"><span class=\"pre\">↓</span></code> や <code class=\"docutils literal notranslate\"><span class=\"pre\">↑</span></code> や <code class=\"docutils literal notranslate\"><span class=\"pre\">■</span></code> などのアイコンが表示されています。</p>\n<p>右上に <code class=\"docutils literal notranslate\"><span class=\"pre\">Python</span> <span class=\"pre\">3</span></code> と表示されていることに注意してください。</p>\n<p>Ctrl+s（Macの場合は Cmd+s）を入力することによって、 ノートブックをファイルにセーブできます。 オートセーブもされますが、適当なタイミングでセーブしましょう。</p>\n<p>ノートブックはセルから成り立っています。</p>\n<section id=\"セル\">\n<h2>セル<a class=\"headerlink\" href=\"#セル\" title=\"Link to this heading\">¶</a></h2>\n<p>主に次の二種類のセルを使います。</p>\n<ul class=\"simple\">\n<li><p>Code： Pythonのコードが書かれたセルです。 Codeセルの横には <code class=\"docutils literal notranslate\"><span class=\"pre\">In</span> <span class=\"pre\">[</span> <span class=\"pre\">]:</span></code> と表示されています。 コードを実行するには、Shift+Enter（または Return）を押します。 このセルの次のセルはCodeセルです。Shift+Enterを押してみてください。</p></li>\n<li><p>Markdown： 説明が書かれたセルです。 このセル自身はMarkdownセルです。</p></li>\n</ul>\n<p>セルの種類はノートブックの上のメニューで変更できます。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[ ]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-python notranslate\"><div class=\"highlight\"><pre><span></span>\n</pre></div>\n</div>\n</div>\n</section>\n<section id=\"コマンドモード\">\n<h2>コマンドモード<a class=\"headerlink\" href=\"#コマンドモード\" title=\"Link to this heading\">¶</a></h2>\n<p>セルを選択するとコマンドモードになります。 ただし、Codeセルを選択したとき、 マウスカーソルが入力フィールドに入っていると、 編集モードになってしまいます。</p>\n<p>コマンドモードでは、セルの左の線が青色になります。</p>\n<p>コマンドモードで Enter を入力すると、編集モードになります。 Markdownのセルでは、ダブルクリックでも編集モードになります。</p>\n<p>コマンドモードでは、一文字コマンドが有効なので注意してください。</p>\n<ul class=\"simple\">\n<li><p>a: 上にセルを挿入 (above)</p></li>\n<li><p>b: 下にセルを挿入 (below)</p></li>\n<li><p>x: セルを削除（そのセルが削除されてしまいますので注意！）</p></li>\n<li><p>l: セルの行に番号を振るか振らないかをスイッチ</p></li>\n<li><p>s または Ctrl+s: ノートブックをセーブ (checkpoint)</p></li>\n<li><p>Enter: 編集モードに移行</p></li>\n<li><p>Shift+Enter: セルを実行して次のセルに</p></li>\n</ul>\n</section>\n<section id=\"編集モード\">\n<h2>編集モード<a class=\"headerlink\" href=\"#編集モード\" title=\"Link to this heading\">¶</a></h2>\n<p>編集モードでは文字カーソルが表示されて、セルの編集が可能です。 Ctrl の付かない文字はそのまま挿入されます。</p>\n<p>編集モードでは、セルの左の線が緑色になります。</p>\n<p>編集モードでは、以下のような編集コマンドが使えます。</p>\n<ul class=\"simple\">\n<li><p>Ctrl+c: copy</p></li>\n<li><p>Ctrl+x: cut</p></li>\n<li><p>Ctrl+v: paste</p></li>\n<li><p>Ctrl+z: undo</p></li>\n<li><p>…</p></li>\n</ul>\n<p>Codeセルでは、編集モードでも Shift+Enter を入力すると、 セルの中のコードが実行されて、次のセルに移動します。 Markdownセルはフォーマットされて、次のセルに移動します。 次のセルではコマンドモードになっています。</p>\n<p>Esc でコマンドモードになります。</p>\n<p>Ctrl+s でノートブックをセーブ (checkpoint)。 これはコマンドモードの場合と同じです。</p>\n</section>\n<section id=\"練習\">\n<h2>練習<a class=\"headerlink\" href=\"#練習\" title=\"Link to this heading\">¶</a></h2>\n<p>次のセルを編集モードにして <code class=\"docutils literal notranslate\"><span class=\"pre\">10/3</span></code> と入力して実行してください。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[ ]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-python notranslate\"><div class=\"highlight\"><pre><span></span>\n</pre></div>\n</div>\n</div>\n</section>\n<section id=\"（注意）Shift-Enterに反応がなくなったとき\">\n<h2>（注意）Shift-Enterに反応がなくなったとき<a class=\"headerlink\" href=\"#（注意）Shift-Enterに反応がなくなったとき\" title=\"Link to this heading\">¶</a></h2>\n<p>CodeセルでShift-Enterをしても反応がないとき、 特にセルの左の部分が</p>\n<div class=\"highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>In [*]:\n</pre></div>\n</div>\n<p>となったままで、* が数に置き換わらないとき、 <code class=\"docutils literal notranslate\"><span class=\"pre\">■</span></code> のアイコンを押して、 kernel（Pythonのインタープリタ）を停止させてください。</p>\n<p>それでも反応がないときは、右回りの矢印のアイコンを押して、 kernel（Pythonのインタープリタ）を起動し直してください。</p>\n<p>たとえば、次のような例です。<code class=\"docutils literal notranslate\"><span class=\"pre\">■</span></code> のアイコンを押してください。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[ ]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-python notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">while</span> <span class=\"kc\">True</span><span class=\"p\">:</span>\n    <span class=\"k\">pass</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[ ]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-python notranslate\"><div class=\"highlight\"><pre><span></span>\n</pre></div>\n</div>\n</div>\n</section>\n</section>\n\n\n          </div>\n          \n        </div>\n      </div>\n      <div class=\"sphinxsidebar\" role=\"navigation\" aria-label=\"Main\">\n        <div class=\"sphinxsidebarwrapper\">\n<h1 class=\"logo\"><a href=\"../index.html\">Pythonプログラミング入門</a></h1>\n\n\n\n\n\n\n\n\n<p>\n  <a style=\"font-family: sans-serif; font-size: smaller; background: linear-gradient(to top, #353535 0%, #141414 100%); -webkit-font-smoothing: antialiased; font-weight: normal; text-shadow: rgb(0 0 0 / 40%) 0 -1px 0; padding: 2px 6px; color: #fff; text-decoration: none; border-radius: 4px; border: 1px solid #0d0d0d; box-shadow: inset 0 1px 1px 0 #8f8f8f;\" href=\"https://github.com/utokyo-ipp/utokyo-ipp.github.io\">View on GitHub</a>\n</p><p>\n  <a style=\"font-family: sans-serif; font-size: smaller; background: linear-gradient(to top, #ff1e00 0%, #de1e00 100%); -webkit-font-smoothing: antialiased; font-weight: normal; text-shadow: rgb(0 0 0 / 40%) 0 -1px 0; padding: 2px 6px; color: #fff; text-decoration: none; border-radius: 4px; border: 1px solid #0d0d0d; box-shadow: inset 0 1px 1px 0 #ff8e70;\" href=\"https://utokyo-ipp.github.io/IPP_textbook.pdf\">View PDF</a>\n</p><p>\n  <a style=\"border-bottom: none;\" href=\"https://colab.research.google.com/github/utokyo-ipp/utokyo-ipp.github.io/blob/master/colab/appendix/1-jupyter-notebook.ipynb\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Google Colaboratory\"></a>\n</p><h3>Navigation</h3>\n<ul class=\"current\">\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../1/1-0.html\">1-0. Colaboratory (Colab) の使い方</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../1/1-1.html\">1-1. 数値演算</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../1/1-2.html\">1-2. 変数と関数の基礎</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../1/1-3.html\">1-3. 論理・比較演算と条件分岐の基礎</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../1/1-4.html\">1-4. テストとデバッグ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../2/2-1.html\">2-1. 文字列 (string)</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../2/2-2.html\">2-2. リスト (list)</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../2/2-3.html\">2-3. 条件分岐</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../3/3-1.html\">3-1. 辞書 (dictionary)</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../3/3-2.html\">3-2. 繰り返し</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../3/3-3.html\">3-3. 関数</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../4/4-1.html\">4-1. ファイル入出力の基本</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../4/4-2.html\">4-2. イテラブルとイテレータ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../4/4-3.html\">4-3. ディレクトリと木構造</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../5/5-1.html\">5-1. モジュールの使い方</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../5/5-2.html\">5-2. モジュールの作り方</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../5/5-3.html\">5-3. NumPyライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../6/6-1.html\">6-1. 内包表記</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../6/6-2.html\">6-2. 高階関数</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../6/6-3.html\">6-3. クラス</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../7/7-1.html\">7-1. pandasライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../7/7-2.html\">7-2. scikit-learnライブラリ</a></li>\n<li class=\"toctree-l1 current\"><a class=\"current reference internal\" href=\"#\">▲Jupyter Notebook の使い方</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#セル\">セル</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#コマンドモード\">コマンドモード</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#編集モード\">編集モード</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#練習\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#（注意）Shift-Enterに反応がなくなったとき\">（注意）Shift-Enterに反応がなくなったとき</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"2-set.html\">▲セット (set)</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"3-recursion.html\">▲再帰</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"3-visualization.html\">▲簡単なデータの可視化</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"4-csv.html\">▲CSVファイルの入出力</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"5-bokeh.html\">▲Bokehライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"5-command.html\">▲Pythonスクリプトとコマンドライン実行</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"5-matplotlib.html\">▲Matplotlibライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"5-re.html\">▲正規表現</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../index_of_terms.html\">索引</a></li>\n</ul>\n\n<div class=\"relations\">\n<h3>Related Topics</h3>\n<ul>\n  <li><a href=\"../index.html\">Documentation overview</a><ul>\n      <li>Previous: <a href=\"../7/7-2.html\" title=\"previous chapter\">7-2. scikit-learnライブラリ</a></li>\n      <li>Next: <a href=\"2-set.html\" title=\"next chapter\">▲セット (set)</a></li>\n  </ul></li>\n</ul>\n</div>\n<search id=\"searchbox\" style=\"display: none\" role=\"search\">\n  <h3 id=\"searchlabel\">Quick search</h3>\n    <div class=\"searchformwrapper\">\n    <form class=\"search\" action=\"../search.html\" method=\"get\">\n      <input type=\"text\" name=\"q\" aria-labelledby=\"searchlabel\" autocomplete=\"off\" autocorrect=\"off\" autocapitalize=\"off\" spellcheck=\"false\"/>\n      <input type=\"submit\" value=\"Go\" />\n    </form>\n    </div>\n</search>\n<script>document.getElementById('searchbox').style.display = \"block\"</script>\n\n\n\n\n\n\n\n\n        </div>\n      </div>\n      <div class=\"clearer\"></div>\n    </div>\n    <div class=\"footer\">\n      &#169;2020–2024, 東京大学 数理・情報教育研究センター (CC BY-NC-ND 4.0).\n      \n      |\n      Powered by <a href=\"https://www.sphinx-doc.org/\">Sphinx 8.0.2</a>\n      &amp; <a href=\"https://alabaster.readthedocs.io\">Alabaster 1.0.0</a>\n      \n    </div>\n\n    \n\n    \n    <script>\n\n      var _gaq = _gaq || [];\n      _gaq.push(['_setAccount', 'G-8M0RXGPPSR']);\n      _gaq.push(['_setDomainName', 'none']);\n      _gaq.push(['_setAllowLinker', true]);\n      _gaq.push(['_trackPageview']);\n\n      (function() {\n        var ga = document.createElement('script'); ga.async = true;\n        ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'https://www') + '.google-analytics.com/ga.js';\n        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);\n      })();\n\n    </script>\n    \n  </body>\n</html>"
  },
  {
    "path": "docs/appendix/2-set.html",
    "content": "<!DOCTYPE html>\n\n<html lang=\"jp\" data-content_root=\"../\">\n  <head>\n    <meta charset=\"utf-8\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" /><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n\n    <!-- Google tag (gtag.js) -->\n    <script async src=\"https://www.googletagmanager.com/gtag/js?id=G-8M0RXGPPSR\"></script>\n    <script>\n        window.dataLayer = window.dataLayer || [];\n        function gtag(){dataLayer.push(arguments);}\n        gtag('js', new Date());\n        gtag('config', 'G-8M0RXGPPSR');\n    </script>\n    \n    <title>▲セット (set) &#8212; Pythonプログラミング入門  documentation</title>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/pygments.css?v=d1102ebc\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/basic.css?v=c058f7c8\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/alabaster.css?v=27fed22d\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/nbsphinx-code-cells.css\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/custom.css?v=1a1aa8dd\" />\n    <script src=\"../_static/documentation_options.js?v=3ff7d7a7\"></script>\n    <script src=\"../_static/doctools.js?v=9a2dae69\"></script>\n    <script src=\"../_static/sphinx_highlight.js?v=dc90522c\"></script>\n    <script crossorigin=\"anonymous\" integrity=\"sha256-Ae2Vz/4ePdIu6ZyI/5ZGsYnb+m0JlOmKPjt6XZ9JJkA=\" src=\"https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.4/require.min.js\"></script>\n    <script>window.MathJax = {\"tex\": {\"inlineMath\": [[\"$\", \"$\"], [\"\\\\(\", \"\\\\)\"]], \"processEscapes\": true}, \"options\": {\"ignoreHtmlClass\": \"tex2jax_ignore|mathjax_ignore|document\", \"processHtmlClass\": \"tex2jax_process|mathjax_process|math|output_area\"}}</script>\n    <script defer=\"defer\" src=\"https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js\"></script>\n    <link rel=\"index\" title=\"Index\" href=\"../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../search.html\" />\n    <link rel=\"next\" title=\"▲再帰\" href=\"3-recursion.html\" />\n    <link rel=\"prev\" title=\"▲Jupyter Notebook の使い方\" href=\"1-jupyter-notebook.html\" />\n   \n  <link rel=\"stylesheet\" href=\"../_static/custom.css\" type=\"text/css\" />\n  \n\n  \n  \n\n  </head><body>\n  \n\n    <div class=\"document\">\n      <div class=\"documentwrapper\">\n        <div class=\"bodywrapper\">\n          \n\n          <div class=\"body\" role=\"main\">\n            \n  <section id=\"▲セット-(set)\">\n<h1>▲セット (set)<a class=\"headerlink\" href=\"#▲セット-(set)\" title=\"Link to this heading\">¶</a></h1>\n<p>セットについて説明します。</p>\n<p>参考</p>\n<ul class=\"simple\">\n<li><p><a class=\"reference external\" href=\"https://docs.python.org/ja/3/tutorial/datastructures.html#sets\">https://docs.python.org/ja/3/tutorial/datastructures.html#sets</a></p></li>\n</ul>\n<p><strong>セット</strong>（<strong>集合</strong>）は、リストと同様に複数の要素から構成されるデータです。 セットでは、リストと異なり要素の重複がありません、また要素の順番もありません。</p>\n<p>セットを作成するには、次のように波括弧で要素を囲みます。 辞書と似ていますが、辞書では <code class=\"docutils literal notranslate\"><span class=\"pre\">:</span></code> でキーと値を対応させる必要がありました。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[1]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">set1</span><span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"mi\">3</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"mi\">3</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">3</span><span class=\"p\">,</span> <span class=\"mi\">3</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">}</span>\n<span class=\"n\">set1</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[1]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n{1, 2, 3}\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[2]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">type</span><span class=\"p\">(</span><span class=\"n\">set1</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[2]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nset\n</pre></div></div>\n</div>\n<p>セットのデータ型は <code class=\"docutils literal notranslate\"><span class=\"pre\">set</span></code> であり、<code class=\"docutils literal notranslate\"><span class=\"pre\">set</span></code> は組み込み関数でもあります。</p>\n<p>組み込み関数 <code class=\"docutils literal notranslate\"><span class=\"pre\">set</span></code> を用いてもセットを作成することができます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[3]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">set</span><span class=\"p\">([</span><span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"mi\">3</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"mi\">3</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">3</span><span class=\"p\">,</span> <span class=\"mi\">3</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">])</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[3]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n{1, 2, 3}\n</pre></div></div>\n</div>\n<p>空のセットを作成する場合、次のようにします。（ <code class=\"docutils literal notranslate\"><span class=\"pre\">{}</span></code> では空の辞書が作成されます。）</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[4]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">set2</span> <span class=\"o\">=</span> <span class=\"nb\">set</span><span class=\"p\">()</span> <span class=\"c1\"># 空のセット</span>\n<span class=\"n\">set2</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[4]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nset()\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[5]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">set2</span> <span class=\"o\">=</span> <span class=\"p\">{}</span> <span class=\"c1\"># 空の辞書</span>\n<span class=\"n\">set2</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[5]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n{}\n</pre></div></div>\n</div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">set</span></code> を用いて、文字列、リストやタプルなどからセットを作成することができます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[6]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">set</span><span class=\"p\">([</span><span class=\"mi\">1</span><span class=\"p\">,</span><span class=\"mi\">1</span><span class=\"p\">,</span><span class=\"mi\">2</span><span class=\"p\">,</span><span class=\"mi\">2</span><span class=\"p\">,</span><span class=\"mi\">2</span><span class=\"p\">,</span><span class=\"mi\">3</span><span class=\"p\">])</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[6]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n{1, 2, 3}\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[7]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">set</span><span class=\"p\">((</span><span class=\"mi\">1</span><span class=\"p\">,</span><span class=\"mi\">1</span><span class=\"p\">,</span><span class=\"mi\">2</span><span class=\"p\">,</span><span class=\"mi\">2</span><span class=\"p\">,</span><span class=\"mi\">2</span><span class=\"p\">,</span><span class=\"mi\">3</span><span class=\"p\">))</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[7]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n{1, 2, 3}\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[8]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">set</span><span class=\"p\">(</span><span class=\"s1\">&#39;aabdceabdae&#39;</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[8]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n{&#39;a&#39;, &#39;b&#39;, &#39;c&#39;, &#39;d&#39;, &#39;e&#39;}\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[9]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">set</span><span class=\"p\">({</span><span class=\"s1\">&#39;apple&#39;</span> <span class=\"p\">:</span> <span class=\"mi\">3</span><span class=\"p\">,</span> <span class=\"s1\">&#39;pen&#39;</span> <span class=\"p\">:</span> <span class=\"mi\">5</span><span class=\"p\">})</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[9]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n{&#39;apple&#39;, &#39;pen&#39;}\n</pre></div></div>\n</div>\n<section id=\"セットの組み込み関数\">\n<h2>セットの組み込み関数<a class=\"headerlink\" href=\"#セットの組み込み関数\" title=\"Link to this heading\">¶</a></h2>\n<p>リストなどと同様に、次の関数などはセットにも適用可能です。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[10]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">set1</span><span class=\"p\">)</span> <span class=\"c1\"># 集合を構成する要素数</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[10]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n3\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[11]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">x</span><span class=\"p\">,</span><span class=\"n\">y</span><span class=\"p\">,</span><span class=\"n\">z</span> <span class=\"o\">=</span> <span class=\"n\">set1</span> <span class=\"c1\"># 多重代入</span>\n<span class=\"n\">x</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[11]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n1\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[12]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"mi\">2</span> <span class=\"ow\">in</span> <span class=\"n\">set1</span> <span class=\"c1\"># 指定した要素を集合が含むかどうかの判定</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[12]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nTrue\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[13]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"mi\">10</span> <span class=\"ow\">in</span> <span class=\"n\">set1</span> <span class=\"c1\"># 指定した要素を集合が含むかどうかの判定</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[13]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nFalse\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[14]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"mi\">10</span> <span class=\"ow\">not</span> <span class=\"ow\">in</span> <span class=\"n\">set1</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[14]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nTrue\n</pre></div></div>\n</div>\n<p>セットの要素は、順序付けられていないのでインデックスを指定して取り出すことはできません。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[15]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">set1</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n<span class=\"ansi-red-fg\">---------------------------------------------------------------------------</span>\n<span class=\"ansi-red-fg\">TypeError</span>                                 Traceback (most recent call last)\nCell <span class=\"ansi-green-fg\">In[15], line 1</span>\n<span class=\"ansi-green-fg\">----&gt; 1</span> <span class=\"ansi-yellow-bg\">set1</span><span class=\"ansi-yellow-bg\">[</span><span class=\"ansi-yellow-bg\" style=\"color: rgb(98,98,98)\">0</span><span class=\"ansi-yellow-bg\">]</span>\n\n<span class=\"ansi-red-fg\">TypeError</span>: &#39;set&#39; object is not subscriptable\n</pre></div></div>\n</div>\n</section>\n<section id=\"練習\">\n<h2>練習<a class=\"headerlink\" href=\"#練習\" title=\"Link to this heading\">¶</a></h2>\n<p>文字列 <code class=\"docutils literal notranslate\"><span class=\"pre\">str1</span></code> が引数として与えられたとき、<code class=\"docutils literal notranslate\"><span class=\"pre\">str1</span></code> に含まれる要素（文字、すなわち長さ1の文字列）の種類を返す関数 <code class=\"docutils literal notranslate\"><span class=\"pre\">check_characters</span></code> を作成してください（大文字と小文字は区別し、スペースや句読点も1つと数えます）。 たとえば、<code class=\"docutils literal notranslate\"><span class=\"pre\">'aabccc'</span></code> には <code class=\"docutils literal notranslate\"><span class=\"pre\">'a'</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">'b'</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">'c'</span></code> が含まれるので、 <code class=\"docutils literal notranslate\"><span class=\"pre\">check_characters('aabccc')</span></code> は 3 を返します。</p>\n<p>以下のセルの <code class=\"docutils literal notranslate\"><span class=\"pre\">...</span></code> のところを書き換えて <code class=\"docutils literal notranslate\"><span class=\"pre\">check_characters(str1)</span></code> を作成してください。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[16]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">def</span> <span class=\"nf\">check_characters</span><span class=\"p\">(</span><span class=\"n\">str1</span><span class=\"p\">):</span>\n    <span class=\"o\">...</span>\n</pre></div>\n</div>\n</div>\n<p>上のセルで解答を作成した後、以下のセルを実行し、実行結果が <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> になることを確認してください。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[17]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">check_characters</span><span class=\"p\">(</span><span class=\"s1\">&#39;Onde a terra acaba e o mar começa&#39;</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"mi\">13</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nFalse\n</pre></div></div>\n</div>\n</section>\n<section id=\"id3\">\n<h2>練習<a class=\"headerlink\" href=\"#id3\" title=\"Link to this heading\">¶</a></h2>\n<p>辞書 <code class=\"docutils literal notranslate\"><span class=\"pre\">dic1</span></code> が引数として与えられたとき、<code class=\"docutils literal notranslate\"><span class=\"pre\">dic1</span></code> に登録されているキーの数を返す関数 <code class=\"docutils literal notranslate\"><span class=\"pre\">check_dicsize</span></code> を作成してください。</p>\n<p>以下のセルの <code class=\"docutils literal notranslate\"><span class=\"pre\">...</span></code> のところを書き換えて <code class=\"docutils literal notranslate\"><span class=\"pre\">check_dicsize(dic1)</span></code> を作成してください。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[18]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">def</span> <span class=\"nf\">check_dicsize</span><span class=\"p\">(</span><span class=\"n\">dic1</span><span class=\"p\">):</span>\n    <span class=\"o\">...</span>\n</pre></div>\n</div>\n</div>\n<p>上のセルで解答を作成した後、以下のセルを実行し、実行結果が <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> になることを確認してください。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[19]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">check_dicsize</span><span class=\"p\">({</span><span class=\"s1\">&#39;apple&#39;</span><span class=\"p\">:</span> <span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"s1\">&#39;orange&#39;</span><span class=\"p\">:</span> <span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"s1\">&#39;pen&#39;</span><span class=\"p\">:</span> <span class=\"mi\">1</span><span class=\"p\">})</span> <span class=\"o\">==</span> <span class=\"mi\">3</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nFalse\n</pre></div></div>\n</div>\n</section>\n<section id=\"集合演算\">\n<h2><strong>集合演算</strong><a class=\"headerlink\" href=\"#集合演算\" title=\"Link to this heading\">¶</a></h2>\n<p>複数のセットから、<strong>和集合</strong>・<strong>積集合</strong>・<strong>差集合</strong>・<strong>対称差</strong>を求める集合演算が存在します。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[20]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">set1</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"mi\">3</span><span class=\"p\">,</span> <span class=\"mi\">4</span><span class=\"p\">}</span>\n<span class=\"n\">set2</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"mi\">3</span><span class=\"p\">,</span> <span class=\"mi\">4</span><span class=\"p\">,</span> <span class=\"mi\">5</span><span class=\"p\">,</span> <span class=\"mi\">6</span><span class=\"p\">}</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[21]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">set1</span> <span class=\"o\">|</span> <span class=\"n\">set2</span> <span class=\"c1\"># 和集合</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[21]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n{1, 2, 3, 4, 5, 6}\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[22]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">set1</span> <span class=\"o\">&amp;</span> <span class=\"n\">set2</span> <span class=\"c1\"># 積集合</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[22]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n{3, 4}\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[23]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">set1</span> <span class=\"o\">-</span> <span class=\"n\">set2</span> <span class=\"c1\"># 差集合</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[23]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n{1, 2}\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[24]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">set1</span> <span class=\"o\">^</span> <span class=\"n\">set2</span> <span class=\"c1\"># 対称差</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[24]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n{1, 2, 5, 6}\n</pre></div></div>\n</div>\n</section>\n<section id=\"比較演算\">\n<h2><strong>比較演算</strong><a class=\"headerlink\" href=\"#比較演算\" title=\"Link to this heading\">¶</a></h2>\n<p>数値などを比較するのに用いた比較演算子を用いて、2つのセットを比較することもできます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[25]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">print</span><span class=\"p\">({</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"mi\">3</span><span class=\"p\">}</span> <span class=\"o\">==</span> <span class=\"p\">{</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"mi\">3</span><span class=\"p\">})</span>\n<span class=\"nb\">print</span><span class=\"p\">({</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">}</span> <span class=\"o\">==</span> <span class=\"p\">{</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"mi\">3</span><span class=\"p\">})</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nTrue\nFalse\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[26]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">print</span><span class=\"p\">({</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"mi\">3</span><span class=\"p\">}</span> <span class=\"o\">!=</span> <span class=\"p\">{</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"mi\">3</span><span class=\"p\">})</span>\n<span class=\"nb\">print</span><span class=\"p\">({</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">}</span> <span class=\"o\">!=</span> <span class=\"p\">{</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"mi\">3</span><span class=\"p\">})</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nFalse\nTrue\n</pre></div></div>\n</div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;=</span></code> や <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;</span></code> は、集合の間の包含関係を判定します。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[27]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">print</span><span class=\"p\">({</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"mi\">3</span><span class=\"p\">}</span> <span class=\"o\">&lt;=</span> <span class=\"p\">{</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"mi\">3</span><span class=\"p\">})</span>\n<span class=\"nb\">print</span><span class=\"p\">({</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"mi\">3</span><span class=\"p\">}</span> <span class=\"o\">&lt;</span> <span class=\"p\">{</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"mi\">3</span><span class=\"p\">})</span>\n<span class=\"nb\">print</span><span class=\"p\">({</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">}</span> <span class=\"o\">&lt;</span> <span class=\"p\">{</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"mi\">3</span><span class=\"p\">})</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nTrue\nFalse\nTrue\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[28]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">print</span><span class=\"p\">({</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">}</span> <span class=\"o\">&lt;=</span> <span class=\"p\">{</span><span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"mi\">3</span><span class=\"p\">,</span> <span class=\"mi\">4</span><span class=\"p\">})</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nFalse\n</pre></div></div>\n</div>\n</section>\n<section id=\"セットのメソッド\">\n<h2>セットのメソッド<a class=\"headerlink\" href=\"#セットのメソッド\" title=\"Link to this heading\">¶</a></h2>\n<p>セットにも様々なメソッドが存在します。なお、以下のメソッドは全て破壊的です。</p>\n<section id=\"add\">\n<h3><strong>add</strong><a class=\"headerlink\" href=\"#add\" title=\"Link to this heading\">¶</a></h3>\n<p>指定した要素を新たにセットに追加します。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[29]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">set1</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"mi\">3</span><span class=\"p\">}</span>\n<span class=\"n\">set1</span><span class=\"o\">.</span><span class=\"n\">add</span><span class=\"p\">(</span><span class=\"mi\">4</span><span class=\"p\">)</span>\n<span class=\"n\">set1</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[29]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n{1, 2, 3, 4}\n</pre></div></div>\n</div>\n</section>\n<section id=\"remove\">\n<h3><strong>remove</strong><a class=\"headerlink\" href=\"#remove\" title=\"Link to this heading\">¶</a></h3>\n<p>指定した要素をセットから削除します。 その要素がセットに含まれていない場合、エラーになります。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[30]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">set1</span><span class=\"o\">.</span><span class=\"n\">remove</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n<span class=\"n\">set1</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[30]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n{2, 3, 4}\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[31]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">set1</span><span class=\"o\">.</span><span class=\"n\">remove</span><span class=\"p\">(</span><span class=\"mi\">10</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n<span class=\"ansi-red-fg\">---------------------------------------------------------------------------</span>\n<span class=\"ansi-red-fg\">KeyError</span>                                  Traceback (most recent call last)\nCell <span class=\"ansi-green-fg\">In[31], line 1</span>\n<span class=\"ansi-green-fg\">----&gt; 1</span> <span class=\"ansi-yellow-bg\">set1</span><span class=\"ansi-yellow-bg\" style=\"color: rgb(98,98,98)\">.</span><span class=\"ansi-yellow-bg\">remove</span><span class=\"ansi-yellow-bg\">(</span><span class=\"ansi-yellow-bg\" style=\"color: rgb(98,98,98)\">10</span><span class=\"ansi-yellow-bg\">)</span>\n\n<span class=\"ansi-red-fg\">KeyError</span>: 10\n</pre></div></div>\n</div>\n</section>\n<section id=\"discard\">\n<h3><strong>discard</strong><a class=\"headerlink\" href=\"#discard\" title=\"Link to this heading\">¶</a></h3>\n<p>指定した要素をセットから削除します。 その要素がセットに含まれていなくともエラーになりません。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[32]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">set1</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"mi\">3</span><span class=\"p\">,</span> <span class=\"mi\">4</span><span class=\"p\">}</span>\n<span class=\"n\">set1</span><span class=\"o\">.</span><span class=\"n\">discard</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n<span class=\"n\">set1</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[32]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n{2, 3, 4}\n</pre></div></div>\n</div>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[33]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">set1</span><span class=\"o\">.</span><span class=\"n\">discard</span><span class=\"p\">(</span><span class=\"mi\">5</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n</section>\n<section id=\"clear\">\n<h3><strong>clear</strong><a class=\"headerlink\" href=\"#clear\" title=\"Link to this heading\">¶</a></h3>\n<p>全ての要素を削除して対象のセットを空にします。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[34]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">set1</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"mi\">3</span><span class=\"p\">,</span> <span class=\"mi\">4</span><span class=\"p\">}</span>\n<span class=\"n\">set1</span><span class=\"o\">.</span><span class=\"n\">clear</span><span class=\"p\">()</span>\n<span class=\"n\">set1</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[34]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nset()\n</pre></div></div>\n</div>\n</section>\n<section id=\"pop\">\n<h3><strong>pop</strong><a class=\"headerlink\" href=\"#pop\" title=\"Link to this heading\">¶</a></h3>\n<p>セットからランダムに1つの要素を取り出します。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[35]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">set1</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"mi\">3</span><span class=\"p\">,</span> <span class=\"mi\">4</span><span class=\"p\">}</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">set1</span><span class=\"o\">.</span><span class=\"n\">pop</span><span class=\"p\">())</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">set1</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n1\n{2, 3, 4}\n</pre></div></div>\n</div>\n</section>\n<section id=\"union,-intersection,-difference\">\n<h3><strong>union</strong>, <strong>intersection</strong>, <strong>difference</strong><a class=\"headerlink\" href=\"#union,-intersection,-difference\" title=\"Link to this heading\">¶</a></h3>\n<p><strong>和集合</strong>・<strong>積集合</strong>・<strong>差集合</strong>・<strong>対称差</strong>を求めるメソッドも存在します。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[36]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">set1</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"mi\">3</span><span class=\"p\">,</span> <span class=\"mi\">4</span><span class=\"p\">}</span>\n<span class=\"n\">set2</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"mi\">3</span><span class=\"p\">,</span> <span class=\"mi\">4</span><span class=\"p\">,</span> <span class=\"mi\">5</span><span class=\"p\">,</span> <span class=\"mi\">6</span><span class=\"p\">}</span>\n<span class=\"n\">set1</span><span class=\"o\">.</span><span class=\"n\">union</span><span class=\"p\">(</span><span class=\"n\">set2</span><span class=\"p\">)</span> <span class=\"c1\"># 和集合</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[36]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n{1, 2, 3, 4, 5, 6}\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[37]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">set1</span><span class=\"o\">.</span><span class=\"n\">intersection</span><span class=\"p\">(</span><span class=\"n\">set2</span><span class=\"p\">)</span> <span class=\"c1\"># 積集合</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[37]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n{3, 4}\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[38]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">set1</span><span class=\"o\">.</span><span class=\"n\">difference</span><span class=\"p\">(</span><span class=\"n\">set2</span><span class=\"p\">)</span> <span class=\"c1\"># 差集合</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[38]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n{1, 2}\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[39]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">set1</span><span class=\"o\">.</span><span class=\"n\">symmetric_difference</span><span class=\"p\">(</span><span class=\"n\">set2</span><span class=\"p\">)</span> <span class=\"c1\"># 対称差</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[39]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n{1, 2, 5, 6}\n</pre></div></div>\n</div>\n</section>\n</section>\n<section id=\"id7\">\n<h2>練習<a class=\"headerlink\" href=\"#id7\" title=\"Link to this heading\">¶</a></h2>\n<p>英語の文章からなる文字列 <code class=\"docutils literal notranslate\"><span class=\"pre\">str_engsentences</span></code> が引数として与えられたとき、<code class=\"docutils literal notranslate\"><span class=\"pre\">str_engsentences</span></code> 中に含まれる単語の種類数を返す関数 <code class=\"docutils literal notranslate\"><span class=\"pre\">count_words2</span></code> を作成してください。</p>\n<p>以下のセルの <code class=\"docutils literal notranslate\"><span class=\"pre\">...</span></code> のところを書き換えて <code class=\"docutils literal notranslate\"><span class=\"pre\">count_words2(str_engsentences)</span></code> を作成してください。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[40]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">def</span> <span class=\"nf\">count_words2</span><span class=\"p\">(</span><span class=\"n\">str_engsentences</span><span class=\"p\">):</span>\n    <span class=\"o\">...</span>\n</pre></div>\n</div>\n</div>\n<p>上のセルで解答を作成した後、以下のセルを実行し、実行結果が <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> になることを確認してください。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[41]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">count_words2</span><span class=\"p\">(</span><span class=\"s1\">&#39;From Stettin in the Baltic to Trieste in the Adriatic an iron curtain has descended across the Continent.&#39;</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"mi\">15</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nFalse\n</pre></div></div>\n</div>\n</section>\n<section id=\"練習の解答\">\n<h2>練習の解答<a class=\"headerlink\" href=\"#練習の解答\" title=\"Link to this heading\">¶</a></h2>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[42]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">def</span> <span class=\"nf\">check_characters</span><span class=\"p\">(</span><span class=\"n\">str1</span><span class=\"p\">):</span>\n    <span class=\"n\">set1</span> <span class=\"o\">=</span> <span class=\"nb\">set</span><span class=\"p\">(</span><span class=\"n\">str1</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">set1</span><span class=\"p\">)</span>\n<span class=\"c1\">#check_characters(&#39;Onde a terra acaba e o mar começa&#39;)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[43]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">def</span> <span class=\"nf\">check_dicsize</span><span class=\"p\">(</span><span class=\"n\">dic1</span><span class=\"p\">):</span>\n    <span class=\"k\">return</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"nb\">set</span><span class=\"p\">(</span><span class=\"n\">dic1</span><span class=\"p\">))</span>\n<span class=\"c1\">#check_dicsize({&#39;apple&#39;: 0, &#39;orange&#39;: 2, &#39;pen&#39;: 1})</span>\n</pre></div>\n</div>\n</div>\n<p>実は <code class=\"docutils literal notranslate\"><span class=\"pre\">len</span></code> は辞書に対してキーの数を返すので、セットを使う必要はありません。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[44]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">def</span> <span class=\"nf\">check_dicsize</span><span class=\"p\">(</span><span class=\"n\">dic1</span><span class=\"p\">):</span>\n    <span class=\"k\">return</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">dic1</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[45]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">def</span> <span class=\"nf\">count_words2</span><span class=\"p\">(</span><span class=\"n\">str_engsentences</span><span class=\"p\">):</span>\n    <span class=\"n\">str1</span> <span class=\"o\">=</span> <span class=\"n\">str_engsentences</span><span class=\"o\">.</span><span class=\"n\">replace</span><span class=\"p\">(</span><span class=\"s1\">&#39;.&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;&#39;</span><span class=\"p\">)</span> <span class=\"c1\"># 句読点を削除する</span>\n    <span class=\"n\">str1</span> <span class=\"o\">=</span> <span class=\"n\">str1</span><span class=\"o\">.</span><span class=\"n\">replace</span><span class=\"p\">(</span><span class=\"s1\">&#39;,&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">str1</span> <span class=\"o\">=</span> <span class=\"n\">str1</span><span class=\"o\">.</span><span class=\"n\">replace</span><span class=\"p\">(</span><span class=\"s1\">&#39;:&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">str1</span> <span class=\"o\">=</span> <span class=\"n\">str1</span><span class=\"o\">.</span><span class=\"n\">replace</span><span class=\"p\">(</span><span class=\"s1\">&#39;;&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">str1</span> <span class=\"o\">=</span> <span class=\"n\">str1</span><span class=\"o\">.</span><span class=\"n\">replace</span><span class=\"p\">(</span><span class=\"s1\">&#39;!&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">str1</span> <span class=\"o\">=</span> <span class=\"n\">str1</span><span class=\"o\">.</span><span class=\"n\">replace</span><span class=\"p\">(</span><span class=\"s1\">&#39;?&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">list1</span> <span class=\"o\">=</span> <span class=\"n\">str1</span><span class=\"o\">.</span><span class=\"n\">split</span><span class=\"p\">(</span><span class=\"s1\">&#39; &#39;</span><span class=\"p\">)</span> <span class=\"c1\"># 句読点を削除した文字列を、単語ごとにリストに格納する</span>\n    <span class=\"n\">set1</span> <span class=\"o\">=</span> <span class=\"nb\">set</span><span class=\"p\">(</span><span class=\"n\">list1</span><span class=\"p\">)</span> <span class=\"c1\"># リストを集合に変換して同じ要素を1つにまとめる</span>\n    <span class=\"k\">return</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">set1</span><span class=\"p\">)</span>\n<span class=\"c1\">#count_words2(&#39;From Stettin in the Baltic to Trieste in the Adriatic an iron curtain has descended across the Continent.&#39;)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[ ]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span>\n</pre></div>\n</div>\n</div>\n</section>\n</section>\n\n\n          </div>\n          \n        </div>\n      </div>\n      <div class=\"sphinxsidebar\" role=\"navigation\" aria-label=\"Main\">\n        <div class=\"sphinxsidebarwrapper\">\n<h1 class=\"logo\"><a href=\"../index.html\">Pythonプログラミング入門</a></h1>\n\n\n\n\n\n\n\n\n<p>\n  <a style=\"font-family: sans-serif; font-size: smaller; background: linear-gradient(to top, #353535 0%, #141414 100%); -webkit-font-smoothing: antialiased; font-weight: normal; text-shadow: rgb(0 0 0 / 40%) 0 -1px 0; padding: 2px 6px; color: #fff; text-decoration: none; border-radius: 4px; border: 1px solid #0d0d0d; box-shadow: inset 0 1px 1px 0 #8f8f8f;\" href=\"https://github.com/utokyo-ipp/utokyo-ipp.github.io\">View on GitHub</a>\n</p><p>\n  <a style=\"font-family: sans-serif; font-size: smaller; background: linear-gradient(to top, #ff1e00 0%, #de1e00 100%); -webkit-font-smoothing: antialiased; font-weight: normal; text-shadow: rgb(0 0 0 / 40%) 0 -1px 0; padding: 2px 6px; color: #fff; text-decoration: none; border-radius: 4px; border: 1px solid #0d0d0d; box-shadow: inset 0 1px 1px 0 #ff8e70;\" href=\"https://utokyo-ipp.github.io/IPP_textbook.pdf\">View PDF</a>\n</p><p>\n  <a style=\"border-bottom: none;\" href=\"https://colab.research.google.com/github/utokyo-ipp/utokyo-ipp.github.io/blob/master/colab/appendix/2-set.ipynb\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Google Colaboratory\"></a>\n</p><h3>Navigation</h3>\n<ul class=\"current\">\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../1/1-0.html\">1-0. Colaboratory (Colab) の使い方</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../1/1-1.html\">1-1. 数値演算</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../1/1-2.html\">1-2. 変数と関数の基礎</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../1/1-3.html\">1-3. 論理・比較演算と条件分岐の基礎</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../1/1-4.html\">1-4. テストとデバッグ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../2/2-1.html\">2-1. 文字列 (string)</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../2/2-2.html\">2-2. リスト (list)</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../2/2-3.html\">2-3. 条件分岐</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../3/3-1.html\">3-1. 辞書 (dictionary)</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../3/3-2.html\">3-2. 繰り返し</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../3/3-3.html\">3-3. 関数</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../4/4-1.html\">4-1. ファイル入出力の基本</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../4/4-2.html\">4-2. イテラブルとイテレータ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../4/4-3.html\">4-3. ディレクトリと木構造</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../5/5-1.html\">5-1. モジュールの使い方</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../5/5-2.html\">5-2. モジュールの作り方</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../5/5-3.html\">5-3. NumPyライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../6/6-1.html\">6-1. 内包表記</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../6/6-2.html\">6-2. 高階関数</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../6/6-3.html\">6-3. クラス</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../7/7-1.html\">7-1. pandasライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../7/7-2.html\">7-2. scikit-learnライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"1-jupyter-notebook.html\">▲Jupyter Notebook の使い方</a></li>\n<li class=\"toctree-l1 current\"><a class=\"current reference internal\" href=\"#\">▲セット (set)</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#セットの組み込み関数\">セットの組み込み関数</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#練習\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#id3\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#集合演算\"><strong>集合演算</strong></a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#比較演算\"><strong>比較演算</strong></a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#セットのメソッド\">セットのメソッド</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#id7\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#練習の解答\">練習の解答</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"3-recursion.html\">▲再帰</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"3-visualization.html\">▲簡単なデータの可視化</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"4-csv.html\">▲CSVファイルの入出力</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"5-bokeh.html\">▲Bokehライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"5-command.html\">▲Pythonスクリプトとコマンドライン実行</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"5-matplotlib.html\">▲Matplotlibライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"5-re.html\">▲正規表現</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../index_of_terms.html\">索引</a></li>\n</ul>\n\n<div class=\"relations\">\n<h3>Related Topics</h3>\n<ul>\n  <li><a href=\"../index.html\">Documentation overview</a><ul>\n      <li>Previous: <a href=\"1-jupyter-notebook.html\" title=\"previous chapter\">▲Jupyter Notebook の使い方</a></li>\n      <li>Next: <a href=\"3-recursion.html\" title=\"next chapter\">▲再帰</a></li>\n  </ul></li>\n</ul>\n</div>\n<search id=\"searchbox\" style=\"display: none\" role=\"search\">\n  <h3 id=\"searchlabel\">Quick search</h3>\n    <div class=\"searchformwrapper\">\n    <form class=\"search\" action=\"../search.html\" method=\"get\">\n      <input type=\"text\" name=\"q\" aria-labelledby=\"searchlabel\" autocomplete=\"off\" autocorrect=\"off\" autocapitalize=\"off\" spellcheck=\"false\"/>\n      <input type=\"submit\" value=\"Go\" />\n    </form>\n    </div>\n</search>\n<script>document.getElementById('searchbox').style.display = \"block\"</script>\n\n\n\n\n\n\n\n\n        </div>\n      </div>\n      <div class=\"clearer\"></div>\n    </div>\n    <div class=\"footer\">\n      &#169;2020–2024, 東京大学 数理・情報教育研究センター (CC BY-NC-ND 4.0).\n      \n      |\n      Powered by <a href=\"https://www.sphinx-doc.org/\">Sphinx 8.0.2</a>\n      &amp; <a href=\"https://alabaster.readthedocs.io\">Alabaster 1.0.0</a>\n      \n    </div>\n\n    \n\n    \n    <script>\n\n      var _gaq = _gaq || [];\n      _gaq.push(['_setAccount', 'G-8M0RXGPPSR']);\n      _gaq.push(['_setDomainName', 'none']);\n      _gaq.push(['_setAllowLinker', true]);\n      _gaq.push(['_trackPageview']);\n\n      (function() {\n        var ga = document.createElement('script'); ga.async = true;\n        ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'https://www') + '.google-analytics.com/ga.js';\n        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);\n      })();\n\n    </script>\n    \n  </body>\n</html>"
  },
  {
    "path": "docs/appendix/3-recursion.html",
    "content": "<!DOCTYPE html>\n\n<html lang=\"jp\" data-content_root=\"../\">\n  <head>\n    <meta charset=\"utf-8\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" /><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n\n    <!-- Google tag (gtag.js) -->\n    <script async src=\"https://www.googletagmanager.com/gtag/js?id=G-8M0RXGPPSR\"></script>\n    <script>\n        window.dataLayer = window.dataLayer || [];\n        function gtag(){dataLayer.push(arguments);}\n        gtag('js', new Date());\n        gtag('config', 'G-8M0RXGPPSR');\n    </script>\n    \n    <title>▲再帰 &#8212; Pythonプログラミング入門  documentation</title>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/pygments.css?v=d1102ebc\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/basic.css?v=c058f7c8\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/alabaster.css?v=27fed22d\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/nbsphinx-code-cells.css\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/custom.css?v=1a1aa8dd\" />\n    <script src=\"../_static/documentation_options.js?v=3ff7d7a7\"></script>\n    <script src=\"../_static/doctools.js?v=9a2dae69\"></script>\n    <script src=\"../_static/sphinx_highlight.js?v=dc90522c\"></script>\n    <script crossorigin=\"anonymous\" integrity=\"sha256-Ae2Vz/4ePdIu6ZyI/5ZGsYnb+m0JlOmKPjt6XZ9JJkA=\" src=\"https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.4/require.min.js\"></script>\n    <script>window.MathJax = {\"tex\": {\"inlineMath\": [[\"$\", \"$\"], [\"\\\\(\", \"\\\\)\"]], \"processEscapes\": true}, \"options\": {\"ignoreHtmlClass\": \"tex2jax_ignore|mathjax_ignore|document\", \"processHtmlClass\": \"tex2jax_process|mathjax_process|math|output_area\"}}</script>\n    <script defer=\"defer\" src=\"https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js\"></script>\n    <link rel=\"index\" title=\"Index\" href=\"../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../search.html\" />\n    <link rel=\"next\" title=\"▲簡単なデータの可視化\" href=\"3-visualization.html\" />\n    <link rel=\"prev\" title=\"▲セット (set)\" href=\"2-set.html\" />\n   \n  <link rel=\"stylesheet\" href=\"../_static/custom.css\" type=\"text/css\" />\n  \n\n  \n  \n\n  </head><body>\n  \n\n    <div class=\"document\">\n      <div class=\"documentwrapper\">\n        <div class=\"bodywrapper\">\n          \n\n          <div class=\"body\" role=\"main\">\n            \n  <section id=\"▲再帰\">\n<h1>▲再帰<a class=\"headerlink\" href=\"#▲再帰\" title=\"Link to this heading\">¶</a></h1>\n<p><strong>再帰</strong>について説明します。</p>\n<p>関数の<strong>再帰呼び出し</strong>とは、定義しようとしている関数を、その定義の中で呼び出すことです。 定義の中で直接呼び出す場合に限らず、他の関数を経由して間接的に呼び出す場合も、再帰呼び出しに含まれます。 再帰呼び出しを行う関数を、<strong>再帰関数</strong>といいます。</p>\n<p>再帰関数は、<strong>分割統治</strong>アルゴリズムの記述に適しています。 分割統治とは、問題を容易に解ける小さな粒度まで分割していき、 個々の小さな問題を解いて、その部分解を合成することで問題全体を解くような方法を指します。 分割統治の考え方は、関数型プログラミングにおいてもよく用いられます。 再帰関数による分割統治の典型的な形は、次の通りです。</p>\n<div class=\"highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>def recursive_function(...):\n    if 問題粒度の判定:\n        再帰呼び出しを含まない基本処理\n    else:\n        再帰呼び出しを含む処理（問題の分割や部分解の合成を行う）\n</pre></div>\n</div>\n<p>以下で、再帰関数を使った処理の例をいくつか見ていきましょう。</p>\n<section id=\"再帰関数の例：接頭辞リストと接尾辞リスト\">\n<h2>再帰関数の例：接頭辞リストと接尾辞リスト<a class=\"headerlink\" href=\"#再帰関数の例：接頭辞リストと接尾辞リスト\" title=\"Link to this heading\">¶</a></h2>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[1]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"c1\"># 入力の文字列の接頭辞リストを返す関数prefixes</span>\n<span class=\"k\">def</span> <span class=\"nf\">prefixes</span><span class=\"p\">(</span><span class=\"n\">s</span><span class=\"p\">):</span>\n    <span class=\"k\">if</span> <span class=\"n\">s</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;&#39;</span><span class=\"p\">:</span>\n        <span class=\"k\">return</span> <span class=\"p\">[]</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"k\">return</span> <span class=\"p\">[</span><span class=\"n\">s</span><span class=\"p\">]</span> <span class=\"o\">+</span> <span class=\"n\">prefixes</span><span class=\"p\">(</span><span class=\"n\">s</span><span class=\"p\">[:</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">])</span>\n\n<span class=\"n\">prefixes</span><span class=\"p\">(</span><span class=\"s1\">&#39;aabcc&#39;</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[1]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n[&#39;aabcc&#39;, &#39;aabc&#39;, &#39;aab&#39;, &#39;aa&#39;, &#39;a&#39;]\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[2]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"c1\"># 入力の文字列の接尾辞リストを返す関数suffixes</span>\n<span class=\"k\">def</span> <span class=\"nf\">suffixes</span><span class=\"p\">(</span><span class=\"n\">s</span><span class=\"p\">):</span>\n    <span class=\"k\">if</span> <span class=\"n\">s</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;&#39;</span><span class=\"p\">:</span>\n        <span class=\"k\">return</span> <span class=\"p\">[]</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"k\">return</span> <span class=\"p\">[</span><span class=\"n\">s</span><span class=\"p\">]</span> <span class=\"o\">+</span> <span class=\"n\">suffixes</span><span class=\"p\">(</span><span class=\"n\">s</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">:])</span>\n\n<span class=\"n\">suffixes</span><span class=\"p\">(</span><span class=\"s1\">&#39;aabcc&#39;</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[2]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n[&#39;aabcc&#39;, &#39;abcc&#39;, &#39;bcc&#39;, &#39;cc&#39;, &#39;c&#39;]\n</pre></div></div>\n</div>\n</section>\n<section id=\"再帰関数の例：べき乗の計算\">\n<h2>再帰関数の例：べき乗の計算<a class=\"headerlink\" href=\"#再帰関数の例：べき乗の計算\" title=\"Link to this heading\">¶</a></h2>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[3]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"c1\"># 入力の底baseと冪指数exptからべき乗を計算する関数power</span>\n<span class=\"k\">def</span> <span class=\"nf\">power</span><span class=\"p\">(</span><span class=\"n\">base</span><span class=\"p\">,</span> <span class=\"n\">expt</span><span class=\"p\">):</span>\n    <span class=\"k\">if</span> <span class=\"n\">expt</span> <span class=\"o\">==</span> <span class=\"mi\">0</span><span class=\"p\">:</span>\n        <span class=\"c1\"># exptが0ならば1を返す</span>\n        <span class=\"k\">return</span> <span class=\"mi\">1</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"c1\"># exptを1つずつ減らしながらpowerに渡し、再帰的にべき乗を計算</span>\n        <span class=\"c1\"># (2*(2*(2*....*1)))</span>\n        <span class=\"k\">return</span> <span class=\"n\">base</span> <span class=\"o\">*</span> <span class=\"n\">power</span><span class=\"p\">(</span><span class=\"n\">base</span><span class=\"p\">,</span> <span class=\"n\">expt</span> <span class=\"o\">-</span> <span class=\"mi\">1</span><span class=\"p\">)</span>\n\n<span class=\"n\">power</span><span class=\"p\">(</span><span class=\"mi\">2</span><span class=\"p\">,</span><span class=\"mi\">10</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[3]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n1024\n</pre></div></div>\n</div>\n<p>一般に、再帰処理は、繰り返し処理としても書くことができます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[4]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"c1\"># べき乗の計算を繰り返し処理で行った例</span>\n<span class=\"k\">def</span> <span class=\"nf\">power</span><span class=\"p\">(</span><span class=\"n\">base</span><span class=\"p\">,</span> <span class=\"n\">expt</span><span class=\"p\">):</span>\n    <span class=\"n\">e</span> <span class=\"o\">=</span> <span class=\"mi\">1</span>\n    <span class=\"k\">for</span> <span class=\"n\">i</span> <span class=\"ow\">in</span> <span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"n\">expt</span><span class=\"p\">):</span>\n        <span class=\"n\">e</span> <span class=\"o\">*=</span> <span class=\"n\">base</span>\n    <span class=\"k\">return</span> <span class=\"n\">e</span>\n\n<span class=\"n\">power</span><span class=\"p\">(</span><span class=\"mi\">2</span><span class=\"p\">,</span><span class=\"mi\">10</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[4]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n1024\n</pre></div></div>\n</div>\n<p>単純な処理においては、繰り返しの方が効率的に計算できることが多いですが、 特に複雑な処理になってくると、再帰的に定義した方が読みやすいコードで効率的なアルゴリズムを記述できることもあります。 たとえば、次に示すべき乗計算は、上記よりも高速なアルゴリズムですが、計算の見通しは明快です。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[5]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"c1\"># べき乗を計算する高速なアルゴリズム</span>\n<span class=\"k\">def</span> <span class=\"nf\">power</span><span class=\"p\">(</span><span class=\"n\">base</span><span class=\"p\">,</span> <span class=\"n\">expt</span><span class=\"p\">):</span>\n    <span class=\"k\">if</span> <span class=\"n\">expt</span> <span class=\"o\">==</span> <span class=\"mi\">0</span><span class=\"p\">:</span>\n        <span class=\"k\">return</span> <span class=\"mi\">1</span>\n    <span class=\"k\">elif</span> <span class=\"n\">expt</span> <span class=\"o\">%</span> <span class=\"mi\">2</span> <span class=\"o\">==</span> <span class=\"mi\">0</span><span class=\"p\">:</span>\n        <span class=\"k\">return</span> <span class=\"n\">power</span><span class=\"p\">(</span><span class=\"n\">base</span> <span class=\"o\">*</span> <span class=\"n\">base</span><span class=\"p\">,</span> <span class=\"n\">expt</span> <span class=\"o\">//</span> <span class=\"mi\">2</span><span class=\"p\">)</span> <span class=\"c1\"># x**(2m) == (x*x)**m</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"k\">return</span> <span class=\"n\">base</span> <span class=\"o\">*</span> <span class=\"n\">power</span><span class=\"p\">(</span><span class=\"n\">base</span><span class=\"p\">,</span> <span class=\"n\">expt</span> <span class=\"o\">-</span> <span class=\"mi\">1</span><span class=\"p\">)</span>\n\n<span class=\"n\">power</span><span class=\"p\">(</span><span class=\"mi\">2</span><span class=\"p\">,</span><span class=\"mi\">10</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[5]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n1024\n</pre></div></div>\n</div>\n</section>\n<section id=\"再帰関数の例：マージソート\">\n<h2>再帰関数の例：マージソート<a class=\"headerlink\" href=\"#再帰関数の例：マージソート\" title=\"Link to this heading\">¶</a></h2>\n<p>マージソートは、典型的な分割統治アルゴリズムで、以下のように再帰関数で実装することができます。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[6]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"c1\"># マージソートを行い、比較回数 n を返す</span>\n<span class=\"k\">def</span> <span class=\"nf\">merge_sort_rec</span><span class=\"p\">(</span><span class=\"n\">data</span><span class=\"p\">,</span> <span class=\"n\">l</span><span class=\"p\">,</span> <span class=\"n\">r</span><span class=\"p\">,</span> <span class=\"n\">work</span><span class=\"p\">):</span>\n    <span class=\"n\">n</span> <span class=\"o\">=</span> <span class=\"mi\">0</span>\n    <span class=\"k\">if</span> <span class=\"n\">r</span> <span class=\"o\">-</span> <span class=\"n\">l</span> <span class=\"o\">&lt;=</span> <span class=\"mi\">1</span><span class=\"p\">:</span>\n        <span class=\"k\">return</span> <span class=\"n\">n</span>\n    <span class=\"n\">m</span> <span class=\"o\">=</span> <span class=\"n\">l</span> <span class=\"o\">+</span> <span class=\"p\">(</span><span class=\"n\">r</span> <span class=\"o\">-</span> <span class=\"n\">l</span><span class=\"p\">)</span> <span class=\"o\">//</span> <span class=\"mi\">2</span>\n    <span class=\"n\">n1</span> <span class=\"o\">=</span> <span class=\"n\">merge_sort_rec</span><span class=\"p\">(</span><span class=\"n\">data</span><span class=\"p\">,</span> <span class=\"n\">l</span><span class=\"p\">,</span> <span class=\"n\">m</span><span class=\"p\">,</span> <span class=\"n\">work</span><span class=\"p\">)</span>\n    <span class=\"n\">n2</span> <span class=\"o\">=</span> <span class=\"n\">merge_sort_rec</span><span class=\"p\">(</span><span class=\"n\">data</span><span class=\"p\">,</span> <span class=\"n\">m</span><span class=\"p\">,</span> <span class=\"n\">r</span><span class=\"p\">,</span> <span class=\"n\">work</span><span class=\"p\">)</span>\n    <span class=\"n\">i1</span> <span class=\"o\">=</span> <span class=\"n\">l</span>\n    <span class=\"n\">i2</span> <span class=\"o\">=</span> <span class=\"n\">m</span>\n    <span class=\"k\">for</span> <span class=\"n\">i</span> <span class=\"ow\">in</span> <span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"n\">l</span><span class=\"p\">,</span> <span class=\"n\">r</span><span class=\"p\">):</span>\n        <span class=\"n\">from1</span> <span class=\"o\">=</span> <span class=\"kc\">False</span>\n        <span class=\"k\">if</span> <span class=\"n\">i2</span> <span class=\"o\">&gt;=</span> <span class=\"n\">r</span><span class=\"p\">:</span>\n            <span class=\"n\">from1</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n        <span class=\"k\">elif</span> <span class=\"n\">i1</span> <span class=\"o\">&lt;</span> <span class=\"n\">m</span><span class=\"p\">:</span>\n            <span class=\"n\">n</span> <span class=\"o\">=</span> <span class=\"n\">n</span> <span class=\"o\">+</span> <span class=\"mi\">1</span>\n            <span class=\"k\">if</span> <span class=\"n\">data</span><span class=\"p\">[</span><span class=\"n\">i1</span><span class=\"p\">]</span> <span class=\"o\">&lt;=</span> <span class=\"n\">data</span><span class=\"p\">[</span><span class=\"n\">i2</span><span class=\"p\">]:</span>\n                <span class=\"n\">from1</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n        <span class=\"k\">if</span> <span class=\"n\">from1</span><span class=\"p\">:</span>\n            <span class=\"n\">work</span><span class=\"p\">[</span><span class=\"n\">i</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">data</span><span class=\"p\">[</span><span class=\"n\">i1</span><span class=\"p\">]</span>\n            <span class=\"n\">i1</span> <span class=\"o\">=</span> <span class=\"n\">i1</span> <span class=\"o\">+</span> <span class=\"mi\">1</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"n\">work</span><span class=\"p\">[</span><span class=\"n\">i</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">data</span><span class=\"p\">[</span><span class=\"n\">i2</span><span class=\"p\">]</span>\n            <span class=\"n\">i2</span> <span class=\"o\">=</span> <span class=\"n\">i2</span> <span class=\"o\">+</span> <span class=\"mi\">1</span>\n    <span class=\"k\">for</span> <span class=\"n\">i</span> <span class=\"ow\">in</span> <span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"n\">l</span><span class=\"p\">,</span> <span class=\"n\">r</span><span class=\"p\">):</span>\n        <span class=\"n\">data</span><span class=\"p\">[</span><span class=\"n\">i</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">work</span><span class=\"p\">[</span><span class=\"n\">i</span><span class=\"p\">]</span>\n    <span class=\"k\">return</span> <span class=\"n\">n1</span> <span class=\"o\">+</span> <span class=\"n\">n2</span> <span class=\"o\">+</span> <span class=\"n\">n</span>\n\n<span class=\"k\">def</span> <span class=\"nf\">merge_sort</span><span class=\"p\">(</span><span class=\"n\">data</span><span class=\"p\">):</span>\n    <span class=\"k\">return</span> <span class=\"n\">merge_sort_rec</span><span class=\"p\">(</span><span class=\"n\">data</span><span class=\"p\">,</span> <span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">data</span><span class=\"p\">),</span> <span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]</span><span class=\"o\">*</span><span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">data</span><span class=\"p\">))</span>\n</pre></div>\n</div>\n</div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">merge_sort</span></code> は、与えられた配列をインプレースでソートするとともに、比較の回数を返します。 <code class=\"docutils literal notranslate\"><span class=\"pre\">merge_sort</span></code> は、再帰関数 <code class=\"docutils literal notranslate\"><span class=\"pre\">merge_sort_rec</span></code> を呼び出します。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">merge_sort_rec(data,</span> <span class=\"pre\">l,</span> <span class=\"pre\">r,</span> <span class=\"pre\">work)</span></code> は、配列 <code class=\"docutils literal notranslate\"><span class=\"pre\">data</span></code> のインデックスが <code class=\"docutils literal notranslate\"><span class=\"pre\">l</span></code> 以上で <code class=\"docutils literal notranslate\"><span class=\"pre\">r</span></code> より小さいところをソートします。</p>\n<ul class=\"simple\">\n<li><p>要素が1つかないときは何もしません。</p></li>\n<li><p>そうでなければ、<code class=\"docutils literal notranslate\"><span class=\"pre\">l</span></code> から　<code class=\"docutils literal notranslate\"><span class=\"pre\">r</span></code> までの要素を半分にしてそれぞれを再帰的にソートします。</p></li>\n<li><p>その結果を作業用の配列 <code class=\"docutils literal notranslate\"><span class=\"pre\">work</span></code> に順序を保ちながらコピーします。この操作はマージ（併合）と呼ばれます。</p></li>\n<li><p>最後に、<code class=\"docutils literal notranslate\"><span class=\"pre\">work</span></code> から <code class=\"docutils literal notranslate\"><span class=\"pre\">data</span></code> に要素を戻します。</p></li>\n</ul>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">merge_sort_rec</span></code> は自分自身を2回呼び出していますので、繰り返しでは容易には実装できません。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[7]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"kn\">import</span> <span class=\"nn\">random</span>\n<span class=\"n\">a</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"n\">random</span><span class=\"o\">.</span><span class=\"n\">randint</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">,</span><span class=\"mi\">10000</span><span class=\"p\">)</span> <span class=\"k\">for</span> <span class=\"n\">i</span> <span class=\"ow\">in</span> <span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"mi\">100</span><span class=\"p\">)]</span>\n<span class=\"n\">merge_sort</span><span class=\"p\">(</span><span class=\"n\">a</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[7]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n538\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[8]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">a</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[8]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n[46,\n 73,\n 198,\n 227,\n 233,\n 262,\n 430,\n 464,\n 587,\n 679,\n 720,\n 832,\n 839,\n 911,\n 940,\n 1123,\n 1458,\n 1488,\n 1541,\n 1562,\n 1890,\n 2157,\n 2311,\n 2364,\n 2390,\n 2509,\n 2717,\n 2721,\n 2801,\n 2960,\n 3200,\n 3209,\n 3219,\n 3356,\n 3602,\n 3611,\n 3707,\n 3720,\n 3764,\n 3787,\n 4137,\n 4189,\n 4304,\n 4334,\n 4337,\n 4407,\n 4424,\n 4474,\n 4610,\n 4892,\n 4918,\n 5069,\n 5156,\n 5198,\n 5219,\n 5231,\n 5385,\n 5420,\n 5560,\n 5711,\n 6019,\n 6027,\n 6266,\n 6327,\n 6477,\n 6686,\n 6930,\n 6962,\n 7052,\n 7091,\n 7136,\n 7319,\n 7351,\n 7385,\n 7472,\n 7508,\n 7532,\n 7584,\n 7749,\n 8014,\n 8046,\n 8315,\n 8361,\n 8409,\n 8560,\n 8563,\n 8881,\n 8928,\n 9084,\n 9158,\n 9289,\n 9419,\n 9504,\n 9622,\n 9648,\n 9657,\n 9864,\n 9880,\n 9934,\n 9936]\n</pre></div></div>\n</div>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[ ]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span>\n</pre></div>\n</div>\n</div>\n</section>\n</section>\n\n\n          </div>\n          \n        </div>\n      </div>\n      <div class=\"sphinxsidebar\" role=\"navigation\" aria-label=\"Main\">\n        <div class=\"sphinxsidebarwrapper\">\n<h1 class=\"logo\"><a href=\"../index.html\">Pythonプログラミング入門</a></h1>\n\n\n\n\n\n\n\n\n<p>\n  <a style=\"font-family: sans-serif; font-size: smaller; background: linear-gradient(to top, #353535 0%, #141414 100%); -webkit-font-smoothing: antialiased; font-weight: normal; text-shadow: rgb(0 0 0 / 40%) 0 -1px 0; padding: 2px 6px; color: #fff; text-decoration: none; border-radius: 4px; border: 1px solid #0d0d0d; box-shadow: inset 0 1px 1px 0 #8f8f8f;\" href=\"https://github.com/utokyo-ipp/utokyo-ipp.github.io\">View on GitHub</a>\n</p><p>\n  <a style=\"font-family: sans-serif; font-size: smaller; background: linear-gradient(to top, #ff1e00 0%, #de1e00 100%); -webkit-font-smoothing: antialiased; font-weight: normal; text-shadow: rgb(0 0 0 / 40%) 0 -1px 0; padding: 2px 6px; color: #fff; text-decoration: none; border-radius: 4px; border: 1px solid #0d0d0d; box-shadow: inset 0 1px 1px 0 #ff8e70;\" href=\"https://utokyo-ipp.github.io/IPP_textbook.pdf\">View PDF</a>\n</p><p>\n  <a style=\"border-bottom: none;\" href=\"https://colab.research.google.com/github/utokyo-ipp/utokyo-ipp.github.io/blob/master/colab/appendix/3-recursion.ipynb\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Google Colaboratory\"></a>\n</p><h3>Navigation</h3>\n<ul class=\"current\">\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../1/1-0.html\">1-0. Colaboratory (Colab) の使い方</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../1/1-1.html\">1-1. 数値演算</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../1/1-2.html\">1-2. 変数と関数の基礎</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../1/1-3.html\">1-3. 論理・比較演算と条件分岐の基礎</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../1/1-4.html\">1-4. テストとデバッグ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../2/2-1.html\">2-1. 文字列 (string)</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../2/2-2.html\">2-2. リスト (list)</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../2/2-3.html\">2-3. 条件分岐</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../3/3-1.html\">3-1. 辞書 (dictionary)</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../3/3-2.html\">3-2. 繰り返し</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../3/3-3.html\">3-3. 関数</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../4/4-1.html\">4-1. ファイル入出力の基本</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../4/4-2.html\">4-2. イテラブルとイテレータ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../4/4-3.html\">4-3. ディレクトリと木構造</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../5/5-1.html\">5-1. モジュールの使い方</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../5/5-2.html\">5-2. モジュールの作り方</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../5/5-3.html\">5-3. NumPyライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../6/6-1.html\">6-1. 内包表記</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../6/6-2.html\">6-2. 高階関数</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../6/6-3.html\">6-3. クラス</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../7/7-1.html\">7-1. pandasライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../7/7-2.html\">7-2. scikit-learnライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"1-jupyter-notebook.html\">▲Jupyter Notebook の使い方</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"2-set.html\">▲セット (set)</a></li>\n<li class=\"toctree-l1 current\"><a class=\"current reference internal\" href=\"#\">▲再帰</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#再帰関数の例：接頭辞リストと接尾辞リスト\">再帰関数の例：接頭辞リストと接尾辞リスト</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#再帰関数の例：べき乗の計算\">再帰関数の例：べき乗の計算</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#再帰関数の例：マージソート\">再帰関数の例：マージソート</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"3-visualization.html\">▲簡単なデータの可視化</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"4-csv.html\">▲CSVファイルの入出力</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"5-bokeh.html\">▲Bokehライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"5-command.html\">▲Pythonスクリプトとコマンドライン実行</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"5-matplotlib.html\">▲Matplotlibライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"5-re.html\">▲正規表現</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../index_of_terms.html\">索引</a></li>\n</ul>\n\n<div class=\"relations\">\n<h3>Related Topics</h3>\n<ul>\n  <li><a href=\"../index.html\">Documentation overview</a><ul>\n      <li>Previous: <a href=\"2-set.html\" title=\"previous chapter\">▲セット (set)</a></li>\n      <li>Next: <a href=\"3-visualization.html\" title=\"next chapter\">▲簡単なデータの可視化</a></li>\n  </ul></li>\n</ul>\n</div>\n<search id=\"searchbox\" style=\"display: none\" role=\"search\">\n  <h3 id=\"searchlabel\">Quick search</h3>\n    <div class=\"searchformwrapper\">\n    <form class=\"search\" action=\"../search.html\" method=\"get\">\n      <input type=\"text\" name=\"q\" aria-labelledby=\"searchlabel\" autocomplete=\"off\" autocorrect=\"off\" autocapitalize=\"off\" spellcheck=\"false\"/>\n      <input type=\"submit\" value=\"Go\" />\n    </form>\n    </div>\n</search>\n<script>document.getElementById('searchbox').style.display = \"block\"</script>\n\n\n\n\n\n\n\n\n        </div>\n      </div>\n      <div class=\"clearer\"></div>\n    </div>\n    <div class=\"footer\">\n      &#169;2020–2024, 東京大学 数理・情報教育研究センター (CC BY-NC-ND 4.0).\n      \n      |\n      Powered by <a href=\"https://www.sphinx-doc.org/\">Sphinx 8.0.2</a>\n      &amp; <a href=\"https://alabaster.readthedocs.io\">Alabaster 1.0.0</a>\n      \n    </div>\n\n    \n\n    \n    <script>\n\n      var _gaq = _gaq || [];\n      _gaq.push(['_setAccount', 'G-8M0RXGPPSR']);\n      _gaq.push(['_setDomainName', 'none']);\n      _gaq.push(['_setAllowLinker', true]);\n      _gaq.push(['_trackPageview']);\n\n      (function() {\n        var ga = document.createElement('script'); ga.async = true;\n        ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'https://www') + '.google-analytics.com/ga.js';\n        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);\n      })();\n\n    </script>\n    \n  </body>\n</html>"
  },
  {
    "path": "docs/appendix/3-visualization.html",
    "content": "<!DOCTYPE html>\n\n<html lang=\"jp\" data-content_root=\"../\">\n  <head>\n    <meta charset=\"utf-8\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" /><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n\n    <!-- Google tag (gtag.js) -->\n    <script async src=\"https://www.googletagmanager.com/gtag/js?id=G-8M0RXGPPSR\"></script>\n    <script>\n        window.dataLayer = window.dataLayer || [];\n        function gtag(){dataLayer.push(arguments);}\n        gtag('js', new Date());\n        gtag('config', 'G-8M0RXGPPSR');\n    </script>\n    \n    <title>▲簡単なデータの可視化 &#8212; Pythonプログラミング入門  documentation</title>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/pygments.css?v=d1102ebc\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/basic.css?v=c058f7c8\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/alabaster.css?v=27fed22d\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/nbsphinx-code-cells.css\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/custom.css?v=1a1aa8dd\" />\n    <script src=\"../_static/documentation_options.js?v=3ff7d7a7\"></script>\n    <script src=\"../_static/doctools.js?v=9a2dae69\"></script>\n    <script src=\"../_static/sphinx_highlight.js?v=dc90522c\"></script>\n    <script crossorigin=\"anonymous\" integrity=\"sha256-Ae2Vz/4ePdIu6ZyI/5ZGsYnb+m0JlOmKPjt6XZ9JJkA=\" src=\"https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.4/require.min.js\"></script>\n    <script>window.MathJax = {\"tex\": {\"inlineMath\": [[\"$\", \"$\"], [\"\\\\(\", \"\\\\)\"]], \"processEscapes\": true}, \"options\": {\"ignoreHtmlClass\": \"tex2jax_ignore|mathjax_ignore|document\", \"processHtmlClass\": \"tex2jax_process|mathjax_process|math|output_area\"}}</script>\n    <script defer=\"defer\" src=\"https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js\"></script>\n    <link rel=\"index\" title=\"Index\" href=\"../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../search.html\" />\n    <link rel=\"next\" title=\"▲CSVファイルの入出力\" href=\"4-csv.html\" />\n    <link rel=\"prev\" title=\"▲再帰\" href=\"3-recursion.html\" />\n   \n  <link rel=\"stylesheet\" href=\"../_static/custom.css\" type=\"text/css\" />\n  \n\n  \n  \n\n  </head><body>\n  \n\n    <div class=\"document\">\n      <div class=\"documentwrapper\">\n        <div class=\"bodywrapper\">\n          \n\n          <div class=\"body\" role=\"main\">\n            \n  <section id=\"▲簡単なデータの可視化\">\n<h1>▲簡単なデータの可視化<a class=\"headerlink\" href=\"#▲簡単なデータの可視化\" title=\"Link to this heading\">¶</a></h1>\n<p>第3回までに学んだ各種のデータに対する簡単な可視化について触れます。</p>\n<p>参考</p>\n<ul class=\"simple\">\n<li><p><a class=\"reference external\" href=\"https://matplotlib.org/tutorials/introductory/pyplot.html#sphx-glr-tutorials-introductory-pyplot-py\">https://matplotlib.org/tutorials/introductory/pyplot.html#sphx-glr-tutorials-introductory-pyplot-py</a> (English Only)</p></li>\n</ul>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">matplotlib</span></code> については、5-matplotlib に詳しい説明があります。</p>\n<section id=\"matplotlib\">\n<h2><code class=\"docutils literal notranslate\"><span class=\"pre\">matplotlib</span></code><a class=\"headerlink\" href=\"#matplotlib\" title=\"Link to this heading\">¶</a></h2>\n<p>Pythonでは可視化のための様々な仕組みが用意されています。 ここでは最も広く利用され、ノートブック上で容易に動作を確認できる <code class=\"docutils literal notranslate\"><span class=\"pre\">matplotlib</span></code> について触れます。 <code class=\"docutils literal notranslate\"><span class=\"pre\">matplotlib</span></code> を利用するには第5回で取り上げるモジュールについても知る必要がありますが、 第2回と第3回でデータについてだけ学ぶのでは、みなさんのモチベーションの維持が難しいと思われますので、 この段階でリスト・辞書だけで2次元グラフを表示させてみます。 したがって、ここではモジュールの使い方については説明しません。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">matplotlib</span></code> の出力をノートブックで表示させるには、以下をCodeセルで1回だけ実行します。 <code class=\"docutils literal notranslate\"><span class=\"pre\">%matplotlib</span></code> のように <code class=\"docutils literal notranslate\"><span class=\"pre\">%</span></code> で始まる文を<strong>マジックコマンド</strong>と呼びます。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[1]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"o\">%</span><span class=\"k\">matplotlib</span> inline\n</pre></div>\n</div>\n</div>\n<p>さらに <code class=\"docutils literal notranslate\"><span class=\"pre\">matplotlib</span></code> モジュールを読み込む次の処理もプログラムの冒頭で行う必要があります。</p>\n<div class=\"highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>import matplotlib.pyplot as plt\n</pre></div>\n</div>\n</section>\n<section id=\"折れ線グラフ\">\n<h2>折れ線グラフ<a class=\"headerlink\" href=\"#折れ線グラフ\" title=\"Link to this heading\">¶</a></h2>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">ls1</span> <span class=\"pre\">=</span> <span class=\"pre\">[1,</span> <span class=\"pre\">4,</span> <span class=\"pre\">9,</span> <span class=\"pre\">16]</span></code> といった数を要素とするリストを折れ線グラフで表示するには、次のように行います。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[2]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"kn\">import</span> <span class=\"nn\">matplotlib.pyplot</span> <span class=\"k\">as</span> <span class=\"nn\">plt</span>\n<span class=\"n\">ls1</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">4</span><span class=\"p\">,</span> <span class=\"mi\">9</span><span class=\"p\">,</span> <span class=\"mi\">16</span><span class=\"p\">]</span>\n<span class=\"n\">plt</span><span class=\"o\">.</span><span class=\"n\">plot</span><span class=\"p\">(</span><span class=\"n\">ls1</span><span class=\"p\">)</span>\n<span class=\"n\">plt</span><span class=\"o\">.</span><span class=\"n\">show</span><span class=\"p\">()</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<img alt=\"../_images/appendix_3-visualization_6_0.png\" src=\"../_images/appendix_3-visualization_6_0.png\" />\n</div>\n</div>\n<p>折れ線グラフを複数表示させるには、<code class=\"docutils literal notranslate\"><span class=\"pre\">plt.plot</span></code> を繰り返します。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[3]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"kn\">import</span> <span class=\"nn\">matplotlib.pyplot</span> <span class=\"k\">as</span> <span class=\"nn\">plt</span>\n<span class=\"n\">ls1</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">4</span><span class=\"p\">,</span> <span class=\"mi\">9</span><span class=\"p\">,</span> <span class=\"mi\">16</span><span class=\"p\">]</span>\n<span class=\"n\">ls2</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"mi\">8</span><span class=\"p\">,</span> <span class=\"mi\">7</span><span class=\"p\">,</span> <span class=\"mi\">6</span><span class=\"p\">,</span> <span class=\"mi\">5</span><span class=\"p\">]</span>\n<span class=\"n\">plt</span><span class=\"o\">.</span><span class=\"n\">plot</span><span class=\"p\">(</span><span class=\"n\">ls1</span><span class=\"p\">,</span> <span class=\"n\">label</span><span class=\"o\">=</span><span class=\"s1\">&#39;1st plot&#39;</span><span class=\"p\">)</span>\n<span class=\"n\">plt</span><span class=\"o\">.</span><span class=\"n\">plot</span><span class=\"p\">(</span><span class=\"n\">ls2</span><span class=\"p\">,</span> <span class=\"n\">label</span><span class=\"o\">=</span><span class=\"s1\">&#39;2nd plot&#39;</span><span class=\"p\">)</span>\n<span class=\"n\">plt</span><span class=\"o\">.</span><span class=\"n\">show</span><span class=\"p\">()</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<img alt=\"../_images/appendix_3-visualization_8_0.png\" src=\"../_images/appendix_3-visualization_8_0.png\" />\n</div>\n</div>\n</section>\n<section id=\"散布図\">\n<h2>散布図<a class=\"headerlink\" href=\"#散布図\" title=\"Link to this heading\">¶</a></h2>\n<p>散布図を表示させるには、<code class=\"docutils literal notranslate\"><span class=\"pre\">plt.scatter</span></code> にそれぞれの点に対応する水平、垂直座標をリストで与えます。 この2つのリストの要素数は同じでなければなりません。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[4]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"kn\">import</span> <span class=\"nn\">matplotlib.pyplot</span> <span class=\"k\">as</span> <span class=\"nn\">plt</span>\n<span class=\"n\">x</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"mi\">5</span><span class=\"p\">,</span> <span class=\"mi\">10</span><span class=\"p\">,</span> <span class=\"mi\">15</span><span class=\"p\">,</span> <span class=\"mi\">10</span><span class=\"p\">]</span>\n<span class=\"n\">y</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"mi\">10</span><span class=\"p\">,</span> <span class=\"mi\">5</span><span class=\"p\">,</span> <span class=\"mi\">10</span><span class=\"p\">,</span> <span class=\"mi\">15</span><span class=\"p\">]</span>\n<span class=\"n\">plt</span><span class=\"o\">.</span><span class=\"n\">scatter</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">,</span><span class=\"n\">y</span><span class=\"p\">)</span>\n<span class=\"n\">plt</span><span class=\"o\">.</span><span class=\"n\">show</span><span class=\"p\">()</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<img alt=\"../_images/appendix_3-visualization_10_0.png\" src=\"../_images/appendix_3-visualization_10_0.png\" />\n</div>\n</div>\n</section>\n<section id=\"棒グラフ\">\n<h2>棒グラフ<a class=\"headerlink\" href=\"#棒グラフ\" title=\"Link to this heading\">¶</a></h2>\n<p>棒グラフを表示させるには、<code class=\"docutils literal notranslate\"><span class=\"pre\">plt.bar</span></code> に水平座標、高さをリストで与えます。 この2つのリストの要素数は同じでなければなりません。 以下の例では、等間隔でグラフを表示させるため水平軸に整数列を使っています。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[5]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"kn\">import</span> <span class=\"nn\">matplotlib.pyplot</span> <span class=\"k\">as</span> <span class=\"nn\">plt</span>\n<span class=\"n\">x</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"mi\">3</span><span class=\"p\">,</span> <span class=\"mi\">4</span><span class=\"p\">]</span>\n<span class=\"n\">y</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"mi\">10</span><span class=\"p\">,</span> <span class=\"mi\">30</span><span class=\"p\">,</span> <span class=\"mi\">40</span><span class=\"p\">,</span> <span class=\"mi\">15</span><span class=\"p\">]</span>\n<span class=\"n\">plt</span><span class=\"o\">.</span><span class=\"n\">bar</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">,</span><span class=\"n\">y</span><span class=\"p\">)</span>\n<span class=\"n\">plt</span><span class=\"o\">.</span><span class=\"n\">show</span><span class=\"p\">()</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<img alt=\"../_images/appendix_3-visualization_12_0.png\" src=\"../_images/appendix_3-visualization_12_0.png\" />\n</div>\n</div>\n<p>第2回と第3回では文字列、辞書について学びました。 文字列をキー、整数を値とする辞書を棒グラフで可視化します。 さらに、水平軸にはキーをラベルとして表示されます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[6]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"kn\">import</span> <span class=\"nn\">matplotlib.pyplot</span> <span class=\"k\">as</span> <span class=\"nn\">plt</span>\n<span class=\"n\">d</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;apple&#39;</span><span class=\"p\">:</span><span class=\"mi\">10</span><span class=\"p\">,</span> <span class=\"s1\">&#39;banana&#39;</span><span class=\"p\">:</span><span class=\"mi\">30</span><span class=\"p\">,</span> <span class=\"s1\">&#39;orange&#39;</span><span class=\"p\">:</span> <span class=\"mi\">40</span><span class=\"p\">,</span> <span class=\"s1\">&#39;kiwi&#39;</span><span class=\"p\">:</span> <span class=\"mi\">15</span><span class=\"p\">}</span>\n<span class=\"n\">x</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">,</span><span class=\"mi\">2</span><span class=\"p\">,</span><span class=\"mi\">3</span><span class=\"p\">,</span><span class=\"mi\">4</span><span class=\"p\">]</span>\n<span class=\"n\">plt</span><span class=\"o\">.</span><span class=\"n\">bar</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">,</span> <span class=\"n\">d</span><span class=\"o\">.</span><span class=\"n\">values</span><span class=\"p\">(),</span> <span class=\"n\">tick_label</span><span class=\"o\">=</span><span class=\"nb\">list</span><span class=\"p\">(</span><span class=\"n\">d</span><span class=\"o\">.</span><span class=\"n\">keys</span><span class=\"p\">()))</span>\n<span class=\"n\">plt</span><span class=\"o\">.</span><span class=\"n\">show</span><span class=\"p\">()</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<img alt=\"../_images/appendix_3-visualization_14_0.png\" src=\"../_images/appendix_3-visualization_14_0.png\" />\n</div>\n</div>\n</section>\n</section>\n\n\n          </div>\n          \n        </div>\n      </div>\n      <div class=\"sphinxsidebar\" role=\"navigation\" aria-label=\"Main\">\n        <div class=\"sphinxsidebarwrapper\">\n<h1 class=\"logo\"><a href=\"../index.html\">Pythonプログラミング入門</a></h1>\n\n\n\n\n\n\n\n\n<p>\n  <a style=\"font-family: sans-serif; font-size: smaller; background: linear-gradient(to top, #353535 0%, #141414 100%); -webkit-font-smoothing: antialiased; font-weight: normal; text-shadow: rgb(0 0 0 / 40%) 0 -1px 0; padding: 2px 6px; color: #fff; text-decoration: none; border-radius: 4px; border: 1px solid #0d0d0d; box-shadow: inset 0 1px 1px 0 #8f8f8f;\" href=\"https://github.com/utokyo-ipp/utokyo-ipp.github.io\">View on GitHub</a>\n</p><p>\n  <a style=\"font-family: sans-serif; font-size: smaller; background: linear-gradient(to top, #ff1e00 0%, #de1e00 100%); -webkit-font-smoothing: antialiased; font-weight: normal; text-shadow: rgb(0 0 0 / 40%) 0 -1px 0; padding: 2px 6px; color: #fff; text-decoration: none; border-radius: 4px; border: 1px solid #0d0d0d; box-shadow: inset 0 1px 1px 0 #ff8e70;\" href=\"https://utokyo-ipp.github.io/IPP_textbook.pdf\">View PDF</a>\n</p><p>\n  <a style=\"border-bottom: none;\" href=\"https://colab.research.google.com/github/utokyo-ipp/utokyo-ipp.github.io/blob/master/colab/appendix/3-visualization.ipynb\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Google Colaboratory\"></a>\n</p><h3>Navigation</h3>\n<ul class=\"current\">\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../1/1-0.html\">1-0. Colaboratory (Colab) の使い方</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../1/1-1.html\">1-1. 数値演算</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../1/1-2.html\">1-2. 変数と関数の基礎</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../1/1-3.html\">1-3. 論理・比較演算と条件分岐の基礎</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../1/1-4.html\">1-4. テストとデバッグ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../2/2-1.html\">2-1. 文字列 (string)</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../2/2-2.html\">2-2. リスト (list)</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../2/2-3.html\">2-3. 条件分岐</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../3/3-1.html\">3-1. 辞書 (dictionary)</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../3/3-2.html\">3-2. 繰り返し</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../3/3-3.html\">3-3. 関数</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../4/4-1.html\">4-1. ファイル入出力の基本</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../4/4-2.html\">4-2. イテラブルとイテレータ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../4/4-3.html\">4-3. ディレクトリと木構造</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../5/5-1.html\">5-1. モジュールの使い方</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../5/5-2.html\">5-2. モジュールの作り方</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../5/5-3.html\">5-3. NumPyライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../6/6-1.html\">6-1. 内包表記</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../6/6-2.html\">6-2. 高階関数</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../6/6-3.html\">6-3. クラス</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../7/7-1.html\">7-1. pandasライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../7/7-2.html\">7-2. scikit-learnライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"1-jupyter-notebook.html\">▲Jupyter Notebook の使い方</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"2-set.html\">▲セット (set)</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"3-recursion.html\">▲再帰</a></li>\n<li class=\"toctree-l1 current\"><a class=\"current reference internal\" href=\"#\">▲簡単なデータの可視化</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#matplotlib\"><code class=\"docutils literal notranslate\"><span class=\"pre\">matplotlib</span></code></a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#折れ線グラフ\">折れ線グラフ</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#散布図\">散布図</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#棒グラフ\">棒グラフ</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"4-csv.html\">▲CSVファイルの入出力</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"5-bokeh.html\">▲Bokehライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"5-command.html\">▲Pythonスクリプトとコマンドライン実行</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"5-matplotlib.html\">▲Matplotlibライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"5-re.html\">▲正規表現</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../index_of_terms.html\">索引</a></li>\n</ul>\n\n<div class=\"relations\">\n<h3>Related Topics</h3>\n<ul>\n  <li><a href=\"../index.html\">Documentation overview</a><ul>\n      <li>Previous: <a href=\"3-recursion.html\" title=\"previous chapter\">▲再帰</a></li>\n      <li>Next: <a href=\"4-csv.html\" title=\"next chapter\">▲CSVファイルの入出力</a></li>\n  </ul></li>\n</ul>\n</div>\n<search id=\"searchbox\" style=\"display: none\" role=\"search\">\n  <h3 id=\"searchlabel\">Quick search</h3>\n    <div class=\"searchformwrapper\">\n    <form class=\"search\" action=\"../search.html\" method=\"get\">\n      <input type=\"text\" name=\"q\" aria-labelledby=\"searchlabel\" autocomplete=\"off\" autocorrect=\"off\" autocapitalize=\"off\" spellcheck=\"false\"/>\n      <input type=\"submit\" value=\"Go\" />\n    </form>\n    </div>\n</search>\n<script>document.getElementById('searchbox').style.display = \"block\"</script>\n\n\n\n\n\n\n\n\n        </div>\n      </div>\n      <div class=\"clearer\"></div>\n    </div>\n    <div class=\"footer\">\n      &#169;2020–2024, 東京大学 数理・情報教育研究センター (CC BY-NC-ND 4.0).\n      \n      |\n      Powered by <a href=\"https://www.sphinx-doc.org/\">Sphinx 8.0.2</a>\n      &amp; <a href=\"https://alabaster.readthedocs.io\">Alabaster 1.0.0</a>\n      \n    </div>\n\n    \n\n    \n    <script>\n\n      var _gaq = _gaq || [];\n      _gaq.push(['_setAccount', 'G-8M0RXGPPSR']);\n      _gaq.push(['_setDomainName', 'none']);\n      _gaq.push(['_setAllowLinker', true]);\n      _gaq.push(['_trackPageview']);\n\n      (function() {\n        var ga = document.createElement('script'); ga.async = true;\n        ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'https://www') + '.google-analytics.com/ga.js';\n        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);\n      })();\n\n    </script>\n    \n  </body>\n</html>"
  },
  {
    "path": "docs/appendix/4-csv.html",
    "content": "<!DOCTYPE html>\n\n<html lang=\"jp\" data-content_root=\"../\">\n  <head>\n    <meta charset=\"utf-8\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" /><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n\n    <!-- Google tag (gtag.js) -->\n    <script async src=\"https://www.googletagmanager.com/gtag/js?id=G-8M0RXGPPSR\"></script>\n    <script>\n        window.dataLayer = window.dataLayer || [];\n        function gtag(){dataLayer.push(arguments);}\n        gtag('js', new Date());\n        gtag('config', 'G-8M0RXGPPSR');\n    </script>\n    \n    <title>▲CSVファイルの入出力 &#8212; Pythonプログラミング入門  documentation</title>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/pygments.css?v=d1102ebc\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/basic.css?v=c058f7c8\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/alabaster.css?v=27fed22d\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/nbsphinx-code-cells.css\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/custom.css?v=1a1aa8dd\" />\n    <script src=\"../_static/documentation_options.js?v=3ff7d7a7\"></script>\n    <script src=\"../_static/doctools.js?v=9a2dae69\"></script>\n    <script src=\"../_static/sphinx_highlight.js?v=dc90522c\"></script>\n    <script crossorigin=\"anonymous\" integrity=\"sha256-Ae2Vz/4ePdIu6ZyI/5ZGsYnb+m0JlOmKPjt6XZ9JJkA=\" src=\"https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.4/require.min.js\"></script>\n    <script>window.MathJax = {\"tex\": {\"inlineMath\": [[\"$\", \"$\"], [\"\\\\(\", \"\\\\)\"]], \"processEscapes\": true}, \"options\": {\"ignoreHtmlClass\": \"tex2jax_ignore|mathjax_ignore|document\", \"processHtmlClass\": \"tex2jax_process|mathjax_process|math|output_area\"}}</script>\n    <script defer=\"defer\" src=\"https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js\"></script>\n    <link rel=\"index\" title=\"Index\" href=\"../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../search.html\" />\n    <link rel=\"next\" title=\"▲Bokehライブラリ\" href=\"5-bokeh.html\" />\n    <link rel=\"prev\" title=\"▲簡単なデータの可視化\" href=\"3-visualization.html\" />\n   \n  <link rel=\"stylesheet\" href=\"../_static/custom.css\" type=\"text/css\" />\n  \n\n  \n  \n\n  </head><body>\n  \n\n    <div class=\"document\">\n      <div class=\"documentwrapper\">\n        <div class=\"bodywrapper\">\n          \n\n          <div class=\"body\" role=\"main\">\n            \n  <section id=\"▲CSVファイルの入出力\">\n<h1>▲CSVファイルの入出力<a class=\"headerlink\" href=\"#▲CSVファイルの入出力\" title=\"Link to this heading\">¶</a></h1>\n<p>CSVファイルの入出力について説明します。</p>\n<p>参考</p>\n<ul class=\"simple\">\n<li><p><a class=\"reference external\" href=\"https://docs.python.org/ja/3/library/csv.html\">https://docs.python.org/ja/3/library/csv.html</a></p></li>\n</ul>\n<section id=\"CSV形式とは\">\n<h2>CSV形式とは<a class=\"headerlink\" href=\"#CSV形式とは\" title=\"Link to this heading\">¶</a></h2>\n<p><strong>CSV</strong>形式とは &quot;comma-separated values&quot; の略で、 複数の値をコンマで区切って記録するファイル形式です。</p>\n<p>みなさんExcelを使ったことがあると思いますが、 Excelでは1つのセルに1つの値（数値や文字など）が入っていて、 その他のセルの値とは独立に扱えますよね。</p>\n<p>それと同じように、CSV形式では、<code class=\"docutils literal notranslate\"><span class=\"pre\">,</span></code>（コンマ）で区切られた要素はそれぞれ独立の値として扱われます。</p>\n<p>たとえばサークルのメンバーデータを作ることを考えましょう。 メンバーは「鈴木一郎」と「山田花子」の2名で、 それぞれ『氏名』『ニックネーム』『出身地』を記録しておきたいと思います。</p>\n<p>表で表すとこんなデータです。</p>\n<table class=\"docutils align-default\">\n<thead>\n<tr class=\"row-odd\"><th class=\"head\"><p>ID</p></th>\n<th class=\"head\"><p>氏名</p></th>\n<th class=\"head\"><p>ニックネーム</p></th>\n<th class=\"head\"><p>出身地</p></th>\n</tr>\n</thead>\n<tbody>\n<tr class=\"row-even\"><td><p>user1</p></td>\n<td><p>鈴木一郎</p></td>\n<td><p>イチロー</p></td>\n<td><p>広島</p></td>\n</tr>\n<tr class=\"row-odd\"><td><p>user2</p></td>\n<td><p>山田花子</p></td>\n<td><p>はなこ</p></td>\n<td><p>名古屋</p></td>\n</tr>\n</tbody>\n</table>\n<p>これをCSV形式で表すと次のようになります。</p>\n'user1','鈴木一郎','イチロー','広島'\n'user2','山田花子','はなこ','名古屋'</section>\n<section id=\"CSVファイルの読み込み\">\n<h2>CSVファイルの読み込み<a class=\"headerlink\" href=\"#CSVファイルの読み込み\" title=\"Link to this heading\">¶</a></h2>\n<p>CSVファイルを読み書きするには、 ファイルをオープンして、そのファイルオブジェクトから、 CSVリーダを作ります。</p>\n<p><strong>CSVリーダ</strong>とは、CSVファイルからデータを読み込むためのオブジェクトで、 このオブジェクトのメソッドを呼び出すことにより、CSVファイルからデータを読み込むことができます。</p>\n<p>CSVリーダを作るには、 <code class=\"docutils literal notranslate\"><span class=\"pre\">csv</span></code> というモジュールの <code class=\"docutils literal notranslate\"><span class=\"pre\">csv.reader</span></code> という関数にファイルオブジェクトを渡します。</p>\n<p>たとえば、次のような表で表されるCSVファイル <code class=\"docutils literal notranslate\"><span class=\"pre\">small.csv</span></code> を読み込んでみましょう。</p>\n<p>0列目 | 1列目 | 2列目 | 3列目 | 4列目</p>\n<p>11 | 12 | 13 | 14 | 15 21 | 22 | 23 | 24 | 25 31 | 32 | 33 | 34 | 35</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[1]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"kn\">import</span> <span class=\"nn\">csv</span>\n<span class=\"n\">f</span> <span class=\"o\">=</span> <span class=\"nb\">open</span><span class=\"p\">(</span><span class=\"s1\">&#39;small.csv&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;r&#39;</span><span class=\"p\">)</span>\n<span class=\"n\">dataReader</span> <span class=\"o\">=</span> <span class=\"n\">csv</span><span class=\"o\">.</span><span class=\"n\">reader</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<p>このオブジェクトもイテレータで、<code class=\"docutils literal notranslate\"><span class=\"pre\">next</span></code> という関数を呼び出すことができます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[2]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">next</span><span class=\"p\">(</span><span class=\"n\">dataReader</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[2]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n[&#39;11&#39;, &#39;12&#39;, &#39;13&#39;, &#39;14&#39;, &#39;15&#39;]\n</pre></div></div>\n</div>\n<p>このようにして CSVファイルを読むと、 CSVファイルの各行のデータが文字列のリストとなって返されます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[3]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">next</span><span class=\"p\">(</span><span class=\"n\">dataReader</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[3]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n[&#39;21&#39;, &#39;22&#39;, &#39;23&#39;, &#39;24&#39;, &#39;25&#39;]\n</pre></div></div>\n</div>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[4]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">row</span> <span class=\"o\">=</span> <span class=\"nb\">next</span><span class=\"p\">(</span><span class=\"n\">dataReader</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[5]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">row</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[5]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n[&#39;31&#39;, &#39;32&#39;, &#39;33&#39;, &#39;34&#39;, &#39;35&#39;]\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[6]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">row</span><span class=\"p\">[</span><span class=\"mi\">2</span><span class=\"p\">]</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[6]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n&#39;33&#39;\n</pre></div></div>\n</div>\n<p>数値が <code class=\"docutils literal notranslate\"><span class=\"pre\">''</span></code> で囲われている場合、数値ではなく文字列として扱われているので、そのまま計算に使用することができません。</p>\n<p>文字列が整数を表す場合、<code class=\"docutils literal notranslate\"><span class=\"pre\">int</span></code> 関数によって文字列を整数に変換することができます。 文字列が小数を含む場合は <code class=\"docutils literal notranslate\"><span class=\"pre\">float</span></code> 関数で浮動小数点数型に変換、文字列が複素数を表す場合は <code class=\"docutils literal notranslate\"><span class=\"pre\">complex</span></code> 関数で複素数に変換します。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[7]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">int</span><span class=\"p\">(</span><span class=\"n\">row</span><span class=\"p\">[</span><span class=\"mi\">2</span><span class=\"p\">])</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[7]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n33\n</pre></div></div>\n</div>\n<p>ファイルの終わりまで達した後に <code class=\"docutils literal notranslate\"><span class=\"pre\">next</span></code> 関数を実行すると、下のようにエラーが返ってきます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[8]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">next</span><span class=\"p\">(</span><span class=\"n\">dataReader</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n<span class=\"ansi-red-fg\">---------------------------------------------------------------------------</span>\n<span class=\"ansi-red-fg\">StopIteration</span>                             Traceback (most recent call last)\nCell <span class=\"ansi-green-fg\">In[8], line 1</span>\n<span class=\"ansi-green-fg\">----&gt; 1</span> <span class=\"ansi-yellow-bg\" style=\"color: rgb(0,135,0)\">next</span><span class=\"ansi-yellow-bg\">(</span><span class=\"ansi-yellow-bg\">dataReader</span><span class=\"ansi-yellow-bg\">)</span>\n\n<span class=\"ansi-red-fg\">StopIteration</span>:\n</pre></div></div>\n</div>\n<p>ファイルを使い終わったらクローズすることを忘れないようにしましょう。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[9]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">close</span><span class=\"p\">()</span>\n</pre></div>\n</div>\n</div>\n</section>\n<section id=\"CSVファイルに対するfor文\">\n<h2>CSVファイルに対するfor文<a class=\"headerlink\" href=\"#CSVファイルに対するfor文\" title=\"Link to this heading\">¶</a></h2>\n<p>CSVリーダもイテレータですので、for文の <code class=\"docutils literal notranslate\"><span class=\"pre\">in</span></code> の後に書くことができます。</p>\n<div class=\"highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>for row in dataReader:\n    ...\n</pre></div>\n</div>\n<p>繰り返しの各ステップで、<code class=\"docutils literal notranslate\"><span class=\"pre\">next(dataReader)</span></code> が呼び出されて、 <code class=\"docutils literal notranslate\"><span class=\"pre\">row</span></code> にその値が設定され、for文の中身が実行されます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[10]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">f</span> <span class=\"o\">=</span> <span class=\"nb\">open</span><span class=\"p\">(</span><span class=\"s1\">&#39;small.csv&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;r&#39;</span><span class=\"p\">)</span>\n<span class=\"n\">dataReader</span> <span class=\"o\">=</span> <span class=\"n\">csv</span><span class=\"o\">.</span><span class=\"n\">reader</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"p\">)</span>\n<span class=\"k\">for</span> <span class=\"n\">row</span> <span class=\"ow\">in</span> <span class=\"n\">dataReader</span><span class=\"p\">:</span>\n    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">row</span><span class=\"p\">)</span>\n<span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">close</span><span class=\"p\">()</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n[&#39;11&#39;, &#39;12&#39;, &#39;13&#39;, &#39;14&#39;, &#39;15&#39;]\n[&#39;21&#39;, &#39;22&#39;, &#39;23&#39;, &#39;24&#39;, &#39;25&#39;]\n[&#39;31&#39;, &#39;32&#39;, &#39;33&#39;, &#39;34&#39;, &#39;35&#39;]\n</pre></div></div>\n</div>\n</section>\n<section id=\"CSVファイルに対するwith文\">\n<h2>CSVファイルに対するwith文<a class=\"headerlink\" href=\"#CSVファイルに対するwith文\" title=\"Link to this heading\">¶</a></h2>\n<p>以下はwith文を使った例です。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[11]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">with</span> <span class=\"nb\">open</span><span class=\"p\">(</span><span class=\"s1\">&#39;small.csv&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;r&#39;</span><span class=\"p\">)</span> <span class=\"k\">as</span> <span class=\"n\">f</span><span class=\"p\">:</span>\n    <span class=\"n\">dataReader</span> <span class=\"o\">=</span> <span class=\"n\">csv</span><span class=\"o\">.</span><span class=\"n\">reader</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"p\">)</span>\n    <span class=\"k\">for</span> <span class=\"n\">row</span> <span class=\"ow\">in</span> <span class=\"n\">dataReader</span><span class=\"p\">:</span>\n        <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">row</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n[&#39;11&#39;, &#39;12&#39;, &#39;13&#39;, &#39;14&#39;, &#39;15&#39;]\n[&#39;21&#39;, &#39;22&#39;, &#39;23&#39;, &#39;24&#39;, &#39;25&#39;]\n[&#39;31&#39;, &#39;32&#39;, &#39;33&#39;, &#39;34&#39;, &#39;35&#39;]\n</pre></div></div>\n</div>\n</section>\n<section id=\"CSVファイルの書き込み\">\n<h2>CSVファイルの書き込み<a class=\"headerlink\" href=\"#CSVファイルの書き込み\" title=\"Link to this heading\">¶</a></h2>\n<p>CSVファイルを作成して書き込むには、CSVライターを作ります。</p>\n<p><strong>CSVライター</strong>とは、CSVファイルを作ってデータを書き込むためのオブジェクトで、 このオブジェクトのメソッドを呼び出すことにより、データがCSV形式でファイルに書き込まれます。</p>\n<p>CSVライターを作るには、 <code class=\"docutils literal notranslate\"><span class=\"pre\">csv</span></code> というモジュールの <code class=\"docutils literal notranslate\"><span class=\"pre\">csv.writer</span></code> という関数にファイルオブジェクトを渡します。 ここで、半角英数文字以外の文字（たとえば日本語文字や全角英数文字）を書き込み・書き出しする際には、 文字コード（たとえば <code class=\"docutils literal notranslate\"><span class=\"pre\">encoding='utf-8'</span></code>）を指定し、 また書き出しの際にはさらに改行コードとして <code class=\"docutils literal notranslate\"><span class=\"pre\">newline=''</span></code> を指定しないと文字化けが生じる可能性があります。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[12]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">f</span> <span class=\"o\">=</span> <span class=\"nb\">open</span><span class=\"p\">(</span><span class=\"s1\">&#39;out.csv&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;w&#39;</span><span class=\"p\">,</span> <span class=\"n\">encoding</span><span class=\"o\">=</span><span class=\"s1\">&#39;utf-8&#39;</span><span class=\"p\">,</span> <span class=\"n\">newline</span><span class=\"o\">=</span><span class=\"s1\">&#39;&#39;</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[13]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">dataWriter</span> <span class=\"o\">=</span> <span class=\"n\">csv</span><span class=\"o\">.</span><span class=\"n\">writer</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[14]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">dir</span><span class=\"p\">(</span><span class=\"n\">dataWriter</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[14]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n[&#39;__class__&#39;,\n &#39;__delattr__&#39;,\n &#39;__dir__&#39;,\n &#39;__doc__&#39;,\n &#39;__eq__&#39;,\n &#39;__format__&#39;,\n &#39;__ge__&#39;,\n &#39;__getattribute__&#39;,\n &#39;__getstate__&#39;,\n &#39;__gt__&#39;,\n &#39;__hash__&#39;,\n &#39;__init__&#39;,\n &#39;__init_subclass__&#39;,\n &#39;__le__&#39;,\n &#39;__lt__&#39;,\n &#39;__module__&#39;,\n &#39;__ne__&#39;,\n &#39;__new__&#39;,\n &#39;__reduce__&#39;,\n &#39;__reduce_ex__&#39;,\n &#39;__repr__&#39;,\n &#39;__setattr__&#39;,\n &#39;__sizeof__&#39;,\n &#39;__str__&#39;,\n &#39;__subclasshook__&#39;,\n &#39;dialect&#39;,\n &#39;writerow&#39;,\n &#39;writerows&#39;]\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[15]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">dataWriter</span><span class=\"o\">.</span><span class=\"n\">writerow</span><span class=\"p\">([</span><span class=\"mi\">1</span><span class=\"p\">,</span><span class=\"mi\">2</span><span class=\"p\">,</span><span class=\"mi\">3</span><span class=\"p\">])</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[15]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n7\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[16]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">dataWriter</span><span class=\"o\">.</span><span class=\"n\">writerow</span><span class=\"p\">([</span><span class=\"mi\">21</span><span class=\"p\">,</span><span class=\"mi\">22</span><span class=\"p\">,</span><span class=\"mi\">23</span><span class=\"p\">])</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[16]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n10\n</pre></div></div>\n</div>\n<p>書き込みモードの場合も、ファイルを使い終わったらクローズすることを忘れないようにしましょう。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[17]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">close</span><span class=\"p\">()</span>\n</pre></div>\n</div>\n</div>\n<p>読み込みのときと同様、with文を使うこともできます。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[18]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">with</span> <span class=\"nb\">open</span><span class=\"p\">(</span><span class=\"s1\">&#39;out.csv&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;w&#39;</span><span class=\"p\">,</span> <span class=\"n\">encoding</span><span class=\"o\">=</span><span class=\"s1\">&#39;utf-8&#39;</span><span class=\"p\">,</span> <span class=\"n\">newline</span><span class=\"o\">=</span><span class=\"s1\">&#39;&#39;</span><span class=\"p\">)</span> <span class=\"k\">as</span> <span class=\"n\">f</span><span class=\"p\">:</span>\n    <span class=\"n\">dataWriter</span> <span class=\"o\">=</span> <span class=\"n\">csv</span><span class=\"o\">.</span><span class=\"n\">writer</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"p\">)</span>\n    <span class=\"n\">dataWriter</span><span class=\"o\">.</span><span class=\"n\">writerow</span><span class=\"p\">([</span><span class=\"mi\">1</span><span class=\"p\">,</span><span class=\"mi\">2</span><span class=\"p\">,</span><span class=\"mi\">3</span><span class=\"p\">])</span>\n    <span class=\"n\">dataWriter</span><span class=\"o\">.</span><span class=\"n\">writerow</span><span class=\"p\">([</span><span class=\"mi\">21</span><span class=\"p\">,</span><span class=\"mi\">22</span><span class=\"p\">,</span><span class=\"mi\">23</span><span class=\"p\">])</span>\n</pre></div>\n</div>\n</div>\n<section id=\"東京の7月の気温\">\n<h3>東京の7月の気温<a class=\"headerlink\" href=\"#東京の7月の気温\" title=\"Link to this heading\">¶</a></h3>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">tokyo-temps.csv</span></code> には、気象庁のオープンデータからダウンロードした、 東京の7月の平均気温のデータが入っています。</p>\n<p><a class=\"reference external\" href=\"http://www.data.jma.go.jp/gmd/risk/obsdl/\">http://www.data.jma.go.jp/gmd/risk/obsdl/</a></p>\n<p>48行目の第2列に1875年7月の平均気温が入っており、 以下、2016年まで、12行ごとに7月の平均気温が入っています。</p>\n<p>以下は、これを取り出すPythonの簡単なコードです。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[19]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"kn\">import</span> <span class=\"nn\">csv</span>\n\n<span class=\"k\">with</span> <span class=\"nb\">open</span><span class=\"p\">(</span><span class=\"s1\">&#39;tokyo-temps.csv&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;r&#39;</span><span class=\"p\">,</span> <span class=\"n\">encoding</span><span class=\"o\">=</span><span class=\"s1\">&#39;shift_jis&#39;</span><span class=\"p\">)</span> <span class=\"k\">as</span> <span class=\"n\">f</span><span class=\"p\">:</span>\n    <span class=\"n\">dataReader</span> <span class=\"o\">=</span> <span class=\"n\">csv</span><span class=\"o\">.</span><span class=\"n\">reader</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"p\">)</span> <span class=\"c1\"># csvリーダを作成</span>\n    <span class=\"n\">n</span><span class=\"o\">=</span><span class=\"mi\">0</span>\n    <span class=\"n\">year</span> <span class=\"o\">=</span> <span class=\"mi\">1875</span>\n    <span class=\"n\">years</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n    <span class=\"n\">july_temps</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n    <span class=\"k\">for</span> <span class=\"n\">row</span> <span class=\"ow\">in</span> <span class=\"n\">dataReader</span><span class=\"p\">:</span> <span class=\"c1\"># CSVファイルの中身を1行ずつ読み込み</span>\n        <span class=\"n\">n</span> <span class=\"o\">=</span> <span class=\"n\">n</span><span class=\"o\">+</span><span class=\"mi\">1</span>\n        <span class=\"k\">if</span> <span class=\"n\">n</span><span class=\"o\">&gt;=</span><span class=\"mi\">48</span> <span class=\"ow\">and</span> <span class=\"p\">(</span><span class=\"n\">n</span><span class=\"o\">-</span><span class=\"mi\">48</span><span class=\"p\">)</span><span class=\"o\">%</span><span class=\"k\">12</span> == 0: # 48行目からはじめて12か月ごとにif内を実行\n            <span class=\"n\">years</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">year</span><span class=\"p\">)</span>\n            <span class=\"n\">july_temps</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"nb\">float</span><span class=\"p\">(</span><span class=\"n\">row</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">]))</span>\n            <span class=\"n\">year</span> <span class=\"o\">=</span> <span class=\"n\">year</span> <span class=\"o\">+</span> <span class=\"mi\">1</span>\n</pre></div>\n</div>\n</div>\n<p>ファイルをオープンするときに、キーワード引数の <code class=\"docutils literal notranslate\"><span class=\"pre\">encoding</span></code> が指定されています。 このファイルはShift_JISという文字コードで書かれているため、 この引数で、ファイルの符号（<strong>文字コード</strong>）を指定します。 <code class=\"docutils literal notranslate\"><span class=\"pre\">'shift_jis'</span></code> はShift_JISを意味します。この他に、<code class=\"docutils literal notranslate\"><span class=\"pre\">'utf-8'</span></code>（UTF-8、すなわちビットのUnicode）があります。</p>\n<p>変数 <code class=\"docutils literal notranslate\"><span class=\"pre\">years</span></code> に年の配列、変数 <code class=\"docutils literal notranslate\"><span class=\"pre\">july_temps</span></code> に対応する年の7月の平均気温の配列が設定されます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[20]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">years</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[20]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n[1875,\n 1876,\n 1877,\n 1878,\n 1879,\n 1880,\n 1881,\n 1882,\n 1883,\n 1884,\n 1885,\n 1886,\n 1887,\n 1888,\n 1889,\n 1890,\n 1891,\n 1892,\n 1893,\n 1894,\n 1895,\n 1896,\n 1897,\n 1898,\n 1899,\n 1900,\n 1901,\n 1902,\n 1903,\n 1904,\n 1905,\n 1906,\n 1907,\n 1908,\n 1909,\n 1910,\n 1911,\n 1912,\n 1913,\n 1914,\n 1915,\n 1916,\n 1917,\n 1918,\n 1919,\n 1920,\n 1921,\n 1922,\n 1923,\n 1924,\n 1925,\n 1926,\n 1927,\n 1928,\n 1929,\n 1930,\n 1931,\n 1932,\n 1933,\n 1934,\n 1935,\n 1936,\n 1937,\n 1938,\n 1939,\n 1940,\n 1941,\n 1942,\n 1943,\n 1944,\n 1945,\n 1946,\n 1947,\n 1948,\n 1949,\n 1950,\n 1951,\n 1952,\n 1953,\n 1954,\n 1955,\n 1956,\n 1957,\n 1958,\n 1959,\n 1960,\n 1961,\n 1962,\n 1963,\n 1964,\n 1965,\n 1966,\n 1967,\n 1968,\n 1969,\n 1970,\n 1971,\n 1972,\n 1973,\n 1974,\n 1975,\n 1976,\n 1977,\n 1978,\n 1979,\n 1980,\n 1981,\n 1982,\n 1983,\n 1984,\n 1985,\n 1986,\n 1987,\n 1988,\n 1989,\n 1990,\n 1991,\n 1992,\n 1993,\n 1994,\n 1995,\n 1996,\n 1997,\n 1998,\n 1999,\n 2000,\n 2001,\n 2002,\n 2003,\n 2004,\n 2005,\n 2006,\n 2007,\n 2008,\n 2009,\n 2010,\n 2011,\n 2012,\n 2013,\n 2014,\n 2015,\n 2016]\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[21]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">july_temps</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[21]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n[26.0,\n 24.3,\n 26.5,\n 26.0,\n 26.1,\n 24.2,\n 24.0,\n 24.2,\n 23.7,\n 23.4,\n 23.1,\n 25.0,\n 23.6,\n 24.5,\n 23.4,\n 23.5,\n 24.9,\n 25.7,\n 25.3,\n 26.8,\n 22.1,\n 24.1,\n 22.9,\n 25.9,\n 23.2,\n 22.8,\n 22.1,\n 21.8,\n 23.2,\n 24.8,\n 23.3,\n 23.5,\n 22.7,\n 22.1,\n 24.3,\n 23.0,\n 24.5,\n 24.3,\n 23.3,\n 25.5,\n 24.2,\n 23.9,\n 25.7,\n 26.0,\n 23.6,\n 26.1,\n 24.3,\n 25.0,\n 24.0,\n 26.1,\n 23.2,\n 24.6,\n 26.0,\n 23.4,\n 25.9,\n 26.3,\n 21.8,\n 25.7,\n 26.6,\n 23.9,\n 24.3,\n 24.9,\n 26.3,\n 25.0,\n 26.5,\n 26.9,\n 23.7,\n 27.5,\n 25.1,\n 25.6,\n 22.0,\n 26.2,\n 25.7,\n 26.0,\n 25.3,\n 26.5,\n 24.3,\n 24.3,\n 24.7,\n 22.3,\n 27.6,\n 24.2,\n 24.4,\n 24.9,\n 26.1,\n 25.8,\n 27.4,\n 25.1,\n 25.7,\n 25.5,\n 24.2,\n 24.4,\n 26.3,\n 24.7,\n 25.0,\n 25.4,\n 25.8,\n 25.2,\n 26.1,\n 23.4,\n 25.6,\n 23.9,\n 25.8,\n 27.8,\n 25.2,\n 23.8,\n 26.3,\n 23.1,\n 23.8,\n 26.2,\n 26.3,\n 23.9,\n 27.0,\n 22.4,\n 24.1,\n 25.7,\n 26.7,\n 25.5,\n 22.5,\n 28.3,\n 26.4,\n 26.2,\n 26.6,\n 25.3,\n 25.9,\n 27.7,\n 28.5,\n 28.0,\n 22.8,\n 28.5,\n 25.6,\n 25.6,\n 24.4,\n 27.0,\n 26.3,\n 28.0,\n 27.3,\n 26.4,\n 27.3,\n 26.8,\n 26.2,\n 25.4]\n</pre></div></div>\n</div>\n<p>ここでは詳しく説明しませんが、<strong>線形回帰</strong>によるフィッティングを行ってみましょう。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[22]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"kn\">import</span> <span class=\"nn\">numpy</span>\n<span class=\"kn\">import</span> <span class=\"nn\">matplotlib.pyplot</span> <span class=\"k\">as</span> <span class=\"nn\">plt</span>\n<span class=\"o\">%</span><span class=\"k\">matplotlib</span> inline\n\n<span class=\"n\">fitp</span> <span class=\"o\">=</span> <span class=\"n\">numpy</span><span class=\"o\">.</span><span class=\"n\">poly1d</span><span class=\"p\">(</span><span class=\"n\">numpy</span><span class=\"o\">.</span><span class=\"n\">polyfit</span><span class=\"p\">(</span><span class=\"n\">years</span><span class=\"p\">,</span> <span class=\"n\">july_temps</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">))</span>\n<span class=\"n\">ma</span> <span class=\"o\">=</span> <span class=\"nb\">max</span><span class=\"p\">(</span><span class=\"n\">years</span><span class=\"p\">)</span>\n<span class=\"n\">mi</span> <span class=\"o\">=</span> <span class=\"nb\">min</span><span class=\"p\">(</span><span class=\"n\">years</span><span class=\"p\">)</span>\n<span class=\"n\">xp</span> <span class=\"o\">=</span> <span class=\"n\">numpy</span><span class=\"o\">.</span><span class=\"n\">linspace</span><span class=\"p\">(</span><span class=\"n\">mi</span><span class=\"p\">,</span> <span class=\"n\">ma</span><span class=\"p\">,</span> <span class=\"p\">(</span><span class=\"n\">ma</span> <span class=\"o\">-</span> <span class=\"n\">mi</span><span class=\"p\">))</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[23]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">plt</span><span class=\"o\">.</span><span class=\"n\">plot</span><span class=\"p\">(</span><span class=\"n\">years</span><span class=\"p\">,</span> <span class=\"n\">july_temps</span><span class=\"p\">,</span> <span class=\"s1\">&#39;.&#39;</span><span class=\"p\">,</span> <span class=\"n\">xp</span><span class=\"p\">,</span> <span class=\"n\">fitp</span><span class=\"p\">(</span><span class=\"n\">xp</span><span class=\"p\">),</span> <span class=\"s1\">&#39;-&#39;</span><span class=\"p\">)</span>\n<span class=\"n\">plt</span><span class=\"o\">.</span><span class=\"n\">show</span><span class=\"p\">()</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<img alt=\"../_images/appendix_4-csv_41_0.png\" src=\"../_images/appendix_4-csv_41_0.png\" />\n</div>\n</div>\n</section>\n</section>\n<section id=\"練習\">\n<h2>練習<a class=\"headerlink\" href=\"#練習\" title=\"Link to this heading\">¶</a></h2>\n<ol class=\"arabic simple\">\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">tokyo-temps.csv</span></code> を読み込んで、各行が西暦年と7月の気温のみからなる <code class=\"docutils literal notranslate\"><span class=\"pre\">'tokyo-july-temps.csv'</span></code> という名前のCSVファイルを作成してください。 西暦年は1875から2016までとします。</p></li>\n<li><p>作成したCSVファイルをExcelで読み込むとどうなるか確認してください。</p></li>\n</ol>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[ ]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span>\n</pre></div>\n</div>\n</div>\n<p>以下のセルによってテストしてください。（<code class=\"docutils literal notranslate\"><span class=\"pre\">years</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">july_temps</span></code> の値がそのままと仮定しています。）</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[24]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">with</span> <span class=\"nb\">open</span><span class=\"p\">(</span><span class=\"s1\">&#39;tokyo-july-temps.csv&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;r&#39;</span><span class=\"p\">,</span> <span class=\"n\">encoding</span><span class=\"o\">=</span><span class=\"s1\">&#39;shift_jis&#39;</span><span class=\"p\">)</span> <span class=\"k\">as</span> <span class=\"n\">f</span><span class=\"p\">:</span>\n    <span class=\"n\">i</span> <span class=\"o\">=</span> <span class=\"mi\">0</span>\n    <span class=\"n\">dataReader</span> <span class=\"o\">=</span> <span class=\"n\">csv</span><span class=\"o\">.</span><span class=\"n\">reader</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"p\">)</span>\n    <span class=\"k\">for</span> <span class=\"n\">row</span> <span class=\"ow\">in</span> <span class=\"n\">dataReader</span><span class=\"p\">:</span>\n        <span class=\"k\">if</span> <span class=\"nb\">int</span><span class=\"p\">(</span><span class=\"n\">row</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">])</span> <span class=\"o\">!=</span> <span class=\"n\">years</span><span class=\"p\">[</span><span class=\"n\">i</span><span class=\"p\">]</span> <span class=\"ow\">or</span> <span class=\"nb\">abs</span><span class=\"p\">(</span><span class=\"nb\">float</span><span class=\"p\">(</span><span class=\"n\">row</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">])</span><span class=\"o\">-</span><span class=\"n\">july_temps</span><span class=\"p\">[</span><span class=\"n\">i</span><span class=\"p\">])</span><span class=\"o\">&gt;</span><span class=\"mf\">0.000001</span><span class=\"p\">:</span>\n            <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s1\">&#39;error&#39;</span><span class=\"p\">,</span> <span class=\"nb\">int</span><span class=\"p\">(</span><span class=\"n\">row</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]),</span> <span class=\"nb\">float</span><span class=\"p\">(</span><span class=\"n\">row</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">]))</span>\n        <span class=\"n\">i</span> <span class=\"o\">+=</span> <span class=\"mi\">1</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">i</span><span class=\"o\">==</span> <span class=\"mi\">142</span><span class=\"p\">)</span> <span class=\"c1\"># 1875年から2016年まで142年間分のデータがあるはずです</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nTrue\n</pre></div></div>\n</div>\n</section>\n<section id=\"id6\">\n<h2>練習<a class=\"headerlink\" href=\"#id6\" title=\"Link to this heading\">¶</a></h2>\n<p>整数データのみからなるCSVファイルの名前を受け取ると、そのCSVファイルの各行を読み込んで整数のリストを作り、 ファイル全体の内容を、そのようなリストのリストとして返す関数 <code class=\"docutils literal notranslate\"><span class=\"pre\">csv_matrix(name)</span></code> を定義してください。</p>\n<p>たとえば上で用いた <code class=\"docutils literal notranslate\"><span class=\"pre\">small.csv</span></code> には次のようなデータが入っています。</p>\n<p>0列目 | 1列目 | 2列目 | 3列目 | 4列目</p>\n<p>11 | 12 | 13 | 14 | 15 21 | 22 | 23 | 24 | 25 31 | 32 | 33 | 34 | 35</p>\n<p>この <code class=\"docutils literal notranslate\"><span class=\"pre\">small.csv</span></code> の名前が引数として与えられた場合、</p>\n<div class=\"highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[[11, 12, 13, 14, 15], [21, 22, 23, 24, 25], [31, 32, 33, 34, 35]]\n</pre></div>\n</div>\n<p>というリストを返します。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[25]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">def</span> <span class=\"nf\">csv_matrix</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"p\">):</span>\n    <span class=\"o\">...</span>\n</pre></div>\n</div>\n</div>\n<p>以下のセルによってテストしてください。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[26]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">csv_matrix</span><span class=\"p\">(</span><span class=\"s1\">&#39;small.csv&#39;</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"p\">[[</span><span class=\"mi\">11</span><span class=\"p\">,</span> <span class=\"mi\">12</span><span class=\"p\">,</span> <span class=\"mi\">13</span><span class=\"p\">,</span> <span class=\"mi\">14</span><span class=\"p\">,</span> <span class=\"mi\">15</span><span class=\"p\">],</span> <span class=\"p\">[</span><span class=\"mi\">21</span><span class=\"p\">,</span> <span class=\"mi\">22</span><span class=\"p\">,</span> <span class=\"mi\">23</span><span class=\"p\">,</span> <span class=\"mi\">24</span><span class=\"p\">,</span> <span class=\"mi\">25</span><span class=\"p\">],</span> <span class=\"p\">[</span><span class=\"mi\">31</span><span class=\"p\">,</span> <span class=\"mi\">32</span><span class=\"p\">,</span> <span class=\"mi\">33</span><span class=\"p\">,</span> <span class=\"mi\">34</span><span class=\"p\">,</span> <span class=\"mi\">35</span><span class=\"p\">]])</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nFalse\n</pre></div></div>\n</div>\n</section>\n<section id=\"練習の解答\">\n<h2>練習の解答<a class=\"headerlink\" href=\"#練習の解答\" title=\"Link to this heading\">¶</a></h2>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[27]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">with</span> <span class=\"nb\">open</span><span class=\"p\">(</span><span class=\"s1\">&#39;tokyo-july-temps.csv&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;w&#39;</span><span class=\"p\">,</span> <span class=\"n\">encoding</span><span class=\"o\">=</span><span class=\"s1\">&#39;utf-8&#39;</span><span class=\"p\">,</span> <span class=\"n\">newline</span><span class=\"o\">=</span><span class=\"s1\">&#39;&#39;</span><span class=\"p\">)</span> <span class=\"k\">as</span> <span class=\"n\">f</span><span class=\"p\">:</span>\n    <span class=\"n\">i</span> <span class=\"o\">=</span> <span class=\"mi\">0</span>\n    <span class=\"n\">dataWriter</span> <span class=\"o\">=</span> <span class=\"n\">csv</span><span class=\"o\">.</span><span class=\"n\">writer</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"p\">)</span>\n    <span class=\"k\">for</span> <span class=\"n\">i</span> <span class=\"ow\">in</span> <span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">years</span><span class=\"p\">)):</span>\n        <span class=\"n\">dataWriter</span><span class=\"o\">.</span><span class=\"n\">writerow</span><span class=\"p\">([</span><span class=\"n\">years</span><span class=\"p\">[</span><span class=\"n\">i</span><span class=\"p\">],</span><span class=\"n\">july_temps</span><span class=\"p\">[</span><span class=\"n\">i</span><span class=\"p\">]])</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[28]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">def</span> <span class=\"nf\">csv_matrix</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"p\">):</span>\n    <span class=\"n\">rows</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n    <span class=\"k\">with</span> <span class=\"nb\">open</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"p\">,</span> <span class=\"s1\">&#39;r&#39;</span><span class=\"p\">)</span> <span class=\"k\">as</span> <span class=\"n\">f</span><span class=\"p\">:</span>\n        <span class=\"n\">dataReader</span> <span class=\"o\">=</span> <span class=\"n\">csv</span><span class=\"o\">.</span><span class=\"n\">reader</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"p\">)</span>\n        <span class=\"k\">for</span> <span class=\"n\">row</span> <span class=\"ow\">in</span> <span class=\"n\">dataReader</span><span class=\"p\">:</span>\n            <span class=\"n\">rows</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">([</span><span class=\"nb\">int</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">)</span> <span class=\"k\">for</span> <span class=\"n\">x</span> <span class=\"ow\">in</span> <span class=\"n\">row</span><span class=\"p\">])</span>\n    <span class=\"k\">return</span> <span class=\"n\">rows</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[ ]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span>\n</pre></div>\n</div>\n</div>\n</section>\n</section>\n\n\n          </div>\n          \n        </div>\n      </div>\n      <div class=\"sphinxsidebar\" role=\"navigation\" aria-label=\"Main\">\n        <div class=\"sphinxsidebarwrapper\">\n<h1 class=\"logo\"><a href=\"../index.html\">Pythonプログラミング入門</a></h1>\n\n\n\n\n\n\n\n\n<p>\n  <a style=\"font-family: sans-serif; font-size: smaller; background: linear-gradient(to top, #353535 0%, #141414 100%); -webkit-font-smoothing: antialiased; font-weight: normal; text-shadow: rgb(0 0 0 / 40%) 0 -1px 0; padding: 2px 6px; color: #fff; text-decoration: none; border-radius: 4px; border: 1px solid #0d0d0d; box-shadow: inset 0 1px 1px 0 #8f8f8f;\" href=\"https://github.com/utokyo-ipp/utokyo-ipp.github.io\">View on GitHub</a>\n</p><p>\n  <a style=\"font-family: sans-serif; font-size: smaller; background: linear-gradient(to top, #ff1e00 0%, #de1e00 100%); -webkit-font-smoothing: antialiased; font-weight: normal; text-shadow: rgb(0 0 0 / 40%) 0 -1px 0; padding: 2px 6px; color: #fff; text-decoration: none; border-radius: 4px; border: 1px solid #0d0d0d; box-shadow: inset 0 1px 1px 0 #ff8e70;\" href=\"https://utokyo-ipp.github.io/IPP_textbook.pdf\">View PDF</a>\n</p><p>\n  <a style=\"border-bottom: none;\" href=\"https://colab.research.google.com/github/utokyo-ipp/utokyo-ipp.github.io/blob/master/colab/appendix/4-csv.ipynb\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Google Colaboratory\"></a>\n</p><h3>Navigation</h3>\n<ul class=\"current\">\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../1/1-0.html\">1-0. Colaboratory (Colab) の使い方</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../1/1-1.html\">1-1. 数値演算</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../1/1-2.html\">1-2. 変数と関数の基礎</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../1/1-3.html\">1-3. 論理・比較演算と条件分岐の基礎</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../1/1-4.html\">1-4. テストとデバッグ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../2/2-1.html\">2-1. 文字列 (string)</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../2/2-2.html\">2-2. リスト (list)</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../2/2-3.html\">2-3. 条件分岐</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../3/3-1.html\">3-1. 辞書 (dictionary)</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../3/3-2.html\">3-2. 繰り返し</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../3/3-3.html\">3-3. 関数</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../4/4-1.html\">4-1. ファイル入出力の基本</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../4/4-2.html\">4-2. イテラブルとイテレータ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../4/4-3.html\">4-3. ディレクトリと木構造</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../5/5-1.html\">5-1. モジュールの使い方</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../5/5-2.html\">5-2. モジュールの作り方</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../5/5-3.html\">5-3. NumPyライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../6/6-1.html\">6-1. 内包表記</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../6/6-2.html\">6-2. 高階関数</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../6/6-3.html\">6-3. クラス</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../7/7-1.html\">7-1. pandasライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../7/7-2.html\">7-2. scikit-learnライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"1-jupyter-notebook.html\">▲Jupyter Notebook の使い方</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"2-set.html\">▲セット (set)</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"3-recursion.html\">▲再帰</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"3-visualization.html\">▲簡単なデータの可視化</a></li>\n<li class=\"toctree-l1 current\"><a class=\"current reference internal\" href=\"#\">▲CSVファイルの入出力</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#CSV形式とは\">CSV形式とは</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#CSVファイルの読み込み\">CSVファイルの読み込み</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#CSVファイルに対するfor文\">CSVファイルに対するfor文</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#CSVファイルに対するwith文\">CSVファイルに対するwith文</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#CSVファイルの書き込み\">CSVファイルの書き込み</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#練習\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#id6\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#練習の解答\">練習の解答</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"5-bokeh.html\">▲Bokehライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"5-command.html\">▲Pythonスクリプトとコマンドライン実行</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"5-matplotlib.html\">▲Matplotlibライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"5-re.html\">▲正規表現</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../index_of_terms.html\">索引</a></li>\n</ul>\n\n<div class=\"relations\">\n<h3>Related Topics</h3>\n<ul>\n  <li><a href=\"../index.html\">Documentation overview</a><ul>\n      <li>Previous: <a href=\"3-visualization.html\" title=\"previous chapter\">▲簡単なデータの可視化</a></li>\n      <li>Next: <a href=\"5-bokeh.html\" title=\"next chapter\">▲Bokehライブラリ</a></li>\n  </ul></li>\n</ul>\n</div>\n<search id=\"searchbox\" style=\"display: none\" role=\"search\">\n  <h3 id=\"searchlabel\">Quick search</h3>\n    <div class=\"searchformwrapper\">\n    <form class=\"search\" action=\"../search.html\" method=\"get\">\n      <input type=\"text\" name=\"q\" aria-labelledby=\"searchlabel\" autocomplete=\"off\" autocorrect=\"off\" autocapitalize=\"off\" spellcheck=\"false\"/>\n      <input type=\"submit\" value=\"Go\" />\n    </form>\n    </div>\n</search>\n<script>document.getElementById('searchbox').style.display = \"block\"</script>\n\n\n\n\n\n\n\n\n        </div>\n      </div>\n      <div class=\"clearer\"></div>\n    </div>\n    <div class=\"footer\">\n      &#169;2020–2024, 東京大学 数理・情報教育研究センター (CC BY-NC-ND 4.0).\n      \n      |\n      Powered by <a href=\"https://www.sphinx-doc.org/\">Sphinx 8.0.2</a>\n      &amp; <a href=\"https://alabaster.readthedocs.io\">Alabaster 1.0.0</a>\n      \n    </div>\n\n    \n\n    \n    <script>\n\n      var _gaq = _gaq || [];\n      _gaq.push(['_setAccount', 'G-8M0RXGPPSR']);\n      _gaq.push(['_setDomainName', 'none']);\n      _gaq.push(['_setAllowLinker', true]);\n      _gaq.push(['_trackPageview']);\n\n      (function() {\n        var ga = document.createElement('script'); ga.async = true;\n        ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'https://www') + '.google-analytics.com/ga.js';\n        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);\n      })();\n\n    </script>\n    \n  </body>\n</html>"
  },
  {
    "path": "docs/appendix/5-bokeh.html",
    "content": "<!DOCTYPE html>\n\n<html lang=\"jp\" data-content_root=\"../\">\n  <head>\n    <meta charset=\"utf-8\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" /><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n\n    <!-- Google tag (gtag.js) -->\n    <script async src=\"https://www.googletagmanager.com/gtag/js?id=G-8M0RXGPPSR\"></script>\n    <script>\n        window.dataLayer = window.dataLayer || [];\n        function gtag(){dataLayer.push(arguments);}\n        gtag('js', new Date());\n        gtag('config', 'G-8M0RXGPPSR');\n    </script>\n    \n    <title>▲Bokehライブラリ &#8212; Pythonプログラミング入門  documentation</title>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/pygments.css?v=d1102ebc\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/basic.css?v=c058f7c8\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/alabaster.css?v=27fed22d\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/nbsphinx-code-cells.css\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/custom.css?v=1a1aa8dd\" />\n    <script src=\"../_static/documentation_options.js?v=3ff7d7a7\"></script>\n    <script src=\"../_static/doctools.js?v=9a2dae69\"></script>\n    <script src=\"../_static/sphinx_highlight.js?v=dc90522c\"></script>\n    <script crossorigin=\"anonymous\" integrity=\"sha256-Ae2Vz/4ePdIu6ZyI/5ZGsYnb+m0JlOmKPjt6XZ9JJkA=\" src=\"https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.4/require.min.js\"></script>\n    <script>window.MathJax = {\"tex\": {\"inlineMath\": [[\"$\", \"$\"], [\"\\\\(\", \"\\\\)\"]], \"processEscapes\": true}, \"options\": {\"ignoreHtmlClass\": \"tex2jax_ignore|mathjax_ignore|document\", \"processHtmlClass\": \"tex2jax_process|mathjax_process|math|output_area\"}}</script>\n    <script defer=\"defer\" src=\"https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js\"></script>\n    <link rel=\"index\" title=\"Index\" href=\"../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../search.html\" />\n    <link rel=\"next\" title=\"▲Pythonスクリプトとコマンドライン実行\" href=\"5-command.html\" />\n    <link rel=\"prev\" title=\"▲CSVファイルの入出力\" href=\"4-csv.html\" />\n   \n  <link rel=\"stylesheet\" href=\"../_static/custom.css\" type=\"text/css\" />\n  \n\n  \n  \n\n  </head><body>\n  \n\n    <div class=\"document\">\n      <div class=\"documentwrapper\">\n        <div class=\"bodywrapper\">\n          \n\n          <div class=\"body\" role=\"main\">\n            \n  <section id=\"▲Bokehライブラリ\">\n<h1>▲Bokehライブラリ<a class=\"headerlink\" href=\"#▲Bokehライブラリ\" title=\"Link to this heading\">¶</a></h1>\n<p>Bokehライブラリについて説明します。</p>\n<p>参考</p>\n<ul class=\"simple\">\n<li><p><a class=\"reference external\" href=\"https://bokeh.pydata.org/\">https://bokeh.pydata.org/</a></p></li>\n</ul>\n<p><a class=\"reference external\" href=\"https://bokeh.pydata.org/\">Bokeh</a>は、データを可視化するためのライブラリです。 <code class=\"docutils literal notranslate\"><span class=\"pre\">bokeh</span></code> モジュールを使った、基本的なグラフの描画について説明します。</p>\n<section id=\"線グラフ\">\n<h2>線グラフ<a class=\"headerlink\" href=\"#線グラフ\" title=\"Link to this heading\">¶</a></h2>\n<p>Bokehライブラリ使用してグラフを描画するには、<code class=\"docutils literal notranslate\"><span class=\"pre\">bokeh.plotting</span></code> のモジュールをインポートします。 基本的なグラフの描画をノートブック上で行うには、図形を生成する <code class=\"docutils literal notranslate\"><span class=\"pre\">bokeh.plotting.figure()</span></code>、図形を表示する <code class=\"docutils literal notranslate\"><span class=\"pre\">bokeh.plotting.show()</span></code>、出力先をノートブック上に設定する <code class=\"docutils literal notranslate\"><span class=\"pre\">bokeh.plotting.output_notebook()</span></code> があれば充分です。 通例、<code class=\"docutils literal notranslate\"><span class=\"pre\">output_notebook()</span></code> は最初に呼び出されます。</p>\n<p>グラフで可視化するデータは配列を用いることが多いため、<code class=\"docutils literal notranslate\"><span class=\"pre\">numpy</span></code> モジュールも併せてインポートします。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[1]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"kn\">import</span> <span class=\"nn\">numpy</span> <span class=\"k\">as</span> <span class=\"nn\">np</span>\n<span class=\"kn\">from</span> <span class=\"nn\">bokeh.plotting</span> <span class=\"kn\">import</span> <span class=\"n\">figure</span><span class=\"p\">,</span> <span class=\"n\">output_notebook</span><span class=\"p\">,</span> <span class=\"n\">show</span>\n<span class=\"n\">output_notebook</span><span class=\"p\">()</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area rendered_html docutils container\">\n<style>\n    .bk-notebook-logo {\n        display: block;\n        width: 20px;\n        height: 20px;\n        background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNui8sowAAAOkSURBVDiNjZRtaJVlGMd/1/08zzln5zjP1LWcU9N0NkN8m2CYjpgQYQXqSs0I84OLIC0hkEKoPtiH3gmKoiJDU7QpLgoLjLIQCpEsNJ1vqUOdO7ppbuec5+V+rj4ctwzd8IIbbi6u+8f1539dt3A78eXC7QizUF7gyV1fD1Yqg4JWz84yffhm0qkFqBogB9rM8tZdtwVsPUhWhGcFJngGeWrPzHm5oaMmkfEg1usvLFyc8jLRqDOMru7AyC8saQr7GG7f5fvDeH7Ej8CM66nIF+8yngt6HWaKh7k49Soy9nXurCi1o3qUbS3zWfrYeQDTB/Qj6kX6Ybhw4B+bOYoLKCC9H3Nu/leUTZ1JdRWkkn2ldcCamzrcf47KKXdAJllSlxAOkRgyHsGC/zRday5Qld9DyoM4/q/rUoy/CXh3jzOu3bHUVZeU+DEn8FInkPBFlu3+nW3Nw0mk6vCDiWg8CeJaxEwuHS3+z5RgY+YBR6V1Z1nxSOfoaPa4LASWxxdNp+VWTk7+4vzaou8v8PN+xo+KY2xsw6une2frhw05CTYOmQvsEhjhWjn0bmXPjpE1+kplmmkP3suftwTubK9Vq22qKmrBhpY4jvd5afdRA3wGjFAgcnTK2s4hY0/GPNIb0nErGMCRxWOOX64Z8RAC4oCXdklmEvcL8o0BfkNK4lUg9HTl+oPlQxdNo3Mg4Nv175e/1LDGzZen30MEjRUtmXSfiTVu1kK8W4txyV6BMKlbgk3lMwYCiusNy9fVfvvwMxv8Ynl6vxoByANLTWplvuj/nF9m2+PDtt1eiHPBr1oIfhCChQMBw6Aw0UulqTKZdfVvfG7VcfIqLG9bcldL/+pdWTLxLUy8Qq38heUIjh4XlzZxzQm19lLFlr8vdQ97rjZVOLf8nclzckbcD4wxXMidpX30sFd37Fv/GtwwhzhxGVAprjbg0gCAEeIgwCZyTV2Z1REEW8O4py0wsjeloKoMr6iCY6dP92H6Vw/oTyICIthibxjm/DfN9lVz8IqtqKYLUXfoKVMVQVVJOElGjrnnUt9T9wbgp8AyYKaGlqingHZU/uG2NTZSVqwHQTWkx9hxjkpWDaCg6Ckj5qebgBVbT3V3NNXMSiWSDdGV3hrtzla7J+duwPOToIg42ChPQOQjspnSlp1V+Gjdged7+8UN5CRAV7a5EdFNwCjEaBR27b3W890TE7g24NAP/mMDXRWrGoFPQI9ls/MWO2dWFAar/xcOIImbbpA3zgAAAABJRU5ErkJggg==);\n    }\n</style>\n<div>\n    <a href=\"https://bokeh.org\" target=\"_blank\" class=\"bk-notebook-logo\"></a>\n    <span id=\"a3933858-c10a-4990-8e54-53cdf44c7e60\">Loading BokehJS ...</span>\n</div></div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"output_javascript\"></div>\n<script type=\"text/javascript\">\nvar element = document.currentScript.previousSibling.previousSibling;\n'use strict';\n(function(root) {\n  function now() {\n    return new Date();\n  }\n\n  const force = true;\n\n  if (typeof root._bokeh_onload_callbacks === \"undefined\" || force === true) {\n    root._bokeh_onload_callbacks = [];\n    root._bokeh_is_loading = undefined;\n  }\n\nconst JS_MIME_TYPE = 'application/javascript';\n  const HTML_MIME_TYPE = 'text/html';\n  const EXEC_MIME_TYPE = 'application/vnd.bokehjs_exec.v0+json';\n  const CLASS_NAME = 'output_bokeh rendered_html';\n\n  /**\n   * Render data to the DOM node\n   */\n  function render(props, node) {\n    const script = document.createElement(\"script\");\n    node.appendChild(script);\n  }\n\n  /**\n   * Handle when an output is cleared or removed\n   */\n  function handleClearOutput(event, handle) {\n    function drop(id) {\n      const view = Bokeh.index.get_by_id(id)\n      if (view != null) {\n        view.model.document.clear()\n        Bokeh.index.delete(view)\n      }\n    }\n\n    const cell = handle.cell;\n\n    const id = cell.output_area._bokeh_element_id;\n    const server_id = cell.output_area._bokeh_server_id;\n\n    // Clean up Bokeh references\n    if (id != null) {\n      drop(id)\n    }\n\n    if (server_id !== undefined) {\n      // Clean up Bokeh references\n      const cmd_clean = \"from bokeh.io.state import curstate; print(curstate().uuid_to_server['\" + server_id + \"'].get_sessions()[0].document.roots[0]._id)\";\n      cell.notebook.kernel.execute(cmd_clean, {\n        iopub: {\n          output: function(msg) {\n            const id = msg.content.text.trim()\n            drop(id)\n          }\n        }\n      });\n      // Destroy server and session\n      const cmd_destroy = \"import bokeh.io.notebook as ion; ion.destroy_server('\" + server_id + \"')\";\n      cell.notebook.kernel.execute(cmd_destroy);\n    }\n  }\n\n  /**\n   * Handle when a new output is added\n   */\n  function handleAddOutput(event, handle) {\n    const output_area = handle.output_area;\n    const output = handle.output;\n\n    // limit handleAddOutput to display_data with EXEC_MIME_TYPE content only\n    if ((output.output_type != \"display_data\") || (!Object.prototype.hasOwnProperty.call(output.data, EXEC_MIME_TYPE))) {\n      return\n    }\n\n    const toinsert = output_area.element.find(\".\" + CLASS_NAME.split(' ')[0]);\n\n    if (output.metadata[EXEC_MIME_TYPE][\"id\"] !== undefined) {\n      toinsert[toinsert.length - 1].firstChild.textContent = output.data[JS_MIME_TYPE];\n      // store reference to embed id on output_area\n      output_area._bokeh_element_id = output.metadata[EXEC_MIME_TYPE][\"id\"];\n    }\n    if (output.metadata[EXEC_MIME_TYPE][\"server_id\"] !== undefined) {\n      const bk_div = document.createElement(\"div\");\n      bk_div.innerHTML = output.data[HTML_MIME_TYPE];\n      const script_attrs = bk_div.children[0].attributes;\n      for (let i = 0; i < script_attrs.length; i++) {\n        toinsert[toinsert.length - 1].firstChild.setAttribute(script_attrs[i].name, script_attrs[i].value);\n        toinsert[toinsert.length - 1].firstChild.textContent = bk_div.children[0].textContent\n      }\n      // store reference to server id on output_area\n      output_area._bokeh_server_id = output.metadata[EXEC_MIME_TYPE][\"server_id\"];\n    }\n  }\n\n  function register_renderer(events, OutputArea) {\n\n    function append_mime(data, metadata, element) {\n      // create a DOM node to render to\n      const toinsert = this.create_output_subarea(\n        metadata,\n        CLASS_NAME,\n        EXEC_MIME_TYPE\n      );\n      this.keyboard_manager.register_events(toinsert);\n      // Render to node\n      const props = {data: data, metadata: metadata[EXEC_MIME_TYPE]};\n      render(props, toinsert[toinsert.length - 1]);\n      element.append(toinsert);\n      return toinsert\n    }\n\n    /* Handle when an output is cleared or removed */\n    events.on('clear_output.CodeCell', handleClearOutput);\n    events.on('delete.Cell', handleClearOutput);\n\n    /* Handle when a new output is added */\n    events.on('output_added.OutputArea', handleAddOutput);\n\n    /**\n     * Register the mime type and append_mime function with output_area\n     */\n    OutputArea.prototype.register_mime_type(EXEC_MIME_TYPE, append_mime, {\n      /* Is output safe? */\n      safe: true,\n      /* Index of renderer in `output_area.display_order` */\n      index: 0\n    });\n  }\n\n  // register the mime type if in Jupyter Notebook environment and previously unregistered\n  if (root.Jupyter !== undefined) {\n    const events = require('base/js/events');\n    const OutputArea = require('notebook/js/outputarea').OutputArea;\n\n    if (OutputArea.prototype.mime_types().indexOf(EXEC_MIME_TYPE) == -1) {\n      register_renderer(events, OutputArea);\n    }\n  }\n  if (typeof (root._bokeh_timeout) === \"undefined\" || force === true) {\n    root._bokeh_timeout = Date.now() + 5000;\n    root._bokeh_failed_load = false;\n  }\n\n  const NB_LOAD_WARNING = {'data': {'text/html':\n     \"<div style='background-color: #fdd'>\\n\"+\n     \"<p>\\n\"+\n     \"BokehJS does not appear to have successfully loaded. If loading BokehJS from CDN, this \\n\"+\n     \"may be due to a slow or bad network connection. Possible fixes:\\n\"+\n     \"</p>\\n\"+\n     \"<ul>\\n\"+\n     \"<li>re-rerun `output_notebook()` to attempt to load from CDN again, or</li>\\n\"+\n     \"<li>use INLINE resources instead, as so:</li>\\n\"+\n     \"</ul>\\n\"+\n     \"<code>\\n\"+\n     \"from bokeh.resources import INLINE\\n\"+\n     \"output_notebook(resources=INLINE)\\n\"+\n     \"</code>\\n\"+\n     \"</div>\"}};\n\n  function display_loaded(error = null) {\n    const el = document.getElementById(\"a3933858-c10a-4990-8e54-53cdf44c7e60\");\n    if (el != null) {\n      const html = (() => {\n        if (typeof root.Bokeh === \"undefined\") {\n          if (error == null) {\n            return \"BokehJS is loading ...\";\n          } else {\n            return \"BokehJS failed to load.\";\n          }\n        } else {\n          const prefix = `BokehJS ${root.Bokeh.version}`;\n          if (error == null) {\n            return `${prefix} successfully loaded.`;\n          } else {\n            return `${prefix} <b>encountered errors</b> while loading and may not function as expected.`;\n          }\n        }\n      })();\n      el.innerHTML = html;\n\n      if (error != null) {\n        const wrapper = document.createElement(\"div\");\n        wrapper.style.overflow = \"auto\";\n        wrapper.style.height = \"5em\";\n        wrapper.style.resize = \"vertical\";\n        const content = document.createElement(\"div\");\n        content.style.fontFamily = \"monospace\";\n        content.style.whiteSpace = \"pre-wrap\";\n        content.style.backgroundColor = \"rgb(255, 221, 221)\";\n        content.textContent = error.stack ?? error.toString();\n        wrapper.append(content);\n        el.append(wrapper);\n      }\n    } else if (Date.now() < root._bokeh_timeout) {\n      setTimeout(() => display_loaded(error), 100);\n    }\n  }\n\n  function run_callbacks() {\n    try {\n      root._bokeh_onload_callbacks.forEach(function(callback) {\n        if (callback != null)\n          callback();\n      });\n    } finally {\n      delete root._bokeh_onload_callbacks\n    }\n    console.debug(\"Bokeh: all callbacks have finished\");\n  }\n\n  function load_libs(css_urls, js_urls, callback) {\n    if (css_urls == null) css_urls = [];\n    if (js_urls == null) js_urls = [];\n\n    root._bokeh_onload_callbacks.push(callback);\n    if (root._bokeh_is_loading > 0) {\n      console.debug(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n      return null;\n    }\n    if (js_urls == null || js_urls.length === 0) {\n      run_callbacks();\n      return null;\n    }\n    console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n    root._bokeh_is_loading = css_urls.length + js_urls.length;\n\n    function on_load() {\n      root._bokeh_is_loading--;\n      if (root._bokeh_is_loading === 0) {\n        console.debug(\"Bokeh: all BokehJS libraries/stylesheets loaded\");\n        run_callbacks()\n      }\n    }\n\n    function on_error(url) {\n      console.error(\"failed to load \" + url);\n    }\n\n    for (let i = 0; i < css_urls.length; i++) {\n      const url = css_urls[i];\n      const element = document.createElement(\"link\");\n      element.onload = on_load;\n      element.onerror = on_error.bind(null, url);\n      element.rel = \"stylesheet\";\n      element.type = \"text/css\";\n      element.href = url;\n      console.debug(\"Bokeh: injecting link tag for BokehJS stylesheet: \", url);\n      document.body.appendChild(element);\n    }\n\n    for (let i = 0; i < js_urls.length; i++) {\n      const url = js_urls[i];\n      const element = document.createElement('script');\n      element.onload = on_load;\n      element.onerror = on_error.bind(null, url);\n      element.async = false;\n      element.src = url;\n      console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n      document.head.appendChild(element);\n    }\n  };\n\n  function inject_raw_css(css) {\n    const element = document.createElement(\"style\");\n    element.appendChild(document.createTextNode(css));\n    document.body.appendChild(element);\n  }\n\n  const js_urls = [\"https://cdn.bokeh.org/bokeh/release/bokeh-3.5.1.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-3.5.1.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-3.5.1.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-3.5.1.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-mathjax-3.5.1.min.js\"];\n  const css_urls = [];\n\n  const inline_js = [    function(Bokeh) {\n      Bokeh.set_log_level(\"info\");\n    },\nfunction(Bokeh) {\n    }\n  ];\n\n  function run_inline_js() {\n    if (root.Bokeh !== undefined || force === true) {\n      try {\n            for (let i = 0; i < inline_js.length; i++) {\n      inline_js[i].call(root, root.Bokeh);\n    }\n\n      } catch (error) {display_loaded(error);throw error;\n      }if (force === true) {\n        display_loaded();\n      }} else if (Date.now() < root._bokeh_timeout) {\n      setTimeout(run_inline_js, 100);\n    } else if (!root._bokeh_failed_load) {\n      console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n      root._bokeh_failed_load = true;\n    } else if (force !== true) {\n      const cell = $(document.getElementById(\"a3933858-c10a-4990-8e54-53cdf44c7e60\")).parents('.cell').data().cell;\n      cell.output_area.append_execute_result(NB_LOAD_WARNING)\n    }\n  }\n\n  if (root._bokeh_is_loading === 0) {\n    console.debug(\"Bokeh: BokehJS loaded, going straight to plotting\");\n    run_inline_js();\n  } else {\n    load_libs(css_urls, js_urls, function() {\n      console.debug(\"Bokeh: BokehJS plotting callback run at\", now());\n      run_inline_js();\n    });\n  }\n}(window));\n</script></div>\n</div>\n<p>次は、<code class=\"docutils literal notranslate\"><span class=\"pre\">figure()</span></code> が返す <code class=\"docutils literal notranslate\"><span class=\"pre\">Figure</span></code> クラスの <code class=\"docutils literal notranslate\"><span class=\"pre\">line()</span></code> メソッドを使って、リストの要素の数値をy軸の値としてグラフを描画しています。 y軸の値に対応するx軸の値は、リストの各要素のインデックスとしています。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[2]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"c1\"># プロットするデータ</span>\n<span class=\"n\">d</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">4</span><span class=\"p\">,</span> <span class=\"mi\">9</span><span class=\"p\">,</span> <span class=\"mi\">16</span><span class=\"p\">]</span>\n<span class=\"n\">p</span> <span class=\"o\">=</span> <span class=\"n\">figure</span><span class=\"p\">()</span>\n<span class=\"n\">p</span><span class=\"o\">.</span><span class=\"n\">line</span><span class=\"p\">(</span><span class=\"nb\">list</span><span class=\"p\">(</span><span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">d</span><span class=\"p\">))),</span> <span class=\"n\">d</span><span class=\"p\">)</span> <span class=\"c1\"># 第1引数がx軸、第2引数がy軸</span>\n<span class=\"n\">show</span><span class=\"p\">(</span><span class=\"n\">p</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area rendered_html docutils container\">\n<div id=\"feac4939-fbe9-4b6c-8ebf-e92032138d56\" data-root-id=\"p1001\" style=\"display: contents;\"></div></div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"output_javascript\"></div>\n<script type=\"text/javascript\">\nvar element = document.currentScript.previousSibling.previousSibling;\n(function(root) {\n  function embed_document(root) {\n  const docs_json = {\"f8f7bf01-453a-4918-b62c-6cd543181bef\":{\"version\":\"3.5.1\",\"title\":\"Bokeh Application\",\"roots\":[{\"type\":\"object\",\"name\":\"Figure\",\"id\":\"p1001\",\"attributes\":{\"x_range\":{\"type\":\"object\",\"name\":\"DataRange1d\",\"id\":\"p1002\"},\"y_range\":{\"type\":\"object\",\"name\":\"DataRange1d\",\"id\":\"p1003\"},\"x_scale\":{\"type\":\"object\",\"name\":\"LinearScale\",\"id\":\"p1010\"},\"y_scale\":{\"type\":\"object\",\"name\":\"LinearScale\",\"id\":\"p1011\"},\"title\":{\"type\":\"object\",\"name\":\"Title\",\"id\":\"p1008\"},\"renderers\":[{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p1041\",\"attributes\":{\"data_source\":{\"type\":\"object\",\"name\":\"ColumnDataSource\",\"id\":\"p1035\",\"attributes\":{\"selected\":{\"type\":\"object\",\"name\":\"Selection\",\"id\":\"p1036\",\"attributes\":{\"indices\":[],\"line_indices\":[]}},\"selection_policy\":{\"type\":\"object\",\"name\":\"UnionRenderers\",\"id\":\"p1037\"},\"data\":{\"type\":\"map\",\"entries\":[[\"x\",[0,1,2,3,4]],[\"y\",[0,1,4,9,16]]]}}},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p1042\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p1043\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1038\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":\"#1f77b4\"}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1039\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":\"#1f77b4\",\"line_alpha\":0.1}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1040\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":\"#1f77b4\",\"line_alpha\":0.2}}}}],\"toolbar\":{\"type\":\"object\",\"name\":\"Toolbar\",\"id\":\"p1009\",\"attributes\":{\"tools\":[{\"type\":\"object\",\"name\":\"PanTool\",\"id\":\"p1022\"},{\"type\":\"object\",\"name\":\"WheelZoomTool\",\"id\":\"p1023\",\"attributes\":{\"renderers\":\"auto\"}},{\"type\":\"object\",\"name\":\"BoxZoomTool\",\"id\":\"p1024\",\"attributes\":{\"overlay\":{\"type\":\"object\",\"name\":\"BoxAnnotation\",\"id\":\"p1025\",\"attributes\":{\"syncable\":false,\"line_color\":\"black\",\"line_alpha\":1.0,\"line_width\":2,\"line_dash\":[4,4],\"fill_color\":\"lightgrey\",\"fill_alpha\":0.5,\"level\":\"overlay\",\"visible\":false,\"left\":{\"type\":\"number\",\"value\":\"nan\"},\"right\":{\"type\":\"number\",\"value\":\"nan\"},\"top\":{\"type\":\"number\",\"value\":\"nan\"},\"bottom\":{\"type\":\"number\",\"value\":\"nan\"},\"left_units\":\"canvas\",\"right_units\":\"canvas\",\"top_units\":\"canvas\",\"bottom_units\":\"canvas\",\"handles\":{\"type\":\"object\",\"name\":\"BoxInteractionHandles\",\"id\":\"p1031\",\"attributes\":{\"all\":{\"type\":\"object\",\"name\":\"AreaVisuals\",\"id\":\"p1030\",\"attributes\":{\"fill_color\":\"white\",\"hover_fill_color\":\"lightgray\"}}}}}}}},{\"type\":\"object\",\"name\":\"SaveTool\",\"id\":\"p1032\"},{\"type\":\"object\",\"name\":\"ResetTool\",\"id\":\"p1033\"},{\"type\":\"object\",\"name\":\"HelpTool\",\"id\":\"p1034\"}]}},\"left\":[{\"type\":\"object\",\"name\":\"LinearAxis\",\"id\":\"p1017\",\"attributes\":{\"ticker\":{\"type\":\"object\",\"name\":\"BasicTicker\",\"id\":\"p1018\",\"attributes\":{\"mantissas\":[1,2,5]}},\"formatter\":{\"type\":\"object\",\"name\":\"BasicTickFormatter\",\"id\":\"p1019\"},\"major_label_policy\":{\"type\":\"object\",\"name\":\"AllLabels\",\"id\":\"p1020\"}}}],\"below\":[{\"type\":\"object\",\"name\":\"LinearAxis\",\"id\":\"p1012\",\"attributes\":{\"ticker\":{\"type\":\"object\",\"name\":\"BasicTicker\",\"id\":\"p1013\",\"attributes\":{\"mantissas\":[1,2,5]}},\"formatter\":{\"type\":\"object\",\"name\":\"BasicTickFormatter\",\"id\":\"p1014\"},\"major_label_policy\":{\"type\":\"object\",\"name\":\"AllLabels\",\"id\":\"p1015\"}}}],\"center\":[{\"type\":\"object\",\"name\":\"Grid\",\"id\":\"p1016\",\"attributes\":{\"axis\":{\"id\":\"p1012\"}}},{\"type\":\"object\",\"name\":\"Grid\",\"id\":\"p1021\",\"attributes\":{\"dimension\":1,\"axis\":{\"id\":\"p1017\"}}}]}}]}};\n  const render_items = [{\"docid\":\"f8f7bf01-453a-4918-b62c-6cd543181bef\",\"roots\":{\"p1001\":\"feac4939-fbe9-4b6c-8ebf-e92032138d56\"},\"root_ids\":[\"p1001\"]}];\n  void root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n  }\n  if (root.Bokeh !== undefined) {\n    embed_document(root);\n  } else {\n    let attempts = 0;\n    const timer = setInterval(function(root) {\n      if (root.Bokeh !== undefined) {\n        clearInterval(timer);\n        embed_document(root);\n      } else {\n        attempts++;\n        if (attempts > 100) {\n          clearInterval(timer);\n          console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\");\n        }\n      }\n    }, 10, root)\n  }\n})(window);\n</script></div>\n</div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">line()</span></code> メソッド（及び他の描画用メソッド）では、キーワード引数も使えます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[3]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">p</span> <span class=\"o\">=</span> <span class=\"n\">figure</span><span class=\"p\">()</span>\n<span class=\"n\">p</span><span class=\"o\">.</span><span class=\"n\">line</span><span class=\"p\">(</span><span class=\"n\">y</span><span class=\"o\">=</span><span class=\"n\">d</span><span class=\"p\">,</span> <span class=\"n\">x</span><span class=\"o\">=</span><span class=\"nb\">list</span><span class=\"p\">(</span><span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">d</span><span class=\"p\">))))</span>\n<span class=\"n\">show</span><span class=\"p\">(</span><span class=\"n\">p</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area rendered_html docutils container\">\n<div id=\"d6677abb-e8a3-4980-82aa-5f68b9e15c66\" data-root-id=\"p1044\" style=\"display: contents;\"></div></div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"output_javascript\"></div>\n<script type=\"text/javascript\">\nvar element = document.currentScript.previousSibling.previousSibling;\n(function(root) {\n  function embed_document(root) {\n  const docs_json = {\"b26fde3f-cc01-4fdf-b874-b7b95e5a638a\":{\"version\":\"3.5.1\",\"title\":\"Bokeh Application\",\"roots\":[{\"type\":\"object\",\"name\":\"Figure\",\"id\":\"p1044\",\"attributes\":{\"x_range\":{\"type\":\"object\",\"name\":\"DataRange1d\",\"id\":\"p1045\"},\"y_range\":{\"type\":\"object\",\"name\":\"DataRange1d\",\"id\":\"p1046\"},\"x_scale\":{\"type\":\"object\",\"name\":\"LinearScale\",\"id\":\"p1053\"},\"y_scale\":{\"type\":\"object\",\"name\":\"LinearScale\",\"id\":\"p1054\"},\"title\":{\"type\":\"object\",\"name\":\"Title\",\"id\":\"p1051\"},\"renderers\":[{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p1084\",\"attributes\":{\"data_source\":{\"type\":\"object\",\"name\":\"ColumnDataSource\",\"id\":\"p1078\",\"attributes\":{\"selected\":{\"type\":\"object\",\"name\":\"Selection\",\"id\":\"p1079\",\"attributes\":{\"indices\":[],\"line_indices\":[]}},\"selection_policy\":{\"type\":\"object\",\"name\":\"UnionRenderers\",\"id\":\"p1080\"},\"data\":{\"type\":\"map\",\"entries\":[[\"y\",[0,1,4,9,16]],[\"x\",[0,1,2,3,4]]]}}},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p1085\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p1086\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1081\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":\"#1f77b4\"}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1082\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":\"#1f77b4\",\"line_alpha\":0.1}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1083\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":\"#1f77b4\",\"line_alpha\":0.2}}}}],\"toolbar\":{\"type\":\"object\",\"name\":\"Toolbar\",\"id\":\"p1052\",\"attributes\":{\"tools\":[{\"type\":\"object\",\"name\":\"PanTool\",\"id\":\"p1065\"},{\"type\":\"object\",\"name\":\"WheelZoomTool\",\"id\":\"p1066\",\"attributes\":{\"renderers\":\"auto\"}},{\"type\":\"object\",\"name\":\"BoxZoomTool\",\"id\":\"p1067\",\"attributes\":{\"overlay\":{\"type\":\"object\",\"name\":\"BoxAnnotation\",\"id\":\"p1068\",\"attributes\":{\"syncable\":false,\"line_color\":\"black\",\"line_alpha\":1.0,\"line_width\":2,\"line_dash\":[4,4],\"fill_color\":\"lightgrey\",\"fill_alpha\":0.5,\"level\":\"overlay\",\"visible\":false,\"left\":{\"type\":\"number\",\"value\":\"nan\"},\"right\":{\"type\":\"number\",\"value\":\"nan\"},\"top\":{\"type\":\"number\",\"value\":\"nan\"},\"bottom\":{\"type\":\"number\",\"value\":\"nan\"},\"left_units\":\"canvas\",\"right_units\":\"canvas\",\"top_units\":\"canvas\",\"bottom_units\":\"canvas\",\"handles\":{\"type\":\"object\",\"name\":\"BoxInteractionHandles\",\"id\":\"p1074\",\"attributes\":{\"all\":{\"type\":\"object\",\"name\":\"AreaVisuals\",\"id\":\"p1073\",\"attributes\":{\"fill_color\":\"white\",\"hover_fill_color\":\"lightgray\"}}}}}}}},{\"type\":\"object\",\"name\":\"SaveTool\",\"id\":\"p1075\"},{\"type\":\"object\",\"name\":\"ResetTool\",\"id\":\"p1076\"},{\"type\":\"object\",\"name\":\"HelpTool\",\"id\":\"p1077\"}]}},\"left\":[{\"type\":\"object\",\"name\":\"LinearAxis\",\"id\":\"p1060\",\"attributes\":{\"ticker\":{\"type\":\"object\",\"name\":\"BasicTicker\",\"id\":\"p1061\",\"attributes\":{\"mantissas\":[1,2,5]}},\"formatter\":{\"type\":\"object\",\"name\":\"BasicTickFormatter\",\"id\":\"p1062\"},\"major_label_policy\":{\"type\":\"object\",\"name\":\"AllLabels\",\"id\":\"p1063\"}}}],\"below\":[{\"type\":\"object\",\"name\":\"LinearAxis\",\"id\":\"p1055\",\"attributes\":{\"ticker\":{\"type\":\"object\",\"name\":\"BasicTicker\",\"id\":\"p1056\",\"attributes\":{\"mantissas\":[1,2,5]}},\"formatter\":{\"type\":\"object\",\"name\":\"BasicTickFormatter\",\"id\":\"p1057\"},\"major_label_policy\":{\"type\":\"object\",\"name\":\"AllLabels\",\"id\":\"p1058\"}}}],\"center\":[{\"type\":\"object\",\"name\":\"Grid\",\"id\":\"p1059\",\"attributes\":{\"axis\":{\"id\":\"p1055\"}}},{\"type\":\"object\",\"name\":\"Grid\",\"id\":\"p1064\",\"attributes\":{\"dimension\":1,\"axis\":{\"id\":\"p1060\"}}}]}}]}};\n  const render_items = [{\"docid\":\"b26fde3f-cc01-4fdf-b874-b7b95e5a638a\",\"roots\":{\"p1044\":\"d6677abb-e8a3-4980-82aa-5f68b9e15c66\"},\"root_ids\":[\"p1044\"]}];\n  void root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n  }\n  if (root.Bokeh !== undefined) {\n    embed_document(root);\n  } else {\n    let attempts = 0;\n    const timer = setInterval(function(root) {\n      if (root.Bokeh !== undefined) {\n        clearInterval(timer);\n        embed_document(root);\n      } else {\n        attempts++;\n        if (attempts > 100) {\n          clearInterval(timer);\n          console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\");\n        }\n      }\n    }, 10, root)\n  }\n})(window);\n</script></div>\n</div>\n<p>次に示すように、複数のグラフをまとめてプロットして表示することもできます。 プロットするメソッドではグラフの線の色や線の種類を、<code class=\"docutils literal notranslate\"><span class=\"pre\">line_color</span></code> 引数や <code class=\"docutils literal notranslate\"><span class=\"pre\">line_dash</span></code> 引数で指定できます。 また、<code class=\"docutils literal notranslate\"><span class=\"pre\">legend_label</span></code> 引数に値を設定すると、プロットしたグラフが凡例に現れます。 引数の詳細は<a class=\"reference external\" href=\"https://bokeh.pydata.org/en/latest/docs/reference/plotting.html#bokeh.plotting.figure.Figure.line\">Figure.line</a>のページ（英語）を参照してください。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[4]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">data</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">4</span><span class=\"p\">,</span> <span class=\"mi\">9</span><span class=\"p\">,</span> <span class=\"mi\">16</span><span class=\"p\">]</span>\n<span class=\"n\">x</span> <span class=\"o\">=</span> <span class=\"nb\">list</span><span class=\"p\">(</span><span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">data</span><span class=\"p\">)))</span>\n<span class=\"n\">p</span> <span class=\"o\">=</span> <span class=\"n\">figure</span><span class=\"p\">()</span>\n<span class=\"n\">p</span><span class=\"o\">.</span><span class=\"n\">line</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">,</span> <span class=\"n\">x</span><span class=\"p\">,</span> <span class=\"n\">line_color</span><span class=\"o\">=</span><span class=\"s1\">&#39;blue&#39;</span><span class=\"p\">,</span> <span class=\"n\">legend_label</span><span class=\"o\">=</span><span class=\"s1\">&#39;linear&#39;</span><span class=\"p\">,</span> <span class=\"n\">line_dash</span><span class=\"o\">=</span><span class=\"s1\">&#39;dashed&#39;</span><span class=\"p\">)</span>\n<span class=\"n\">p</span><span class=\"o\">.</span><span class=\"n\">line</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">,</span> <span class=\"n\">data</span><span class=\"p\">,</span> <span class=\"n\">line_color</span><span class=\"o\">=</span><span class=\"s1\">&#39;green&#39;</span><span class=\"p\">,</span> <span class=\"n\">legend_label</span><span class=\"o\">=</span><span class=\"s1\">&#39;quad&#39;</span><span class=\"p\">,</span> <span class=\"n\">line_dash</span><span class=\"o\">=</span><span class=\"s1\">&#39;dotted&#39;</span><span class=\"p\">)</span>\n<span class=\"n\">show</span><span class=\"p\">(</span><span class=\"n\">p</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area rendered_html docutils container\">\n<div id=\"ce8b15c8-7b30-4349-9ade-3aab71d4868a\" data-root-id=\"p1087\" style=\"display: contents;\"></div></div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"output_javascript\"></div>\n<script type=\"text/javascript\">\nvar element = document.currentScript.previousSibling.previousSibling;\n(function(root) {\n  function embed_document(root) {\n  const docs_json = {\"33270a2d-b327-4399-86e2-9366b4d82237\":{\"version\":\"3.5.1\",\"title\":\"Bokeh Application\",\"roots\":[{\"type\":\"object\",\"name\":\"Figure\",\"id\":\"p1087\",\"attributes\":{\"x_range\":{\"type\":\"object\",\"name\":\"DataRange1d\",\"id\":\"p1088\"},\"y_range\":{\"type\":\"object\",\"name\":\"DataRange1d\",\"id\":\"p1089\"},\"x_scale\":{\"type\":\"object\",\"name\":\"LinearScale\",\"id\":\"p1096\"},\"y_scale\":{\"type\":\"object\",\"name\":\"LinearScale\",\"id\":\"p1097\"},\"title\":{\"type\":\"object\",\"name\":\"Title\",\"id\":\"p1094\"},\"renderers\":[{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p1127\",\"attributes\":{\"data_source\":{\"type\":\"object\",\"name\":\"ColumnDataSource\",\"id\":\"p1121\",\"attributes\":{\"selected\":{\"type\":\"object\",\"name\":\"Selection\",\"id\":\"p1122\",\"attributes\":{\"indices\":[],\"line_indices\":[]}},\"selection_policy\":{\"type\":\"object\",\"name\":\"UnionRenderers\",\"id\":\"p1123\"},\"data\":{\"type\":\"map\",\"entries\":[[\"x\",[0,1,2,3,4]],[\"y\",[0,1,2,3,4]]]}}},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p1128\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p1129\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1124\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":\"blue\",\"line_dash\":[6]}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1125\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":\"blue\",\"line_alpha\":0.1,\"line_dash\":[6]}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1126\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":\"blue\",\"line_alpha\":0.2,\"line_dash\":[6]}}}},{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p1138\",\"attributes\":{\"data_source\":{\"type\":\"object\",\"name\":\"ColumnDataSource\",\"id\":\"p1132\",\"attributes\":{\"selected\":{\"type\":\"object\",\"name\":\"Selection\",\"id\":\"p1133\",\"attributes\":{\"indices\":[],\"line_indices\":[]}},\"selection_policy\":{\"type\":\"object\",\"name\":\"UnionRenderers\",\"id\":\"p1134\"},\"data\":{\"type\":\"map\",\"entries\":[[\"x\",[0,1,2,3,4]],[\"y\",[0,1,4,9,16]]]}}},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p1139\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p1140\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1135\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":\"green\",\"line_dash\":[2,4]}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1136\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":\"green\",\"line_alpha\":0.1,\"line_dash\":[2,4]}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1137\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":\"green\",\"line_alpha\":0.2,\"line_dash\":[2,4]}}}}],\"toolbar\":{\"type\":\"object\",\"name\":\"Toolbar\",\"id\":\"p1095\",\"attributes\":{\"tools\":[{\"type\":\"object\",\"name\":\"PanTool\",\"id\":\"p1108\"},{\"type\":\"object\",\"name\":\"WheelZoomTool\",\"id\":\"p1109\",\"attributes\":{\"renderers\":\"auto\"}},{\"type\":\"object\",\"name\":\"BoxZoomTool\",\"id\":\"p1110\",\"attributes\":{\"overlay\":{\"type\":\"object\",\"name\":\"BoxAnnotation\",\"id\":\"p1111\",\"attributes\":{\"syncable\":false,\"line_color\":\"black\",\"line_alpha\":1.0,\"line_width\":2,\"line_dash\":[4,4],\"fill_color\":\"lightgrey\",\"fill_alpha\":0.5,\"level\":\"overlay\",\"visible\":false,\"left\":{\"type\":\"number\",\"value\":\"nan\"},\"right\":{\"type\":\"number\",\"value\":\"nan\"},\"top\":{\"type\":\"number\",\"value\":\"nan\"},\"bottom\":{\"type\":\"number\",\"value\":\"nan\"},\"left_units\":\"canvas\",\"right_units\":\"canvas\",\"top_units\":\"canvas\",\"bottom_units\":\"canvas\",\"handles\":{\"type\":\"object\",\"name\":\"BoxInteractionHandles\",\"id\":\"p1117\",\"attributes\":{\"all\":{\"type\":\"object\",\"name\":\"AreaVisuals\",\"id\":\"p1116\",\"attributes\":{\"fill_color\":\"white\",\"hover_fill_color\":\"lightgray\"}}}}}}}},{\"type\":\"object\",\"name\":\"SaveTool\",\"id\":\"p1118\"},{\"type\":\"object\",\"name\":\"ResetTool\",\"id\":\"p1119\"},{\"type\":\"object\",\"name\":\"HelpTool\",\"id\":\"p1120\"}]}},\"left\":[{\"type\":\"object\",\"name\":\"LinearAxis\",\"id\":\"p1103\",\"attributes\":{\"ticker\":{\"type\":\"object\",\"name\":\"BasicTicker\",\"id\":\"p1104\",\"attributes\":{\"mantissas\":[1,2,5]}},\"formatter\":{\"type\":\"object\",\"name\":\"BasicTickFormatter\",\"id\":\"p1105\"},\"major_label_policy\":{\"type\":\"object\",\"name\":\"AllLabels\",\"id\":\"p1106\"}}}],\"below\":[{\"type\":\"object\",\"name\":\"LinearAxis\",\"id\":\"p1098\",\"attributes\":{\"ticker\":{\"type\":\"object\",\"name\":\"BasicTicker\",\"id\":\"p1099\",\"attributes\":{\"mantissas\":[1,2,5]}},\"formatter\":{\"type\":\"object\",\"name\":\"BasicTickFormatter\",\"id\":\"p1100\"},\"major_label_policy\":{\"type\":\"object\",\"name\":\"AllLabels\",\"id\":\"p1101\"}}}],\"center\":[{\"type\":\"object\",\"name\":\"Grid\",\"id\":\"p1102\",\"attributes\":{\"axis\":{\"id\":\"p1098\"}}},{\"type\":\"object\",\"name\":\"Grid\",\"id\":\"p1107\",\"attributes\":{\"dimension\":1,\"axis\":{\"id\":\"p1103\"}}},{\"type\":\"object\",\"name\":\"Legend\",\"id\":\"p1130\",\"attributes\":{\"items\":[{\"type\":\"object\",\"name\":\"LegendItem\",\"id\":\"p1131\",\"attributes\":{\"label\":{\"type\":\"value\",\"value\":\"linear\"},\"renderers\":[{\"id\":\"p1127\"}]}},{\"type\":\"object\",\"name\":\"LegendItem\",\"id\":\"p1141\",\"attributes\":{\"label\":{\"type\":\"value\",\"value\":\"quad\"},\"renderers\":[{\"id\":\"p1138\"}]}}]}}]}}]}};\n  const render_items = [{\"docid\":\"33270a2d-b327-4399-86e2-9366b4d82237\",\"roots\":{\"p1087\":\"ce8b15c8-7b30-4349-9ade-3aab71d4868a\"},\"root_ids\":[\"p1087\"]}];\n  void root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n  }\n  if (root.Bokeh !== undefined) {\n    embed_document(root);\n  } else {\n    let attempts = 0;\n    const timer = setInterval(function(root) {\n      if (root.Bokeh !== undefined) {\n        clearInterval(timer);\n        embed_document(root);\n      } else {\n        attempts++;\n        if (attempts > 100) {\n          clearInterval(timer);\n          console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\");\n        }\n      }\n    }, 10, root)\n  }\n})(window);\n</script></div>\n</div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">figure()</span></code> 関数の引数に、軸のラベルや、グラフのタイトルを設定できます。 プロット点を線グラフ上に重ねたいときには、<code class=\"docutils literal notranslate\"><span class=\"pre\">circle()</span></code> メソッドや <code class=\"docutils literal notranslate\"><span class=\"pre\">cross()</span></code> メソッドで同色の円や十字を追加で描けばよいです。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[5]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">p</span> <span class=\"o\">=</span> <span class=\"n\">figure</span><span class=\"p\">(</span><span class=\"n\">x_axis_label</span><span class=\"o\">=</span><span class=\"s1\">&#39;x&#39;</span><span class=\"p\">,</span> <span class=\"n\">y_axis_label</span><span class=\"o\">=</span><span class=\"s1\">&#39;y&#39;</span><span class=\"p\">,</span> <span class=\"n\">title</span><span class=\"o\">=</span><span class=\"s1\">&#39;Linear vs. Quadratic&#39;</span><span class=\"p\">)</span>\n<span class=\"n\">p</span><span class=\"o\">.</span><span class=\"n\">line</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">,</span> <span class=\"n\">x</span><span class=\"p\">,</span> <span class=\"n\">line_color</span><span class=\"o\">=</span><span class=\"s1\">&#39;blue&#39;</span><span class=\"p\">,</span> <span class=\"n\">legend_label</span><span class=\"o\">=</span><span class=\"s1\">&#39;linear&#39;</span><span class=\"p\">,</span> <span class=\"n\">line_dash</span><span class=\"o\">=</span><span class=\"s1\">&#39;dashed&#39;</span><span class=\"p\">)</span>\n<span class=\"n\">p</span><span class=\"o\">.</span><span class=\"n\">circle</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">,</span> <span class=\"n\">x</span><span class=\"p\">,</span> <span class=\"n\">color</span><span class=\"o\">=</span><span class=\"s1\">&#39;blue&#39;</span><span class=\"p\">,</span> <span class=\"n\">line_width</span><span class=\"o\">=</span><span class=\"mi\">5</span><span class=\"p\">)</span>\n<span class=\"n\">p</span><span class=\"o\">.</span><span class=\"n\">line</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">,</span> <span class=\"n\">data</span><span class=\"p\">,</span> <span class=\"n\">line_color</span><span class=\"o\">=</span><span class=\"s1\">&#39;green&#39;</span><span class=\"p\">,</span> <span class=\"n\">legend_label</span><span class=\"o\">=</span><span class=\"s1\">&#39;quad&#39;</span><span class=\"p\">,</span> <span class=\"n\">line_dash</span><span class=\"o\">=</span><span class=\"s1\">&#39;dotted&#39;</span><span class=\"p\">)</span>\n<span class=\"n\">p</span><span class=\"o\">.</span><span class=\"n\">cross</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">,</span> <span class=\"n\">data</span><span class=\"p\">,</span> <span class=\"n\">color</span><span class=\"o\">=</span><span class=\"s1\">&#39;green&#39;</span><span class=\"p\">,</span> <span class=\"n\">size</span><span class=\"o\">=</span><span class=\"mi\">16</span><span class=\"p\">)</span>\n<span class=\"n\">show</span><span class=\"p\">(</span><span class=\"n\">p</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area stderr docutils container\">\n<div class=\"highlight\"><pre>\nBokehDeprecationWarning: &#39;cross() method&#39; was deprecated in Bokeh 3.4.0 and will be removed, use &#34;scatter(marker=&#39;cross&#39;, ...) instead&#34; instead.\n</pre></div></div>\n</div>\n<div class=\"nboutput docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area rendered_html docutils container\">\n<div id=\"faac9c69-e46f-4178-a052-a7e34e205ef4\" data-root-id=\"p1142\" style=\"display: contents;\"></div></div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"output_javascript\"></div>\n<script type=\"text/javascript\">\nvar element = document.currentScript.previousSibling.previousSibling;\n(function(root) {\n  function embed_document(root) {\n  const docs_json = {\"73666b5c-7f24-48a3-b6cd-c0bc8a9ba3de\":{\"version\":\"3.5.1\",\"title\":\"Bokeh Application\",\"roots\":[{\"type\":\"object\",\"name\":\"Figure\",\"id\":\"p1142\",\"attributes\":{\"x_range\":{\"type\":\"object\",\"name\":\"DataRange1d\",\"id\":\"p1143\"},\"y_range\":{\"type\":\"object\",\"name\":\"DataRange1d\",\"id\":\"p1144\"},\"x_scale\":{\"type\":\"object\",\"name\":\"LinearScale\",\"id\":\"p1152\"},\"y_scale\":{\"type\":\"object\",\"name\":\"LinearScale\",\"id\":\"p1153\"},\"title\":{\"type\":\"object\",\"name\":\"Title\",\"id\":\"p1145\",\"attributes\":{\"text\":\"Linear vs. Quadratic\"}},\"renderers\":[{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p1183\",\"attributes\":{\"data_source\":{\"type\":\"object\",\"name\":\"ColumnDataSource\",\"id\":\"p1177\",\"attributes\":{\"selected\":{\"type\":\"object\",\"name\":\"Selection\",\"id\":\"p1178\",\"attributes\":{\"indices\":[],\"line_indices\":[]}},\"selection_policy\":{\"type\":\"object\",\"name\":\"UnionRenderers\",\"id\":\"p1179\"},\"data\":{\"type\":\"map\",\"entries\":[[\"x\",[0,1,2,3,4]],[\"y\",[0,1,2,3,4]]]}}},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p1184\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p1185\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1180\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":\"blue\",\"line_dash\":[6]}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1181\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":\"blue\",\"line_alpha\":0.1,\"line_dash\":[6]}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1182\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":\"blue\",\"line_alpha\":0.2,\"line_dash\":[6]}}}},{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p1194\",\"attributes\":{\"data_source\":{\"type\":\"object\",\"name\":\"ColumnDataSource\",\"id\":\"p1188\",\"attributes\":{\"selected\":{\"type\":\"object\",\"name\":\"Selection\",\"id\":\"p1189\",\"attributes\":{\"indices\":[],\"line_indices\":[]}},\"selection_policy\":{\"type\":\"object\",\"name\":\"UnionRenderers\",\"id\":\"p1190\"},\"data\":{\"type\":\"map\",\"entries\":[[\"x\",[0,1,2,3,4]],[\"y\",[0,1,2,3,4]]]}}},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p1195\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p1196\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"Circle\",\"id\":\"p1191\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":{\"type\":\"value\",\"value\":\"blue\"},\"line_width\":{\"type\":\"value\",\"value\":5},\"fill_color\":{\"type\":\"value\",\"value\":\"blue\"},\"hatch_color\":{\"type\":\"value\",\"value\":\"blue\"}}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"Circle\",\"id\":\"p1192\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":{\"type\":\"value\",\"value\":\"blue\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.1},\"line_width\":{\"type\":\"value\",\"value\":5},\"fill_color\":{\"type\":\"value\",\"value\":\"blue\"},\"fill_alpha\":{\"type\":\"value\",\"value\":0.1},\"hatch_color\":{\"type\":\"value\",\"value\":\"blue\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.1}}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"Circle\",\"id\":\"p1193\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":{\"type\":\"value\",\"value\":\"blue\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.2},\"line_width\":{\"type\":\"value\",\"value\":5},\"fill_color\":{\"type\":\"value\",\"value\":\"blue\"},\"fill_alpha\":{\"type\":\"value\",\"value\":0.2},\"hatch_color\":{\"type\":\"value\",\"value\":\"blue\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.2}}}}},{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p1203\",\"attributes\":{\"data_source\":{\"type\":\"object\",\"name\":\"ColumnDataSource\",\"id\":\"p1197\",\"attributes\":{\"selected\":{\"type\":\"object\",\"name\":\"Selection\",\"id\":\"p1198\",\"attributes\":{\"indices\":[],\"line_indices\":[]}},\"selection_policy\":{\"type\":\"object\",\"name\":\"UnionRenderers\",\"id\":\"p1199\"},\"data\":{\"type\":\"map\",\"entries\":[[\"x\",[0,1,2,3,4]],[\"y\",[0,1,4,9,16]]]}}},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p1204\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p1205\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1200\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":\"green\",\"line_dash\":[2,4]}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1201\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":\"green\",\"line_alpha\":0.1,\"line_dash\":[2,4]}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1202\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":\"green\",\"line_alpha\":0.2,\"line_dash\":[2,4]}}}},{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p1213\",\"attributes\":{\"data_source\":{\"type\":\"object\",\"name\":\"ColumnDataSource\",\"id\":\"p1207\",\"attributes\":{\"selected\":{\"type\":\"object\",\"name\":\"Selection\",\"id\":\"p1208\",\"attributes\":{\"indices\":[],\"line_indices\":[]}},\"selection_policy\":{\"type\":\"object\",\"name\":\"UnionRenderers\",\"id\":\"p1209\"},\"data\":{\"type\":\"map\",\"entries\":[[\"x\",[0,1,2,3,4]],[\"y\",[0,1,4,9,16]]]}}},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p1214\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p1215\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"Scatter\",\"id\":\"p1210\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"size\":{\"type\":\"value\",\"value\":16},\"line_color\":{\"type\":\"value\",\"value\":\"green\"},\"fill_color\":{\"type\":\"value\",\"value\":\"green\"},\"hatch_color\":{\"type\":\"value\",\"value\":\"green\"},\"marker\":{\"type\":\"value\",\"value\":\"cross\"}}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"Scatter\",\"id\":\"p1211\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"size\":{\"type\":\"value\",\"value\":16},\"line_color\":{\"type\":\"value\",\"value\":\"green\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.1},\"fill_color\":{\"type\":\"value\",\"value\":\"green\"},\"fill_alpha\":{\"type\":\"value\",\"value\":0.1},\"hatch_color\":{\"type\":\"value\",\"value\":\"green\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.1},\"marker\":{\"type\":\"value\",\"value\":\"cross\"}}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"Scatter\",\"id\":\"p1212\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"size\":{\"type\":\"value\",\"value\":16},\"line_color\":{\"type\":\"value\",\"value\":\"green\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.2},\"fill_color\":{\"type\":\"value\",\"value\":\"green\"},\"fill_alpha\":{\"type\":\"value\",\"value\":0.2},\"hatch_color\":{\"type\":\"value\",\"value\":\"green\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.2},\"marker\":{\"type\":\"value\",\"value\":\"cross\"}}}}}],\"toolbar\":{\"type\":\"object\",\"name\":\"Toolbar\",\"id\":\"p1151\",\"attributes\":{\"tools\":[{\"type\":\"object\",\"name\":\"PanTool\",\"id\":\"p1164\"},{\"type\":\"object\",\"name\":\"WheelZoomTool\",\"id\":\"p1165\",\"attributes\":{\"renderers\":\"auto\"}},{\"type\":\"object\",\"name\":\"BoxZoomTool\",\"id\":\"p1166\",\"attributes\":{\"overlay\":{\"type\":\"object\",\"name\":\"BoxAnnotation\",\"id\":\"p1167\",\"attributes\":{\"syncable\":false,\"line_color\":\"black\",\"line_alpha\":1.0,\"line_width\":2,\"line_dash\":[4,4],\"fill_color\":\"lightgrey\",\"fill_alpha\":0.5,\"level\":\"overlay\",\"visible\":false,\"left\":{\"type\":\"number\",\"value\":\"nan\"},\"right\":{\"type\":\"number\",\"value\":\"nan\"},\"top\":{\"type\":\"number\",\"value\":\"nan\"},\"bottom\":{\"type\":\"number\",\"value\":\"nan\"},\"left_units\":\"canvas\",\"right_units\":\"canvas\",\"top_units\":\"canvas\",\"bottom_units\":\"canvas\",\"handles\":{\"type\":\"object\",\"name\":\"BoxInteractionHandles\",\"id\":\"p1173\",\"attributes\":{\"all\":{\"type\":\"object\",\"name\":\"AreaVisuals\",\"id\":\"p1172\",\"attributes\":{\"fill_color\":\"white\",\"hover_fill_color\":\"lightgray\"}}}}}}}},{\"type\":\"object\",\"name\":\"SaveTool\",\"id\":\"p1174\"},{\"type\":\"object\",\"name\":\"ResetTool\",\"id\":\"p1175\"},{\"type\":\"object\",\"name\":\"HelpTool\",\"id\":\"p1176\"}]}},\"left\":[{\"type\":\"object\",\"name\":\"LinearAxis\",\"id\":\"p1159\",\"attributes\":{\"ticker\":{\"type\":\"object\",\"name\":\"BasicTicker\",\"id\":\"p1160\",\"attributes\":{\"mantissas\":[1,2,5]}},\"formatter\":{\"type\":\"object\",\"name\":\"BasicTickFormatter\",\"id\":\"p1161\"},\"axis_label\":\"y\",\"major_label_policy\":{\"type\":\"object\",\"name\":\"AllLabels\",\"id\":\"p1162\"}}}],\"below\":[{\"type\":\"object\",\"name\":\"LinearAxis\",\"id\":\"p1154\",\"attributes\":{\"ticker\":{\"type\":\"object\",\"name\":\"BasicTicker\",\"id\":\"p1155\",\"attributes\":{\"mantissas\":[1,2,5]}},\"formatter\":{\"type\":\"object\",\"name\":\"BasicTickFormatter\",\"id\":\"p1156\"},\"axis_label\":\"x\",\"major_label_policy\":{\"type\":\"object\",\"name\":\"AllLabels\",\"id\":\"p1157\"}}}],\"center\":[{\"type\":\"object\",\"name\":\"Grid\",\"id\":\"p1158\",\"attributes\":{\"axis\":{\"id\":\"p1154\"}}},{\"type\":\"object\",\"name\":\"Grid\",\"id\":\"p1163\",\"attributes\":{\"dimension\":1,\"axis\":{\"id\":\"p1159\"}}},{\"type\":\"object\",\"name\":\"Legend\",\"id\":\"p1186\",\"attributes\":{\"items\":[{\"type\":\"object\",\"name\":\"LegendItem\",\"id\":\"p1187\",\"attributes\":{\"label\":{\"type\":\"value\",\"value\":\"linear\"},\"renderers\":[{\"id\":\"p1183\"}]}},{\"type\":\"object\",\"name\":\"LegendItem\",\"id\":\"p1206\",\"attributes\":{\"label\":{\"type\":\"value\",\"value\":\"quad\"},\"renderers\":[{\"id\":\"p1203\"}]}}]}}]}}]}};\n  const render_items = [{\"docid\":\"73666b5c-7f24-48a3-b6cd-c0bc8a9ba3de\",\"roots\":{\"p1142\":\"faac9c69-e46f-4178-a052-a7e34e205ef4\"},\"root_ids\":[\"p1142\"]}];\n  void root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n  }\n  if (root.Bokeh !== undefined) {\n    embed_document(root);\n  } else {\n    let attempts = 0;\n    const timer = setInterval(function(root) {\n      if (root.Bokeh !== undefined) {\n        clearInterval(timer);\n        embed_document(root);\n      } else {\n        attempts++;\n        if (attempts > 100) {\n          clearInterval(timer);\n          console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\");\n        }\n      }\n    }, 10, root)\n  }\n})(window);\n</script></div>\n</div>\n<p>色の使い分けを全て自分で決めるのは面倒です。 良く使われる色のリストがパレットとして、提供されています。 次は、<code class=\"docutils literal notranslate\"><span class=\"pre\">d3</span></code> の <code class=\"docutils literal notranslate\"><span class=\"pre\">Category10</span></code> という種類の3色パレットを用いています。 詳細は、<a class=\"reference external\" href=\"https://bokeh.pydata.org/en/latest/docs/reference/palettes.html\">palette</a>のページを参照してください。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[6]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"kn\">from</span> <span class=\"nn\">bokeh.palettes</span> <span class=\"kn\">import</span> <span class=\"n\">d3</span>\n<span class=\"n\">c</span> <span class=\"o\">=</span> <span class=\"n\">d3</span><span class=\"p\">[</span><span class=\"s1\">&#39;Category10&#39;</span><span class=\"p\">][</span><span class=\"mi\">3</span><span class=\"p\">]</span>\n<span class=\"n\">p</span> <span class=\"o\">=</span> <span class=\"n\">figure</span><span class=\"p\">(</span><span class=\"n\">x_axis_label</span><span class=\"o\">=</span><span class=\"s1\">&#39;x&#39;</span><span class=\"p\">,</span> <span class=\"n\">y_axis_label</span><span class=\"o\">=</span><span class=\"s1\">&#39;y&#39;</span><span class=\"p\">,</span> <span class=\"n\">title</span><span class=\"o\">=</span><span class=\"s1\">&#39;Linear vs. Quadratic&#39;</span><span class=\"p\">)</span>\n<span class=\"n\">p</span><span class=\"o\">.</span><span class=\"n\">line</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">,</span> <span class=\"n\">x</span><span class=\"p\">,</span> <span class=\"n\">line_color</span><span class=\"o\">=</span><span class=\"n\">c</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">],</span> <span class=\"n\">legend_label</span><span class=\"o\">=</span><span class=\"s1\">&#39;linear&#39;</span><span class=\"p\">,</span> <span class=\"n\">line_dash</span><span class=\"o\">=</span><span class=\"s1\">&#39;dashed&#39;</span><span class=\"p\">)</span>\n<span class=\"n\">p</span><span class=\"o\">.</span><span class=\"n\">circle</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">,</span> <span class=\"n\">x</span><span class=\"p\">,</span> <span class=\"n\">color</span><span class=\"o\">=</span><span class=\"n\">c</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">],</span> <span class=\"n\">line_width</span><span class=\"o\">=</span><span class=\"mi\">5</span><span class=\"p\">)</span>\n<span class=\"n\">p</span><span class=\"o\">.</span><span class=\"n\">line</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">,</span> <span class=\"n\">data</span><span class=\"p\">,</span> <span class=\"n\">line_color</span><span class=\"o\">=</span><span class=\"n\">c</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">],</span> <span class=\"n\">legend_label</span><span class=\"o\">=</span><span class=\"s1\">&#39;quad&#39;</span><span class=\"p\">,</span> <span class=\"n\">line_dash</span><span class=\"o\">=</span><span class=\"s1\">&#39;dotted&#39;</span><span class=\"p\">)</span>\n<span class=\"n\">p</span><span class=\"o\">.</span><span class=\"n\">cross</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">,</span> <span class=\"n\">data</span><span class=\"p\">,</span> <span class=\"n\">color</span><span class=\"o\">=</span><span class=\"n\">c</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">],</span> <span class=\"n\">size</span><span class=\"o\">=</span><span class=\"mi\">16</span><span class=\"p\">)</span>\n<span class=\"n\">show</span><span class=\"p\">(</span><span class=\"n\">p</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area stderr docutils container\">\n<div class=\"highlight\"><pre>\nBokehDeprecationWarning: &#39;cross() method&#39; was deprecated in Bokeh 3.4.0 and will be removed, use &#34;scatter(marker=&#39;cross&#39;, ...) instead&#34; instead.\n</pre></div></div>\n</div>\n<div class=\"nboutput docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area rendered_html docutils container\">\n<div id=\"a7b28163-5270-4996-b7f7-97e636a47559\" data-root-id=\"p1216\" style=\"display: contents;\"></div></div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"output_javascript\"></div>\n<script type=\"text/javascript\">\nvar element = document.currentScript.previousSibling.previousSibling;\n(function(root) {\n  function embed_document(root) {\n  const docs_json = {\"8c774a2d-4453-4b24-b490-cea028e9d2b8\":{\"version\":\"3.5.1\",\"title\":\"Bokeh Application\",\"roots\":[{\"type\":\"object\",\"name\":\"Figure\",\"id\":\"p1216\",\"attributes\":{\"x_range\":{\"type\":\"object\",\"name\":\"DataRange1d\",\"id\":\"p1217\"},\"y_range\":{\"type\":\"object\",\"name\":\"DataRange1d\",\"id\":\"p1218\"},\"x_scale\":{\"type\":\"object\",\"name\":\"LinearScale\",\"id\":\"p1226\"},\"y_scale\":{\"type\":\"object\",\"name\":\"LinearScale\",\"id\":\"p1227\"},\"title\":{\"type\":\"object\",\"name\":\"Title\",\"id\":\"p1219\",\"attributes\":{\"text\":\"Linear vs. Quadratic\"}},\"renderers\":[{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p1257\",\"attributes\":{\"data_source\":{\"type\":\"object\",\"name\":\"ColumnDataSource\",\"id\":\"p1251\",\"attributes\":{\"selected\":{\"type\":\"object\",\"name\":\"Selection\",\"id\":\"p1252\",\"attributes\":{\"indices\":[],\"line_indices\":[]}},\"selection_policy\":{\"type\":\"object\",\"name\":\"UnionRenderers\",\"id\":\"p1253\"},\"data\":{\"type\":\"map\",\"entries\":[[\"x\",[0,1,2,3,4]],[\"y\",[0,1,2,3,4]]]}}},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p1258\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p1259\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1254\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":\"#1f77b4\",\"line_dash\":[6]}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1255\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":\"#1f77b4\",\"line_alpha\":0.1,\"line_dash\":[6]}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1256\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":\"#1f77b4\",\"line_alpha\":0.2,\"line_dash\":[6]}}}},{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p1268\",\"attributes\":{\"data_source\":{\"type\":\"object\",\"name\":\"ColumnDataSource\",\"id\":\"p1262\",\"attributes\":{\"selected\":{\"type\":\"object\",\"name\":\"Selection\",\"id\":\"p1263\",\"attributes\":{\"indices\":[],\"line_indices\":[]}},\"selection_policy\":{\"type\":\"object\",\"name\":\"UnionRenderers\",\"id\":\"p1264\"},\"data\":{\"type\":\"map\",\"entries\":[[\"x\",[0,1,2,3,4]],[\"y\",[0,1,2,3,4]]]}}},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p1269\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p1270\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"Circle\",\"id\":\"p1265\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":{\"type\":\"value\",\"value\":\"#1f77b4\"},\"line_width\":{\"type\":\"value\",\"value\":5},\"fill_color\":{\"type\":\"value\",\"value\":\"#1f77b4\"},\"hatch_color\":{\"type\":\"value\",\"value\":\"#1f77b4\"}}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"Circle\",\"id\":\"p1266\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":{\"type\":\"value\",\"value\":\"#1f77b4\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.1},\"line_width\":{\"type\":\"value\",\"value\":5},\"fill_color\":{\"type\":\"value\",\"value\":\"#1f77b4\"},\"fill_alpha\":{\"type\":\"value\",\"value\":0.1},\"hatch_color\":{\"type\":\"value\",\"value\":\"#1f77b4\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.1}}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"Circle\",\"id\":\"p1267\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":{\"type\":\"value\",\"value\":\"#1f77b4\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.2},\"line_width\":{\"type\":\"value\",\"value\":5},\"fill_color\":{\"type\":\"value\",\"value\":\"#1f77b4\"},\"fill_alpha\":{\"type\":\"value\",\"value\":0.2},\"hatch_color\":{\"type\":\"value\",\"value\":\"#1f77b4\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.2}}}}},{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p1277\",\"attributes\":{\"data_source\":{\"type\":\"object\",\"name\":\"ColumnDataSource\",\"id\":\"p1271\",\"attributes\":{\"selected\":{\"type\":\"object\",\"name\":\"Selection\",\"id\":\"p1272\",\"attributes\":{\"indices\":[],\"line_indices\":[]}},\"selection_policy\":{\"type\":\"object\",\"name\":\"UnionRenderers\",\"id\":\"p1273\"},\"data\":{\"type\":\"map\",\"entries\":[[\"x\",[0,1,2,3,4]],[\"y\",[0,1,4,9,16]]]}}},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p1278\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p1279\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1274\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":\"#ff7f0e\",\"line_dash\":[2,4]}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1275\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":\"#ff7f0e\",\"line_alpha\":0.1,\"line_dash\":[2,4]}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1276\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":\"#ff7f0e\",\"line_alpha\":0.2,\"line_dash\":[2,4]}}}},{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p1287\",\"attributes\":{\"data_source\":{\"type\":\"object\",\"name\":\"ColumnDataSource\",\"id\":\"p1281\",\"attributes\":{\"selected\":{\"type\":\"object\",\"name\":\"Selection\",\"id\":\"p1282\",\"attributes\":{\"indices\":[],\"line_indices\":[]}},\"selection_policy\":{\"type\":\"object\",\"name\":\"UnionRenderers\",\"id\":\"p1283\"},\"data\":{\"type\":\"map\",\"entries\":[[\"x\",[0,1,2,3,4]],[\"y\",[0,1,4,9,16]]]}}},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p1288\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p1289\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"Scatter\",\"id\":\"p1284\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"size\":{\"type\":\"value\",\"value\":16},\"line_color\":{\"type\":\"value\",\"value\":\"#ff7f0e\"},\"fill_color\":{\"type\":\"value\",\"value\":\"#ff7f0e\"},\"hatch_color\":{\"type\":\"value\",\"value\":\"#ff7f0e\"},\"marker\":{\"type\":\"value\",\"value\":\"cross\"}}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"Scatter\",\"id\":\"p1285\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"size\":{\"type\":\"value\",\"value\":16},\"line_color\":{\"type\":\"value\",\"value\":\"#ff7f0e\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.1},\"fill_color\":{\"type\":\"value\",\"value\":\"#ff7f0e\"},\"fill_alpha\":{\"type\":\"value\",\"value\":0.1},\"hatch_color\":{\"type\":\"value\",\"value\":\"#ff7f0e\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.1},\"marker\":{\"type\":\"value\",\"value\":\"cross\"}}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"Scatter\",\"id\":\"p1286\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"size\":{\"type\":\"value\",\"value\":16},\"line_color\":{\"type\":\"value\",\"value\":\"#ff7f0e\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.2},\"fill_color\":{\"type\":\"value\",\"value\":\"#ff7f0e\"},\"fill_alpha\":{\"type\":\"value\",\"value\":0.2},\"hatch_color\":{\"type\":\"value\",\"value\":\"#ff7f0e\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.2},\"marker\":{\"type\":\"value\",\"value\":\"cross\"}}}}}],\"toolbar\":{\"type\":\"object\",\"name\":\"Toolbar\",\"id\":\"p1225\",\"attributes\":{\"tools\":[{\"type\":\"object\",\"name\":\"PanTool\",\"id\":\"p1238\"},{\"type\":\"object\",\"name\":\"WheelZoomTool\",\"id\":\"p1239\",\"attributes\":{\"renderers\":\"auto\"}},{\"type\":\"object\",\"name\":\"BoxZoomTool\",\"id\":\"p1240\",\"attributes\":{\"overlay\":{\"type\":\"object\",\"name\":\"BoxAnnotation\",\"id\":\"p1241\",\"attributes\":{\"syncable\":false,\"line_color\":\"black\",\"line_alpha\":1.0,\"line_width\":2,\"line_dash\":[4,4],\"fill_color\":\"lightgrey\",\"fill_alpha\":0.5,\"level\":\"overlay\",\"visible\":false,\"left\":{\"type\":\"number\",\"value\":\"nan\"},\"right\":{\"type\":\"number\",\"value\":\"nan\"},\"top\":{\"type\":\"number\",\"value\":\"nan\"},\"bottom\":{\"type\":\"number\",\"value\":\"nan\"},\"left_units\":\"canvas\",\"right_units\":\"canvas\",\"top_units\":\"canvas\",\"bottom_units\":\"canvas\",\"handles\":{\"type\":\"object\",\"name\":\"BoxInteractionHandles\",\"id\":\"p1247\",\"attributes\":{\"all\":{\"type\":\"object\",\"name\":\"AreaVisuals\",\"id\":\"p1246\",\"attributes\":{\"fill_color\":\"white\",\"hover_fill_color\":\"lightgray\"}}}}}}}},{\"type\":\"object\",\"name\":\"SaveTool\",\"id\":\"p1248\"},{\"type\":\"object\",\"name\":\"ResetTool\",\"id\":\"p1249\"},{\"type\":\"object\",\"name\":\"HelpTool\",\"id\":\"p1250\"}]}},\"left\":[{\"type\":\"object\",\"name\":\"LinearAxis\",\"id\":\"p1233\",\"attributes\":{\"ticker\":{\"type\":\"object\",\"name\":\"BasicTicker\",\"id\":\"p1234\",\"attributes\":{\"mantissas\":[1,2,5]}},\"formatter\":{\"type\":\"object\",\"name\":\"BasicTickFormatter\",\"id\":\"p1235\"},\"axis_label\":\"y\",\"major_label_policy\":{\"type\":\"object\",\"name\":\"AllLabels\",\"id\":\"p1236\"}}}],\"below\":[{\"type\":\"object\",\"name\":\"LinearAxis\",\"id\":\"p1228\",\"attributes\":{\"ticker\":{\"type\":\"object\",\"name\":\"BasicTicker\",\"id\":\"p1229\",\"attributes\":{\"mantissas\":[1,2,5]}},\"formatter\":{\"type\":\"object\",\"name\":\"BasicTickFormatter\",\"id\":\"p1230\"},\"axis_label\":\"x\",\"major_label_policy\":{\"type\":\"object\",\"name\":\"AllLabels\",\"id\":\"p1231\"}}}],\"center\":[{\"type\":\"object\",\"name\":\"Grid\",\"id\":\"p1232\",\"attributes\":{\"axis\":{\"id\":\"p1228\"}}},{\"type\":\"object\",\"name\":\"Grid\",\"id\":\"p1237\",\"attributes\":{\"dimension\":1,\"axis\":{\"id\":\"p1233\"}}},{\"type\":\"object\",\"name\":\"Legend\",\"id\":\"p1260\",\"attributes\":{\"items\":[{\"type\":\"object\",\"name\":\"LegendItem\",\"id\":\"p1261\",\"attributes\":{\"label\":{\"type\":\"value\",\"value\":\"linear\"},\"renderers\":[{\"id\":\"p1257\"}]}},{\"type\":\"object\",\"name\":\"LegendItem\",\"id\":\"p1280\",\"attributes\":{\"label\":{\"type\":\"value\",\"value\":\"quad\"},\"renderers\":[{\"id\":\"p1277\"}]}}]}}]}}]}};\n  const render_items = [{\"docid\":\"8c774a2d-4453-4b24-b490-cea028e9d2b8\",\"roots\":{\"p1216\":\"a7b28163-5270-4996-b7f7-97e636a47559\"},\"root_ids\":[\"p1216\"]}];\n  void root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n  }\n  if (root.Bokeh !== undefined) {\n    embed_document(root);\n  } else {\n    let attempts = 0;\n    const timer = setInterval(function(root) {\n      if (root.Bokeh !== undefined) {\n        clearInterval(timer);\n        embed_document(root);\n      } else {\n        attempts++;\n        if (attempts > 100) {\n          clearInterval(timer);\n          console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\");\n        }\n      }\n    }, 10, root)\n  }\n})(window);\n</script></div>\n</div>\n<p>グラフを描画するときのプロット数を増やすことで任意の曲線のグラフを作成することもできます。 次の例では、<code class=\"docutils literal notranslate\"><span class=\"pre\">numpy</span></code> モジュールの <code class=\"docutils literal notranslate\"><span class=\"pre\">arange()</span></code> 関数を用いて、<span class=\"math notranslate nohighlight\">\\(- \\pi\\)</span> から <span class=\"math notranslate nohighlight\">\\(\\pi\\)</span> の範囲を <code class=\"docutils literal notranslate\"><span class=\"pre\">0.1</span></code> 刻みでx軸の値を配列として準備しています。 そのx軸の値に対して、<code class=\"docutils literal notranslate\"><span class=\"pre\">numpy</span></code> モジュールの <code class=\"docutils literal notranslate\"><span class=\"pre\">cos()</span></code> 関数と <code class=\"docutils literal notranslate\"><span class=\"pre\">sin()</span></code> 関数を用いて、y軸の値をそれぞれ準備し、cosカーブとsinカーブを描画しています。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[7]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"c1\">#　グラフのx軸の値となる配列</span>\n<span class=\"n\">x</span> <span class=\"o\">=</span> <span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">arange</span><span class=\"p\">(</span><span class=\"o\">-</span><span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">pi</span><span class=\"p\">,</span> <span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">pi</span><span class=\"p\">,</span> <span class=\"mf\">0.1</span><span class=\"p\">)</span>\n\n<span class=\"c1\"># 上記配列をcos, sin関数に渡し, y軸の値として描画</span>\n<span class=\"n\">p</span> <span class=\"o\">=</span> <span class=\"n\">figure</span><span class=\"p\">(</span><span class=\"n\">title</span><span class=\"o\">=</span><span class=\"s1\">&#39;cos and sin Curves&#39;</span><span class=\"p\">,</span> <span class=\"n\">x_axis_label</span><span class=\"o\">=</span><span class=\"s1\">&#39;x&#39;</span><span class=\"p\">,</span> <span class=\"n\">y_axis_label</span><span class=\"o\">=</span><span class=\"s1\">&#39;y&#39;</span><span class=\"p\">)</span>\n<span class=\"n\">p</span><span class=\"o\">.</span><span class=\"n\">line</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">,</span> <span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">cos</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">),</span> <span class=\"n\">line_color</span><span class=\"o\">=</span><span class=\"n\">c</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">])</span>\n<span class=\"n\">p</span><span class=\"o\">.</span><span class=\"n\">line</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">,</span> <span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">sin</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">),</span> <span class=\"n\">line_color</span><span class=\"o\">=</span><span class=\"n\">c</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">])</span>\n<span class=\"n\">show</span><span class=\"p\">(</span><span class=\"n\">p</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area rendered_html docutils container\">\n<div id=\"b76ffe78-dfb3-4058-9465-302d309b647b\" data-root-id=\"p1290\" style=\"display: contents;\"></div></div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"output_javascript\"></div>\n<script type=\"text/javascript\">\nvar element = document.currentScript.previousSibling.previousSibling;\n(function(root) {\n  function embed_document(root) {\n  const docs_json = {\"492b40b3-1174-4898-9378-1e02cd77210b\":{\"version\":\"3.5.1\",\"title\":\"Bokeh Application\",\"roots\":[{\"type\":\"object\",\"name\":\"Figure\",\"id\":\"p1290\",\"attributes\":{\"x_range\":{\"type\":\"object\",\"name\":\"DataRange1d\",\"id\":\"p1291\"},\"y_range\":{\"type\":\"object\",\"name\":\"DataRange1d\",\"id\":\"p1292\"},\"x_scale\":{\"type\":\"object\",\"name\":\"LinearScale\",\"id\":\"p1300\"},\"y_scale\":{\"type\":\"object\",\"name\":\"LinearScale\",\"id\":\"p1301\"},\"title\":{\"type\":\"object\",\"name\":\"Title\",\"id\":\"p1293\",\"attributes\":{\"text\":\"cos and sin Curves\"}},\"renderers\":[{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p1331\",\"attributes\":{\"data_source\":{\"type\":\"object\",\"name\":\"ColumnDataSource\",\"id\":\"p1325\",\"attributes\":{\"selected\":{\"type\":\"object\",\"name\":\"Selection\",\"id\":\"p1326\",\"attributes\":{\"indices\":[],\"line_indices\":[]}},\"selection_policy\":{\"type\":\"object\",\"name\":\"UnionRenderers\",\"id\":\"p1327\"},\"data\":{\"type\":\"map\",\"entries\":[[\"x\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"GC1EVPshCcBLYHeHLlUIwH6TqrphiAfAscbd7ZS7BsDk+RAhyO4FwBctRFT7IQXASmB3hy5VBMB9k6q6YYgDwLDG3e2UuwLA4/kQIcjuAcAWLURU+yEBwElgd4cuVQDA+CZVdcMQ/79ejbvbKXf9v8TzIUKQ3fu/KlqIqPZD+r+QwO4OXar4v/YmVXXDEPe/XI272yl39b/C8yFCkN3zvyhaiKj2Q/K/jsDuDl2q8L/oTarqhiHuv7Qad7dT7uq/gOdDhCC7579MtBBR7YfkvxiB3R26VOG/yJtU1Q1D3L9gNe5up9zVv/CdDxGC7M6/INFCRLUfwr9AEdjdoUulvwAiW1WR560/UJUjIrFGxD8QMXj3vonQP3iX3l0l8NY/4P1ExItW3T8kslUVed7hP1jliEisEeU/jBi8e99E6D/AS++uEnjrP/B+IuJFq+4/FNmqijzv8D+wckQk1ojyP0gM3r1vIvQ/4KV3Vwm89T98PxHxolX3PxjZqoo87/g/sHJEJNaI+j9IDN69byL8P+Sld1cJvP0/gD8R8aJV/z+MbFVFnncAQFg5IhJrRAFAJgbv3jcRAkD00rurBN4CQMCfiHjRqgNAjGxVRZ53BEBaOSISa0QFQCgG7943EQZA9NK7qwTeBkDAn4h40aoHQI5sVUWedwhA\"},\"shape\":[63],\"dtype\":\"float64\",\"order\":\"little\"}],[\"y\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"AAAAAAAA8L/AF6j5Etfvv3pid5W0XO+/uQkv1B2S7r/2otvnVHntv019WwYoFey/EltIPCZp6r+OnZ9Slnnov2CYcd5rS+a/FuKSljrk47+EBrUPKErhvwFhxwa4B92/v3k7lN4w179KTCposx7Rv9dWE7x7wcW/P/nFT9Ubsr/WF1/FeuadP8JsovT5fcA/tA4lT/UUzT/LRTS5xrDUPyRyU1cmoto/2Z6YBLMn4D9+rYhLANXiP/EvMBciUuU/k9GQtLqY5z+Ki4Xv96LpP3v0gPaha+s/rwNmsyju7D9TcFd3rybuP89Ao9sWEu8/1uWFvgSu7z8lplZH6vjvP7TLueIH8u8/sgunLG+Z7z/8vV7DAvDuP1UawQN09+0/TCzStD6y7D8o2X2toiPrP9eo24SbT+k/08g0YtY65z+oJNsGpurkP08tajD1ZOI/5MaK7G5g3z8IOxaSsabZP2vCYnxXq9M/6TxYVFv7yj+DjFkrB7a8P+1fUEM6X4k/iEFOWFVmtr/mFnwno9/HvyhLa3CFJ9K/91zkjskw2L83azdZLfzdv/cydD9vveG/q7Alb2dP5L9r1Ac8bK3mv54Kg4hv0ei/Qf4Nlve16r86cqcGLVbsvztQ+T7nre2/AyN4Cbe57r+7mElf73bvv9KpeUCs4++/\"},\"shape\":[63],\"dtype\":\"float64\",\"order\":\"little\"}]]}}},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p1332\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p1333\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1328\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":\"#1f77b4\"}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1329\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":\"#1f77b4\",\"line_alpha\":0.1}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1330\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":\"#1f77b4\",\"line_alpha\":0.2}}}},{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p1340\",\"attributes\":{\"data_source\":{\"type\":\"object\",\"name\":\"ColumnDataSource\",\"id\":\"p1334\",\"attributes\":{\"selected\":{\"type\":\"object\",\"name\":\"Selection\",\"id\":\"p1335\",\"attributes\":{\"indices\":[],\"line_indices\":[]}},\"selection_policy\":{\"type\":\"object\",\"name\":\"UnionRenderers\",\"id\":\"p1336\"},\"data\":{\"type\":\"map\",\"entries\":[[\"x\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"GC1EVPshCcBLYHeHLlUIwH6TqrphiAfAscbd7ZS7BsDk+RAhyO4FwBctRFT7IQXASmB3hy5VBMB9k6q6YYgDwLDG3e2UuwLA4/kQIcjuAcAWLURU+yEBwElgd4cuVQDA+CZVdcMQ/79ejbvbKXf9v8TzIUKQ3fu/KlqIqPZD+r+QwO4OXar4v/YmVXXDEPe/XI272yl39b/C8yFCkN3zvyhaiKj2Q/K/jsDuDl2q8L/oTarqhiHuv7Qad7dT7uq/gOdDhCC7579MtBBR7YfkvxiB3R26VOG/yJtU1Q1D3L9gNe5up9zVv/CdDxGC7M6/INFCRLUfwr9AEdjdoUulvwAiW1WR560/UJUjIrFGxD8QMXj3vonQP3iX3l0l8NY/4P1ExItW3T8kslUVed7hP1jliEisEeU/jBi8e99E6D/AS++uEnjrP/B+IuJFq+4/FNmqijzv8D+wckQk1ojyP0gM3r1vIvQ/4KV3Vwm89T98PxHxolX3PxjZqoo87/g/sHJEJNaI+j9IDN69byL8P+Sld1cJvP0/gD8R8aJV/z+MbFVFnncAQFg5IhJrRAFAJgbv3jcRAkD00rurBN4CQMCfiHjRqgNAjGxVRZ53BEBaOSISa0QFQCgG7943EQZA9NK7qwTeBkDAn4h40aoHQI5sVUWedwhA\"},\"shape\":[63],\"dtype\":\"float64\",\"order\":\"little\"}],[\"y\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"B1wUMyamobw7y4vLro65v8bSPSP/bcm/Orq6lc3p0r9yZyvpOuzYv/kFS3Tort6/XkGlF40R4r+9GUZpbp3kv9L+v8KU9Oa/RqhdmAMR6b/zDAmPVO3qvzxjLUzFhOy/yFUaokPT7b9OHsX5d9XuvwThRN/NiO+/jG0sm3rr77/FQuDHgfzvv7WYL9e3u++/7RW9gcIp779SOBofF0juvz+00er2GO2/8nLrP2mf67/91qrZM9/pvxYvWC3R3Oe/jNHD9WSd5b+gys8Nrybjv6mFoLv8fuC/5qYkJDFa27+Y5V0jcnDVv4EwSNa4n86/+NS2bTgQwr+dDpiCD0qlv8Mu6Dk3460/+gy3ygIxxD+kTP8QyVrQP1Ziun47c9Y/JdLwQ0FS3D9ZGy7savTgP7fA7P9WlOM/47MfLS4C5j/EHtzduTfoP8vI4npTL+o/6BLQ3/Lj6z82igE6O1HtP/ooRTGGc+4/h0DHPe1H7z++7F0TUczvP1PsNw9f/+8//D0MmpTg7z+e6yJ2QHDvPyeZ4PWBr+4/qSLYHEag7T/EJLqyQkXsPyQSvFTvoeo/VgUyl3y66D80sApOyZPmP5X1lhdWM+Q/fsd6STef4T+B347HCrzdP8C8C2SY7dc/YqKwivHh0T+6+jPXGVHHP5bLvttYRbU/\"},\"shape\":[63],\"dtype\":\"float64\",\"order\":\"little\"}]]}}},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p1341\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p1342\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1337\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":\"#ff7f0e\"}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1338\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":\"#ff7f0e\",\"line_alpha\":0.1}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1339\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":\"#ff7f0e\",\"line_alpha\":0.2}}}}],\"toolbar\":{\"type\":\"object\",\"name\":\"Toolbar\",\"id\":\"p1299\",\"attributes\":{\"tools\":[{\"type\":\"object\",\"name\":\"PanTool\",\"id\":\"p1312\"},{\"type\":\"object\",\"name\":\"WheelZoomTool\",\"id\":\"p1313\",\"attributes\":{\"renderers\":\"auto\"}},{\"type\":\"object\",\"name\":\"BoxZoomTool\",\"id\":\"p1314\",\"attributes\":{\"overlay\":{\"type\":\"object\",\"name\":\"BoxAnnotation\",\"id\":\"p1315\",\"attributes\":{\"syncable\":false,\"line_color\":\"black\",\"line_alpha\":1.0,\"line_width\":2,\"line_dash\":[4,4],\"fill_color\":\"lightgrey\",\"fill_alpha\":0.5,\"level\":\"overlay\",\"visible\":false,\"left\":{\"type\":\"number\",\"value\":\"nan\"},\"right\":{\"type\":\"number\",\"value\":\"nan\"},\"top\":{\"type\":\"number\",\"value\":\"nan\"},\"bottom\":{\"type\":\"number\",\"value\":\"nan\"},\"left_units\":\"canvas\",\"right_units\":\"canvas\",\"top_units\":\"canvas\",\"bottom_units\":\"canvas\",\"handles\":{\"type\":\"object\",\"name\":\"BoxInteractionHandles\",\"id\":\"p1321\",\"attributes\":{\"all\":{\"type\":\"object\",\"name\":\"AreaVisuals\",\"id\":\"p1320\",\"attributes\":{\"fill_color\":\"white\",\"hover_fill_color\":\"lightgray\"}}}}}}}},{\"type\":\"object\",\"name\":\"SaveTool\",\"id\":\"p1322\"},{\"type\":\"object\",\"name\":\"ResetTool\",\"id\":\"p1323\"},{\"type\":\"object\",\"name\":\"HelpTool\",\"id\":\"p1324\"}]}},\"left\":[{\"type\":\"object\",\"name\":\"LinearAxis\",\"id\":\"p1307\",\"attributes\":{\"ticker\":{\"type\":\"object\",\"name\":\"BasicTicker\",\"id\":\"p1308\",\"attributes\":{\"mantissas\":[1,2,5]}},\"formatter\":{\"type\":\"object\",\"name\":\"BasicTickFormatter\",\"id\":\"p1309\"},\"axis_label\":\"y\",\"major_label_policy\":{\"type\":\"object\",\"name\":\"AllLabels\",\"id\":\"p1310\"}}}],\"below\":[{\"type\":\"object\",\"name\":\"LinearAxis\",\"id\":\"p1302\",\"attributes\":{\"ticker\":{\"type\":\"object\",\"name\":\"BasicTicker\",\"id\":\"p1303\",\"attributes\":{\"mantissas\":[1,2,5]}},\"formatter\":{\"type\":\"object\",\"name\":\"BasicTickFormatter\",\"id\":\"p1304\"},\"axis_label\":\"x\",\"major_label_policy\":{\"type\":\"object\",\"name\":\"AllLabels\",\"id\":\"p1305\"}}}],\"center\":[{\"type\":\"object\",\"name\":\"Grid\",\"id\":\"p1306\",\"attributes\":{\"axis\":{\"id\":\"p1302\"}}},{\"type\":\"object\",\"name\":\"Grid\",\"id\":\"p1311\",\"attributes\":{\"dimension\":1,\"axis\":{\"id\":\"p1307\"}}}]}}]}};\n  const render_items = [{\"docid\":\"492b40b3-1174-4898-9378-1e02cd77210b\",\"roots\":{\"p1290\":\"b76ffe78-dfb3-4058-9465-302d309b647b\"},\"root_ids\":[\"p1290\"]}];\n  void root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n  }\n  if (root.Bokeh !== undefined) {\n    embed_document(root);\n  } else {\n    let attempts = 0;\n    const timer = setInterval(function(root) {\n      if (root.Bokeh !== undefined) {\n        clearInterval(timer);\n        embed_document(root);\n      } else {\n        attempts++;\n        if (attempts > 100) {\n          clearInterval(timer);\n          console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\");\n        }\n      }\n    }, 10, root)\n  }\n})(window);\n</script></div>\n</div>\n<p>プロットの数を少なくすると、曲線は直線をつなぎ合わせることで描画されていることがわかります。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[8]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">x</span> <span class=\"o\">=</span> <span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">arange</span><span class=\"p\">(</span><span class=\"o\">-</span><span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">pi</span><span class=\"p\">,</span> <span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">pi</span><span class=\"p\">,</span> <span class=\"mf\">0.5</span><span class=\"p\">)</span>\n<span class=\"n\">p</span> <span class=\"o\">=</span> <span class=\"n\">figure</span><span class=\"p\">(</span><span class=\"n\">title</span><span class=\"o\">=</span><span class=\"s1\">&#39;cos and sin Curves&#39;</span><span class=\"p\">,</span> <span class=\"n\">x_axis_label</span><span class=\"o\">=</span><span class=\"s1\">&#39;x&#39;</span><span class=\"p\">,</span> <span class=\"n\">y_axis_label</span><span class=\"o\">=</span><span class=\"s1\">&#39;y&#39;</span><span class=\"p\">)</span>\n<span class=\"n\">p</span><span class=\"o\">.</span><span class=\"n\">line</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">,</span> <span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">cos</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">),</span> <span class=\"n\">line_color</span><span class=\"o\">=</span><span class=\"n\">c</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">])</span>\n<span class=\"n\">p</span><span class=\"o\">.</span><span class=\"n\">line</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">,</span> <span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">sin</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">),</span> <span class=\"n\">line_color</span><span class=\"o\">=</span><span class=\"n\">c</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">])</span>\n<span class=\"n\">show</span><span class=\"p\">(</span><span class=\"n\">p</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area rendered_html docutils container\">\n<div id=\"a78436e0-0301-481c-acf3-a0357ed3f4d2\" data-root-id=\"p1347\" style=\"display: contents;\"></div></div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"output_javascript\"></div>\n<script type=\"text/javascript\">\nvar element = document.currentScript.previousSibling.previousSibling;\n(function(root) {\n  function embed_document(root) {\n  const docs_json = {\"bc606f45-41f9-49c0-b66c-c40293c1368e\":{\"version\":\"3.5.1\",\"title\":\"Bokeh Application\",\"roots\":[{\"type\":\"object\",\"name\":\"Figure\",\"id\":\"p1347\",\"attributes\":{\"x_range\":{\"type\":\"object\",\"name\":\"DataRange1d\",\"id\":\"p1348\"},\"y_range\":{\"type\":\"object\",\"name\":\"DataRange1d\",\"id\":\"p1349\"},\"x_scale\":{\"type\":\"object\",\"name\":\"LinearScale\",\"id\":\"p1357\"},\"y_scale\":{\"type\":\"object\",\"name\":\"LinearScale\",\"id\":\"p1358\"},\"title\":{\"type\":\"object\",\"name\":\"Title\",\"id\":\"p1350\",\"attributes\":{\"text\":\"cos and sin Curves\"}},\"renderers\":[{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p1388\",\"attributes\":{\"data_source\":{\"type\":\"object\",\"name\":\"ColumnDataSource\",\"id\":\"p1382\",\"attributes\":{\"selected\":{\"type\":\"object\",\"name\":\"Selection\",\"id\":\"p1383\",\"attributes\":{\"indices\":[],\"line_indices\":[]}},\"selection_policy\":{\"type\":\"object\",\"name\":\"UnionRenderers\",\"id\":\"p1384\"},\"data\":{\"type\":\"map\",\"entries\":[[\"x\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"GC1EVPshCcAYLURU+yEFwBgtRFT7IQHAMFqIqPZD+r8wWoio9kPyv2C0EFHth+S/gNFCRLUfwr9Al95dJfDWP6BL764SeOs/0KV3Vwm89T/QpXdXCbz9P+jSu6sE3gJA6NK7qwTeBkA=\"},\"shape\":[13],\"dtype\":\"float64\",\"order\":\"little\"}],[\"y\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"AAAAAAAA8L9PfVsGKBXsv4oGtQ8oSuG/n/nFT9Ubsr8HclNXJqLaP36Lhe/3ouk/0+WFvgSu7z9fGsEDdPftP8Ak2wam6uQ/Zj1YVFv7yj/cSmtwhSfSv0nUBzxsrea/9iJ4Cbe57r8=\"},\"shape\":[13],\"dtype\":\"float64\",\"order\":\"little\"}]]}}},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p1389\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p1390\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1385\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":\"#1f77b4\"}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1386\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":\"#1f77b4\",\"line_alpha\":0.1}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1387\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":\"#1f77b4\",\"line_alpha\":0.2}}}},{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p1397\",\"attributes\":{\"data_source\":{\"type\":\"object\",\"name\":\"ColumnDataSource\",\"id\":\"p1391\",\"attributes\":{\"selected\":{\"type\":\"object\",\"name\":\"Selection\",\"id\":\"p1392\",\"attributes\":{\"indices\":[],\"line_indices\":[]}},\"selection_policy\":{\"type\":\"object\",\"name\":\"UnionRenderers\",\"id\":\"p1393\"},\"data\":{\"type\":\"map\",\"entries\":[[\"x\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"GC1EVPshCcAYLURU+yEFwBgtRFT7IQHAMFqIqPZD+r8wWoio9kPyv2C0EFHth+S/gNFCRLUfwr9Al95dJfDWP6BL764SeOs/0KV3Vwm89T/QpXdXCbz9P+jSu6sE3gJA6NK7qwTeBkA=\"},\"shape\":[13],\"dtype\":\"float64\",\"order\":\"little\"}],[\"y\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"B1wUMyamobzyBUt06K7ev+8MCY9U7eq/i20sm3rr779FtNHq9hjtv7DKzw2vJuO/V9W2bTgQwr8hYrp+O3PWP68e3N25N+g/gUDHPe1H7z8zmeD1ga/uP1awCk7Jk+Y/vqKwivHh0T8=\"},\"shape\":[13],\"dtype\":\"float64\",\"order\":\"little\"}]]}}},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p1398\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p1399\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1394\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":\"#ff7f0e\"}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1395\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":\"#ff7f0e\",\"line_alpha\":0.1}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1396\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":\"#ff7f0e\",\"line_alpha\":0.2}}}}],\"toolbar\":{\"type\":\"object\",\"name\":\"Toolbar\",\"id\":\"p1356\",\"attributes\":{\"tools\":[{\"type\":\"object\",\"name\":\"PanTool\",\"id\":\"p1369\"},{\"type\":\"object\",\"name\":\"WheelZoomTool\",\"id\":\"p1370\",\"attributes\":{\"renderers\":\"auto\"}},{\"type\":\"object\",\"name\":\"BoxZoomTool\",\"id\":\"p1371\",\"attributes\":{\"overlay\":{\"type\":\"object\",\"name\":\"BoxAnnotation\",\"id\":\"p1372\",\"attributes\":{\"syncable\":false,\"line_color\":\"black\",\"line_alpha\":1.0,\"line_width\":2,\"line_dash\":[4,4],\"fill_color\":\"lightgrey\",\"fill_alpha\":0.5,\"level\":\"overlay\",\"visible\":false,\"left\":{\"type\":\"number\",\"value\":\"nan\"},\"right\":{\"type\":\"number\",\"value\":\"nan\"},\"top\":{\"type\":\"number\",\"value\":\"nan\"},\"bottom\":{\"type\":\"number\",\"value\":\"nan\"},\"left_units\":\"canvas\",\"right_units\":\"canvas\",\"top_units\":\"canvas\",\"bottom_units\":\"canvas\",\"handles\":{\"type\":\"object\",\"name\":\"BoxInteractionHandles\",\"id\":\"p1378\",\"attributes\":{\"all\":{\"type\":\"object\",\"name\":\"AreaVisuals\",\"id\":\"p1377\",\"attributes\":{\"fill_color\":\"white\",\"hover_fill_color\":\"lightgray\"}}}}}}}},{\"type\":\"object\",\"name\":\"SaveTool\",\"id\":\"p1379\"},{\"type\":\"object\",\"name\":\"ResetTool\",\"id\":\"p1380\"},{\"type\":\"object\",\"name\":\"HelpTool\",\"id\":\"p1381\"}]}},\"left\":[{\"type\":\"object\",\"name\":\"LinearAxis\",\"id\":\"p1364\",\"attributes\":{\"ticker\":{\"type\":\"object\",\"name\":\"BasicTicker\",\"id\":\"p1365\",\"attributes\":{\"mantissas\":[1,2,5]}},\"formatter\":{\"type\":\"object\",\"name\":\"BasicTickFormatter\",\"id\":\"p1366\"},\"axis_label\":\"y\",\"major_label_policy\":{\"type\":\"object\",\"name\":\"AllLabels\",\"id\":\"p1367\"}}}],\"below\":[{\"type\":\"object\",\"name\":\"LinearAxis\",\"id\":\"p1359\",\"attributes\":{\"ticker\":{\"type\":\"object\",\"name\":\"BasicTicker\",\"id\":\"p1360\",\"attributes\":{\"mantissas\":[1,2,5]}},\"formatter\":{\"type\":\"object\",\"name\":\"BasicTickFormatter\",\"id\":\"p1361\"},\"axis_label\":\"x\",\"major_label_policy\":{\"type\":\"object\",\"name\":\"AllLabels\",\"id\":\"p1362\"}}}],\"center\":[{\"type\":\"object\",\"name\":\"Grid\",\"id\":\"p1363\",\"attributes\":{\"axis\":{\"id\":\"p1359\"}}},{\"type\":\"object\",\"name\":\"Grid\",\"id\":\"p1368\",\"attributes\":{\"dimension\":1,\"axis\":{\"id\":\"p1364\"}}}]}}]}};\n  const render_items = [{\"docid\":\"bc606f45-41f9-49c0-b66c-c40293c1368e\",\"roots\":{\"p1347\":\"a78436e0-0301-481c-acf3-a0357ed3f4d2\"},\"root_ids\":[\"p1347\"]}];\n  void root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n  }\n  if (root.Bokeh !== undefined) {\n    embed_document(root);\n  } else {\n    let attempts = 0;\n    const timer = setInterval(function(root) {\n      if (root.Bokeh !== undefined) {\n        clearInterval(timer);\n        embed_document(root);\n      } else {\n        attempts++;\n        if (attempts > 100) {\n          clearInterval(timer);\n          console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\");\n        }\n      }\n    }, 10, root)\n  }\n})(window);\n</script></div>\n</div>\n<section id=\"グラフの例：ソートアルゴリズムにおける比較回数\">\n<h3>グラフの例：ソートアルゴリズムにおける比較回数<a class=\"headerlink\" href=\"#グラフの例：ソートアルゴリズムにおける比較回数\" title=\"Link to this heading\">¶</a></h3>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[9]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"kn\">import</span> <span class=\"nn\">random</span>\n\n<span class=\"k\">def</span> <span class=\"nf\">bubble_sort</span><span class=\"p\">(</span><span class=\"n\">lst</span><span class=\"p\">):</span>\n    <span class=\"n\">n</span> <span class=\"o\">=</span> <span class=\"mi\">0</span>\n    <span class=\"k\">for</span> <span class=\"n\">j</span> <span class=\"ow\">in</span> <span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">lst</span><span class=\"p\">)</span> <span class=\"o\">-</span> <span class=\"mi\">1</span><span class=\"p\">):</span>\n        <span class=\"k\">for</span> <span class=\"n\">i</span> <span class=\"ow\">in</span> <span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">lst</span><span class=\"p\">)</span> <span class=\"o\">-</span> <span class=\"mi\">1</span> <span class=\"o\">-</span> <span class=\"n\">j</span><span class=\"p\">):</span>\n            <span class=\"n\">n</span> <span class=\"o\">=</span> <span class=\"n\">n</span> <span class=\"o\">+</span> <span class=\"mi\">1</span>\n            <span class=\"k\">if</span> <span class=\"n\">lst</span><span class=\"p\">[</span><span class=\"n\">i</span><span class=\"p\">]</span> <span class=\"o\">&gt;</span> <span class=\"n\">lst</span><span class=\"p\">[</span><span class=\"n\">i</span><span class=\"o\">+</span><span class=\"mi\">1</span><span class=\"p\">]:</span>\n                <span class=\"n\">lst</span><span class=\"p\">[</span><span class=\"n\">i</span> <span class=\"o\">+</span> <span class=\"mi\">1</span><span class=\"p\">],</span> <span class=\"n\">lst</span><span class=\"p\">[</span><span class=\"n\">i</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">lst</span><span class=\"p\">[</span><span class=\"n\">i</span><span class=\"p\">],</span> <span class=\"n\">lst</span><span class=\"p\">[</span><span class=\"n\">i</span><span class=\"o\">+</span><span class=\"mi\">1</span><span class=\"p\">]</span>\n    <span class=\"k\">return</span> <span class=\"n\">n</span>\n\n<span class=\"k\">def</span> <span class=\"nf\">merge_sort_rec</span><span class=\"p\">(</span><span class=\"n\">data</span><span class=\"p\">,</span> <span class=\"n\">l</span><span class=\"p\">,</span> <span class=\"n\">r</span><span class=\"p\">,</span> <span class=\"n\">work</span><span class=\"p\">):</span>\n    <span class=\"k\">if</span> <span class=\"n\">l</span><span class=\"o\">+</span><span class=\"mi\">1</span> <span class=\"o\">&gt;=</span> <span class=\"n\">r</span><span class=\"p\">:</span>\n        <span class=\"k\">return</span> <span class=\"mi\">0</span>\n    <span class=\"n\">m</span> <span class=\"o\">=</span> <span class=\"n\">l</span><span class=\"o\">+</span><span class=\"p\">(</span><span class=\"n\">r</span><span class=\"o\">-</span><span class=\"n\">l</span><span class=\"p\">)</span><span class=\"o\">//</span><span class=\"mi\">2</span>\n    <span class=\"n\">n1</span> <span class=\"o\">=</span> <span class=\"n\">merge_sort_rec</span><span class=\"p\">(</span><span class=\"n\">data</span><span class=\"p\">,</span> <span class=\"n\">l</span><span class=\"p\">,</span> <span class=\"n\">m</span><span class=\"p\">,</span> <span class=\"n\">work</span><span class=\"p\">)</span>\n    <span class=\"n\">n2</span> <span class=\"o\">=</span> <span class=\"n\">merge_sort_rec</span><span class=\"p\">(</span><span class=\"n\">data</span><span class=\"p\">,</span> <span class=\"n\">m</span><span class=\"p\">,</span> <span class=\"n\">r</span><span class=\"p\">,</span> <span class=\"n\">work</span><span class=\"p\">)</span>\n    <span class=\"n\">n</span> <span class=\"o\">=</span> <span class=\"mi\">0</span>\n    <span class=\"n\">i1</span> <span class=\"o\">=</span> <span class=\"n\">l</span>\n    <span class=\"n\">i2</span> <span class=\"o\">=</span> <span class=\"n\">m</span>\n    <span class=\"k\">for</span> <span class=\"n\">i</span> <span class=\"ow\">in</span> <span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"n\">l</span><span class=\"p\">,</span> <span class=\"n\">r</span><span class=\"p\">):</span>\n        <span class=\"n\">from1</span> <span class=\"o\">=</span> <span class=\"kc\">False</span>\n        <span class=\"k\">if</span> <span class=\"n\">i2</span> <span class=\"o\">&gt;=</span> <span class=\"n\">r</span><span class=\"p\">:</span>\n            <span class=\"n\">from1</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n        <span class=\"k\">elif</span> <span class=\"n\">i1</span> <span class=\"o\">&lt;</span> <span class=\"n\">m</span><span class=\"p\">:</span>\n            <span class=\"n\">n</span> <span class=\"o\">=</span> <span class=\"n\">n</span> <span class=\"o\">+</span> <span class=\"mi\">1</span>\n            <span class=\"k\">if</span> <span class=\"n\">data</span><span class=\"p\">[</span><span class=\"n\">i1</span><span class=\"p\">]</span> <span class=\"o\">&lt;=</span> <span class=\"n\">data</span><span class=\"p\">[</span><span class=\"n\">i2</span><span class=\"p\">]:</span>\n                <span class=\"n\">from1</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n        <span class=\"k\">if</span> <span class=\"n\">from1</span><span class=\"p\">:</span>\n            <span class=\"n\">work</span><span class=\"p\">[</span><span class=\"n\">i</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">data</span><span class=\"p\">[</span><span class=\"n\">i1</span><span class=\"p\">]</span>\n            <span class=\"n\">i1</span> <span class=\"o\">=</span> <span class=\"n\">i1</span> <span class=\"o\">+</span> <span class=\"mi\">1</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"n\">work</span><span class=\"p\">[</span><span class=\"n\">i</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">data</span><span class=\"p\">[</span><span class=\"n\">i2</span><span class=\"p\">]</span>\n            <span class=\"n\">i2</span> <span class=\"o\">=</span> <span class=\"n\">i2</span> <span class=\"o\">+</span> <span class=\"mi\">1</span>\n    <span class=\"k\">for</span> <span class=\"n\">i</span> <span class=\"ow\">in</span> <span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"n\">l</span><span class=\"p\">,</span> <span class=\"n\">r</span><span class=\"p\">):</span>\n        <span class=\"n\">data</span><span class=\"p\">[</span><span class=\"n\">i</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">work</span><span class=\"p\">[</span><span class=\"n\">i</span><span class=\"p\">]</span>\n    <span class=\"k\">return</span> <span class=\"n\">n1</span><span class=\"o\">+</span><span class=\"n\">n2</span><span class=\"o\">+</span><span class=\"n\">n</span>\n\n<span class=\"k\">def</span> <span class=\"nf\">merge_sort</span><span class=\"p\">(</span><span class=\"n\">data</span><span class=\"p\">):</span>\n    <span class=\"k\">return</span> <span class=\"n\">merge_sort_rec</span><span class=\"p\">(</span><span class=\"n\">data</span><span class=\"p\">,</span> <span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">data</span><span class=\"p\">),</span> <span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]</span><span class=\"o\">*</span><span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">data</span><span class=\"p\">))</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[10]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">x</span> <span class=\"o\">=</span> <span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">arange</span><span class=\"p\">(</span><span class=\"mi\">100</span><span class=\"p\">,</span> <span class=\"mi\">1100</span><span class=\"p\">,</span> <span class=\"mi\">100</span><span class=\"p\">)</span>\n<span class=\"n\">bdata</span> <span class=\"o\">=</span> <span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">array</span><span class=\"p\">([</span><span class=\"n\">bubble_sort</span><span class=\"p\">([</span><span class=\"n\">random</span><span class=\"o\">.</span><span class=\"n\">randint</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">,</span><span class=\"mi\">10000</span><span class=\"p\">)</span> <span class=\"k\">for</span> <span class=\"n\">i</span> <span class=\"ow\">in</span> <span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"n\">k</span><span class=\"p\">)])</span> <span class=\"k\">for</span> <span class=\"n\">k</span> <span class=\"ow\">in</span> <span class=\"n\">x</span><span class=\"p\">])</span>\n<span class=\"n\">mdata</span> <span class=\"o\">=</span> <span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">array</span><span class=\"p\">([</span><span class=\"n\">merge_sort</span><span class=\"p\">([</span><span class=\"n\">random</span><span class=\"o\">.</span><span class=\"n\">randint</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">,</span><span class=\"mi\">10000</span><span class=\"p\">)</span> <span class=\"k\">for</span> <span class=\"n\">i</span> <span class=\"ow\">in</span> <span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"n\">k</span><span class=\"p\">)])</span> <span class=\"k\">for</span> <span class=\"n\">k</span> <span class=\"ow\">in</span> <span class=\"n\">x</span><span class=\"p\">])</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[11]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">p</span> <span class=\"o\">=</span> <span class=\"n\">figure</span><span class=\"p\">(</span><span class=\"n\">title</span><span class=\"o\">=</span><span class=\"s1\">&#39;bubble sort vs. merge sort&#39;</span><span class=\"p\">,</span> <span class=\"n\">x_axis_label</span><span class=\"o\">=</span><span class=\"s1\">&#39;number of items&#39;</span><span class=\"p\">,</span> <span class=\"n\">y_axis_label</span><span class=\"o\">=</span><span class=\"s1\">&#39;number of comparisons&#39;</span><span class=\"p\">)</span>\n<span class=\"n\">p</span><span class=\"o\">.</span><span class=\"n\">line</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">,</span> <span class=\"n\">bdata</span><span class=\"p\">,</span> <span class=\"n\">line_color</span><span class=\"o\">=</span><span class=\"n\">c</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">])</span>\n<span class=\"n\">p</span><span class=\"o\">.</span><span class=\"n\">circle</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">,</span> <span class=\"n\">bdata</span><span class=\"p\">,</span> <span class=\"n\">color</span><span class=\"o\">=</span><span class=\"n\">c</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">],</span> <span class=\"n\">line_width</span><span class=\"o\">=</span><span class=\"mi\">5</span><span class=\"p\">)</span>\n<span class=\"n\">p</span><span class=\"o\">.</span><span class=\"n\">line</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">,</span> <span class=\"n\">mdata</span><span class=\"p\">,</span> <span class=\"n\">line_color</span><span class=\"o\">=</span><span class=\"n\">c</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">])</span>\n<span class=\"n\">p</span><span class=\"o\">.</span><span class=\"n\">circle</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">,</span> <span class=\"n\">mdata</span><span class=\"p\">,</span> <span class=\"n\">color</span><span class=\"o\">=</span><span class=\"n\">c</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">],</span> <span class=\"n\">line_width</span><span class=\"o\">=</span><span class=\"mi\">5</span><span class=\"p\">)</span>\n<span class=\"n\">show</span><span class=\"p\">(</span><span class=\"n\">p</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area rendered_html docutils container\">\n<div id=\"f08e799a-c282-4a41-8dd9-b7d70b8fbeca\" data-root-id=\"p1404\" style=\"display: contents;\"></div></div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"output_javascript\"></div>\n<script type=\"text/javascript\">\nvar element = document.currentScript.previousSibling.previousSibling;\n(function(root) {\n  function embed_document(root) {\n  const docs_json = {\"fc81f0a4-8341-482c-8782-03d6c05e0ba8\":{\"version\":\"3.5.1\",\"title\":\"Bokeh Application\",\"roots\":[{\"type\":\"object\",\"name\":\"Figure\",\"id\":\"p1404\",\"attributes\":{\"x_range\":{\"type\":\"object\",\"name\":\"DataRange1d\",\"id\":\"p1405\"},\"y_range\":{\"type\":\"object\",\"name\":\"DataRange1d\",\"id\":\"p1406\"},\"x_scale\":{\"type\":\"object\",\"name\":\"LinearScale\",\"id\":\"p1414\"},\"y_scale\":{\"type\":\"object\",\"name\":\"LinearScale\",\"id\":\"p1415\"},\"title\":{\"type\":\"object\",\"name\":\"Title\",\"id\":\"p1407\",\"attributes\":{\"text\":\"bubble sort vs. merge sort\"}},\"renderers\":[{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p1445\",\"attributes\":{\"data_source\":{\"type\":\"object\",\"name\":\"ColumnDataSource\",\"id\":\"p1439\",\"attributes\":{\"selected\":{\"type\":\"object\",\"name\":\"Selection\",\"id\":\"p1440\",\"attributes\":{\"indices\":[],\"line_indices\":[]}},\"selection_policy\":{\"type\":\"object\",\"name\":\"UnionRenderers\",\"id\":\"p1441\"},\"data\":{\"type\":\"map\",\"entries\":[[\"x\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"ZAAAAMgAAAAsAQAAkAEAAPQBAABYAgAAvAIAACADAACEAwAA6AMAAA==\"},\"shape\":[10],\"dtype\":\"int32\",\"order\":\"little\"}],[\"y\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"VhMAALxNAAAyrwAAuDcBAE7nAQD0vQIAqrsDAHDgBABGLAYALJ8HAA==\"},\"shape\":[10],\"dtype\":\"int32\",\"order\":\"little\"}]]}}},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p1446\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p1447\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1442\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":\"#1f77b4\"}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1443\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":\"#1f77b4\",\"line_alpha\":0.1}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1444\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":\"#1f77b4\",\"line_alpha\":0.2}}}},{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p1454\",\"attributes\":{\"data_source\":{\"type\":\"object\",\"name\":\"ColumnDataSource\",\"id\":\"p1448\",\"attributes\":{\"selected\":{\"type\":\"object\",\"name\":\"Selection\",\"id\":\"p1449\",\"attributes\":{\"indices\":[],\"line_indices\":[]}},\"selection_policy\":{\"type\":\"object\",\"name\":\"UnionRenderers\",\"id\":\"p1450\"},\"data\":{\"type\":\"map\",\"entries\":[[\"x\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"ZAAAAMgAAAAsAQAAkAEAAPQBAABYAgAAvAIAACADAACEAwAA6AMAAA==\"},\"shape\":[10],\"dtype\":\"int32\",\"order\":\"little\"}],[\"y\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"VhMAALxNAAAyrwAAuDcBAE7nAQD0vQIAqrsDAHDgBABGLAYALJ8HAA==\"},\"shape\":[10],\"dtype\":\"int32\",\"order\":\"little\"}]]}}},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p1455\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p1456\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"Circle\",\"id\":\"p1451\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":{\"type\":\"value\",\"value\":\"#1f77b4\"},\"line_width\":{\"type\":\"value\",\"value\":5},\"fill_color\":{\"type\":\"value\",\"value\":\"#1f77b4\"},\"hatch_color\":{\"type\":\"value\",\"value\":\"#1f77b4\"}}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"Circle\",\"id\":\"p1452\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":{\"type\":\"value\",\"value\":\"#1f77b4\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.1},\"line_width\":{\"type\":\"value\",\"value\":5},\"fill_color\":{\"type\":\"value\",\"value\":\"#1f77b4\"},\"fill_alpha\":{\"type\":\"value\",\"value\":0.1},\"hatch_color\":{\"type\":\"value\",\"value\":\"#1f77b4\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.1}}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"Circle\",\"id\":\"p1453\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":{\"type\":\"value\",\"value\":\"#1f77b4\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.2},\"line_width\":{\"type\":\"value\",\"value\":5},\"fill_color\":{\"type\":\"value\",\"value\":\"#1f77b4\"},\"fill_alpha\":{\"type\":\"value\",\"value\":0.2},\"hatch_color\":{\"type\":\"value\",\"value\":\"#1f77b4\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.2}}}}},{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p1463\",\"attributes\":{\"data_source\":{\"type\":\"object\",\"name\":\"ColumnDataSource\",\"id\":\"p1457\",\"attributes\":{\"selected\":{\"type\":\"object\",\"name\":\"Selection\",\"id\":\"p1458\",\"attributes\":{\"indices\":[],\"line_indices\":[]}},\"selection_policy\":{\"type\":\"object\",\"name\":\"UnionRenderers\",\"id\":\"p1459\"},\"data\":{\"type\":\"map\",\"entries\":[[\"x\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"ZAAAAMgAAAAsAQAAkAEAAPQBAABYAgAAvAIAACADAACEAwAA6AMAAA==\"},\"shape\":[10],\"dtype\":\"int32\",\"order\":\"little\"}],[\"y\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"IAIAABUFAAAtCAAAqAsAAP8OAADNEgAAghYAAD4aAAAcHgAA7yEAAA==\"},\"shape\":[10],\"dtype\":\"int32\",\"order\":\"little\"}]]}}},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p1464\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p1465\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1460\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":\"#ff7f0e\"}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1461\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":\"#ff7f0e\",\"line_alpha\":0.1}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1462\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":\"#ff7f0e\",\"line_alpha\":0.2}}}},{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p1472\",\"attributes\":{\"data_source\":{\"type\":\"object\",\"name\":\"ColumnDataSource\",\"id\":\"p1466\",\"attributes\":{\"selected\":{\"type\":\"object\",\"name\":\"Selection\",\"id\":\"p1467\",\"attributes\":{\"indices\":[],\"line_indices\":[]}},\"selection_policy\":{\"type\":\"object\",\"name\":\"UnionRenderers\",\"id\":\"p1468\"},\"data\":{\"type\":\"map\",\"entries\":[[\"x\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"ZAAAAMgAAAAsAQAAkAEAAPQBAABYAgAAvAIAACADAACEAwAA6AMAAA==\"},\"shape\":[10],\"dtype\":\"int32\",\"order\":\"little\"}],[\"y\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"IAIAABUFAAAtCAAAqAsAAP8OAADNEgAAghYAAD4aAAAcHgAA7yEAAA==\"},\"shape\":[10],\"dtype\":\"int32\",\"order\":\"little\"}]]}}},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p1473\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p1474\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"Circle\",\"id\":\"p1469\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":{\"type\":\"value\",\"value\":\"#ff7f0e\"},\"line_width\":{\"type\":\"value\",\"value\":5},\"fill_color\":{\"type\":\"value\",\"value\":\"#ff7f0e\"},\"hatch_color\":{\"type\":\"value\",\"value\":\"#ff7f0e\"}}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"Circle\",\"id\":\"p1470\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":{\"type\":\"value\",\"value\":\"#ff7f0e\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.1},\"line_width\":{\"type\":\"value\",\"value\":5},\"fill_color\":{\"type\":\"value\",\"value\":\"#ff7f0e\"},\"fill_alpha\":{\"type\":\"value\",\"value\":0.1},\"hatch_color\":{\"type\":\"value\",\"value\":\"#ff7f0e\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.1}}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"Circle\",\"id\":\"p1471\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":{\"type\":\"value\",\"value\":\"#ff7f0e\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.2},\"line_width\":{\"type\":\"value\",\"value\":5},\"fill_color\":{\"type\":\"value\",\"value\":\"#ff7f0e\"},\"fill_alpha\":{\"type\":\"value\",\"value\":0.2},\"hatch_color\":{\"type\":\"value\",\"value\":\"#ff7f0e\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.2}}}}}],\"toolbar\":{\"type\":\"object\",\"name\":\"Toolbar\",\"id\":\"p1413\",\"attributes\":{\"tools\":[{\"type\":\"object\",\"name\":\"PanTool\",\"id\":\"p1426\"},{\"type\":\"object\",\"name\":\"WheelZoomTool\",\"id\":\"p1427\",\"attributes\":{\"renderers\":\"auto\"}},{\"type\":\"object\",\"name\":\"BoxZoomTool\",\"id\":\"p1428\",\"attributes\":{\"overlay\":{\"type\":\"object\",\"name\":\"BoxAnnotation\",\"id\":\"p1429\",\"attributes\":{\"syncable\":false,\"line_color\":\"black\",\"line_alpha\":1.0,\"line_width\":2,\"line_dash\":[4,4],\"fill_color\":\"lightgrey\",\"fill_alpha\":0.5,\"level\":\"overlay\",\"visible\":false,\"left\":{\"type\":\"number\",\"value\":\"nan\"},\"right\":{\"type\":\"number\",\"value\":\"nan\"},\"top\":{\"type\":\"number\",\"value\":\"nan\"},\"bottom\":{\"type\":\"number\",\"value\":\"nan\"},\"left_units\":\"canvas\",\"right_units\":\"canvas\",\"top_units\":\"canvas\",\"bottom_units\":\"canvas\",\"handles\":{\"type\":\"object\",\"name\":\"BoxInteractionHandles\",\"id\":\"p1435\",\"attributes\":{\"all\":{\"type\":\"object\",\"name\":\"AreaVisuals\",\"id\":\"p1434\",\"attributes\":{\"fill_color\":\"white\",\"hover_fill_color\":\"lightgray\"}}}}}}}},{\"type\":\"object\",\"name\":\"SaveTool\",\"id\":\"p1436\"},{\"type\":\"object\",\"name\":\"ResetTool\",\"id\":\"p1437\"},{\"type\":\"object\",\"name\":\"HelpTool\",\"id\":\"p1438\"}]}},\"left\":[{\"type\":\"object\",\"name\":\"LinearAxis\",\"id\":\"p1421\",\"attributes\":{\"ticker\":{\"type\":\"object\",\"name\":\"BasicTicker\",\"id\":\"p1422\",\"attributes\":{\"mantissas\":[1,2,5]}},\"formatter\":{\"type\":\"object\",\"name\":\"BasicTickFormatter\",\"id\":\"p1423\"},\"axis_label\":\"number of comparisons\",\"major_label_policy\":{\"type\":\"object\",\"name\":\"AllLabels\",\"id\":\"p1424\"}}}],\"below\":[{\"type\":\"object\",\"name\":\"LinearAxis\",\"id\":\"p1416\",\"attributes\":{\"ticker\":{\"type\":\"object\",\"name\":\"BasicTicker\",\"id\":\"p1417\",\"attributes\":{\"mantissas\":[1,2,5]}},\"formatter\":{\"type\":\"object\",\"name\":\"BasicTickFormatter\",\"id\":\"p1418\"},\"axis_label\":\"number of items\",\"major_label_policy\":{\"type\":\"object\",\"name\":\"AllLabels\",\"id\":\"p1419\"}}}],\"center\":[{\"type\":\"object\",\"name\":\"Grid\",\"id\":\"p1420\",\"attributes\":{\"axis\":{\"id\":\"p1416\"}}},{\"type\":\"object\",\"name\":\"Grid\",\"id\":\"p1425\",\"attributes\":{\"dimension\":1,\"axis\":{\"id\":\"p1421\"}}}]}}]}};\n  const render_items = [{\"docid\":\"fc81f0a4-8341-482c-8782-03d6c05e0ba8\",\"roots\":{\"p1404\":\"f08e799a-c282-4a41-8dd9-b7d70b8fbeca\"},\"root_ids\":[\"p1404\"]}];\n  void root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n  }\n  if (root.Bokeh !== undefined) {\n    embed_document(root);\n  } else {\n    let attempts = 0;\n    const timer = setInterval(function(root) {\n      if (root.Bokeh !== undefined) {\n        clearInterval(timer);\n        embed_document(root);\n      } else {\n        attempts++;\n        if (attempts > 100) {\n          clearInterval(timer);\n          console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\");\n        }\n      }\n    }, 10, root)\n  }\n})(window);\n</script></div>\n</div>\n</section>\n</section>\n<section id=\"散布図\">\n<h2>散布図<a class=\"headerlink\" href=\"#散布図\" title=\"Link to this heading\">¶</a></h2>\n<p>散布図の描画には、点のプロットを <code class=\"docutils literal notranslate\"><span class=\"pre\">marker</span></code> 引数で指定できる <code class=\"docutils literal notranslate\"><span class=\"pre\">scatter()</span></code> メソッドが便利です。 以下では、ランダムに生成した20個の要素からなる配列 <code class=\"docutils literal notranslate\"><span class=\"pre\">x</span></code>、<code class=\"docutils literal notranslate\"><span class=\"pre\">y</span></code> の各要素の値の組みを点としてプロットした散布図を表示します。 プロットする点のマーカは円とし、<code class=\"docutils literal notranslate\"><span class=\"pre\">size</span></code> 引数で大きさを、<code class=\"docutils literal notranslate\"><span class=\"pre\">alpha</span></code> 引数で透明度を設定しています。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[12]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"c1\">#　グラフのx軸の値となる配列</span>\n<span class=\"n\">x</span> <span class=\"o\">=</span> <span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">random</span><span class=\"o\">.</span><span class=\"n\">rand</span><span class=\"p\">(</span><span class=\"mi\">20</span><span class=\"p\">)</span>\n<span class=\"c1\">#　グラフのy軸の値となる配列</span>\n<span class=\"n\">y</span> <span class=\"o\">=</span> <span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">random</span><span class=\"o\">.</span><span class=\"n\">rand</span><span class=\"p\">(</span><span class=\"mi\">20</span><span class=\"p\">)</span>\n\n<span class=\"n\">p</span> <span class=\"o\">=</span> <span class=\"n\">figure</span><span class=\"p\">()</span>\n<span class=\"n\">p</span><span class=\"o\">.</span><span class=\"n\">scatter</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">,</span> <span class=\"n\">y</span><span class=\"p\">,</span> <span class=\"n\">marker</span><span class=\"o\">=</span><span class=\"s1\">&#39;circle&#39;</span><span class=\"p\">,</span> <span class=\"n\">size</span><span class=\"o\">=</span><span class=\"mi\">16</span><span class=\"p\">,</span> <span class=\"n\">alpha</span><span class=\"o\">=</span><span class=\"mf\">0.5</span><span class=\"p\">)</span>\n<span class=\"n\">show</span><span class=\"p\">(</span><span class=\"n\">p</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area rendered_html docutils container\">\n<div id=\"d14459ab-038f-4105-8bf7-73fe9dab340b\" data-root-id=\"p1483\" style=\"display: contents;\"></div></div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"output_javascript\"></div>\n<script type=\"text/javascript\">\nvar element = document.currentScript.previousSibling.previousSibling;\n(function(root) {\n  function embed_document(root) {\n  const docs_json = {\"082d8995-457f-4e05-8799-357836bd0adb\":{\"version\":\"3.5.1\",\"title\":\"Bokeh Application\",\"roots\":[{\"type\":\"object\",\"name\":\"Figure\",\"id\":\"p1483\",\"attributes\":{\"x_range\":{\"type\":\"object\",\"name\":\"DataRange1d\",\"id\":\"p1484\"},\"y_range\":{\"type\":\"object\",\"name\":\"DataRange1d\",\"id\":\"p1485\"},\"x_scale\":{\"type\":\"object\",\"name\":\"LinearScale\",\"id\":\"p1492\"},\"y_scale\":{\"type\":\"object\",\"name\":\"LinearScale\",\"id\":\"p1493\"},\"title\":{\"type\":\"object\",\"name\":\"Title\",\"id\":\"p1490\"},\"renderers\":[{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p1523\",\"attributes\":{\"data_source\":{\"type\":\"object\",\"name\":\"ColumnDataSource\",\"id\":\"p1517\",\"attributes\":{\"selected\":{\"type\":\"object\",\"name\":\"Selection\",\"id\":\"p1518\",\"attributes\":{\"indices\":[],\"line_indices\":[]}},\"selection_policy\":{\"type\":\"object\",\"name\":\"UnionRenderers\",\"id\":\"p1519\"},\"data\":{\"type\":\"map\",\"entries\":[[\"x\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"EIlViKZ/4z9AoSWmRKaXP3u4MPhg8+g/DdeL2DMA6T/8+9cFrqHTP1Bnbnfm8O8/npXQE4057D/y5dI5sWPtP7345ldfj+E/Gp1h3Wvn4z8j+Xhsab3sP0OOaSMzc+Y/ZB09GX92xz9c9BCLW/PBP2XzH5qPQeQ/KBfSnoaGxT/YNwckhFjDP/BlBfcybrE/q6MKNqYN7D8w6coOkurWPw==\"},\"shape\":[20],\"dtype\":\"float64\",\"order\":\"little\"}],[\"y\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"OsUVIXs37z84slOqkb61P8jlQhMa1MY/UZiO8HaS5T+QfW+FR7CwP1aikC6dke0/uvs38tCq0T+g/WzMkKTkPxlEhFJs1+0/iYU9jRk57z+L+Uhl9X7sP0yzQOEpp8o/Mzpc8EnI7j9wf3SiTqTHPzJAEppuXuw/1lODQYrd4z9QfI/qWdywPyyS4vC6hMs/oDlqra8ppT/uIlB/js3QPw==\"},\"shape\":[20],\"dtype\":\"float64\",\"order\":\"little\"}]]}}},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p1524\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p1525\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"Scatter\",\"id\":\"p1520\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"size\":{\"type\":\"value\",\"value\":16},\"line_color\":{\"type\":\"value\",\"value\":\"#1f77b4\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.5},\"fill_color\":{\"type\":\"value\",\"value\":\"#1f77b4\"},\"fill_alpha\":{\"type\":\"value\",\"value\":0.5},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.5}}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"Scatter\",\"id\":\"p1521\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"size\":{\"type\":\"value\",\"value\":16},\"line_color\":{\"type\":\"value\",\"value\":\"#1f77b4\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.1},\"fill_color\":{\"type\":\"value\",\"value\":\"#1f77b4\"},\"fill_alpha\":{\"type\":\"value\",\"value\":0.1},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.1}}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"Scatter\",\"id\":\"p1522\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"size\":{\"type\":\"value\",\"value\":16},\"line_color\":{\"type\":\"value\",\"value\":\"#1f77b4\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.2},\"fill_color\":{\"type\":\"value\",\"value\":\"#1f77b4\"},\"fill_alpha\":{\"type\":\"value\",\"value\":0.2},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.2}}}}}],\"toolbar\":{\"type\":\"object\",\"name\":\"Toolbar\",\"id\":\"p1491\",\"attributes\":{\"tools\":[{\"type\":\"object\",\"name\":\"PanTool\",\"id\":\"p1504\"},{\"type\":\"object\",\"name\":\"WheelZoomTool\",\"id\":\"p1505\",\"attributes\":{\"renderers\":\"auto\"}},{\"type\":\"object\",\"name\":\"BoxZoomTool\",\"id\":\"p1506\",\"attributes\":{\"overlay\":{\"type\":\"object\",\"name\":\"BoxAnnotation\",\"id\":\"p1507\",\"attributes\":{\"syncable\":false,\"line_color\":\"black\",\"line_alpha\":1.0,\"line_width\":2,\"line_dash\":[4,4],\"fill_color\":\"lightgrey\",\"fill_alpha\":0.5,\"level\":\"overlay\",\"visible\":false,\"left\":{\"type\":\"number\",\"value\":\"nan\"},\"right\":{\"type\":\"number\",\"value\":\"nan\"},\"top\":{\"type\":\"number\",\"value\":\"nan\"},\"bottom\":{\"type\":\"number\",\"value\":\"nan\"},\"left_units\":\"canvas\",\"right_units\":\"canvas\",\"top_units\":\"canvas\",\"bottom_units\":\"canvas\",\"handles\":{\"type\":\"object\",\"name\":\"BoxInteractionHandles\",\"id\":\"p1513\",\"attributes\":{\"all\":{\"type\":\"object\",\"name\":\"AreaVisuals\",\"id\":\"p1512\",\"attributes\":{\"fill_color\":\"white\",\"hover_fill_color\":\"lightgray\"}}}}}}}},{\"type\":\"object\",\"name\":\"SaveTool\",\"id\":\"p1514\"},{\"type\":\"object\",\"name\":\"ResetTool\",\"id\":\"p1515\"},{\"type\":\"object\",\"name\":\"HelpTool\",\"id\":\"p1516\"}]}},\"left\":[{\"type\":\"object\",\"name\":\"LinearAxis\",\"id\":\"p1499\",\"attributes\":{\"ticker\":{\"type\":\"object\",\"name\":\"BasicTicker\",\"id\":\"p1500\",\"attributes\":{\"mantissas\":[1,2,5]}},\"formatter\":{\"type\":\"object\",\"name\":\"BasicTickFormatter\",\"id\":\"p1501\"},\"major_label_policy\":{\"type\":\"object\",\"name\":\"AllLabels\",\"id\":\"p1502\"}}}],\"below\":[{\"type\":\"object\",\"name\":\"LinearAxis\",\"id\":\"p1494\",\"attributes\":{\"ticker\":{\"type\":\"object\",\"name\":\"BasicTicker\",\"id\":\"p1495\",\"attributes\":{\"mantissas\":[1,2,5]}},\"formatter\":{\"type\":\"object\",\"name\":\"BasicTickFormatter\",\"id\":\"p1496\"},\"major_label_policy\":{\"type\":\"object\",\"name\":\"AllLabels\",\"id\":\"p1497\"}}}],\"center\":[{\"type\":\"object\",\"name\":\"Grid\",\"id\":\"p1498\",\"attributes\":{\"axis\":{\"id\":\"p1494\"}}},{\"type\":\"object\",\"name\":\"Grid\",\"id\":\"p1503\",\"attributes\":{\"dimension\":1,\"axis\":{\"id\":\"p1499\"}}}]}}]}};\n  const render_items = [{\"docid\":\"082d8995-457f-4e05-8799-357836bd0adb\",\"roots\":{\"p1483\":\"d14459ab-038f-4105-8bf7-73fe9dab340b\"},\"root_ids\":[\"p1483\"]}];\n  void root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n  }\n  if (root.Bokeh !== undefined) {\n    embed_document(root);\n  } else {\n    let attempts = 0;\n    const timer = setInterval(function(root) {\n      if (root.Bokeh !== undefined) {\n        clearInterval(timer);\n        embed_document(root);\n      } else {\n        attempts++;\n        if (attempts > 100) {\n          clearInterval(timer);\n          console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\");\n        }\n      }\n    }, 10, root)\n  }\n})(window);\n</script></div>\n</div>\n<p>これと同じグラフは、単に <code class=\"docutils literal notranslate\"><span class=\"pre\">circle()</span></code> メソッドでプロットをすることでも描画できます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[13]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">p</span> <span class=\"o\">=</span> <span class=\"n\">figure</span><span class=\"p\">()</span>\n<span class=\"n\">p</span><span class=\"o\">.</span><span class=\"n\">circle</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">,</span> <span class=\"n\">y</span><span class=\"p\">,</span> <span class=\"n\">size</span><span class=\"o\">=</span><span class=\"mi\">16</span><span class=\"p\">,</span> <span class=\"n\">alpha</span><span class=\"o\">=</span><span class=\"mf\">0.5</span><span class=\"p\">)</span>\n<span class=\"n\">show</span><span class=\"p\">(</span><span class=\"n\">p</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area stderr docutils container\">\n<div class=\"highlight\"><pre>\nBokehDeprecationWarning: &#39;circle() method with size value&#39; was deprecated in Bokeh 3.4.0 and will be removed, use &#39;scatter(size=...) instead&#39; instead.\n</pre></div></div>\n</div>\n<div class=\"nboutput docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area rendered_html docutils container\">\n<div id=\"b1609599-a132-4c8c-8a9a-da061d3ff6ca\" data-root-id=\"p1528\" style=\"display: contents;\"></div></div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"output_javascript\"></div>\n<script type=\"text/javascript\">\nvar element = document.currentScript.previousSibling.previousSibling;\n(function(root) {\n  function embed_document(root) {\n  const docs_json = {\"57362809-1b4c-43d3-9252-920684cc5cf8\":{\"version\":\"3.5.1\",\"title\":\"Bokeh Application\",\"roots\":[{\"type\":\"object\",\"name\":\"Figure\",\"id\":\"p1528\",\"attributes\":{\"x_range\":{\"type\":\"object\",\"name\":\"DataRange1d\",\"id\":\"p1529\"},\"y_range\":{\"type\":\"object\",\"name\":\"DataRange1d\",\"id\":\"p1530\"},\"x_scale\":{\"type\":\"object\",\"name\":\"LinearScale\",\"id\":\"p1537\"},\"y_scale\":{\"type\":\"object\",\"name\":\"LinearScale\",\"id\":\"p1538\"},\"title\":{\"type\":\"object\",\"name\":\"Title\",\"id\":\"p1535\"},\"renderers\":[{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p1568\",\"attributes\":{\"data_source\":{\"type\":\"object\",\"name\":\"ColumnDataSource\",\"id\":\"p1562\",\"attributes\":{\"selected\":{\"type\":\"object\",\"name\":\"Selection\",\"id\":\"p1563\",\"attributes\":{\"indices\":[],\"line_indices\":[]}},\"selection_policy\":{\"type\":\"object\",\"name\":\"UnionRenderers\",\"id\":\"p1564\"},\"data\":{\"type\":\"map\",\"entries\":[[\"x\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"EIlViKZ/4z9AoSWmRKaXP3u4MPhg8+g/DdeL2DMA6T/8+9cFrqHTP1Bnbnfm8O8/npXQE4057D/y5dI5sWPtP7345ldfj+E/Gp1h3Wvn4z8j+Xhsab3sP0OOaSMzc+Y/ZB09GX92xz9c9BCLW/PBP2XzH5qPQeQ/KBfSnoaGxT/YNwckhFjDP/BlBfcybrE/q6MKNqYN7D8w6coOkurWPw==\"},\"shape\":[20],\"dtype\":\"float64\",\"order\":\"little\"}],[\"y\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"OsUVIXs37z84slOqkb61P8jlQhMa1MY/UZiO8HaS5T+QfW+FR7CwP1aikC6dke0/uvs38tCq0T+g/WzMkKTkPxlEhFJs1+0/iYU9jRk57z+L+Uhl9X7sP0yzQOEpp8o/Mzpc8EnI7j9wf3SiTqTHPzJAEppuXuw/1lODQYrd4z9QfI/qWdywPyyS4vC6hMs/oDlqra8ppT/uIlB/js3QPw==\"},\"shape\":[20],\"dtype\":\"float64\",\"order\":\"little\"}]]}}},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p1569\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p1570\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"Scatter\",\"id\":\"p1565\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"size\":{\"type\":\"value\",\"value\":16},\"line_color\":{\"type\":\"value\",\"value\":\"#1f77b4\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.5},\"fill_color\":{\"type\":\"value\",\"value\":\"#1f77b4\"},\"fill_alpha\":{\"type\":\"value\",\"value\":0.5},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.5}}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"Scatter\",\"id\":\"p1566\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"size\":{\"type\":\"value\",\"value\":16},\"line_color\":{\"type\":\"value\",\"value\":\"#1f77b4\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.1},\"fill_color\":{\"type\":\"value\",\"value\":\"#1f77b4\"},\"fill_alpha\":{\"type\":\"value\",\"value\":0.1},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.1}}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"Scatter\",\"id\":\"p1567\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"size\":{\"type\":\"value\",\"value\":16},\"line_color\":{\"type\":\"value\",\"value\":\"#1f77b4\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.2},\"fill_color\":{\"type\":\"value\",\"value\":\"#1f77b4\"},\"fill_alpha\":{\"type\":\"value\",\"value\":0.2},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.2}}}}}],\"toolbar\":{\"type\":\"object\",\"name\":\"Toolbar\",\"id\":\"p1536\",\"attributes\":{\"tools\":[{\"type\":\"object\",\"name\":\"PanTool\",\"id\":\"p1549\"},{\"type\":\"object\",\"name\":\"WheelZoomTool\",\"id\":\"p1550\",\"attributes\":{\"renderers\":\"auto\"}},{\"type\":\"object\",\"name\":\"BoxZoomTool\",\"id\":\"p1551\",\"attributes\":{\"overlay\":{\"type\":\"object\",\"name\":\"BoxAnnotation\",\"id\":\"p1552\",\"attributes\":{\"syncable\":false,\"line_color\":\"black\",\"line_alpha\":1.0,\"line_width\":2,\"line_dash\":[4,4],\"fill_color\":\"lightgrey\",\"fill_alpha\":0.5,\"level\":\"overlay\",\"visible\":false,\"left\":{\"type\":\"number\",\"value\":\"nan\"},\"right\":{\"type\":\"number\",\"value\":\"nan\"},\"top\":{\"type\":\"number\",\"value\":\"nan\"},\"bottom\":{\"type\":\"number\",\"value\":\"nan\"},\"left_units\":\"canvas\",\"right_units\":\"canvas\",\"top_units\":\"canvas\",\"bottom_units\":\"canvas\",\"handles\":{\"type\":\"object\",\"name\":\"BoxInteractionHandles\",\"id\":\"p1558\",\"attributes\":{\"all\":{\"type\":\"object\",\"name\":\"AreaVisuals\",\"id\":\"p1557\",\"attributes\":{\"fill_color\":\"white\",\"hover_fill_color\":\"lightgray\"}}}}}}}},{\"type\":\"object\",\"name\":\"SaveTool\",\"id\":\"p1559\"},{\"type\":\"object\",\"name\":\"ResetTool\",\"id\":\"p1560\"},{\"type\":\"object\",\"name\":\"HelpTool\",\"id\":\"p1561\"}]}},\"left\":[{\"type\":\"object\",\"name\":\"LinearAxis\",\"id\":\"p1544\",\"attributes\":{\"ticker\":{\"type\":\"object\",\"name\":\"BasicTicker\",\"id\":\"p1545\",\"attributes\":{\"mantissas\":[1,2,5]}},\"formatter\":{\"type\":\"object\",\"name\":\"BasicTickFormatter\",\"id\":\"p1546\"},\"major_label_policy\":{\"type\":\"object\",\"name\":\"AllLabels\",\"id\":\"p1547\"}}}],\"below\":[{\"type\":\"object\",\"name\":\"LinearAxis\",\"id\":\"p1539\",\"attributes\":{\"ticker\":{\"type\":\"object\",\"name\":\"BasicTicker\",\"id\":\"p1540\",\"attributes\":{\"mantissas\":[1,2,5]}},\"formatter\":{\"type\":\"object\",\"name\":\"BasicTickFormatter\",\"id\":\"p1541\"},\"major_label_policy\":{\"type\":\"object\",\"name\":\"AllLabels\",\"id\":\"p1542\"}}}],\"center\":[{\"type\":\"object\",\"name\":\"Grid\",\"id\":\"p1543\",\"attributes\":{\"axis\":{\"id\":\"p1539\"}}},{\"type\":\"object\",\"name\":\"Grid\",\"id\":\"p1548\",\"attributes\":{\"dimension\":1,\"axis\":{\"id\":\"p1544\"}}}]}}]}};\n  const render_items = [{\"docid\":\"57362809-1b4c-43d3-9252-920684cc5cf8\",\"roots\":{\"p1528\":\"b1609599-a132-4c8c-8a9a-da061d3ff6ca\"},\"root_ids\":[\"p1528\"]}];\n  void root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n  }\n  if (root.Bokeh !== undefined) {\n    embed_document(root);\n  } else {\n    let attempts = 0;\n    const timer = setInterval(function(root) {\n      if (root.Bokeh !== undefined) {\n        clearInterval(timer);\n        embed_document(root);\n      } else {\n        attempts++;\n        if (attempts > 100) {\n          clearInterval(timer);\n          console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\");\n        }\n      }\n    }, 10, root)\n  }\n})(window);\n</script></div>\n</div>\n</section>\n<section id=\"棒グラフ\">\n<h2>棒グラフ<a class=\"headerlink\" href=\"#棒グラフ\" title=\"Link to this heading\">¶</a></h2>\n<p>棒グラフは、<code class=\"docutils literal notranslate\"><span class=\"pre\">vbar()</span></code> メソッドを用いて描画できます。 次の例では、ランダムに生成した10個の要素からなる配列 <code class=\"docutils literal notranslate\"><span class=\"pre\">y</span></code> の各要素の値を縦の棒グラフで表示しています。 <code class=\"docutils literal notranslate\"><span class=\"pre\">x</span></code> は、x軸上で棒グラフのバーの並ぶ位置を示しています。 ここでは、<code class=\"docutils literal notranslate\"><span class=\"pre\">numpy</span></code> モジュールの <code class=\"docutils literal notranslate\"><span class=\"pre\">arange()</span></code> 関数を用いて、<code class=\"docutils literal notranslate\"><span class=\"pre\">1</span></code> から <code class=\"docutils literal notranslate\"><span class=\"pre\">10</span></code> の範囲を <code class=\"docutils literal notranslate\"><span class=\"pre\">1</span></code> 刻みでx軸上のバーの並ぶ位置として配列を準備しています。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[14]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"c1\"># x軸上で棒の並ぶ位置となる配列</span>\n<span class=\"n\">x</span> <span class=\"o\">=</span> <span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">arange</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">11</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">)</span>\n<span class=\"c1\">#　グラフのy軸の値となる配列</span>\n<span class=\"n\">y</span> <span class=\"o\">=</span> <span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">random</span><span class=\"o\">.</span><span class=\"n\">rand</span><span class=\"p\">(</span><span class=\"mi\">10</span><span class=\"p\">)</span>\n\n<span class=\"n\">p</span> <span class=\"o\">=</span> <span class=\"n\">figure</span><span class=\"p\">()</span>\n<span class=\"n\">p</span><span class=\"o\">.</span><span class=\"n\">vbar</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">,</span> <span class=\"mf\">0.5</span><span class=\"p\">,</span> <span class=\"n\">y</span><span class=\"p\">)</span> <span class=\"c1\"># 第2引数は幅</span>\n<span class=\"n\">show</span><span class=\"p\">(</span><span class=\"n\">p</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area rendered_html docutils container\">\n<div id=\"f1627f9b-d80b-441b-86f7-a99329f44ca7\" data-root-id=\"p1573\" style=\"display: contents;\"></div></div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"output_javascript\"></div>\n<script type=\"text/javascript\">\nvar element = document.currentScript.previousSibling.previousSibling;\n(function(root) {\n  function embed_document(root) {\n  const docs_json = {\"750f1822-2600-4c05-99ce-48d9cb02cb3c\":{\"version\":\"3.5.1\",\"title\":\"Bokeh Application\",\"roots\":[{\"type\":\"object\",\"name\":\"Figure\",\"id\":\"p1573\",\"attributes\":{\"x_range\":{\"type\":\"object\",\"name\":\"DataRange1d\",\"id\":\"p1574\"},\"y_range\":{\"type\":\"object\",\"name\":\"DataRange1d\",\"id\":\"p1575\"},\"x_scale\":{\"type\":\"object\",\"name\":\"LinearScale\",\"id\":\"p1582\"},\"y_scale\":{\"type\":\"object\",\"name\":\"LinearScale\",\"id\":\"p1583\"},\"title\":{\"type\":\"object\",\"name\":\"Title\",\"id\":\"p1580\"},\"renderers\":[{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p1613\",\"attributes\":{\"data_source\":{\"type\":\"object\",\"name\":\"ColumnDataSource\",\"id\":\"p1607\",\"attributes\":{\"selected\":{\"type\":\"object\",\"name\":\"Selection\",\"id\":\"p1608\",\"attributes\":{\"indices\":[],\"line_indices\":[]}},\"selection_policy\":{\"type\":\"object\",\"name\":\"UnionRenderers\",\"id\":\"p1609\"},\"data\":{\"type\":\"map\",\"entries\":[[\"x\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"AQAAAAIAAAADAAAABAAAAAUAAAAGAAAABwAAAAgAAAAJAAAACgAAAA==\"},\"shape\":[10],\"dtype\":\"int32\",\"order\":\"little\"}],[\"top\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"zN0cUNju5z+8EXnEA+HmP6YajWtf7uY/7JkigxQBxT+UVGqK8CfUPwC+xsrcouc/fCZz8Q2q0j+6JU4In2TfP+WKtUxh2ec/X9l6/kiS4T8=\"},\"shape\":[10],\"dtype\":\"float64\",\"order\":\"little\"}]]}}},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p1614\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p1615\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"VBar\",\"id\":\"p1610\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"width\":{\"type\":\"value\",\"value\":0.5},\"top\":{\"type\":\"field\",\"field\":\"top\"},\"line_color\":{\"type\":\"value\",\"value\":\"#1f77b4\"},\"fill_color\":{\"type\":\"value\",\"value\":\"#1f77b4\"}}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"VBar\",\"id\":\"p1611\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"width\":{\"type\":\"value\",\"value\":0.5},\"top\":{\"type\":\"field\",\"field\":\"top\"},\"line_color\":{\"type\":\"value\",\"value\":\"#1f77b4\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.1},\"fill_color\":{\"type\":\"value\",\"value\":\"#1f77b4\"},\"fill_alpha\":{\"type\":\"value\",\"value\":0.1},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.1}}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"VBar\",\"id\":\"p1612\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"width\":{\"type\":\"value\",\"value\":0.5},\"top\":{\"type\":\"field\",\"field\":\"top\"},\"line_color\":{\"type\":\"value\",\"value\":\"#1f77b4\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.2},\"fill_color\":{\"type\":\"value\",\"value\":\"#1f77b4\"},\"fill_alpha\":{\"type\":\"value\",\"value\":0.2},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.2}}}}}],\"toolbar\":{\"type\":\"object\",\"name\":\"Toolbar\",\"id\":\"p1581\",\"attributes\":{\"tools\":[{\"type\":\"object\",\"name\":\"PanTool\",\"id\":\"p1594\"},{\"type\":\"object\",\"name\":\"WheelZoomTool\",\"id\":\"p1595\",\"attributes\":{\"renderers\":\"auto\"}},{\"type\":\"object\",\"name\":\"BoxZoomTool\",\"id\":\"p1596\",\"attributes\":{\"overlay\":{\"type\":\"object\",\"name\":\"BoxAnnotation\",\"id\":\"p1597\",\"attributes\":{\"syncable\":false,\"line_color\":\"black\",\"line_alpha\":1.0,\"line_width\":2,\"line_dash\":[4,4],\"fill_color\":\"lightgrey\",\"fill_alpha\":0.5,\"level\":\"overlay\",\"visible\":false,\"left\":{\"type\":\"number\",\"value\":\"nan\"},\"right\":{\"type\":\"number\",\"value\":\"nan\"},\"top\":{\"type\":\"number\",\"value\":\"nan\"},\"bottom\":{\"type\":\"number\",\"value\":\"nan\"},\"left_units\":\"canvas\",\"right_units\":\"canvas\",\"top_units\":\"canvas\",\"bottom_units\":\"canvas\",\"handles\":{\"type\":\"object\",\"name\":\"BoxInteractionHandles\",\"id\":\"p1603\",\"attributes\":{\"all\":{\"type\":\"object\",\"name\":\"AreaVisuals\",\"id\":\"p1602\",\"attributes\":{\"fill_color\":\"white\",\"hover_fill_color\":\"lightgray\"}}}}}}}},{\"type\":\"object\",\"name\":\"SaveTool\",\"id\":\"p1604\"},{\"type\":\"object\",\"name\":\"ResetTool\",\"id\":\"p1605\"},{\"type\":\"object\",\"name\":\"HelpTool\",\"id\":\"p1606\"}]}},\"left\":[{\"type\":\"object\",\"name\":\"LinearAxis\",\"id\":\"p1589\",\"attributes\":{\"ticker\":{\"type\":\"object\",\"name\":\"BasicTicker\",\"id\":\"p1590\",\"attributes\":{\"mantissas\":[1,2,5]}},\"formatter\":{\"type\":\"object\",\"name\":\"BasicTickFormatter\",\"id\":\"p1591\"},\"major_label_policy\":{\"type\":\"object\",\"name\":\"AllLabels\",\"id\":\"p1592\"}}}],\"below\":[{\"type\":\"object\",\"name\":\"LinearAxis\",\"id\":\"p1584\",\"attributes\":{\"ticker\":{\"type\":\"object\",\"name\":\"BasicTicker\",\"id\":\"p1585\",\"attributes\":{\"mantissas\":[1,2,5]}},\"formatter\":{\"type\":\"object\",\"name\":\"BasicTickFormatter\",\"id\":\"p1586\"},\"major_label_policy\":{\"type\":\"object\",\"name\":\"AllLabels\",\"id\":\"p1587\"}}}],\"center\":[{\"type\":\"object\",\"name\":\"Grid\",\"id\":\"p1588\",\"attributes\":{\"axis\":{\"id\":\"p1584\"}}},{\"type\":\"object\",\"name\":\"Grid\",\"id\":\"p1593\",\"attributes\":{\"dimension\":1,\"axis\":{\"id\":\"p1589\"}}}]}}]}};\n  const render_items = [{\"docid\":\"750f1822-2600-4c05-99ce-48d9cb02cb3c\",\"roots\":{\"p1573\":\"f1627f9b-d80b-441b-86f7-a99329f44ca7\"},\"root_ids\":[\"p1573\"]}];\n  void root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n  }\n  if (root.Bokeh !== undefined) {\n    embed_document(root);\n  } else {\n    let attempts = 0;\n    const timer = setInterval(function(root) {\n      if (root.Bokeh !== undefined) {\n        clearInterval(timer);\n        embed_document(root);\n      } else {\n        attempts++;\n        if (attempts > 100) {\n          clearInterval(timer);\n          console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\");\n        }\n      }\n    }, 10, root)\n  }\n})(window);\n</script></div>\n</div>\n</section>\n<section id=\"ヒストグラム\">\n<h2>ヒストグラム<a class=\"headerlink\" href=\"#ヒストグラム\" title=\"Link to this heading\">¶</a></h2>\n<p>ヒストグラムの描画には、<code class=\"docutils literal notranslate\"><span class=\"pre\">quad()</span></code> メソッドが便利です。 次の例では、<code class=\"docutils literal notranslate\"><span class=\"pre\">numpy.random.randn()</span></code> 関数を用いて、正規分布に基づく 1000 個の数値の要素からなる配列を用意し、<code class=\"docutils literal notranslate\"><span class=\"pre\">numpy.histogram()</span></code> 関数を使って20個のビンに分類したヒストグラムを計算しています。 その計算結果を、<code class=\"docutils literal notranslate\"><span class=\"pre\">quad()</span></code> メソッドを使って、描画しています。 ビンの境界を見やすくするように、<code class=\"docutils literal notranslate\"><span class=\"pre\">line_color</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">fill_color</span></code>（デフォルト色）を別の色にしています。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[15]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"c1\"># 正規分布に基づく1000個の数値の要素からなる配列</span>\n<span class=\"n\">d</span> <span class=\"o\">=</span> <span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">random</span><span class=\"o\">.</span><span class=\"n\">randn</span><span class=\"p\">(</span><span class=\"mi\">1000</span><span class=\"p\">)</span>\n<span class=\"c1\"># numpy.histogramで20のビンに分割</span>\n<span class=\"n\">hist</span><span class=\"p\">,</span> <span class=\"n\">bin_edges</span> <span class=\"o\">=</span> <span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">histogram</span><span class=\"p\">(</span><span class=\"n\">d</span><span class=\"p\">,</span> <span class=\"mi\">20</span><span class=\"p\">)</span>\n<span class=\"n\">p</span> <span class=\"o\">=</span> <span class=\"n\">figure</span><span class=\"p\">()</span>\n<span class=\"n\">p</span><span class=\"o\">.</span><span class=\"n\">quad</span><span class=\"p\">(</span><span class=\"n\">top</span><span class=\"o\">=</span><span class=\"n\">hist</span><span class=\"p\">,</span> <span class=\"n\">bottom</span><span class=\"o\">=</span><span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"n\">left</span><span class=\"o\">=</span><span class=\"n\">bin_edges</span><span class=\"p\">[:</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">],</span> <span class=\"n\">right</span><span class=\"o\">=</span><span class=\"n\">bin_edges</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">:],</span> <span class=\"n\">line_color</span><span class=\"o\">=</span><span class=\"s1\">&#39;white&#39;</span><span class=\"p\">,</span> <span class=\"n\">alpha</span><span class=\"o\">=</span><span class=\"mf\">0.5</span><span class=\"p\">)</span>\n<span class=\"n\">show</span><span class=\"p\">(</span><span class=\"n\">p</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area rendered_html docutils container\">\n<div id=\"d9b581e3-9388-4084-a7a7-1975c2798a1e\" data-root-id=\"p1618\" style=\"display: contents;\"></div></div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"output_javascript\"></div>\n<script type=\"text/javascript\">\nvar element = document.currentScript.previousSibling.previousSibling;\n(function(root) {\n  function embed_document(root) {\n  const docs_json = {\"e023a993-e6f3-41d9-9b1a-6329e6bca961\":{\"version\":\"3.5.1\",\"title\":\"Bokeh Application\",\"roots\":[{\"type\":\"object\",\"name\":\"Figure\",\"id\":\"p1618\",\"attributes\":{\"x_range\":{\"type\":\"object\",\"name\":\"DataRange1d\",\"id\":\"p1619\"},\"y_range\":{\"type\":\"object\",\"name\":\"DataRange1d\",\"id\":\"p1620\"},\"x_scale\":{\"type\":\"object\",\"name\":\"LinearScale\",\"id\":\"p1627\"},\"y_scale\":{\"type\":\"object\",\"name\":\"LinearScale\",\"id\":\"p1628\"},\"title\":{\"type\":\"object\",\"name\":\"Title\",\"id\":\"p1625\"},\"renderers\":[{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p1658\",\"attributes\":{\"data_source\":{\"type\":\"object\",\"name\":\"ColumnDataSource\",\"id\":\"p1652\",\"attributes\":{\"selected\":{\"type\":\"object\",\"name\":\"Selection\",\"id\":\"p1653\",\"attributes\":{\"indices\":[],\"line_indices\":[]}},\"selection_policy\":{\"type\":\"object\",\"name\":\"UnionRenderers\",\"id\":\"p1654\"},\"data\":{\"type\":\"map\",\"entries\":[[\"top\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"BAAAAAMAAAAJAAAAEAAAABgAAAAvAAAAUQAAAGQAAAB5AAAAhwAAAHEAAAB+AAAAYgAAADYAAAAdAAAAFQAAAAoAAAAGAAAAAAAAAAMAAAA=\"},\"shape\":[20],\"dtype\":\"int32\",\"order\":\"little\"}],[\"left\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"90w0Ghi4CcA44ioIWxIHwHh3IfadbATAuQwY5ODGAcD0Qx2kR0L+v3ZuCoDN9vi/95j3W1Or87/whslvsr/sv/Tboye+KOK/4MP4fSdHzr8g0DtFUym4PwhKmmE9ONs/ANDy+BIz6D9+PYygA2XxP/4Sn8R9sPY/euix6Pf7+z/9XmIGuaMAQL3Jaxh2SQNAezR1KjPvBUA7n3488JQIQA==\"},\"shape\":[20],\"dtype\":\"float64\",\"order\":\"little\"}],[\"right\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"OOIqCFsSB8B4dyH2nWwEwLkMGOTgxgHA9EMdpEdC/r92bgqAzfb4v/eY91tTq/O/8IbJb7K/7L/026Mnvijiv+DD+H0nR86/INA7RVMpuD8ISpphPTjbPwDQ8vgSM+g/fj2MoANl8T/+Ep/EfbD2P3rosej3+/s//V5iBrmjAEC9yWsYdkkDQHs0dSoz7wVAO59+PPCUCED5CYhOrToLQA==\"},\"shape\":[20],\"dtype\":\"float64\",\"order\":\"little\"}]]}}},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p1659\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p1660\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"Quad\",\"id\":\"p1655\",\"attributes\":{\"left\":{\"type\":\"field\",\"field\":\"left\"},\"right\":{\"type\":\"field\",\"field\":\"right\"},\"bottom\":{\"type\":\"value\",\"value\":0},\"top\":{\"type\":\"field\",\"field\":\"top\"},\"line_color\":{\"type\":\"value\",\"value\":\"white\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.5},\"fill_color\":{\"type\":\"value\",\"value\":\"#1f77b4\"},\"fill_alpha\":{\"type\":\"value\",\"value\":0.5},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.5}}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"Quad\",\"id\":\"p1656\",\"attributes\":{\"left\":{\"type\":\"field\",\"field\":\"left\"},\"right\":{\"type\":\"field\",\"field\":\"right\"},\"bottom\":{\"type\":\"value\",\"value\":0},\"top\":{\"type\":\"field\",\"field\":\"top\"},\"line_color\":{\"type\":\"value\",\"value\":\"white\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.1},\"fill_color\":{\"type\":\"value\",\"value\":\"#1f77b4\"},\"fill_alpha\":{\"type\":\"value\",\"value\":0.1},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.1}}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"Quad\",\"id\":\"p1657\",\"attributes\":{\"left\":{\"type\":\"field\",\"field\":\"left\"},\"right\":{\"type\":\"field\",\"field\":\"right\"},\"bottom\":{\"type\":\"value\",\"value\":0},\"top\":{\"type\":\"field\",\"field\":\"top\"},\"line_color\":{\"type\":\"value\",\"value\":\"white\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.2},\"fill_color\":{\"type\":\"value\",\"value\":\"#1f77b4\"},\"fill_alpha\":{\"type\":\"value\",\"value\":0.2},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.2}}}}}],\"toolbar\":{\"type\":\"object\",\"name\":\"Toolbar\",\"id\":\"p1626\",\"attributes\":{\"tools\":[{\"type\":\"object\",\"name\":\"PanTool\",\"id\":\"p1639\"},{\"type\":\"object\",\"name\":\"WheelZoomTool\",\"id\":\"p1640\",\"attributes\":{\"renderers\":\"auto\"}},{\"type\":\"object\",\"name\":\"BoxZoomTool\",\"id\":\"p1641\",\"attributes\":{\"overlay\":{\"type\":\"object\",\"name\":\"BoxAnnotation\",\"id\":\"p1642\",\"attributes\":{\"syncable\":false,\"line_color\":\"black\",\"line_alpha\":1.0,\"line_width\":2,\"line_dash\":[4,4],\"fill_color\":\"lightgrey\",\"fill_alpha\":0.5,\"level\":\"overlay\",\"visible\":false,\"left\":{\"type\":\"number\",\"value\":\"nan\"},\"right\":{\"type\":\"number\",\"value\":\"nan\"},\"top\":{\"type\":\"number\",\"value\":\"nan\"},\"bottom\":{\"type\":\"number\",\"value\":\"nan\"},\"left_units\":\"canvas\",\"right_units\":\"canvas\",\"top_units\":\"canvas\",\"bottom_units\":\"canvas\",\"handles\":{\"type\":\"object\",\"name\":\"BoxInteractionHandles\",\"id\":\"p1648\",\"attributes\":{\"all\":{\"type\":\"object\",\"name\":\"AreaVisuals\",\"id\":\"p1647\",\"attributes\":{\"fill_color\":\"white\",\"hover_fill_color\":\"lightgray\"}}}}}}}},{\"type\":\"object\",\"name\":\"SaveTool\",\"id\":\"p1649\"},{\"type\":\"object\",\"name\":\"ResetTool\",\"id\":\"p1650\"},{\"type\":\"object\",\"name\":\"HelpTool\",\"id\":\"p1651\"}]}},\"left\":[{\"type\":\"object\",\"name\":\"LinearAxis\",\"id\":\"p1634\",\"attributes\":{\"ticker\":{\"type\":\"object\",\"name\":\"BasicTicker\",\"id\":\"p1635\",\"attributes\":{\"mantissas\":[1,2,5]}},\"formatter\":{\"type\":\"object\",\"name\":\"BasicTickFormatter\",\"id\":\"p1636\"},\"major_label_policy\":{\"type\":\"object\",\"name\":\"AllLabels\",\"id\":\"p1637\"}}}],\"below\":[{\"type\":\"object\",\"name\":\"LinearAxis\",\"id\":\"p1629\",\"attributes\":{\"ticker\":{\"type\":\"object\",\"name\":\"BasicTicker\",\"id\":\"p1630\",\"attributes\":{\"mantissas\":[1,2,5]}},\"formatter\":{\"type\":\"object\",\"name\":\"BasicTickFormatter\",\"id\":\"p1631\"},\"major_label_policy\":{\"type\":\"object\",\"name\":\"AllLabels\",\"id\":\"p1632\"}}}],\"center\":[{\"type\":\"object\",\"name\":\"Grid\",\"id\":\"p1633\",\"attributes\":{\"axis\":{\"id\":\"p1629\"}}},{\"type\":\"object\",\"name\":\"Grid\",\"id\":\"p1638\",\"attributes\":{\"dimension\":1,\"axis\":{\"id\":\"p1634\"}}}]}}]}};\n  const render_items = [{\"docid\":\"e023a993-e6f3-41d9-9b1a-6329e6bca961\",\"roots\":{\"p1618\":\"d9b581e3-9388-4084-a7a7-1975c2798a1e\"},\"root_ids\":[\"p1618\"]}];\n  void root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n  }\n  if (root.Bokeh !== undefined) {\n    embed_document(root);\n  } else {\n    let attempts = 0;\n    const timer = setInterval(function(root) {\n      if (root.Bokeh !== undefined) {\n        clearInterval(timer);\n        embed_document(root);\n      } else {\n        attempts++;\n        if (attempts > 100) {\n          clearInterval(timer);\n          console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\");\n        }\n      }\n    }, 10, root)\n  }\n})(window);\n</script></div>\n</div>\n</section>\n<section id=\"ヒートマップ\">\n<h2>ヒートマップ<a class=\"headerlink\" href=\"#ヒートマップ\" title=\"Link to this heading\">¶</a></h2>\n<p>最後に、複雑な応用例として、ヒートマップの描画方法を示します。 次の例は、10x10 のマスに <code class=\"docutils literal notranslate\"><span class=\"pre\">0.0</span></code> 以上 <code class=\"docutils literal notranslate\"><span class=\"pre\">1.0</span></code> 未満の乱数の温度を割り当て、その値に応じた色で塗ったヒートマップです。 ここでは、これまでと違って、x軸、y軸、温度の3つの値が必要になります。 そこで、<code class=\"docutils literal notranslate\"><span class=\"pre\">bokeh.models.ColumnDataSource</span></code> 型を用いて、その3つ組を、<code class=\"docutils literal notranslate\"><span class=\"pre\">'x'</span></code>・<code class=\"docutils literal notranslate\"><span class=\"pre\">'y'</span></code>・<code class=\"docutils literal notranslate\"><span class=\"pre\">'T'</span></code> の属性を持った表データを構築しています。 この表データの構築には、7-1で説明するpandasも使えます。</p>\n<p>ヒートマップでは、温度に応じた階調のある色選択が必要です。 そこで、色階調と値を対応付ける <code class=\"docutils literal notranslate\"><span class=\"pre\">bokeh.models.LinearColorMapper</span></code> 型の <code class=\"docutils literal notranslate\"><span class=\"pre\">mapper</span></code> を準備します。 <code class=\"docutils literal notranslate\"><span class=\"pre\">rect()</span></code> メソッドでは、表データの属性を参照して描画しています。 色は、表データの値を <code class=\"docutils literal notranslate\"><span class=\"pre\">mapper</span></code> に適用して色に変化させたものを用いることで、温度に応じた色選択を実現しています。 最後に、目盛り付きのカラーバーを生成して、右に配置しています。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[16]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"kn\">from</span> <span class=\"nn\">bokeh.models</span> <span class=\"kn\">import</span> <span class=\"n\">LinearColorMapper</span><span class=\"p\">,</span> <span class=\"n\">BasicTicker</span><span class=\"p\">,</span> <span class=\"n\">PrintfTickFormatter</span><span class=\"p\">,</span> <span class=\"n\">ColorBar</span><span class=\"p\">,</span> <span class=\"n\">ColumnDataSource</span>\n<span class=\"kn\">from</span> <span class=\"nn\">bokeh.transform</span> <span class=\"kn\">import</span> <span class=\"n\">transform</span>\n\n<span class=\"c1\"># 10行10列のランダム要素からなる行列</span>\n<span class=\"n\">n</span> <span class=\"o\">=</span> <span class=\"mi\">10</span>\n<span class=\"n\">data</span> <span class=\"o\">=</span> <span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">random</span><span class=\"o\">.</span><span class=\"n\">rand</span><span class=\"p\">(</span><span class=\"n\">n</span><span class=\"o\">*</span><span class=\"n\">n</span><span class=\"p\">)</span>\n<span class=\"n\">src</span> <span class=\"o\">=</span> <span class=\"n\">ColumnDataSource</span><span class=\"p\">({</span><span class=\"s1\">&#39;x&#39;</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"n\">yx</span> <span class=\"o\">%</span> <span class=\"n\">n</span> <span class=\"k\">for</span> <span class=\"n\">yx</span> <span class=\"ow\">in</span> <span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"n\">n</span><span class=\"o\">*</span><span class=\"n\">n</span><span class=\"p\">)],</span> <span class=\"s1\">&#39;y&#39;</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"n\">yx</span> <span class=\"o\">//</span> <span class=\"n\">n</span> <span class=\"k\">for</span> <span class=\"n\">yx</span> <span class=\"ow\">in</span> <span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"n\">n</span><span class=\"o\">*</span><span class=\"n\">n</span><span class=\"p\">)],</span> <span class=\"s1\">&#39;T&#39;</span> <span class=\"p\">:</span> <span class=\"n\">data</span><span class=\"p\">})</span>\n\n<span class=\"n\">colors</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s1\">&#39;#75968f&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;#a5bab7&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;#c9d9d3&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;#e2e2e2&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;#dfccce&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;#ddb7b1&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;#cc7878&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;#933b41&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;#550b1d&#39;</span><span class=\"p\">]</span>\n<span class=\"n\">mapper</span> <span class=\"o\">=</span> <span class=\"n\">LinearColorMapper</span><span class=\"p\">(</span><span class=\"n\">palette</span><span class=\"o\">=</span><span class=\"n\">colors</span><span class=\"p\">,</span> <span class=\"n\">low</span><span class=\"o\">=</span><span class=\"n\">data</span><span class=\"o\">.</span><span class=\"n\">min</span><span class=\"p\">(),</span> <span class=\"n\">high</span><span class=\"o\">=</span><span class=\"n\">data</span><span class=\"o\">.</span><span class=\"n\">max</span><span class=\"p\">())</span>\n<span class=\"n\">p</span> <span class=\"o\">=</span> <span class=\"n\">figure</span><span class=\"p\">()</span>\n<span class=\"n\">p</span><span class=\"o\">.</span><span class=\"n\">rect</span><span class=\"p\">(</span><span class=\"s1\">&#39;x&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;y&#39;</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"n\">source</span><span class=\"o\">=</span><span class=\"n\">src</span><span class=\"p\">,</span> <span class=\"n\">line_color</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">fill_color</span><span class=\"o\">=</span><span class=\"n\">transform</span><span class=\"p\">(</span><span class=\"s1\">&#39;T&#39;</span><span class=\"p\">,</span> <span class=\"n\">mapper</span><span class=\"p\">))</span>\n<span class=\"n\">color_bar</span> <span class=\"o\">=</span> <span class=\"n\">ColorBar</span><span class=\"p\">(</span><span class=\"n\">color_mapper</span><span class=\"o\">=</span><span class=\"n\">mapper</span><span class=\"p\">,</span> <span class=\"n\">location</span><span class=\"o\">=</span><span class=\"p\">(</span><span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"mi\">0</span><span class=\"p\">),</span>\n                     <span class=\"n\">ticker</span><span class=\"o\">=</span><span class=\"n\">BasicTicker</span><span class=\"p\">(</span><span class=\"n\">desired_num_ticks</span><span class=\"o\">=</span><span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">colors</span><span class=\"p\">)),</span>\n                     <span class=\"n\">formatter</span><span class=\"o\">=</span><span class=\"n\">PrintfTickFormatter</span><span class=\"p\">(</span><span class=\"nb\">format</span><span class=\"o\">=</span><span class=\"s1\">&#39;</span><span class=\"si\">%2.1f</span><span class=\"s1\">&#39;</span><span class=\"p\">))</span>\n<span class=\"n\">p</span><span class=\"o\">.</span><span class=\"n\">add_layout</span><span class=\"p\">(</span><span class=\"n\">color_bar</span><span class=\"p\">,</span> <span class=\"s1\">&#39;right&#39;</span><span class=\"p\">)</span>\n<span class=\"n\">show</span><span class=\"p\">(</span><span class=\"n\">p</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area rendered_html docutils container\">\n<div id=\"ccb437b2-51c9-4b62-8927-cb95806792ed\" data-root-id=\"p1668\" style=\"display: contents;\"></div></div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"output_javascript\"></div>\n<script type=\"text/javascript\">\nvar element = document.currentScript.previousSibling.previousSibling;\n(function(root) {\n  function embed_document(root) {\n  const docs_json = {\"9df1b904-3d5c-418a-9b08-86ed87700c18\":{\"version\":\"3.5.1\",\"title\":\"Bokeh Application\",\"roots\":[{\"type\":\"object\",\"name\":\"Figure\",\"id\":\"p1668\",\"attributes\":{\"x_range\":{\"type\":\"object\",\"name\":\"DataRange1d\",\"id\":\"p1669\"},\"y_range\":{\"type\":\"object\",\"name\":\"DataRange1d\",\"id\":\"p1670\"},\"x_scale\":{\"type\":\"object\",\"name\":\"LinearScale\",\"id\":\"p1677\"},\"y_scale\":{\"type\":\"object\",\"name\":\"LinearScale\",\"id\":\"p1678\"},\"title\":{\"type\":\"object\",\"name\":\"Title\",\"id\":\"p1675\"},\"renderers\":[{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p1708\",\"attributes\":{\"data_source\":{\"type\":\"object\",\"name\":\"ColumnDataSource\",\"id\":\"p1664\",\"attributes\":{\"selected\":{\"type\":\"object\",\"name\":\"Selection\",\"id\":\"p1665\",\"attributes\":{\"indices\":[],\"line_indices\":[]}},\"selection_policy\":{\"type\":\"object\",\"name\":\"UnionRenderers\",\"id\":\"p1666\"},\"data\":{\"type\":\"map\",\"entries\":[[\"x\",[0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9]],[\"y\",[0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,7,7,7,7,7,7,7,7,7,7,8,8,8,8,8,8,8,8,8,8,9,9,9,9,9,9,9,9,9,9]],[\"T\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"7ChrRqbT5D/gVBqlJ4yyP19QB4NSzuk/rjhs6VxQ6j+dueGFc63sP5JoSTHjjNw/GLv6pDpt5T+ILGQNkZHaP8qPQt4G6+4/gpmt+Qka7D98A3KYJhLqP0rO/C0RcO8/RC/KfBVW5j+CuuMjuELUP67hoBJ9JOA/foZz9iPs7j/UheOxsFvRPxx0mEVLW9g/1+HdU8u85z9SZLWxo5rtP5C4+OPOor8/ekLc5gyd7T889sP6qTzFPwAemyPD5lw/+1xnbLrV4j8whdYtzUWgPzZcYXgu7uM/mI/3RXlz1j+8xrJa+9PnP87fNeggwuE/qtr0gYCY5D+kUDvMfkDiPyBhgiB5J9k/qljagDbD6D/Aeje+XRS8P6evIgDiauc/6qjFaIaP0j9QZe2KebG7P1zmzhsT8Ns/DJr08eBf5T8kOVP7EeLfP/S5jEfhpMI/06JtNYOW5j/YevINLRLtP3bTTWzpyuw/9D+mb7kn4D8w2g+lGPLjP5BKdgkl8cI/MdA12+Ln5j/ISVZf1IjaP4DOwpVOaYg/ACfzpqxl1D8U7WYuwrTPP9THLwxJEOM/aqMPgAIC2z9ipBt5Jt7eP9heO3xgosU/ESR+f+X94z8AP6KVuIpiP/bCsRV1h+g/pn0Pg54V2D+KqOSHG2/lP+AUQoK1EbQ/9JSjxh8W2z9Q62T1burEPyDzcb3LJaA/QAe70DMs0T/C2opuy+fqP+BOwXX/8OM/UgHGUvE54T/ByPz67armP/wE/F2VQcg/YHc3f3iH1T8tj/warJvgPxzC7npaI9k/cG66FvGLoj9gYpRGcm/ZP4BiOemYIOM/ZvAp7Rk55j/YZiH5RjfKPyOqjusRUOE/vmaFZwWT4T/IoODQSXHuPz/LQZgxAOU/0URZAUYY7T9a3DL1jkPWP+TBzsJWA8g/UItfb9XRpT9Ic8xUgnfiP2h5R2VrLMg/7CuPzTJp4j+6wN2UdxXaPyRWedSpC9w/CL5ugt6h2D9QrAfp1uDcPwBAXPP4pjA/di3LQTSa5z9AwnrF4NXGP8ITpksxyOU/UeKjeVfQ6D8=\"},\"shape\":[100],\"dtype\":\"float64\",\"order\":\"little\"}]]}}},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p1709\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p1710\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"Rect\",\"id\":\"p1705\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"width\":{\"type\":\"value\",\"value\":1},\"height\":{\"type\":\"value\",\"value\":1},\"line_color\":{\"type\":\"value\",\"value\":null},\"fill_color\":{\"type\":\"field\",\"field\":\"T\",\"transform\":{\"type\":\"object\",\"name\":\"LinearColorMapper\",\"id\":\"p1667\",\"attributes\":{\"palette\":[\"#75968f\",\"#a5bab7\",\"#c9d9d3\",\"#e2e2e2\",\"#dfccce\",\"#ddb7b1\",\"#cc7878\",\"#933b41\",\"#550b1d\"],\"low\":0.00025409295936729137,\"high\":0.9824300668901256}}}}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"Rect\",\"id\":\"p1706\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"width\":{\"type\":\"value\",\"value\":1},\"height\":{\"type\":\"value\",\"value\":1},\"line_color\":{\"type\":\"value\",\"value\":null},\"line_alpha\":{\"type\":\"value\",\"value\":0.1},\"fill_color\":{\"type\":\"field\",\"field\":\"T\",\"transform\":{\"id\":\"p1667\"}},\"fill_alpha\":{\"type\":\"value\",\"value\":0.1},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.1}}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"Rect\",\"id\":\"p1707\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"width\":{\"type\":\"value\",\"value\":1},\"height\":{\"type\":\"value\",\"value\":1},\"line_color\":{\"type\":\"value\",\"value\":null},\"line_alpha\":{\"type\":\"value\",\"value\":0.2},\"fill_color\":{\"type\":\"field\",\"field\":\"T\",\"transform\":{\"id\":\"p1667\"}},\"fill_alpha\":{\"type\":\"value\",\"value\":0.2},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.2}}}}}],\"toolbar\":{\"type\":\"object\",\"name\":\"Toolbar\",\"id\":\"p1676\",\"attributes\":{\"tools\":[{\"type\":\"object\",\"name\":\"PanTool\",\"id\":\"p1689\"},{\"type\":\"object\",\"name\":\"WheelZoomTool\",\"id\":\"p1690\",\"attributes\":{\"renderers\":\"auto\"}},{\"type\":\"object\",\"name\":\"BoxZoomTool\",\"id\":\"p1691\",\"attributes\":{\"overlay\":{\"type\":\"object\",\"name\":\"BoxAnnotation\",\"id\":\"p1692\",\"attributes\":{\"syncable\":false,\"line_color\":\"black\",\"line_alpha\":1.0,\"line_width\":2,\"line_dash\":[4,4],\"fill_color\":\"lightgrey\",\"fill_alpha\":0.5,\"level\":\"overlay\",\"visible\":false,\"left\":{\"type\":\"number\",\"value\":\"nan\"},\"right\":{\"type\":\"number\",\"value\":\"nan\"},\"top\":{\"type\":\"number\",\"value\":\"nan\"},\"bottom\":{\"type\":\"number\",\"value\":\"nan\"},\"left_units\":\"canvas\",\"right_units\":\"canvas\",\"top_units\":\"canvas\",\"bottom_units\":\"canvas\",\"handles\":{\"type\":\"object\",\"name\":\"BoxInteractionHandles\",\"id\":\"p1698\",\"attributes\":{\"all\":{\"type\":\"object\",\"name\":\"AreaVisuals\",\"id\":\"p1697\",\"attributes\":{\"fill_color\":\"white\",\"hover_fill_color\":\"lightgray\"}}}}}}}},{\"type\":\"object\",\"name\":\"SaveTool\",\"id\":\"p1699\"},{\"type\":\"object\",\"name\":\"ResetTool\",\"id\":\"p1700\"},{\"type\":\"object\",\"name\":\"HelpTool\",\"id\":\"p1701\"}]}},\"left\":[{\"type\":\"object\",\"name\":\"LinearAxis\",\"id\":\"p1684\",\"attributes\":{\"ticker\":{\"type\":\"object\",\"name\":\"BasicTicker\",\"id\":\"p1685\",\"attributes\":{\"mantissas\":[1,2,5]}},\"formatter\":{\"type\":\"object\",\"name\":\"BasicTickFormatter\",\"id\":\"p1686\"},\"major_label_policy\":{\"type\":\"object\",\"name\":\"AllLabels\",\"id\":\"p1687\"}}}],\"right\":[{\"type\":\"object\",\"name\":\"ColorBar\",\"id\":\"p1713\",\"attributes\":{\"location\":[0,0],\"ticker\":{\"type\":\"object\",\"name\":\"BasicTicker\",\"id\":\"p1711\",\"attributes\":{\"desired_num_ticks\":9,\"mantissas\":[1,2,5]}},\"formatter\":{\"type\":\"object\",\"name\":\"PrintfTickFormatter\",\"id\":\"p1712\",\"attributes\":{\"format\":\"%2.1f\"}},\"major_label_policy\":{\"type\":\"object\",\"name\":\"NoOverlap\",\"id\":\"p1714\"},\"color_mapper\":{\"id\":\"p1667\"}}}],\"below\":[{\"type\":\"object\",\"name\":\"LinearAxis\",\"id\":\"p1679\",\"attributes\":{\"ticker\":{\"type\":\"object\",\"name\":\"BasicTicker\",\"id\":\"p1680\",\"attributes\":{\"mantissas\":[1,2,5]}},\"formatter\":{\"type\":\"object\",\"name\":\"BasicTickFormatter\",\"id\":\"p1681\"},\"major_label_policy\":{\"type\":\"object\",\"name\":\"AllLabels\",\"id\":\"p1682\"}}}],\"center\":[{\"type\":\"object\",\"name\":\"Grid\",\"id\":\"p1683\",\"attributes\":{\"axis\":{\"id\":\"p1679\"}}},{\"type\":\"object\",\"name\":\"Grid\",\"id\":\"p1688\",\"attributes\":{\"dimension\":1,\"axis\":{\"id\":\"p1684\"}}}]}}]}};\n  const render_items = [{\"docid\":\"9df1b904-3d5c-418a-9b08-86ed87700c18\",\"roots\":{\"p1668\":\"ccb437b2-51c9-4b62-8927-cb95806792ed\"},\"root_ids\":[\"p1668\"]}];\n  void root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n  }\n  if (root.Bokeh !== undefined) {\n    embed_document(root);\n  } else {\n    let attempts = 0;\n    const timer = setInterval(function(root) {\n      if (root.Bokeh !== undefined) {\n        clearInterval(timer);\n        embed_document(root);\n      } else {\n        attempts++;\n        if (attempts > 100) {\n          clearInterval(timer);\n          console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\");\n        }\n      }\n    }, 10, root)\n  }\n})(window);\n</script></div>\n</div>\n</section>\n<section id=\"グラフのファイル出力\">\n<h2>グラフのファイル出力<a class=\"headerlink\" href=\"#グラフのファイル出力\" title=\"Link to this heading\">¶</a></h2>\n<p>これまで表示されてきたグラフには画像保存ボタンがあるので、それをクリックすればPNG形式の画像を保存できます。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">bokeh.plotting.output_file()</span></code> を用いると、グラフ単独をHTMLファイルとして保存できるようになります。 ただし、既に <code class=\"docutils literal notranslate\"><span class=\"pre\">output_notebook()</span></code> を読んでいる場合、<code class=\"docutils literal notranslate\"><span class=\"pre\">bokeh.plotting.reset_output()</span></code> で状態をリセットする必要があります。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[17]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"kn\">from</span> <span class=\"nn\">bokeh.plotting</span> <span class=\"kn\">import</span> <span class=\"n\">save</span><span class=\"p\">,</span> <span class=\"n\">output_file</span><span class=\"p\">,</span> <span class=\"n\">reset_output</span>\n<span class=\"n\">x</span> <span class=\"o\">=</span> <span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">arange</span><span class=\"p\">(</span><span class=\"o\">-</span><span class=\"mi\">2</span><span class=\"o\">*</span><span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">pi</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"o\">*</span><span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">pi</span><span class=\"p\">,</span> <span class=\"mf\">0.1</span><span class=\"p\">)</span>\n<span class=\"n\">p</span> <span class=\"o\">=</span> <span class=\"n\">figure</span><span class=\"p\">(</span><span class=\"n\">title</span><span class=\"o\">=</span><span class=\"s1\">&#39;sin Curves&#39;</span><span class=\"p\">,</span> <span class=\"n\">x_axis_label</span><span class=\"o\">=</span><span class=\"s1\">&#39;x&#39;</span><span class=\"p\">,</span> <span class=\"n\">y_axis_label</span><span class=\"o\">=</span><span class=\"s1\">&#39;y&#39;</span><span class=\"p\">)</span>\n<span class=\"n\">p</span><span class=\"o\">.</span><span class=\"n\">line</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">,</span> <span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">sin</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">))</span>\n\n<span class=\"n\">reset_output</span><span class=\"p\">()</span> <span class=\"c1\"># output_notebook()の効果を消す</span>\n<span class=\"n\">output_file</span><span class=\"p\">(</span><span class=\"s1\">&#39;sin.html&#39;</span><span class=\"p\">)</span> <span class=\"c1\"># 出力先の設定</span>\n<span class=\"n\">save</span><span class=\"p\">(</span><span class=\"n\">p</span><span class=\"p\">)</span> <span class=\"c1\"># グラフを保存するだけ</span>\n<span class=\"n\">show</span><span class=\"p\">(</span><span class=\"n\">p</span><span class=\"p\">)</span> <span class=\"c1\"># 保存した上でブラウザを開く</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area stderr docutils container\">\n<div class=\"highlight\"><pre>\n0:116: execution error: ファイル“不特定のオブジェクト”が見つかりませんでした。 (-43)\n</pre></div></div>\n</div>\n<p><strong>注意</strong>：<code class=\"docutils literal notranslate\"><span class=\"pre\">output_notebook()</span></code> を呼んだ状態と <code class=\"docutils literal notranslate\"><span class=\"pre\">output_file()</span></code> を呼んだ状態が重なると、<code class=\"docutils literal notranslate\"><span class=\"pre\">show()</span></code> でエラーが起きます。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[ ]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span>\n</pre></div>\n</div>\n</div>\n</section>\n</section>\n\n\n          </div>\n          \n        </div>\n      </div>\n      <div class=\"sphinxsidebar\" role=\"navigation\" aria-label=\"Main\">\n        <div class=\"sphinxsidebarwrapper\">\n<h1 class=\"logo\"><a href=\"../index.html\">Pythonプログラミング入門</a></h1>\n\n\n\n\n\n\n\n\n<p>\n  <a style=\"font-family: sans-serif; font-size: smaller; background: linear-gradient(to top, #353535 0%, #141414 100%); -webkit-font-smoothing: antialiased; font-weight: normal; text-shadow: rgb(0 0 0 / 40%) 0 -1px 0; padding: 2px 6px; color: #fff; text-decoration: none; border-radius: 4px; border: 1px solid #0d0d0d; box-shadow: inset 0 1px 1px 0 #8f8f8f;\" href=\"https://github.com/utokyo-ipp/utokyo-ipp.github.io\">View on GitHub</a>\n</p><p>\n  <a style=\"font-family: sans-serif; font-size: smaller; background: linear-gradient(to top, #ff1e00 0%, #de1e00 100%); -webkit-font-smoothing: antialiased; font-weight: normal; text-shadow: rgb(0 0 0 / 40%) 0 -1px 0; padding: 2px 6px; color: #fff; text-decoration: none; border-radius: 4px; border: 1px solid #0d0d0d; box-shadow: inset 0 1px 1px 0 #ff8e70;\" href=\"https://utokyo-ipp.github.io/IPP_textbook.pdf\">View PDF</a>\n</p><p>\n  <a style=\"border-bottom: none;\" href=\"https://colab.research.google.com/github/utokyo-ipp/utokyo-ipp.github.io/blob/master/colab/appendix/5-bokeh.ipynb\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Google Colaboratory\"></a>\n</p><h3>Navigation</h3>\n<ul class=\"current\">\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../1/1-0.html\">1-0. Colaboratory (Colab) の使い方</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../1/1-1.html\">1-1. 数値演算</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../1/1-2.html\">1-2. 変数と関数の基礎</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../1/1-3.html\">1-3. 論理・比較演算と条件分岐の基礎</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../1/1-4.html\">1-4. テストとデバッグ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../2/2-1.html\">2-1. 文字列 (string)</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../2/2-2.html\">2-2. リスト (list)</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../2/2-3.html\">2-3. 条件分岐</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../3/3-1.html\">3-1. 辞書 (dictionary)</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../3/3-2.html\">3-2. 繰り返し</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../3/3-3.html\">3-3. 関数</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../4/4-1.html\">4-1. ファイル入出力の基本</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../4/4-2.html\">4-2. イテラブルとイテレータ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../4/4-3.html\">4-3. ディレクトリと木構造</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../5/5-1.html\">5-1. モジュールの使い方</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../5/5-2.html\">5-2. モジュールの作り方</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../5/5-3.html\">5-3. NumPyライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../6/6-1.html\">6-1. 内包表記</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../6/6-2.html\">6-2. 高階関数</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../6/6-3.html\">6-3. クラス</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../7/7-1.html\">7-1. pandasライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../7/7-2.html\">7-2. scikit-learnライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"1-jupyter-notebook.html\">▲Jupyter Notebook の使い方</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"2-set.html\">▲セット (set)</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"3-recursion.html\">▲再帰</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"3-visualization.html\">▲簡単なデータの可視化</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"4-csv.html\">▲CSVファイルの入出力</a></li>\n<li class=\"toctree-l1 current\"><a class=\"current reference internal\" href=\"#\">▲Bokehライブラリ</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#線グラフ\">線グラフ</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#散布図\">散布図</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#棒グラフ\">棒グラフ</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#ヒストグラム\">ヒストグラム</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#ヒートマップ\">ヒートマップ</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#グラフのファイル出力\">グラフのファイル出力</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"5-command.html\">▲Pythonスクリプトとコマンドライン実行</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"5-matplotlib.html\">▲Matplotlibライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"5-re.html\">▲正規表現</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../index_of_terms.html\">索引</a></li>\n</ul>\n\n<div class=\"relations\">\n<h3>Related Topics</h3>\n<ul>\n  <li><a href=\"../index.html\">Documentation overview</a><ul>\n      <li>Previous: <a href=\"4-csv.html\" title=\"previous chapter\">▲CSVファイルの入出力</a></li>\n      <li>Next: <a href=\"5-command.html\" title=\"next chapter\">▲Pythonスクリプトとコマンドライン実行</a></li>\n  </ul></li>\n</ul>\n</div>\n<search id=\"searchbox\" style=\"display: none\" role=\"search\">\n  <h3 id=\"searchlabel\">Quick search</h3>\n    <div class=\"searchformwrapper\">\n    <form class=\"search\" action=\"../search.html\" method=\"get\">\n      <input type=\"text\" name=\"q\" aria-labelledby=\"searchlabel\" autocomplete=\"off\" autocorrect=\"off\" autocapitalize=\"off\" spellcheck=\"false\"/>\n      <input type=\"submit\" value=\"Go\" />\n    </form>\n    </div>\n</search>\n<script>document.getElementById('searchbox').style.display = \"block\"</script>\n\n\n\n\n\n\n\n\n        </div>\n      </div>\n      <div class=\"clearer\"></div>\n    </div>\n    <div class=\"footer\">\n      &#169;2020–2024, 東京大学 数理・情報教育研究センター (CC BY-NC-ND 4.0).\n      \n      |\n      Powered by <a href=\"https://www.sphinx-doc.org/\">Sphinx 8.0.2</a>\n      &amp; <a href=\"https://alabaster.readthedocs.io\">Alabaster 1.0.0</a>\n      \n    </div>\n\n    \n\n    \n    <script>\n\n      var _gaq = _gaq || [];\n      _gaq.push(['_setAccount', 'G-8M0RXGPPSR']);\n      _gaq.push(['_setDomainName', 'none']);\n      _gaq.push(['_setAllowLinker', true]);\n      _gaq.push(['_trackPageview']);\n\n      (function() {\n        var ga = document.createElement('script'); ga.async = true;\n        ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'https://www') + '.google-analytics.com/ga.js';\n        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);\n      })();\n\n    </script>\n    \n  </body>\n</html>"
  },
  {
    "path": "docs/appendix/5-command.html",
    "content": "<!DOCTYPE html>\n\n<html lang=\"jp\" data-content_root=\"../\">\n  <head>\n    <meta charset=\"utf-8\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" /><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n\n    <!-- Google tag (gtag.js) -->\n    <script async src=\"https://www.googletagmanager.com/gtag/js?id=G-8M0RXGPPSR\"></script>\n    <script>\n        window.dataLayer = window.dataLayer || [];\n        function gtag(){dataLayer.push(arguments);}\n        gtag('js', new Date());\n        gtag('config', 'G-8M0RXGPPSR');\n    </script>\n    \n    <title>▲Pythonスクリプトとコマンドライン実行 &#8212; Pythonプログラミング入門  documentation</title>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/pygments.css?v=d1102ebc\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/basic.css?v=c058f7c8\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/alabaster.css?v=27fed22d\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/nbsphinx-code-cells.css\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/custom.css?v=1a1aa8dd\" />\n    <script src=\"../_static/documentation_options.js?v=3ff7d7a7\"></script>\n    <script src=\"../_static/doctools.js?v=9a2dae69\"></script>\n    <script src=\"../_static/sphinx_highlight.js?v=dc90522c\"></script>\n    <script crossorigin=\"anonymous\" integrity=\"sha256-Ae2Vz/4ePdIu6ZyI/5ZGsYnb+m0JlOmKPjt6XZ9JJkA=\" src=\"https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.4/require.min.js\"></script>\n    <script>window.MathJax = {\"tex\": {\"inlineMath\": [[\"$\", \"$\"], [\"\\\\(\", \"\\\\)\"]], \"processEscapes\": true}, \"options\": {\"ignoreHtmlClass\": \"tex2jax_ignore|mathjax_ignore|document\", \"processHtmlClass\": \"tex2jax_process|mathjax_process|math|output_area\"}}</script>\n    <script defer=\"defer\" src=\"https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js\"></script>\n    <link rel=\"index\" title=\"Index\" href=\"../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../search.html\" />\n    <link rel=\"next\" title=\"▲Matplotlibライブラリ\" href=\"5-matplotlib.html\" />\n    <link rel=\"prev\" title=\"▲Bokehライブラリ\" href=\"5-bokeh.html\" />\n   \n  <link rel=\"stylesheet\" href=\"../_static/custom.css\" type=\"text/css\" />\n  \n\n  \n  \n\n  </head><body>\n  \n\n    <div class=\"document\">\n      <div class=\"documentwrapper\">\n        <div class=\"bodywrapper\">\n          \n\n          <div class=\"body\" role=\"main\">\n            \n  <section id=\"▲Pythonスクリプトとコマンドライン実行\">\n<h1>▲Pythonスクリプトとコマンドライン実行<a class=\"headerlink\" href=\"#▲Pythonスクリプトとコマンドライン実行\" title=\"Link to this heading\">¶</a></h1>\n<p>Pythonスクリプトとコマンドライン実行について説明します。</p>\n<p>参考</p>\n<ul class=\"simple\">\n<li><p><a class=\"reference external\" href=\"https://docs.python.org/ja/3/tutorial/interpreter.html\">https://docs.python.org/ja/3/tutorial/interpreter.html</a></p></li>\n<li><p><a class=\"reference external\" href=\"https://docs.python.org/ja/3/tutorial/modules.html\">https://docs.python.org/ja/3/tutorial/modules.html</a></p></li>\n<li><p><a class=\"reference external\" href=\"https://docs.python.org/ja/3/tutorial/appendix.html\">https://docs.python.org/ja/3/tutorial/appendix.html</a></p></li>\n<li><p><a class=\"reference external\" href=\"https://docs.python.org/ja/3/library/sys.html\">https://docs.python.org/ja/3/library/sys.html</a></p></li>\n<li><p><a class=\"reference external\" href=\"https://docs.python.org/ja/3/reference/import.html\">https://docs.python.org/ja/3/reference/import.html</a></p></li>\n</ul>\n<p>実は、第4回で紹介したモジュールファイル（拡張子 <code class=\"docutils literal notranslate\"><span class=\"pre\">.py</span></code>）は、それ単独で直接実行可能な自己完結したプログラムです。 直接実行されるPythonプログラムコードのことを指して特に、<strong>Pythonスクリプト</strong>と呼びます。 モジュールかスクリプトかを区別しないときには、Pythonソースファイルや <code class=\"docutils literal notranslate\"><span class=\"pre\">.py</span></code> ファイル等と呼ばれます。</p>\n<p>たとえば、次のコードセルを実行してみてください。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[1]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">a1</span> <span class=\"o\">=</span> <span class=\"mi\">10</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s1\">&#39;a1 contains the value of&#39;</span><span class=\"p\">,</span> <span class=\"n\">a1</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\na1 contains the value of 10\n</pre></div></div>\n</div>\n<p>この内容と全く同じコードを記述したPythonスクリプトファイル <code class=\"docutils literal notranslate\"><span class=\"pre\">sample.py</span></code> を教材として用意しました。</p>\n<p>オペレーティングシステム（実際にはシェル）から <code class=\"docutils literal notranslate\"><span class=\"pre\">sample.py</span></code> を実行するには、以下のようにします。</p>\n<div class=\"highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>&gt;&gt;&gt; python sample.py\n</pre></div>\n</div>\n<p>あるいは</p>\n<div class=\"highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>&gt;&gt;&gt; python3 sample.py\n</pre></div>\n</div>\n<p>ここで、<code class=\"docutils literal notranslate\"><span class=\"pre\">&gt;&gt;&gt;</span></code> は、シェルのプロンプト（コマンド入力を促す記号）を意味します。 後に示す具体例を見るとわかるように、環境によっては <code class=\"docutils literal notranslate\"><span class=\"pre\">&gt;</span></code> であったり、<code class=\"docutils literal notranslate\"><span class=\"pre\">$</span></code> であったりします。</p>\n<p>このようにスクリプトをシェルから実行することを、<strong>コマンドライン実行</strong>と呼びます。</p>\n<section id=\"コマンドライン実行の具体例\">\n<h2>コマンドライン実行の具体例<a class=\"headerlink\" href=\"#コマンドライン実行の具体例\" title=\"Link to this heading\">¶</a></h2>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">sample.py</span></code> をコマンドライン実行する具体例を、実行環境毎に説明します。</p>\n<section id=\"Jupyter-Notebook-での実行方法\">\n<h3>Jupyter Notebook での実行方法<a class=\"headerlink\" href=\"#Jupyter-Notebook-での実行方法\" title=\"Link to this heading\">¶</a></h3>\n<p>ファイルマネージャ画面で、</p>\n<p>New ⇒ Terminal</p>\n<p>を選択すると、ターミナルのタブが生成されます。</p>\n<p><img alt=\"fig/terminal-in-menu.png\" src=\"../_images/terminal_in_menu.png\" /></p>\n<p>Windows 10 の環境（ユーザーアカウント名 <code class=\"docutils literal notranslate\"><span class=\"pre\">sato</span></code>）では、次のように表示されます。</p>\n<p><img alt=\"fig/console-in-browser.png\" src=\"../_images/console_in_browser.png\" /></p>\n<p>次の例では、<code class=\"docutils literal notranslate\"><span class=\"pre\">cd</span></code> コマンドで <code class=\"docutils literal notranslate\"><span class=\"pre\">sample.py</span></code> が存在するディレクトリ <code class=\"docutils literal notranslate\"><span class=\"pre\">materials/5/</span></code> に移動し、その上で <code class=\"docutils literal notranslate\"><span class=\"pre\">sample.py</span></code> を実行しています。</p>\n<p><img alt=\"fig/sample-py-browser.png\" src=\"../_images/sample_py_browser.png\" /></p>\n<p>Jupyter Notebook 上で開かれるターミナルは、環境によって違います。 デフォルトでは、Windows 10 ではPowerShellが起動し、macOSならばbashが起動するでしょう。</p>\n</section>\n<section id=\"Windowsでの実行方法\">\n<h3>Windowsでの実行方法<a class=\"headerlink\" href=\"#Windowsでの実行方法\" title=\"Link to this heading\">¶</a></h3>\n<p>以下をクリックすれば、ターミナルが開いて <code class=\"docutils literal notranslate\"><span class=\"pre\">python</span></code> をコマンドとして実行できます。</p>\n<p>Start メニュー ⇒ Anaonda3(64-bit) ⇒ Anaconda Prompt</p>\n<p><img alt=\"fig/sample-py-win-1.png\" src=\"../_images/sample_py_win_1.png\" /></p>\n<p>下記のようなウインドウが表示されます。</p>\n<p><img alt=\"fig/sample-py-win-2.png\" src=\"../_images/sample_py_win_2.png\" /></p>\n<p>Windowsのユーザーアカウント名のついたフォルダ（画像では、KMK）の中に <code class=\"docutils literal notranslate\"><span class=\"pre\">pythontest</span></code> というフォルダを作成し、その中に <code class=\"docutils literal notranslate\"><span class=\"pre\">sample.py</span></code> を格納した場合の実行例を示します。</p>\n<p>例では、<code class=\"docutils literal notranslate\"><span class=\"pre\">cd</span></code> というコマンドで <code class=\"docutils literal notranslate\"><span class=\"pre\">sample.py</span></code> を格納したフォルダ <code class=\"docutils literal notranslate\"><span class=\"pre\">pythontest</span></code> に移動し、その上で <code class=\"docutils literal notranslate\"><span class=\"pre\">sample.py</span></code> を実行しています。</p>\n<p><img alt=\"fig/sample-py-win-3.png\" src=\"../_images/sample_py_win_3.png\" /></p>\n</section>\n<section id=\"macOS-での実行方法\">\n<h3>macOS での実行方法<a class=\"headerlink\" href=\"#macOS-での実行方法\" title=\"Link to this heading\">¶</a></h3>\n<p>Application ⇒ Utilities ⇒ Terminal.app を起動します。</p>\n<p>アプリケーション ⇒ ユーティリティ ⇒ ターミナル.app を起動します。（日本語の場合）</p>\n<p><img alt=\"fig/sample-py-mac-1.png\" src=\"../_images/sample_py_mac_1.png\" /></p>\n<p>下記のようなウインドウが表示されます。</p>\n<p><img alt=\"fig/sample-py-mac-2.png\" src=\"../_images/sample_py_mac_2.png\" /></p>\n<p>ダウンロードフォルダ (<code class=\"docutils literal notranslate\"><span class=\"pre\">Downloads</span></code>) に <code class=\"docutils literal notranslate\"><span class=\"pre\">sample.py</span></code> を格納した場合の実行例を示します。</p>\n<p>例では、<code class=\"docutils literal notranslate\"><span class=\"pre\">cd</span></code> というコマンドで <code class=\"docutils literal notranslate\"><span class=\"pre\">sample.py</span></code> を格納した <code class=\"docutils literal notranslate\"><span class=\"pre\">Downloads</span></code> フォルダに移動し、その上で <code class=\"docutils literal notranslate\"><span class=\"pre\">sample.py</span></code> を実行しています。</p>\n<p><img alt=\"fig/sample-py-mac-3.png\" src=\"../_images/sample_py_mac_3.png\" /></p>\n</section>\n</section>\n<section id=\"コマンドライン引数\">\n<h2>コマンドライン引数<a class=\"headerlink\" href=\"#コマンドライン引数\" title=\"Link to this heading\">¶</a></h2>\n<p>コマンドライン実行時には、実行スクリプト名の後に、文字列を書き込むことにより、実行スクリプトへ引数を与えることができます。 この引数のことを、<strong>コマンドライン引数</strong>と呼びます。</p>\n<p>たとえば、<code class=\"docutils literal notranslate\"><span class=\"pre\">argsprint.py</span></code> というスクリプトファイルをコマンドライン実行することを考えます。</p>\n<div class=\"highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>&gt;&gt;&gt; python argsprint.py\n</pre></div>\n</div>\n<p>ここで、 <code class=\"docutils literal notranslate\"><span class=\"pre\">argsprint.py</span></code> の後ろに、適当な文字列を付け加えます。たとえば、以下のように3つの文字列 <code class=\"docutils literal notranslate\"><span class=\"pre\">firstvalue</span></code> <code class=\"docutils literal notranslate\"><span class=\"pre\">secondvalue</span></code> <code class=\"docutils literal notranslate\"><span class=\"pre\">thirdvalue</span></code> をスペースで区切って付け加えてみます。</p>\n<div class=\"highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>&gt;&gt;&gt; python argsprint.py firstvalue secondvalue thirdvalue\n</pre></div>\n</div>\n<p>このとき、この3つの文字列が <code class=\"docutils literal notranslate\"><span class=\"pre\">argsprint.py</span></code> にコマンドライン引数として与えられることになります。</p>\n<p>この引数は、<code class=\"docutils literal notranslate\"><span class=\"pre\">sys</span></code> モジュールの <code class=\"docutils literal notranslate\"><span class=\"pre\">argv</span></code> という変数 (<code class=\"docutils literal notranslate\"><span class=\"pre\">sys.argv</span></code>) にリストとして格納されます。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">argsprint.py</span></code> を次のようなコードからなるファイルとしましょう。</p>\n<p>argsprint.py:</p>\n<div class=\"highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>import sys\nprint(sys.argv) # リスト sys.argv の中身を印字\n</pre></div>\n</div>\n<p>このような <code class=\"docutils literal notranslate\"><span class=\"pre\">argsprint.py</span></code> を先の例のように実行すると、以下の画像のような結果が得られます。リスト <code class=\"docutils literal notranslate\"><span class=\"pre\">sys.argv</span></code> に2番目の要素として文字列 <code class=\"docutils literal notranslate\"><span class=\"pre\">firstvalue</span></code> が、3番目の要素として文字列 <code class=\"docutils literal notranslate\"><span class=\"pre\">secondvalue</span></code> が、4番目の要素として文字列 <code class=\"docutils literal notranslate\"><span class=\"pre\">thirdvalue</span></code> が格納されていることを確認してください。また、リストの最初の要素には、実行したスクリプト名（ここでは <code class=\"docutils literal notranslate\"><span class=\"pre\">argsprint.py</span></code>）が格納されることに注意してください。</p>\n<p><img alt=\"fig/argsprint.png\" src=\"../_images/argsprint.png\" /></p>\n<section id=\"練習\">\n<h3>練習<a class=\"headerlink\" href=\"#練習\" title=\"Link to this heading\">¶</a></h3>\n<p>上記に従って <code class=\"docutils literal notranslate\"><span class=\"pre\">argsprint.py</span></code> ファイルを作成して、引数を変更したり、引数の数を増やしたり減らしたりして、表示がどう変わるか調べてください。</p>\n</section>\n<section id=\"id4\">\n<h3>練習<a class=\"headerlink\" href=\"#id4\" title=\"Link to this heading\">¶</a></h3>\n<p>コマンドライン実行時に、コマンドライン引数の1番目を印字 (print) する <code class=\"docutils literal notranslate\"><span class=\"pre\">arg1.py</span></code> を作成せよ。</p>\n</section>\n<section id=\"id5\">\n<h3>練習<a class=\"headerlink\" href=\"#id5\" title=\"Link to this heading\">¶</a></h3>\n<p>コマンドライン実行時に、スクリプト名を印字する <code class=\"docutils literal notranslate\"><span class=\"pre\">scriptname.py</span></code> を作成してください。</p>\n</section>\n<section id=\"id6\">\n<h3>練習<a class=\"headerlink\" href=\"#id6\" title=\"Link to this heading\">¶</a></h3>\n<p>コマンドライン実行時に、コマンドライン引数の数を印字する <code class=\"docutils literal notranslate\"><span class=\"pre\">numargs.py</span></code> を作成してください。</p>\n</section>\n<section id=\"id7\">\n<h3>練習<a class=\"headerlink\" href=\"#id7\" title=\"Link to this heading\">¶</a></h3>\n<p>コマンドライン引数として与えられた任意個の整数の和を印字する <code class=\"docutils literal notranslate\"><span class=\"pre\">sum.py</span></code> を作成してください。</p>\n<p>たとえば、次のように実行すると、</p>\n<div class=\"highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>&gt;&gt;&gt; python sum.py 1 2 3\n</pre></div>\n</div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">6</span></code> と印字されます。</p>\n<p>なお、コマンドライン引数は文字列型であることに注意してください。。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[2]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">v1</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;100&#39;</span>\n<span class=\"n\">v2</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;200&#39;</span>\n<span class=\"nb\">int</span><span class=\"p\">(</span><span class=\"n\">v1</span><span class=\"p\">)</span> <span class=\"o\">+</span> <span class=\"nb\">int</span><span class=\"p\">(</span><span class=\"n\">v2</span><span class=\"p\">)</span> <span class=\"c1\"># 整数加算</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[2]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n300\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[3]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">v1</span> <span class=\"o\">+</span> <span class=\"n\">v2</span> <span class=\"c1\"># 文字列結合</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[3]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n&#39;100200&#39;\n</pre></div></div>\n</div>\n</section>\n</section>\n<section id=\"モジュールのコマンドライン実行\">\n<h2>モジュールのコマンドライン実行<a class=\"headerlink\" href=\"#モジュールのコマンドライン実行\" title=\"Link to this heading\">¶</a></h2>\n<p>さて、モジュールファイルは、それ自体が単独で実行可能であると述べました。 つまり、Pythonソースファイルは、モジュールとしてインポートされる場合と、スクリプトとしてコマンドライン実行される場合の2通りが考えられるわけです。</p>\n<p>あるモジュールが、インポートされたのか、スクリプトとしてコマンドライン実行されたのかは、プログラム中の <code class=\"docutils literal notranslate\"><span class=\"pre\">__name__</span></code> という組み込み変数を参照することで区別できます。</p>\n<p>具体的には、モジュール <code class=\"docutils literal notranslate\"><span class=\"pre\">mod.py</span></code> がコマンドライン実行されたとき、<code class=\"docutils literal notranslate\"><span class=\"pre\">__name__</span></code> の値は <code class=\"docutils literal notranslate\"><span class=\"pre\">'__main__'</span></code> になります。 一方、<code class=\"docutils literal notranslate\"><span class=\"pre\">import</span> <span class=\"pre\">mod</span></code> されたとき、<code class=\"docutils literal notranslate\"><span class=\"pre\">__name__</span></code> の値は <code class=\"docutils literal notranslate\"><span class=\"pre\">'mod'</span></code> になります。</p>\n<p>これを利用することで、インポートされた場合とコマンドライン実行された場合で、モジュールの振舞いを変えることができます。 たとえば、次に示す <code class=\"docutils literal notranslate\"><span class=\"pre\">factorial.py</span></code> モジュールを考えます。</p>\n<p>factorial.py:</p>\n<div class=\"highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>import sys\n\n# 階乗n!を返す\ndef fact(n):\n    prod = 1\n    for i in range(1, n + 1):\n        prod *= i\n    return prod\n\nif __name__ == &#39;__main__&#39;:\n    n = int(sys.argv[1]) # 整数nが1番目のコマンドライン引数で与えられる\n    print(fact(n))       # n!を印字\n</pre></div>\n</div>\n<p>これに対して、<code class=\"docutils literal notranslate\"><span class=\"pre\">import</span> <span class=\"pre\">factorial</span></code> すると、階乗を計算する関数 <code class=\"docutils literal notranslate\"><span class=\"pre\">factorial.fact()</span></code> が利用できるようになります。 一方、<code class=\"docutils literal notranslate\"><span class=\"pre\">python</span> <span class=\"pre\">factorial.py</span> <span class=\"pre\">6</span></code> とコマンドライン実行すると、6の階乗である <code class=\"docutils literal notranslate\"><span class=\"pre\">720</span></code> が印字されます。 つまり、このモジュールは、階乗を計算するライブラリとしても、階乗を計算するスクリプトとしても利用できるわけです。</p>\n<p>もし <code class=\"docutils literal notranslate\"><span class=\"pre\">if</span> <span class=\"pre\">__name__</span> <span class=\"pre\">==</span> <span class=\"pre\">'__main__'</span></code> の条件分岐が無かったら、モジュールとしてインポートしたときに、インポート元のスクリプトのために与えられたコマンドライン引数を使って、階乗を計算・印字しようとします。 これは一般に、望ましい振舞いではありません。</p>\n<p>このように、<code class=\"docutils literal notranslate\"><span class=\"pre\">if</span> <span class=\"pre\">__name__</span> <span class=\"pre\">==</span> <span class=\"pre\">'__main__'</span></code> の分岐中には、自己完結したスクリプトとしての振舞いが記述されます。</p>\n<p>ライブラリモジュールとして使うことのみが想定されている場合、テストコードが記述されることもあります。 たとえば、次のように記述すると、</p>\n<p>factorial.py:</p>\n<div class=\"highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>import sys\n\n# 階乗n!を返す\ndef fact(n):\n    prod = 1\n    for i in range(1, n + 1):\n        prod *= i\n    return prod\n\nif __name__ == &#39;__main__&#39;:\n    print(&#39;test n = 6:&#39;, fact(6) == 720)\n    print(&#39;test n = 0:&#39;, fact(0) == 1)\n</pre></div>\n</div>\n<p>コマンドライン実行したときには、<code class=\"docutils literal notranslate\"><span class=\"pre\">fact()</span></code> が正しく計算されているかテストした結果が印字されます。 このテストコードは、ライブラリモジュールとしてimportして利用するときには実行されません。 このようにすると、1つのPythonソースファイルの中で、ライブラリ実装とテストをひとまとめにできて、保守しやすくなります。</p>\n</section>\n<section id=\"ソースファイル先頭部分にある宣言\">\n<h2>ソースファイル先頭部分にある宣言<a class=\"headerlink\" href=\"#ソースファイル先頭部分にある宣言\" title=\"Link to this heading\">¶</a></h2>\n<section id=\"文字コード宣言\">\n<h3>文字コード宣言<a class=\"headerlink\" href=\"#文字コード宣言\" title=\"Link to this heading\">¶</a></h3>\n<p>PythonソースコードはUTF-8で記述することが<a class=\"reference external\" href=\"https://www.python.org/dev/peps/pep-0008/#source-file-encoding\">公式に推奨されています</a>。</p>\n<p>しかし、特にWindows環境では、歴史的事情からShift_JIS (shift_jis) が使われることがあります。 このとき、Pythonソースファイルの先頭部分には、次のような<strong>文字コード宣言</strong>が必要です。</p>\n<div class=\"highlight-none notranslate\"><div class=\"highlight\"><pre><span></span># -*- coding: shift_jis -*-\n</pre></div>\n</div>\n<p>これがないと、Pythonインタプリタがエラーを出して止まります。</p>\n<p>なお、UTF-8で記述されている場合には、文字コード宣言を記述しないことが<a class=\"reference external\" href=\"https://www.python.org/dev/peps/pep-0008/#source-file-encoding\">公式に推奨されています</a>。</p>\n</section>\n<section id=\"shebang\">\n<h3>shebang<a class=\"headerlink\" href=\"#shebang\" title=\"Link to this heading\">¶</a></h3>\n<p>Unix環境（macOSを含む）では、スクリプトファイルの先頭行には、そのスクリプトを実行するコマンドを指定できるようになっています。 この先頭行のことは、<strong>shebang</strong>と呼ばれます。</p>\n<p>Unix環境でPythonスクリプトに用いられる標準的なshebangは次です。</p>\n<div class=\"highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>#!/usr/bin/env python3\n</pre></div>\n</div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">#!</span></code> に続く部分で、コマンドを絶対パスで指定します。 <code class=\"docutils literal notranslate\"><span class=\"pre\">env</span></code> コマンドは、その引数（ここでは <code class=\"docutils literal notranslate\"><span class=\"pre\">python3</span></code>）の名前のコマンドを、環境の中から探して実行します。 したがって、上のように記述すると、Pythonインタプリタがインストールされている場所を気にせずに、Unix環境におけるPython3系列の標準コマンド名である <code class=\"docutils literal notranslate\"><span class=\"pre\">python3</span></code> を使って実行できるようになります。</p>\n<p>shebangと文字コード宣言の両方を含む場合は、たとえば、次のようになります。</p>\n<div class=\"highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>#!/usr/bin/env python3\n# -*- coding: shift_jis -*-\n</pre></div>\n</div>\n</section>\n</section>\n<section id=\"練習の解答\">\n<h2>練習の解答<a class=\"headerlink\" href=\"#練習の解答\" title=\"Link to this heading\">¶</a></h2>\n<p>各セルのコードを保存した <code class=\"docutils literal notranslate\"><span class=\"pre\">.py</span></code> ファイルが解答です。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[4]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"c1\">#arg1.py</span>\n<span class=\"kn\">import</span> <span class=\"nn\">sys</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">sys</span><span class=\"o\">.</span><span class=\"n\">argv</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">])</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n-f\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[5]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"c1\">#scriptname.py</span>\n<span class=\"kn\">import</span> <span class=\"nn\">sys</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">sys</span><span class=\"o\">.</span><span class=\"n\">argv</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">])</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n/Users/jmori/Projects/utpython/lib/python3.12/site-packages/ipykernel_launcher.py\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[6]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"c1\">#numargs.py</span>\n<span class=\"kn\">import</span> <span class=\"nn\">sys</span>\n<span class=\"n\">num</span> <span class=\"o\">=</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">sys</span><span class=\"o\">.</span><span class=\"n\">argv</span><span class=\"p\">)</span> <span class=\"o\">-</span> <span class=\"mi\">1</span> <span class=\"c1\"># sys.argv[0]はコマンドライン引数ではないので1減らす</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">num</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n3\n</pre></div></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[7]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"c1\">#sum.py</span>\n<span class=\"kn\">import</span> <span class=\"nn\">sys</span>\n<span class=\"n\">s</span> <span class=\"o\">=</span> <span class=\"mi\">0</span>\n<span class=\"k\">for</span> <span class=\"n\">v</span> <span class=\"ow\">in</span> <span class=\"n\">sys</span><span class=\"o\">.</span><span class=\"n\">argv</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">:]:</span>\n    <span class=\"n\">s</span> <span class=\"o\">+=</span> <span class=\"nb\">int</span><span class=\"p\">(</span><span class=\"n\">v</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">s</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n<span class=\"ansi-red-fg\">---------------------------------------------------------------------------</span>\n<span class=\"ansi-red-fg\">ValueError</span>                                Traceback (most recent call last)\nCell <span class=\"ansi-green-fg\">In[7], line 5</span>\n<span class=\"ansi-green-intense-fg ansi-bold\">      3</span> s <span style=\"color: rgb(98,98,98)\">=</span> <span style=\"color: rgb(98,98,98)\">0</span>\n<span class=\"ansi-green-intense-fg ansi-bold\">      4</span> <span class=\"ansi-bold\" style=\"color: rgb(0,135,0)\">for</span> v <span class=\"ansi-bold\" style=\"color: rgb(175,0,255)\">in</span> sys<span style=\"color: rgb(98,98,98)\">.</span>argv[<span style=\"color: rgb(98,98,98)\">1</span>:]:\n<span class=\"ansi-green-fg\">----&gt; 5</span>     s <span style=\"color: rgb(98,98,98)\">+</span><span style=\"color: rgb(98,98,98)\">=</span> <span class=\"ansi-yellow-bg\" style=\"color: rgb(0,135,0)\">int</span><span class=\"ansi-yellow-bg\">(</span><span class=\"ansi-yellow-bg\">v</span><span class=\"ansi-yellow-bg\">)</span>\n<span class=\"ansi-green-intense-fg ansi-bold\">      6</span> <span style=\"color: rgb(0,135,0)\">print</span>(s)\n\n<span class=\"ansi-red-fg\">ValueError</span>: invalid literal for int() with base 10: &#39;-f&#39;\n</pre></div></div>\n</div>\n</section>\n</section>\n\n\n          </div>\n          \n        </div>\n      </div>\n      <div class=\"sphinxsidebar\" role=\"navigation\" aria-label=\"Main\">\n        <div class=\"sphinxsidebarwrapper\">\n<h1 class=\"logo\"><a href=\"../index.html\">Pythonプログラミング入門</a></h1>\n\n\n\n\n\n\n\n\n<p>\n  <a style=\"font-family: sans-serif; font-size: smaller; background: linear-gradient(to top, #353535 0%, #141414 100%); -webkit-font-smoothing: antialiased; font-weight: normal; text-shadow: rgb(0 0 0 / 40%) 0 -1px 0; padding: 2px 6px; color: #fff; text-decoration: none; border-radius: 4px; border: 1px solid #0d0d0d; box-shadow: inset 0 1px 1px 0 #8f8f8f;\" href=\"https://github.com/utokyo-ipp/utokyo-ipp.github.io\">View on GitHub</a>\n</p><p>\n  <a style=\"font-family: sans-serif; font-size: smaller; background: linear-gradient(to top, #ff1e00 0%, #de1e00 100%); -webkit-font-smoothing: antialiased; font-weight: normal; text-shadow: rgb(0 0 0 / 40%) 0 -1px 0; padding: 2px 6px; color: #fff; text-decoration: none; border-radius: 4px; border: 1px solid #0d0d0d; box-shadow: inset 0 1px 1px 0 #ff8e70;\" href=\"https://utokyo-ipp.github.io/IPP_textbook.pdf\">View PDF</a>\n</p><p>\n  <a style=\"border-bottom: none;\" href=\"https://colab.research.google.com/github/utokyo-ipp/utokyo-ipp.github.io/blob/master/colab/appendix/5-command.ipynb\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Google Colaboratory\"></a>\n</p><h3>Navigation</h3>\n<ul class=\"current\">\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../1/1-0.html\">1-0. Colaboratory (Colab) の使い方</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../1/1-1.html\">1-1. 数値演算</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../1/1-2.html\">1-2. 変数と関数の基礎</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../1/1-3.html\">1-3. 論理・比較演算と条件分岐の基礎</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../1/1-4.html\">1-4. テストとデバッグ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../2/2-1.html\">2-1. 文字列 (string)</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../2/2-2.html\">2-2. リスト (list)</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../2/2-3.html\">2-3. 条件分岐</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../3/3-1.html\">3-1. 辞書 (dictionary)</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../3/3-2.html\">3-2. 繰り返し</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../3/3-3.html\">3-3. 関数</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../4/4-1.html\">4-1. ファイル入出力の基本</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../4/4-2.html\">4-2. イテラブルとイテレータ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../4/4-3.html\">4-3. ディレクトリと木構造</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../5/5-1.html\">5-1. モジュールの使い方</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../5/5-2.html\">5-2. モジュールの作り方</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../5/5-3.html\">5-3. NumPyライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../6/6-1.html\">6-1. 内包表記</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../6/6-2.html\">6-2. 高階関数</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../6/6-3.html\">6-3. クラス</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../7/7-1.html\">7-1. pandasライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../7/7-2.html\">7-2. scikit-learnライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"1-jupyter-notebook.html\">▲Jupyter Notebook の使い方</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"2-set.html\">▲セット (set)</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"3-recursion.html\">▲再帰</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"3-visualization.html\">▲簡単なデータの可視化</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"4-csv.html\">▲CSVファイルの入出力</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"5-bokeh.html\">▲Bokehライブラリ</a></li>\n<li class=\"toctree-l1 current\"><a class=\"current reference internal\" href=\"#\">▲Pythonスクリプトとコマンドライン実行</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#コマンドライン実行の具体例\">コマンドライン実行の具体例</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#コマンドライン引数\">コマンドライン引数</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#モジュールのコマンドライン実行\">モジュールのコマンドライン実行</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#ソースファイル先頭部分にある宣言\">ソースファイル先頭部分にある宣言</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#練習の解答\">練習の解答</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"5-matplotlib.html\">▲Matplotlibライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"5-re.html\">▲正規表現</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../index_of_terms.html\">索引</a></li>\n</ul>\n\n<div class=\"relations\">\n<h3>Related Topics</h3>\n<ul>\n  <li><a href=\"../index.html\">Documentation overview</a><ul>\n      <li>Previous: <a href=\"5-bokeh.html\" title=\"previous chapter\">▲Bokehライブラリ</a></li>\n      <li>Next: <a href=\"5-matplotlib.html\" title=\"next chapter\">▲Matplotlibライブラリ</a></li>\n  </ul></li>\n</ul>\n</div>\n<search id=\"searchbox\" style=\"display: none\" role=\"search\">\n  <h3 id=\"searchlabel\">Quick search</h3>\n    <div class=\"searchformwrapper\">\n    <form class=\"search\" action=\"../search.html\" method=\"get\">\n      <input type=\"text\" name=\"q\" aria-labelledby=\"searchlabel\" autocomplete=\"off\" autocorrect=\"off\" autocapitalize=\"off\" spellcheck=\"false\"/>\n      <input type=\"submit\" value=\"Go\" />\n    </form>\n    </div>\n</search>\n<script>document.getElementById('searchbox').style.display = \"block\"</script>\n\n\n\n\n\n\n\n\n        </div>\n      </div>\n      <div class=\"clearer\"></div>\n    </div>\n    <div class=\"footer\">\n      &#169;2020–2024, 東京大学 数理・情報教育研究センター (CC BY-NC-ND 4.0).\n      \n      |\n      Powered by <a href=\"https://www.sphinx-doc.org/\">Sphinx 8.0.2</a>\n      &amp; <a href=\"https://alabaster.readthedocs.io\">Alabaster 1.0.0</a>\n      \n    </div>\n\n    \n\n    \n    <script>\n\n      var _gaq = _gaq || [];\n      _gaq.push(['_setAccount', 'G-8M0RXGPPSR']);\n      _gaq.push(['_setDomainName', 'none']);\n      _gaq.push(['_setAllowLinker', true]);\n      _gaq.push(['_trackPageview']);\n\n      (function() {\n        var ga = document.createElement('script'); ga.async = true;\n        ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'https://www') + '.google-analytics.com/ga.js';\n        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);\n      })();\n\n    </script>\n    \n  </body>\n</html>"
  },
  {
    "path": "docs/appendix/5-matplotlib.html",
    "content": "<!DOCTYPE html>\n\n<html lang=\"jp\" data-content_root=\"../\">\n  <head>\n    <meta charset=\"utf-8\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" /><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n\n    <!-- Google tag (gtag.js) -->\n    <script async src=\"https://www.googletagmanager.com/gtag/js?id=G-8M0RXGPPSR\"></script>\n    <script>\n        window.dataLayer = window.dataLayer || [];\n        function gtag(){dataLayer.push(arguments);}\n        gtag('js', new Date());\n        gtag('config', 'G-8M0RXGPPSR');\n    </script>\n    \n    <title>▲Matplotlibライブラリ &#8212; Pythonプログラミング入門  documentation</title>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/pygments.css?v=d1102ebc\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/basic.css?v=c058f7c8\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/alabaster.css?v=27fed22d\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/nbsphinx-code-cells.css\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/custom.css?v=1a1aa8dd\" />\n    <script src=\"../_static/documentation_options.js?v=3ff7d7a7\"></script>\n    <script src=\"../_static/doctools.js?v=9a2dae69\"></script>\n    <script src=\"../_static/sphinx_highlight.js?v=dc90522c\"></script>\n    <script crossorigin=\"anonymous\" integrity=\"sha256-Ae2Vz/4ePdIu6ZyI/5ZGsYnb+m0JlOmKPjt6XZ9JJkA=\" src=\"https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.4/require.min.js\"></script>\n    <script>window.MathJax = {\"tex\": {\"inlineMath\": [[\"$\", \"$\"], [\"\\\\(\", \"\\\\)\"]], \"processEscapes\": true}, \"options\": {\"ignoreHtmlClass\": \"tex2jax_ignore|mathjax_ignore|document\", \"processHtmlClass\": \"tex2jax_process|mathjax_process|math|output_area\"}}</script>\n    <script defer=\"defer\" src=\"https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js\"></script>\n    <link rel=\"index\" title=\"Index\" href=\"../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../search.html\" />\n    <link rel=\"next\" title=\"▲正規表現\" href=\"5-re.html\" />\n    <link rel=\"prev\" title=\"▲Pythonスクリプトとコマンドライン実行\" href=\"5-command.html\" />\n   \n  <link rel=\"stylesheet\" href=\"../_static/custom.css\" type=\"text/css\" />\n  \n\n  \n  \n\n  </head><body>\n  \n\n    <div class=\"document\">\n      <div class=\"documentwrapper\">\n        <div class=\"bodywrapper\">\n          \n\n          <div class=\"body\" role=\"main\">\n            \n  <section id=\"▲Matplotlibライブラリ\">\n<h1>▲Matplotlibライブラリ<a class=\"headerlink\" href=\"#▲Matplotlibライブラリ\" title=\"Link to this heading\">¶</a></h1>\n<p>Matplotlibライブラリについて説明します。</p>\n<p>参考</p>\n<ul class=\"simple\">\n<li><p><a class=\"reference external\" href=\"https://matplotlib.org/\">https://matplotlib.org/</a></p></li>\n</ul>\n<p><strong>Matplotlib</strong>ライブラリにはグラフを可視化するためのモジュールが含まれています。以下では、Matplotlibライブラリのモジュールを使った、グラフの基本的な描画について説明します。</p>\n<p>Matoplotlibライブラリを使用するには、まず <code class=\"docutils literal notranslate\"><span class=\"pre\">matplotlib</span></code> のモジュールをインポートします。ここでは、基本的なグラフを描画するための <code class=\"docutils literal notranslate\"><span class=\"pre\">matplotlib.pyplot</span></code> モジュールをインポートします。慣例として、同モジュールを <code class=\"docutils literal notranslate\"><span class=\"pre\">plt</span></code> と別名をつけてコードの中で使用します。また、グラフで可視化するデータはリストや配列を用いることが多いため、5-3で使用した <code class=\"docutils literal notranslate\"><span class=\"pre\">numpy</span></code> モジュールも併せてインポートします。なお、<code class=\"docutils literal notranslate\"><span class=\"pre\">%matplotlib</span> <span class=\"pre\">inline</span></code> はノートブック内でグラフを表示するために必要です。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">matplotlib</span></code> では、通常 <code class=\"docutils literal notranslate\"><span class=\"pre\">show()</span></code> 関数を呼ぶと描画を行いますが、<code class=\"docutils literal notranslate\"><span class=\"pre\">inline</span></code> 表示指定の場合、<code class=\"docutils literal notranslate\"><span class=\"pre\">show()</span></code> 関数を省略できます。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[1]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"kn\">import</span> <span class=\"nn\">numpy</span> <span class=\"k\">as</span> <span class=\"nn\">np</span>\n<span class=\"kn\">import</span> <span class=\"nn\">matplotlib.pyplot</span> <span class=\"k\">as</span> <span class=\"nn\">plt</span>\n<span class=\"o\">%</span><span class=\"k\">matplotlib</span> inline\n</pre></div>\n</div>\n</div>\n<section id=\"線グラフ\">\n<h2>線グラフ<a class=\"headerlink\" href=\"#線グラフ\" title=\"Link to this heading\">¶</a></h2>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">pyplot</span></code> モジュールの <code class=\"docutils literal notranslate\"><span class=\"pre\">plot()</span></code> 関数を用いて、リストの要素の数値をy軸の値として<strong>グラフ</strong>を描画します。y軸の値に対応するx軸の値は、リストの各要素のインデックスとなっています。</p>\n<p>具体的には、次のようにすることで <code class=\"docutils literal notranslate\"><span class=\"pre\">リストA</span></code> のインデックス <code class=\"docutils literal notranslate\"><span class=\"pre\">i</span></code> に対して、<code class=\"docutils literal notranslate\"><span class=\"pre\">(i,</span> <span class=\"pre\">リストA[i])</span></code> の位置に点を打ち、各点を線でつなぎます。</p>\n<div class=\"highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>plt.plot(リストA)\n</pre></div>\n</div>\n<p>たとえば、次のようになります。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[2]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"c1\"># plotするデータ</span>\n<span class=\"n\">d</span> <span class=\"o\">=</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">4</span><span class=\"p\">,</span> <span class=\"mi\">9</span><span class=\"p\">,</span> <span class=\"mi\">16</span><span class=\"p\">]</span>\n\n<span class=\"c1\"># plot関数で描画</span>\n<span class=\"n\">plt</span><span class=\"o\">.</span><span class=\"n\">plot</span><span class=\"p\">(</span><span class=\"n\">d</span><span class=\"p\">);</span>\n<span class=\"c1\"># セルの最後に評価されたオブジェクトの出力表示を抑制するために、以下ではセルの最後の行にセミコロン (`;`) をつけています。</span>\n<span class=\"c1\"># 試しにセミコロンを消した場合も試してみてください。</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<img alt=\"../_images/appendix_5-matplotlib_3_0.png\" src=\"../_images/appendix_5-matplotlib_3_0.png\" />\n</div>\n</div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">plot()</span></code> 関数では、x, y の両方の軸の値を引数に渡すこともできます。</p>\n<p>具体的には、次のように <code class=\"docutils literal notranslate\"><span class=\"pre\">リストX</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">リストY</span></code> を引数として与えると、各 <code class=\"docutils literal notranslate\"><span class=\"pre\">i</span></code> に対して、 <code class=\"docutils literal notranslate\"><span class=\"pre\">(リストX[i],</span> <span class=\"pre\">リストY[i])</span></code> の位置に点を打ち、各点を線でつなぎます。</p>\n<div class=\"highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>plt.plot(リストX, リストY)\n</pre></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[3]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"c1\"># plotするデータ</span>\n<span class=\"n\">x</span> <span class=\"o\">=</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"mi\">3</span><span class=\"p\">,</span> <span class=\"mi\">4</span><span class=\"p\">]</span>\n<span class=\"n\">y</span> <span class=\"o\">=</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"mi\">3</span><span class=\"p\">,</span> <span class=\"mi\">6</span><span class=\"p\">,</span> <span class=\"mi\">9</span><span class=\"p\">,</span> <span class=\"mi\">12</span><span class=\"p\">]</span>\n\n<span class=\"c1\"># plot関数で描画</span>\n<span class=\"n\">plt</span><span class=\"o\">.</span><span class=\"n\">plot</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">,</span><span class=\"n\">y</span><span class=\"p\">);</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<img alt=\"../_images/appendix_5-matplotlib_5_0.png\" src=\"../_images/appendix_5-matplotlib_5_0.png\" />\n</div>\n</div>\n<p>リストの代わりに<strong>NumPy</strong>ライブラリの配列を与えても同じ結果が得られます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[4]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"c1\"># plotするデータ</span>\n<span class=\"n\">x</span> <span class=\"o\">=</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"mi\">3</span><span class=\"p\">,</span> <span class=\"mi\">4</span><span class=\"p\">]</span>\n<span class=\"n\">aryx</span> <span class=\"o\">=</span> <span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">array</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">)</span> <span class=\"c1\"># リストから配列を作成</span>\n<span class=\"n\">y</span> <span class=\"o\">=</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"mi\">3</span><span class=\"p\">,</span> <span class=\"mi\">6</span><span class=\"p\">,</span> <span class=\"mi\">9</span><span class=\"p\">,</span> <span class=\"mi\">12</span><span class=\"p\">]</span>\n<span class=\"n\">aryy</span> <span class=\"o\">=</span> <span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">array</span><span class=\"p\">(</span><span class=\"n\">y</span><span class=\"p\">)</span> <span class=\"c1\"># リストから配列を作成</span>\n\n<span class=\"c1\"># plot関数で描画</span>\n<span class=\"n\">plt</span><span class=\"o\">.</span><span class=\"n\">plot</span><span class=\"p\">(</span><span class=\"n\">aryx</span><span class=\"p\">,</span> <span class=\"n\">aryy</span><span class=\"p\">);</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<img alt=\"../_images/appendix_5-matplotlib_7_0.png\" src=\"../_images/appendix_5-matplotlib_7_0.png\" />\n</div>\n</div>\n<p>以下のようにグラフを複数まとめて表示することもできます。複数のグラフを表示すると、線ごとに異なる色が自動で割り当てられます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[5]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"c1\"># plotするデータ</span>\n<span class=\"n\">data</span> <span class=\"o\">=</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">4</span><span class=\"p\">,</span> <span class=\"mi\">9</span><span class=\"p\">,</span> <span class=\"mi\">16</span><span class=\"p\">]</span>\n<span class=\"n\">x</span> <span class=\"o\">=</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"mi\">3</span><span class=\"p\">,</span> <span class=\"mi\">4</span><span class=\"p\">]</span>\n<span class=\"n\">y</span> <span class=\"o\">=</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"mi\">3</span><span class=\"p\">,</span> <span class=\"mi\">4</span><span class=\"p\">]</span>\n<span class=\"c1\"># plot関数で描画。</span>\n<span class=\"n\">plt</span><span class=\"o\">.</span><span class=\"n\">plot</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">,</span> <span class=\"n\">y</span><span class=\"p\">)</span>\n<span class=\"n\">plt</span><span class=\"o\">.</span><span class=\"n\">plot</span><span class=\"p\">(</span><span class=\"n\">data</span><span class=\"p\">);</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<img alt=\"../_images/appendix_5-matplotlib_9_0.png\" src=\"../_images/appendix_5-matplotlib_9_0.png\" />\n</div>\n</div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">plot()</span></code> 関数ではグラフの線の色、形状、データポイントのマーカの種類を、それぞれ以下のように <code class=\"docutils literal notranslate\"><span class=\"pre\">linestyle</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">color</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">marker</span></code> 引数で指定して変更することができます。それぞれの引数で指定可能な値は以下を参照してください。</p>\n<ul class=\"simple\">\n<li><p><a class=\"reference external\" href=\"https://matplotlib.org/api/_as_gen/matplotlib.lines.Line2D.html#matplotlib.lines.Line2D.set_linestyle\">linestyle</a></p></li>\n<li><p><a class=\"reference external\" href=\"https://matplotlib.org/api/colors_api.html?highlight=color#module-matplotlib.colors\">color</a></p></li>\n<li><p><a class=\"reference external\" href=\"https://matplotlib.org/api/markers_api.html#module-matplotlib.markers\">marker</a></p></li>\n</ul>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[6]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"c1\"># plotするデータ</span>\n<span class=\"n\">data</span> <span class=\"o\">=</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">4</span><span class=\"p\">,</span> <span class=\"mi\">9</span><span class=\"p\">,</span> <span class=\"mi\">16</span><span class=\"p\">]</span>\n<span class=\"n\">x</span> <span class=\"o\">=</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"mi\">3</span><span class=\"p\">,</span> <span class=\"mi\">4</span><span class=\"p\">]</span>\n<span class=\"n\">y</span> <span class=\"o\">=</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"mi\">3</span><span class=\"p\">,</span> <span class=\"mi\">4</span><span class=\"p\">]</span>\n\n<span class=\"c1\"># plot関数で描画。線の形状、色、データポイントのマーカ指定</span>\n<span class=\"n\">plt</span><span class=\"o\">.</span><span class=\"n\">plot</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">,</span><span class=\"n\">y</span><span class=\"p\">,</span> <span class=\"n\">linestyle</span><span class=\"o\">=</span><span class=\"s1\">&#39;--&#39;</span><span class=\"p\">,</span> <span class=\"n\">color</span><span class=\"o\">=</span><span class=\"s1\">&#39;blue&#39;</span><span class=\"p\">,</span> <span class=\"n\">marker</span><span class=\"o\">=</span><span class=\"s1\">&#39;o&#39;</span><span class=\"p\">)</span>\n<span class=\"n\">plt</span><span class=\"o\">.</span><span class=\"n\">plot</span><span class=\"p\">(</span><span class=\"n\">data</span><span class=\"p\">,</span> <span class=\"n\">linestyle</span><span class=\"o\">=</span><span class=\"s1\">&#39;:&#39;</span><span class=\"p\">,</span> <span class=\"n\">color</span><span class=\"o\">=</span><span class=\"s1\">&#39;green&#39;</span><span class=\"p\">,</span> <span class=\"n\">marker</span><span class=\"o\">=</span><span class=\"s1\">&#39;*&#39;</span><span class=\"p\">);</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<img alt=\"../_images/appendix_5-matplotlib_11_0.png\" src=\"../_images/appendix_5-matplotlib_11_0.png\" />\n</div>\n</div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">plot()</span></code> 関数の <code class=\"docutils literal notranslate\"><span class=\"pre\">label</span></code> 引数にグラフの各線の凡例を文字列として渡し、<code class=\"docutils literal notranslate\"><span class=\"pre\">legend()</span></code> 関数を呼ぶことで、グラフ内に凡例を表示できます。<code class=\"docutils literal notranslate\"><span class=\"pre\">legend()</span></code> 関数の <code class=\"docutils literal notranslate\"><span class=\"pre\">loc</span></code> 引数で凡例を表示する位置を指定することができます。引数で指定可能な値は以下を参照してください。</p>\n<ul class=\"simple\">\n<li><p><a class=\"reference external\" href=\"https://matplotlib.org/api/_as_gen/matplotlib.pyplot.legend.html#matplotlib.pyplot.legend\">lengend()関数</a></p></li>\n</ul>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[7]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"c1\"># plotするデータ</span>\n<span class=\"n\">data</span> <span class=\"o\">=</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">4</span><span class=\"p\">,</span> <span class=\"mi\">9</span><span class=\"p\">,</span> <span class=\"mi\">16</span><span class=\"p\">]</span>\n<span class=\"n\">x</span> <span class=\"o\">=</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"mi\">3</span><span class=\"p\">,</span> <span class=\"mi\">4</span><span class=\"p\">]</span>\n<span class=\"n\">y</span> <span class=\"o\">=</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"mi\">3</span><span class=\"p\">,</span> <span class=\"mi\">4</span><span class=\"p\">]</span>\n\n<span class=\"c1\"># plot関数で描画。線の形状、色、データポイントのマーカ指定</span>\n<span class=\"n\">plt</span><span class=\"o\">.</span><span class=\"n\">plot</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">,</span><span class=\"n\">y</span><span class=\"p\">,</span> <span class=\"n\">linestyle</span><span class=\"o\">=</span><span class=\"s1\">&#39;--&#39;</span><span class=\"p\">,</span> <span class=\"n\">color</span><span class=\"o\">=</span><span class=\"s1\">&#39;blue&#39;</span><span class=\"p\">,</span> <span class=\"n\">marker</span><span class=\"o\">=</span><span class=\"s1\">&#39;o&#39;</span><span class=\"p\">,</span> <span class=\"n\">label</span><span class=\"o\">=</span><span class=\"s1\">&#39;linear&#39;</span><span class=\"p\">)</span>\n<span class=\"n\">plt</span><span class=\"o\">.</span><span class=\"n\">plot</span><span class=\"p\">(</span><span class=\"n\">data</span><span class=\"p\">,</span> <span class=\"n\">linestyle</span><span class=\"o\">=</span><span class=\"s1\">&#39;:&#39;</span><span class=\"p\">,</span> <span class=\"n\">color</span><span class=\"o\">=</span><span class=\"s1\">&#39;green&#39;</span><span class=\"p\">,</span> <span class=\"n\">marker</span><span class=\"o\">=</span><span class=\"s1\">&#39;*&#39;</span><span class=\"p\">,</span> <span class=\"n\">label</span><span class=\"o\">=</span><span class=\"s1\">&#39;quad&#39;</span><span class=\"p\">)</span>\n<span class=\"c1\">#凡例を表示</span>\n<span class=\"n\">plt</span><span class=\"o\">.</span><span class=\"n\">legend</span><span class=\"p\">();</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<img alt=\"../_images/appendix_5-matplotlib_13_0.png\" src=\"../_images/appendix_5-matplotlib_13_0.png\" />\n</div>\n</div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">pyplot</span></code> モジュールでは、以下のようにグラフのタイトルと各軸のラベルを指定して表示することができます。タイトル、x軸のラベル、y軸のラベル、はそれぞれ <code class=\"docutils literal notranslate\"><span class=\"pre\">title()</span></code> 関数、<code class=\"docutils literal notranslate\"><span class=\"pre\">xlabel()</span></code> 関数、<code class=\"docutils literal notranslate\"><span class=\"pre\">ylabel()</span></code> 関数に文字列を渡して指定します。また、<code class=\"docutils literal notranslate\"><span class=\"pre\">grid()</span></code> 関数を用いるとグリッドを併せて表示することもできます。グリッドを表示させたい場合は、<code class=\"docutils literal notranslate\"><span class=\"pre\">grid()</span></code> 関数に <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> を渡してください。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[8]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"c1\"># plotするデータ</span>\n<span class=\"n\">data</span> <span class=\"o\">=</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">4</span><span class=\"p\">,</span> <span class=\"mi\">9</span><span class=\"p\">,</span> <span class=\"mi\">16</span><span class=\"p\">]</span>\n<span class=\"n\">x</span> <span class=\"o\">=</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"mi\">3</span><span class=\"p\">,</span> <span class=\"mi\">4</span><span class=\"p\">]</span>\n<span class=\"n\">y</span> <span class=\"o\">=</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"mi\">3</span><span class=\"p\">,</span> <span class=\"mi\">4</span><span class=\"p\">]</span>\n\n<span class=\"c1\"># plot関数で描画。線の形状、色、データポイントのマーカ、凡例を指定</span>\n<span class=\"n\">plt</span><span class=\"o\">.</span><span class=\"n\">plot</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">,</span><span class=\"n\">y</span><span class=\"p\">,</span> <span class=\"n\">linestyle</span><span class=\"o\">=</span><span class=\"s1\">&#39;--&#39;</span><span class=\"p\">,</span> <span class=\"n\">color</span><span class=\"o\">=</span><span class=\"s1\">&#39;blue&#39;</span><span class=\"p\">,</span> <span class=\"n\">marker</span><span class=\"o\">=</span><span class=\"s1\">&#39;o&#39;</span><span class=\"p\">,</span> <span class=\"n\">label</span><span class=\"o\">=</span><span class=\"s1\">&#39;linear&#39;</span><span class=\"p\">)</span>\n<span class=\"n\">plt</span><span class=\"o\">.</span><span class=\"n\">plot</span><span class=\"p\">(</span><span class=\"n\">data</span><span class=\"p\">,</span> <span class=\"n\">linestyle</span><span class=\"o\">=</span><span class=\"s1\">&#39;:&#39;</span><span class=\"p\">,</span> <span class=\"n\">color</span><span class=\"o\">=</span><span class=\"s1\">&#39;green&#39;</span><span class=\"p\">,</span> <span class=\"n\">marker</span><span class=\"o\">=</span><span class=\"s1\">&#39;*&#39;</span><span class=\"p\">,</span> <span class=\"n\">label</span><span class=\"o\">=</span><span class=\"s1\">&#39;quad&#39;</span><span class=\"p\">)</span>\n<span class=\"n\">plt</span><span class=\"o\">.</span><span class=\"n\">legend</span><span class=\"p\">()</span>\n\n<span class=\"n\">plt</span><span class=\"o\">.</span><span class=\"n\">title</span><span class=\"p\">(</span><span class=\"s1\">&#39;My First Graph&#39;</span><span class=\"p\">)</span> <span class=\"c1\"># グラフのタイトル</span>\n<span class=\"n\">plt</span><span class=\"o\">.</span><span class=\"n\">xlabel</span><span class=\"p\">(</span><span class=\"s1\">&#39;x&#39;</span><span class=\"p\">)</span> <span class=\"c1\">#x軸のラベル</span>\n<span class=\"n\">plt</span><span class=\"o\">.</span><span class=\"n\">ylabel</span><span class=\"p\">(</span><span class=\"s1\">&#39;y&#39;</span><span class=\"p\">)</span> <span class=\"c1\">#y軸のラベル</span>\n<span class=\"n\">plt</span><span class=\"o\">.</span><span class=\"n\">grid</span><span class=\"p\">(</span><span class=\"kc\">True</span><span class=\"p\">);</span> <span class=\"c1\">#グリッドの表示</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<img alt=\"../_images/appendix_5-matplotlib_15_0.png\" src=\"../_images/appendix_5-matplotlib_15_0.png\" />\n</div>\n</div>\n<p>グラフを描画するときのプロット数を増やすことで任意の曲線のグラフを作成することもできます。以下では、<code class=\"docutils literal notranslate\"><span class=\"pre\">numpy</span></code> モジュールの <code class=\"docutils literal notranslate\"><span class=\"pre\">arange()</span></code> 関数を用いて、<span class=\"math notranslate nohighlight\">\\(- \\pi\\)</span> から <span class=\"math notranslate nohighlight\">\\(\\pi\\)</span> の範囲を <code class=\"docutils literal notranslate\"><span class=\"pre\">0.1</span></code> 刻みでx軸の値を配列として準備しています。そのx軸の値に対して、<code class=\"docutils literal notranslate\"><span class=\"pre\">numpy</span></code> モジュールの <code class=\"docutils literal notranslate\"><span class=\"pre\">cos()</span></code> 関数と <code class=\"docutils literal notranslate\"><span class=\"pre\">sin()</span></code> 関数を用いて、y軸の値をそれぞれ準備し、cosカーブとsinカーブを描画しています。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[9]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"c1\">#　グラフのx軸の値となる配列</span>\n<span class=\"n\">x</span> <span class=\"o\">=</span> <span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">arange</span><span class=\"p\">(</span><span class=\"o\">-</span><span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">pi</span><span class=\"p\">,</span> <span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">pi</span><span class=\"p\">,</span> <span class=\"mf\">0.1</span><span class=\"p\">)</span>\n\n<span class=\"c1\"># 上記配列をcos, sin関数に渡し, y軸の値として描画</span>\n<span class=\"n\">plt</span><span class=\"o\">.</span><span class=\"n\">plot</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">,</span><span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">cos</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">))</span>\n<span class=\"n\">plt</span><span class=\"o\">.</span><span class=\"n\">plot</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">,</span><span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">sin</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">))</span>\n\n<span class=\"n\">plt</span><span class=\"o\">.</span><span class=\"n\">title</span><span class=\"p\">(</span><span class=\"s1\">&#39;cos ans sin Curves&#39;</span><span class=\"p\">)</span>  <span class=\"c1\"># グラフのタイトル</span>\n<span class=\"n\">plt</span><span class=\"o\">.</span><span class=\"n\">xlabel</span><span class=\"p\">(</span><span class=\"s1\">&#39;x&#39;</span><span class=\"p\">)</span> <span class=\"c1\">#x軸のラベル</span>\n<span class=\"n\">plt</span><span class=\"o\">.</span><span class=\"n\">ylabel</span><span class=\"p\">(</span><span class=\"s1\">&#39;y&#39;</span><span class=\"p\">)</span> <span class=\"c1\">#y軸のラベル</span>\n<span class=\"n\">plt</span><span class=\"o\">.</span><span class=\"n\">grid</span><span class=\"p\">(</span><span class=\"kc\">True</span><span class=\"p\">);</span> <span class=\"c1\">#グリッドの表示</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<img alt=\"../_images/appendix_5-matplotlib_17_0.png\" src=\"../_images/appendix_5-matplotlib_17_0.png\" />\n</div>\n</div>\n<p>プロットの数を少なくすると、曲線は直線をつなぎ合わせることで描画されていることがわかります。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[10]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">x</span> <span class=\"o\">=</span> <span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">arange</span><span class=\"p\">(</span><span class=\"o\">-</span><span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">pi</span><span class=\"p\">,</span> <span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">pi</span><span class=\"p\">,</span> <span class=\"mf\">0.5</span><span class=\"p\">)</span>\n<span class=\"n\">plt</span><span class=\"o\">.</span><span class=\"n\">plot</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">,</span><span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">cos</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">),</span> <span class=\"n\">marker</span><span class=\"o\">=</span><span class=\"s1\">&#39;o&#39;</span><span class=\"p\">)</span>\n<span class=\"n\">plt</span><span class=\"o\">.</span><span class=\"n\">plot</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">,</span><span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">sin</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">),</span> <span class=\"n\">marker</span><span class=\"o\">=</span><span class=\"s1\">&#39;o&#39;</span><span class=\"p\">)</span>\n<span class=\"n\">plt</span><span class=\"o\">.</span><span class=\"n\">title</span><span class=\"p\">(</span><span class=\"s1\">&#39;cos ans sin Curves&#39;</span><span class=\"p\">)</span>\n<span class=\"n\">plt</span><span class=\"o\">.</span><span class=\"n\">xlabel</span><span class=\"p\">(</span><span class=\"s1\">&#39;x&#39;</span><span class=\"p\">)</span>\n<span class=\"n\">plt</span><span class=\"o\">.</span><span class=\"n\">ylabel</span><span class=\"p\">(</span><span class=\"s1\">&#39;y&#39;</span><span class=\"p\">)</span>\n<span class=\"n\">plt</span><span class=\"o\">.</span><span class=\"n\">grid</span><span class=\"p\">(</span><span class=\"kc\">True</span><span class=\"p\">);</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<img alt=\"../_images/appendix_5-matplotlib_19_0.png\" src=\"../_images/appendix_5-matplotlib_19_0.png\" />\n</div>\n</div>\n<section id=\"グラフの例：ソートアルゴリズムにおける比較回数\">\n<h3>グラフの例：ソートアルゴリズムにおける比較回数<a class=\"headerlink\" href=\"#グラフの例：ソートアルゴリズムにおける比較回数\" title=\"Link to this heading\">¶</a></h3>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[11]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"kn\">import</span> <span class=\"nn\">random</span>\n\n<span class=\"k\">def</span> <span class=\"nf\">bubble_sort</span><span class=\"p\">(</span><span class=\"n\">lst</span><span class=\"p\">):</span>\n    <span class=\"n\">n</span> <span class=\"o\">=</span> <span class=\"mi\">0</span>\n    <span class=\"k\">for</span> <span class=\"n\">j</span> <span class=\"ow\">in</span> <span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">lst</span><span class=\"p\">)</span> <span class=\"o\">-</span> <span class=\"mi\">1</span><span class=\"p\">):</span>\n        <span class=\"k\">for</span> <span class=\"n\">i</span> <span class=\"ow\">in</span> <span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">lst</span><span class=\"p\">)</span> <span class=\"o\">-</span> <span class=\"mi\">1</span> <span class=\"o\">-</span> <span class=\"n\">j</span><span class=\"p\">):</span>\n            <span class=\"n\">n</span> <span class=\"o\">=</span> <span class=\"n\">n</span> <span class=\"o\">+</span> <span class=\"mi\">1</span>\n            <span class=\"k\">if</span> <span class=\"n\">lst</span><span class=\"p\">[</span><span class=\"n\">i</span><span class=\"p\">]</span> <span class=\"o\">&gt;</span> <span class=\"n\">lst</span><span class=\"p\">[</span><span class=\"n\">i</span><span class=\"o\">+</span><span class=\"mi\">1</span><span class=\"p\">]:</span>\n                <span class=\"n\">lst</span><span class=\"p\">[</span><span class=\"n\">i</span> <span class=\"o\">+</span> <span class=\"mi\">1</span><span class=\"p\">],</span> <span class=\"n\">lst</span><span class=\"p\">[</span><span class=\"n\">i</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">lst</span><span class=\"p\">[</span><span class=\"n\">i</span><span class=\"p\">],</span> <span class=\"n\">lst</span><span class=\"p\">[</span><span class=\"n\">i</span><span class=\"o\">+</span><span class=\"mi\">1</span><span class=\"p\">]</span>\n    <span class=\"k\">return</span> <span class=\"n\">n</span>\n\n<span class=\"k\">def</span> <span class=\"nf\">merge_sort_rec</span><span class=\"p\">(</span><span class=\"n\">data</span><span class=\"p\">,</span> <span class=\"n\">l</span><span class=\"p\">,</span> <span class=\"n\">r</span><span class=\"p\">,</span> <span class=\"n\">work</span><span class=\"p\">):</span>\n    <span class=\"k\">if</span> <span class=\"n\">l</span><span class=\"o\">+</span><span class=\"mi\">1</span> <span class=\"o\">&gt;=</span> <span class=\"n\">r</span><span class=\"p\">:</span>\n        <span class=\"k\">return</span> <span class=\"mi\">0</span>\n    <span class=\"n\">m</span> <span class=\"o\">=</span> <span class=\"n\">l</span><span class=\"o\">+</span><span class=\"p\">(</span><span class=\"n\">r</span><span class=\"o\">-</span><span class=\"n\">l</span><span class=\"p\">)</span><span class=\"o\">//</span><span class=\"mi\">2</span>\n    <span class=\"n\">n1</span> <span class=\"o\">=</span> <span class=\"n\">merge_sort_rec</span><span class=\"p\">(</span><span class=\"n\">data</span><span class=\"p\">,</span> <span class=\"n\">l</span><span class=\"p\">,</span> <span class=\"n\">m</span><span class=\"p\">,</span> <span class=\"n\">work</span><span class=\"p\">)</span>\n    <span class=\"n\">n2</span> <span class=\"o\">=</span> <span class=\"n\">merge_sort_rec</span><span class=\"p\">(</span><span class=\"n\">data</span><span class=\"p\">,</span> <span class=\"n\">m</span><span class=\"p\">,</span> <span class=\"n\">r</span><span class=\"p\">,</span> <span class=\"n\">work</span><span class=\"p\">)</span>\n    <span class=\"n\">n</span> <span class=\"o\">=</span> <span class=\"mi\">0</span>\n    <span class=\"n\">i1</span> <span class=\"o\">=</span> <span class=\"n\">l</span>\n    <span class=\"n\">i2</span> <span class=\"o\">=</span> <span class=\"n\">m</span>\n    <span class=\"k\">for</span> <span class=\"n\">i</span> <span class=\"ow\">in</span> <span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"n\">l</span><span class=\"p\">,</span> <span class=\"n\">r</span><span class=\"p\">):</span>\n        <span class=\"n\">from1</span> <span class=\"o\">=</span> <span class=\"kc\">False</span>\n        <span class=\"k\">if</span> <span class=\"n\">i2</span> <span class=\"o\">&gt;=</span> <span class=\"n\">r</span><span class=\"p\">:</span>\n            <span class=\"n\">from1</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n        <span class=\"k\">elif</span> <span class=\"n\">i1</span> <span class=\"o\">&lt;</span> <span class=\"n\">m</span><span class=\"p\">:</span>\n            <span class=\"n\">n</span> <span class=\"o\">=</span> <span class=\"n\">n</span> <span class=\"o\">+</span> <span class=\"mi\">1</span>\n            <span class=\"k\">if</span> <span class=\"n\">data</span><span class=\"p\">[</span><span class=\"n\">i1</span><span class=\"p\">]</span> <span class=\"o\">&lt;=</span> <span class=\"n\">data</span><span class=\"p\">[</span><span class=\"n\">i2</span><span class=\"p\">]:</span>\n                <span class=\"n\">from1</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n        <span class=\"k\">if</span> <span class=\"n\">from1</span><span class=\"p\">:</span>\n            <span class=\"n\">work</span><span class=\"p\">[</span><span class=\"n\">i</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">data</span><span class=\"p\">[</span><span class=\"n\">i1</span><span class=\"p\">]</span>\n            <span class=\"n\">i1</span> <span class=\"o\">=</span> <span class=\"n\">i1</span> <span class=\"o\">+</span> <span class=\"mi\">1</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"n\">work</span><span class=\"p\">[</span><span class=\"n\">i</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">data</span><span class=\"p\">[</span><span class=\"n\">i2</span><span class=\"p\">]</span>\n            <span class=\"n\">i2</span> <span class=\"o\">=</span> <span class=\"n\">i2</span> <span class=\"o\">+</span> <span class=\"mi\">1</span>\n    <span class=\"k\">for</span> <span class=\"n\">i</span> <span class=\"ow\">in</span> <span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"n\">l</span><span class=\"p\">,</span> <span class=\"n\">r</span><span class=\"p\">):</span>\n        <span class=\"n\">data</span><span class=\"p\">[</span><span class=\"n\">i</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">work</span><span class=\"p\">[</span><span class=\"n\">i</span><span class=\"p\">]</span>\n    <span class=\"k\">return</span> <span class=\"n\">n1</span><span class=\"o\">+</span><span class=\"n\">n2</span><span class=\"o\">+</span><span class=\"n\">n</span>\n\n<span class=\"k\">def</span> <span class=\"nf\">merge_sort</span><span class=\"p\">(</span><span class=\"n\">data</span><span class=\"p\">):</span>\n    <span class=\"k\">return</span> <span class=\"n\">merge_sort_rec</span><span class=\"p\">(</span><span class=\"n\">data</span><span class=\"p\">,</span> <span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">data</span><span class=\"p\">),</span> <span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]</span><span class=\"o\">*</span><span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">data</span><span class=\"p\">))</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[12]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">x</span> <span class=\"o\">=</span> <span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">arange</span><span class=\"p\">(</span><span class=\"mi\">100</span><span class=\"p\">,</span> <span class=\"mi\">1100</span><span class=\"p\">,</span> <span class=\"mi\">100</span><span class=\"p\">)</span>\n<span class=\"n\">bdata</span> <span class=\"o\">=</span> <span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">array</span><span class=\"p\">([</span><span class=\"n\">bubble_sort</span><span class=\"p\">([</span><span class=\"n\">random</span><span class=\"o\">.</span><span class=\"n\">randint</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">,</span><span class=\"mi\">10000</span><span class=\"p\">)</span> <span class=\"k\">for</span> <span class=\"n\">i</span> <span class=\"ow\">in</span> <span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"n\">k</span><span class=\"p\">)])</span> <span class=\"k\">for</span> <span class=\"n\">k</span> <span class=\"ow\">in</span> <span class=\"n\">x</span><span class=\"p\">])</span>\n<span class=\"n\">mdata</span> <span class=\"o\">=</span> <span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">array</span><span class=\"p\">([</span><span class=\"n\">merge_sort</span><span class=\"p\">([</span><span class=\"n\">random</span><span class=\"o\">.</span><span class=\"n\">randint</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">,</span><span class=\"mi\">10000</span><span class=\"p\">)</span> <span class=\"k\">for</span> <span class=\"n\">i</span> <span class=\"ow\">in</span> <span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"n\">k</span><span class=\"p\">)])</span> <span class=\"k\">for</span> <span class=\"n\">k</span> <span class=\"ow\">in</span> <span class=\"n\">x</span><span class=\"p\">])</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[13]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">plt</span><span class=\"o\">.</span><span class=\"n\">plot</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">,</span> <span class=\"n\">bdata</span><span class=\"p\">,</span> <span class=\"n\">marker</span><span class=\"o\">=</span><span class=\"s1\">&#39;o&#39;</span><span class=\"p\">)</span>\n<span class=\"n\">plt</span><span class=\"o\">.</span><span class=\"n\">plot</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">,</span> <span class=\"n\">mdata</span><span class=\"p\">,</span> <span class=\"n\">marker</span><span class=\"o\">=</span><span class=\"s1\">&#39;o&#39;</span><span class=\"p\">)</span>\n<span class=\"n\">plt</span><span class=\"o\">.</span><span class=\"n\">title</span><span class=\"p\">(</span><span class=\"s1\">&#39;bubble sort vs. merge sort&#39;</span><span class=\"p\">)</span>\n<span class=\"n\">plt</span><span class=\"o\">.</span><span class=\"n\">xlabel</span><span class=\"p\">(</span><span class=\"s1\">&#39;number of items&#39;</span><span class=\"p\">)</span>\n<span class=\"n\">plt</span><span class=\"o\">.</span><span class=\"n\">ylabel</span><span class=\"p\">(</span><span class=\"s1\">&#39;number of comparisons&#39;</span><span class=\"p\">)</span>\n<span class=\"n\">plt</span><span class=\"o\">.</span><span class=\"n\">grid</span><span class=\"p\">(</span><span class=\"kc\">True</span><span class=\"p\">);</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<img alt=\"../_images/appendix_5-matplotlib_23_0.png\" src=\"../_images/appendix_5-matplotlib_23_0.png\" />\n</div>\n</div>\n</section>\n</section>\n<section id=\"練習\">\n<h2>練習<a class=\"headerlink\" href=\"#練習\" title=\"Link to this heading\">¶</a></h2>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">-2</span></code> から <code class=\"docutils literal notranslate\"><span class=\"pre\">2</span></code> の範囲を <code class=\"docutils literal notranslate\"><span class=\"pre\">0.1</span></code> 刻みでx軸の値を配列として作成し、そのx軸の値に対して <code class=\"docutils literal notranslate\"><span class=\"pre\">numpy</span></code> モジュールの <code class=\"docutils literal notranslate\"><span class=\"pre\">exp()</span></code> 関数を用いてy軸の値を作成し、<span class=\"math notranslate nohighlight\">\\(y=e^{x}\\)</span> のグラフを描画する関数 <code class=\"docutils literal notranslate\"><span class=\"pre\">plot_exp</span></code> を作成してください。ただし、そのグラフに任意のタイトル、x軸、y軸の任意のラベル、任意の凡例、グリッドを表示させてください。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[14]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"kn\">import</span> <span class=\"nn\">...</span>\n<span class=\"o\">...</span>\n<span class=\"k\">def</span> <span class=\"nf\">plot_exp</span><span class=\"p\">():</span>\n    <span class=\"o\">...</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n<span class=\"ansi-cyan-fg\">  Cell </span><span class=\"ansi-green-fg\">In[14], line 1</span>\n<span class=\"ansi-red-fg\">    import ...</span>\n           ^\n<span class=\"ansi-red-fg\">SyntaxError</span><span class=\"ansi-red-fg\">:</span> invalid syntax\n\n</pre></div></div>\n</div>\n<p>上のセルで解答を作成した後、以下のセルを実行し、実行結果が全て <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> になることを確認してください。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[15]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">res_x</span> <span class=\"o\">=</span> <span class=\"n\">plot_exp</span><span class=\"p\">()</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">res_x</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"mi\">41</span><span class=\"p\">,</span> <span class=\"nb\">int</span><span class=\"p\">(</span><span class=\"n\">res_x</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">])</span> <span class=\"o\">==</span> <span class=\"o\">-</span><span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"nb\">int</span><span class=\"p\">(</span><span class=\"n\">res_x</span><span class=\"p\">[</span><span class=\"mi\">9</span><span class=\"p\">])</span> <span class=\"o\">==</span> <span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n<span class=\"ansi-red-fg\">---------------------------------------------------------------------------</span>\n<span class=\"ansi-red-fg\">NameError</span>                                 Traceback (most recent call last)\nCell <span class=\"ansi-green-fg\">In[15], line 1</span>\n<span class=\"ansi-green-fg\">----&gt; 1</span> res_x <span style=\"color: rgb(98,98,98)\">=</span> <span class=\"ansi-yellow-bg\">plot_exp</span>()\n<span class=\"ansi-green-intense-fg ansi-bold\">      2</span> <span style=\"color: rgb(0,135,0)\">print</span>(<span style=\"color: rgb(0,135,0)\">len</span>(res_x) <span style=\"color: rgb(98,98,98)\">==</span> <span style=\"color: rgb(98,98,98)\">41</span>, <span style=\"color: rgb(0,135,0)\">int</span>(res_x[<span style=\"color: rgb(98,98,98)\">0</span>]) <span style=\"color: rgb(98,98,98)\">==</span> <span style=\"color: rgb(98,98,98)\">-</span><span style=\"color: rgb(98,98,98)\">2</span>, <span style=\"color: rgb(0,135,0)\">int</span>(res_x[<span style=\"color: rgb(98,98,98)\">9</span>]) <span style=\"color: rgb(98,98,98)\">==</span> <span style=\"color: rgb(98,98,98)\">-</span><span style=\"color: rgb(98,98,98)\">1</span>)\n\n<span class=\"ansi-red-fg\">NameError</span>: name &#39;plot_exp&#39; is not defined\n</pre></div></div>\n</div>\n</section>\n<section id=\"id4\">\n<h2>練習<a class=\"headerlink\" href=\"#id4\" title=\"Link to this heading\">¶</a></h2>\n<p>4-csvで説明したように、<code class=\"docutils literal notranslate\"><span class=\"pre\">tokyo-temps.csv</span></code> には、気象庁のオープンデータからダウンロードした、東京の平均気温のデータが入っています。具体的には、各行の第2列に気温の値が格納されており、47行目に1875年6月の、48行目に1875年7月の、…、53行目に1875年12月の、54行目に1876年1月の、…という風に2017年1月のデータまでが格納されています。</p>\n<p>そこで、2つの整数 <code class=\"docutils literal notranslate\"><span class=\"pre\">year</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">month</span></code> を引数として取り、 <code class=\"docutils literal notranslate\"><span class=\"pre\">year</span></code> 年以降の <code class=\"docutils literal notranslate\"><span class=\"pre\">month</span></code> 月の平均気温の値をy軸に、年をx軸に描画した線グラフを表示するとともに、描画したx軸とy軸の値をタプルに格納して返す関数 <code class=\"docutils literal notranslate\"><span class=\"pre\">plot_tokyotemps</span></code> を作成してください。</p>\n<p>以下のセルの <code class=\"docutils literal notranslate\"><span class=\"pre\">...</span></code> のところを書き換えて解答してください。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[16]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"kn\">import</span> <span class=\"nn\">...</span>\n<span class=\"o\">...</span>\n<span class=\"k\">def</span> <span class=\"nf\">plot_tokyotemps</span><span class=\"p\">(</span><span class=\"n\">year</span><span class=\"p\">,</span> <span class=\"n\">month</span><span class=\"p\">):</span>\n    <span class=\"o\">...</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n<span class=\"ansi-cyan-fg\">  Cell </span><span class=\"ansi-green-fg\">In[16], line 1</span>\n<span class=\"ansi-red-fg\">    import ...</span>\n           ^\n<span class=\"ansi-red-fg\">SyntaxError</span><span class=\"ansi-red-fg\">:</span> invalid syntax\n\n</pre></div></div>\n</div>\n<p>上のセルで解答を作成した後、以下のセルを実行し、実行結果が全て <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> になることを確認してください。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[17]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">res_years</span><span class=\"p\">,</span> <span class=\"n\">res_temps</span> <span class=\"o\">=</span> <span class=\"n\">plot_tokyotemps</span><span class=\"p\">(</span><span class=\"mi\">1875</span><span class=\"p\">,</span> <span class=\"mi\">7</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">res_years</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"mi\">142</span><span class=\"p\">,</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">res_temps</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"mi\">142</span><span class=\"p\">,</span> <span class=\"n\">res_years</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]</span> <span class=\"o\">==</span> <span class=\"mi\">1875</span><span class=\"p\">,</span> <span class=\"n\">res_temps</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]</span> <span class=\"o\">==</span> <span class=\"mf\">26.0</span><span class=\"p\">)</span>\n<span class=\"n\">res_years</span><span class=\"p\">,</span> <span class=\"n\">res_temps</span> <span class=\"o\">=</span> <span class=\"n\">plot_tokyotemps</span><span class=\"p\">(</span><span class=\"mi\">1875</span><span class=\"p\">,</span> <span class=\"mi\">6</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">res_years</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"mi\">142</span><span class=\"p\">,</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">res_temps</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"mi\">142</span><span class=\"p\">,</span> <span class=\"n\">res_years</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]</span> <span class=\"o\">==</span> <span class=\"mi\">1875</span><span class=\"p\">,</span> <span class=\"n\">res_temps</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]</span> <span class=\"o\">==</span> <span class=\"mf\">22.3</span><span class=\"p\">)</span>\n<span class=\"n\">res_years</span><span class=\"p\">,</span> <span class=\"n\">res_temps</span> <span class=\"o\">=</span> <span class=\"n\">plot_tokyotemps</span><span class=\"p\">(</span><span class=\"mi\">1875</span><span class=\"p\">,</span> <span class=\"mi\">12</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">res_years</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"mi\">142</span><span class=\"p\">,</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">res_temps</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"mi\">142</span><span class=\"p\">,</span> <span class=\"n\">res_years</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]</span> <span class=\"o\">==</span> <span class=\"mi\">1875</span><span class=\"p\">,</span> <span class=\"n\">res_temps</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]</span> <span class=\"o\">==</span> <span class=\"mf\">4.6</span><span class=\"p\">)</span>\n<span class=\"n\">res_years</span><span class=\"p\">,</span> <span class=\"n\">res_temps</span> <span class=\"o\">=</span> <span class=\"n\">plot_tokyotemps</span><span class=\"p\">(</span><span class=\"mi\">1876</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">res_years</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"mi\">142</span><span class=\"p\">,</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">res_temps</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"mi\">142</span><span class=\"p\">,</span> <span class=\"n\">res_years</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]</span> <span class=\"o\">==</span> <span class=\"mi\">1876</span><span class=\"p\">,</span> <span class=\"n\">res_temps</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]</span> <span class=\"o\">==</span> <span class=\"mf\">1.6</span><span class=\"p\">)</span>\n<span class=\"n\">res_years</span><span class=\"p\">,</span> <span class=\"n\">res_temps</span> <span class=\"o\">=</span> <span class=\"n\">plot_tokyotemps</span><span class=\"p\">(</span><span class=\"mi\">1876</span><span class=\"p\">,</span> <span class=\"mi\">6</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">res_years</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"mi\">141</span><span class=\"p\">,</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">res_temps</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"mi\">141</span><span class=\"p\">,</span> <span class=\"n\">res_years</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]</span> <span class=\"o\">==</span> <span class=\"mi\">1876</span><span class=\"p\">,</span> <span class=\"n\">res_temps</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]</span> <span class=\"o\">==</span> <span class=\"mf\">18.5</span><span class=\"p\">)</span>\n<span class=\"n\">res_years</span><span class=\"p\">,</span> <span class=\"n\">res_temps</span> <span class=\"o\">=</span> <span class=\"n\">plot_tokyotemps</span><span class=\"p\">(</span><span class=\"mi\">1900</span><span class=\"p\">,</span> <span class=\"mi\">6</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">res_years</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"mi\">117</span><span class=\"p\">,</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">res_temps</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"mi\">117</span><span class=\"p\">,</span> <span class=\"n\">res_years</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]</span> <span class=\"o\">==</span> <span class=\"mi\">1900</span><span class=\"p\">,</span> <span class=\"n\">res_temps</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]</span> <span class=\"o\">==</span> <span class=\"mf\">19.3</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n<span class=\"ansi-red-fg\">---------------------------------------------------------------------------</span>\n<span class=\"ansi-red-fg\">NameError</span>                                 Traceback (most recent call last)\nCell <span class=\"ansi-green-fg\">In[17], line 1</span>\n<span class=\"ansi-green-fg\">----&gt; 1</span> res_years, res_temps <span style=\"color: rgb(98,98,98)\">=</span> <span class=\"ansi-yellow-bg\">plot_tokyotemps</span>(<span style=\"color: rgb(98,98,98)\">1875</span>, <span style=\"color: rgb(98,98,98)\">7</span>)\n<span class=\"ansi-green-intense-fg ansi-bold\">      2</span> <span style=\"color: rgb(0,135,0)\">print</span>(<span style=\"color: rgb(0,135,0)\">len</span>(res_years) <span style=\"color: rgb(98,98,98)\">==</span> <span style=\"color: rgb(98,98,98)\">142</span>, <span style=\"color: rgb(0,135,0)\">len</span>(res_temps) <span style=\"color: rgb(98,98,98)\">==</span> <span style=\"color: rgb(98,98,98)\">142</span>, res_years[<span style=\"color: rgb(98,98,98)\">0</span>] <span style=\"color: rgb(98,98,98)\">==</span> <span style=\"color: rgb(98,98,98)\">1875</span>, res_temps[<span style=\"color: rgb(98,98,98)\">0</span>] <span style=\"color: rgb(98,98,98)\">==</span> <span style=\"color: rgb(98,98,98)\">26.0</span>)\n<span class=\"ansi-green-intense-fg ansi-bold\">      3</span> res_years, res_temps <span style=\"color: rgb(98,98,98)\">=</span> plot_tokyotemps(<span style=\"color: rgb(98,98,98)\">1875</span>, <span style=\"color: rgb(98,98,98)\">6</span>)\n\n<span class=\"ansi-red-fg\">NameError</span>: name &#39;plot_tokyotemps&#39; is not defined\n</pre></div></div>\n</div>\n</section>\n<section id=\"散布図\">\n<h2>散布図<a class=\"headerlink\" href=\"#散布図\" title=\"Link to this heading\">¶</a></h2>\n<p><strong>散布図</strong>は、<code class=\"docutils literal notranslate\"><span class=\"pre\">pyplot</span></code> モジュールの <code class=\"docutils literal notranslate\"><span class=\"pre\">scatter()</span></code> 関数を用いて描画できます。</p>\n<p>具体的には、次のように <code class=\"docutils literal notranslate\"><span class=\"pre\">リストX</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">リストY</span></code> （もしくは、 <code class=\"docutils literal notranslate\"><span class=\"pre\">配列X</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">配列Y</span></code>）を引数として与えると、各 <code class=\"docutils literal notranslate\"><span class=\"pre\">i</span></code> に対して、 <code class=\"docutils literal notranslate\"><span class=\"pre\">(リストX[i],</span> <span class=\"pre\">リストY[i])</span></code> の位置に点を打ちます。</p>\n<div class=\"highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>plt.scatter(リストX, リストY)\n</pre></div>\n</div>\n<p>以下では、ランダムに生成した20個の要素からなる配列 x, y の各要素の値の組を点としてプロットした散布図を表示しています。プロットする点のマーカの色や形状は、線グラフの時と同様に、 <code class=\"docutils literal notranslate\"><span class=\"pre\">color</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">marker</span></code> 引数で指定して変更することができます。加えて、<code class=\"docutils literal notranslate\"><span class=\"pre\">s</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">alpha</span></code> 引数で、それぞれマーカの大きさと透明度を指定することができます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[18]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"c1\">#　グラフのx軸の値となる配列</span>\n<span class=\"n\">x</span> <span class=\"o\">=</span> <span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">random</span><span class=\"o\">.</span><span class=\"n\">rand</span><span class=\"p\">(</span><span class=\"mi\">20</span><span class=\"p\">)</span>\n<span class=\"c1\">#　グラフのy軸の値となる配列</span>\n<span class=\"n\">y</span> <span class=\"o\">=</span> <span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">random</span><span class=\"o\">.</span><span class=\"n\">rand</span><span class=\"p\">(</span><span class=\"mi\">20</span><span class=\"p\">)</span>\n\n<span class=\"c1\"># scatter関数で散布図を描画</span>\n<span class=\"n\">plt</span><span class=\"o\">.</span><span class=\"n\">scatter</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">,</span> <span class=\"n\">y</span><span class=\"p\">,</span> <span class=\"n\">s</span><span class=\"o\">=</span><span class=\"mi\">100</span><span class=\"p\">,</span> <span class=\"n\">alpha</span><span class=\"o\">=</span><span class=\"mf\">0.5</span><span class=\"p\">);</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<img alt=\"../_images/appendix_5-matplotlib_33_0.png\" src=\"../_images/appendix_5-matplotlib_33_0.png\" />\n</div>\n</div>\n<p>以下のように、<code class=\"docutils literal notranslate\"><span class=\"pre\">plot()</span></code> 関数を用いても同様の散布図を表示することができます。具体的には、3番目の引数にプロットする点のマーカの形状を指定することにより実現します。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[19]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">x</span> <span class=\"o\">=</span> <span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">random</span><span class=\"o\">.</span><span class=\"n\">rand</span><span class=\"p\">(</span><span class=\"mi\">20</span><span class=\"p\">)</span>\n<span class=\"n\">y</span> <span class=\"o\">=</span> <span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">random</span><span class=\"o\">.</span><span class=\"n\">rand</span><span class=\"p\">(</span><span class=\"mi\">20</span><span class=\"p\">)</span>\n<span class=\"n\">plt</span><span class=\"o\">.</span><span class=\"n\">plot</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">,</span> <span class=\"n\">y</span><span class=\"p\">,</span> <span class=\"s1\">&#39;*&#39;</span><span class=\"p\">,</span> <span class=\"n\">color</span><span class=\"o\">=</span><span class=\"s1\">&#39;blue&#39;</span><span class=\"p\">);</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<img alt=\"../_images/appendix_5-matplotlib_35_0.png\" src=\"../_images/appendix_5-matplotlib_35_0.png\" />\n</div>\n</div>\n</section>\n<section id=\"id6\">\n<h2>練習<a class=\"headerlink\" href=\"#id6\" title=\"Link to this heading\">¶</a></h2>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">tokyo-temps.csv</span></code> には、気象庁のオープンデータからダウンロードした、東京の平均気温のデータが入っています。具体的には、各行の第2列に気温の値が格納されており、47行目に1875年6月の、48行目に1875年7月の、…、53行目に1875年12月の、54行目に1876年1月の、…という風に2017年1月のデータまでが格納されています。</p>\n<p>そこで、1875年以降の平均気温の値をy軸に、月の値をx軸に描画した散布図を表示するとともに、描画したx軸とy軸の値をタプルに格納して返す関数 <code class=\"docutils literal notranslate\"><span class=\"pre\">scatter_tokyotemps</span></code> を作成してください。</p>\n<p>以下のセルの <code class=\"docutils literal notranslate\"><span class=\"pre\">...</span></code> のところを書き換えて解答してください。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[20]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"kn\">import</span> <span class=\"nn\">...</span>\n<span class=\"o\">...</span>\n<span class=\"k\">def</span> <span class=\"nf\">scatter_tokyotemps</span><span class=\"p\">():</span>\n    <span class=\"o\">...</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n<span class=\"ansi-cyan-fg\">  Cell </span><span class=\"ansi-green-fg\">In[20], line 1</span>\n<span class=\"ansi-red-fg\">    import ...</span>\n           ^\n<span class=\"ansi-red-fg\">SyntaxError</span><span class=\"ansi-red-fg\">:</span> invalid syntax\n\n</pre></div></div>\n</div>\n<p>上のセルで解答を作成した後、以下のセルを実行し、実行結果が全て <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> になることを確認してください。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[21]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">res_months</span><span class=\"p\">,</span> <span class=\"n\">res_temps</span> <span class=\"o\">=</span> <span class=\"n\">scatter_tokyotemps</span><span class=\"p\">()</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">res_months</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"mi\">1700</span><span class=\"p\">,</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">res_temps</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"mi\">1700</span><span class=\"p\">,</span> <span class=\"n\">res_months</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]</span> <span class=\"o\">==</span> <span class=\"mi\">6</span><span class=\"p\">,</span> <span class=\"n\">res_months</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">]</span> <span class=\"o\">==</span> <span class=\"mi\">7</span><span class=\"p\">,</span> <span class=\"n\">res_months</span><span class=\"p\">[</span><span class=\"mi\">12</span><span class=\"p\">]</span> <span class=\"o\">==</span> <span class=\"mi\">6</span><span class=\"p\">,</span> <span class=\"n\">res_months</span><span class=\"p\">[</span><span class=\"mi\">13</span><span class=\"p\">]</span> <span class=\"o\">==</span> <span class=\"mi\">7</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">res_temps</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]</span> <span class=\"o\">==</span> <span class=\"mf\">22.3</span><span class=\"p\">,</span> <span class=\"n\">res_temps</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">]</span> <span class=\"o\">==</span> <span class=\"mf\">26.0</span><span class=\"p\">,</span> <span class=\"n\">res_temps</span><span class=\"p\">[</span><span class=\"mi\">12</span><span class=\"p\">]</span> <span class=\"o\">==</span> <span class=\"mf\">18.5</span><span class=\"p\">,</span> <span class=\"n\">res_temps</span><span class=\"p\">[</span><span class=\"mi\">13</span><span class=\"p\">]</span> <span class=\"o\">==</span> <span class=\"mf\">24.3</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n<span class=\"ansi-red-fg\">---------------------------------------------------------------------------</span>\n<span class=\"ansi-red-fg\">NameError</span>                                 Traceback (most recent call last)\nCell <span class=\"ansi-green-fg\">In[21], line 1</span>\n<span class=\"ansi-green-fg\">----&gt; 1</span> res_months, res_temps <span style=\"color: rgb(98,98,98)\">=</span> <span class=\"ansi-yellow-bg\">scatter_tokyotemps</span>()\n<span class=\"ansi-green-intense-fg ansi-bold\">      2</span> <span style=\"color: rgb(0,135,0)\">print</span>(<span style=\"color: rgb(0,135,0)\">len</span>(res_months) <span style=\"color: rgb(98,98,98)\">==</span> <span style=\"color: rgb(98,98,98)\">1700</span>, <span style=\"color: rgb(0,135,0)\">len</span>(res_temps) <span style=\"color: rgb(98,98,98)\">==</span> <span style=\"color: rgb(98,98,98)\">1700</span>, res_months[<span style=\"color: rgb(98,98,98)\">0</span>] <span style=\"color: rgb(98,98,98)\">==</span> <span style=\"color: rgb(98,98,98)\">6</span>, res_months[<span style=\"color: rgb(98,98,98)\">1</span>] <span style=\"color: rgb(98,98,98)\">==</span> <span style=\"color: rgb(98,98,98)\">7</span>, res_months[<span style=\"color: rgb(98,98,98)\">12</span>] <span style=\"color: rgb(98,98,98)\">==</span> <span style=\"color: rgb(98,98,98)\">6</span>, res_months[<span style=\"color: rgb(98,98,98)\">13</span>] <span style=\"color: rgb(98,98,98)\">==</span> <span style=\"color: rgb(98,98,98)\">7</span>)\n<span class=\"ansi-green-intense-fg ansi-bold\">      3</span> <span style=\"color: rgb(0,135,0)\">print</span>(res_temps[<span style=\"color: rgb(98,98,98)\">0</span>] <span style=\"color: rgb(98,98,98)\">==</span> <span style=\"color: rgb(98,98,98)\">22.3</span>, res_temps[<span style=\"color: rgb(98,98,98)\">1</span>] <span style=\"color: rgb(98,98,98)\">==</span> <span style=\"color: rgb(98,98,98)\">26.0</span>, res_temps[<span style=\"color: rgb(98,98,98)\">12</span>] <span style=\"color: rgb(98,98,98)\">==</span> <span style=\"color: rgb(98,98,98)\">18.5</span>, res_temps[<span style=\"color: rgb(98,98,98)\">13</span>] <span style=\"color: rgb(98,98,98)\">==</span> <span style=\"color: rgb(98,98,98)\">24.3</span>)\n\n<span class=\"ansi-red-fg\">NameError</span>: name &#39;scatter_tokyotemps&#39; is not defined\n</pre></div></div>\n</div>\n</section>\n<section id=\"棒グラフ\">\n<h2>棒グラフ<a class=\"headerlink\" href=\"#棒グラフ\" title=\"Link to this heading\">¶</a></h2>\n<p><strong>棒グラフ</strong>は、<code class=\"docutils literal notranslate\"><span class=\"pre\">pyplot</span></code> モジュールの <code class=\"docutils literal notranslate\"><span class=\"pre\">bar()</span></code> 関数を用いて描画できます。以下では、ランダムに生成した10個の要素からなる配列 <code class=\"docutils literal notranslate\"><span class=\"pre\">y</span></code> の各要素の値を縦の棒グラフで表示しています。<code class=\"docutils literal notranslate\"><span class=\"pre\">x</span></code> は、x軸上で棒グラフのバーの並ぶ位置を示しています。ここでは、<code class=\"docutils literal notranslate\"><span class=\"pre\">numpy</span></code> モジュールの <code class=\"docutils literal notranslate\"><span class=\"pre\">arange()</span></code> 関数を用いて、<code class=\"docutils literal notranslate\"><span class=\"pre\">1</span></code> から <code class=\"docutils literal notranslate\"><span class=\"pre\">10</span></code> の範囲を <code class=\"docutils literal notranslate\"><span class=\"pre\">1</span></code> 刻みでx軸上のバーの並ぶ位置として配列を準備しています。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[22]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"c1\"># x軸上で棒の並ぶ位置となる配列</span>\n<span class=\"n\">x</span> <span class=\"o\">=</span> <span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">arange</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">11</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">)</span>\n<span class=\"c1\">#　グラフのy軸の値となる配列</span>\n<span class=\"n\">y</span> <span class=\"o\">=</span> <span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">random</span><span class=\"o\">.</span><span class=\"n\">rand</span><span class=\"p\">(</span><span class=\"mi\">10</span><span class=\"p\">)</span>\n\n<span class=\"c1\"># bar関数で棒グラフを描画</span>\n<span class=\"c1\">#print(x, y)</span>\n<span class=\"n\">plt</span><span class=\"o\">.</span><span class=\"n\">bar</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">,</span><span class=\"n\">y</span><span class=\"p\">);</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<img alt=\"../_images/appendix_5-matplotlib_41_0.png\" src=\"../_images/appendix_5-matplotlib_41_0.png\" />\n</div>\n</div>\n</section>\n<section id=\"id8\">\n<h2>練習<a class=\"headerlink\" href=\"#id8\" title=\"Link to this heading\">¶</a></h2>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">tokyo-temps.csv</span></code> には、気象庁のオープンデータからダウンロードした、東京の平均気温のデータが入っています。具体的には、各行の第2列に気温の値が格納されており、47行目に1875年6月の、48行目に1875年7月の、…、53行目に1875年12月の、54行目に1876年1月の、…という風に2017年1月のデータまでが格納されています。</p>\n<p>そこで、4つの引数 <code class=\"docutils literal notranslate\"><span class=\"pre\">year1</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">month1</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">year2</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">month2</span></code> を引数に取り、 <code class=\"docutils literal notranslate\"><span class=\"pre\">year1</span></code> 年 <code class=\"docutils literal notranslate\"><span class=\"pre\">month1</span></code> 月から <code class=\"docutils literal notranslate\"><span class=\"pre\">year2</span></code> 年 <code class=\"docutils literal notranslate\"><span class=\"pre\">month2</span></code> 月までの各月の平均気温の値をy軸に、年月の値（<code class=\"docutils literal notranslate\"><span class=\"pre\">tokyo-temps.csv</span></code> の1列目の値）をx軸に描画した棒グラフを表示するとともに、描画したx軸とy軸の値をタプルに格納して返す関数 <code class=\"docutils literal notranslate\"><span class=\"pre\">bar_tokyotemps</span></code> を作成してください。</p>\n<p>以下のセルの <code class=\"docutils literal notranslate\"><span class=\"pre\">...</span></code> のところを書き換えて解答してください。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[23]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"kn\">import</span> <span class=\"nn\">...</span>\n<span class=\"o\">...</span>\n<span class=\"k\">def</span> <span class=\"nf\">bar_tokyotemps</span><span class=\"p\">(</span><span class=\"n\">year1</span><span class=\"p\">,</span> <span class=\"n\">month1</span><span class=\"p\">,</span> <span class=\"n\">year2</span><span class=\"p\">,</span> <span class=\"n\">month2</span><span class=\"p\">):</span>\n    <span class=\"o\">...</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n<span class=\"ansi-cyan-fg\">  Cell </span><span class=\"ansi-green-fg\">In[23], line 1</span>\n<span class=\"ansi-red-fg\">    import ...</span>\n           ^\n<span class=\"ansi-red-fg\">SyntaxError</span><span class=\"ansi-red-fg\">:</span> invalid syntax\n\n</pre></div></div>\n</div>\n<p>上のセルで解答を作成した後、以下のセルを実行し、実行結果が全て <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> になることを確認してください。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[24]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">res_months</span><span class=\"p\">,</span> <span class=\"n\">res_temps</span> <span class=\"o\">=</span> <span class=\"n\">bar_tokyotemps</span><span class=\"p\">(</span><span class=\"mi\">2000</span><span class=\"p\">,</span> <span class=\"mi\">6</span><span class=\"p\">,</span> <span class=\"mi\">2001</span><span class=\"p\">,</span> <span class=\"mi\">6</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">res_months</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"mi\">13</span><span class=\"p\">,</span> <span class=\"n\">res_months</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;2000/6&#39;</span><span class=\"p\">,</span> <span class=\"n\">res_temps</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]</span> <span class=\"o\">==</span> <span class=\"mf\">22.5</span><span class=\"p\">,</span> <span class=\"n\">res_months</span><span class=\"p\">[</span><span class=\"mi\">12</span><span class=\"p\">]</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;2001/6&#39;</span><span class=\"p\">,</span> <span class=\"n\">res_temps</span><span class=\"p\">[</span><span class=\"mi\">12</span><span class=\"p\">]</span> <span class=\"o\">==</span> <span class=\"mf\">23.1</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n<span class=\"ansi-red-fg\">---------------------------------------------------------------------------</span>\n<span class=\"ansi-red-fg\">NameError</span>                                 Traceback (most recent call last)\nCell <span class=\"ansi-green-fg\">In[24], line 1</span>\n<span class=\"ansi-green-fg\">----&gt; 1</span> res_months, res_temps <span style=\"color: rgb(98,98,98)\">=</span> <span class=\"ansi-yellow-bg\">bar_tokyotemps</span>(<span style=\"color: rgb(98,98,98)\">2000</span>, <span style=\"color: rgb(98,98,98)\">6</span>, <span style=\"color: rgb(98,98,98)\">2001</span>, <span style=\"color: rgb(98,98,98)\">6</span>)\n<span class=\"ansi-green-intense-fg ansi-bold\">      2</span> <span style=\"color: rgb(0,135,0)\">print</span>(<span style=\"color: rgb(0,135,0)\">len</span>(res_months) <span style=\"color: rgb(98,98,98)\">==</span> <span style=\"color: rgb(98,98,98)\">13</span>, res_months[<span style=\"color: rgb(98,98,98)\">0</span>] <span style=\"color: rgb(98,98,98)\">==</span> <span style=\"color: rgb(175,0,0)\">&#39;</span><span style=\"color: rgb(175,0,0)\">2000/6</span><span style=\"color: rgb(175,0,0)\">&#39;</span>, res_temps[<span style=\"color: rgb(98,98,98)\">0</span>] <span style=\"color: rgb(98,98,98)\">==</span> <span style=\"color: rgb(98,98,98)\">22.5</span>, res_months[<span style=\"color: rgb(98,98,98)\">12</span>] <span style=\"color: rgb(98,98,98)\">==</span> <span style=\"color: rgb(175,0,0)\">&#39;</span><span style=\"color: rgb(175,0,0)\">2001/6</span><span style=\"color: rgb(175,0,0)\">&#39;</span>, res_temps[<span style=\"color: rgb(98,98,98)\">12</span>] <span style=\"color: rgb(98,98,98)\">==</span> <span style=\"color: rgb(98,98,98)\">23.1</span>)\n\n<span class=\"ansi-red-fg\">NameError</span>: name &#39;bar_tokyotemps&#39; is not defined\n</pre></div></div>\n</div>\n</section>\n<section id=\"ヒストグラム\">\n<h2>ヒストグラム<a class=\"headerlink\" href=\"#ヒストグラム\" title=\"Link to this heading\">¶</a></h2>\n<p><strong>ヒストグラム</strong>は、<code class=\"docutils literal notranslate\"><span class=\"pre\">pyplot</span></code> モジュールの <code class=\"docutils literal notranslate\"><span class=\"pre\">hist()</span></code> 関数を用いて描画できます。 以下では、<code class=\"docutils literal notranslate\"><span class=\"pre\">numpy</span></code> モジュールの <code class=\"docutils literal notranslate\"><span class=\"pre\">random.randn()</span></code> 関数を用いて、正規分布に基づく1000個の数値の要素からなる配列を用意し、ヒストグラムとして表示しています。 <code class=\"docutils literal notranslate\"><span class=\"pre\">hist()</span></code> 関数の <code class=\"docutils literal notranslate\"><span class=\"pre\">bins</span></code> 引数でヒストグラムの箱（ビン）の数を指定します。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[25]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"c1\"># 正規分布に基づく1000個の数値の要素からなる配列</span>\n<span class=\"n\">d</span> <span class=\"o\">=</span> <span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">random</span><span class=\"o\">.</span><span class=\"n\">randn</span><span class=\"p\">(</span><span class=\"mi\">1000</span><span class=\"p\">)</span>\n\n<span class=\"c1\"># hist関数でヒストグラムを描画</span>\n<span class=\"n\">plt</span><span class=\"o\">.</span><span class=\"n\">hist</span><span class=\"p\">(</span><span class=\"n\">d</span><span class=\"p\">,</span> <span class=\"n\">bins</span><span class=\"o\">=</span><span class=\"mi\">20</span><span class=\"p\">);</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<img alt=\"../_images/appendix_5-matplotlib_47_0.png\" src=\"../_images/appendix_5-matplotlib_47_0.png\" />\n</div>\n</div>\n</section>\n<section id=\"id10\">\n<h2>練習<a class=\"headerlink\" href=\"#id10\" title=\"Link to this heading\">¶</a></h2>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">tokyo-temps.csv</span></code> には、気象庁のオープンデータからダウンロードした、東京の平均気温のデータが入っています。具体的には、各行の第2列に気温の値が格納されており、47行目に1875年6月の、48行目に1875年7月の、…、53行目に1875年12月の、54行目に1876年1月の、…という風に2017年1月のデータまでが格納されています。</p>\n<p>そこで、5つの引数 <code class=\"docutils literal notranslate\"><span class=\"pre\">year1</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">month1</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">year2</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">month2</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">mybin</span></code> を引数に取り、 <code class=\"docutils literal notranslate\"><span class=\"pre\">year1</span></code> 年 <code class=\"docutils literal notranslate\"><span class=\"pre\">month1</span></code> 月から <code class=\"docutils literal notranslate\"><span class=\"pre\">year2</span></code> 年 <code class=\"docutils literal notranslate\"><span class=\"pre\">month2</span></code> 月までの各月の平均気温の値を格納したリスト <code class=\"docutils literal notranslate\"><span class=\"pre\">temps</span></code> から <code class=\"docutils literal notranslate\"><span class=\"pre\">mybin</span></code> 個のヒストグラムを表示するとともに、 <code class=\"docutils literal notranslate\"><span class=\"pre\">temps</span></code> を返す関数 <code class=\"docutils literal notranslate\"><span class=\"pre\">hist_tokyotemps</span></code> を作成してください。</p>\n<p>以下のセルの <code class=\"docutils literal notranslate\"><span class=\"pre\">...</span></code> のところを書き換えて解答してください。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[26]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"kn\">import</span> <span class=\"nn\">...</span>\n<span class=\"o\">...</span>\n<span class=\"k\">def</span> <span class=\"nf\">hist_tokyotemps</span><span class=\"p\">(</span><span class=\"n\">year1</span><span class=\"p\">,</span> <span class=\"n\">month1</span><span class=\"p\">,</span> <span class=\"n\">year2</span><span class=\"p\">,</span> <span class=\"n\">month2</span><span class=\"p\">,</span> <span class=\"n\">mybin</span><span class=\"p\">):</span>\n    <span class=\"o\">...</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n<span class=\"ansi-cyan-fg\">  Cell </span><span class=\"ansi-green-fg\">In[26], line 1</span>\n<span class=\"ansi-red-fg\">    import ...</span>\n           ^\n<span class=\"ansi-red-fg\">SyntaxError</span><span class=\"ansi-red-fg\">:</span> invalid syntax\n\n</pre></div></div>\n</div>\n<p>上のセルで解答を作成した後、以下のセルを実行し、実行結果が全て <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> になることを確認してください。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[27]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">res_temps</span> <span class=\"o\">=</span> <span class=\"n\">hist_tokyotemps</span><span class=\"p\">(</span><span class=\"mi\">1875</span><span class=\"p\">,</span> <span class=\"mi\">6</span><span class=\"p\">,</span> <span class=\"mi\">2000</span><span class=\"p\">,</span> <span class=\"mi\">6</span><span class=\"p\">,</span> <span class=\"mi\">50</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">res_temps</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"mi\">1501</span><span class=\"p\">,</span> <span class=\"n\">res_temps</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]</span> <span class=\"o\">==</span> <span class=\"mf\">22.3</span><span class=\"p\">,</span> <span class=\"n\">res_temps</span><span class=\"p\">[</span><span class=\"mi\">1500</span><span class=\"p\">]</span> <span class=\"o\">==</span> <span class=\"mf\">22.5</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n<span class=\"ansi-red-fg\">---------------------------------------------------------------------------</span>\n<span class=\"ansi-red-fg\">NameError</span>                                 Traceback (most recent call last)\nCell <span class=\"ansi-green-fg\">In[27], line 1</span>\n<span class=\"ansi-green-fg\">----&gt; 1</span> res_temps <span style=\"color: rgb(98,98,98)\">=</span> <span class=\"ansi-yellow-bg\">hist_tokyotemps</span>(<span style=\"color: rgb(98,98,98)\">1875</span>, <span style=\"color: rgb(98,98,98)\">6</span>, <span style=\"color: rgb(98,98,98)\">2000</span>, <span style=\"color: rgb(98,98,98)\">6</span>, <span style=\"color: rgb(98,98,98)\">50</span>)\n<span class=\"ansi-green-intense-fg ansi-bold\">      2</span> <span style=\"color: rgb(0,135,0)\">print</span>(<span style=\"color: rgb(0,135,0)\">len</span>(res_temps) <span style=\"color: rgb(98,98,98)\">==</span> <span style=\"color: rgb(98,98,98)\">1501</span>, res_temps[<span style=\"color: rgb(98,98,98)\">0</span>] <span style=\"color: rgb(98,98,98)\">==</span> <span style=\"color: rgb(98,98,98)\">22.3</span>, res_temps[<span style=\"color: rgb(98,98,98)\">1500</span>] <span style=\"color: rgb(98,98,98)\">==</span> <span style=\"color: rgb(98,98,98)\">22.5</span>)\n\n<span class=\"ansi-red-fg\">NameError</span>: name &#39;hist_tokyotemps&#39; is not defined\n</pre></div></div>\n</div>\n</section>\n<section id=\"ヒートマップ\">\n<h2>ヒートマップ<a class=\"headerlink\" href=\"#ヒートマップ\" title=\"Link to this heading\">¶</a></h2>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">impshow()</span></code> 関数を用いると、以下のように行列の要素の値に応じて色の濃淡を変えることで、行列を<strong>ヒートマップ</strong>として可視化することができます。<code class=\"docutils literal notranslate\"><span class=\"pre\">colorbar()</span></code> 関数は行列の値と色の濃淡の対応を表示します。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[28]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"c1\"># 10行10列のランダム要素からなる行列</span>\n<span class=\"n\">ary1</span> <span class=\"o\">=</span> <span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">random</span><span class=\"o\">.</span><span class=\"n\">rand</span><span class=\"p\">(</span><span class=\"mi\">100</span><span class=\"p\">)</span>\n<span class=\"n\">ary2</span> <span class=\"o\">=</span> <span class=\"n\">ary1</span><span class=\"o\">.</span><span class=\"n\">reshape</span><span class=\"p\">(</span><span class=\"mi\">10</span><span class=\"p\">,</span><span class=\"mi\">10</span><span class=\"p\">)</span>\n<span class=\"c1\">#ary2 = np.random.rand(100).reshape(10,10) #と同じ</span>\n\n<span class=\"c1\"># imshow関数でヒートマップを描画</span>\n<span class=\"n\">im</span><span class=\"o\">=</span><span class=\"n\">plt</span><span class=\"o\">.</span><span class=\"n\">imshow</span><span class=\"p\">(</span><span class=\"n\">ary2</span><span class=\"p\">)</span>\n<span class=\"n\">plt</span><span class=\"o\">.</span><span class=\"n\">colorbar</span><span class=\"p\">(</span><span class=\"n\">im</span><span class=\"p\">);</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<img alt=\"../_images/appendix_5-matplotlib_53_0.png\" src=\"../_images/appendix_5-matplotlib_53_0.png\" />\n</div>\n</div>\n</section>\n<section id=\"id12\">\n<h2>練習<a class=\"headerlink\" href=\"#id12\" title=\"Link to this heading\">¶</a></h2>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">tokyo-temps.csv</span></code> には、気象庁のオープンデータからダウンロードした、東京の平均気温のデータが入っています。具体的には、各行の第2列に気温の値が格納されており、47行目に1875年6月の、48行目に1875年7月の、…、53行目に1875年12月の、54行目に1876年1月の、…という風に2017年1月のデータまでが格納されています。</p>\n<p>そこで、30×12のNumPyの配列 <code class=\"docutils literal notranslate\"><span class=\"pre\">ary1</span></code> を作成し、各月の平均気温を整数に丸めた値を求めて、月ごとにその値の数を数えて配列 <code class=\"docutils literal notranslate\"><span class=\"pre\">ary1</span></code> に格納して、 <code class=\"docutils literal notranslate\"><span class=\"pre\">ary1</span></code> からなるヒートマップを表示しつつ、 <code class=\"docutils literal notranslate\"><span class=\"pre\">ary1</span></code> を返す関数 <code class=\"docutils literal notranslate\"><span class=\"pre\">heat_tokyotemps</span></code> を作成してください。 ただし、厳密には <code class=\"docutils literal notranslate\"><span class=\"pre\">x</span></code> が <code class=\"docutils literal notranslate\"><span class=\"pre\">0</span></code> 以上 <code class=\"docutils literal notranslate\"><span class=\"pre\">11</span></code> 以下の任意の整数とし、<code class=\"docutils literal notranslate\"><span class=\"pre\">y</span></code> を <code class=\"docutils literal notranslate\"><span class=\"pre\">0</span></code> 以上 <code class=\"docutils literal notranslate\"><span class=\"pre\">29</span></code> 以下の整数とするとき、 <code class=\"docutils literal notranslate\"><span class=\"pre\">ary1[y][x]</span></code> には、 <code class=\"docutils literal notranslate\"><span class=\"pre\">y</span></code> ℃以上、 <code class=\"docutils literal notranslate\"><span class=\"pre\">y+1</span></code> ℃より小さい平均気温を持つ <code class=\"docutils literal notranslate\"><span class=\"pre\">x+1</span></code> 月の数が格納されているものとします。</p>\n<p>以下のセルの <code class=\"docutils literal notranslate\"><span class=\"pre\">...</span></code> のところを書き換えて解答してください。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[29]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"kn\">import</span> <span class=\"nn\">...</span>\n<span class=\"o\">...</span>\n<span class=\"k\">def</span> <span class=\"nf\">heat_tokyotemps</span><span class=\"p\">():</span>\n    <span class=\"o\">...</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n<span class=\"ansi-cyan-fg\">  Cell </span><span class=\"ansi-green-fg\">In[29], line 1</span>\n<span class=\"ansi-red-fg\">    import ...</span>\n           ^\n<span class=\"ansi-red-fg\">SyntaxError</span><span class=\"ansi-red-fg\">:</span> invalid syntax\n\n</pre></div></div>\n</div>\n<p>上のセルで解答を作成した後、以下のセルを実行し、実行結果が全て <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> になることを確認してください。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[30]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">ary1</span> <span class=\"o\">=</span> <span class=\"n\">heat_tokyotemps</span><span class=\"p\">()</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">ary1</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">][</span><span class=\"mi\">0</span><span class=\"p\">]</span> <span class=\"o\">==</span> <span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"n\">ary1</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">][</span><span class=\"mi\">1</span><span class=\"p\">]</span> <span class=\"o\">==</span> <span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"n\">ary1</span><span class=\"p\">[</span><span class=\"mi\">2</span><span class=\"p\">][</span><span class=\"mi\">0</span><span class=\"p\">]</span> <span class=\"o\">==</span> <span class=\"mi\">28</span><span class=\"p\">)</span>\n<span class=\"c1\">#画像の向きが気になる人は、以下の2行を同時に実行してみてください</span>\n<span class=\"c1\">#ary1 = np.flip(ary1, axis=0)</span>\n<span class=\"c1\">#im=plt.imshow(ary1)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n<span class=\"ansi-red-fg\">---------------------------------------------------------------------------</span>\n<span class=\"ansi-red-fg\">NameError</span>                                 Traceback (most recent call last)\nCell <span class=\"ansi-green-fg\">In[30], line 1</span>\n<span class=\"ansi-green-fg\">----&gt; 1</span> ary1 <span style=\"color: rgb(98,98,98)\">=</span> <span class=\"ansi-yellow-bg\">heat_tokyotemps</span>()\n<span class=\"ansi-green-intense-fg ansi-bold\">      2</span> <span style=\"color: rgb(0,135,0)\">print</span>(ary1[<span style=\"color: rgb(98,98,98)\">0</span>][<span style=\"color: rgb(98,98,98)\">0</span>] <span style=\"color: rgb(98,98,98)\">==</span> <span style=\"color: rgb(98,98,98)\">2</span>, ary1[<span style=\"color: rgb(98,98,98)\">1</span>][<span style=\"color: rgb(98,98,98)\">1</span>] <span style=\"color: rgb(98,98,98)\">==</span> <span style=\"color: rgb(98,98,98)\">2</span>, ary1[<span style=\"color: rgb(98,98,98)\">2</span>][<span style=\"color: rgb(98,98,98)\">0</span>] <span style=\"color: rgb(98,98,98)\">==</span> <span style=\"color: rgb(98,98,98)\">28</span>)\n<span class=\"ansi-green-intense-fg ansi-bold\">      3</span> <span style=\"color: rgb(95,135,135)\">#画像の向きが気になる人は、以下の2行を同時に実行してみてください</span>\n<span class=\"ansi-green-intense-fg ansi-bold\">      4</span> <span style=\"color: rgb(95,135,135)\">#ary1 = np.flip(ary1, axis=0) </span>\n<span class=\"ansi-green-intense-fg ansi-bold\">      5</span> <span style=\"color: rgb(95,135,135)\">#im=plt.imshow(ary1)</span>\n\n<span class=\"ansi-red-fg\">NameError</span>: name &#39;heat_tokyotemps&#39; is not defined\n</pre></div></div>\n</div>\n</section>\n<section id=\"グラフの画像ファイル出力\">\n<h2>グラフの画像ファイル出力<a class=\"headerlink\" href=\"#グラフの画像ファイル出力\" title=\"Link to this heading\">¶</a></h2>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">savefig()</span></code> 関数を用いると、以下のように作成したグラフを画像としてファイルに保存することができます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[31]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">x</span> <span class=\"o\">=</span> <span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">arange</span><span class=\"p\">(</span><span class=\"o\">-</span><span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">pi</span><span class=\"p\">,</span> <span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">pi</span><span class=\"p\">,</span> <span class=\"mf\">0.1</span><span class=\"p\">)</span>\n<span class=\"n\">plt</span><span class=\"o\">.</span><span class=\"n\">plot</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">,</span><span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">cos</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">),</span> <span class=\"n\">label</span><span class=\"o\">=</span><span class=\"s1\">&#39;cos&#39;</span><span class=\"p\">)</span>\n<span class=\"n\">plt</span><span class=\"o\">.</span><span class=\"n\">plot</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">,</span><span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">sin</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">),</span> <span class=\"n\">label</span><span class=\"o\">=</span><span class=\"s1\">&#39;sin&#39;</span><span class=\"p\">)</span>\n<span class=\"n\">plt</span><span class=\"o\">.</span><span class=\"n\">legend</span><span class=\"p\">()</span>\n<span class=\"n\">plt</span><span class=\"o\">.</span><span class=\"n\">title</span><span class=\"p\">(</span><span class=\"s1\">&#39;cos ans sin Curves&#39;</span><span class=\"p\">)</span>\n<span class=\"n\">plt</span><span class=\"o\">.</span><span class=\"n\">xlabel</span><span class=\"p\">(</span><span class=\"s1\">&#39;x&#39;</span><span class=\"p\">)</span>\n<span class=\"n\">plt</span><span class=\"o\">.</span><span class=\"n\">ylabel</span><span class=\"p\">(</span><span class=\"s1\">&#39;y&#39;</span><span class=\"p\">)</span>\n<span class=\"n\">plt</span><span class=\"o\">.</span><span class=\"n\">grid</span><span class=\"p\">(</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n\n<span class=\"c1\"># savefig関数でグラフを画像保存</span>\n<span class=\"n\">plt</span><span class=\"o\">.</span><span class=\"n\">savefig</span><span class=\"p\">(</span><span class=\"s1\">&#39;cos_sin.png&#39;</span><span class=\"p\">);</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<img alt=\"../_images/appendix_5-matplotlib_59_0.png\" src=\"../_images/appendix_5-matplotlib_59_0.png\" />\n</div>\n</div>\n</section>\n<section id=\"練習の解答\">\n<h2>練習の解答<a class=\"headerlink\" href=\"#練習の解答\" title=\"Link to this heading\">¶</a></h2>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[32]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"kn\">import</span> <span class=\"nn\">numpy</span> <span class=\"k\">as</span> <span class=\"nn\">np</span>\n<span class=\"kn\">import</span> <span class=\"nn\">matplotlib.pyplot</span> <span class=\"k\">as</span> <span class=\"nn\">plt</span>\n<span class=\"o\">%</span><span class=\"k\">matplotlib</span> inline\n\n<span class=\"k\">def</span> <span class=\"nf\">plot_exp</span><span class=\"p\">():</span>\n    <span class=\"n\">x</span> <span class=\"o\">=</span> <span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">arange</span><span class=\"p\">(</span><span class=\"o\">-</span><span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"mf\">2.1</span><span class=\"p\">,</span> <span class=\"mf\">0.1</span><span class=\"p\">)</span>\n    <span class=\"n\">y</span> <span class=\"o\">=</span> <span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">exp</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">)</span>\n    <span class=\"n\">plt</span><span class=\"o\">.</span><span class=\"n\">plot</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">,</span> <span class=\"n\">y</span><span class=\"p\">,</span> <span class=\"n\">linestyle</span><span class=\"o\">=</span><span class=\"s1\">&#39;--&#39;</span><span class=\"p\">,</span> <span class=\"n\">color</span><span class=\"o\">=</span><span class=\"s1\">&#39;blue&#39;</span><span class=\"p\">,</span> <span class=\"n\">marker</span><span class=\"o\">=</span><span class=\"s1\">&#39;x&#39;</span><span class=\"p\">,</span> <span class=\"n\">label</span><span class=\"o\">=</span><span class=\"s1\">&#39;exp(x)&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">plt</span><span class=\"o\">.</span><span class=\"n\">title</span><span class=\"p\">(</span><span class=\"s1\">&#39;y = exp(x)&#39;</span><span class=\"p\">)</span> <span class=\"c1\"># タイトル</span>\n    <span class=\"n\">plt</span><span class=\"o\">.</span><span class=\"n\">xlabel</span><span class=\"p\">(</span><span class=\"s1\">&#39;x&#39;</span><span class=\"p\">)</span> <span class=\"c1\"># x軸のラベル</span>\n    <span class=\"n\">plt</span><span class=\"o\">.</span><span class=\"n\">ylabel</span><span class=\"p\">(</span><span class=\"s1\">&#39;exp(x)&#39;</span><span class=\"p\">)</span> <span class=\"c1\"># y軸のラベル</span>\n    <span class=\"n\">plt</span><span class=\"o\">.</span><span class=\"n\">grid</span><span class=\"p\">(</span><span class=\"kc\">True</span><span class=\"p\">);</span> <span class=\"c1\"># グリッドを表示</span>\n    <span class=\"n\">plt</span><span class=\"o\">.</span><span class=\"n\">legend</span><span class=\"p\">()</span> <span class=\"c1\"># 盆例を表示</span>\n    <span class=\"k\">return</span> <span class=\"n\">x</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[33]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"kn\">import</span> <span class=\"nn\">numpy</span> <span class=\"k\">as</span> <span class=\"nn\">np</span>\n<span class=\"kn\">import</span> <span class=\"nn\">matplotlib.pyplot</span> <span class=\"k\">as</span> <span class=\"nn\">plt</span>\n<span class=\"o\">%</span><span class=\"k\">matplotlib</span> inline\n<span class=\"kn\">import</span> <span class=\"nn\">csv</span>\n\n<span class=\"k\">def</span> <span class=\"nf\">plot_tokyotemps</span><span class=\"p\">(</span><span class=\"n\">year</span><span class=\"p\">,</span> <span class=\"n\">month</span><span class=\"p\">):</span>\n    <span class=\"k\">with</span> <span class=\"nb\">open</span><span class=\"p\">(</span><span class=\"s1\">&#39;tokyo-temps.csv&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;r&#39;</span><span class=\"p\">,</span> <span class=\"n\">encoding</span><span class=\"o\">=</span><span class=\"s1\">&#39;sjis&#39;</span><span class=\"p\">)</span> <span class=\"k\">as</span> <span class=\"n\">f</span><span class=\"p\">:</span>\n        <span class=\"n\">dataReader</span> <span class=\"o\">=</span> <span class=\"n\">csv</span><span class=\"o\">.</span><span class=\"n\">reader</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"p\">)</span> <span class=\"c1\"># csvリーダを作成</span>\n        <span class=\"n\">n</span><span class=\"o\">=</span><span class=\"mi\">0</span>\n        <span class=\"c1\"># 1875年6月が47行目なので、指定されたyear年6月のデータの行番号をまず求める</span>\n        <span class=\"n\">init_row</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"n\">year</span> <span class=\"o\">-</span> <span class=\"mi\">1875</span><span class=\"p\">)</span> <span class=\"o\">*</span> <span class=\"mi\">12</span> <span class=\"o\">+</span> <span class=\"mi\">47</span>\n        <span class=\"c1\"># その上で、year年month月のデータの行番号を求める</span>\n        <span class=\"n\">init_row</span> <span class=\"o\">=</span> <span class=\"n\">init_row</span> <span class=\"o\">+</span> <span class=\"n\">month</span> <span class=\"o\">-</span> <span class=\"mi\">6</span>\n        <span class=\"n\">years</span> <span class=\"o\">=</span> <span class=\"p\">[]</span> <span class=\"c1\"># 年</span>\n        <span class=\"n\">temps</span> <span class=\"o\">=</span> <span class=\"p\">[]</span> <span class=\"c1\"># 平均気温</span>\n        <span class=\"k\">for</span> <span class=\"n\">row</span> <span class=\"ow\">in</span> <span class=\"n\">dataReader</span><span class=\"p\">:</span> <span class=\"c1\"># CSVファイルの中身を1行ずつ読み込み</span>\n            <span class=\"n\">n</span> <span class=\"o\">=</span> <span class=\"n\">n</span><span class=\"o\">+</span><span class=\"mi\">1</span>\n            <span class=\"k\">if</span> <span class=\"n\">n</span> <span class=\"o\">&gt;=</span> <span class=\"n\">init_row</span> <span class=\"ow\">and</span> <span class=\"p\">(</span><span class=\"n\">n</span> <span class=\"o\">-</span> <span class=\"n\">init_row</span><span class=\"p\">)</span> <span class=\"o\">%</span> <span class=\"mi\">12</span> <span class=\"o\">==</span> <span class=\"mi\">0</span><span class=\"p\">:</span> <span class=\"c1\"># init_row行目からはじめて12か月ごとにif内を実行</span>\n                <span class=\"n\">years</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">year</span><span class=\"p\">)</span>\n                <span class=\"n\">temp</span> <span class=\"o\">=</span> <span class=\"nb\">float</span><span class=\"p\">(</span><span class=\"n\">row</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">])</span> <span class=\"c1\"># float関数で実数のデータ型に変換する</span>\n                <span class=\"n\">temps</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">temp</span><span class=\"p\">)</span>\n                <span class=\"n\">year</span> <span class=\"o\">=</span> <span class=\"n\">year</span> <span class=\"o\">+</span> <span class=\"mi\">1</span>\n    <span class=\"c1\">#print(years)</span>\n    <span class=\"c1\">#print(temps)</span>\n    <span class=\"n\">plt</span><span class=\"o\">.</span><span class=\"n\">plot</span><span class=\"p\">(</span><span class=\"n\">years</span><span class=\"p\">,</span> <span class=\"n\">temps</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span> <span class=\"n\">years</span><span class=\"p\">,</span> <span class=\"n\">temps</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[34]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"kn\">import</span> <span class=\"nn\">numpy</span> <span class=\"k\">as</span> <span class=\"nn\">np</span>\n<span class=\"kn\">import</span> <span class=\"nn\">matplotlib.pyplot</span> <span class=\"k\">as</span> <span class=\"nn\">plt</span>\n<span class=\"o\">%</span><span class=\"k\">matplotlib</span> inline\n<span class=\"kn\">import</span> <span class=\"nn\">csv</span>\n\n<span class=\"k\">def</span> <span class=\"nf\">scatter_tokyotemps</span><span class=\"p\">():</span>\n    <span class=\"k\">with</span> <span class=\"nb\">open</span><span class=\"p\">(</span><span class=\"s1\">&#39;tokyo-temps.csv&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;r&#39;</span><span class=\"p\">,</span> <span class=\"n\">encoding</span><span class=\"o\">=</span><span class=\"s1\">&#39;sjis&#39;</span><span class=\"p\">)</span> <span class=\"k\">as</span> <span class=\"n\">f</span><span class=\"p\">:</span>\n        <span class=\"n\">dataReader</span> <span class=\"o\">=</span> <span class=\"n\">csv</span><span class=\"o\">.</span><span class=\"n\">reader</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"p\">)</span> <span class=\"c1\"># csvリーダを作成</span>\n        <span class=\"n\">n</span><span class=\"o\">=</span><span class=\"mi\">0</span>\n        <span class=\"n\">months</span> <span class=\"o\">=</span> <span class=\"p\">[]</span> <span class=\"c1\"># 月</span>\n        <span class=\"n\">temps</span> <span class=\"o\">=</span> <span class=\"p\">[]</span> <span class=\"c1\"># 平均気温</span>\n        <span class=\"n\">month</span> <span class=\"o\">=</span> <span class=\"mi\">6</span> <span class=\"c1\"># 47行目は6月</span>\n        <span class=\"k\">for</span> <span class=\"n\">row</span> <span class=\"ow\">in</span> <span class=\"n\">dataReader</span><span class=\"p\">:</span> <span class=\"c1\"># CSVファイルの中身を1行ずつ読み込み</span>\n            <span class=\"n\">n</span> <span class=\"o\">=</span> <span class=\"n\">n</span><span class=\"o\">+</span><span class=\"mi\">1</span>\n            <span class=\"k\">if</span> <span class=\"n\">n</span> <span class=\"o\">&gt;=</span> <span class=\"mi\">47</span><span class=\"p\">:</span> <span class=\"c1\"># 47行目からif内を実行</span>\n                <span class=\"n\">months</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">month</span><span class=\"p\">)</span>\n                <span class=\"n\">temp</span> <span class=\"o\">=</span> <span class=\"nb\">float</span><span class=\"p\">(</span><span class=\"n\">row</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">])</span> <span class=\"c1\"># float関数で実数のデータ型に変換する</span>\n                <span class=\"n\">temps</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">temp</span><span class=\"p\">)</span>\n                <span class=\"n\">month</span> <span class=\"o\">=</span> <span class=\"n\">month</span> <span class=\"o\">+</span> <span class=\"mi\">1</span>\n                <span class=\"k\">if</span> <span class=\"n\">month</span> <span class=\"o\">&gt;</span> <span class=\"mi\">12</span><span class=\"p\">:</span>\n                    <span class=\"n\">month</span> <span class=\"o\">=</span> <span class=\"mi\">1</span>\n    <span class=\"c1\">#print(months)</span>\n    <span class=\"c1\">#print(temps)</span>\n    <span class=\"n\">plt</span><span class=\"o\">.</span><span class=\"n\">scatter</span><span class=\"p\">(</span><span class=\"n\">months</span><span class=\"p\">,</span> <span class=\"n\">temps</span><span class=\"p\">,</span> <span class=\"n\">alpha</span><span class=\"o\">=</span><span class=\"mf\">0.5</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span> <span class=\"n\">months</span><span class=\"p\">,</span> <span class=\"n\">temps</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[35]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"kn\">import</span> <span class=\"nn\">numpy</span> <span class=\"k\">as</span> <span class=\"nn\">np</span>\n<span class=\"kn\">import</span> <span class=\"nn\">matplotlib.pyplot</span> <span class=\"k\">as</span> <span class=\"nn\">plt</span>\n<span class=\"o\">%</span><span class=\"k\">matplotlib</span> inline\n<span class=\"kn\">import</span> <span class=\"nn\">csv</span>\n\n<span class=\"k\">def</span> <span class=\"nf\">bar_tokyotemps</span><span class=\"p\">(</span><span class=\"n\">year1</span><span class=\"p\">,</span> <span class=\"n\">month1</span><span class=\"p\">,</span> <span class=\"n\">year2</span><span class=\"p\">,</span> <span class=\"n\">month2</span><span class=\"p\">):</span>\n    <span class=\"k\">with</span> <span class=\"nb\">open</span><span class=\"p\">(</span><span class=\"s1\">&#39;tokyo-temps.csv&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;r&#39;</span><span class=\"p\">,</span> <span class=\"n\">encoding</span><span class=\"o\">=</span><span class=\"s1\">&#39;sjis&#39;</span><span class=\"p\">)</span> <span class=\"k\">as</span> <span class=\"n\">f</span><span class=\"p\">:</span>\n        <span class=\"n\">dataReader</span> <span class=\"o\">=</span> <span class=\"n\">csv</span><span class=\"o\">.</span><span class=\"n\">reader</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"p\">)</span> <span class=\"c1\"># csvリーダを作成</span>\n        <span class=\"n\">n</span><span class=\"o\">=</span><span class=\"mi\">0</span>\n        <span class=\"n\">months</span> <span class=\"o\">=</span> <span class=\"p\">[]</span> <span class=\"c1\">#</span>\n        <span class=\"n\">temps</span> <span class=\"o\">=</span> <span class=\"p\">[]</span> <span class=\"c1\"># 平均気温</span>\n        <span class=\"n\">init_row</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"n\">year1</span> <span class=\"o\">-</span> <span class=\"mi\">1875</span><span class=\"p\">)</span> <span class=\"o\">*</span> <span class=\"mi\">12</span> <span class=\"o\">-</span> <span class=\"mi\">6</span> <span class=\"o\">+</span> <span class=\"n\">month1</span> <span class=\"o\">+</span> <span class=\"mi\">47</span>\n        <span class=\"n\">end_row</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"n\">year2</span> <span class=\"o\">-</span> <span class=\"mi\">1875</span><span class=\"p\">)</span> <span class=\"o\">*</span> <span class=\"mi\">12</span> <span class=\"o\">-</span> <span class=\"mi\">6</span> <span class=\"o\">+</span> <span class=\"n\">month2</span> <span class=\"o\">+</span> <span class=\"mi\">47</span>\n        <span class=\"k\">for</span> <span class=\"n\">row</span> <span class=\"ow\">in</span> <span class=\"n\">dataReader</span><span class=\"p\">:</span> <span class=\"c1\"># CSVファイルの中身を1行ずつ読み込み</span>\n            <span class=\"n\">n</span> <span class=\"o\">=</span> <span class=\"n\">n</span><span class=\"o\">+</span><span class=\"mi\">1</span>\n            <span class=\"k\">if</span> <span class=\"n\">n</span> <span class=\"o\">&gt;=</span> <span class=\"n\">init_row</span> <span class=\"ow\">and</span> <span class=\"n\">n</span> <span class=\"o\">&lt;=</span> <span class=\"n\">end_row</span><span class=\"p\">:</span> <span class=\"c1\"># init_row行目から、end_row行までif内を実行</span>\n                <span class=\"n\">months</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">row</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">])</span>\n                <span class=\"n\">temp</span> <span class=\"o\">=</span> <span class=\"nb\">float</span><span class=\"p\">(</span><span class=\"n\">row</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">])</span> <span class=\"c1\"># float関数で実数のデータ型に変換する</span>\n                <span class=\"n\">temps</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">temp</span><span class=\"p\">)</span>\n    <span class=\"c1\">#print(months)</span>\n    <span class=\"c1\">#print(temps)</span>\n    <span class=\"n\">plt</span><span class=\"o\">.</span><span class=\"n\">bar</span><span class=\"p\">(</span><span class=\"n\">months</span><span class=\"p\">,</span> <span class=\"n\">temps</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span> <span class=\"n\">months</span><span class=\"p\">,</span> <span class=\"n\">temps</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[36]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"kn\">import</span> <span class=\"nn\">numpy</span> <span class=\"k\">as</span> <span class=\"nn\">np</span>\n<span class=\"kn\">import</span> <span class=\"nn\">matplotlib.pyplot</span> <span class=\"k\">as</span> <span class=\"nn\">plt</span>\n<span class=\"o\">%</span><span class=\"k\">matplotlib</span> inline\n<span class=\"kn\">import</span> <span class=\"nn\">csv</span>\n\n<span class=\"k\">def</span> <span class=\"nf\">hist_tokyotemps</span><span class=\"p\">(</span><span class=\"n\">year1</span><span class=\"p\">,</span> <span class=\"n\">month1</span><span class=\"p\">,</span> <span class=\"n\">year2</span><span class=\"p\">,</span> <span class=\"n\">month2</span><span class=\"p\">,</span> <span class=\"n\">mybin</span><span class=\"p\">):</span>\n    <span class=\"k\">with</span> <span class=\"nb\">open</span><span class=\"p\">(</span><span class=\"s1\">&#39;tokyo-temps.csv&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;r&#39;</span><span class=\"p\">,</span> <span class=\"n\">encoding</span><span class=\"o\">=</span><span class=\"s1\">&#39;sjis&#39;</span><span class=\"p\">)</span> <span class=\"k\">as</span> <span class=\"n\">f</span><span class=\"p\">:</span>\n        <span class=\"n\">dataReader</span> <span class=\"o\">=</span> <span class=\"n\">csv</span><span class=\"o\">.</span><span class=\"n\">reader</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"p\">)</span> <span class=\"c1\"># csvリーダを作成</span>\n        <span class=\"n\">n</span><span class=\"o\">=</span><span class=\"mi\">0</span>\n        <span class=\"n\">months</span> <span class=\"o\">=</span> <span class=\"p\">[]</span> <span class=\"c1\">#</span>\n        <span class=\"n\">temps</span> <span class=\"o\">=</span> <span class=\"p\">[]</span> <span class=\"c1\"># 平均気温</span>\n        <span class=\"n\">init_row</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"n\">year1</span> <span class=\"o\">-</span> <span class=\"mi\">1875</span><span class=\"p\">)</span> <span class=\"o\">*</span> <span class=\"mi\">12</span> <span class=\"o\">-</span> <span class=\"mi\">6</span> <span class=\"o\">+</span> <span class=\"n\">month1</span> <span class=\"o\">+</span> <span class=\"mi\">47</span>\n        <span class=\"n\">end_row</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"n\">year2</span> <span class=\"o\">-</span> <span class=\"mi\">1875</span><span class=\"p\">)</span> <span class=\"o\">*</span> <span class=\"mi\">12</span> <span class=\"o\">-</span> <span class=\"mi\">6</span> <span class=\"o\">+</span> <span class=\"n\">month2</span> <span class=\"o\">+</span> <span class=\"mi\">47</span>\n        <span class=\"k\">for</span> <span class=\"n\">row</span> <span class=\"ow\">in</span> <span class=\"n\">dataReader</span><span class=\"p\">:</span> <span class=\"c1\"># CSVファイルの中身を1行ずつ読み込み</span>\n            <span class=\"n\">n</span> <span class=\"o\">=</span> <span class=\"n\">n</span><span class=\"o\">+</span><span class=\"mi\">1</span>\n            <span class=\"k\">if</span> <span class=\"n\">n</span> <span class=\"o\">&gt;=</span> <span class=\"n\">init_row</span> <span class=\"ow\">and</span> <span class=\"n\">n</span> <span class=\"o\">&lt;=</span> <span class=\"n\">end_row</span><span class=\"p\">:</span> <span class=\"c1\"># init_row行目から、end_row行までif内を実行</span>\n                <span class=\"n\">temp</span> <span class=\"o\">=</span> <span class=\"nb\">float</span><span class=\"p\">(</span><span class=\"n\">row</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">])</span> <span class=\"c1\"># float関数で実数のデータ型に変換する</span>\n                <span class=\"n\">temps</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">temp</span><span class=\"p\">)</span>\n    <span class=\"c1\">#print(months)</span>\n    <span class=\"c1\">#print(temps)</span>\n    <span class=\"n\">plt</span><span class=\"o\">.</span><span class=\"n\">hist</span><span class=\"p\">(</span><span class=\"n\">temps</span><span class=\"p\">,</span> <span class=\"n\">bins</span><span class=\"o\">=</span><span class=\"n\">mybin</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span> <span class=\"n\">temps</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[37]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"kn\">import</span> <span class=\"nn\">numpy</span> <span class=\"k\">as</span> <span class=\"nn\">np</span>\n<span class=\"kn\">import</span> <span class=\"nn\">matplotlib.pyplot</span> <span class=\"k\">as</span> <span class=\"nn\">plt</span>\n<span class=\"o\">%</span><span class=\"k\">matplotlib</span> inline\n<span class=\"kn\">import</span> <span class=\"nn\">csv</span>\n\n<span class=\"k\">def</span> <span class=\"nf\">heat_tokyotemps</span><span class=\"p\">():</span>\n    <span class=\"n\">ary1</span> <span class=\"o\">=</span> <span class=\"n\">np</span><span class=\"o\">.</span><span class=\"n\">zeros</span><span class=\"p\">(</span><span class=\"mi\">30</span><span class=\"o\">*</span><span class=\"mi\">12</span><span class=\"p\">,</span> <span class=\"n\">dtype</span><span class=\"o\">=</span><span class=\"nb\">int</span><span class=\"p\">)</span> <span class=\"c1\"># 30×12の配列を作成</span>\n    <span class=\"n\">ary1</span> <span class=\"o\">=</span> <span class=\"n\">ary1</span><span class=\"o\">.</span><span class=\"n\">reshape</span><span class=\"p\">(</span><span class=\"mi\">30</span><span class=\"p\">,</span> <span class=\"mi\">12</span><span class=\"p\">)</span>\n    <span class=\"k\">with</span> <span class=\"nb\">open</span><span class=\"p\">(</span><span class=\"s1\">&#39;tokyo-temps.csv&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;r&#39;</span><span class=\"p\">,</span> <span class=\"n\">encoding</span><span class=\"o\">=</span><span class=\"s1\">&#39;sjis&#39;</span><span class=\"p\">)</span> <span class=\"k\">as</span> <span class=\"n\">f</span><span class=\"p\">:</span>\n        <span class=\"n\">dataReader</span> <span class=\"o\">=</span> <span class=\"n\">csv</span><span class=\"o\">.</span><span class=\"n\">reader</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"p\">)</span> <span class=\"c1\"># csvリーダを作成</span>\n        <span class=\"n\">n</span><span class=\"o\">=</span><span class=\"mi\">0</span>\n        <span class=\"n\">month</span> <span class=\"o\">=</span> <span class=\"mi\">6</span> <span class=\"c1\"># 一番最初の月（47行目）は6月</span>\n        <span class=\"k\">for</span> <span class=\"n\">row</span> <span class=\"ow\">in</span> <span class=\"n\">dataReader</span><span class=\"p\">:</span> <span class=\"c1\"># CSVファイルの中身を1行ずつ読み込み</span>\n            <span class=\"n\">n</span> <span class=\"o\">=</span> <span class=\"n\">n</span><span class=\"o\">+</span><span class=\"mi\">1</span>\n            <span class=\"k\">if</span> <span class=\"n\">n</span> <span class=\"o\">&gt;=</span> <span class=\"mi\">47</span><span class=\"p\">:</span> <span class=\"c1\"># 47行目からif内を実行</span>\n                <span class=\"n\">temp</span> <span class=\"o\">=</span> <span class=\"nb\">int</span><span class=\"p\">(</span><span class=\"nb\">float</span><span class=\"p\">(</span><span class=\"n\">row</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">]))</span> <span class=\"c1\"># まずfloat関数で実数型に変換してから、int関数で整数のデータ型に変換する</span>\n                <span class=\"n\">ary1</span><span class=\"p\">[</span><span class=\"n\">temp</span><span class=\"p\">][</span><span class=\"n\">month</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">]</span> <span class=\"o\">+=</span> <span class=\"mi\">1</span> <span class=\"c1\"># month月の値はmonth-1行目に格納する</span>\n                <span class=\"n\">month</span> <span class=\"o\">+=</span> <span class=\"mi\">1</span>\n                <span class=\"k\">if</span> <span class=\"n\">month</span> <span class=\"o\">==</span> <span class=\"mi\">13</span><span class=\"p\">:</span>\n                    <span class=\"n\">month</span> <span class=\"o\">=</span> <span class=\"mi\">1</span>\n    <span class=\"n\">im</span><span class=\"o\">=</span><span class=\"n\">plt</span><span class=\"o\">.</span><span class=\"n\">imshow</span><span class=\"p\">(</span><span class=\"n\">ary1</span><span class=\"p\">)</span>\n    <span class=\"n\">plt</span><span class=\"o\">.</span><span class=\"n\">colorbar</span><span class=\"p\">(</span><span class=\"n\">im</span><span class=\"p\">);</span>\n    <span class=\"c1\">#print(ary1)</span>\n    <span class=\"k\">return</span> <span class=\"n\">ary1</span>\n</pre></div>\n</div>\n</div>\n</section>\n</section>\n\n\n          </div>\n          \n        </div>\n      </div>\n      <div class=\"sphinxsidebar\" role=\"navigation\" aria-label=\"Main\">\n        <div class=\"sphinxsidebarwrapper\">\n<h1 class=\"logo\"><a href=\"../index.html\">Pythonプログラミング入門</a></h1>\n\n\n\n\n\n\n\n\n<p>\n  <a style=\"font-family: sans-serif; font-size: smaller; background: linear-gradient(to top, #353535 0%, #141414 100%); -webkit-font-smoothing: antialiased; font-weight: normal; text-shadow: rgb(0 0 0 / 40%) 0 -1px 0; padding: 2px 6px; color: #fff; text-decoration: none; border-radius: 4px; border: 1px solid #0d0d0d; box-shadow: inset 0 1px 1px 0 #8f8f8f;\" href=\"https://github.com/utokyo-ipp/utokyo-ipp.github.io\">View on GitHub</a>\n</p><p>\n  <a style=\"font-family: sans-serif; font-size: smaller; background: linear-gradient(to top, #ff1e00 0%, #de1e00 100%); -webkit-font-smoothing: antialiased; font-weight: normal; text-shadow: rgb(0 0 0 / 40%) 0 -1px 0; padding: 2px 6px; color: #fff; text-decoration: none; border-radius: 4px; border: 1px solid #0d0d0d; box-shadow: inset 0 1px 1px 0 #ff8e70;\" href=\"https://utokyo-ipp.github.io/IPP_textbook.pdf\">View PDF</a>\n</p><p>\n  <a style=\"border-bottom: none;\" href=\"https://colab.research.google.com/github/utokyo-ipp/utokyo-ipp.github.io/blob/master/colab/appendix/5-matplotlib.ipynb\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Google Colaboratory\"></a>\n</p><h3>Navigation</h3>\n<ul class=\"current\">\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../1/1-0.html\">1-0. Colaboratory (Colab) の使い方</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../1/1-1.html\">1-1. 数値演算</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../1/1-2.html\">1-2. 変数と関数の基礎</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../1/1-3.html\">1-3. 論理・比較演算と条件分岐の基礎</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../1/1-4.html\">1-4. テストとデバッグ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../2/2-1.html\">2-1. 文字列 (string)</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../2/2-2.html\">2-2. リスト (list)</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../2/2-3.html\">2-3. 条件分岐</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../3/3-1.html\">3-1. 辞書 (dictionary)</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../3/3-2.html\">3-2. 繰り返し</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../3/3-3.html\">3-3. 関数</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../4/4-1.html\">4-1. ファイル入出力の基本</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../4/4-2.html\">4-2. イテラブルとイテレータ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../4/4-3.html\">4-3. ディレクトリと木構造</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../5/5-1.html\">5-1. モジュールの使い方</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../5/5-2.html\">5-2. モジュールの作り方</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../5/5-3.html\">5-3. NumPyライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../6/6-1.html\">6-1. 内包表記</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../6/6-2.html\">6-2. 高階関数</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../6/6-3.html\">6-3. クラス</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../7/7-1.html\">7-1. pandasライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../7/7-2.html\">7-2. scikit-learnライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"1-jupyter-notebook.html\">▲Jupyter Notebook の使い方</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"2-set.html\">▲セット (set)</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"3-recursion.html\">▲再帰</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"3-visualization.html\">▲簡単なデータの可視化</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"4-csv.html\">▲CSVファイルの入出力</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"5-bokeh.html\">▲Bokehライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"5-command.html\">▲Pythonスクリプトとコマンドライン実行</a></li>\n<li class=\"toctree-l1 current\"><a class=\"current reference internal\" href=\"#\">▲Matplotlibライブラリ</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#線グラフ\">線グラフ</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#練習\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#id4\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#散布図\">散布図</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#id6\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#棒グラフ\">棒グラフ</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#id8\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#ヒストグラム\">ヒストグラム</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#id10\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#ヒートマップ\">ヒートマップ</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#id12\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#グラフの画像ファイル出力\">グラフの画像ファイル出力</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#練習の解答\">練習の解答</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"5-re.html\">▲正規表現</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../index_of_terms.html\">索引</a></li>\n</ul>\n\n<div class=\"relations\">\n<h3>Related Topics</h3>\n<ul>\n  <li><a href=\"../index.html\">Documentation overview</a><ul>\n      <li>Previous: <a href=\"5-command.html\" title=\"previous chapter\">▲Pythonスクリプトとコマンドライン実行</a></li>\n      <li>Next: <a href=\"5-re.html\" title=\"next chapter\">▲正規表現</a></li>\n  </ul></li>\n</ul>\n</div>\n<search id=\"searchbox\" style=\"display: none\" role=\"search\">\n  <h3 id=\"searchlabel\">Quick search</h3>\n    <div class=\"searchformwrapper\">\n    <form class=\"search\" action=\"../search.html\" method=\"get\">\n      <input type=\"text\" name=\"q\" aria-labelledby=\"searchlabel\" autocomplete=\"off\" autocorrect=\"off\" autocapitalize=\"off\" spellcheck=\"false\"/>\n      <input type=\"submit\" value=\"Go\" />\n    </form>\n    </div>\n</search>\n<script>document.getElementById('searchbox').style.display = \"block\"</script>\n\n\n\n\n\n\n\n\n        </div>\n      </div>\n      <div class=\"clearer\"></div>\n    </div>\n    <div class=\"footer\">\n      &#169;2020–2024, 東京大学 数理・情報教育研究センター (CC BY-NC-ND 4.0).\n      \n      |\n      Powered by <a href=\"https://www.sphinx-doc.org/\">Sphinx 8.0.2</a>\n      &amp; <a href=\"https://alabaster.readthedocs.io\">Alabaster 1.0.0</a>\n      \n    </div>\n\n    \n\n    \n    <script>\n\n      var _gaq = _gaq || [];\n      _gaq.push(['_setAccount', 'G-8M0RXGPPSR']);\n      _gaq.push(['_setDomainName', 'none']);\n      _gaq.push(['_setAllowLinker', true]);\n      _gaq.push(['_trackPageview']);\n\n      (function() {\n        var ga = document.createElement('script'); ga.async = true;\n        ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'https://www') + '.google-analytics.com/ga.js';\n        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);\n      })();\n\n    </script>\n    \n  </body>\n</html>"
  },
  {
    "path": "docs/appendix/5-re.html",
    "content": "<!DOCTYPE html>\n\n<html lang=\"jp\" data-content_root=\"../\">\n  <head>\n    <meta charset=\"utf-8\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" /><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n\n    <!-- Google tag (gtag.js) -->\n    <script async src=\"https://www.googletagmanager.com/gtag/js?id=G-8M0RXGPPSR\"></script>\n    <script>\n        window.dataLayer = window.dataLayer || [];\n        function gtag(){dataLayer.push(arguments);}\n        gtag('js', new Date());\n        gtag('config', 'G-8M0RXGPPSR');\n    </script>\n    \n    <title>▲正規表現 &#8212; Pythonプログラミング入門  documentation</title>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/pygments.css?v=d1102ebc\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/basic.css?v=c058f7c8\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/alabaster.css?v=27fed22d\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/nbsphinx-code-cells.css\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../_static/custom.css?v=1a1aa8dd\" />\n    <script src=\"../_static/documentation_options.js?v=3ff7d7a7\"></script>\n    <script src=\"../_static/doctools.js?v=9a2dae69\"></script>\n    <script src=\"../_static/sphinx_highlight.js?v=dc90522c\"></script>\n    <script crossorigin=\"anonymous\" integrity=\"sha256-Ae2Vz/4ePdIu6ZyI/5ZGsYnb+m0JlOmKPjt6XZ9JJkA=\" src=\"https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.4/require.min.js\"></script>\n    <script>window.MathJax = {\"tex\": {\"inlineMath\": [[\"$\", \"$\"], [\"\\\\(\", \"\\\\)\"]], \"processEscapes\": true}, \"options\": {\"ignoreHtmlClass\": \"tex2jax_ignore|mathjax_ignore|document\", \"processHtmlClass\": \"tex2jax_process|mathjax_process|math|output_area\"}}</script>\n    <script defer=\"defer\" src=\"https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js\"></script>\n    <link rel=\"index\" title=\"Index\" href=\"../genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"../search.html\" />\n    <link rel=\"next\" title=\"索引\" href=\"../index_of_terms.html\" />\n    <link rel=\"prev\" title=\"▲Matplotlibライブラリ\" href=\"5-matplotlib.html\" />\n   \n  <link rel=\"stylesheet\" href=\"../_static/custom.css\" type=\"text/css\" />\n  \n\n  \n  \n\n  </head><body>\n  \n\n    <div class=\"document\">\n      <div class=\"documentwrapper\">\n        <div class=\"bodywrapper\">\n          \n\n          <div class=\"body\" role=\"main\">\n            \n  <section id=\"▲正規表現\">\n<h1>▲正規表現<a class=\"headerlink\" href=\"#▲正規表現\" title=\"Link to this heading\">¶</a></h1>\n<p>正規表現について説明します。</p>\n<p>参考</p>\n<ul class=\"simple\">\n<li><p><a class=\"reference external\" href=\"https://docs.python.jp/3/library/re.html\">https://docs.python.jp/3/library/re.html</a></p></li>\n</ul>\n<p><strong>正規表現</strong> (regular expression) を扱う場合、<code class=\"docutils literal notranslate\"><span class=\"pre\">re</span></code> というモジュールをインポートする必要があります。</p>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[1]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"kn\">import</span> <span class=\"nn\">re</span>\n</pre></div>\n</div>\n</div>\n<section id=\"正規表現の基本\">\n<h2>正規表現の基本<a class=\"headerlink\" href=\"#正規表現の基本\" title=\"Link to this heading\">¶</a></h2>\n<p>正規表現とは、文字列の<strong>パターン</strong>を表す式です。 文字列が正規表現に<strong>マッチする</strong>とは、文字列が正規表現の表すパターンに適合していることを意味します。 また、正規表現が文字列にマッチするという言い方もします。</p>\n<p>たとえば、正規表現 <code class=\"docutils literal notranslate\"><span class=\"pre\">abc</span></code> は文字列 <code class=\"docutils literal notranslate\"><span class=\"pre\">abcde</span></code> （の部分文字列 <code class=\"docutils literal notranslate\"><span class=\"pre\">abc</span></code>）にマッチします。</p>\n<p>正規表現に文字列がマッチしているかどうかを調べることのできる関数に <code class=\"docutils literal notranslate\"><span class=\"pre\">match</span></code> があります。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">match</span></code> は、指定した <code class=\"docutils literal notranslate\"><span class=\"pre\">正規表現A</span></code> が <code class=\"docutils literal notranslate\"><span class=\"pre\">文字列B</span></code>（の先頭部分）にマッチするかどうか調べます。</p>\n<div class=\"highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>re.match(正規表現A, 文字列B)\n</pre></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[2]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">match</span><span class=\"p\">(</span><span class=\"s1\">&#39;abc&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;abcde&#39;</span><span class=\"p\">)</span> <span class=\"c1\">#マッチする</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">match1</span><span class=\"p\">)</span>\n<span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">match</span><span class=\"p\">(</span><span class=\"s1\">&#39;abc&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;ababc&#39;</span><span class=\"p\">)</span> <span class=\"c1\">#マッチしない</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">match1</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n&lt;re.Match object; span=(0, 3), match=&#39;abc&#39;&gt;\nNone\n</pre></div></div>\n</div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">match</span></code> では、マッチが成立している場合、<strong>matchオブジェクト</strong>と呼ばれる特殊なデータを返します。マッチが成立しない場合、 <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code> を返します。</p>\n<p>つまり、マッチする部分文字列を含む場合、返値は <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code> ではないので、if文などの条件で真とみなされます。 したがって以下のようにして条件分岐することができます。</p>\n<div class=\"highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>if re.match(正規表現, 文字列):\n    ...\n</pre></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[3]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">if</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">match</span><span class=\"p\">(</span><span class=\"s1\">&#39;abc&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;abcde&#39;</span><span class=\"p\">):</span> <span class=\"c1\">#マッチする</span>\n    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s1\">&#39;正規表現abcが文字列abcdeにマッチする&#39;</span><span class=\"p\">)</span>\n<span class=\"k\">else</span><span class=\"p\">:</span>\n    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s1\">&#39;正規表現abcが文字列abcdeにマッチしない&#39;</span><span class=\"p\">)</span>\n<span class=\"k\">if</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">match</span><span class=\"p\">(</span><span class=\"s1\">&#39;abc&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;ababc&#39;</span><span class=\"p\">):</span> <span class=\"c1\">#マッチしない</span>\n    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s1\">&#39;正規表現abcが文字列ababcにマッチする&#39;</span><span class=\"p\">)</span>\n<span class=\"k\">else</span><span class=\"p\">:</span>\n    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s1\">&#39;正規表現abcが文字列ababcにマッチしない&#39;</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n正規表現abcが文字列abcdeにマッチする\n正規表現abcが文字列ababcにマッチしない\n</pre></div></div>\n</div>\n<p>さて、上で紹介したmatchオブジェクトには、マッチした文字列の情報が格納されています。上のセルの1つ目の実行結果を印字したものを見てください。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;_sre.SRE_Match</span> <span class=\"pre\">object;</span> <span class=\"pre\">span=(0,</span> <span class=\"pre\">3),</span> <span class=\"pre\">match='abc'&gt;</span></code> と表示されていると思います。このオブジェクト内の <code class=\"docutils literal notranslate\"><span class=\"pre\">match</span></code> という値は、マッチした文字列を、 <code class=\"docutils literal notranslate\"><span class=\"pre\">span</span></code> という値はマッチしたパターンが存在する、文字列のインデックスの範囲を表します。</p>\n<p>正規表現では大文字と小文字は区別されます。たとえば、正規表現 <code class=\"docutils literal notranslate\"><span class=\"pre\">abc</span></code> は文字列 <code class=\"docutils literal notranslate\"><span class=\"pre\">ABCdef</span></code> にはマッチしません。勿論、正規表現 <code class=\"docutils literal notranslate\"><span class=\"pre\">ABC</span></code> も文字列 <code class=\"docutils literal notranslate\"><span class=\"pre\">abcdef</span></code> にはマッチしません。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[4]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">match</span><span class=\"p\">(</span><span class=\"s1\">&#39;abc&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;ABCdef&#39;</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">match1</span><span class=\"p\">)</span>\n<span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">match</span><span class=\"p\">(</span><span class=\"s1\">&#39;ABC&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;abcdef&#39;</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">match1</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nNone\nNone\n</pre></div></div>\n</div>\n<p>そこで <code class=\"docutils literal notranslate\"><span class=\"pre\">match</span></code> の3番目の引数として <code class=\"docutils literal notranslate\"><span class=\"pre\">re.IGNORECASE</span></code> もしくは <code class=\"docutils literal notranslate\"><span class=\"pre\">re.I</span></code> を指定すると、大文字と小文字を区別せずにマッチするかどうかを調べることができます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[5]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">match</span><span class=\"p\">(</span><span class=\"s1\">&#39;abc&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;ABCdef&#39;</span><span class=\"p\">,</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">IGNORECASE</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">match1</span><span class=\"p\">)</span>\n<span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">match</span><span class=\"p\">(</span><span class=\"s1\">&#39;ABC&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;abcdef&#39;</span><span class=\"p\">,</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">IGNORECASE</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">match1</span><span class=\"p\">)</span>\n<span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">match</span><span class=\"p\">(</span><span class=\"s1\">&#39;ABC&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;ABCdef&#39;</span><span class=\"p\">,</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">IGNORECASE</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">match1</span><span class=\"p\">)</span>\n<span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">match</span><span class=\"p\">(</span><span class=\"s1\">&#39;abc&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;ABCdef&#39;</span><span class=\"p\">,</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">I</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">match1</span><span class=\"p\">)</span>\n<span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">match</span><span class=\"p\">(</span><span class=\"s1\">&#39;ABC&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;abcdef&#39;</span><span class=\"p\">,</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">I</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">match1</span><span class=\"p\">)</span>\n<span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">match</span><span class=\"p\">(</span><span class=\"s1\">&#39;ABC&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;ABCdef&#39;</span><span class=\"p\">,</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">I</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">match1</span><span class=\"p\">)</span>\n<span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">match</span><span class=\"p\">(</span><span class=\"s1\">&#39;AbC&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;aBcdef&#39;</span><span class=\"p\">,</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">I</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">match1</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n&lt;re.Match object; span=(0, 3), match=&#39;ABC&#39;&gt;\n&lt;re.Match object; span=(0, 3), match=&#39;abc&#39;&gt;\n&lt;re.Match object; span=(0, 3), match=&#39;ABC&#39;&gt;\n&lt;re.Match object; span=(0, 3), match=&#39;ABC&#39;&gt;\n&lt;re.Match object; span=(0, 3), match=&#39;abc&#39;&gt;\n&lt;re.Match object; span=(0, 3), match=&#39;ABC&#39;&gt;\n&lt;re.Match object; span=(0, 3), match=&#39;aBc&#39;&gt;\n</pre></div></div>\n</div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">match</span></code> は文字列の先頭がマッチするかどうか調べますので、次のような場合、matchオブジェクトを返さずに <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code> が返されます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[6]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">match</span><span class=\"p\">(</span><span class=\"s1\">&#39;def&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;abcdef&#39;</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">match1</span><span class=\"p\">)</span>\n<span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">match</span><span class=\"p\">(</span><span class=\"s1\">&#39;xyz&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;abcdef&#39;</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">match1</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nNone\nNone\n</pre></div></div>\n</div>\n<p>文字列の先頭しか調べられないのでは、いかにも不便です。</p>\n<p>そこで、関数 <code class=\"docutils literal notranslate\"><span class=\"pre\">search</span></code> は、指定した <code class=\"docutils literal notranslate\"><span class=\"pre\">正規表現A</span></code> が <code class=\"docutils literal notranslate\"><span class=\"pre\">文字列B</span></code> に（文字列の先頭以外でも）マッチするかどうか調べることができます。</p>\n<div class=\"highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>re.search(正規表現A, 文字列B)\n</pre></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[7]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">search</span><span class=\"p\">(</span><span class=\"s1\">&#39;abc&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;abcdef&#39;</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">match1</span><span class=\"p\">)</span>\n<span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">search</span><span class=\"p\">(</span><span class=\"s1\">&#39;abc&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;ababcd&#39;</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">match1</span><span class=\"p\">)</span>\n<span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">search</span><span class=\"p\">(</span><span class=\"s1\">&#39;def&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;abcdef&#39;</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">match1</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n&lt;re.Match object; span=(0, 3), match=&#39;abc&#39;&gt;\n&lt;re.Match object; span=(2, 5), match=&#39;abc&#39;&gt;\n&lt;re.Match object; span=(3, 6), match=&#39;def&#39;&gt;\n</pre></div></div>\n</div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">search</span></code> の場合も3番目の引数として <code class=\"docutils literal notranslate\"><span class=\"pre\">re.IGNORECASE</span></code>、 もしくは <code class=\"docutils literal notranslate\"><span class=\"pre\">re.I</span></code> を指定することで、大文字と小文字を区別せずにマッチするかどうかを調べることができます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[8]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">search</span><span class=\"p\">(</span><span class=\"s1\">&#39;abc&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;ABCdef&#39;</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">match1</span><span class=\"p\">)</span>\n<span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">search</span><span class=\"p\">(</span><span class=\"s1\">&#39;DEF&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;abcdef&#39;</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">match1</span><span class=\"p\">)</span>\n<span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">search</span><span class=\"p\">(</span><span class=\"s1\">&#39;abc&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;ABCdef&#39;</span><span class=\"p\">,</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">IGNORECASE</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">match1</span><span class=\"p\">)</span>\n<span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">search</span><span class=\"p\">(</span><span class=\"s1\">&#39;DEF&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;abcdef&#39;</span><span class=\"p\">,</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">I</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">match1</span><span class=\"p\">)</span>\n<span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">search</span><span class=\"p\">(</span><span class=\"s1\">&#39;not&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;It is NOT me.&#39;</span><span class=\"p\">,</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">I</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">match1</span><span class=\"p\">)</span>\n<span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">search</span><span class=\"p\">(</span><span class=\"s1\">&#39;NOT&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;It is not mine.&#39;</span><span class=\"p\">,</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">I</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">match1</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nNone\nNone\n&lt;re.Match object; span=(0, 3), match=&#39;ABC&#39;&gt;\n&lt;re.Match object; span=(3, 6), match=&#39;def&#39;&gt;\n&lt;re.Match object; span=(6, 9), match=&#39;NOT&#39;&gt;\n&lt;re.Match object; span=(6, 9), match=&#39;not&#39;&gt;\n</pre></div></div>\n</div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">match</span></code> 関数と同様に、 <code class=\"docutils literal notranslate\"><span class=\"pre\">search</span></code> 関数においても、if文を使った条件分岐が可能であることは覚えておいてください。</p>\n<div class=\"highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>if re.search(正規表現, 文字列):\n    ...\n</pre></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[9]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"k\">if</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">search</span><span class=\"p\">(</span><span class=\"s1\">&#39;not&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;It is NOT me.&#39;</span><span class=\"p\">):</span>\n    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s1\">&#39;正規表現notが文字列It is NOT me.にマッチする&#39;</span><span class=\"p\">)</span>\n<span class=\"k\">else</span><span class=\"p\">:</span>\n    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s1\">&#39;正規表現notが文字列It is NOT me.にマッチしない&#39;</span><span class=\"p\">)</span>\n<span class=\"k\">if</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">search</span><span class=\"p\">(</span><span class=\"s1\">&#39;not&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;It is NOT me.&#39;</span><span class=\"p\">,</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">I</span><span class=\"p\">):</span>\n    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s1\">&#39;正規表現notが文字列It is NOT me.にマッチする&#39;</span><span class=\"p\">)</span>\n<span class=\"k\">else</span><span class=\"p\">:</span>\n    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s1\">&#39;正規表現notが文字列It is NOT me.にマッチしない&#39;</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n正規表現notが文字列It is NOT me.にマッチしない\n正規表現notが文字列It is NOT me.にマッチする\n</pre></div></div>\n</div>\n<p>文字列の先頭からのマッチを調べたいときには、正規表現の先頭にキャレット (<code class=\"docutils literal notranslate\"><span class=\"pre\">^</span></code>) をつけてください。また、文字列の最後からマッチさせたいときは、正規表現の最後にドル記号 (<code class=\"docutils literal notranslate\"><span class=\"pre\">$</span></code>) をつけてください。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[10]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">search</span><span class=\"p\">(</span><span class=\"s1\">&#39;abc&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;ababcd&#39;</span><span class=\"p\">)</span>  <span class=\"c1\">#キャレットなしだとマッチする</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">match1</span><span class=\"p\">)</span>\n<span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">search</span><span class=\"p\">(</span><span class=\"s1\">&#39;^abc&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;ababcd&#39;</span><span class=\"p\">)</span> <span class=\"c1\">#キャレットありだとマッチしない</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">match1</span><span class=\"p\">)</span>\n<span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">search</span><span class=\"p\">(</span><span class=\"s1\">&#39;def&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;abcdefg&#39;</span><span class=\"p\">)</span> <span class=\"c1\">#ドル記号なしだとマッチする</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">match1</span><span class=\"p\">)</span>\n<span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">search</span><span class=\"p\">(</span><span class=\"s1\">&#39;def$&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;abcdefg&#39;</span><span class=\"p\">)</span> <span class=\"c1\">#ドル記号ありだとマッチしない</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">match1</span><span class=\"p\">)</span>\n<span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">search</span><span class=\"p\">(</span><span class=\"s1\">&#39;def$&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;abcdefxyzdef&#39;</span><span class=\"p\">)</span> <span class=\"c1\"># 2つあるうちの2番目（最後）の def にマッチする</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">match1</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n&lt;re.Match object; span=(2, 5), match=&#39;abc&#39;&gt;\nNone\n&lt;re.Match object; span=(3, 6), match=&#39;def&#39;&gt;\nNone\n&lt;re.Match object; span=(9, 12), match=&#39;def&#39;&gt;\n</pre></div></div>\n</div>\n<p>ただ、ここまでの内容だと、正規表現を用いずに文字列のメソッド （<code class=\"docutils literal notranslate\"><span class=\"pre\">find</span></code> など）によっても実現が可能です。これでは正規表現を使うメリットはほとんどありません。</p>\n<p>というのも、ここまで見てきた1つの正規表現によって、1つの文字列を表していたからです。しかし、最初に言った通り、正規表現は文字列の「パターン」を表します。すなわち、1つの正規表現で複数の文字列を表すことが可能なのです。</p>\n<p>たとえば、正規表現 <code class=\"docutils literal notranslate\"><span class=\"pre\">ab</span></code> と正規表現 <code class=\"docutils literal notranslate\"><span class=\"pre\">de</span></code> という2つの正規表現を <code class=\"docutils literal notranslate\"><span class=\"pre\">|</span></code> という記号で繋げた <code class=\"docutils literal notranslate\"><span class=\"pre\">ab|de</span></code> も正規表現を表します。この正規表現では、<code class=\"docutils literal notranslate\"><span class=\"pre\">ab</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">de</span></code> という2つの文字列を表しており、これらのいずれかを含む文字列にマッチします。この <code class=\"docutils literal notranslate\"><span class=\"pre\">|</span></code> の記号（演算）を<strong>和</strong>、もしくは<strong>選択</strong>といいます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[11]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">search</span><span class=\"p\">(</span><span class=\"s1\">&#39;ab|de&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;bcdef&#39;</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">match1</span><span class=\"p\">)</span>\n<span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">search</span><span class=\"p\">(</span><span class=\"s1\">&#39;ab|de&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;abcdef&#39;</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">match1</span><span class=\"p\">)</span>\n<span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">search</span><span class=\"p\">(</span><span class=\"s1\">&#39;ab|de&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;fgdeab&#39;</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">match1</span><span class=\"p\">)</span>\n<span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">search</span><span class=\"p\">(</span><span class=\"s1\">&#39;ab|de&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;acdf&#39;</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">match1</span><span class=\"p\">)</span>\n<span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">search</span><span class=\"p\">(</span><span class=\"s1\">&#39;a|an|the&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;I slipped on a piece of the banana.&#39;</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">match1</span><span class=\"p\">)</span>\n<span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">search</span><span class=\"p\">(</span><span class=\"s1\">&#39;a|an|the&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;I slipped on the banana.&#39;</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">match1</span><span class=\"p\">)</span>\n<span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">search</span><span class=\"p\">(</span><span class=\"s1\">&#39;Good (Morning|Evening)&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Good Evening, Vietnam.&#39;</span><span class=\"p\">)</span> <span class=\"c1\">#正規表現内の（）については下で述べます</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">match1</span><span class=\"p\">)</span>\n<span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">search</span><span class=\"p\">(</span><span class=\"s1\">&#39;colo(u|)r&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;That color matches your suit.&#39;</span><span class=\"p\">)</span> <span class=\"c1\">#正規表現内の（）については下で述べます</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">match1</span><span class=\"p\">)</span>\n<span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">search</span><span class=\"p\">(</span><span class=\"s1\">&#39;colo(u|)r&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;That colour matches your suit.&#39;</span><span class=\"p\">)</span> <span class=\"c1\">#正規表現内の（）については下で述べます</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">match1</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n&lt;re.Match object; span=(2, 4), match=&#39;de&#39;&gt;\n&lt;re.Match object; span=(0, 2), match=&#39;ab&#39;&gt;\n&lt;re.Match object; span=(2, 4), match=&#39;de&#39;&gt;\nNone\n&lt;re.Match object; span=(13, 14), match=&#39;a&#39;&gt;\n&lt;re.Match object; span=(13, 16), match=&#39;the&#39;&gt;\n&lt;re.Match object; span=(0, 12), match=&#39;Good Evening&#39;&gt;\n&lt;re.Match object; span=(5, 10), match=&#39;color&#39;&gt;\n&lt;re.Match object; span=(5, 11), match=&#39;colour&#39;&gt;\n</pre></div></div>\n</div>\n<p>上記の3番目の例に注意してください。正規表現 <code class=\"docutils literal notranslate\"><span class=\"pre\">ab</span> <span class=\"pre\">|</span> <span class=\"pre\">de</span></code> では <code class=\"docutils literal notranslate\"><span class=\"pre\">ab</span></code> が <code class=\"docutils literal notranslate\"><span class=\"pre\">de</span></code> よりも先に記述されていますが、マッチする文字列は文字列上で先に出てきた方（<code class=\"docutils literal notranslate\"><span class=\"pre\">ab</span></code> ではなく、<code class=\"docutils literal notranslate\"><span class=\"pre\">de</span></code>）であることに注意してください。</p>\n<p>細かい話ですが、正規表現 <code class=\"docutils literal notranslate\"><span class=\"pre\">abc</span></code> は、正規表現 <code class=\"docutils literal notranslate\"><span class=\"pre\">a</span></code> と正規表現 <code class=\"docutils literal notranslate\"><span class=\"pre\">b</span></code> と正規表現 <code class=\"docutils literal notranslate\"><span class=\"pre\">c</span></code> という3つの正規表現を繋げて構成された正規表現であり、このように正規表現を繋げて新しい正規表現を作る演算を<strong>連接</strong>といいます。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">a*</span></code> は、正規表現 <code class=\"docutils literal notranslate\"><span class=\"pre\">a</span></code> を0回以上繰り返した文字列とマッチします。この <code class=\"docutils literal notranslate\"><span class=\"pre\">*</span></code> の演算を<strong>閉包</strong>といいます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[12]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">search</span><span class=\"p\">(</span><span class=\"s1\">&#39;a*&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;abcdef&#39;</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">match1</span><span class=\"p\">)</span>\n<span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">search</span><span class=\"p\">(</span><span class=\"s1\">&#39;a*&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;aabbcc&#39;</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">match1</span><span class=\"p\">)</span>\n<span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">search</span><span class=\"p\">(</span><span class=\"s1\">&#39;a*&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;cde&#39;</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">match1</span><span class=\"p\">)</span>\n<span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">search</span><span class=\"p\">(</span><span class=\"s1\">&#39;bo*&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;boooo!&#39;</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">match1</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n&lt;re.Match object; span=(0, 1), match=&#39;a&#39;&gt;\n&lt;re.Match object; span=(0, 2), match=&#39;aa&#39;&gt;\n&lt;re.Match object; span=(0, 0), match=&#39;&#39;&gt;\n&lt;re.Match object; span=(0, 5), match=&#39;boooo&#39;&gt;\n</pre></div></div>\n</div>\n<p>上記の3番目の例において（文字 <code class=\"docutils literal notranslate\"><span class=\"pre\">a</span></code> が含まれていないにも関わらず）<code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code> が返らずに、マッチしているのを不思議に思うかもしれません。しかし、<code class=\"docutils literal notranslate\"><span class=\"pre\">a*</span></code> は <code class=\"docutils literal notranslate\"><span class=\"pre\">a</span></code> を0回反復した文字列にもマッチします。この0回反復した文字列とは、長さが0の文字列であり、<strong>空列</strong>とか<strong>空文字列</strong>と呼ばれます。文字列 <code class=\"docutils literal notranslate\"><span class=\"pre\">cde</span></code> の先頭には、空列があると見なせるので、<code class=\"docutils literal notranslate\"><span class=\"pre\">a*</span></code> が先頭部分にマッチしているのです。</p>\n<p>たとえば、正規表現 <code class=\"docutils literal notranslate\"><span class=\"pre\">abb*</span></code> は、 <code class=\"docutils literal notranslate\"><span class=\"pre\">ab</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">abb</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">abbb</span></code>, … という文字列にマッチします。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[13]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">search</span><span class=\"p\">(</span><span class=\"s1\">&#39;abb*&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;abcdef&#39;</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">match1</span><span class=\"p\">)</span>\n<span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">search</span><span class=\"p\">(</span><span class=\"s1\">&#39;abb*&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;aabbcc&#39;</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">match1</span><span class=\"p\">)</span>\n<span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">search</span><span class=\"p\">(</span><span class=\"s1\">&#39;abb*&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;cde&#39;</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">match1</span><span class=\"p\">)</span>\n<span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">search</span><span class=\"p\">(</span><span class=\"s1\">&#39;hello*&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Hi, hellooooo!&#39;</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">match1</span><span class=\"p\">)</span>\n<span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">search</span><span class=\"p\">(</span><span class=\"s1\">&#39;hello*&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Hi, good morning!&#39;</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">match1</span><span class=\"p\">)</span>\n<br/></pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n&lt;re.Match object; span=(0, 2), match=&#39;ab&#39;&gt;\n&lt;re.Match object; span=(1, 4), match=&#39;abb&#39;&gt;\nNone\n&lt;re.Match object; span=(4, 13), match=&#39;hellooooo&#39;&gt;\nNone\n</pre></div></div>\n</div>\n<p>これまでに紹介した連接、和、閉包という3つの演算を組み合わせることで様々な正規表現を記述することができますが、これらの演算には結合の強さが存在します。たとえば、先に見た <code class=\"docutils literal notranslate\"><span class=\"pre\">ab</span> <span class=\"pre\">|</span> <span class=\"pre\">cd</span></code> という正規表現は、 <code class=\"docutils literal notranslate\"><span class=\"pre\">ab</span></code> もしくは <code class=\"docutils literal notranslate\"><span class=\"pre\">cd</span></code> という文字列にマッチします（<code class=\"docutils literal notranslate\"><span class=\"pre\">(ab)|(cd)</span></code> と同じ意味です）。つまり、連接の方が和よりも強く結合しているのです。そこで、丸括弧を使って <code class=\"docutils literal notranslate\"><span class=\"pre\">a(b|c)d</span></code> とすると、この正規表現は、<code class=\"docutils literal notranslate\"><span class=\"pre\">abd</span> <span class=\"pre\">|</span> <span class=\"pre\">acd</span></code> と同じ意味になります。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[14]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">search</span><span class=\"p\">(</span><span class=\"s1\">&#39;ab|de&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;fgdeab&#39;</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">match1</span><span class=\"p\">)</span>\n<span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">search</span><span class=\"p\">(</span><span class=\"s1\">&#39;(ab)|(de)&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;fgdeab&#39;</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">match1</span><span class=\"p\">)</span>\n<span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">search</span><span class=\"p\">(</span><span class=\"s1\">&#39;a(b|d)e&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;fgdeab&#39;</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">match1</span><span class=\"p\">)</span>\n<span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">search</span><span class=\"p\">(</span><span class=\"s1\">&#39;a(b|d)e&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;fgadeab&#39;</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">match1</span><span class=\"p\">)</span>\n<span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">search</span><span class=\"p\">(</span><span class=\"s1\">&#39;abe|ade&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;fgadeab&#39;</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">match1</span><span class=\"p\">)</span>\n<span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">search</span><span class=\"p\">(</span><span class=\"s2\">&quot;(I|i)t(&#39;s| is| was)&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;It was rainy yesterday, but it&#39;s fine today.&quot;</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">match1</span><span class=\"p\">)</span>\n<span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">search</span><span class=\"p\">(</span><span class=\"s2\">&quot;(I|i)t(&#39;s| is| was)&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;It rained yesterday, but it&#39;s fine today.&quot;</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">match1</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n&lt;re.Match object; span=(2, 4), match=&#39;de&#39;&gt;\n&lt;re.Match object; span=(2, 4), match=&#39;de&#39;&gt;\nNone\n&lt;re.Match object; span=(2, 5), match=&#39;ade&#39;&gt;\n&lt;re.Match object; span=(2, 5), match=&#39;ade&#39;&gt;\n&lt;re.Match object; span=(0, 6), match=&#39;It was&#39;&gt;\n&lt;re.Match object; span=(25, 29), match=&#34;it&#39;s&#34;&gt;\n</pre></div></div>\n</div>\n<p>演算の結合の強さは、「和 &lt; 連接 &lt; 閉包」という順序になっています。これは数学の、「和（＋）&lt; 積(×) &lt; べき」と同じですので、直感的にもわかりやすいと思います。これまでに紹介した連接、和、閉包という3つの演算と結合の順序を明記する丸括弧 <code class=\"docutils literal notranslate\"><span class=\"pre\">()</span></code> とを組み合わせることで様々な正規表現を記述することができます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[15]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">search</span><span class=\"p\">(</span><span class=\"s1\">&#39;a(bc|b)*&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;defabcxyz&#39;</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">match1</span><span class=\"p\">)</span>\n<span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">search</span><span class=\"p\">(</span><span class=\"s1\">&#39;a(bc|b)*&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;bbacbabbbbc&#39;</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">match1</span><span class=\"p\">)</span>\n<span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">search</span><span class=\"p\">(</span><span class=\"s1\">&#39;ca(r|t(egory|tle|))&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;What category is this cat in?&#39;</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">match1</span><span class=\"p\">)</span>\n<span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">search</span><span class=\"p\">(</span><span class=\"s1\">&#39;ca(r|t(egory|tle|))&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;No, this is not a carpet.&#39;</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">match1</span><span class=\"p\">)</span>\n<span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">search</span><span class=\"p\">(</span><span class=\"s1\">&#39;ca(r|t(egory|tle|))&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;We saw a cattle car almost hit the cat.&#39;</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">match1</span><span class=\"p\">)</span>\n<span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">search</span><span class=\"p\">(</span><span class=\"s1\">&#39;ca(r|t(egory|tle|))&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Please locate him.&#39;</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">match1</span><span class=\"p\">)</span>\n<span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">search</span><span class=\"p\">(</span><span class=\"s1\">&#39;ca(r|t(egory|tle|))&#39;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;Don&#39;t play castanets.&quot;</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">match1</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n&lt;re.Match object; span=(3, 6), match=&#39;abc&#39;&gt;\n&lt;re.Match object; span=(2, 3), match=&#39;a&#39;&gt;\n&lt;re.Match object; span=(5, 13), match=&#39;category&#39;&gt;\n&lt;re.Match object; span=(18, 21), match=&#39;car&#39;&gt;\n&lt;re.Match object; span=(9, 15), match=&#39;cattle&#39;&gt;\n&lt;re.Match object; span=(9, 12), match=&#39;cat&#39;&gt;\nNone\n</pre></div></div>\n</div>\n<p>Pythonでは正規表現は文字列によって表していることに注意してください。たとえば、<code class=\"docutils literal notranslate\"><span class=\"pre\">match</span></code> 関数の第一引数を文字列の変数で置き換えられるということです。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[16]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">match</span><span class=\"p\">(</span><span class=\"s1\">&#39;abc&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;abcde&#39;</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">match1</span><span class=\"p\">)</span>\n<span class=\"n\">reg1</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;abc&#39;</span> <span class=\"c1\"># 正規表現を文字列で記述する</span>\n<span class=\"n\">match2</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">match</span><span class=\"p\">(</span><span class=\"n\">reg1</span><span class=\"p\">,</span> <span class=\"s1\">&#39;abcde&#39;</span><span class=\"p\">)</span> <span class=\"c1\">#match1と同じ結果になる</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">match2</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n&lt;re.Match object; span=(0, 3), match=&#39;abc&#39;&gt;\n&lt;re.Match object; span=(0, 3), match=&#39;abc&#39;&gt;\n</pre></div></div>\n</div>\n<p>このことを覚えておくと複雑な正規表現を書くときに、少しずつ分解して記述することができて便利です。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[17]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">search</span><span class=\"p\">(</span><span class=\"s2\">&quot;(I|i)t(&#39;s| is| was)&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;It was rainy yesterday, but it&#39;s fine today.&quot;</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">match1</span><span class=\"p\">)</span>\n<span class=\"n\">reg1</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;(I|i)t&#39;</span> <span class=\"c1\"># 正規表現の前半部分</span>\n<span class=\"n\">reg2</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;(&#39;s| is| was)&quot;</span> <span class=\"c1\"># 正規表現の後半部分</span>\n<span class=\"n\">reg3</span> <span class=\"o\">=</span> <span class=\"n\">reg1</span> <span class=\"o\">+</span> <span class=\"n\">reg2</span> <span class=\"c1\"># 正規表現を表す2つの文字列を結合する</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">reg3</span><span class=\"p\">)</span>\n<span class=\"n\">match2</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">search</span><span class=\"p\">(</span><span class=\"n\">reg3</span><span class=\"p\">,</span> <span class=\"s2\">&quot;It was rainy yesterday, but it&#39;s fine today.&quot;</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">match2</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n&lt;re.Match object; span=(0, 6), match=&#39;It was&#39;&gt;\n(I|i)t(&#39;s| is| was)\n&lt;re.Match object; span=(0, 6), match=&#39;It was&#39;&gt;\n</pre></div></div>\n</div>\n</section>\n<section id=\"練習\">\n<h2>練習<a class=\"headerlink\" href=\"#練習\" title=\"Link to this heading\">¶</a></h2>\n<p>文字列 <code class=\"docutils literal notranslate\"><span class=\"pre\">str1</span></code> を引数として取り、 <code class=\"docutils literal notranslate\"><span class=\"pre\">str1</span></code> の中に「月を表す文字列」が含まれているかどうか調べて、含まれていればマッチしたときのmatchオブジェクトを、含まれいなければ <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code> を返す関数 <code class=\"docutils literal notranslate\"><span class=\"pre\">check_monthstr</span></code> を作成してください。 ただし、「月を表す文字列」 は次のような文字列とします。</p>\n<ol class=\"arabic simple\">\n<li><p>長さ2の <code class=\"docutils literal notranslate\"><span class=\"pre\">mm</span></code> という文字列</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">mm</span></code> は、<code class=\"docutils literal notranslate\"><span class=\"pre\">00</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">01</span></code>, …, <code class=\"docutils literal notranslate\"><span class=\"pre\">12</span></code> のいずれかの文字列</p></li>\n</ol>\n<p>以下のセルの <code class=\"docutils literal notranslate\"><span class=\"pre\">...</span></code> のところを書き換えて解答してください。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[18]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"kn\">import</span> <span class=\"nn\">...</span>\n<span class=\"k\">def</span> <span class=\"nf\">check_monthstr</span><span class=\"p\">(</span><span class=\"n\">str1</span><span class=\"p\">):</span>\n    <span class=\"o\">...</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n<span class=\"ansi-cyan-fg\">  Cell </span><span class=\"ansi-green-fg\">In[18], line 1</span>\n<span class=\"ansi-red-fg\">    import ...</span>\n           ^\n<span class=\"ansi-red-fg\">SyntaxError</span><span class=\"ansi-red-fg\">:</span> invalid syntax\n\n</pre></div></div>\n</div>\n<p>上のセルで解答を作成した後、以下のセルを実行し、実行結果が全て <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> になることを確認してください。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[19]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">check_monthstr</span><span class=\"p\">(</span><span class=\"s1\">&#39;10&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">group</span><span class=\"p\">()</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;10&#39;</span><span class=\"p\">)</span> <span class=\"c1\"># group()については後半に説明があります（オプショナル）</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">check_monthstr</span><span class=\"p\">(</span><span class=\"s1\">&#39;mon1521vb&#39;</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"kc\">None</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">check_monthstr</span><span class=\"p\">(</span><span class=\"s1\">&#39;00an23&#39;</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"kc\">None</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">check_monthstr</span><span class=\"p\">(</span><span class=\"s1\">&#39;13302&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">group</span><span class=\"p\">()</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;02&#39;</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n<span class=\"ansi-red-fg\">---------------------------------------------------------------------------</span>\n<span class=\"ansi-red-fg\">NameError</span>                                 Traceback (most recent call last)\nCell <span class=\"ansi-green-fg\">In[19], line 1</span>\n<span class=\"ansi-green-fg\">----&gt; 1</span> <span style=\"color: rgb(0,135,0)\">print</span>(<span class=\"ansi-yellow-bg\">check_monthstr</span>(<span style=\"color: rgb(175,0,0)\">&#39;</span><span style=\"color: rgb(175,0,0)\">10</span><span style=\"color: rgb(175,0,0)\">&#39;</span>)<span style=\"color: rgb(98,98,98)\">.</span>group() <span style=\"color: rgb(98,98,98)\">==</span> <span style=\"color: rgb(175,0,0)\">&#39;</span><span style=\"color: rgb(175,0,0)\">10</span><span style=\"color: rgb(175,0,0)\">&#39;</span>) <span style=\"color: rgb(95,135,135)\"># group()については後半に説明があります（オプショナル）</span>\n<span class=\"ansi-green-intense-fg ansi-bold\">      2</span> <span style=\"color: rgb(0,135,0)\">print</span>(check_monthstr(<span style=\"color: rgb(175,0,0)\">&#39;</span><span style=\"color: rgb(175,0,0)\">mon1521vb</span><span style=\"color: rgb(175,0,0)\">&#39;</span>) <span style=\"color: rgb(98,98,98)\">==</span> <span class=\"ansi-bold\" style=\"color: rgb(0,135,0)\">None</span>)\n<span class=\"ansi-green-intense-fg ansi-bold\">      3</span> <span style=\"color: rgb(0,135,0)\">print</span>(check_monthstr(<span style=\"color: rgb(175,0,0)\">&#39;</span><span style=\"color: rgb(175,0,0)\">00an23</span><span style=\"color: rgb(175,0,0)\">&#39;</span>) <span style=\"color: rgb(98,98,98)\">==</span> <span class=\"ansi-bold\" style=\"color: rgb(0,135,0)\">None</span>)\n\n<span class=\"ansi-red-fg\">NameError</span>: name &#39;check_monthstr&#39; is not defined\n</pre></div></div>\n</div>\n</section>\n<section id=\"id4\">\n<h2>練習<a class=\"headerlink\" href=\"#id4\" title=\"Link to this heading\">¶</a></h2>\n<p>文字列 <code class=\"docutils literal notranslate\"><span class=\"pre\">str1</span></code> を引数として取り、 <code class=\"docutils literal notranslate\"><span class=\"pre\">str1</span></code> を構成する文字列が <code class=\"docutils literal notranslate\"><span class=\"pre\">A</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">C</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">G</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">T</span></code> の4種類の文字以外の文字を含むかどうか調べて、これら以外を含む場合は <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code> を、そうでない場合は <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> を返す関数 <code class=\"docutils literal notranslate\"><span class=\"pre\">check_ACGTstr</span></code> を作成してください。 ただし、大文字と小文字は区別しません。また、空列の場合は <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code> を返してください。</p>\n<p>以下のセルの <code class=\"docutils literal notranslate\"><span class=\"pre\">...</span></code> のところを書き換えて解答してください。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[20]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"kn\">import</span> <span class=\"nn\">...</span>\n<span class=\"k\">def</span> <span class=\"nf\">check_ACGTstr</span><span class=\"p\">(</span><span class=\"n\">str1</span><span class=\"p\">):</span>\n    <span class=\"o\">...</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n<span class=\"ansi-cyan-fg\">  Cell </span><span class=\"ansi-green-fg\">In[20], line 1</span>\n<span class=\"ansi-red-fg\">    import ...</span>\n           ^\n<span class=\"ansi-red-fg\">SyntaxError</span><span class=\"ansi-red-fg\">:</span> invalid syntax\n\n</pre></div></div>\n</div>\n<p>上のセルで解答を作成した後、以下のセルを実行し、実行結果が全て <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> になることを確認してください。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[21]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">check_ACGTstr</span><span class=\"p\">(</span><span class=\"s1\">&#39;AcCGTAGCacATcGgAaaTtGCacT&#39;</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">check_ACGTstr</span><span class=\"p\">(</span><span class=\"s1\">&#39;:ACaacgta24FgtGH&#39;</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"kc\">False</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">check_ACGTstr</span><span class=\"p\">(</span><span class=\"s1\">&#39;&#39;</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"kc\">False</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n<span class=\"ansi-red-fg\">---------------------------------------------------------------------------</span>\n<span class=\"ansi-red-fg\">NameError</span>                                 Traceback (most recent call last)\nCell <span class=\"ansi-green-fg\">In[21], line 1</span>\n<span class=\"ansi-green-fg\">----&gt; 1</span> <span style=\"color: rgb(0,135,0)\">print</span>(<span class=\"ansi-yellow-bg\">check_ACGTstr</span>(<span style=\"color: rgb(175,0,0)\">&#39;</span><span style=\"color: rgb(175,0,0)\">AcCGTAGCacATcGgAaaTtGCacT</span><span style=\"color: rgb(175,0,0)\">&#39;</span>) <span style=\"color: rgb(98,98,98)\">==</span> <span class=\"ansi-bold\" style=\"color: rgb(0,135,0)\">True</span>)\n<span class=\"ansi-green-intense-fg ansi-bold\">      2</span> <span style=\"color: rgb(0,135,0)\">print</span>(check_ACGTstr(<span style=\"color: rgb(175,0,0)\">&#39;</span><span style=\"color: rgb(175,0,0)\">:ACaacgta24FgtGH</span><span style=\"color: rgb(175,0,0)\">&#39;</span>) <span style=\"color: rgb(98,98,98)\">==</span> <span class=\"ansi-bold\" style=\"color: rgb(0,135,0)\">False</span>)\n<span class=\"ansi-green-intense-fg ansi-bold\">      3</span> <span style=\"color: rgb(0,135,0)\">print</span>(check_ACGTstr(<span style=\"color: rgb(175,0,0)\">&#39;</span><span style=\"color: rgb(175,0,0)\">&#39;</span>) <span style=\"color: rgb(98,98,98)\">==</span> <span class=\"ansi-bold\" style=\"color: rgb(0,135,0)\">False</span>)\n\n<span class=\"ansi-red-fg\">NameError</span>: name &#39;check_ACGTstr&#39; is not defined\n</pre></div></div>\n</div>\n</section>\n<section id=\"id5\">\n<h2>練習<a class=\"headerlink\" href=\"#id5\" title=\"Link to this heading\">¶</a></h2>\n<p>文字列 <code class=\"docutils literal notranslate\"><span class=\"pre\">str1</span></code> を引数として取り、 <code class=\"docutils literal notranslate\"><span class=\"pre\">str1</span></code> の中に「時刻を表す文字列」が含まれているかどうか調べて、含まれていればマッチしたときのmatchオブジェクトを、含まれいなければ <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code> を返す関数 <code class=\"docutils literal notranslate\"><span class=\"pre\">check_timestr</span></code> を作成してください。 ただし、「時刻を表す文字列」 は次のような文字列とします。</p>\n<ol class=\"arabic simple\">\n<li><p>長さ5の <code class=\"docutils literal notranslate\"><span class=\"pre\">hh:mm</span></code> という文字列であり、12時間表示で時間を表す。</p></li>\n<li><p>前半の2文字 <code class=\"docutils literal notranslate\"><span class=\"pre\">hh</span></code> は、 <code class=\"docutils literal notranslate\"><span class=\"pre\">00</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">01</span></code>, …, <code class=\"docutils literal notranslate\"><span class=\"pre\">11</span></code> のいずれかの文字列</p></li>\n<li><p>後半の2文字 <code class=\"docutils literal notranslate\"><span class=\"pre\">mm</span></code> は、 <code class=\"docutils literal notranslate\"><span class=\"pre\">00</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">01</span></code>, …, <code class=\"docutils literal notranslate\"><span class=\"pre\">59</span></code> のいずれかの文字列</p></li>\n</ol>\n<p>以下のセルの <code class=\"docutils literal notranslate\"><span class=\"pre\">...</span></code> のところを書き換えて解答してください。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[22]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"kn\">import</span> <span class=\"nn\">...</span>\n<span class=\"k\">def</span> <span class=\"nf\">check_timestr</span><span class=\"p\">(</span><span class=\"n\">str1</span><span class=\"p\">):</span>\n    <span class=\"o\">...</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n<span class=\"ansi-cyan-fg\">  Cell </span><span class=\"ansi-green-fg\">In[22], line 1</span>\n<span class=\"ansi-red-fg\">    import ...</span>\n           ^\n<span class=\"ansi-red-fg\">SyntaxError</span><span class=\"ansi-red-fg\">:</span> invalid syntax\n\n</pre></div></div>\n</div>\n<p>上のセルで解答を作成した後、以下のセルを実行し、実行結果が全て <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> になることを確認してください。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[23]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">check_timestr</span><span class=\"p\">(</span><span class=\"s1\">&#39;10:23&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">group</span><span class=\"p\">()</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;10:23&#39;</span><span class=\"p\">)</span> <span class=\"c1\"># group()については後半に説明があります（オプショナル）</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">check_timestr</span><span class=\"p\">(</span><span class=\"s1\">&#39;time?1023&#39;</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"kc\">None</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">check_timestr</span><span class=\"p\">(</span><span class=\"s1\">&#39;time?11:23&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">group</span><span class=\"p\">()</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;11:23&#39;</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">check_timestr</span><span class=\"p\">(</span><span class=\"s1\">&#39;12:3xx1;23ah23:23&#39;</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"kc\">None</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n<span class=\"ansi-red-fg\">---------------------------------------------------------------------------</span>\n<span class=\"ansi-red-fg\">NameError</span>                                 Traceback (most recent call last)\nCell <span class=\"ansi-green-fg\">In[23], line 1</span>\n<span class=\"ansi-green-fg\">----&gt; 1</span> <span style=\"color: rgb(0,135,0)\">print</span>(<span class=\"ansi-yellow-bg\">check_timestr</span>(<span style=\"color: rgb(175,0,0)\">&#39;</span><span style=\"color: rgb(175,0,0)\">10:23</span><span style=\"color: rgb(175,0,0)\">&#39;</span>)<span style=\"color: rgb(98,98,98)\">.</span>group() <span style=\"color: rgb(98,98,98)\">==</span> <span style=\"color: rgb(175,0,0)\">&#39;</span><span style=\"color: rgb(175,0,0)\">10:23</span><span style=\"color: rgb(175,0,0)\">&#39;</span>) <span style=\"color: rgb(95,135,135)\"># group()については後半に説明があります（オプショナル）</span>\n<span class=\"ansi-green-intense-fg ansi-bold\">      2</span> <span style=\"color: rgb(0,135,0)\">print</span>(check_timestr(<span style=\"color: rgb(175,0,0)\">&#39;</span><span style=\"color: rgb(175,0,0)\">time?1023</span><span style=\"color: rgb(175,0,0)\">&#39;</span>) <span style=\"color: rgb(98,98,98)\">==</span> <span class=\"ansi-bold\" style=\"color: rgb(0,135,0)\">None</span>)\n<span class=\"ansi-green-intense-fg ansi-bold\">      3</span> <span style=\"color: rgb(0,135,0)\">print</span>(check_timestr(<span style=\"color: rgb(175,0,0)\">&#39;</span><span style=\"color: rgb(175,0,0)\">time?11:23</span><span style=\"color: rgb(175,0,0)\">&#39;</span>)<span style=\"color: rgb(98,98,98)\">.</span>group() <span style=\"color: rgb(98,98,98)\">==</span> <span style=\"color: rgb(175,0,0)\">&#39;</span><span style=\"color: rgb(175,0,0)\">11:23</span><span style=\"color: rgb(175,0,0)\">&#39;</span>)\n\n<span class=\"ansi-red-fg\">NameError</span>: name &#39;check_timestr&#39; is not defined\n</pre></div></div>\n</div>\n</section>\n<section id=\"id6\">\n<h2>練習<a class=\"headerlink\" href=\"#id6\" title=\"Link to this heading\">¶</a></h2>\n<p>文字列 <code class=\"docutils literal notranslate\"><span class=\"pre\">str1</span></code> を引数として取り、<code class=\"docutils literal notranslate\"><span class=\"pre\">str1</span></code> の中に「IPv4を表す文字列」が含まれているかどうか調べて、含まれていればマッチしたときのmatchオブジェクトを、含まれいなければ <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code> を返す関数 <code class=\"docutils literal notranslate\"><span class=\"pre\">check_ipv4str</span></code> を作成してください。 ただし、「IPv4を表す文字列」 は次のような文字列とします。</p>\n<ol class=\"arabic simple\">\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">aaa:bbb:ccc:ddd</span></code> という形式の長さ15の文字列</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">aaa</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">bbb</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">ccc</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">ddd</span></code> はいずれも、 <code class=\"docutils literal notranslate\"><span class=\"pre\">000</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">001</span></code>, …, <code class=\"docutils literal notranslate\"><span class=\"pre\">254</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">255</span></code> のいずれかの文字列</p></li>\n</ol>\n<p>以下のセルの <code class=\"docutils literal notranslate\"><span class=\"pre\">...</span></code> のところを書き換えて解答してください。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[24]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"kn\">import</span> <span class=\"nn\">...</span>\n<span class=\"k\">def</span> <span class=\"nf\">check_ipv4str</span><span class=\"p\">(</span><span class=\"n\">str1</span><span class=\"p\">):</span>\n    <span class=\"o\">...</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n<span class=\"ansi-cyan-fg\">  Cell </span><span class=\"ansi-green-fg\">In[24], line 1</span>\n<span class=\"ansi-red-fg\">    import ...</span>\n           ^\n<span class=\"ansi-red-fg\">SyntaxError</span><span class=\"ansi-red-fg\">:</span> invalid syntax\n\n</pre></div></div>\n</div>\n<p>上のセルで解答を作成した後、以下のセルを実行し、実行結果が全て <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> になることを確認してください。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[25]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">check_ipv4str</span><span class=\"p\">(</span><span class=\"s1\">&#39;IP=255:255:255:255&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">group</span><span class=\"p\">()</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;255:255:255:255&#39;</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">check_ipv4str</span><span class=\"p\">(</span><span class=\"s1\">&#39;notIP=2x5:a5b:2c:255:14:444&#39;</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"kc\">None</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">check_ipv4str</span><span class=\"p\">(</span><span class=\"s1\">&#39;IP?=25:25:55:155&#39;</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"kc\">None</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">check_ipv4str</span><span class=\"p\">(</span><span class=\"s1\">&#39;IP?=255:255:255&#39;</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"kc\">None</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n<span class=\"ansi-red-fg\">---------------------------------------------------------------------------</span>\n<span class=\"ansi-red-fg\">NameError</span>                                 Traceback (most recent call last)\nCell <span class=\"ansi-green-fg\">In[25], line 1</span>\n<span class=\"ansi-green-fg\">----&gt; 1</span> <span style=\"color: rgb(0,135,0)\">print</span>(<span class=\"ansi-yellow-bg\">check_ipv4str</span>(<span style=\"color: rgb(175,0,0)\">&#39;</span><span style=\"color: rgb(175,0,0)\">IP=255:255:255:255</span><span style=\"color: rgb(175,0,0)\">&#39;</span>)<span style=\"color: rgb(98,98,98)\">.</span>group() <span style=\"color: rgb(98,98,98)\">==</span> <span style=\"color: rgb(175,0,0)\">&#39;</span><span style=\"color: rgb(175,0,0)\">255:255:255:255</span><span style=\"color: rgb(175,0,0)\">&#39;</span>)\n<span class=\"ansi-green-intense-fg ansi-bold\">      2</span> <span style=\"color: rgb(0,135,0)\">print</span>(check_ipv4str(<span style=\"color: rgb(175,0,0)\">&#39;</span><span style=\"color: rgb(175,0,0)\">notIP=2x5:a5b:2c:255:14:444</span><span style=\"color: rgb(175,0,0)\">&#39;</span>) <span style=\"color: rgb(98,98,98)\">==</span> <span class=\"ansi-bold\" style=\"color: rgb(0,135,0)\">None</span>)\n<span class=\"ansi-green-intense-fg ansi-bold\">      3</span> <span style=\"color: rgb(0,135,0)\">print</span>(check_ipv4str(<span style=\"color: rgb(175,0,0)\">&#39;</span><span style=\"color: rgb(175,0,0)\">IP?=25:25:55:155</span><span style=\"color: rgb(175,0,0)\">&#39;</span>) <span style=\"color: rgb(98,98,98)\">==</span> <span class=\"ansi-bold\" style=\"color: rgb(0,135,0)\">None</span>)\n\n<span class=\"ansi-red-fg\">NameError</span>: name &#39;check_ipv4str&#39; is not defined\n</pre></div></div>\n</div>\n</section>\n<section id=\"id7\">\n<h2>練習<a class=\"headerlink\" href=\"#id7\" title=\"Link to this heading\">¶</a></h2>\n<p>文字列 <code class=\"docutils literal notranslate\"><span class=\"pre\">str1</span></code> を引数として取り、 <code class=\"docutils literal notranslate\"><span class=\"pre\">str1</span></code> の中に「月と日を表す文字列」が含まれているかどうか調べて、含まれていればマッチしたときのmatchオブジェクトを、含まれいなければ <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code> を返す関数 <code class=\"docutils literal notranslate\"><span class=\"pre\">check_monthdaystr</span></code> を作成してください。 ただし、「月と日を表す文字列」 は次のような文字列とします。</p>\n<ol class=\"arabic simple\">\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">mm/dd</span></code> という長さ5の文字列</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">mm</span></code> は、 <code class=\"docutils literal notranslate\"><span class=\"pre\">01</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">02</span></code>, …, <code class=\"docutils literal notranslate\"><span class=\"pre\">12</span></code> のいずれかの文字列</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">dd</span></code> は、<code class=\"docutils literal notranslate\"><span class=\"pre\">mm</span></code> が <code class=\"docutils literal notranslate\"><span class=\"pre\">01</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">03</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">05</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">07</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">08</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">10</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">12</span></code> ならば、<code class=\"docutils literal notranslate\"><span class=\"pre\">01</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">02</span></code>, …, <code class=\"docutils literal notranslate\"><span class=\"pre\">31</span></code> のいずれかの文字列</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">dd</span></code> は、<code class=\"docutils literal notranslate\"><span class=\"pre\">mm</span></code> が <code class=\"docutils literal notranslate\"><span class=\"pre\">04</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">06</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">09</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">11</span></code> ならば、<code class=\"docutils literal notranslate\"><span class=\"pre\">01</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">02</span></code>, …, <code class=\"docutils literal notranslate\"><span class=\"pre\">30</span></code> のいずれかの文字列</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">dd</span></code> は、<code class=\"docutils literal notranslate\"><span class=\"pre\">mm</span></code> が <code class=\"docutils literal notranslate\"><span class=\"pre\">02</span></code> ならば、<code class=\"docutils literal notranslate\"><span class=\"pre\">01</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">02</span></code>, …, <code class=\"docutils literal notranslate\"><span class=\"pre\">29</span></code> のいずれかの文字列</p></li>\n</ol>\n<p>以下のセルの <code class=\"docutils literal notranslate\"><span class=\"pre\">...</span></code> のところを書き換えて解答してください。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[26]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"kn\">import</span> <span class=\"nn\">...</span>\n<span class=\"k\">def</span> <span class=\"nf\">check_monthdaystr</span><span class=\"p\">(</span><span class=\"n\">str1</span><span class=\"p\">):</span>\n    <span class=\"o\">...</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n<span class=\"ansi-cyan-fg\">  Cell </span><span class=\"ansi-green-fg\">In[26], line 1</span>\n<span class=\"ansi-red-fg\">    import ...</span>\n           ^\n<span class=\"ansi-red-fg\">SyntaxError</span><span class=\"ansi-red-fg\">:</span> invalid syntax\n\n</pre></div></div>\n</div>\n<p>上のセルで解答を作成した後、以下のセルを実行し、実行結果が全て <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> になることを確認してください。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[27]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">check_monthdaystr</span><span class=\"p\">(</span><span class=\"s1\">&#39;year11/31month11/30day15hour/27minute/sec&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">group</span><span class=\"p\">()</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;11/30&#39;</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">check_monthdaystr</span><span class=\"p\">(</span><span class=\"s1\">&#39;11/31&#39;</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"kc\">None</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">check_monthdaystr</span><span class=\"p\">(</span><span class=\"s1\">&#39;x02f/2d5ax&#39;</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"kc\">None</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">check_monthdaystr</span><span class=\"p\">(</span><span class=\"s1\">&#39;03/24&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">group</span><span class=\"p\">()</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;03/24&#39;</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n<span class=\"ansi-red-fg\">---------------------------------------------------------------------------</span>\n<span class=\"ansi-red-fg\">NameError</span>                                 Traceback (most recent call last)\nCell <span class=\"ansi-green-fg\">In[27], line 1</span>\n<span class=\"ansi-green-fg\">----&gt; 1</span> <span style=\"color: rgb(0,135,0)\">print</span>(<span class=\"ansi-yellow-bg\">check_monthdaystr</span>(<span style=\"color: rgb(175,0,0)\">&#39;</span><span style=\"color: rgb(175,0,0)\">year11/31month11/30day15hour/27minute/sec</span><span style=\"color: rgb(175,0,0)\">&#39;</span>)<span style=\"color: rgb(98,98,98)\">.</span>group() <span style=\"color: rgb(98,98,98)\">==</span> <span style=\"color: rgb(175,0,0)\">&#39;</span><span style=\"color: rgb(175,0,0)\">11/30</span><span style=\"color: rgb(175,0,0)\">&#39;</span>)\n<span class=\"ansi-green-intense-fg ansi-bold\">      2</span> <span style=\"color: rgb(0,135,0)\">print</span>(check_monthdaystr(<span style=\"color: rgb(175,0,0)\">&#39;</span><span style=\"color: rgb(175,0,0)\">11/31</span><span style=\"color: rgb(175,0,0)\">&#39;</span>) <span style=\"color: rgb(98,98,98)\">==</span> <span class=\"ansi-bold\" style=\"color: rgb(0,135,0)\">None</span>)\n<span class=\"ansi-green-intense-fg ansi-bold\">      3</span> <span style=\"color: rgb(0,135,0)\">print</span>(check_monthdaystr(<span style=\"color: rgb(175,0,0)\">&#39;</span><span style=\"color: rgb(175,0,0)\">x02f/2d5ax</span><span style=\"color: rgb(175,0,0)\">&#39;</span>) <span style=\"color: rgb(98,98,98)\">==</span> <span class=\"ansi-bold\" style=\"color: rgb(0,135,0)\">None</span>)\n\n<span class=\"ansi-red-fg\">NameError</span>: name &#39;check_monthdaystr&#39; is not defined\n</pre></div></div>\n</div>\n</section>\n<section id=\"文字クラス\">\n<h2>文字クラス<a class=\"headerlink\" href=\"#文字クラス\" title=\"Link to this heading\">¶</a></h2>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">[abc]</span></code> は <code class=\"docutils literal notranslate\"><span class=\"pre\">a|b|c</span></code> と同じ意味の正規表現です。この角括弧を用いた表記は、<strong>文字クラス</strong>と呼ばれます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[28]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">search</span><span class=\"p\">(</span><span class=\"s1\">&#39;[abc]&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;defabcxyz&#39;</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">match1</span><span class=\"p\">)</span>\n<span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">search</span><span class=\"p\">(</span><span class=\"s1\">&#39;[3456]&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;1234567890&#39;</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">match1</span><span class=\"p\">)</span>\n<span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">search</span><span class=\"p\">(</span><span class=\"s1\">&#39;ha[sd]&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;He has an apple and they have pineapples.&#39;</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">match1</span><span class=\"p\">)</span>\n<br/></pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n&lt;re.Match object; span=(3, 4), match=&#39;a&#39;&gt;\n&lt;re.Match object; span=(2, 3), match=&#39;3&#39;&gt;\n&lt;re.Match object; span=(3, 6), match=&#39;has&#39;&gt;\n</pre></div></div>\n</div>\n<p>勿論、これまでの和や閉包と組み合わせて用いることができます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[29]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">search</span><span class=\"p\">(</span><span class=\"s1\">&#39;[def][abc]&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;defabcxyz&#39;</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">match1</span><span class=\"p\">)</span>\n<span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">search</span><span class=\"p\">(</span><span class=\"s1\">&#39;4[3456][3456]([3456]|[7890])&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;1234567890&#39;</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">match1</span><span class=\"p\">)</span>\n<span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">search</span><span class=\"p\">(</span><span class=\"s1\">&#39;6[789]*&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;1234567890&#39;</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">match1</span><span class=\"p\">)</span>\n<span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">search</span><span class=\"p\">(</span><span class=\"s1\">&#39;she ha[sd]|they ha(ve|d)&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;He has an apple and they have pineapples.&#39;</span><span class=\"p\">,</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">I</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">match1</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n&lt;re.Match object; span=(2, 4), match=&#39;fa&#39;&gt;\n&lt;re.Match object; span=(3, 7), match=&#39;4567&#39;&gt;\n&lt;re.Match object; span=(5, 9), match=&#39;6789&#39;&gt;\n&lt;re.Match object; span=(20, 29), match=&#39;they have&#39;&gt;\n</pre></div></div>\n</div>\n<p>ただし、文字クラスの中で連接、和、閉包は無効化されます。たとえば、<code class=\"docutils literal notranslate\"><span class=\"pre\">[a*]</span></code> という正規表現は、<code class=\"docutils literal notranslate\"><span class=\"pre\">a</span></code> もしくは、<code class=\"docutils literal notranslate\"><span class=\"pre\">*</span></code> にマッチします。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[30]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">search</span><span class=\"p\">(</span><span class=\"s1\">&#39;[a*]&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;aaaaaa&#39;</span><span class=\"p\">)</span> <span class=\"c1\"># a一文字にマッチ</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">match1</span><span class=\"p\">)</span>\n<span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">search</span><span class=\"p\">(</span><span class=\"s1\">&#39;[a*]&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;*&#39;</span><span class=\"p\">)</span> <span class=\"c1\"># *一文字にマッチ</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">match1</span><span class=\"p\">)</span>\n<span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">search</span><span class=\"p\">(</span><span class=\"s1\">&#39;a*&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;aaaaaa&#39;</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">match1</span><span class=\"p\">)</span>\n<span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">search</span><span class=\"p\">(</span><span class=\"s1\">&#39;a*&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;*&#39;</span><span class=\"p\">)</span> <span class=\"c1\"># 文字クラスでない場合、*にはマッチしない</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">match1</span><span class=\"p\">)</span>\n<span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">search</span><span class=\"p\">(</span><span class=\"s1\">&#39;[a|b]&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;defabcxyz&#39;</span><span class=\"p\">)</span> <span class=\"c1\"># a一文字にマッチ</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">match1</span><span class=\"p\">)</span>\n<span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">search</span><span class=\"p\">(</span><span class=\"s1\">&#39;[a|b]&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;|&#39;</span><span class=\"p\">)</span> <span class=\"c1\">#  |一文字にマッチ</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">match1</span><span class=\"p\">)</span>\n<span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">search</span><span class=\"p\">(</span><span class=\"s1\">&#39;a|b&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;|&#39;</span><span class=\"p\">)</span> <span class=\"c1\"># 文字クラスでない場合、|にはマッチしない</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">match1</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n&lt;re.Match object; span=(0, 1), match=&#39;a&#39;&gt;\n&lt;re.Match object; span=(0, 1), match=&#39;*&#39;&gt;\n&lt;re.Match object; span=(0, 6), match=&#39;aaaaaa&#39;&gt;\n&lt;re.Match object; span=(0, 0), match=&#39;&#39;&gt;\n&lt;re.Match object; span=(3, 4), match=&#39;a&#39;&gt;\n&lt;re.Match object; span=(0, 1), match=&#39;|&#39;&gt;\nNone\n</pre></div></div>\n</div>\n<p>文字クラスでは一文字分の連続する和演算を表すことができますが、長さ2以上の文字列を表すことはできません。すなわち、<code class=\"docutils literal notranslate\"><span class=\"pre\">ab</span> <span class=\"pre\">|</span> <span class=\"pre\">cd</span></code> という正規表現を（1つの）文字クラスで表すことはできません。</p>\n<p>また、 <code class=\"docutils literal notranslate\"><span class=\"pre\">[abcdefg]</span></code> や <code class=\"docutils literal notranslate\"><span class=\"pre\">[gcdbeaf]</span></code> などは <code class=\"docutils literal notranslate\"><span class=\"pre\">[a-g]</span></code>、<code class=\"docutils literal notranslate\"><span class=\"pre\">[1234567]</span></code> や <code class=\"docutils literal notranslate\"><span class=\"pre\">[4271635]</span></code> などは <code class=\"docutils literal notranslate\"><span class=\"pre\">[1-7]</span></code> などとハイフン (<code class=\"docutils literal notranslate\"><span class=\"pre\">-</span></code>) を用いることで簡潔に表すことができます。たとえば、全てのアルファベットと数字を表す場合は、<code class=\"docutils literal notranslate\"><span class=\"pre\">[a-zA-Z0-9]</span></code> で表されます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[31]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">search</span><span class=\"p\">(</span><span class=\"s1\">&#39;[a-c]&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;defabcxyz&#39;</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">match1</span><span class=\"p\">)</span>\n<span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">search</span><span class=\"p\">(</span><span class=\"s1\">&#39;3[4-8]&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;1234567890&#39;</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">match1</span><span class=\"p\">)</span>\n<span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">search</span><span class=\"p\">(</span><span class=\"s1\">&#39;:[a-zA-Z0-9]*:&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;a1b2c3:d4e5f:6g7A8B:9C0D&#39;</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">match1</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n&lt;re.Match object; span=(3, 4), match=&#39;a&#39;&gt;\n&lt;re.Match object; span=(2, 4), match=&#39;34&#39;&gt;\n&lt;re.Match object; span=(6, 13), match=&#39;:d4e5f:&#39;&gt;\n</pre></div></div>\n</div>\n<p>文字クラスの内側をキャレット (<code class=\"docutils literal notranslate\"><span class=\"pre\">^</span></code>) で始めると、<strong>否定文字クラス</strong>となり、キャレットの後ろに指定した文字以外の文字とマッチする正規表現となります。たとえば、<code class=\"docutils literal notranslate\"><span class=\"pre\">[^abc]</span></code> は <code class=\"docutils literal notranslate\"><span class=\"pre\">a</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">b</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">c</span></code> 以外の1文字とマッチする正規表現です。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[32]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">search</span><span class=\"p\">(</span><span class=\"s1\">&#39;[^abc]&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;abcdefxyz&#39;</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">match1</span><span class=\"p\">)</span>\n<span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">search</span><span class=\"p\">(</span><span class=\"s1\">&#39;[^def]&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;defabcxyz&#39;</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">match1</span><span class=\"p\">)</span>\n<span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">search</span><span class=\"p\">(</span><span class=\"s1\">&#39;[^1-7]&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;1234567890&#39;</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">match1</span><span class=\"p\">)</span>\n<span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">search</span><span class=\"p\">(</span><span class=\"s1\">&#39;ha[^sd]e&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;He has an apple and they have pineapples.&#39;</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">match1</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n&lt;re.Match object; span=(3, 4), match=&#39;d&#39;&gt;\n&lt;re.Match object; span=(3, 4), match=&#39;a&#39;&gt;\n&lt;re.Match object; span=(7, 8), match=&#39;8&#39;&gt;\n&lt;re.Match object; span=(25, 29), match=&#39;have&#39;&gt;\n</pre></div></div>\n</div>\n<p>キャレットを先頭以外につけた場合は、単なる文字クラスになります。すなわち、キャレットにマッチするかどうかが判定されます。たとえば、<code class=\"docutils literal notranslate\"><span class=\"pre\">[d^ef]</span></code> は、<code class=\"docutils literal notranslate\"><span class=\"pre\">d</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">^</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">e</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">f</span></code> のいずれかにマッチします。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[33]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">search</span><span class=\"p\">(</span><span class=\"s1\">&#39;[d^ef]&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;defabcxyz&#39;</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">match1</span><span class=\"p\">)</span>\n<span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">search</span><span class=\"p\">(</span><span class=\"s1\">&#39;[d^ef]&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;a^bcdef&#39;</span><span class=\"p\">)</span> <span class=\"c1\"># キャレットにマッチする</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">match1</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n&lt;re.Match object; span=(0, 1), match=&#39;d&#39;&gt;\n&lt;re.Match object; span=(1, 2), match=&#39;^&#39;&gt;\n</pre></div></div>\n</div>\n</section>\n<section id=\"正規表現に関する基本的な関数\">\n<h2>正規表現に関する基本的な関数<a class=\"headerlink\" href=\"#正規表現に関する基本的な関数\" title=\"Link to this heading\">¶</a></h2>\n<p>上で紹介した正規表現を利用してマッチする文字列が存在するかどうかを調べるだけではなく、マッチした文字列に対して色々な処理を加えることができます。以下では2つの基本的な関数を紹介します。</p>\n<section id=\"sub\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">sub</span></code><a class=\"headerlink\" href=\"#sub\" title=\"Link to this heading\">¶</a></h3>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">sub</span></code> は、<code class=\"docutils literal notranslate\"><span class=\"pre\">正規表現R</span></code> にマッチする <code class=\"docutils literal notranslate\"><span class=\"pre\">文字列A</span></code> 中の全ての文字列を、指定した <code class=\"docutils literal notranslate\"><span class=\"pre\">文字列B</span></code> で置き換えることができます。</p>\n<p>具体的には次のようにすると、</p>\n<div class=\"highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>re.sub(正規表現R, 置換する文字列B, 元になる文字列A)\n</pre></div>\n</div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">R</span></code> とマッチする <code class=\"docutils literal notranslate\"><span class=\"pre\">A</span></code> 中の全ての文字列を <code class=\"docutils literal notranslate\"><span class=\"pre\">B</span></code> と置き換えることができます。置き換えられた結果の文字列（新たに作られて）が返値となります。（もちろん、もとの文字列 <code class=\"docutils literal notranslate\"><span class=\"pre\">A</span></code> は変化しません。）</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[34]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">str1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">sub</span><span class=\"p\">(</span><span class=\"s1\">&#39;[346]&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;x&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;03-5454-68284&#39;</span><span class=\"p\">)</span> <span class=\"c1\">#3,4,6をxに置き換える</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">str1</span><span class=\"p\">)</span>\n<span class=\"n\">str1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">sub</span><span class=\"p\">(</span><span class=\"s1\">&#39;[.,:;!?]&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;&#39;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;He has three pets: a cat, a dog and a giraffe, doesn&#39;t he?&quot;</span><span class=\"p\">)</span> <span class=\"c1\">#句読点を削除する（空文字列に置き換える）</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">str1</span><span class=\"p\">)</span>\n<span class=\"n\">str1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">sub</span><span class=\"p\">(</span><span class=\"s1\">&#39;\\(a\\)|あっとまーく|＠&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;@&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;accountnameあっとまーくtest.ecc.u-tokyo.ac.jp&#39;</span><span class=\"p\">)</span> <span class=\"c1\"># スパム回避の文字列を@に置き換える</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">str1</span><span class=\"p\">)</span><span class=\"c1\"># \\(と\\)の意味については、下記の「正規表現のエスケープシーケンス」の節を参照してください</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n0x-5x5x-x828x\nHe has three pets a cat a dog and a giraffe doesn&#39;t he\naccountname@test.ecc.u-tokyo.ac.jp\n</pre></div></div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area stderr docutils container\">\n<div class=\"highlight\"><pre>\n&lt;&gt;:5: SyntaxWarning: invalid escape sequence &#39;\\(&#39;\n&lt;&gt;:5: SyntaxWarning: invalid escape sequence &#39;\\(&#39;\n/var/folders/4n/53v5yxcx5t7d2sld1grw124w0000gn/T/ipykernel_97089/2703320260.py:5: SyntaxWarning: invalid escape sequence &#39;\\(&#39;\n  str1 = re.sub(&#39;\\(a\\)|あっとまーく|＠&#39;, &#39;@&#39;, &#39;accountnameあっとまーくtest.ecc.u-tokyo.ac.jp&#39;) # スパム回避の文字列を@に置き換える\n</pre></div></div>\n</div>\n<div class=\"highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>re.sub(r&#39;[ \\t\\n][ \\t\\n]*&#39;, &#39; &#39;, str1)\n</pre></div>\n</div>\n<p>とすると、文字列 <code class=\"docutils literal notranslate\"><span class=\"pre\">str1</span></code> の空白文字の並びがスペース1個に置き換わります。</p>\n<p>ここで、<code class=\"docutils literal notranslate\"><span class=\"pre\">r'[</span> <span class=\"pre\">\\t\\n][</span> <span class=\"pre\">\\t\\n]*'</span></code> という正規表現は、空白かタブか改行の<strong>1回以上</strong>の繰り返しのパターンを表します。つまり、<code class=\"docutils literal notranslate\"><span class=\"pre\">aa*</span></code> という形をした「1回以上の <code class=\"docutils literal notranslate\"><span class=\"pre\">a</span></code> という文字列とマッチする正規表現」は <code class=\"docutils literal notranslate\"><span class=\"pre\">a+</span></code> という <code class=\"docutils literal notranslate\"><span class=\"pre\">+</span></code> を使った正規表現で置き換えることが可能です。この <code class=\"docutils literal notranslate\"><span class=\"pre\">+</span></code> は後で正式に紹介します。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[35]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">sub</span><span class=\"p\">(</span><span class=\"sa\">r</span><span class=\"s1\">&#39;[ \\t\\n][ \\t\\n]*&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39; &#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Hello,</span><span class=\"se\">\\n</span><span class=\"s1\">    World!</span><span class=\"se\">\\t</span><span class=\"s1\">How are you?&#39;</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[35]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n&#39;Hello, World! How are you?&#39;\n</pre></div></div>\n</div>\n<p>以下では、HTMLやXMLのタグを消しています（空文字列に置き換えています）。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[36]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">sub</span><span class=\"p\">(</span><span class=\"sa\">r</span><span class=\"s1\">&#39;&lt;[^&gt;]*&gt;&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;&lt;body&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">Click &lt;a href=&quot;a.href&quot;&gt;this&lt;/a&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&lt;/body&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[36]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n&#39;\\nClick this\\n\\n&#39;\n</pre></div></div>\n</div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">r'&lt;[^&gt;]*&gt;'</span></code> という正規表現は、<code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;</span></code> の後に <code class=\"docutils literal notranslate\"><span class=\"pre\">&gt;</span></code> 以外の文字の繰り返しがあって最後に <code class=\"docutils literal notranslate\"><span class=\"pre\">&gt;</span></code> が来るというパターンを表します。</p>\n</section>\n<section id=\"re.split\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">re.split</span></code><a class=\"headerlink\" href=\"#re.split\" title=\"Link to this heading\">¶</a></h3>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">split</span></code> は、<code class=\"docutils literal notranslate\"><span class=\"pre\">正規表現R</span></code> にマッチする文字列を区切り文字（デリミタ）として、<code class=\"docutils literal notranslate\"><span class=\"pre\">文字列A</span></code> を分割します。分割された文字列がリストに格納されて返値となります。</p>\n<p>具体的には次のように用います。</p>\n<div class=\"highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>re.split(正規表現R, 元になる文字列A)\n</pre></div>\n</div>\n<p>以下が典型例です。</p>\n<div class=\"highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>re.split(r&#39;[^a-zA-Z][^a-zA-Z]*&#39;, &#39;Hello, World! How are you?&#39;)\n</pre></div>\n</div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">[^a-zA-Z][^a-zA-Z]*</span></code> という正規表現は、英文字以外の文字が1回以上繰り返されている、というパターンを表します。 この正規表現を Python の式の中で用いるときは、<code class=\"docutils literal notranslate\"><span class=\"pre\">r'[^a-zA-Z][^a-zA-Z]*'</span></code> という構文を用います。 先頭の <code class=\"docutils literal notranslate\"><span class=\"pre\">r</span></code> については、以下の説明を参照してください。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[37]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">list1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">split</span><span class=\"p\">(</span><span class=\"s1\">&#39; &#39;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;He has three pets a cat a dog and a giraffe doesn&#39;t he&quot;</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">list1</span><span class=\"p\">)</span>\n<span class=\"n\">list2</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">split</span><span class=\"p\">(</span><span class=\"sa\">r</span><span class=\"s1\">&#39;[^a-zA-Z][^a-zA-Z]*&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Hello, World! How are you?&#39;</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">list2</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n[&#39;He&#39;, &#39;has&#39;, &#39;three&#39;, &#39;pets&#39;, &#39;a&#39;, &#39;cat&#39;, &#39;a&#39;, &#39;dog&#39;, &#39;and&#39;, &#39;a&#39;, &#39;giraffe&#39;, &#34;doesn&#39;t&#34;, &#39;he&#39;]\n[&#39;Hello&#39;, &#39;World&#39;, &#39;How&#39;, &#39;are&#39;, &#39;you&#39;, &#39;&#39;]\n</pre></div></div>\n</div>\n<p>この例のように、返されたリストに空文字列が含まれる場合がありますので、注意してください。</p>\n</section>\n<section id=\"r-を付ける理由\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">r</span></code> を付ける理由<a class=\"headerlink\" href=\"#r-を付ける理由\" title=\"Link to this heading\">¶</a></h3>\n<p>さて、以上のような正規表現は、<code class=\"docutils literal notranslate\"><span class=\"pre\">'hello*'</span></code> のようにPythonの文字列として <code class=\"docutils literal notranslate\"><span class=\"pre\">re.split</span></code> や <code class=\"docutils literal notranslate\"><span class=\"pre\">re.sub</span></code> などの関数に与えればよいのですが、 以下のように文字列の前に <code class=\"docutils literal notranslate\"><span class=\"pre\">r</span></code> を付けることが推奨されます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[38]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"sa\">r</span><span class=\"s1\">&#39;hello*&#39;</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[38]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n&#39;hello*&#39;\n</pre></div></div>\n</div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">r'hello*'</span></code> の場合は <code class=\"docutils literal notranslate\"><span class=\"pre\">r</span></code> を付けても付けなくても同じなのですが、 以下のように <code class=\"docutils literal notranslate\"><span class=\"pre\">r</span></code> を付けるとエスケープすべき文字がエスケープシーケンスになった文字列が得られます。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[39]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"sa\">r</span><span class=\"s1\">&#39;[ \\t\\n]+&#39;</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[39]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n&#39;[ \\\\t\\\\n]+&#39;\n</pre></div></div>\n</div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">\\t</span></code> が <code class=\"docutils literal notranslate\"><span class=\"pre\">\\\\t</span></code> に変わったことでしょう。<code class=\"docutils literal notranslate\"><span class=\"pre\">\\\\</span></code> はバックスラッシュを表すエスケープシーケンスです。 <code class=\"docutils literal notranslate\"><span class=\"pre\">\\t</span></code> はタブという文字を表しますが、<code class=\"docutils literal notranslate\"><span class=\"pre\">\\\\t</span></code> はバックススラッシュと <code class=\"docutils literal notranslate\"><span class=\"pre\">t</span></code> という2文字から成る文字列です。 この場合、正規表現を解釈する段階でバックスラッシュが処理されます。</p>\n<p>特に <code class=\"docutils literal notranslate\"><span class=\"pre\">\\</span></code> という文字そのものを正規表現に含めたいときは <code class=\"docutils literal notranslate\"><span class=\"pre\">\\\\</span></code> と書いた上で <code class=\"docutils literal notranslate\"><span class=\"pre\">r</span></code> を付けてください。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[40]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"sa\">r</span><span class=\"s1\">&#39;</span><span class=\"se\">\\\\</span><span class=\"s1\">t t/&#39;</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[40]:\n</pre></div>\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n&#39;\\\\\\\\t t/&#39;\n</pre></div></div>\n</div>\n<p>この場合、文字列の中に <code class=\"docutils literal notranslate\"><span class=\"pre\">\\</span></code> が2個含まれており、正規表現を解釈する段階で正しく処理されます。すなわち、<code class=\"docutils literal notranslate\"><span class=\"pre\">\\</span></code> という文字そのものを表します。</p>\n</section>\n</section>\n<section id=\"id10\">\n<h2>練習<a class=\"headerlink\" href=\"#id10\" title=\"Link to this heading\">¶</a></h2>\n<p>英語の文書が保存された <code class=\"docutils literal notranslate\"><span class=\"pre\">text-sample.txt</span></code> というファイルから読み込み、出現する単語のリストを返す関数 <code class=\"docutils literal notranslate\"><span class=\"pre\">get_engsentences</span></code> を作成してください。 ただし、<strong>重複する単語を削除してはいけません</strong>が、空文字列は除きます。また、リストは返す前に中身を昇順に並べ替えてください。</p>\n<p>以下のセルの <code class=\"docutils literal notranslate\"><span class=\"pre\">...</span></code> のところを書き換えて解答してください。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[41]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"kn\">import</span> <span class=\"nn\">...</span>\n<span class=\"k\">def</span> <span class=\"nf\">get_engsentences</span><span class=\"p\">():</span>\n    <span class=\"o\">...</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n<span class=\"ansi-cyan-fg\">  Cell </span><span class=\"ansi-green-fg\">In[41], line 1</span>\n<span class=\"ansi-red-fg\">    import ...</span>\n           ^\n<span class=\"ansi-red-fg\">SyntaxError</span><span class=\"ansi-red-fg\">:</span> invalid syntax\n\n</pre></div></div>\n</div>\n<p>上のセルで解答を作成した後、以下のセルを実行し、実行結果が <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> になることを確認してください。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[42]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">list1</span> <span class=\"o\">=</span> <span class=\"n\">get_engsentences</span><span class=\"p\">()</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">list1</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"mi\">289</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">list1</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;a&#39;</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">list1</span><span class=\"p\">[</span><span class=\"mi\">100</span><span class=\"p\">]</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;in&#39;</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">list1</span><span class=\"p\">[</span><span class=\"mi\">288</span><span class=\"p\">]</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;would&#39;</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n<span class=\"ansi-red-fg\">---------------------------------------------------------------------------</span>\n<span class=\"ansi-red-fg\">NameError</span>                                 Traceback (most recent call last)\nCell <span class=\"ansi-green-fg\">In[42], line 1</span>\n<span class=\"ansi-green-fg\">----&gt; 1</span> list1 <span style=\"color: rgb(98,98,98)\">=</span> <span class=\"ansi-yellow-bg\">get_engsentences</span>()\n<span class=\"ansi-green-intense-fg ansi-bold\">      2</span> <span style=\"color: rgb(0,135,0)\">print</span>(<span style=\"color: rgb(0,135,0)\">len</span>(list1) <span style=\"color: rgb(98,98,98)\">==</span> <span style=\"color: rgb(98,98,98)\">289</span>)\n<span class=\"ansi-green-intense-fg ansi-bold\">      3</span> <span style=\"color: rgb(0,135,0)\">print</span>(list1[<span style=\"color: rgb(98,98,98)\">0</span>] <span style=\"color: rgb(98,98,98)\">==</span> <span style=\"color: rgb(175,0,0)\">&#39;</span><span style=\"color: rgb(175,0,0)\">a</span><span style=\"color: rgb(175,0,0)\">&#39;</span>)\n\n<span class=\"ansi-red-fg\">NameError</span>: name &#39;get_engsentences&#39; is not defined\n</pre></div></div>\n</div>\n</section>\n<section id=\"id11\">\n<h2>練習<a class=\"headerlink\" href=\"#id11\" title=\"Link to this heading\">¶</a></h2>\n<p>英語の文書が保存された <code class=\"docutils literal notranslate\"><span class=\"pre\">text-sample.txt</span></code> というファイルから読み込み、出現する単語のリストを返す関数 <code class=\"docutils literal notranslate\"><span class=\"pre\">get_engsentences2</span></code> を作成してください。 ただし、空文字列は除きます。また、リストは返す前に中身を昇順に並べ替えてください。</p>\n<p>以下のセルの <code class=\"docutils literal notranslate\"><span class=\"pre\">...</span></code> のところを書き換えて解答してください。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[43]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"kn\">import</span> <span class=\"nn\">...</span>\n<span class=\"k\">def</span> <span class=\"nf\">get_engsentences2</span><span class=\"p\">():</span>\n    <span class=\"o\">...</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n<span class=\"ansi-cyan-fg\">  Cell </span><span class=\"ansi-green-fg\">In[43], line 1</span>\n<span class=\"ansi-red-fg\">    import ...</span>\n           ^\n<span class=\"ansi-red-fg\">SyntaxError</span><span class=\"ansi-red-fg\">:</span> invalid syntax\n\n</pre></div></div>\n</div>\n<p>上のセルで解答を作成した後、以下のセルを実行し、実行結果が <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> になることを確認してください。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[44]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">list1</span> <span class=\"o\">=</span> <span class=\"n\">get_engsentences2</span><span class=\"p\">()</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">list1</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"mi\">149</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">list1</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;a&#39;</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">list1</span><span class=\"p\">[</span><span class=\"mi\">100</span><span class=\"p\">]</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;proclaim&#39;</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">list1</span><span class=\"p\">[</span><span class=\"mi\">148</span><span class=\"p\">]</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;would&#39;</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n<span class=\"ansi-red-fg\">---------------------------------------------------------------------------</span>\n<span class=\"ansi-red-fg\">NameError</span>                                 Traceback (most recent call last)\nCell <span class=\"ansi-green-fg\">In[44], line 1</span>\n<span class=\"ansi-green-fg\">----&gt; 1</span> list1 <span style=\"color: rgb(98,98,98)\">=</span> <span class=\"ansi-yellow-bg\">get_engsentences2</span>()\n<span class=\"ansi-green-intense-fg ansi-bold\">      2</span> <span style=\"color: rgb(0,135,0)\">print</span>(<span style=\"color: rgb(0,135,0)\">len</span>(list1) <span style=\"color: rgb(98,98,98)\">==</span> <span style=\"color: rgb(98,98,98)\">149</span>)\n<span class=\"ansi-green-intense-fg ansi-bold\">      3</span> <span style=\"color: rgb(0,135,0)\">print</span>(list1[<span style=\"color: rgb(98,98,98)\">0</span>] <span style=\"color: rgb(98,98,98)\">==</span> <span style=\"color: rgb(175,0,0)\">&#39;</span><span style=\"color: rgb(175,0,0)\">a</span><span style=\"color: rgb(175,0,0)\">&#39;</span>)\n\n<span class=\"ansi-red-fg\">NameError</span>: name &#39;get_engsentences2&#39; is not defined\n</pre></div></div>\n</div>\n</section>\n<section id=\"その他の反復演算\">\n<h2>その他の反復演算<a class=\"headerlink\" href=\"#その他の反復演算\" title=\"Link to this heading\">¶</a></h2>\n<p>閉包以外の反復演算を説明します。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">a?</span></code> は、正規表現 <code class=\"docutils literal notranslate\"><span class=\"pre\">a</span></code> を高々1回反復する文字列とマッチします。たとえば、<code class=\"docutils literal notranslate\"><span class=\"pre\">a(bc)?</span></code> は <code class=\"docutils literal notranslate\"><span class=\"pre\">a|abc</span></code> と同じ意味の正規表現です。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[45]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">search</span><span class=\"p\">(</span><span class=\"s1\">&#39;colou?r&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;colour&#39;</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">match1</span><span class=\"p\">)</span>\n<span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">search</span><span class=\"p\">(</span><span class=\"s1\">&#39;colou?r&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;color&#39;</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">match1</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n&lt;re.Match object; span=(0, 6), match=&#39;colour&#39;&gt;\n&lt;re.Match object; span=(0, 5), match=&#39;color&#39;&gt;\n</pre></div></div>\n</div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">a+</span></code> は、正規表現 <code class=\"docutils literal notranslate\"><span class=\"pre\">a</span></code> を1回以上反復する文字列とマッチします。つまり、<code class=\"docutils literal notranslate\"><span class=\"pre\">a+</span></code> は <code class=\"docutils literal notranslate\"><span class=\"pre\">aa*</span></code> と同じ意味の正規表現です。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[46]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">search</span><span class=\"p\">(</span><span class=\"s1\">&#39;boo+&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;boooo!&#39;</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">match1</span><span class=\"p\">)</span>\n<span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">search</span><span class=\"p\">(</span><span class=\"s1\">&#39;boo+&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;bo!&#39;</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">match1</span><span class=\"p\">)</span>\n<span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">search</span><span class=\"p\">(</span><span class=\"s1\">&#39;a+&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;abcdef&#39;</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">match1</span><span class=\"p\">)</span>\n<span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">search</span><span class=\"p\">(</span><span class=\"s1\">&#39;a+&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;aabbcc&#39;</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">match1</span><span class=\"p\">)</span>\n<span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">search</span><span class=\"p\">(</span><span class=\"s1\">&#39;a+&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;cde&#39;</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">match1</span><span class=\"p\">)</span>\n<span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">search</span><span class=\"p\">(</span><span class=\"s1\">&#39;[^a-zA-Z]+&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;abc12345efg67hi89j0k&#39;</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">match1</span><span class=\"p\">)</span>\n<span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">search</span><span class=\"p\">(</span><span class=\"s1\">&#39;[a-zA-Z]+&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;abc12345efg67hi89j0k&#39;</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">match1</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n&lt;re.Match object; span=(0, 5), match=&#39;boooo&#39;&gt;\nNone\n&lt;re.Match object; span=(0, 1), match=&#39;a&#39;&gt;\n&lt;re.Match object; span=(0, 2), match=&#39;aa&#39;&gt;\nNone\n&lt;re.Match object; span=(3, 8), match=&#39;12345&#39;&gt;\n&lt;re.Match object; span=(0, 3), match=&#39;abc&#39;&gt;\n</pre></div></div>\n</div>\n<p>上記の例を <code class=\"docutils literal notranslate\"><span class=\"pre\">*</span></code> を使う形に書き換えてみてください。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">a{x,y}</span></code>、は正規表現 <code class=\"docutils literal notranslate\"><span class=\"pre\">a</span></code> を <code class=\"docutils literal notranslate\"><span class=\"pre\">x</span></code> 回以上かつ <code class=\"docutils literal notranslate\"><span class=\"pre\">y</span></code> 回以下繰り返す文字列とマッチします。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[47]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">search</span><span class=\"p\">(</span><span class=\"s1\">&#39;bo{3,5}&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;booooooo!&#39;</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">match1</span><span class=\"p\">)</span>\n<span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">search</span><span class=\"p\">(</span><span class=\"s1\">&#39;bo{3,5}&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;boo!&#39;</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">match1</span><span class=\"p\">)</span>\n<span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">search</span><span class=\"p\">(</span><span class=\"s1\">&#39;a{2,5}&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;bacaad&#39;</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">match1</span><span class=\"p\">)</span>\n<span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">search</span><span class=\"p\">(</span><span class=\"s1\">&#39;[0-9]{1,3},[0-9]{3,3}&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;1,298円&#39;</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">match1</span><span class=\"p\">)</span>\n<span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">search</span><span class=\"p\">(</span><span class=\"s1\">&#39;[0-9]{1,3},[0-9]{3,3}&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;298円&#39;</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">match1</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n&lt;re.Match object; span=(0, 6), match=&#39;booooo&#39;&gt;\nNone\n&lt;re.Match object; span=(3, 5), match=&#39;aa&#39;&gt;\n&lt;re.Match object; span=(0, 5), match=&#39;1,298&#39;&gt;\nNone\n</pre></div></div>\n</div>\n</section>\n<section id=\"メタ文字\">\n<h2>メタ文字<a class=\"headerlink\" href=\"#メタ文字\" title=\"Link to this heading\">¶</a></h2>\n<p>以下では、良く使うメタ文字（特殊文字）を紹介します。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">.</span></code>（ピリオド）は、あらゆる文字にマッチします。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[48]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">search</span><span class=\"p\">(</span><span class=\"s1\">&#39;.&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Hello&#39;</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">match1</span><span class=\"p\">)</span>\n<span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">search</span><span class=\"p\">(</span><span class=\"s1\">&#39;3.*9&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;1234567890&#39;</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">match1</span><span class=\"p\">)</span>\n<span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">search</span><span class=\"p\">(</span><span class=\"s1\">&#39;ha(.|..)&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;He has an apple and they have pineapples.&#39;</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">match1</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n&lt;re.Match object; span=(0, 1), match=&#39;H&#39;&gt;\n&lt;re.Match object; span=(2, 9), match=&#39;3456789&#39;&gt;\n&lt;re.Match object; span=(3, 6), match=&#39;has&#39;&gt;\n</pre></div></div>\n</div>\n<p>ただし、文字クラスの中で <code class=\"docutils literal notranslate\"><span class=\"pre\">.</span></code> を用いても、あらゆる文字とはマッチせず、<code class=\"docutils literal notranslate\"><span class=\"pre\">*</span></code> の場合と同様に、ピリオドとマッチします。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[49]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">search</span><span class=\"p\">(</span><span class=\"s1\">&#39;[.]&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Hello&#39;</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">match1</span><span class=\"p\">)</span>\n<span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">search</span><span class=\"p\">(</span><span class=\"s1\">&#39;[.]&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;3.141592&#39;</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">match1</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nNone\n&lt;re.Match object; span=(1, 2), match=&#39;.&#39;&gt;\n</pre></div></div>\n</div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">\\t</span></code> は タブを表します。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[50]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">search</span><span class=\"p\">(</span><span class=\"s1\">&#39;b</span><span class=\"se\">\\t</span><span class=\"s1\">&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;a        b       c       d&#39;</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">match1</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n&lt;re.Match object; span=(2, 4), match=&#39;b\\t&#39;&gt;\n</pre></div></div>\n</div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">\\s</span></code> は<strong>空白文字</strong>（スペース、タブ、改行など）を表します。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[51]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">search</span><span class=\"p\">(</span><span class=\"s1\">&#39;b\\s&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;a        b       c       d&#39;</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">match1</span><span class=\"p\">)</span>\n<span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">search</span><span class=\"p\">(</span><span class=\"s1\">&#39;a\\s\\s\\s&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;a    　 b     　c      d&#39;</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">match1</span><span class=\"p\">)</span>\n<span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">search</span><span class=\"p\">(</span><span class=\"s1\">&#39;b\\s*&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;a       　 b     　c      d&#39;</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">match1</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n&lt;re.Match object; span=(2, 4), match=&#39;b\\t&#39;&gt;\n&lt;re.Match object; span=(0, 4), match=&#39;a\\t\\u3000 &#39;&gt;\n&lt;re.Match object; span=(4, 7), match=&#39;b\\t\\u3000&#39;&gt;\n</pre></div></div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area stderr docutils container\">\n<div class=\"highlight\"><pre>\n&lt;&gt;:1: SyntaxWarning: invalid escape sequence &#39;\\s&#39;\n&lt;&gt;:3: SyntaxWarning: invalid escape sequence &#39;\\s&#39;\n&lt;&gt;:5: SyntaxWarning: invalid escape sequence &#39;\\s&#39;\n&lt;&gt;:1: SyntaxWarning: invalid escape sequence &#39;\\s&#39;\n&lt;&gt;:3: SyntaxWarning: invalid escape sequence &#39;\\s&#39;\n&lt;&gt;:5: SyntaxWarning: invalid escape sequence &#39;\\s&#39;\n/var/folders/4n/53v5yxcx5t7d2sld1grw124w0000gn/T/ipykernel_97089/1235538076.py:1: SyntaxWarning: invalid escape sequence &#39;\\s&#39;\n  match1 = re.search(&#39;b\\s&#39;, &#39;a      b       c       d&#39;)\n/var/folders/4n/53v5yxcx5t7d2sld1grw124w0000gn/T/ipykernel_97089/1235538076.py:3: SyntaxWarning: invalid escape sequence &#39;\\s&#39;\n  match1 = re.search(&#39;a\\s\\s\\s&#39;, &#39;a  　 b     　c      d&#39;)\n/var/folders/4n/53v5yxcx5t7d2sld1grw124w0000gn/T/ipykernel_97089/1235538076.py:5: SyntaxWarning: invalid escape sequence &#39;\\s&#39;\n  match1 = re.search(&#39;b\\s*&#39;, &#39;a     　 b     　c      d&#39;)\n</pre></div></div>\n</div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">\\S</span></code> は <code class=\"docutils literal notranslate\"><span class=\"pre\">\\s</span></code> 以外の全ての文字を表します。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[52]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">search</span><span class=\"p\">(</span><span class=\"s1\">&#39;b\\S&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;a        b       bc      d&#39;</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">match1</span><span class=\"p\">)</span>\n<br/></pre></div>\n</div>\n</div>\n<div class=\"nboutput docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n&lt;re.Match object; span=(4, 6), match=&#39;bc&#39;&gt;\n</pre></div></div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area stderr docutils container\">\n<div class=\"highlight\"><pre>\n&lt;&gt;:1: SyntaxWarning: invalid escape sequence &#39;\\S&#39;\n&lt;&gt;:1: SyntaxWarning: invalid escape sequence &#39;\\S&#39;\n/var/folders/4n/53v5yxcx5t7d2sld1grw124w0000gn/T/ipykernel_97089/3290421489.py:1: SyntaxWarning: invalid escape sequence &#39;\\S&#39;\n  match1 = re.search(&#39;b\\S&#39;, &#39;a      b       bc      d&#39;)\n</pre></div></div>\n</div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">\\w</span></code> は <code class=\"docutils literal notranslate\"><span class=\"pre\">[a-zA-Z0-9_]</span></code> と同じ意味です。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[53]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">search</span><span class=\"p\">(</span><span class=\"s1\">&#39;\\w\\w&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;abcde&#39;</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">match1</span><span class=\"p\">)</span>\n<span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">search</span><span class=\"p\">(</span><span class=\"s1\">&#39;b\\w*g&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;abcdefgh&#39;</span><span class=\"p\">)</span>\n<br/></pre></div>\n</div>\n</div>\n<div class=\"nboutput docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n&lt;re.Match object; span=(0, 2), match=&#39;ab&#39;&gt;\n</pre></div></div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area stderr docutils container\">\n<div class=\"highlight\"><pre>\n&lt;&gt;:1: SyntaxWarning: invalid escape sequence &#39;\\w&#39;\n&lt;&gt;:3: SyntaxWarning: invalid escape sequence &#39;\\w&#39;\n&lt;&gt;:1: SyntaxWarning: invalid escape sequence &#39;\\w&#39;\n&lt;&gt;:3: SyntaxWarning: invalid escape sequence &#39;\\w&#39;\n/var/folders/4n/53v5yxcx5t7d2sld1grw124w0000gn/T/ipykernel_97089/3891737031.py:1: SyntaxWarning: invalid escape sequence &#39;\\w&#39;\n  match1 = re.search(&#39;\\w\\w&#39;, &#39;abcde&#39;)\n/var/folders/4n/53v5yxcx5t7d2sld1grw124w0000gn/T/ipykernel_97089/3891737031.py:3: SyntaxWarning: invalid escape sequence &#39;\\w&#39;\n  match1 = re.search(&#39;b\\w*g&#39;, &#39;abcdefgh&#39;)\n</pre></div></div>\n</div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">\\W</span></code> は <code class=\"docutils literal notranslate\"><span class=\"pre\">\\w</span></code> 以外の全ての文字を表します。すなわち、<code class=\"docutils literal notranslate\"><span class=\"pre\">[^a-zA-Z0-9_]</span></code> と同じ意味です。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[54]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">search</span><span class=\"p\">(</span><span class=\"s1\">&#39;g\\W*&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;ab defg  hi jklm no p&#39;</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">match1</span><span class=\"p\">)</span>\n<span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">search</span><span class=\"p\">(</span><span class=\"s1\">&#39;\\W\\w*\\W&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;ab defg  hi jklm no p&#39;</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">match1</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n&lt;re.Match object; span=(6, 9), match=&#39;g  &#39;&gt;\n&lt;re.Match object; span=(2, 8), match=&#39; defg &#39;&gt;\n</pre></div></div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area stderr docutils container\">\n<div class=\"highlight\"><pre>\n&lt;&gt;:1: SyntaxWarning: invalid escape sequence &#39;\\W&#39;\n&lt;&gt;:3: SyntaxWarning: invalid escape sequence &#39;\\W&#39;\n&lt;&gt;:1: SyntaxWarning: invalid escape sequence &#39;\\W&#39;\n&lt;&gt;:3: SyntaxWarning: invalid escape sequence &#39;\\W&#39;\n/var/folders/4n/53v5yxcx5t7d2sld1grw124w0000gn/T/ipykernel_97089/3446286968.py:1: SyntaxWarning: invalid escape sequence &#39;\\W&#39;\n  match1 = re.search(&#39;g\\W*&#39;, &#39;ab defg  hi jklm no p&#39;)\n/var/folders/4n/53v5yxcx5t7d2sld1grw124w0000gn/T/ipykernel_97089/3446286968.py:3: SyntaxWarning: invalid escape sequence &#39;\\W&#39;\n  match1 = re.search(&#39;\\W\\w*\\W&#39;, &#39;ab defg  hi jklm no p&#39;)\n</pre></div></div>\n</div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">\\d</span></code> は <code class=\"docutils literal notranslate\"><span class=\"pre\">[0-9]</span></code> と同じ意味です。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[55]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">search</span><span class=\"p\">(</span><span class=\"s1\">&#39;\\d\\d\\d-\\d\\d\\d\\d&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;153-8902&#39;</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">match1</span><span class=\"p\">)</span>\n<span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">search</span><span class=\"p\">(</span><span class=\"s1\">&#39;\\d*-\\d*&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;153-8902&#39;</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">match1</span><span class=\"p\">)</span>\n<span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">search</span><span class=\"p\">(</span><span class=\"s1\">&#39;\\d\\d-\\d\\d\\d\\d-\\d\\d\\d\\d&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;03-5454-6828&#39;</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">match1</span><span class=\"p\">)</span>\n<span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">search</span><span class=\"p\">(</span><span class=\"s1\">&#39;\\d*-\\d*-\\d*&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;03-5454-6828&#39;</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">match1</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n&lt;re.Match object; span=(0, 8), match=&#39;153-8902&#39;&gt;\n&lt;re.Match object; span=(0, 8), match=&#39;153-8902&#39;&gt;\n&lt;re.Match object; span=(0, 12), match=&#39;03-5454-6828&#39;&gt;\n&lt;re.Match object; span=(0, 12), match=&#39;03-5454-6828&#39;&gt;\n</pre></div></div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area stderr docutils container\">\n<div class=\"highlight\"><pre>\n&lt;&gt;:1: SyntaxWarning: invalid escape sequence &#39;\\d&#39;\n&lt;&gt;:3: SyntaxWarning: invalid escape sequence &#39;\\d&#39;\n&lt;&gt;:5: SyntaxWarning: invalid escape sequence &#39;\\d&#39;\n&lt;&gt;:7: SyntaxWarning: invalid escape sequence &#39;\\d&#39;\n&lt;&gt;:1: SyntaxWarning: invalid escape sequence &#39;\\d&#39;\n&lt;&gt;:3: SyntaxWarning: invalid escape sequence &#39;\\d&#39;\n&lt;&gt;:5: SyntaxWarning: invalid escape sequence &#39;\\d&#39;\n&lt;&gt;:7: SyntaxWarning: invalid escape sequence &#39;\\d&#39;\n/var/folders/4n/53v5yxcx5t7d2sld1grw124w0000gn/T/ipykernel_97089/3067726332.py:1: SyntaxWarning: invalid escape sequence &#39;\\d&#39;\n  match1 = re.search(&#39;\\d\\d\\d-\\d\\d\\d\\d&#39;, &#39;153-8902&#39;)\n/var/folders/4n/53v5yxcx5t7d2sld1grw124w0000gn/T/ipykernel_97089/3067726332.py:3: SyntaxWarning: invalid escape sequence &#39;\\d&#39;\n  match1 = re.search(&#39;\\d*-\\d*&#39;, &#39;153-8902&#39;)\n/var/folders/4n/53v5yxcx5t7d2sld1grw124w0000gn/T/ipykernel_97089/3067726332.py:5: SyntaxWarning: invalid escape sequence &#39;\\d&#39;\n  match1 = re.search(&#39;\\d\\d-\\d\\d\\d\\d-\\d\\d\\d\\d&#39;, &#39;03-5454-6828&#39;)\n/var/folders/4n/53v5yxcx5t7d2sld1grw124w0000gn/T/ipykernel_97089/3067726332.py:7: SyntaxWarning: invalid escape sequence &#39;\\d&#39;\n  match1 = re.search(&#39;\\d*-\\d*-\\d*&#39;, &#39;03-5454-6828&#39;)\n</pre></div></div>\n</div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">\\D</span></code> は <code class=\"docutils literal notranslate\"><span class=\"pre\">\\d</span></code> 以外の全ての文字を表します。すなわち、<code class=\"docutils literal notranslate\"><span class=\"pre\">[^0-9]</span></code> と同じ意味です。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[56]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">search</span><span class=\"p\">(</span><span class=\"s1\">&#39;\\D*&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;He has 10 apples.&#39;</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">match1</span><span class=\"p\">)</span>\n<br/></pre></div>\n</div>\n</div>\n<div class=\"nboutput docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n&lt;re.Match object; span=(0, 7), match=&#39;He has &#39;&gt;\n</pre></div></div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area stderr docutils container\">\n<div class=\"highlight\"><pre>\n&lt;&gt;:1: SyntaxWarning: invalid escape sequence &#39;\\D&#39;\n&lt;&gt;:1: SyntaxWarning: invalid escape sequence &#39;\\D&#39;\n/var/folders/4n/53v5yxcx5t7d2sld1grw124w0000gn/T/ipykernel_97089/174792290.py:1: SyntaxWarning: invalid escape sequence &#39;\\D&#39;\n  match1 = re.search(&#39;\\D*&#39;, &#39;He has 10 apples.&#39;)\n</pre></div></div>\n</div>\n</section>\n<section id=\"id14\">\n<h2>練習<a class=\"headerlink\" href=\"#id14\" title=\"Link to this heading\">¶</a></h2>\n<p>文字列から数字列を切り出して、それを整数とみなして足し合せた結果を整数として返す関数 <code class=\"docutils literal notranslate\"><span class=\"pre\">sumnumbers</span></code> を定義してください。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[57]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"kn\">import</span> <span class=\"nn\">...</span>\n<span class=\"k\">def</span> <span class=\"nf\">sumnumbers</span><span class=\"p\">(</span><span class=\"n\">s</span><span class=\"p\">):</span>\n    <span class=\"o\">...</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n<span class=\"ansi-cyan-fg\">  Cell </span><span class=\"ansi-green-fg\">In[57], line 1</span>\n<span class=\"ansi-red-fg\">    import ...</span>\n           ^\n<span class=\"ansi-red-fg\">SyntaxError</span><span class=\"ansi-red-fg\">:</span> invalid syntax\n\n</pre></div></div>\n</div>\n<p>上のセルで解答を作成した後、以下のセルを実行し、実行結果が <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> になることを確認してください。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[58]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">sumnumbers</span><span class=\"p\">(</span><span class=\"s1\">&#39; 2  33 45, 67.9&#39;</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"mi\">156</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n<span class=\"ansi-red-fg\">---------------------------------------------------------------------------</span>\n<span class=\"ansi-red-fg\">NameError</span>                                 Traceback (most recent call last)\nCell <span class=\"ansi-green-fg\">In[58], line 1</span>\n<span class=\"ansi-green-fg\">----&gt; 1</span> <span style=\"color: rgb(0,135,0)\">print</span>(<span class=\"ansi-yellow-bg\">sumnumbers</span>(<span style=\"color: rgb(175,0,0)\">&#39;</span><span style=\"color: rgb(175,0,0)\"> 2  33 45, 67.9</span><span style=\"color: rgb(175,0,0)\">&#39;</span>) <span style=\"color: rgb(98,98,98)\">==</span> <span style=\"color: rgb(98,98,98)\">156</span>)\n\n<span class=\"ansi-red-fg\">NameError</span>: name &#39;sumnumbers&#39; is not defined\n</pre></div></div>\n</div>\n</section>\n<section id=\"id15\">\n<h2>練習<a class=\"headerlink\" href=\"#id15\" title=\"Link to this heading\">¶</a></h2>\n<p>文字列 <code class=\"docutils literal notranslate\"><span class=\"pre\">str1</span></code> を引数として取り、<code class=\"docutils literal notranslate\"><span class=\"pre\">str1</span></code> を構成する文字列が <code class=\"docutils literal notranslate\"><span class=\"pre\">A</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">C</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">G</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">T</span></code> の4種類の文字以外の文字を含むかどうか調べて、これら以外を含む場合は <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code>、そうでない場合は <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> を返す関数 <code class=\"docutils literal notranslate\"><span class=\"pre\">check_ACGTstr</span></code> を作成してください。 ただし、大文字と小文字は区別しません。また、空列の場合は <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code> を返してください。</p>\n<p>以下のセルの <code class=\"docutils literal notranslate\"><span class=\"pre\">...</span></code> のところを書き換えて解答してください。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[59]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"kn\">import</span> <span class=\"nn\">...</span>\n<span class=\"k\">def</span> <span class=\"nf\">check_ACGTstr</span><span class=\"p\">(</span><span class=\"n\">str1</span><span class=\"p\">):</span>\n    <span class=\"o\">...</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n<span class=\"ansi-cyan-fg\">  Cell </span><span class=\"ansi-green-fg\">In[59], line 1</span>\n<span class=\"ansi-red-fg\">    import ...</span>\n           ^\n<span class=\"ansi-red-fg\">SyntaxError</span><span class=\"ansi-red-fg\">:</span> invalid syntax\n\n</pre></div></div>\n</div>\n<p>上のセルで解答を作成した後、以下のセルを実行し、実行結果が全て <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> になることを確認してください。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[60]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">check_ACGTstr</span><span class=\"p\">(</span><span class=\"s1\">&#39;AcCGTAGCacATcGgAaaTtGCacT&#39;</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">check_ACGTstr</span><span class=\"p\">(</span><span class=\"s1\">&#39;:ACaacgta24FgtGH&#39;</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"kc\">False</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">check_ACGTstr</span><span class=\"p\">(</span><span class=\"s1\">&#39;&#39;</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"kc\">False</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n<span class=\"ansi-red-fg\">---------------------------------------------------------------------------</span>\n<span class=\"ansi-red-fg\">NameError</span>                                 Traceback (most recent call last)\nCell <span class=\"ansi-green-fg\">In[60], line 1</span>\n<span class=\"ansi-green-fg\">----&gt; 1</span> <span style=\"color: rgb(0,135,0)\">print</span>(<span class=\"ansi-yellow-bg\">check_ACGTstr</span>(<span style=\"color: rgb(175,0,0)\">&#39;</span><span style=\"color: rgb(175,0,0)\">AcCGTAGCacATcGgAaaTtGCacT</span><span style=\"color: rgb(175,0,0)\">&#39;</span>) <span style=\"color: rgb(98,98,98)\">==</span> <span class=\"ansi-bold\" style=\"color: rgb(0,135,0)\">True</span>)\n<span class=\"ansi-green-intense-fg ansi-bold\">      2</span> <span style=\"color: rgb(0,135,0)\">print</span>(check_ACGTstr(<span style=\"color: rgb(175,0,0)\">&#39;</span><span style=\"color: rgb(175,0,0)\">:ACaacgta24FgtGH</span><span style=\"color: rgb(175,0,0)\">&#39;</span>) <span style=\"color: rgb(98,98,98)\">==</span> <span class=\"ansi-bold\" style=\"color: rgb(0,135,0)\">False</span>)\n<span class=\"ansi-green-intense-fg ansi-bold\">      3</span> <span style=\"color: rgb(0,135,0)\">print</span>(check_ACGTstr(<span style=\"color: rgb(175,0,0)\">&#39;</span><span style=\"color: rgb(175,0,0)\">&#39;</span>) <span style=\"color: rgb(98,98,98)\">==</span> <span class=\"ansi-bold\" style=\"color: rgb(0,135,0)\">False</span>)\n\n<span class=\"ansi-red-fg\">NameError</span>: name &#39;check_ACGTstr&#39; is not defined\n</pre></div></div>\n</div>\n</section>\n<section id=\"id16\">\n<h2>練習<a class=\"headerlink\" href=\"#id16\" title=\"Link to this heading\">¶</a></h2>\n<p>文字列 <code class=\"docutils literal notranslate\"><span class=\"pre\">str1</span></code> を引数として取り、 <code class=\"docutils literal notranslate\"><span class=\"pre\">str1</span></code> を構成する文字列が「日本の郵便番号」を表す文字列になっている場合は、 <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> を返し、そうでない場合は <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code> を返す関数 <code class=\"docutils literal notranslate\"><span class=\"pre\">check_postalcode</span></code> を作成してください。 ただし、「日本の郵便番号」は <code class=\"docutils literal notranslate\"><span class=\"pre\">abc-defg</span></code> という形になっており、<code class=\"docutils literal notranslate\"><span class=\"pre\">a</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">b</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">c</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">d</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">e</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">d</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">f</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">g</span></code> はそれぞれ <code class=\"docutils literal notranslate\"><span class=\"pre\">0</span></code> から <code class=\"docutils literal notranslate\"><span class=\"pre\">9</span></code> までの値になっています。</p>\n<p>以下のセルの <code class=\"docutils literal notranslate\"><span class=\"pre\">...</span></code> のところを書き換えて解答してください。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[61]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"kn\">import</span> <span class=\"nn\">...</span>\n<span class=\"k\">def</span> <span class=\"nf\">check_postalcode</span><span class=\"p\">(</span><span class=\"n\">str1</span><span class=\"p\">):</span>\n    <span class=\"o\">...</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n<span class=\"ansi-cyan-fg\">  Cell </span><span class=\"ansi-green-fg\">In[61], line 1</span>\n<span class=\"ansi-red-fg\">    import ...</span>\n           ^\n<span class=\"ansi-red-fg\">SyntaxError</span><span class=\"ansi-red-fg\">:</span> invalid syntax\n\n</pre></div></div>\n</div>\n<p>上のセルで解答を作成した後、以下のセルを実行し、実行結果が全て <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> になることを確認してください。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[62]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">check_postalcode</span><span class=\"p\">(</span><span class=\"s1\">&#39;113-8654&#39;</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">check_postalcode</span><span class=\"p\">(</span><span class=\"s1\">&#39;119-110&#39;</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"kc\">False</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">check_postalcode</span><span class=\"p\">(</span><span class=\"s1\">&#39;abc-defg&#39;</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"kc\">False</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">check_postalcode</span><span class=\"p\">(</span><span class=\"s1\">&#39;〒153-0041&#39;</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"kc\">False</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">check_postalcode</span><span class=\"p\">(</span><span class=\"s1\">&#39;113-86547&#39;</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"kc\">False</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n<span class=\"ansi-red-fg\">---------------------------------------------------------------------------</span>\n<span class=\"ansi-red-fg\">NameError</span>                                 Traceback (most recent call last)\nCell <span class=\"ansi-green-fg\">In[62], line 1</span>\n<span class=\"ansi-green-fg\">----&gt; 1</span> <span style=\"color: rgb(0,135,0)\">print</span>(<span class=\"ansi-yellow-bg\">check_postalcode</span>(<span style=\"color: rgb(175,0,0)\">&#39;</span><span style=\"color: rgb(175,0,0)\">113-8654</span><span style=\"color: rgb(175,0,0)\">&#39;</span>) <span style=\"color: rgb(98,98,98)\">==</span> <span class=\"ansi-bold\" style=\"color: rgb(0,135,0)\">True</span>)\n<span class=\"ansi-green-intense-fg ansi-bold\">      2</span> <span style=\"color: rgb(0,135,0)\">print</span>(check_postalcode(<span style=\"color: rgb(175,0,0)\">&#39;</span><span style=\"color: rgb(175,0,0)\">119-110</span><span style=\"color: rgb(175,0,0)\">&#39;</span>) <span style=\"color: rgb(98,98,98)\">==</span> <span class=\"ansi-bold\" style=\"color: rgb(0,135,0)\">False</span>)\n<span class=\"ansi-green-intense-fg ansi-bold\">      3</span> <span style=\"color: rgb(0,135,0)\">print</span>(check_postalcode(<span style=\"color: rgb(175,0,0)\">&#39;</span><span style=\"color: rgb(175,0,0)\">abc-defg</span><span style=\"color: rgb(175,0,0)\">&#39;</span>) <span style=\"color: rgb(98,98,98)\">==</span> <span class=\"ansi-bold\" style=\"color: rgb(0,135,0)\">False</span>)\n\n<span class=\"ansi-red-fg\">NameError</span>: name &#39;check_postalcode&#39; is not defined\n</pre></div></div>\n</div>\n</section>\n<section id=\"id17\">\n<h2>練習<a class=\"headerlink\" href=\"#id17\" title=\"Link to this heading\">¶</a></h2>\n<p>文字列 <code class=\"docutils literal notranslate\"><span class=\"pre\">str1</span></code> を引数として取り、<code class=\"docutils literal notranslate\"><span class=\"pre\">str1</span></code> を構成する文字列が「本郷の内線番号」を表す文字列になっている場合は、 <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> を返し、そうでない場合は <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code> を返す関数 <code class=\"docutils literal notranslate\"><span class=\"pre\">check_extension</span></code> を作成してください。 ただし、「本郷の内線番号」は <code class=\"docutils literal notranslate\"><span class=\"pre\">2abcd</span></code> という形になっており、<code class=\"docutils literal notranslate\"><span class=\"pre\">a</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">b</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">c</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">d</span></code> はそれぞれ <code class=\"docutils literal notranslate\"><span class=\"pre\">0</span></code> から <code class=\"docutils literal notranslate\"><span class=\"pre\">9</span></code> までの値になっています。</p>\n<p>以下のセルの <code class=\"docutils literal notranslate\"><span class=\"pre\">...</span></code> のところを書き換えて解答してください。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[63]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"kn\">import</span> <span class=\"nn\">...</span>\n<span class=\"k\">def</span> <span class=\"nf\">check_extension</span><span class=\"p\">(</span><span class=\"n\">str1</span><span class=\"p\">):</span>\n    <span class=\"o\">...</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n<span class=\"ansi-cyan-fg\">  Cell </span><span class=\"ansi-green-fg\">In[63], line 1</span>\n<span class=\"ansi-red-fg\">    import ...</span>\n           ^\n<span class=\"ansi-red-fg\">SyntaxError</span><span class=\"ansi-red-fg\">:</span> invalid syntax\n\n</pre></div></div>\n</div>\n<p>上のセルで解答を作成した後、以下のセルを実行し、実行結果が全て <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> になることを確認してください。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[64]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">check_extension</span><span class=\"p\">(</span><span class=\"s1\">&#39;24115&#39;</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">check_extension</span><span class=\"p\">(</span><span class=\"s1\">&#39;46858&#39;</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"kc\">False</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">check_extension</span><span class=\"p\">(</span><span class=\"s1\">&#39;☎46666&#39;</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"kc\">False</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">check_extension</span><span class=\"p\">(</span><span class=\"s1\">&#39;467890&#39;</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"kc\">False</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n<span class=\"ansi-red-fg\">---------------------------------------------------------------------------</span>\n<span class=\"ansi-red-fg\">NameError</span>                                 Traceback (most recent call last)\nCell <span class=\"ansi-green-fg\">In[64], line 1</span>\n<span class=\"ansi-green-fg\">----&gt; 1</span> <span style=\"color: rgb(0,135,0)\">print</span>(<span class=\"ansi-yellow-bg\">check_extension</span>(<span style=\"color: rgb(175,0,0)\">&#39;</span><span style=\"color: rgb(175,0,0)\">24115</span><span style=\"color: rgb(175,0,0)\">&#39;</span>) <span style=\"color: rgb(98,98,98)\">==</span> <span class=\"ansi-bold\" style=\"color: rgb(0,135,0)\">True</span>)\n<span class=\"ansi-green-intense-fg ansi-bold\">      2</span> <span style=\"color: rgb(0,135,0)\">print</span>(check_extension(<span style=\"color: rgb(175,0,0)\">&#39;</span><span style=\"color: rgb(175,0,0)\">46858</span><span style=\"color: rgb(175,0,0)\">&#39;</span>) <span style=\"color: rgb(98,98,98)\">==</span> <span class=\"ansi-bold\" style=\"color: rgb(0,135,0)\">False</span>)\n<span class=\"ansi-green-intense-fg ansi-bold\">      3</span> <span style=\"color: rgb(0,135,0)\">print</span>(check_extension(<span style=\"color: rgb(175,0,0)\">&#39;</span><span style=\"color: rgb(175,0,0)\">☎46666</span><span style=\"color: rgb(175,0,0)\">&#39;</span>) <span style=\"color: rgb(98,98,98)\">==</span> <span class=\"ansi-bold\" style=\"color: rgb(0,135,0)\">False</span>)\n\n<span class=\"ansi-red-fg\">NameError</span>: name &#39;check_extension&#39; is not defined\n</pre></div></div>\n</div>\n</section>\n<section id=\"正規表現のエスケープシーケンス\">\n<h2>正規表現のエスケープシーケンス<a class=\"headerlink\" href=\"#正規表現のエスケープシーケンス\" title=\"Link to this heading\">¶</a></h2>\n<p>丸括弧 <code class=\"docutils literal notranslate\"><span class=\"pre\">()</span></code> や演算子 (<code class=\"docutils literal notranslate\"><span class=\"pre\">|</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">*</span></code>) など正規表現の中で特殊な役割を果たす記号のマッチを行いたい場合、文字列のエスケープシーケンスのように <code class=\"docutils literal notranslate\"><span class=\"pre\">\\</span></code> を前につけてやる必要があります。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[65]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">search</span><span class=\"p\">(</span><span class=\"s1\">&#39;03(5454)6666&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;03(5454)6666&#39;</span><span class=\"p\">)</span> <span class=\"c1\">#電話番号。つけないと丸括弧として扱われないのでマッチしない</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">match1</span><span class=\"p\">)</span>\n<span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">search</span><span class=\"p\">(</span><span class=\"s1\">&#39;03(5454)6666&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;0354546666&#39;</span><span class=\"p\">)</span> <span class=\"c1\"># 括弧が含まれない文字列にマッチ</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">match1</span><span class=\"p\">)</span>\n<span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">search</span><span class=\"p\">(</span><span class=\"s1\">&#39;03\\(5454\\)6666&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;03(5454)6666&#39;</span><span class=\"p\">)</span> <span class=\"c1\"># \\(と\\)で左右の丸括弧として扱われるのでマッチする</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">match1</span><span class=\"p\">)</span>\n<span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">search</span><span class=\"p\">(</span><span class=\"s1\">&#39;3*4+5=17&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;3*4+5=17&#39;</span><span class=\"p\">)</span> <span class=\"c1\">#計算式。*と+が演算子扱いされているのでマッチしない</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">match1</span><span class=\"p\">)</span>\n<span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">search</span><span class=\"p\">(</span><span class=\"s1\">&#39;3*4+5=17&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;33345=17&#39;</span><span class=\"p\">)</span> <span class=\"c1\">#\\がないと、たとえば、このような文字列とマッチする</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">match1</span><span class=\"p\">)</span>\n<span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">search</span><span class=\"p\">(</span><span class=\"s1\">&#39;3\\*4\\+5=17&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;3*4+5=17&#39;</span><span class=\"p\">)</span> <span class=\"c1\">#意図した文字列にマッチ</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">match1</span><span class=\"p\">)</span>\n<span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">search</span><span class=\"p\">(</span><span class=\"s1\">&#39;|ω・`）チラ &#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;|ω・`）チラ &#39;</span><span class=\"p\">)</span> <span class=\"c1\">#顔文字。 空列にマッチしてしまう</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">match1</span><span class=\"p\">)</span>\n<span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">search</span><span class=\"p\">(</span><span class=\"s1\">&#39;\\|ω・`）チラ &#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;|ω・`）チラ &#39;</span><span class=\"p\">)</span> <span class=\"c1\">#意図した文字列にマッチ</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">match1</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nNone\n&lt;re.Match object; span=(0, 10), match=&#39;0354546666&#39;&gt;\n&lt;re.Match object; span=(0, 12), match=&#39;03(5454)6666&#39;&gt;\nNone\n&lt;re.Match object; span=(0, 8), match=&#39;33345=17&#39;&gt;\n&lt;re.Match object; span=(0, 8), match=&#39;3*4+5=17&#39;&gt;\n&lt;re.Match object; span=(0, 0), match=&#39;&#39;&gt;\n&lt;re.Match object; span=(0, 8), match=&#39;|ω・`）チラ &#39;&gt;\n</pre></div></div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area stderr docutils container\">\n<div class=\"highlight\"><pre>\n&lt;&gt;:5: SyntaxWarning: invalid escape sequence &#39;\\(&#39;\n&lt;&gt;:11: SyntaxWarning: invalid escape sequence &#39;\\*&#39;\n&lt;&gt;:15: SyntaxWarning: invalid escape sequence &#39;\\|&#39;\n&lt;&gt;:5: SyntaxWarning: invalid escape sequence &#39;\\(&#39;\n&lt;&gt;:11: SyntaxWarning: invalid escape sequence &#39;\\*&#39;\n&lt;&gt;:15: SyntaxWarning: invalid escape sequence &#39;\\|&#39;\n/var/folders/4n/53v5yxcx5t7d2sld1grw124w0000gn/T/ipykernel_97089/4112574947.py:5: SyntaxWarning: invalid escape sequence &#39;\\(&#39;\n  match1 = re.search(&#39;03\\(5454\\)6666&#39;, &#39;03(5454)6666&#39;) # \\(と\\)で左右の丸括弧として扱われるのでマッチする\n/var/folders/4n/53v5yxcx5t7d2sld1grw124w0000gn/T/ipykernel_97089/4112574947.py:11: SyntaxWarning: invalid escape sequence &#39;\\*&#39;\n  match1 = re.search(&#39;3\\*4\\+5=17&#39;, &#39;3*4+5=17&#39;) #意図した文字列にマッチ\n/var/folders/4n/53v5yxcx5t7d2sld1grw124w0000gn/T/ipykernel_97089/4112574947.py:15: SyntaxWarning: invalid escape sequence &#39;\\|&#39;\n  match1 = re.search(&#39;\\|ω・`）チラ &#39;, &#39;|ω・`）チラ &#39;) #意図した文字列にマッチ\n</pre></div></div>\n</div>\n<p>特殊な意味を持つ記号は次の14個です。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">.</span> <span class=\"pre\">^</span> <span class=\"pre\">$</span> <span class=\"pre\">*</span> <span class=\"pre\">+</span> <span class=\"pre\">?</span> <span class=\"pre\">{</span> <span class=\"pre\">}</span> <span class=\"pre\">[</span> <span class=\"pre\">]</span> <span class=\"pre\">\\</span> <span class=\"pre\">|</span> <span class=\"pre\">(</span> <span class=\"pre\">)</span></code></p>\n<p>これらの特殊記号が含まれる場合（かつ意図したマッチの結果が得られない場合）には、エスケープシーケンスを使う（エスケープする）べき（可能性がある）ことも考慮に入れておいてください。</p>\n</section>\n<section id=\"正規表現に関する関数とメソッド\">\n<h2>正規表現に関する関数とメソッド<a class=\"headerlink\" href=\"#正規表現に関する関数とメソッド\" title=\"Link to this heading\">¶</a></h2>\n<p>以下では更に幾つかの関数とメソッドを紹介します。</p>\n<section id=\"findall\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">findall</span></code><a class=\"headerlink\" href=\"#findall\" title=\"Link to this heading\">¶</a></h3>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">findall</span></code> は、<code class=\"docutils literal notranslate\"><span class=\"pre\">正規表現R</span></code> にマッチする <code class=\"docutils literal notranslate\"><span class=\"pre\">文字列A</span></code> 中の全ての文字列を、リストに格納して返します。</p>\n<p>具体的には次のように実行します。</p>\n<div class=\"highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>re.findall(正規表現R, 文字列A)\n</pre></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[66]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">list1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">findall</span><span class=\"p\">(</span><span class=\"s1\">&#39;had&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;James while John had had had had had had had had had had had a better effect on the teacher.&#39;</span><span class=\"p\">)</span>\n<span class=\"c1\">#James, while John had had &#39;had&#39;, had had &#39;had had&#39;; &#39;had had&#39; had had a better effect on the teacher.</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">list1</span><span class=\"p\">)</span> <span class=\"c1\">#全てのhadを抜き出す</span>\n<span class=\"n\">list1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">findall</span><span class=\"p\">(</span><span class=\"s1\">&#39;p[^ .]*&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Peter Piper picked a peck of pickled peppers.&#39;</span><span class=\"p\">,</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">I</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">list1</span><span class=\"p\">)</span><span class=\"c1\"># pで始まる全ての単語を取得する, 大文字小文字を区別しない</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n[&#39;had&#39;, &#39;had&#39;, &#39;had&#39;, &#39;had&#39;, &#39;had&#39;, &#39;had&#39;, &#39;had&#39;, &#39;had&#39;, &#39;had&#39;, &#39;had&#39;, &#39;had&#39;]\n[&#39;Peter&#39;, &#39;Piper&#39;, &#39;picked&#39;, &#39;peck&#39;, &#39;pickled&#39;, &#39;peppers&#39;]\n</pre></div></div>\n</div>\n</section>\n<section id=\"finditer\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">finditer</span></code><a class=\"headerlink\" href=\"#finditer\" title=\"Link to this heading\">¶</a></h3>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">finditer</span></code> は、<code class=\"docutils literal notranslate\"><span class=\"pre\">正規表現R</span></code> にマッチする <code class=\"docutils literal notranslate\"><span class=\"pre\">文字列A</span></code> 中の全ての matchオブジェクトを、特殊なリスト（のようなもの）に格納して返します。</p>\n<p>具体的には次のように実行します。</p>\n<div class=\"highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>re.finditer(正規表現R, 文字列A)\n</pre></div>\n</div>\n<p>返値は特殊なリスト（のようなもの）であり、for文の <code class=\"docutils literal notranslate\"><span class=\"pre\">in</span></code> の後ろに置いて使ってください。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[67]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s1\">&#39;1:正規表現 had の結果：&#39;</span><span class=\"p\">)</span>\n<span class=\"n\">iter1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">finditer</span><span class=\"p\">(</span><span class=\"s1\">&#39;had&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;James while John had had had had had had had had had had had a better effect on the teacher.&#39;</span><span class=\"p\">)</span>\n<span class=\"c1\">#James, while John had had &#39;had&#39;, had had &#39;had had&#39;; &#39;had had&#39; had had a better effect on the teacher.</span>\n<span class=\"k\">for</span> <span class=\"n\">match</span> <span class=\"ow\">in</span> <span class=\"n\">iter1</span><span class=\"p\">:</span>\n    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">match</span><span class=\"p\">)</span> <span class=\"c1\">#全てのhadを抜き出す</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s1\">&#39;2:正規表現 p[^ .]* の結果：&#39;</span><span class=\"p\">)</span>\n<span class=\"n\">iter1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">finditer</span><span class=\"p\">(</span><span class=\"s1\">&#39;p[^ .]*&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Peter Piper picked a peck of pickled peppers.&#39;</span><span class=\"p\">,</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">I</span><span class=\"p\">)</span>\n<span class=\"k\">for</span> <span class=\"n\">match</span> <span class=\"ow\">in</span> <span class=\"n\">iter1</span><span class=\"p\">:</span>\n    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">match</span><span class=\"p\">)</span><span class=\"c1\"># pで始まる全ての単語を取得する, 大文字小文字を区別しない</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n1:正規表現 had の結果：\n&lt;re.Match object; span=(17, 20), match=&#39;had&#39;&gt;\n&lt;re.Match object; span=(21, 24), match=&#39;had&#39;&gt;\n&lt;re.Match object; span=(25, 28), match=&#39;had&#39;&gt;\n&lt;re.Match object; span=(29, 32), match=&#39;had&#39;&gt;\n&lt;re.Match object; span=(33, 36), match=&#39;had&#39;&gt;\n&lt;re.Match object; span=(37, 40), match=&#39;had&#39;&gt;\n&lt;re.Match object; span=(41, 44), match=&#39;had&#39;&gt;\n&lt;re.Match object; span=(45, 48), match=&#39;had&#39;&gt;\n&lt;re.Match object; span=(49, 52), match=&#39;had&#39;&gt;\n&lt;re.Match object; span=(53, 56), match=&#39;had&#39;&gt;\n&lt;re.Match object; span=(57, 60), match=&#39;had&#39;&gt;\n2:正規表現 p[^ .]* の結果：\n&lt;re.Match object; span=(0, 5), match=&#39;Peter&#39;&gt;\n&lt;re.Match object; span=(6, 11), match=&#39;Piper&#39;&gt;\n&lt;re.Match object; span=(12, 18), match=&#39;picked&#39;&gt;\n&lt;re.Match object; span=(21, 25), match=&#39;peck&#39;&gt;\n&lt;re.Match object; span=(29, 36), match=&#39;pickled&#39;&gt;\n&lt;re.Match object; span=(37, 44), match=&#39;peppers&#39;&gt;\n</pre></div></div>\n</div>\n</section>\n<section id=\"group\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">group</span></code><a class=\"headerlink\" href=\"#group\" title=\"Link to this heading\">¶</a></h3>\n<p>matchオブジェクトのメソッド <code class=\"docutils literal notranslate\"><span class=\"pre\">group</span></code> は、正規表現にマッチした文字列を（部分的に）取り出します。正規表現内に丸括弧を用いると、括弧内の正規表現とマッチした文字列を取得できるようになっています。なお、<code class=\"docutils literal notranslate\"><span class=\"pre\">group</span></code> によるこの操作を、括弧内の文字列を<strong>キャプチャ</strong>するといいます。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">i</span></code> 番目のキャプチャした値を取得するには次のようにします。<code class=\"docutils literal notranslate\"><span class=\"pre\">i</span> <span class=\"pre\">=</span> <span class=\"pre\">0</span></code> の場合は、マッチした文字列全体を取得できます。</p>\n<div class=\"highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>matchオブジェクト.group(i)\n</pre></div>\n</div>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[68]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"kn\">import</span> <span class=\"nn\">re</span>\n<span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">search</span><span class=\"p\">(</span><span class=\"s1\">&#39;03-5454-(\\d\\d\\d\\d)&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;03-5454-6666&#39;</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s1\">&#39;マッチした文字列=&#39;</span><span class=\"p\">,</span> <span class=\"n\">match1</span><span class=\"o\">.</span><span class=\"n\">group</span><span class=\"p\">(</span><span class=\"mi\">0</span><span class=\"p\">),</span> <span class=\"s1\">&#39; キャプチャした文字列=&#39;</span><span class=\"p\">,</span> <span class=\"n\">match1</span><span class=\"o\">.</span><span class=\"n\">group</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">))</span> <span class=\"c1\"># 内線番号の取得</span>\n<span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">search</span><span class=\"p\">(</span><span class=\"s1\">&#39;([^@]*)@[^.]*(\\.[^.]*)?\\.u-tokyo\\.ac\\.jp&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;accountname@test.ecc.u-tokyo.ac.jp&#39;</span><span class=\"p\">)</span> <span class=\"c1\"># \\.はピリオドを表します</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s1\">&#39;マッチした文字列=&#39;</span><span class=\"p\">,</span> <span class=\"n\">match1</span><span class=\"o\">.</span><span class=\"n\">group</span><span class=\"p\">(</span><span class=\"mi\">0</span><span class=\"p\">),</span> <span class=\"s1\">&#39; キャプチャした文字列=&#39;</span><span class=\"p\">,</span> <span class=\"n\">match1</span><span class=\"o\">.</span><span class=\"n\">group</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">))</span> <span class=\"c1\"># アカウント名の取得</span>\n<span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">search</span><span class=\"p\">(</span><span class=\"s1\">&#39;([^@]*)@[^.]*(\\.[^.]*)?\\.u-tokyo\\.ac\\.jp&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;accountname@test.u-tokyo.ac.jp&#39;</span><span class=\"p\">)</span> <span class=\"c1\"># \\.はピリオドを表します</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s1\">&#39;マッチした文字列=&#39;</span><span class=\"p\">,</span> <span class=\"n\">match1</span><span class=\"o\">.</span><span class=\"n\">group</span><span class=\"p\">(</span><span class=\"mi\">0</span><span class=\"p\">),</span> <span class=\"s1\">&#39; キャプチャした文字列=&#39;</span><span class=\"p\">,</span> <span class=\"n\">match1</span><span class=\"o\">.</span><span class=\"n\">group</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">))</span> <span class=\"c1\"># アカウント名の取得</span>\n<span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">search</span><span class=\"p\">(</span><span class=\"s2\">&quot;href=</span><span class=\"se\">\\&quot;</span><span class=\"s2\">([^</span><span class=\"se\">\\&quot;</span><span class=\"s2\">]*)</span><span class=\"se\">\\&quot;</span><span class=\"s2\">&quot;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;&lt;a href=&quot;http://www.u-tokyo.ac.jp&quot; target=&quot;_blank&quot;&gt;U-Tokyo&lt;/a&gt;&#39;</span><span class=\"p\">)</span><span class=\"c1\"># \\&quot;はダブルクォートを表します</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s1\">&#39;マッチした文字列=&#39;</span><span class=\"p\">,</span> <span class=\"n\">match1</span><span class=\"o\">.</span><span class=\"n\">group</span><span class=\"p\">(</span><span class=\"mi\">0</span><span class=\"p\">),</span> <span class=\"s1\">&#39; キャプチャした文字列=&#39;</span><span class=\"p\">,</span> <span class=\"n\">match1</span><span class=\"o\">.</span><span class=\"n\">group</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">))</span> <span class=\"c1\"># リンク先URLの取得</span>\n<br/></pre></div>\n</div>\n</div>\n<div class=\"nboutput docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nマッチした文字列= 03-5454-6666  キャプチャした文字列= 6666\nマッチした文字列= accountname@test.ecc.u-tokyo.ac.jp  キャプチャした文字列= accountname\nマッチした文字列= accountname@test.u-tokyo.ac.jp  キャプチャした文字列= accountname\nマッチした文字列= href=&#34;http://www.u-tokyo.ac.jp&#34;  キャプチャした文字列= http://www.u-tokyo.ac.jp\n</pre></div></div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area stderr docutils container\">\n<div class=\"highlight\"><pre>\n&lt;&gt;:2: SyntaxWarning: invalid escape sequence &#39;\\d&#39;\n&lt;&gt;:4: SyntaxWarning: invalid escape sequence &#39;\\.&#39;\n&lt;&gt;:6: SyntaxWarning: invalid escape sequence &#39;\\.&#39;\n&lt;&gt;:2: SyntaxWarning: invalid escape sequence &#39;\\d&#39;\n&lt;&gt;:4: SyntaxWarning: invalid escape sequence &#39;\\.&#39;\n&lt;&gt;:6: SyntaxWarning: invalid escape sequence &#39;\\.&#39;\n/var/folders/4n/53v5yxcx5t7d2sld1grw124w0000gn/T/ipykernel_97089/2781033459.py:2: SyntaxWarning: invalid escape sequence &#39;\\d&#39;\n  match1 = re.search(&#39;03-5454-(\\d\\d\\d\\d)&#39;, &#39;03-5454-6666&#39;)\n/var/folders/4n/53v5yxcx5t7d2sld1grw124w0000gn/T/ipykernel_97089/2781033459.py:4: SyntaxWarning: invalid escape sequence &#39;\\.&#39;\n  match1 = re.search(&#39;([^@]*)@[^.]*(\\.[^.]*)?\\.u-tokyo\\.ac\\.jp&#39;, &#39;accountname@test.ecc.u-tokyo.ac.jp&#39;) # \\.はピリオドを表します\n/var/folders/4n/53v5yxcx5t7d2sld1grw124w0000gn/T/ipykernel_97089/2781033459.py:6: SyntaxWarning: invalid escape sequence &#39;\\.&#39;\n  match1 = re.search(&#39;([^@]*)@[^.]*(\\.[^.]*)?\\.u-tokyo\\.ac\\.jp&#39;, &#39;accountname@test.u-tokyo.ac.jp&#39;) # \\.はピリオドを表します\n</pre></div></div>\n</div>\n<p>マッチに失敗した場合は、matchオブジェクトが返らずに <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code> が返るので、それを確かめずに <code class=\"docutils literal notranslate\"><span class=\"pre\">group</span></code> を使おうとするとエラーが出ますので注意してください。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[69]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">search</span><span class=\"p\">(</span><span class=\"s1\">&#39;03-5454-(\\d\\d\\d\\d)&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;03-5454-666&#39;</span><span class=\"p\">)</span> <span class=\"c1\">#マッチしない文字列</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s1\">&#39;マッチした文字列=&#39;</span><span class=\"p\">,</span> <span class=\"n\">match1</span><span class=\"o\">.</span><span class=\"n\">group</span><span class=\"p\">(</span><span class=\"mi\">0</span><span class=\"p\">),</span> <span class=\"s1\">&#39; キャプチャした文字列=&#39;</span><span class=\"p\">,</span> <span class=\"n\">match1</span><span class=\"o\">.</span><span class=\"n\">group</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">))</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area stderr docutils container\">\n<div class=\"highlight\"><pre>\n&lt;&gt;:1: SyntaxWarning: invalid escape sequence &#39;\\d&#39;\n&lt;&gt;:1: SyntaxWarning: invalid escape sequence &#39;\\d&#39;\n/var/folders/4n/53v5yxcx5t7d2sld1grw124w0000gn/T/ipykernel_97089/778018344.py:1: SyntaxWarning: invalid escape sequence &#39;\\d&#39;\n  match1 = re.search(&#39;03-5454-(\\d\\d\\d\\d)&#39;, &#39;03-5454-666&#39;) #マッチしない文字列\n/var/folders/4n/53v5yxcx5t7d2sld1grw124w0000gn/T/ipykernel_97089/778018344.py:1: SyntaxWarning: invalid escape sequence &#39;\\d&#39;\n  match1 = re.search(&#39;03-5454-(\\d\\d\\d\\d)&#39;, &#39;03-5454-666&#39;) #マッチしない文字列\n</pre></div></div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n<span class=\"ansi-red-fg\">---------------------------------------------------------------------------</span>\n<span class=\"ansi-red-fg\">AttributeError</span>                            Traceback (most recent call last)\nCell <span class=\"ansi-green-fg\">In[69], line 2</span>\n<span class=\"ansi-green-intense-fg ansi-bold\">      1</span> match1 <span style=\"color: rgb(98,98,98)\">=</span> re<span style=\"color: rgb(98,98,98)\">.</span>search(<span style=\"color: rgb(175,0,0)\">&#39;</span><span style=\"color: rgb(175,0,0)\">03-5454-(</span><span style=\"color: rgb(175,0,0)\">\\</span><span style=\"color: rgb(175,0,0)\">d</span><span style=\"color: rgb(175,0,0)\">\\</span><span style=\"color: rgb(175,0,0)\">d</span><span style=\"color: rgb(175,0,0)\">\\</span><span style=\"color: rgb(175,0,0)\">d</span><span style=\"color: rgb(175,0,0)\">\\</span><span style=\"color: rgb(175,0,0)\">d)</span><span style=\"color: rgb(175,0,0)\">&#39;</span>, <span style=\"color: rgb(175,0,0)\">&#39;</span><span style=\"color: rgb(175,0,0)\">03-5454-666</span><span style=\"color: rgb(175,0,0)\">&#39;</span>) <span style=\"color: rgb(95,135,135)\">#マッチしない文字列</span>\n<span class=\"ansi-green-fg\">----&gt; 2</span> <span style=\"color: rgb(0,135,0)\">print</span>(<span style=\"color: rgb(175,0,0)\">&#39;</span><span style=\"color: rgb(175,0,0)\">マッチした文字列=</span><span style=\"color: rgb(175,0,0)\">&#39;</span>, <span class=\"ansi-yellow-bg\">match1</span><span class=\"ansi-yellow-bg\" style=\"color: rgb(98,98,98)\">.</span><span class=\"ansi-yellow-bg\">group</span>(<span style=\"color: rgb(98,98,98)\">0</span>), <span style=\"color: rgb(175,0,0)\">&#39;</span><span style=\"color: rgb(175,0,0)\"> キャプチャした文字列=</span><span style=\"color: rgb(175,0,0)\">&#39;</span>, match1<span style=\"color: rgb(98,98,98)\">.</span>group(<span style=\"color: rgb(98,98,98)\">1</span>))\n\n<span class=\"ansi-red-fg\">AttributeError</span>: &#39;NoneType&#39; object has no attribute &#39;group&#39;\n</pre></div></div>\n</div>\n<p>たとえば、if文でエラーを回避します。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[70]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">search</span><span class=\"p\">(</span><span class=\"s1\">&#39;03-5454-(\\d\\d\\d\\d)&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;03-5454-666&#39;</span><span class=\"p\">)</span>\n<span class=\"k\">if</span> <span class=\"n\">match1</span> <span class=\"o\">!=</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s1\">&#39;マッチした文字列=&#39;</span><span class=\"p\">,</span> <span class=\"n\">match1</span><span class=\"o\">.</span><span class=\"n\">group</span><span class=\"p\">(</span><span class=\"mi\">0</span><span class=\"p\">),</span> <span class=\"s1\">&#39; キャプチャした文字列=&#39;</span><span class=\"p\">,</span> <span class=\"n\">match1</span><span class=\"o\">.</span><span class=\"n\">group</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">))</span>\n<span class=\"k\">else</span><span class=\"p\">:</span>\n    <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s1\">&#39;マッチしていません&#39;</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\nマッチしていません\n</pre></div></div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area stderr docutils container\">\n<div class=\"highlight\"><pre>\n&lt;&gt;:1: SyntaxWarning: invalid escape sequence &#39;\\d&#39;\n&lt;&gt;:1: SyntaxWarning: invalid escape sequence &#39;\\d&#39;\n/var/folders/4n/53v5yxcx5t7d2sld1grw124w0000gn/T/ipykernel_97089/971918040.py:1: SyntaxWarning: invalid escape sequence &#39;\\d&#39;\n  match1 = re.search(&#39;03-5454-(\\d\\d\\d\\d)&#39;, &#39;03-5454-666&#39;)\n</pre></div></div>\n</div>\n</section>\n</section>\n<section id=\"id20\">\n<h2>練習<a class=\"headerlink\" href=\"#id20\" title=\"Link to this heading\">¶</a></h2>\n<p>文字列 <code class=\"docutils literal notranslate\"><span class=\"pre\">str1</span></code> を引数として取り、<code class=\"docutils literal notranslate\"><span class=\"pre\">str1</span></code> を構成する文字列が <code class=\"docutils literal notranslate\"><span class=\"pre\">A</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">C</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">G</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">T</span></code> の4種類の文字以外の文字を含むかどうか調べて、これら以外を含む場合は <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code> を、そうでない場合は <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> を返す関数 <code class=\"docutils literal notranslate\"><span class=\"pre\">check_ACGTstr</span></code> を作成してください。 ただし、大文字と小文字は区別しません。また、空列の場合は <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code> を返してください。</p>\n<p>以下のセルの <code class=\"docutils literal notranslate\"><span class=\"pre\">...</span></code> のところを書き換えて解答してください。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[71]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"kn\">import</span> <span class=\"nn\">...</span>\n<span class=\"k\">def</span> <span class=\"nf\">check_ACGTstr</span><span class=\"p\">(</span><span class=\"n\">str1</span><span class=\"p\">):</span>\n    <span class=\"o\">...</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n<span class=\"ansi-cyan-fg\">  Cell </span><span class=\"ansi-green-fg\">In[71], line 1</span>\n<span class=\"ansi-red-fg\">    import ...</span>\n           ^\n<span class=\"ansi-red-fg\">SyntaxError</span><span class=\"ansi-red-fg\">:</span> invalid syntax\n\n</pre></div></div>\n</div>\n<p>上のセルで解答を作成した後、以下のセルを実行し、実行結果が全て <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> になることを確認してください。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[72]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">check_ACGTstr</span><span class=\"p\">(</span><span class=\"s1\">&#39;AcCGTAGCacATcGgAaaTtGCacT&#39;</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">check_ACGTstr</span><span class=\"p\">(</span><span class=\"s1\">&#39;:ACaacgta24FgtGH&#39;</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"kc\">False</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">check_ACGTstr</span><span class=\"p\">(</span><span class=\"s1\">&#39;&#39;</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"kc\">False</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n<span class=\"ansi-red-fg\">---------------------------------------------------------------------------</span>\n<span class=\"ansi-red-fg\">NameError</span>                                 Traceback (most recent call last)\nCell <span class=\"ansi-green-fg\">In[72], line 1</span>\n<span class=\"ansi-green-fg\">----&gt; 1</span> <span style=\"color: rgb(0,135,0)\">print</span>(<span class=\"ansi-yellow-bg\">check_ACGTstr</span>(<span style=\"color: rgb(175,0,0)\">&#39;</span><span style=\"color: rgb(175,0,0)\">AcCGTAGCacATcGgAaaTtGCacT</span><span style=\"color: rgb(175,0,0)\">&#39;</span>) <span style=\"color: rgb(98,98,98)\">==</span> <span class=\"ansi-bold\" style=\"color: rgb(0,135,0)\">True</span>)\n<span class=\"ansi-green-intense-fg ansi-bold\">      2</span> <span style=\"color: rgb(0,135,0)\">print</span>(check_ACGTstr(<span style=\"color: rgb(175,0,0)\">&#39;</span><span style=\"color: rgb(175,0,0)\">:ACaacgta24FgtGH</span><span style=\"color: rgb(175,0,0)\">&#39;</span>) <span style=\"color: rgb(98,98,98)\">==</span> <span class=\"ansi-bold\" style=\"color: rgb(0,135,0)\">False</span>)\n<span class=\"ansi-green-intense-fg ansi-bold\">      3</span> <span style=\"color: rgb(0,135,0)\">print</span>(check_ACGTstr(<span style=\"color: rgb(175,0,0)\">&#39;</span><span style=\"color: rgb(175,0,0)\">&#39;</span>) <span style=\"color: rgb(98,98,98)\">==</span> <span class=\"ansi-bold\" style=\"color: rgb(0,135,0)\">False</span>)\n\n<span class=\"ansi-red-fg\">NameError</span>: name &#39;check_ACGTstr&#39; is not defined\n</pre></div></div>\n</div>\n</section>\n<section id=\"id21\">\n<h2>練習<a class=\"headerlink\" href=\"#id21\" title=\"Link to this heading\">¶</a></h2>\n<p>xmlファイル B1S.xml は <a class=\"reference external\" href=\"http://www.natcorp.ox.ac.uk\">http://www.natcorp.ox.ac.uk</a> から入手できるイギリス英語のコーパスのファイルです。</p>\n<p>B1S.xmlに含まれるwタグで囲まれる英単語をキー <code class=\"docutils literal notranslate\"><span class=\"pre\">key</span></code> に、その wタグの属性posの値を <code class=\"docutils literal notranslate\"><span class=\"pre\">key</span></code> の値とする辞書を返す関数 <code class=\"docutils literal notranslate\"><span class=\"pre\">get_pos</span></code> を作成してください。ただし、一般にwタグは、次のような形式で記述されます。</p>\n<div class=\"highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>&lt;w pos=&quot;PRON&quot; （ &gt; 記号以外の何らかの文字列）&gt;（英単語） &lt;/w&gt;\n</pre></div>\n</div>\n<p>たとえば、以下のような具合です。</p>\n<div class=\"highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>&lt;w pos=&quot;VERB&quot; hw=&quot;have&quot; c5=&quot;VHI&quot;&gt;have &lt;/w&gt;\n</pre></div>\n</div>\n<p>以下のセルの <code class=\"docutils literal notranslate\"><span class=\"pre\">...</span></code> のところを書き換えて解答してください。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[73]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"kn\">import</span> <span class=\"nn\">...</span>\n<span class=\"k\">def</span> <span class=\"nf\">get_pos</span><span class=\"p\">():</span>\n    <span class=\"o\">...</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n<span class=\"ansi-cyan-fg\">  Cell </span><span class=\"ansi-green-fg\">In[73], line 1</span>\n<span class=\"ansi-red-fg\">    import ...</span>\n           ^\n<span class=\"ansi-red-fg\">SyntaxError</span><span class=\"ansi-red-fg\">:</span> invalid syntax\n\n</pre></div></div>\n</div>\n<p>上のセルで解答を作成した後、以下のセルを実行し、実行結果が <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> になることを確認してください。</p>\n<div class=\"nbinput docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[74]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">get_pos</span><span class=\"p\">()[</span><span class=\"s1\">&#39;They &#39;</span><span class=\"p\">]</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;PRON&#39;</span><span class=\"p\">)</span>\n<span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">get_pos</span><span class=\"p\">()[</span><span class=\"s1\">&#39;know &#39;</span><span class=\"p\">]</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;VERB&#39;</span><span class=\"p\">)</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nboutput nblast docutils container\">\n<div class=\"prompt empty docutils container\">\n</div>\n<div class=\"output_area docutils container\">\n<div class=\"highlight\"><pre>\n<span class=\"ansi-red-fg\">---------------------------------------------------------------------------</span>\n<span class=\"ansi-red-fg\">NameError</span>                                 Traceback (most recent call last)\nCell <span class=\"ansi-green-fg\">In[74], line 1</span>\n<span class=\"ansi-green-fg\">----&gt; 1</span> <span style=\"color: rgb(0,135,0)\">print</span>(<span class=\"ansi-yellow-bg\">get_pos</span>()[<span style=\"color: rgb(175,0,0)\">&#39;</span><span style=\"color: rgb(175,0,0)\">They </span><span style=\"color: rgb(175,0,0)\">&#39;</span>] <span style=\"color: rgb(98,98,98)\">==</span> <span style=\"color: rgb(175,0,0)\">&#39;</span><span style=\"color: rgb(175,0,0)\">PRON</span><span style=\"color: rgb(175,0,0)\">&#39;</span>)\n<span class=\"ansi-green-intense-fg ansi-bold\">      2</span> <span style=\"color: rgb(0,135,0)\">print</span>(get_pos()[<span style=\"color: rgb(175,0,0)\">&#39;</span><span style=\"color: rgb(175,0,0)\">know </span><span style=\"color: rgb(175,0,0)\">&#39;</span>] <span style=\"color: rgb(98,98,98)\">==</span> <span style=\"color: rgb(175,0,0)\">&#39;</span><span style=\"color: rgb(175,0,0)\">VERB</span><span style=\"color: rgb(175,0,0)\">&#39;</span>)\n\n<span class=\"ansi-red-fg\">NameError</span>: name &#39;get_pos&#39; is not defined\n</pre></div></div>\n</div>\n</section>\n<section id=\"練習の解答\">\n<h2>練習の解答<a class=\"headerlink\" href=\"#練習の解答\" title=\"Link to this heading\">¶</a></h2>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[75]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"kn\">import</span> <span class=\"nn\">re</span>\n<span class=\"k\">def</span> <span class=\"nf\">check_monthstr</span><span class=\"p\">(</span><span class=\"n\">str1</span><span class=\"p\">):</span>\n    <span class=\"n\">reg_month</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;((0(1|2|3|4|5|6|7|8|9))|10|11|12)&#39;</span> <span class=\"c1\">#</span>\n    <span class=\"c1\">#reg_month = &#39;01|02|03|04|05|06|07|08|09|10|11|12&#39; # としてもよい</span>\n    <span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">search</span><span class=\"p\">(</span><span class=\"n\">reg_month</span><span class=\"p\">,</span> <span class=\"n\">str1</span><span class=\"p\">)</span> <span class=\"c1\"># 文字列を「含む」なので、（matchではなく）searchを使う</span>\n    <span class=\"k\">return</span> <span class=\"n\">match1</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[76]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"kn\">import</span> <span class=\"nn\">re</span>\n<span class=\"k\">def</span> <span class=\"nf\">check_timestr</span><span class=\"p\">(</span><span class=\"n\">str1</span><span class=\"p\">):</span>\n    <span class=\"n\">reg_hour</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;((0(0|1|2|3|4|5|6|7|8|9))|10|11)&#39;</span> <span class=\"c1\">#「時」部分の正規表現</span>\n    <span class=\"c1\">#reg_hour = &#39;((0[0-9]|10|11)&#39; # 文字クラスを使ってと表すこともできます（文字クラスは後で学習します</span>\n    <span class=\"n\">reg_min</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;((0|2|3|4|5)(0|1|2|3|4|5|6|7|8|9))&#39;</span> <span class=\"c1\">#「分」部分の正規表現</span>\n    <span class=\"c1\">#reg_min = &#39;([0-5][0-9])&#39; # 文字クラスを使ってと表すこともできます（文字クラスは後で学習します</span>\n    <span class=\"n\">reg_time</span> <span class=\"o\">=</span> <span class=\"n\">reg_hour</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;:&#39;</span> <span class=\"o\">+</span> <span class=\"n\">reg_min</span> <span class=\"c1\"># 時部分と分部分を、「:」を挟んで結合した新しい正規表現</span>\n    <span class=\"c1\">#print(reg_time)</span>\n    <span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">search</span><span class=\"p\">(</span><span class=\"n\">reg_time</span><span class=\"p\">,</span> <span class=\"n\">str1</span><span class=\"p\">)</span> <span class=\"c1\"># 文字列を「含む」なので、（matchではなく）searchを使う</span>\n    <span class=\"k\">return</span> <span class=\"n\">match1</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[77]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"kn\">import</span> <span class=\"nn\">re</span>\n<span class=\"k\">def</span> <span class=\"nf\">check_ipv4str</span><span class=\"p\">(</span><span class=\"n\">str1</span><span class=\"p\">):</span>\n    <span class=\"n\">reg_0to9</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;(0|1|2|3|4|5|6|7|8|9)&#39;</span> <span class=\"c1\"># 0から9の数を表す正規表現</span>\n    <span class=\"c1\">#reg_0to9 = &#39;[0-9]&#39; # 文字クラスを使ってと表すこともできます（文字クラスは後で学習します</span>\n    <span class=\"n\">reg_0_1</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;(0|1)&#39;</span> <span class=\"o\">+</span> <span class=\"n\">reg_0to9</span> <span class=\"o\">+</span> <span class=\"n\">reg_0to9</span> <span class=\"c1\"># 先頭の文字が0もしくは1だったときの正規表現(000から199まで)</span>\n    <span class=\"n\">reg_20_24</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;2(0|1|2|3|4)&#39;</span> <span class=\"o\">+</span> <span class=\"n\">reg_0to9</span> <span class=\"c1\"># 先頭が20,21,22,23,24だったときの正規表現(200から249まで)</span>\n    <span class=\"c1\">#reg_20_24 = &#39;2[0-4]&#39; + reg_0to9 # 文字クラスを使ってと表すこともできます</span>\n    <span class=\"n\">reg_25</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;25(0|1|2|3|4|5)&#39;</span> <span class=\"c1\"># 先頭が25だったときの正規表現(250から255まで)</span>\n    <span class=\"c1\">#reg_25 = &#39;25[0-5]&#39; # 文字クラスを使ってと表すこともできます</span>\n    <span class=\"n\">reg_000_255</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;(&#39;</span> <span class=\"o\">+</span> <span class=\"n\">reg_0_1</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;|&#39;</span> <span class=\"o\">+</span> <span class=\"n\">reg_20_24</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;|&#39;</span> <span class=\"o\">+</span> <span class=\"n\">reg_25</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;)&#39;</span><span class=\"c1\"># aaa（000から255）を表す正規表現</span>\n    <span class=\"c1\">#print(reg_000_255)</span>\n    <span class=\"n\">reg_ip</span> <span class=\"o\">=</span> <span class=\"n\">reg_000_255</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;:&#39;</span> <span class=\"o\">+</span> <span class=\"n\">reg_000_255</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;:&#39;</span> <span class=\"o\">+</span> <span class=\"n\">reg_000_255</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;:&#39;</span> <span class=\"o\">+</span> <span class=\"n\">reg_000_255</span> <span class=\"c1\"># aaa:bbb:ccc:dddを表す正規表現</span>\n    <span class=\"c1\">#print(reg_ip)</span>\n    <span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">search</span><span class=\"p\">(</span><span class=\"n\">reg_ip</span><span class=\"p\">,</span> <span class=\"n\">str1</span><span class=\"p\">)</span> <span class=\"c1\"># 文字列を「含む」なので、（matchではなく）searchを使う</span>\n    <span class=\"k\">return</span> <span class=\"n\">match1</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[78]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"kn\">import</span> <span class=\"nn\">re</span>\n<span class=\"k\">def</span> <span class=\"nf\">check_monthdaystr</span><span class=\"p\">(</span><span class=\"n\">str1</span><span class=\"p\">):</span>\n    <span class=\"n\">reg_month_31</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;(01|03|05|07|08|10|12)&#39;</span> <span class=\"c1\">#ddが01から31になるmm</span>\n    <span class=\"n\">reg_month_30</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;(04|06|09|11)&#39;</span> <span class=\"c1\">#ddが01から30になるmm</span>\n    <span class=\"n\">reg_1to9</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;(1|2|3|4|5|6|7|8|9)&#39;</span> <span class=\"c1\"># [1-9]でもよい</span>\n    <span class=\"n\">reg_0to9</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;(0|1|2|3|4|5|6|7|8|9)&#39;</span> <span class=\"c1\"># [0-9]でもよい</span>\n    <span class=\"n\">reg_day_01to09</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;(0&#39;</span> <span class=\"o\">+</span> <span class=\"n\">reg_1to9</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;)&#39;</span> <span class=\"c1\"># ddが01から09になる場合</span>\n    <span class=\"n\">reg_day_10to19</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;(1&#39;</span> <span class=\"o\">+</span> <span class=\"n\">reg_0to9</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;)&#39;</span> <span class=\"c1\"># ddが10から19になる場合</span>\n    <span class=\"n\">reg_day_20to29</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;(2&#39;</span> <span class=\"o\">+</span> <span class=\"n\">reg_0to9</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;)&#39;</span> <span class=\"c1\"># ddが21から29になる場合</span>\n    <span class=\"n\">reg_day_01to29</span> <span class=\"o\">=</span> <span class=\"n\">reg_day_01to09</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;|&#39;</span> <span class=\"o\">+</span> <span class=\"n\">reg_day_10to19</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;|&#39;</span> <span class=\"o\">+</span> <span class=\"n\">reg_day_20to29</span> <span class=\"c1\"># ddが01から29になる場合</span>\n    <span class=\"n\">reg_day_01to30</span> <span class=\"o\">=</span> <span class=\"n\">reg_day_01to29</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;|&#39;</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;30&#39;</span> <span class=\"c1\"># ddが01から30になる場合</span>\n    <span class=\"n\">reg_day_01to31</span> <span class=\"o\">=</span> <span class=\"n\">reg_day_01to30</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;|&#39;</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;31&#39;</span> <span class=\"c1\"># ddが01から31になる場合</span>\n    <span class=\"n\">reg_monthday_31</span> <span class=\"o\">=</span> <span class=\"n\">reg_month_31</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;/(&#39;</span> <span class=\"o\">+</span> <span class=\"n\">reg_day_01to31</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;)&#39;</span> <span class=\"c1\"># mmとddを組み合わせる（01-31の場合）</span>\n    <span class=\"n\">reg_monthday_30</span> <span class=\"o\">=</span> <span class=\"n\">reg_month_30</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;/(&#39;</span> <span class=\"o\">+</span> <span class=\"n\">reg_day_01to30</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;)&#39;</span> <span class=\"c1\"># mmとddを組み合わせる（01-30の場合）</span>\n    <span class=\"n\">reg_monthday_29</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;02/(&#39;</span> <span class=\"o\">+</span> <span class=\"n\">reg_day_01to29</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;)&#39;</span> <span class=\"c1\"># mmとddを組み合わせる（01-29の場合はmmは02のみ）</span>\n    <span class=\"c1\"># 文字列を「含む」なので、（matchではなく）searchを使う</span>\n    <span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">search</span><span class=\"p\">(</span><span class=\"n\">reg_monthday_31</span><span class=\"p\">,</span> <span class=\"n\">str1</span><span class=\"p\">)</span> <span class=\"c1\"># 問題文の条件3を満たす文字列とマッチするかどうか</span>\n    <span class=\"k\">if</span> <span class=\"n\">match1</span> <span class=\"o\">!=</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n        <span class=\"k\">return</span> <span class=\"n\">match1</span>\n    <span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">search</span><span class=\"p\">(</span><span class=\"n\">reg_monthday_30</span><span class=\"p\">,</span> <span class=\"n\">str1</span><span class=\"p\">)</span> <span class=\"c1\"># 問題文の条件4を満たす文字列とマッチするかどうか</span>\n    <span class=\"k\">if</span> <span class=\"n\">match1</span> <span class=\"o\">!=</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n        <span class=\"k\">return</span> <span class=\"n\">match1</span>\n    <span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">search</span><span class=\"p\">(</span><span class=\"n\">reg_monthday_29</span><span class=\"p\">,</span> <span class=\"n\">str1</span><span class=\"p\">)</span> <span class=\"c1\"># 問題文の条件5を満たす文字列とマッチするかどうか</span>\n    <span class=\"k\">return</span> <span class=\"n\">match1</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[79]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"kn\">import</span> <span class=\"nn\">re</span>\n<span class=\"k\">def</span> <span class=\"nf\">sumnumbers</span><span class=\"p\">(</span><span class=\"n\">s</span><span class=\"p\">):</span>\n    <span class=\"n\">numbers</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">split</span><span class=\"p\">(</span><span class=\"s1\">&#39;[^0-9]+&#39;</span><span class=\"p\">,</span> <span class=\"n\">s</span><span class=\"p\">)</span>\n    <span class=\"n\">numbers</span><span class=\"o\">.</span><span class=\"n\">remove</span><span class=\"p\">(</span><span class=\"s1\">&#39;&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">n</span> <span class=\"o\">=</span> <span class=\"mi\">0</span>\n    <span class=\"k\">for</span> <span class=\"n\">number</span> <span class=\"ow\">in</span> <span class=\"n\">numbers</span><span class=\"p\">:</span>\n        <span class=\"n\">n</span> <span class=\"o\">+=</span> <span class=\"nb\">int</span><span class=\"p\">(</span><span class=\"n\">number</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span> <span class=\"n\">n</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[80]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"kn\">import</span> <span class=\"nn\">re</span>\n<span class=\"k\">def</span> <span class=\"nf\">get_engsentences</span><span class=\"p\">():</span>\n    <span class=\"n\">word_list</span> <span class=\"o\">=</span> <span class=\"p\">[]</span> <span class=\"c1\"># 結果を格納するリスト</span>\n    <span class=\"k\">with</span> <span class=\"nb\">open</span><span class=\"p\">(</span><span class=\"s1\">&#39;text-sample.txt&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;r&#39;</span><span class=\"p\">)</span> <span class=\"k\">as</span> <span class=\"n\">f</span><span class=\"p\">:</span>\n        <span class=\"n\">file_str</span> <span class=\"o\">=</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">read</span><span class=\"p\">()</span> <span class=\"c1\">#ファイルの中身を文字列に格納</span>\n    <span class=\"n\">str_list</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">split</span><span class=\"p\">(</span><span class=\"sa\">r</span><span class=\"s1\">&#39;[^a-zA-Z][^a-zA-Z]*&#39;</span><span class=\"p\">,</span> <span class=\"n\">file_str</span><span class=\"p\">)</span> <span class=\"c1\"># 文字列を単語に区切る</span>\n    <span class=\"k\">for</span> <span class=\"n\">word</span> <span class=\"ow\">in</span> <span class=\"n\">str_list</span><span class=\"p\">:</span> <span class=\"c1\">#`re.split(r&#39;[^a-zA-Z][^a-zA-Z]*&#39;, f.read())` は、ファイル全体の文字列を単語に区切ります。</span>\n    <span class=\"c1\">#for word in re.split(r&#39;[^a-zA-Z][^a-zA-Z]*&#39;, f.read()): # と一行にまとめてもよい</span>\n        <span class=\"k\">if</span> <span class=\"n\">word</span> <span class=\"o\">!=</span> <span class=\"s1\">&#39;&#39;</span><span class=\"p\">:</span> <span class=\"c1\">#空文字列を除く</span>\n            <span class=\"n\">word</span> <span class=\"o\">=</span> <span class=\"n\">word</span><span class=\"o\">.</span><span class=\"n\">lower</span><span class=\"p\">()</span> <span class=\"c1\">#単語（文字列）の中の大文字を小文字に変換します</span>\n            <span class=\"n\">word_list</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">word</span><span class=\"p\">)</span> <span class=\"c1\">#リストに追加</span>\n            <span class=\"c1\">#word_list.append(word.lower())でも大丈夫</span>\n    <span class=\"n\">word_list</span><span class=\"o\">.</span><span class=\"n\">sort</span><span class=\"p\">()</span> <span class=\"c1\"># sortメソッドは破壊的</span>\n    <span class=\"k\">return</span> <span class=\"n\">word_list</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[81]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"kn\">import</span> <span class=\"nn\">re</span>\n<span class=\"k\">def</span> <span class=\"nf\">get_engsentences2</span><span class=\"p\">():</span>\n    <span class=\"n\">word_dict</span> <span class=\"o\">=</span> <span class=\"p\">{}</span> <span class=\"c1\"># 重複する単語を削除する為に辞書を使ってみる</span>\n    <span class=\"k\">with</span> <span class=\"nb\">open</span><span class=\"p\">(</span><span class=\"s1\">&#39;text-sample.txt&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;r&#39;</span><span class=\"p\">)</span> <span class=\"k\">as</span> <span class=\"n\">f</span><span class=\"p\">:</span>\n        <span class=\"n\">file_str</span> <span class=\"o\">=</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">read</span><span class=\"p\">()</span> <span class=\"c1\">#ファイルの中身を文字列に格納</span>\n    <span class=\"n\">str_list</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">split</span><span class=\"p\">(</span><span class=\"sa\">r</span><span class=\"s1\">&#39;[^a-zA-Z][^a-zA-Z]*&#39;</span><span class=\"p\">,</span> <span class=\"n\">file_str</span><span class=\"p\">)</span> <span class=\"c1\"># 文字列を単語に区切る</span>\n    <span class=\"k\">for</span> <span class=\"n\">word</span> <span class=\"ow\">in</span> <span class=\"n\">str_list</span><span class=\"p\">:</span> <span class=\"c1\">#`re.split(r&#39;[^a-zA-Z][^a-zA-Z]*&#39;, f.read())` は、ファイル全体の文字列を単語に区切ります。</span>\n        <span class=\"k\">if</span> <span class=\"n\">word</span> <span class=\"o\">!=</span> <span class=\"s1\">&#39;&#39;</span><span class=\"p\">:</span> <span class=\"c1\">#空文字列を除く</span>\n            <span class=\"n\">word</span> <span class=\"o\">=</span> <span class=\"n\">word</span><span class=\"o\">.</span><span class=\"n\">lower</span><span class=\"p\">()</span> <span class=\"c1\">#単語（文字列）の中の大文字を小文字に変換します</span>\n            <span class=\"n\">word_dict</span><span class=\"p\">[</span><span class=\"n\">word</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;anthing good&#39;</span> <span class=\"c1\">#wordという単語があったことを辞書に記録する（wordに対応する値は何でもよい）</span>\n            <span class=\"c1\">#word_dict[word.lower()] = &#39;anthing good&#39;でも大丈夫</span>\n    <span class=\"n\">word_list</span> <span class=\"o\">=</span> <span class=\"p\">[]</span> <span class=\"c1\"># 結果を格納するリスト</span>\n    <span class=\"k\">for</span> <span class=\"n\">word</span> <span class=\"ow\">in</span> <span class=\"n\">word_dict</span><span class=\"p\">:</span>\n        <span class=\"n\">word_list</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">word</span><span class=\"p\">)</span>\n    <span class=\"n\">word_list</span><span class=\"o\">.</span><span class=\"n\">sort</span><span class=\"p\">()</span>\n    <span class=\"k\">return</span> <span class=\"n\">word_list</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[82]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"kn\">import</span> <span class=\"nn\">re</span>\n<span class=\"k\">def</span> <span class=\"nf\">check_ACGTstr</span><span class=\"p\">(</span><span class=\"n\">str1</span><span class=\"p\">):</span>\n    <span class=\"n\">reg_ACGT</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;(A|C|G|T)+&#39;</span> <span class=\"c1\"># A,C,G,Tを表す正規表現  # +→* だと空文字列がマッチしてしまう</span>\n    <span class=\"c1\">#reg_ACGT = &#39;(A|C|G|T)(A|C|G|T)*&#39; # A,C,G,Tを表す正規表現</span>\n    <span class=\"c1\">#reg_ACGT = &#39;[ACGT]+&#39; # A,C,G,Tを表す正規表現</span>\n    <span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">search</span><span class=\"p\">(</span><span class=\"n\">reg_ACGT</span><span class=\"p\">,</span> <span class=\"n\">str1</span><span class=\"p\">,</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">I</span><span class=\"p\">)</span> <span class=\"c1\"># re.I を入れて、大文字と小文字を区別しない</span>\n    <span class=\"k\">if</span> <span class=\"n\">match1</span> <span class=\"o\">!=</span> <span class=\"kc\">None</span> <span class=\"ow\">and</span> <span class=\"n\">str1</span> <span class=\"o\">==</span> <span class=\"n\">match1</span><span class=\"o\">.</span><span class=\"n\">group</span><span class=\"p\">():</span> <span class=\"c1\"># str1全体とマッチした文字列が等しいかチェック</span>\n        <span class=\"k\">return</span> <span class=\"kc\">True</span>\n    <span class=\"k\">return</span> <span class=\"kc\">False</span>\n<span class=\"c1\">#別解</span>\n<span class=\"c1\">#def check_ACGTstr(str1):</span>\n<span class=\"c1\">#    reg_ACGT = &#39;(A|C|G|T)+$&#39; # A,C,G,Tを表す正規表現  # +→* だと空文字列がマッチしてしまう</span>\n<span class=\"c1\">#    #reg_ACGT = &#39;(A|C|G|T)(A|C|G|T)*$&#39; # A,C,G,Tを表す正規表現</span>\n<span class=\"c1\">#    #reg_ACGT = &#39;[ACGT]+$&#39; # A,C,G,Tを表す正規表現</span>\n<span class=\"c1\">#    match1 = re.search(reg_ACGT, str1, re.I) # re.I を入れて、大文字と小文字を区別しない</span>\n<span class=\"c1\">#    if match1 != None: # str1全体とマッチした文字列が等しいかチェック</span>\n<span class=\"c1\">#        return True</span>\n<span class=\"c1\">#    return False</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[83]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"kn\">import</span> <span class=\"nn\">re</span>\n<span class=\"k\">def</span> <span class=\"nf\">check_postalcode</span><span class=\"p\">(</span><span class=\"n\">str1</span><span class=\"p\">):</span>\n    <span class=\"n\">reg1</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;[0-9]{3,3}-[0-9]{4,4}&#39;</span>\n    <span class=\"c1\">#reg1 = &#39;\\d{3,3}-\\d{4,4}&#39; #でも可</span>\n    <span class=\"c1\">#reg1 = &#39;[0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]&#39; #でも可</span>\n    <span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">match</span><span class=\"p\">(</span><span class=\"n\">reg1</span><span class=\"p\">,</span> <span class=\"n\">str1</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">match1</span> <span class=\"o\">==</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n        <span class=\"k\">return</span> <span class=\"kc\">False</span>\n    <span class=\"k\">if</span> <span class=\"n\">match1</span><span class=\"o\">.</span><span class=\"n\">group</span><span class=\"p\">()</span> <span class=\"o\">==</span> <span class=\"n\">str1</span><span class=\"p\">:</span>\n        <span class=\"k\">return</span> <span class=\"kc\">True</span>\n    <span class=\"k\">return</span> <span class=\"kc\">False</span>\n<span class=\"c1\">#別解</span>\n<span class=\"c1\">#def check_postalcode(str1):</span>\n<span class=\"c1\">#    reg1 = &#39;[0-9]{3,3}-[0-9]{4,4}$&#39; #ドル記号を使って行末からマッチを調べる</span>\n<span class=\"c1\">#    #reg1 = &#39;\\d{3,3}-\\d{4,4}$&#39; #でも可</span>\n<span class=\"c1\">#    #reg1 = &#39;[0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]$&#39; #でも可</span>\n<span class=\"c1\">#    match1 = re.match(reg1, str1)</span>\n<span class=\"c1\">#    if match1 == None:</span>\n<span class=\"c1\">#        return False</span>\n<span class=\"c1\">#    return True</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[84]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"kn\">import</span> <span class=\"nn\">re</span>\n<span class=\"k\">def</span> <span class=\"nf\">check_extension</span><span class=\"p\">(</span><span class=\"n\">str1</span><span class=\"p\">):</span>\n    <span class=\"n\">reg1</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;2[0-9]{4,4}&#39;</span>\n<span class=\"c1\">#    reg1 = &#39;2\\d{4,4}&#39; #でも可</span>\n<span class=\"c1\">#    reg1 = &#39;2[0-9][0-9][0-9][0-9]&#39; #でも可</span>\n    <span class=\"n\">match1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">match</span><span class=\"p\">(</span><span class=\"n\">reg1</span><span class=\"p\">,</span> <span class=\"n\">str1</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">match1</span> <span class=\"o\">==</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n        <span class=\"k\">return</span> <span class=\"kc\">False</span>\n    <span class=\"k\">if</span> <span class=\"n\">match1</span><span class=\"o\">.</span><span class=\"n\">group</span><span class=\"p\">()</span> <span class=\"o\">==</span> <span class=\"n\">str1</span><span class=\"p\">:</span>\n        <span class=\"k\">return</span> <span class=\"kc\">True</span>\n    <span class=\"k\">return</span> <span class=\"kc\">False</span>\n<span class=\"c1\">#別解</span>\n<span class=\"c1\">#def check_extension(str1):</span>\n<span class=\"c1\">#    reg1 = &#39;2[0-9]{4,4}$&#39;</span>\n<span class=\"c1\">#    #reg1 = &#39;2\\d{4,4}$&#39; #でも可</span>\n<span class=\"c1\">#    #reg1 = &#39;2[0-9][0-9][0-9][0-9]$&#39; #でも可</span>\n<span class=\"c1\">#    match1 = re.match(reg1, str1)</span>\n<span class=\"c1\">#    if match1 == None:</span>\n<span class=\"c1\">#        return False</span>\n<span class=\"c1\">#    return True</span>\n</pre></div>\n</div>\n</div>\n<div class=\"nbinput nblast docutils container\">\n<div class=\"prompt highlight-none notranslate\"><div class=\"highlight\"><pre><span></span>[85]:\n</pre></div>\n</div>\n<div class=\"input_area highlight-ipython3 notranslate\"><div class=\"highlight\"><pre><span></span><span class=\"kn\">import</span> <span class=\"nn\">re</span>\n<span class=\"k\">def</span> <span class=\"nf\">get_pos</span><span class=\"p\">():</span>\n    <span class=\"n\">str_file</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;B1S.xml&#39;</span>\n    <span class=\"k\">with</span> <span class=\"nb\">open</span><span class=\"p\">(</span><span class=\"n\">str_file</span><span class=\"p\">,</span> <span class=\"s1\">&#39;r&#39;</span><span class=\"p\">,</span> <span class=\"n\">encoding</span><span class=\"o\">=</span><span class=\"s1\">&#39;utf-8&#39;</span><span class=\"p\">)</span> <span class=\"k\">as</span> <span class=\"n\">f</span><span class=\"p\">:</span>\n        <span class=\"n\">str_script</span> <span class=\"o\">=</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">read</span><span class=\"p\">()</span> <span class=\"c1\"># ファイルの中身を1つの文字列に格納する</span>\n    <span class=\"c1\">#print(str_script)</span>\n    <span class=\"n\">itr1</span> <span class=\"o\">=</span> <span class=\"n\">re</span><span class=\"o\">.</span><span class=\"n\">finditer</span><span class=\"p\">(</span><span class=\"s2\">&quot;&lt;w[^&gt;]*pos=</span><span class=\"se\">\\&quot;</span><span class=\"s2\">([^&gt;</span><span class=\"se\">\\&quot;</span><span class=\"s2\">]*)</span><span class=\"se\">\\&quot;</span><span class=\"s2\">[^&gt;]*&gt;([^&lt;]*)&lt;/w&gt;&quot;</span><span class=\"p\">,</span> <span class=\"n\">str_script</span><span class=\"p\">)</span> <span class=\"c1\"># 正規表現を使ってwタグ周辺の文字列をマッチ</span>\n    <span class=\"n\">dic1</span> <span class=\"o\">=</span> <span class=\"p\">{}</span> <span class=\"c1\"># 辞書初期化</span>\n    <span class=\"k\">for</span> <span class=\"n\">m1</span> <span class=\"ow\">in</span> <span class=\"n\">itr1</span><span class=\"p\">:</span>\n        <span class=\"c1\">#print(m1)</span>\n        <span class=\"c1\">#print(m1.group(1), m1.group(2))</span>\n        <span class=\"n\">dic1</span><span class=\"p\">[</span><span class=\"n\">m1</span><span class=\"o\">.</span><span class=\"n\">group</span><span class=\"p\">(</span><span class=\"mi\">2</span><span class=\"p\">)]</span> <span class=\"o\">=</span> <span class=\"n\">m1</span><span class=\"o\">.</span><span class=\"n\">group</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">)</span> <span class=\"c1\"># groupを使ってマッチした文字列をキャプチャする</span>\n    <span class=\"k\">return</span> <span class=\"n\">dic1</span>\n</pre></div>\n</div>\n</div>\n</section>\n</section>\n\n\n          </div>\n          \n        </div>\n      </div>\n      <div class=\"sphinxsidebar\" role=\"navigation\" aria-label=\"Main\">\n        <div class=\"sphinxsidebarwrapper\">\n<h1 class=\"logo\"><a href=\"../index.html\">Pythonプログラミング入門</a></h1>\n\n\n\n\n\n\n\n\n<p>\n  <a style=\"font-family: sans-serif; font-size: smaller; background: linear-gradient(to top, #353535 0%, #141414 100%); -webkit-font-smoothing: antialiased; font-weight: normal; text-shadow: rgb(0 0 0 / 40%) 0 -1px 0; padding: 2px 6px; color: #fff; text-decoration: none; border-radius: 4px; border: 1px solid #0d0d0d; box-shadow: inset 0 1px 1px 0 #8f8f8f;\" href=\"https://github.com/utokyo-ipp/utokyo-ipp.github.io\">View on GitHub</a>\n</p><p>\n  <a style=\"font-family: sans-serif; font-size: smaller; background: linear-gradient(to top, #ff1e00 0%, #de1e00 100%); -webkit-font-smoothing: antialiased; font-weight: normal; text-shadow: rgb(0 0 0 / 40%) 0 -1px 0; padding: 2px 6px; color: #fff; text-decoration: none; border-radius: 4px; border: 1px solid #0d0d0d; box-shadow: inset 0 1px 1px 0 #ff8e70;\" href=\"https://utokyo-ipp.github.io/IPP_textbook.pdf\">View PDF</a>\n</p><p>\n  <a style=\"border-bottom: none;\" href=\"https://colab.research.google.com/github/utokyo-ipp/utokyo-ipp.github.io/blob/master/colab/appendix/5-re.ipynb\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Google Colaboratory\"></a>\n</p><h3>Navigation</h3>\n<ul class=\"current\">\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../1/1-0.html\">1-0. Colaboratory (Colab) の使い方</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../1/1-1.html\">1-1. 数値演算</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../1/1-2.html\">1-2. 変数と関数の基礎</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../1/1-3.html\">1-3. 論理・比較演算と条件分岐の基礎</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../1/1-4.html\">1-4. テストとデバッグ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../2/2-1.html\">2-1. 文字列 (string)</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../2/2-2.html\">2-2. リスト (list)</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../2/2-3.html\">2-3. 条件分岐</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../3/3-1.html\">3-1. 辞書 (dictionary)</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../3/3-2.html\">3-2. 繰り返し</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../3/3-3.html\">3-3. 関数</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../4/4-1.html\">4-1. ファイル入出力の基本</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../4/4-2.html\">4-2. イテラブルとイテレータ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../4/4-3.html\">4-3. ディレクトリと木構造</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../5/5-1.html\">5-1. モジュールの使い方</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../5/5-2.html\">5-2. モジュールの作り方</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../5/5-3.html\">5-3. NumPyライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../6/6-1.html\">6-1. 内包表記</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../6/6-2.html\">6-2. 高階関数</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../6/6-3.html\">6-3. クラス</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../7/7-1.html\">7-1. pandasライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../7/7-2.html\">7-2. scikit-learnライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"1-jupyter-notebook.html\">▲Jupyter Notebook の使い方</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"2-set.html\">▲セット (set)</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"3-recursion.html\">▲再帰</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"3-visualization.html\">▲簡単なデータの可視化</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"4-csv.html\">▲CSVファイルの入出力</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"5-bokeh.html\">▲Bokehライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"5-command.html\">▲Pythonスクリプトとコマンドライン実行</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"5-matplotlib.html\">▲Matplotlibライブラリ</a></li>\n<li class=\"toctree-l1 current\"><a class=\"current reference internal\" href=\"#\">▲正規表現</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#正規表現の基本\">正規表現の基本</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#練習\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#id4\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#id5\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#id6\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#id7\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#文字クラス\">文字クラス</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#正規表現に関する基本的な関数\">正規表現に関する基本的な関数</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#id10\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#id11\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#その他の反復演算\">その他の反復演算</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#メタ文字\">メタ文字</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#id14\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#id15\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#id16\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#id17\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#正規表現のエスケープシーケンス\">正規表現のエスケープシーケンス</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#正規表現に関する関数とメソッド\">正規表現に関する関数とメソッド</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#id20\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#id21\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"#練習の解答\">練習の解答</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../index_of_terms.html\">索引</a></li>\n</ul>\n\n<div class=\"relations\">\n<h3>Related Topics</h3>\n<ul>\n  <li><a href=\"../index.html\">Documentation overview</a><ul>\n      <li>Previous: <a href=\"5-matplotlib.html\" title=\"previous chapter\">▲Matplotlibライブラリ</a></li>\n      <li>Next: <a href=\"../index_of_terms.html\" title=\"next chapter\">索引</a></li>\n  </ul></li>\n</ul>\n</div>\n<search id=\"searchbox\" style=\"display: none\" role=\"search\">\n  <h3 id=\"searchlabel\">Quick search</h3>\n    <div class=\"searchformwrapper\">\n    <form class=\"search\" action=\"../search.html\" method=\"get\">\n      <input type=\"text\" name=\"q\" aria-labelledby=\"searchlabel\" autocomplete=\"off\" autocorrect=\"off\" autocapitalize=\"off\" spellcheck=\"false\"/>\n      <input type=\"submit\" value=\"Go\" />\n    </form>\n    </div>\n</search>\n<script>document.getElementById('searchbox').style.display = \"block\"</script>\n\n\n\n\n\n\n\n\n        </div>\n      </div>\n      <div class=\"clearer\"></div>\n    </div>\n    <div class=\"footer\">\n      &#169;2020–2024, 東京大学 数理・情報教育研究センター (CC BY-NC-ND 4.0).\n      \n      |\n      Powered by <a href=\"https://www.sphinx-doc.org/\">Sphinx 8.0.2</a>\n      &amp; <a href=\"https://alabaster.readthedocs.io\">Alabaster 1.0.0</a>\n      \n    </div>\n\n    \n\n    \n    <script>\n\n      var _gaq = _gaq || [];\n      _gaq.push(['_setAccount', 'G-8M0RXGPPSR']);\n      _gaq.push(['_setDomainName', 'none']);\n      _gaq.push(['_setAllowLinker', true]);\n      _gaq.push(['_trackPageview']);\n\n      (function() {\n        var ga = document.createElement('script'); ga.async = true;\n        ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'https://www') + '.google-analytics.com/ga.js';\n        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);\n      })();\n\n    </script>\n    \n  </body>\n</html>"
  },
  {
    "path": "docs/genindex.html",
    "content": "<!DOCTYPE html>\n\n<html lang=\"jp\" data-content_root=\"./\">\n  <head>\n    <meta charset=\"utf-8\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n    <!-- Google tag (gtag.js) -->\n    <script async src=\"https://www.googletagmanager.com/gtag/js?id=G-8M0RXGPPSR\"></script>\n    <script>\n        window.dataLayer = window.dataLayer || [];\n        function gtag(){dataLayer.push(arguments);}\n        gtag('js', new Date());\n        gtag('config', 'G-8M0RXGPPSR');\n    </script>\n    \n    <title>Index &#8212; Pythonプログラミング入門  documentation</title>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"_static/pygments.css?v=d1102ebc\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"_static/basic.css?v=c058f7c8\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"_static/alabaster.css?v=27fed22d\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"_static/custom.css?v=1a1aa8dd\" />\n    <script src=\"_static/documentation_options.js?v=3ff7d7a7\"></script>\n    <script src=\"_static/doctools.js?v=9a2dae69\"></script>\n    <script src=\"_static/sphinx_highlight.js?v=dc90522c\"></script>\n    <script crossorigin=\"anonymous\" integrity=\"sha256-Ae2Vz/4ePdIu6ZyI/5ZGsYnb+m0JlOmKPjt6XZ9JJkA=\" src=\"https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.4/require.min.js\"></script>\n    <link rel=\"index\" title=\"Index\" href=\"#\" />\n    <link rel=\"search\" title=\"Search\" href=\"search.html\" />\n   \n  <link rel=\"stylesheet\" href=\"_static/custom.css\" type=\"text/css\" />\n  \n\n  \n  \n\n  </head><body>\n  \n\n    <div class=\"document\">\n      <div class=\"documentwrapper\">\n        <div class=\"bodywrapper\">\n          \n\n          <div class=\"body\" role=\"main\">\n            \n\n<h1 id=\"index\">Index</h1>\n\n<div class=\"genindex-jumpbox\">\n \n</div>\n\n\n          </div>\n          \n        </div>\n      </div>\n      <div class=\"sphinxsidebar\" role=\"navigation\" aria-label=\"Main\">\n        <div class=\"sphinxsidebarwrapper\">\n<h1 class=\"logo\"><a href=\"index.html\">Pythonプログラミング入門</a></h1>\n\n\n\n\n\n\n\n\n<p>\n  <a style=\"font-family: sans-serif; font-size: smaller; background: linear-gradient(to top, #353535 0%, #141414 100%); -webkit-font-smoothing: antialiased; font-weight: normal; text-shadow: rgb(0 0 0 / 40%) 0 -1px 0; padding: 2px 6px; color: #fff; text-decoration: none; border-radius: 4px; border: 1px solid #0d0d0d; box-shadow: inset 0 1px 1px 0 #8f8f8f;\" href=\"https://github.com/utokyo-ipp/utokyo-ipp.github.io\">View on GitHub</a>\n</p><p>\n  <a style=\"font-family: sans-serif; font-size: smaller; background: linear-gradient(to top, #ff1e00 0%, #de1e00 100%); -webkit-font-smoothing: antialiased; font-weight: normal; text-shadow: rgb(0 0 0 / 40%) 0 -1px 0; padding: 2px 6px; color: #fff; text-decoration: none; border-radius: 4px; border: 1px solid #0d0d0d; box-shadow: inset 0 1px 1px 0 #ff8e70;\" href=\"https://utokyo-ipp.github.io/IPP_textbook.pdf\">View PDF</a>\n</p><p>\n  <a style=\"border-bottom: none;\" href=\"https://colab.research.google.com/github/utokyo-ipp/utokyo-ipp.github.io/blob/master/colab/genindex.ipynb\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Google Colaboratory\"></a>\n</p><h3>Navigation</h3>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"1/1-0.html\">1-0. Colaboratory (Colab) の使い方</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"1/1-1.html\">1-1. 数値演算</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"1/1-2.html\">1-2. 変数と関数の基礎</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"1/1-3.html\">1-3. 論理・比較演算と条件分岐の基礎</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"1/1-4.html\">1-4. テストとデバッグ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"2/2-1.html\">2-1. 文字列 (string)</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"2/2-2.html\">2-2. リスト (list)</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"2/2-3.html\">2-3. 条件分岐</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"3/3-1.html\">3-1. 辞書 (dictionary)</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"3/3-2.html\">3-2. 繰り返し</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"3/3-3.html\">3-3. 関数</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"4/4-1.html\">4-1. ファイル入出力の基本</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"4/4-2.html\">4-2. イテラブルとイテレータ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"4/4-3.html\">4-3. ディレクトリと木構造</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"5/5-1.html\">5-1. モジュールの使い方</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"5/5-2.html\">5-2. モジュールの作り方</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"5/5-3.html\">5-3. NumPyライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"6/6-1.html\">6-1. 内包表記</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"6/6-2.html\">6-2. 高階関数</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"6/6-3.html\">6-3. クラス</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"7/7-1.html\">7-1. pandasライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"7/7-2.html\">7-2. scikit-learnライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"appendix/1-jupyter-notebook.html\">▲Jupyter Notebook の使い方</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"appendix/2-set.html\">▲セット (set)</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"appendix/3-recursion.html\">▲再帰</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"appendix/3-visualization.html\">▲簡単なデータの可視化</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"appendix/4-csv.html\">▲CSVファイルの入出力</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"appendix/5-bokeh.html\">▲Bokehライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"appendix/5-command.html\">▲Pythonスクリプトとコマンドライン実行</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"appendix/5-matplotlib.html\">▲Matplotlibライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"appendix/5-re.html\">▲正規表現</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"index_of_terms.html\">索引</a></li>\n</ul>\n\n<div class=\"relations\">\n<h3>Related Topics</h3>\n<ul>\n  <li><a href=\"index.html\">Documentation overview</a><ul>\n  </ul></li>\n</ul>\n</div>\n<search id=\"searchbox\" style=\"display: none\" role=\"search\">\n  <h3 id=\"searchlabel\">Quick search</h3>\n    <div class=\"searchformwrapper\">\n    <form class=\"search\" action=\"search.html\" method=\"get\">\n      <input type=\"text\" name=\"q\" aria-labelledby=\"searchlabel\" autocomplete=\"off\" autocorrect=\"off\" autocapitalize=\"off\" spellcheck=\"false\"/>\n      <input type=\"submit\" value=\"Go\" />\n    </form>\n    </div>\n</search>\n<script>document.getElementById('searchbox').style.display = \"block\"</script>\n\n\n\n\n\n\n\n\n        </div>\n      </div>\n      <div class=\"clearer\"></div>\n    </div>\n    <div class=\"footer\">\n      &#169;2020–2024, 東京大学 数理・情報教育研究センター (CC BY-NC-ND 4.0).\n      \n      |\n      Powered by <a href=\"https://www.sphinx-doc.org/\">Sphinx 8.0.2</a>\n      &amp; <a href=\"https://alabaster.readthedocs.io\">Alabaster 1.0.0</a>\n      \n    </div>\n\n    \n\n    \n    <script>\n\n      var _gaq = _gaq || [];\n      _gaq.push(['_setAccount', 'G-8M0RXGPPSR']);\n      _gaq.push(['_setDomainName', 'none']);\n      _gaq.push(['_setAllowLinker', true]);\n      _gaq.push(['_trackPageview']);\n\n      (function() {\n        var ga = document.createElement('script'); ga.async = true;\n        ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'https://www') + '.google-analytics.com/ga.js';\n        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);\n      })();\n\n    </script>\n    \n  </body>\n</html>"
  },
  {
    "path": "docs/index.html",
    "content": "<!DOCTYPE html>\n\n<html lang=\"jp\" data-content_root=\"./\">\n  <head>\n    <meta charset=\"utf-8\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" /><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n\n    <!-- Google tag (gtag.js) -->\n    <script async src=\"https://www.googletagmanager.com/gtag/js?id=G-8M0RXGPPSR\"></script>\n    <script>\n        window.dataLayer = window.dataLayer || [];\n        function gtag(){dataLayer.push(arguments);}\n        gtag('js', new Date());\n        gtag('config', 'G-8M0RXGPPSR');\n    </script>\n    \n    <title>Pythonプログラミング入門 &#8212; Pythonプログラミング入門  documentation</title>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"_static/pygments.css?v=d1102ebc\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"_static/basic.css?v=c058f7c8\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"_static/alabaster.css?v=27fed22d\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"_static/custom.css?v=1a1aa8dd\" />\n    <script src=\"_static/documentation_options.js?v=3ff7d7a7\"></script>\n    <script src=\"_static/doctools.js?v=9a2dae69\"></script>\n    <script src=\"_static/sphinx_highlight.js?v=dc90522c\"></script>\n    <script crossorigin=\"anonymous\" integrity=\"sha256-Ae2Vz/4ePdIu6ZyI/5ZGsYnb+m0JlOmKPjt6XZ9JJkA=\" src=\"https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.4/require.min.js\"></script>\n    <script>window.MathJax = {\"tex\": {\"inlineMath\": [[\"$\", \"$\"], [\"\\\\(\", \"\\\\)\"]], \"processEscapes\": true}, \"options\": {\"ignoreHtmlClass\": \"tex2jax_ignore|mathjax_ignore|document\", \"processHtmlClass\": \"tex2jax_process|mathjax_process|math|output_area\"}}</script>\n    <script defer=\"defer\" src=\"https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js\"></script>\n    <link rel=\"index\" title=\"Index\" href=\"genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"search.html\" />\n    <link rel=\"next\" title=\"1-0. Colaboratory (Colab) の使い方\" href=\"1/1-0.html\" />\n   \n  <link rel=\"stylesheet\" href=\"_static/custom.css\" type=\"text/css\" />\n  \n\n  \n  \n\n  </head><body>\n  \n\n    <div class=\"document\">\n      <div class=\"documentwrapper\">\n        <div class=\"bodywrapper\">\n          \n\n          <div class=\"body\" role=\"main\">\n            \n  <section id=\"python\">\n<h1>Pythonプログラミング入門<a class=\"headerlink\" href=\"#python\" title=\"Link to this heading\">¶</a></h1>\n<p>▲で始まる項目は授業では扱いません。興味にしたがって学習してください。</p>\n<p>ノートブック全体に▲が付いているものもありますので注意してください。</p>\n<div class=\"toctree-wrapper compound\">\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"1/1-0.html\">1-0. Colaboratory (Colab) の使い方</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"1/1-0.html#Colaboratoryの立ち上げ\">Colaboratoryの立ち上げ</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"1/1-0.html#教材のオープン\">教材のオープン</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"1/1-0.html#ノートブックの操作\">ノートブックの操作</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"1/1-0.html#セル\">セル</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"1/1-0.html#セルの編集\">セルの編集</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"1/1-0.html#練習\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"1/1-0.html#セルの挿入\">セルの挿入</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"1/1-0.html#セルの実行が止まらないとき\">セルの実行が止まらないとき</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"1/1-0.html#セルの操作\">セルの操作</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"1/1-0.html#ノートブックの参照\">ノートブックの参照</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"1/1-0.html#ノートブックのダウンロード\">ノートブックのダウンロード</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"1/1-1.html\">1-1. 数値演算</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"1/1-1.html#簡単な算術計算\">簡単な算術計算</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"1/1-1.html#コメント\">コメント</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"1/1-1.html#整数と実数\">整数と実数</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"1/1-1.html#演算子の優先順位と括弧\">演算子の優先順位と括弧</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"1/1-1.html#算術演算子のまとめ\">算術演算子のまとめ</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"1/1-1.html#空白\">空白</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"1/1-1.html#エラー\">エラー</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"1/1-1.html#数学関数（モジュールのインポート）\">数学関数（モジュールのインポート）</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"1/1-1.html#練習\">練習</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"1/1-2.html\">1-2. 変数と関数の基礎</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"1/1-2.html#変数\">変数</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"1/1-2.html#関数の定義と返値\">関数の定義と返値</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"1/1-2.html#ローカル変数\">ローカル変数</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"1/1-2.html#print\"><code class=\"docutils literal notranslate\"><span class=\"pre\">print</span></code></a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"1/1-2.html#print-と-return\"><code class=\"docutils literal notranslate\"><span class=\"pre\">print</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">return</span></code></a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"1/1-2.html#コメントと空行\">コメントと空行</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"1/1-2.html#関数の参照の書き方\">関数の参照の書き方</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"1/1-2.html#▲グローバル変数\">▲グローバル変数</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"1/1-2.html#練習の解答\">練習の解答</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"1/1-3.html\">1-3. 論理・比較演算と条件分岐の基礎</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"1/1-3.html#if文による条件分岐\">if文による条件分岐</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"1/1-3.html#様々な条件\">様々な条件</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"1/1-3.html#真理値を返す関数\">真理値を返す関数</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"1/1-3.html#オブジェクト\">オブジェクト</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"1/1-3.html#None\"><code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code></a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"1/1-3.html#▲条件として使われる他の値\">▲条件として使われる他の値</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"1/1-3.html#▲再帰\">▲再帰</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"1/1-3.html#練習の解答\">練習の解答</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"1/1-4.html\">1-4. テストとデバッグ</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"1/1-4.html#仕様・テスト・デバッグ\">仕様・テスト・デバッグ</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"1/1-4.html#assert文\">assert文</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"1/1-4.html#エラーの分類\">エラーの分類</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"1/1-4.html#デバッグの具体例\">デバッグの具体例</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"1/1-4.html#コーディングスタイル\">コーディングスタイル</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"2/2-1.html\">2-1. 文字列 (string)</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"2/2-1.html#文字列とインデックス\">文字列とインデックス</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"2/2-1.html#文字列とスライス\">文字列とスライス</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"2/2-1.html#空文字列\">空文字列</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"2/2-1.html#文字列の検索\">文字列の検索</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"2/2-1.html#▲エスケープシーケンス\">▲エスケープシーケンス</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"2/2-1.html#バックスラッシュの表示と入力\">バックスラッシュの表示と入力</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"2/2-1.html#文字列の連結\">文字列の連結</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"2/2-1.html#文字列とメソッド\">文字列とメソッド</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"2/2-1.html#文字列の比較演算\"><strong>文字列の比較演算</strong></a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"2/2-1.html#id19\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"2/2-1.html#初心者によくある誤解-----変数と文字列の混乱\">初心者によくある誤解 — <strong>変数</strong>と<strong>文字列</strong>の混乱</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"2/2-1.html#id21\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"2/2-1.html#練習の解答\">練習の解答</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"2/2-2.html\">2-2. リスト (list)</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"2/2-2.html#リストとインデックス\">リストとインデックス</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"2/2-2.html#練習\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"2/2-2.html#多重リスト\"><strong>多重リスト</strong></a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"2/2-2.html#リストに対する関数・演算子・メソッド\">リストに対する関数・演算子・メソッド</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"2/2-2.html#破壊的（インプレース）な操作と非破壊的な生成\">破壊的（インプレース）な操作と非破壊的な生成</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"2/2-2.html#リストを操作するメソッドなど\">リストを操作するメソッドなど</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"2/2-2.html#リストと文字列の相互変換\">リストと文字列の相互変換</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"2/2-2.html#タプル-(tuple)\">タプル (tuple)</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"2/2-2.html#id19\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"2/2-2.html#多重代入\">多重代入</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"2/2-2.html#リストやタプルの比較演算\">リストやタプルの比較演算</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"2/2-2.html#for文による繰り返しとリスト・タプル\">for文による繰り返しとリスト・タプル</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"2/2-2.html#id22\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"2/2-2.html#for文による繰り返しと文字列\">for文による繰り返しと文字列</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"2/2-2.html#id24\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"2/2-2.html#for文によるリスト初期化の短縮記法\">for文によるリスト初期化の短縮記法</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"2/2-2.html#▲オブジェクトの等価性と同一性\">▲オブジェクトの等価性と同一性</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"2/2-2.html#練習の解答\">練習の解答</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"2/2-3.html\">2-3. 条件分岐</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"2/2-3.html#インデントによる構文\">インデントによる構文</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"2/2-3.html#if-...-else-による条件分岐\"><code class=\"docutils literal notranslate\"><span class=\"pre\">if</span></code> … <code class=\"docutils literal notranslate\"><span class=\"pre\">else</span></code> による条件分岐</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"2/2-3.html#if-...-elif-...-else-による条件分岐\"><code class=\"docutils literal notranslate\"><span class=\"pre\">if</span></code> … <code class=\"docutils literal notranslate\"><span class=\"pre\">elif</span></code> … <code class=\"docutils literal notranslate\"><span class=\"pre\">else</span></code> による条件分岐</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"2/2-3.html#練習\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"2/2-3.html#id4\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"2/2-3.html#▲複数行にまたがる条件式\">▲複数行にまたがる条件式</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"2/2-3.html#if-...-elif-...-else-における条件の評価\"><code class=\"docutils literal notranslate\"><span class=\"pre\">if</span></code> … <code class=\"docutils literal notranslate\"><span class=\"pre\">elif</span></code> … <code class=\"docutils literal notranslate\"><span class=\"pre\">else</span></code> における条件の評価</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"2/2-3.html#id7\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"2/2-3.html#or-もしくは-and-で結合された条件の評価\"><code class=\"docutils literal notranslate\"><span class=\"pre\">or</span></code> もしくは <code class=\"docutils literal notranslate\"><span class=\"pre\">and</span></code> で結合された条件の評価</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"2/2-3.html#▲3項演算子（条件式）\">▲<strong>3項演算子</strong>（条件式）</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"2/2-3.html#練習の解答\">練習の解答</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"2/2-3.html#練習の解説\">練習の解説</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"3/3-1.html\">3-1. 辞書 (dictionary)</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"3/3-1.html#練習\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"3/3-1.html#辞書のメソッド\">辞書のメソッド</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"3/3-1.html#辞書とリスト\">辞書とリスト</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"3/3-1.html#id12\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"3/3-1.html#練習の解答\">練習の解答</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"3/3-2.html\">3-2. 繰り返し</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"3/3-2.html#for文による繰り返し\">for文による繰り返し</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"3/3-2.html#for文による繰り返しと辞書\">for文による繰り返しと辞書</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"3/3-2.html#練習\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"3/3-2.html#range\"><code class=\"docutils literal notranslate\"><span class=\"pre\">range</span></code></a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"3/3-2.html#id4\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"3/3-2.html#id5\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"3/3-2.html#range-とリスト\"><code class=\"docutils literal notranslate\"><span class=\"pre\">range</span></code> とリスト</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"3/3-2.html#for文の入れ子\">for文の<strong>入れ子</strong></a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"3/3-2.html#id8\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"3/3-2.html#id9\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"3/3-2.html#for文の計算量\">for文の<strong>計算量</strong></a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"3/3-2.html#enumerate\"><code class=\"docutils literal notranslate\"><span class=\"pre\">enumerate</span></code></a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"3/3-2.html#in\"><code class=\"docutils literal notranslate\"><span class=\"pre\">in</span></code></a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"3/3-2.html#while文による繰り返し\">while文による繰り返し</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"3/3-2.html#制御構造とreturn文\">制御構造とreturn文</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"3/3-2.html#break文\"><strong>break文</strong></a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"3/3-2.html#id11\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"3/3-2.html#continue文\"><strong>continue文</strong></a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"3/3-2.html#▲for文とwhile文における-else\">▲for文とwhile文における <code class=\"docutils literal notranslate\"><span class=\"pre\">else</span></code></a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"3/3-2.html#pass文\"><strong>pass文</strong></a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"3/3-2.html#id12\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"3/3-2.html#id13\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"3/3-2.html#id14\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"3/3-2.html#id15\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"3/3-2.html#id16\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"3/3-2.html#id17\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"3/3-2.html#id18\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"3/3-2.html#id19\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"3/3-2.html#id20\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"3/3-2.html#練習の解答\">練習の解答</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"3/3-2.html#練習の解説\">練習の解説</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"3/3-2.html#id23\">練習の解答</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"3/3-3.html\">3-3. 関数</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"3/3-3.html#関数の定義\">関数の定義</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"3/3-3.html#引数\">引数</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"3/3-3.html#返値\">返値</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"3/3-3.html#複数の引数\">複数の引数</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"3/3-3.html#変数とスコープ\">変数とスコープ</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"3/3-3.html#▲キーワード引数\">▲キーワード引数</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"3/3-3.html#▲引数の初期値\">▲引数の初期値</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"3/3-3.html#▲可変長引数\">▲可変長引数</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"3/3-3.html#▲辞書型の可変長引数\">▲辞書型の可変長引数</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"3/3-3.html#▲引数の順番\">▲引数の順番</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"3/3-3.html#▲変数としての関数\">▲変数としての関数</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"4/4-1.html\">4-1. ファイル入出力の基本</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"4/4-1.html#ファイルのオープン\">ファイルのオープン</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"4/4-1.html#ファイルのクローズ\">ファイルのクローズ</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"4/4-1.html#行の読み込み\">行の読み込み</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"4/4-1.html#練習\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"4/4-1.html#ファイル全体の読み込み\">ファイル全体の読み込み</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"4/4-1.html#id7\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"4/4-1.html#編集中のファイルの動作\">編集中のファイルの動作</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"4/4-1.html#ファイルに対するwith文\">ファイルに対するwith文</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"4/4-1.html#ファイルへの書き込み\">ファイルへの書き込み</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"4/4-1.html#id10\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"4/4-1.html#ファイルの読み書きにおける文字コード指定\">ファイルの読み書きにおける文字コード指定</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"4/4-1.html#改行文字の削除\">改行文字の削除</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"4/4-1.html#練習の解答\">練習の解答</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"4/4-2.html\">4-2. イテラブルとイテレータ</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"4/4-2.html#for文による繰り返しとファイルオブジェクト\">for文による繰り返しとファイルオブジェクト</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"4/4-2.html#for文とイテラブルとイテレータ\">for文とイテラブルとイテレータ</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"4/4-2.html#iter\"><code class=\"docutils literal notranslate\"><span class=\"pre\">iter</span></code></a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"4/4-2.html#next\"><code class=\"docutils literal notranslate\"><span class=\"pre\">next</span></code></a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"4/4-2.html#for文の仕組み\">for文の仕組み</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"4/4-2.html#イテレータは特殊なイテラブル\">イテレータは特殊なイテラブル</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"4/4-2.html#ファイルオブジェクトはイテレータ\">ファイルオブジェクトはイテレータ</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"4/4-2.html#イテラブルはイテレータではない\">イテラブルはイテレータではない</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"4/4-2.html#イテレータを返す-enumerate\">イテレータを返す <code class=\"docutils literal notranslate\"><span class=\"pre\">enumerate</span></code></a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"4/4-2.html#▲イテラブルとイテレータの定義\">▲イテラブルとイテレータの定義</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"4/4-2.html#練習の解答\">練習の解答</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"4/4-3.html\">4-3. ディレクトリと木構造</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"4/4-3.html#ディレクトリと階層構造\">ディレクトリと階層構造</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"4/4-3.html#カレントワーキングディレクトリ\">カレントワーキングディレクトリ</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"4/4-3.html#パス\">パス</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"4/4-3.html#木構造\">木構造</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"4/4-3.html#データ表現としての木構造\">データ表現としての木構造</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"5/5-1.html\">5-1. モジュールの使い方</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"5/5-1.html#モジュールのインポート\">モジュールのインポート</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"5/5-1.html#from\"><code class=\"docutils literal notranslate\"><span class=\"pre\">from</span></code></a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"5/5-1.html#as\"><code class=\"docutils literal notranslate\"><span class=\"pre\">as</span></code></a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"5/5-1.html#練習\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"5/5-1.html#練習の解答\">練習の解答</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"5/5-2.html\">5-2. モジュールの作り方</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"5/5-2.html#モジュールファイル\">モジュールファイル</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"5/5-2.html#自作モジュールの使い方\">自作モジュールの使い方</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"5/5-3.html\">5-3. NumPyライブラリ</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"5/5-3.html#配列の構築\">配列の構築</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"5/5-3.html#配列要素を生成する構築関数\">配列要素を生成する構築関数</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"5/5-3.html#練習\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"5/5-3.html#配列要素の操作\">配列要素の操作</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"5/5-3.html#要素毎の演算\">要素毎の演算</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"5/5-3.html#よく使われる配列操作\">よく使われる配列操作</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"5/5-3.html#配列の保存と復元\">配列の保存と復元</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"5/5-3.html#▲真理値配列によるインデックスアクセス\">▲<strong>真理値配列によるインデックスアクセス</strong></a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"5/5-3.html#▲線形代数の演算\">▲線形代数の演算</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"5/5-3.html#練習の解答\">練習の解答</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"6/6-1.html\">6-1. 内包表記</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"6/6-1.html#リスト内包表記\">リスト内包表記</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"6/6-1.html#練習\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"6/6-1.html#id4\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"6/6-1.html#id5\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"6/6-1.html#内包表記の入れ子\">内包表記の入れ子</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"6/6-1.html#id7\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"6/6-1.html#id8\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"6/6-1.html#▲条件付き内包表記\">▲<strong>条件付き内包表記</strong></a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"6/6-1.html#▲セット内包表記\">▲<strong>セット内包表記</strong></a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"6/6-1.html#▲辞書内包表記\">▲<strong>辞書内包表記</strong></a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"6/6-1.html#▲ジェネレータ式\">▲<strong>ジェネレータ式</strong></a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"6/6-1.html#練習の解答\">練習の解答</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"6/6-2.html\">6-2. 高階関数</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"6/6-2.html#max\"><code class=\"docutils literal notranslate\"><span class=\"pre\">max</span></code></a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"6/6-2.html#sorted\"><code class=\"docutils literal notranslate\"><span class=\"pre\">sorted</span></code></a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"6/6-2.html#ラムダ式\">ラムダ式</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"6/6-2.html#リストからイテラブルへ\">リストからイテラブルへ</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"6/6-2.html#練習\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"6/6-2.html#map\"><code class=\"docutils literal notranslate\"><span class=\"pre\">map</span></code></a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"6/6-2.html#id5\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"6/6-2.html#filter\"><code class=\"docutils literal notranslate\"><span class=\"pre\">filter</span></code></a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"6/6-2.html#id6\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"6/6-2.html#id7\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"6/6-2.html#練習の解答\">練習の解答</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"6/6-3.html\">6-3. クラス</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"6/6-3.html#クラス定義\">クラス定義</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"6/6-3.html#初期化と属性\">初期化と属性</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"6/6-3.html#継承\">継承</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"6/6-3.html#特殊メソッド\">特殊メソッド</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"6/6-3.html#継承による振舞いの改変\">継承による振舞いの改変</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"6/6-3.html#練習\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"6/6-3.html#▲with文への対応\">▲with文への対応</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"6/6-3.html#練習の解答\">練習の解答</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"7/7-1.html\">7-1. pandasライブラリ</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"7/7-1.html#シリーズとデータフレーム\">シリーズとデータフレーム</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"7/7-1.html#シリーズ-(Series)-の作成\">シリーズ (<code class=\"docutils literal notranslate\"><span class=\"pre\">Series</span></code>) の作成</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"7/7-1.html#データフレーム-(DataFrame)-の作成\">データフレーム (<code class=\"docutils literal notranslate\"><span class=\"pre\">DataFrame</span></code>) の作成</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"7/7-1.html#CSVファイルからのデータフレームの作成\">CSVファイルからのデータフレームの作成</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"7/7-1.html#データの参照\">データの参照</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"7/7-1.html#データの条件取り出し\">データの条件取り出し</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"7/7-1.html#列の追加と削除\">列の追加と削除</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"7/7-1.html#行の追加と削除\">行の追加と削除</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"7/7-1.html#データの並び替え\">データの並び替え</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"7/7-1.html#データの統計量\">データの統計量</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"7/7-1.html#▲データの連結\">▲データの連結</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"7/7-1.html#▲データの結合\">▲データの結合</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"7/7-1.html#▲データのグループ化\">▲データのグループ化</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"7/7-1.html#▲欠損値、時系列データの処理\">▲欠損値、時系列データの処理</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"7/7-2.html\">7-2. scikit-learnライブラリ</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"7/7-2.html#機械学習について\">機械学習について</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"7/7-2.html#教師あり学習\">教師あり学習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"7/7-2.html#教師なし学習\">教師なし学習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"7/7-2.html#データ\">データ</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"7/7-2.html#モデル学習の基礎\">モデル学習の基礎</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"7/7-2.html#教師あり学習・分類の例\">教師あり学習・分類の例</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"7/7-2.html#練習\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"7/7-2.html#教師あり学習・回帰の例\">教師あり学習・回帰の例</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"7/7-2.html#教師なし学習・クラスタリングの例\">教師なし学習・クラスタリングの例</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"7/7-2.html#id10\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"7/7-2.html#教師なし学習・次元削減の例\">教師なし学習・次元削減の例</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"7/7-2.html#練習の解答例\">練習の解答例</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"appendix/1-jupyter-notebook.html\">▲Jupyter Notebook の使い方</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"appendix/1-jupyter-notebook.html#セル\">セル</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"appendix/1-jupyter-notebook.html#コマンドモード\">コマンドモード</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"appendix/1-jupyter-notebook.html#編集モード\">編集モード</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"appendix/1-jupyter-notebook.html#練習\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"appendix/1-jupyter-notebook.html#（注意）Shift-Enterに反応がなくなったとき\">（注意）Shift-Enterに反応がなくなったとき</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"appendix/2-set.html\">▲セット (set)</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"appendix/2-set.html#セットの組み込み関数\">セットの組み込み関数</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"appendix/2-set.html#練習\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"appendix/2-set.html#id3\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"appendix/2-set.html#集合演算\"><strong>集合演算</strong></a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"appendix/2-set.html#比較演算\"><strong>比較演算</strong></a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"appendix/2-set.html#セットのメソッド\">セットのメソッド</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"appendix/2-set.html#id7\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"appendix/2-set.html#練習の解答\">練習の解答</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"appendix/3-recursion.html\">▲再帰</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"appendix/3-recursion.html#再帰関数の例：接頭辞リストと接尾辞リスト\">再帰関数の例：接頭辞リストと接尾辞リスト</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"appendix/3-recursion.html#再帰関数の例：べき乗の計算\">再帰関数の例：べき乗の計算</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"appendix/3-recursion.html#再帰関数の例：マージソート\">再帰関数の例：マージソート</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"appendix/3-visualization.html\">▲簡単なデータの可視化</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"appendix/3-visualization.html#matplotlib\"><code class=\"docutils literal notranslate\"><span class=\"pre\">matplotlib</span></code></a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"appendix/3-visualization.html#折れ線グラフ\">折れ線グラフ</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"appendix/3-visualization.html#散布図\">散布図</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"appendix/3-visualization.html#棒グラフ\">棒グラフ</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"appendix/4-csv.html\">▲CSVファイルの入出力</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"appendix/4-csv.html#CSV形式とは\">CSV形式とは</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"appendix/4-csv.html#CSVファイルの読み込み\">CSVファイルの読み込み</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"appendix/4-csv.html#CSVファイルに対するfor文\">CSVファイルに対するfor文</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"appendix/4-csv.html#CSVファイルに対するwith文\">CSVファイルに対するwith文</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"appendix/4-csv.html#CSVファイルの書き込み\">CSVファイルの書き込み</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"appendix/4-csv.html#練習\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"appendix/4-csv.html#id6\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"appendix/4-csv.html#練習の解答\">練習の解答</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"appendix/5-bokeh.html\">▲Bokehライブラリ</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"appendix/5-bokeh.html#線グラフ\">線グラフ</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"appendix/5-bokeh.html#散布図\">散布図</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"appendix/5-bokeh.html#棒グラフ\">棒グラフ</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"appendix/5-bokeh.html#ヒストグラム\">ヒストグラム</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"appendix/5-bokeh.html#ヒートマップ\">ヒートマップ</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"appendix/5-bokeh.html#グラフのファイル出力\">グラフのファイル出力</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"appendix/5-command.html\">▲Pythonスクリプトとコマンドライン実行</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"appendix/5-command.html#コマンドライン実行の具体例\">コマンドライン実行の具体例</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"appendix/5-command.html#コマンドライン引数\">コマンドライン引数</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"appendix/5-command.html#モジュールのコマンドライン実行\">モジュールのコマンドライン実行</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"appendix/5-command.html#ソースファイル先頭部分にある宣言\">ソースファイル先頭部分にある宣言</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"appendix/5-command.html#練習の解答\">練習の解答</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"appendix/5-matplotlib.html\">▲Matplotlibライブラリ</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"appendix/5-matplotlib.html#線グラフ\">線グラフ</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"appendix/5-matplotlib.html#練習\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"appendix/5-matplotlib.html#id4\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"appendix/5-matplotlib.html#散布図\">散布図</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"appendix/5-matplotlib.html#id6\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"appendix/5-matplotlib.html#棒グラフ\">棒グラフ</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"appendix/5-matplotlib.html#id8\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"appendix/5-matplotlib.html#ヒストグラム\">ヒストグラム</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"appendix/5-matplotlib.html#id10\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"appendix/5-matplotlib.html#ヒートマップ\">ヒートマップ</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"appendix/5-matplotlib.html#id12\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"appendix/5-matplotlib.html#グラフの画像ファイル出力\">グラフの画像ファイル出力</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"appendix/5-matplotlib.html#練習の解答\">練習の解答</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"appendix/5-re.html\">▲正規表現</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"appendix/5-re.html#正規表現の基本\">正規表現の基本</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"appendix/5-re.html#練習\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"appendix/5-re.html#id4\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"appendix/5-re.html#id5\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"appendix/5-re.html#id6\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"appendix/5-re.html#id7\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"appendix/5-re.html#文字クラス\">文字クラス</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"appendix/5-re.html#正規表現に関する基本的な関数\">正規表現に関する基本的な関数</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"appendix/5-re.html#id10\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"appendix/5-re.html#id11\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"appendix/5-re.html#その他の反復演算\">その他の反復演算</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"appendix/5-re.html#メタ文字\">メタ文字</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"appendix/5-re.html#id14\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"appendix/5-re.html#id15\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"appendix/5-re.html#id16\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"appendix/5-re.html#id17\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"appendix/5-re.html#正規表現のエスケープシーケンス\">正規表現のエスケープシーケンス</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"appendix/5-re.html#正規表現に関する関数とメソッド\">正規表現に関する関数とメソッド</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"appendix/5-re.html#id20\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"appendix/5-re.html#id21\">練習</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"appendix/5-re.html#練習の解答\">練習の解答</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"index_of_terms.html\">索引</a></li>\n</ul>\n</div>\n</section>\n\n\n          </div>\n          \n        </div>\n      </div>\n      <div class=\"sphinxsidebar\" role=\"navigation\" aria-label=\"Main\">\n        <div class=\"sphinxsidebarwrapper\">\n<h1 class=\"logo\"><a href=\"#\">Pythonプログラミング入門</a></h1>\n\n\n\n\n\n\n\n\n<p>\n  <a style=\"font-family: sans-serif; font-size: smaller; background: linear-gradient(to top, #353535 0%, #141414 100%); -webkit-font-smoothing: antialiased; font-weight: normal; text-shadow: rgb(0 0 0 / 40%) 0 -1px 0; padding: 2px 6px; color: #fff; text-decoration: none; border-radius: 4px; border: 1px solid #0d0d0d; box-shadow: inset 0 1px 1px 0 #8f8f8f;\" href=\"https://github.com/utokyo-ipp/utokyo-ipp.github.io\">View on GitHub</a>\n</p><p>\n  <a style=\"font-family: sans-serif; font-size: smaller; background: linear-gradient(to top, #ff1e00 0%, #de1e00 100%); -webkit-font-smoothing: antialiased; font-weight: normal; text-shadow: rgb(0 0 0 / 40%) 0 -1px 0; padding: 2px 6px; color: #fff; text-decoration: none; border-radius: 4px; border: 1px solid #0d0d0d; box-shadow: inset 0 1px 1px 0 #ff8e70;\" href=\"https://utokyo-ipp.github.io/IPP_textbook.pdf\">View PDF</a>\n</p><p>\n  <a style=\"border-bottom: none;\" href=\"https://colab.research.google.com/github/utokyo-ipp/utokyo-ipp.github.io/blob/master/colab/index.ipynb\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Google Colaboratory\"></a>\n</p><h3>Navigation</h3>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"1/1-0.html\">1-0. Colaboratory (Colab) の使い方</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"1/1-1.html\">1-1. 数値演算</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"1/1-2.html\">1-2. 変数と関数の基礎</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"1/1-3.html\">1-3. 論理・比較演算と条件分岐の基礎</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"1/1-4.html\">1-4. テストとデバッグ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"2/2-1.html\">2-1. 文字列 (string)</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"2/2-2.html\">2-2. リスト (list)</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"2/2-3.html\">2-3. 条件分岐</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"3/3-1.html\">3-1. 辞書 (dictionary)</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"3/3-2.html\">3-2. 繰り返し</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"3/3-3.html\">3-3. 関数</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"4/4-1.html\">4-1. ファイル入出力の基本</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"4/4-2.html\">4-2. イテラブルとイテレータ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"4/4-3.html\">4-3. ディレクトリと木構造</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"5/5-1.html\">5-1. モジュールの使い方</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"5/5-2.html\">5-2. モジュールの作り方</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"5/5-3.html\">5-3. NumPyライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"6/6-1.html\">6-1. 内包表記</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"6/6-2.html\">6-2. 高階関数</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"6/6-3.html\">6-3. クラス</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"7/7-1.html\">7-1. pandasライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"7/7-2.html\">7-2. scikit-learnライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"appendix/1-jupyter-notebook.html\">▲Jupyter Notebook の使い方</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"appendix/2-set.html\">▲セット (set)</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"appendix/3-recursion.html\">▲再帰</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"appendix/3-visualization.html\">▲簡単なデータの可視化</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"appendix/4-csv.html\">▲CSVファイルの入出力</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"appendix/5-bokeh.html\">▲Bokehライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"appendix/5-command.html\">▲Pythonスクリプトとコマンドライン実行</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"appendix/5-matplotlib.html\">▲Matplotlibライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"appendix/5-re.html\">▲正規表現</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"index_of_terms.html\">索引</a></li>\n</ul>\n\n<div class=\"relations\">\n<h3>Related Topics</h3>\n<ul>\n  <li><a href=\"#\">Documentation overview</a><ul>\n      <li>Next: <a href=\"1/1-0.html\" title=\"next chapter\">1-0. Colaboratory (Colab) の使い方</a></li>\n  </ul></li>\n</ul>\n</div>\n<search id=\"searchbox\" style=\"display: none\" role=\"search\">\n  <h3 id=\"searchlabel\">Quick search</h3>\n    <div class=\"searchformwrapper\">\n    <form class=\"search\" action=\"search.html\" method=\"get\">\n      <input type=\"text\" name=\"q\" aria-labelledby=\"searchlabel\" autocomplete=\"off\" autocorrect=\"off\" autocapitalize=\"off\" spellcheck=\"false\"/>\n      <input type=\"submit\" value=\"Go\" />\n    </form>\n    </div>\n</search>\n<script>document.getElementById('searchbox').style.display = \"block\"</script>\n\n\n\n\n\n\n\n\n        </div>\n      </div>\n      <div class=\"clearer\"></div>\n    </div>\n    <div class=\"footer\">\n      &#169;2020–2024, 東京大学 数理・情報教育研究センター (CC BY-NC-ND 4.0).\n      \n      |\n      Powered by <a href=\"https://www.sphinx-doc.org/\">Sphinx 8.0.2</a>\n      &amp; <a href=\"https://alabaster.readthedocs.io\">Alabaster 1.0.0</a>\n      \n    </div>\n\n    \n\n    \n    <script>\n\n      var _gaq = _gaq || [];\n      _gaq.push(['_setAccount', 'G-8M0RXGPPSR']);\n      _gaq.push(['_setDomainName', 'none']);\n      _gaq.push(['_setAllowLinker', true]);\n      _gaq.push(['_trackPageview']);\n\n      (function() {\n        var ga = document.createElement('script'); ga.async = true;\n        ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'https://www') + '.google-analytics.com/ga.js';\n        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);\n      })();\n\n    </script>\n    \n  </body>\n</html>"
  },
  {
    "path": "docs/index_of_terms.html",
    "content": "<!DOCTYPE html>\n\n<html lang=\"jp\" data-content_root=\"./\">\n  <head>\n    <meta charset=\"utf-8\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" /><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n\n    <!-- Google tag (gtag.js) -->\n    <script async src=\"https://www.googletagmanager.com/gtag/js?id=G-8M0RXGPPSR\"></script>\n    <script>\n        window.dataLayer = window.dataLayer || [];\n        function gtag(){dataLayer.push(arguments);}\n        gtag('js', new Date());\n        gtag('config', 'G-8M0RXGPPSR');\n    </script>\n    \n    <title>索引 &#8212; Pythonプログラミング入門  documentation</title>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"_static/pygments.css?v=d1102ebc\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"_static/basic.css?v=c058f7c8\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"_static/alabaster.css?v=27fed22d\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"_static/custom.css?v=1a1aa8dd\" />\n    <script src=\"_static/documentation_options.js?v=3ff7d7a7\"></script>\n    <script src=\"_static/doctools.js?v=9a2dae69\"></script>\n    <script src=\"_static/sphinx_highlight.js?v=dc90522c\"></script>\n    <script crossorigin=\"anonymous\" integrity=\"sha256-Ae2Vz/4ePdIu6ZyI/5ZGsYnb+m0JlOmKPjt6XZ9JJkA=\" src=\"https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.4/require.min.js\"></script>\n    <script>window.MathJax = {\"tex\": {\"inlineMath\": [[\"$\", \"$\"], [\"\\\\(\", \"\\\\)\"]], \"processEscapes\": true}, \"options\": {\"ignoreHtmlClass\": \"tex2jax_ignore|mathjax_ignore|document\", \"processHtmlClass\": \"tex2jax_process|mathjax_process|math|output_area\"}}</script>\n    <script defer=\"defer\" src=\"https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js\"></script>\n    <link rel=\"index\" title=\"Index\" href=\"genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"search.html\" />\n    <link rel=\"prev\" title=\"▲正規表現\" href=\"appendix/5-re.html\" />\n   \n  <link rel=\"stylesheet\" href=\"_static/custom.css\" type=\"text/css\" />\n  \n\n  \n  \n\n  </head><body>\n  \n\n    <div class=\"document\">\n      <div class=\"documentwrapper\">\n        <div class=\"bodywrapper\">\n          \n\n          <div class=\"body\" role=\"main\">\n            \n  <section id=\"索引\">\n<h1>索引<a class=\"headerlink\" href=\"#索引\" title=\"Link to this heading\">¶</a></h1>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">!=</span></code> <a class=\"reference internal\" href=\"1/1-3.html#様々な条件\"><span class=\"std std-ref\">1/1-3#様々な条件</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">#</span></code> <a class=\"reference internal\" href=\"1/1-1.html#コメント\"><span class=\"std std-ref\">1/1-1#コメント</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">%</span></code> <a class=\"reference internal\" href=\"1/1-1.html#簡単な算術計算\"><span class=\"std std-ref\">1/1-1#簡単な算術計算</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">&gt;</span></code> <a class=\"reference internal\" href=\"1/1-3.html#様々な条件\"><span class=\"std std-ref\">1/1-3#様々な条件</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">&gt;=</span></code> <a class=\"reference internal\" href=\"1/1-3.html#様々な条件\"><span class=\"std std-ref\">1/1-3#様々な条件</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;</span></code> <a class=\"reference internal\" href=\"1/1-3.html#様々な条件\"><span class=\"std std-ref\">1/1-3#様々な条件</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;=</span></code> <a class=\"reference internal\" href=\"1/1-3.html#様々な条件\"><span class=\"std std-ref\">1/1-3#様々な条件</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">*</span></code> <a class=\"reference internal\" href=\"1/1-1.html#簡単な算術計算\"><span class=\"std std-ref\">1/1-1#簡単な算術計算</span></a>, <a class=\"reference internal\" href=\"3/3-3.html#▲可変長引数\"><span class=\"std std-ref\">3/3-3#▲可変長引数</span></a>, <a class=\"reference internal\" href=\"3/3-3.html#▲可変長引数\"><span class=\"std std-ref\">3/3-3#▲可変長引数</span></a>, <a class=\"reference internal\" href=\"2/2-1.html#文字列の連結\"><span class=\"std std-ref\">2/2-1#文字列の連結</span></a>, <a class=\"reference internal\" href=\"2/2-2.html#リストと演算子\"><span class=\"std std-ref\">2/2-2#リストと演算子</span></a>, <a class=\"reference internal\" href=\"5/5-1.html#from\"><span class=\"std std-ref\">5/5-1#from</span></a>, <a class=\"reference internal\" href=\"5/5-2.html#自作モジュールの使い方\"><span class=\"std std-ref\">5/5-2#自作モジュールの使い方</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">**</span></code> <a class=\"reference internal\" href=\"1/1-1.html#簡単な算術計算\"><span class=\"std std-ref\">1/1-1#簡単な算術計算</span></a>, <a class=\"reference internal\" href=\"3/3-3.html#▲辞書型の可変長引数\"><span class=\"std std-ref\">3/3-3#▲辞書型の可変長引数</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">+</span></code> <a class=\"reference internal\" href=\"1/1-1.html#簡単な算術計算\"><span class=\"std std-ref\">1/1-1#簡単な算術計算</span></a>, <a class=\"reference internal\" href=\"1/1-1.html#単項の-+-と--\"><span class=\"std std-ref\">1/1-1#単項の + と -</span></a>, <a class=\"reference internal\" href=\"2/2-1.html#文字列の連結\"><span class=\"std std-ref\">2/2-1#文字列の連結</span></a>, <a class=\"reference internal\" href=\"2/2-2.html#リストと演算子\"><span class=\"std std-ref\">2/2-2#リストと演算子</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">+=</span></code> <a class=\"reference internal\" href=\"1/1-2.html#累積代入文\"><span class=\"std std-ref\">1/1-2#累積代入文</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">-</span></code> <a class=\"reference internal\" href=\"1/1-1.html#簡単な算術計算\"><span class=\"std std-ref\">1/1-1#簡単な算術計算</span></a>, <a class=\"reference internal\" href=\"1/1-1.html#単項の-+-と--\"><span class=\"std std-ref\">1/1-1#単項の + と -</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">-=</span></code> <a class=\"reference internal\" href=\"1/1-2.html#累積代入文\"><span class=\"std std-ref\">1/1-2#累積代入文</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">.</span></code> <a class=\"reference internal\" href=\"appendix/5-re.html#メタ文字\"><span class=\"std std-ref\">appendix/5-re#メタ文字</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">/</span></code> <a class=\"reference internal\" href=\"1/1-1.html#簡単な算術計算\"><span class=\"std std-ref\">1/1-1#簡単な算術計算</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">//</span></code> <a class=\"reference internal\" href=\"1/1-1.html#簡単な算術計算\"><span class=\"std std-ref\">1/1-1#簡単な算術計算</span></a></p></li>\n<li><p>2項演算子 <a class=\"reference internal\" href=\"1/1-1.html#単項の-+-と--\"><span class=\"std std-ref\">1/1-1#単項の + と -</span></a></p></li>\n<li><p>3項演算子 <a class=\"reference internal\" href=\"2/2-3.html#▲3項演算子（条件式）\"><span class=\"std std-ref\">2/2-3#▲3項演算子（条件式）</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">=</span></code> <a class=\"reference internal\" href=\"1/1-2.html#変数\"><span class=\"std std-ref\">1/1-2#変数</span></a>, <a class=\"reference internal\" href=\"1/1-2.html#代入文\"><span class=\"std std-ref\">1/1-2#代入文</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">==</span></code> <a class=\"reference internal\" href=\"1/1-3.html#様々な条件\"><span class=\"std std-ref\">1/1-3#様々な条件</span></a></p></li>\n<li><p>CSV <a class=\"reference internal\" href=\"appendix/4-csv.html#CSV形式とは\"><span class=\"std std-ref\">appendix/4-csv#CSV形式とは</span></a></p></li>\n<li><p>CSVファイル <a class=\"reference internal\" href=\"7/7-1.html#CSVファイルからのデータフレームの作成\"><span class=\"std std-ref\">7/7-1#CSVファイルからのデータフレームの作成</span></a></p></li>\n<li><p>CSVライター <a class=\"reference internal\" href=\"appendix/4-csv.html#CSVファイルの書き込み\"><span class=\"std std-ref\">appendix/4-csv#CSVファイルの書き込み</span></a></p></li>\n<li><p>CSVリーダ <a class=\"reference internal\" href=\"appendix/4-csv.html#CSVファイルの読み込み\"><span class=\"std std-ref\">appendix/4-csv#CSVファイルの読み込み</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">DataFrame</span></code> <a class=\"reference internal\" href=\"7/7-1.html#シリーズとデータフレーム\"><span class=\"std std-ref\">7/7-1#シリーズとデータフレーム</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code> <a class=\"reference internal\" href=\"1/1-3.html#真理値を返す関数\"><span class=\"std std-ref\">1/1-3#真理値を返す関数</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">KMeans</span></code> <a class=\"reference internal\" href=\"7/7-2.html#教師なし学習・クラスタリングの例\"><span class=\"std std-ref\">7/7-2#教師なし学習・クラスタリングの例</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">LinearRegression</span></code> <a class=\"reference internal\" href=\"7/7-2.html#教師あり学習・回帰の例\"><span class=\"std std-ref\">7/7-2#教師あり学習・回帰の例</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">LogisticRegression</span></code> <a class=\"reference internal\" href=\"7/7-2.html#教師あり学習・分類の例\"><span class=\"std std-ref\">7/7-2#教師あり学習・分類の例</span></a></p></li>\n<li><p>Matplotlib <a class=\"reference internal\" href=\"appendix/5-matplotlib.html#▲Matplotlibライブラリ\"><span class=\"std std-ref\">appendix/5-matplotlib#▲Matplotlibライブラリ</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code> <a class=\"reference internal\" href=\"1/1-2.html#関数の定義と返値\"><span class=\"std std-ref\">1/1-2#関数の定義と返値</span></a>, <a class=\"reference internal\" href=\"1/1-3.html#None\"><span class=\"std std-ref\">1/1-3#None</span></a>, <a class=\"reference internal\" href=\"3/3-3.html#返値\"><span class=\"std std-ref\">3/3-3#返値</span></a></p></li>\n<li><p>NumPy <a class=\"reference internal\" href=\"appendix/5-matplotlib.html#線グラフ\"><span class=\"std std-ref\">appendix/5-matplotlib#線グラフ</span></a>, <a class=\"reference internal\" href=\"5/5-3.html#5-3.-NumPyライブラリ\"><span class=\"std std-ref\">5/5-3#5-3. NumPyライブラリ</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">PCA</span></code> <a class=\"reference internal\" href=\"7/7-2.html#教師なし学習・次元削減の例\"><span class=\"std std-ref\">7/7-2#教師なし学習・次元削減の例</span></a></p></li>\n<li><p>PEP8 <a class=\"reference internal\" href=\"1/1-4.html#コーディングスタイル\"><span class=\"std std-ref\">1/1-4#コーディングスタイル</span></a></p></li>\n<li><p>Pythonスクリプト <a class=\"reference internal\" href=\"appendix/5-command.html#▲Pythonスクリプトとコマンドライン実行\"><span class=\"std std-ref\">appendix/5-command#▲Pythonスクリプトとコマンドライン実行</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">Series</span></code> <a class=\"reference internal\" href=\"7/7-1.html#シリーズとデータフレーム\"><span class=\"std std-ref\">7/7-1#シリーズとデータフレーム</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">StopIteration</span></code> <a class=\"reference internal\" href=\"6/6-3.html#特殊メソッド\"><span class=\"std std-ref\">6/6-3#特殊メソッド</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> <a class=\"reference internal\" href=\"1/1-3.html#真理値を返す関数\"><span class=\"std std-ref\">1/1-3#真理値を返す関数</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">\\</span></code> <a class=\"reference internal\" href=\"2/2-3.html#▲複数行にまたがる条件式\"><span class=\"std std-ref\">2/2-3#▲複数行にまたがる条件式</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">\\D</span></code> <a class=\"reference internal\" href=\"appendix/5-re.html#メタ文字\"><span class=\"std std-ref\">appendix/5-re#メタ文字</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">\\S</span></code> <a class=\"reference internal\" href=\"appendix/5-re.html#メタ文字\"><span class=\"std std-ref\">appendix/5-re#メタ文字</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">\\W</span></code> <a class=\"reference internal\" href=\"appendix/5-re.html#メタ文字\"><span class=\"std std-ref\">appendix/5-re#メタ文字</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">\\d</span></code> <a class=\"reference internal\" href=\"appendix/5-re.html#メタ文字\"><span class=\"std std-ref\">appendix/5-re#メタ文字</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">\\s</span></code> <a class=\"reference internal\" href=\"appendix/5-re.html#メタ文字\"><span class=\"std std-ref\">appendix/5-re#メタ文字</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">\\t</span></code> <a class=\"reference internal\" href=\"appendix/5-re.html#メタ文字\"><span class=\"std std-ref\">appendix/5-re#メタ文字</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">\\w</span></code> <a class=\"reference internal\" href=\"appendix/5-re.html#メタ文字\"><span class=\"std std-ref\">appendix/5-re#メタ文字</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">__enter__</span></code> <a class=\"reference internal\" href=\"6/6-3.html#▲with文への対応\"><span class=\"std std-ref\">6/6-3#▲with文への対応</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">__exit__</span></code> <a class=\"reference internal\" href=\"6/6-3.html#▲with文への対応\"><span class=\"std std-ref\">6/6-3#▲with文への対応</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">__init__</span></code> <a class=\"reference internal\" href=\"6/6-3.html#初期化と属性\"><span class=\"std std-ref\">6/6-3#初期化と属性</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">__iter__</span></code> <a class=\"reference internal\" href=\"6/6-3.html#特殊メソッド\"><span class=\"std std-ref\">6/6-3#特殊メソッド</span></a>, <a class=\"reference internal\" href=\"4/4-2.html#▲イテラブルとイテレータの定義\"><span class=\"std std-ref\">4/4-2#▲イテラブルとイテレータの定義</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">__name__</span></code> <a class=\"reference internal\" href=\"appendix/5-command.html#モジュールのコマンドライン実行\"><span class=\"std std-ref\">appendix/5-command#モジュールのコマンドライン実行</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">__next__</span></code> <a class=\"reference internal\" href=\"6/6-3.html#特殊メソッド\"><span class=\"std std-ref\">6/6-3#特殊メソッド</span></a>, <a class=\"reference internal\" href=\"4/4-2.html#▲イテラブルとイテレータの定義\"><span class=\"std std-ref\">4/4-2#▲イテラブルとイテレータの定義</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">a*</span></code> <a class=\"reference internal\" href=\"appendix/5-re.html#正規表現の基本\"><span class=\"std std-ref\">appendix/5-re#正規表現の基本</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">a+</span></code> <a class=\"reference internal\" href=\"appendix/5-re.html#その他の反復演算\"><span class=\"std std-ref\">appendix/5-re#その他の反復演算</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">a?</span></code> <a class=\"reference internal\" href=\"appendix/5-re.html#その他の反復演算\"><span class=\"std std-ref\">appendix/5-re#その他の反復演算</span></a></p></li>\n<li><p>add <a class=\"reference internal\" href=\"appendix/2-set.html#add\"><span class=\"std std-ref\">appendix/2-set#add</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">and</span></code> <a class=\"reference internal\" href=\"1/1-3.html#様々な条件\"><span class=\"std std-ref\">1/1-3#様々な条件</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">append</span></code> <a class=\"reference internal\" href=\"2/2-2.html#リストに要素を追加する\"><span class=\"std std-ref\">2/2-2#リストに要素を追加する</span></a></p></li>\n<li><p>argument <a class=\"reference internal\" href=\"3/3-3.html#引数\"><span class=\"std std-ref\">3/3-3#引数</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">as</span></code> <a class=\"reference internal\" href=\"4/4-1.html#ファイルに対するwith文\"><span class=\"std std-ref\">4/4-1#ファイルに対するwith文</span></a>, <a class=\"reference internal\" href=\"5/5-1.html#as\"><span class=\"std std-ref\">5/5-1#as</span></a>, <a class=\"reference internal\" href=\"5/5-2.html#自作モジュールの使い方\"><span class=\"std std-ref\">5/5-2#自作モジュールの使い方</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">ascending</span></code> <a class=\"reference internal\" href=\"7/7-1.html#データの並び替え\"><span class=\"std std-ref\">7/7-1#データの並び替え</span></a></p></li>\n<li><p>assert文 <a class=\"reference internal\" href=\"1/1-4.html#assert文\"><span class=\"std std-ref\">1/1-4#assert文</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">assign</span></code> <a class=\"reference internal\" href=\"7/7-1.html#列の追加と削除\"><span class=\"std std-ref\">7/7-1#列の追加と削除</span></a></p></li>\n<li><p>assignment <a class=\"reference internal\" href=\"1/1-2.html#代入文\"><span class=\"std std-ref\">1/1-2#代入文</span></a></p></li>\n<li><p>assignment statement <a class=\"reference internal\" href=\"1/1-2.html#代入文\"><span class=\"std std-ref\">1/1-2#代入文</span></a></p></li>\n<li><p>augmented assignment statement <a class=\"reference internal\" href=\"1/1-2.html#累積代入文\"><span class=\"std std-ref\">1/1-2#累積代入文</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">axis</span></code> <a class=\"reference internal\" href=\"7/7-1.html#列の追加と削除\"><span class=\"std std-ref\">7/7-1#列の追加と削除</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">a{x,y}</span></code> <a class=\"reference internal\" href=\"appendix/5-re.html#その他の反復演算\"><span class=\"std std-ref\">appendix/5-re#その他の反復演算</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">bar</span></code> <a class=\"reference internal\" href=\"appendix/5-matplotlib.html#棒グラフ\"><span class=\"std std-ref\">appendix/5-matplotlib#棒グラフ</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">bokeh</span></code> <a class=\"reference internal\" href=\"appendix/5-bokeh.html#▲Bokehライブラリ\"><span class=\"std std-ref\">appendix/5-bokeh#▲Bokehライブラリ</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">bokeh.models.ColumnDataSource</span></code> <a class=\"reference internal\" href=\"appendix/5-bokeh.html#ヒートマップ\"><span class=\"std std-ref\">appendix/5-bokeh#ヒートマップ</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">bokeh.models.LinearColorMapper</span></code> <a class=\"reference internal\" href=\"appendix/5-bokeh.html#ヒートマップ\"><span class=\"std std-ref\">appendix/5-bokeh#ヒートマップ</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">bokeh.plotting</span></code> <a class=\"reference internal\" href=\"appendix/5-bokeh.html#線グラフ\"><span class=\"std std-ref\">appendix/5-bokeh#線グラフ</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">bokeh.plotting.figure</span></code> <a class=\"reference internal\" href=\"appendix/5-bokeh.html#線グラフ\"><span class=\"std std-ref\">appendix/5-bokeh#線グラフ</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">bokeh.plotting.output_file</span></code> <a class=\"reference internal\" href=\"appendix/5-bokeh.html#グラフのファイル出力\"><span class=\"std std-ref\">appendix/5-bokeh#グラフのファイル出力</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">bokeh.plotting.output_notebook</span></code> <a class=\"reference internal\" href=\"appendix/5-bokeh.html#線グラフ\"><span class=\"std std-ref\">appendix/5-bokeh#線グラフ</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">bokeh.plotting.reset_output</span></code> <a class=\"reference internal\" href=\"appendix/5-bokeh.html#グラフのファイル出力\"><span class=\"std std-ref\">appendix/5-bokeh#グラフのファイル出力</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">bokeh.plotting.show</span></code> <a class=\"reference internal\" href=\"appendix/5-bokeh.html#線グラフ\"><span class=\"std std-ref\">appendix/5-bokeh#線グラフ</span></a></p></li>\n<li><p>break文 <a class=\"reference internal\" href=\"3/3-2.html#break文\"><span class=\"std std-ref\">3/3-2#break文</span></a>, <a class=\"reference internal\" href=\"3/3-2.html#break文\"><span class=\"std std-ref\">3/3-2#break文</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">capitalize</span></code> <a class=\"reference internal\" href=\"2/2-1.html#大文字・小文字\"><span class=\"std std-ref\">2/2-1#大文字・小文字</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">chr</span></code> <a class=\"reference internal\" href=\"3/3-2.html#for文による繰り返し\"><span class=\"std std-ref\">3/3-2#for文による繰り返し</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">circle</span></code> <a class=\"reference internal\" href=\"appendix/5-bokeh.html#線グラフ\"><span class=\"std std-ref\">appendix/5-bokeh#線グラフ</span></a></p></li>\n<li><p>clear <a class=\"reference internal\" href=\"appendix/2-set.html#clear\"><span class=\"std std-ref\">appendix/2-set#clear</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">clear</span></code> <a class=\"reference internal\" href=\"3/3-1.html#▲全てのキーと値の削除\"><span class=\"std std-ref\">3/3-1#▲全てのキーと値の削除</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">close</span></code> <a class=\"reference internal\" href=\"4/4-1.html#ファイルのクローズ\"><span class=\"std std-ref\">4/4-1#ファイルのクローズ</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">complex</span></code> <a class=\"reference internal\" href=\"appendix/4-csv.html#CSVファイルの読み込み\"><span class=\"std std-ref\">appendix/4-csv#CSVファイルの読み込み</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">concat</span></code> <a class=\"reference internal\" href=\"7/7-1.html#行の追加と削除\"><span class=\"std std-ref\">7/7-1#行の追加と削除</span></a>, <a class=\"reference internal\" href=\"7/7-1.html#▲データの連結\"><span class=\"std std-ref\">7/7-1#▲データの連結</span></a></p></li>\n<li><p>continue文 <a class=\"reference internal\" href=\"3/3-2.html#continue文\"><span class=\"std std-ref\">3/3-2#continue文</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">copy</span></code> <a class=\"reference internal\" href=\"3/3-1.html#▲辞書を複製する\"><span class=\"std std-ref\">3/3-1#▲辞書を複製する</span></a>, <a class=\"reference internal\" href=\"2/2-2.html#▲-copy\"><span class=\"std std-ref\">2/2-2#▲ copy</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">count</span></code> <a class=\"reference internal\" href=\"2/2-1.html#数え上げ\"><span class=\"std std-ref\">2/2-1#数え上げ</span></a>, <a class=\"reference internal\" href=\"2/2-2.html#指定した要素のインデックス取得と数えあげ\"><span class=\"std std-ref\">2/2-2#指定した要素のインデックス取得と数えあげ</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">cross</span></code> <a class=\"reference internal\" href=\"appendix/5-bokeh.html#線グラフ\"><span class=\"std std-ref\">appendix/5-bokeh#線グラフ</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">csv</span></code> <a class=\"reference internal\" href=\"appendix/4-csv.html#CSVファイルの読み込み\"><span class=\"std std-ref\">appendix/4-csv#CSVファイルの読み込み</span></a>, <a class=\"reference internal\" href=\"appendix/4-csv.html#CSVファイルの書き込み\"><span class=\"std std-ref\">appendix/4-csv#CSVファイルの書き込み</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">csv.reader</span></code> <a class=\"reference internal\" href=\"appendix/4-csv.html#CSVファイルの読み込み\"><span class=\"std std-ref\">appendix/4-csv#CSVファイルの読み込み</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">csv.writer</span></code> <a class=\"reference internal\" href=\"appendix/4-csv.html#CSVファイルの書き込み\"><span class=\"std std-ref\">appendix/4-csv#CSVファイルの書き込み</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">def</span></code> <a class=\"reference internal\" href=\"1/1-2.html#関数の定義と返値\"><span class=\"std std-ref\">1/1-2#関数の定義と返値</span></a>, <a class=\"reference internal\" href=\"3/3-3.html#関数の定義\"><span class=\"std std-ref\">3/3-3#関数の定義</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">del</span></code> <a class=\"reference internal\" href=\"7/7-1.html#列の追加と削除\"><span class=\"std std-ref\">7/7-1#列の追加と削除</span></a>, <a class=\"reference internal\" href=\"3/3-1.html#3-1.-辞書-(dictionary)\"><span class=\"std std-ref\">3/3-1#3-1. 辞書 (dictionary)</span></a>, <a class=\"reference internal\" href=\"2/2-2.html#▲リスト要素を削除する\"><span class=\"std std-ref\">2/2-2#▲リスト要素を削除する</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">describe</span></code> <a class=\"reference internal\" href=\"7/7-1.html#データの統計量\"><span class=\"std std-ref\">7/7-1#データの統計量</span></a></p></li>\n<li><p>difference <a class=\"reference internal\" href=\"appendix/2-set.html#union,-intersection,-difference\"><span class=\"std std-ref\">appendix/2-set#union, intersection, difference</span></a></p></li>\n<li><p>discard <a class=\"reference internal\" href=\"appendix/2-set.html#discard\"><span class=\"std std-ref\">appendix/2-set#discard</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">drop</span></code> <a class=\"reference internal\" href=\"7/7-1.html#列の追加と削除\"><span class=\"std std-ref\">7/7-1#列の追加と削除</span></a>, <a class=\"reference internal\" href=\"7/7-1.html#行の追加と削除\"><span class=\"std std-ref\">7/7-1#行の追加と削除</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">elif</span></code> <a class=\"reference internal\" href=\"2/2-3.html#if-...-elif-...-else-による条件分岐\"><span class=\"std std-ref\">2/2-3#if … elif … else による条件分岐</span></a>, <a class=\"reference internal\" href=\"2/2-3.html#if-...-elif-...-else-による条件分岐\"><span class=\"std std-ref\">2/2-3#if … elif … else による条件分岐</span></a>, <a class=\"reference internal\" href=\"2/2-3.html#if-...-elif-...-else-における条件の評価\"><span class=\"std std-ref\">2/2-3#if … elif … else における条件の評価</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">else</span></code> <a class=\"reference internal\" href=\"1/1-3.html#if文による条件分岐\"><span class=\"std std-ref\">1/1-3#if文による条件分岐</span></a>, <a class=\"reference internal\" href=\"3/3-2.html#▲for文とwhile文における-else\"><span class=\"std std-ref\">3/3-2#▲for文とwhile文における else</span></a>, <a class=\"reference internal\" href=\"2/2-3.html#if-...-else-による条件分岐\"><span class=\"std std-ref\">2/2-3#if … else による条件分岐</span></a>, <a class=\"reference internal\" href=\"2/2-3.html#if-...-elif-...-else-による条件分岐\"><span class=\"std std-ref\">2/2-3#if … elif … else による条件分岐</span></a>, <a class=\"reference internal\" href=\"2/2-3.html#if-...-elif-...-else-における条件の評価\"><span class=\"std std-ref\">2/2-3#if … elif … else における条件の評価</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">encoding</span></code> <a class=\"reference internal\" href=\"appendix/4-csv.html#東京の7月の気温\"><span class=\"std std-ref\">appendix/4-csv#東京の7月の気温</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">enumerate</span></code> <a class=\"reference internal\" href=\"4/4-2.html#イテレータを返す-enumerate\"><span class=\"std std-ref\">4/4-2#イテレータを返す enumerate</span></a>, <a class=\"reference internal\" href=\"3/3-2.html#enumerate\"><span class=\"std std-ref\">3/3-2#enumerate</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">extend</span></code> <a class=\"reference internal\" href=\"2/2-2.html#▲リストにリストの要素を追加する\"><span class=\"std std-ref\">2/2-2#▲リストにリストの要素を追加する</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">filter</span></code> <a class=\"reference internal\" href=\"6/6-2.html#filter\"><span class=\"std std-ref\">6/6-2#filter</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">find</span></code> <a class=\"reference internal\" href=\"2/2-1.html#検索\"><span class=\"std std-ref\">2/2-1#検索</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">findall</span></code> <a class=\"reference internal\" href=\"appendix/5-re.html#findall\"><span class=\"std std-ref\">appendix/5-re#findall</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">finditer</span></code> <a class=\"reference internal\" href=\"appendix/5-re.html#finditer\"><span class=\"std std-ref\">appendix/5-re#finditer</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">fit</span></code> <a class=\"reference internal\" href=\"7/7-2.html#教師あり学習・分類の例\"><span class=\"std std-ref\">7/7-2#教師あり学習・分類の例</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">flatten</span></code> <a class=\"reference internal\" href=\"5/5-3.html#多次元配列\"><span class=\"std std-ref\">5/5-3#多次元配列</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">float</span></code> <a class=\"reference internal\" href=\"appendix/4-csv.html#CSVファイルの読み込み\"><span class=\"std std-ref\">appendix/4-csv#CSVファイルの読み込み</span></a>, <a class=\"reference internal\" href=\"1/1-1.html#整数と実数の間の変換\"><span class=\"std std-ref\">1/1-1#整数と実数の間の変換</span></a>, <a class=\"reference internal\" href=\"2/2-1.html#2-1.-文字列-(string)\"><span class=\"std std-ref\">2/2-1#2-1. 文字列 (string)</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">for</span></code> <a class=\"reference internal\" href=\"3/3-2.html#for文による繰り返し\"><span class=\"std std-ref\">3/3-2#for文による繰り返し</span></a></p></li>\n<li><p>for文 <a class=\"reference internal\" href=\"3/3-2.html#for文による繰り返し\"><span class=\"std std-ref\">3/3-2#for文による繰り返し</span></a>, <a class=\"reference internal\" href=\"2/2-2.html#for文による繰り返しとリスト・タプル\"><span class=\"std std-ref\">2/2-2#for文による繰り返しとリスト・タプル</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">from</span></code> <a class=\"reference internal\" href=\"5/5-1.html#from\"><span class=\"std std-ref\">5/5-1#from</span></a>, <a class=\"reference internal\" href=\"5/5-2.html#自作モジュールの使い方\"><span class=\"std std-ref\">5/5-2#自作モジュールの使い方</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">get</span></code> <a class=\"reference internal\" href=\"3/3-1.html#キーを指定して値を得るメソッド\"><span class=\"std std-ref\">3/3-1#キーを指定して値を得るメソッド</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">global</span></code> <a class=\"reference internal\" href=\"3/3-3.html#▲-global-宣言\"><span class=\"std std-ref\">3/3-3#▲ global 宣言</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">grid</span></code> <a class=\"reference internal\" href=\"appendix/5-matplotlib.html#線グラフ\"><span class=\"std std-ref\">appendix/5-matplotlib#線グラフ</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">group</span></code> <a class=\"reference internal\" href=\"appendix/5-re.html#group\"><span class=\"std std-ref\">appendix/5-re#group</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">groupby</span></code> <a class=\"reference internal\" href=\"7/7-1.html#▲データのグループ化\"><span class=\"std std-ref\">7/7-1#▲データのグループ化</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">head</span></code> <a class=\"reference internal\" href=\"7/7-1.html#CSVファイルからのデータフレームの作成\"><span class=\"std std-ref\">7/7-1#CSVファイルからのデータフレームの作成</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">hist</span></code> <a class=\"reference internal\" href=\"appendix/5-matplotlib.html#ヒストグラム\"><span class=\"std std-ref\">appendix/5-matplotlib#ヒストグラム</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">if</span></code> <a class=\"reference internal\" href=\"1/1-3.html#if文による条件分岐\"><span class=\"std std-ref\">1/1-3#if文による条件分岐</span></a>, <a class=\"reference internal\" href=\"2/2-3.html#2-3.-条件分岐\"><span class=\"std std-ref\">2/2-3#2-3. 条件分岐</span></a>, <a class=\"reference internal\" href=\"2/2-3.html#if-...-else-による条件分岐\"><span class=\"std std-ref\">2/2-3#if … else による条件分岐</span></a>, <a class=\"reference internal\" href=\"2/2-3.html#if-...-elif-...-else-による条件分岐\"><span class=\"std std-ref\">2/2-3#if … elif … else による条件分岐</span></a>, <a class=\"reference internal\" href=\"2/2-3.html#if-...-elif-...-else-における条件の評価\"><span class=\"std std-ref\">2/2-3#if … elif … else における条件の評価</span></a></p></li>\n<li><p>if文 <a class=\"reference internal\" href=\"1/1-3.html#if文による条件分岐\"><span class=\"std std-ref\">1/1-3#if文による条件分岐</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">iloc</span></code> <a class=\"reference internal\" href=\"7/7-1.html#iloc-と-loc\"><span class=\"std std-ref\">7/7-1#iloc と loc</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">import</span></code> <a class=\"reference internal\" href=\"1/1-1.html#数学関数（モジュールのインポート）\"><span class=\"std std-ref\">1/1-1#数学関数（モジュールのインポート）</span></a>, <a class=\"reference internal\" href=\"5/5-1.html#モジュールのインポート\"><span class=\"std std-ref\">5/5-1#モジュールのインポート</span></a>, <a class=\"reference internal\" href=\"5/5-2.html#自作モジュールの使い方\"><span class=\"std std-ref\">5/5-2#自作モジュールの使い方</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">in</span></code> <a class=\"reference internal\" href=\"3/3-1.html#3-1.-辞書-(dictionary)\"><span class=\"std std-ref\">3/3-1#3-1. 辞書 (dictionary)</span></a>, <a class=\"reference internal\" href=\"3/3-2.html#for文による繰り返し\"><span class=\"std std-ref\">3/3-2#for文による繰り返し</span></a>, <a class=\"reference internal\" href=\"3/3-2.html#in\"><span class=\"std std-ref\">3/3-2#in</span></a>, <a class=\"reference internal\" href=\"3/3-2.html#in\"><span class=\"std std-ref\">3/3-2#in</span></a>, <a class=\"reference internal\" href=\"2/2-1.html#文字列の検索\"><span class=\"std std-ref\">2/2-1#文字列の検索</span></a>, <a class=\"reference internal\" href=\"2/2-2.html#リストと演算子\"><span class=\"std std-ref\">2/2-2#リストと演算子</span></a></p></li>\n<li><p>in-place <a class=\"reference internal\" href=\"2/2-2.html#破壊的（インプレース）な操作と非破壊的な生成\"><span class=\"std std-ref\">2/2-2#破壊的（インプレース）な操作と非破壊的な生成</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">index</span></code> <a class=\"reference internal\" href=\"7/7-1.html#CSVファイルからのデータフレームの作成\"><span class=\"std std-ref\">7/7-1#CSVファイルからのデータフレームの作成</span></a>, <a class=\"reference internal\" href=\"2/2-1.html#検索\"><span class=\"std std-ref\">2/2-1#検索</span></a>, <a class=\"reference internal\" href=\"2/2-2.html#指定した要素のインデックス取得と数えあげ\"><span class=\"std std-ref\">2/2-2#指定した要素のインデックス取得と数えあげ</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">inplace</span></code> <a class=\"reference internal\" href=\"7/7-1.html#データの並び替え\"><span class=\"std std-ref\">7/7-1#データの並び替え</span></a></p></li>\n<li><p>insert <a class=\"reference internal\" href=\"2/2-2.html#▲リストに要素を挿入する\"><span class=\"std std-ref\">2/2-2#▲リストに要素を挿入する</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">int</span></code> <a class=\"reference internal\" href=\"appendix/4-csv.html#CSVファイルの読み込み\"><span class=\"std std-ref\">appendix/4-csv#CSVファイルの読み込み</span></a>, <a class=\"reference internal\" href=\"6/6-1.html#練習\"><span class=\"std std-ref\">6/6-1#練習</span></a>, <a class=\"reference internal\" href=\"1/1-1.html#整数と実数の間の変換\"><span class=\"std std-ref\">1/1-1#整数と実数の間の変換</span></a>, <a class=\"reference internal\" href=\"2/2-1.html#2-1.-文字列-(string)\"><span class=\"std std-ref\">2/2-1#2-1. 文字列 (string)</span></a></p></li>\n<li><p>intersection <a class=\"reference internal\" href=\"appendix/2-set.html#union,-intersection,-difference\"><span class=\"std std-ref\">appendix/2-set#union, intersection, difference</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">is</span></code> <a class=\"reference internal\" href=\"4/4-2.html#イテレータは特殊なイテラブル\"><span class=\"std std-ref\">4/4-2#イテレータは特殊なイテラブル</span></a>, <a class=\"reference internal\" href=\"2/2-2.html#▲オブジェクトの等価性と同一性\"><span class=\"std std-ref\">2/2-2#▲オブジェクトの等価性と同一性</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">is</span> <span class=\"pre\">not</span></code> <a class=\"reference internal\" href=\"2/2-2.html#▲オブジェクトの等価性と同一性\"><span class=\"std std-ref\">2/2-2#▲オブジェクトの等価性と同一性</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">items</span></code> <a class=\"reference internal\" href=\"3/3-1.html#キーと値の一覧を得る\"><span class=\"std std-ref\">3/3-1#キーと値の一覧を得る</span></a>, <a class=\"reference internal\" href=\"3/3-2.html#for文による繰り返しと辞書\"><span class=\"std std-ref\">3/3-2#for文による繰り返しと辞書</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">iter</span></code> <a class=\"reference internal\" href=\"4/4-2.html#iter\"><span class=\"std std-ref\">4/4-2#iter</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">join</span></code> <a class=\"reference internal\" href=\"2/2-2.html#リストと文字列の相互変換\"><span class=\"std std-ref\">2/2-2#リストと文字列の相互変換</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">key</span></code> <a class=\"reference internal\" href=\"6/6-2.html#max\"><span class=\"std std-ref\">6/6-2#max</span></a>, <a class=\"reference internal\" href=\"6/6-2.html#sorted\"><span class=\"std std-ref\">6/6-2#sorted</span></a></p></li>\n<li><p>key <a class=\"reference internal\" href=\"3/3-1.html#3-1.-辞書-(dictionary)\"><span class=\"std std-ref\">3/3-1#3-1. 辞書 (dictionary)</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">keys</span></code> <a class=\"reference internal\" href=\"3/3-1.html#キーの一覧を得る\"><span class=\"std std-ref\">3/3-1#キーの一覧を得る</span></a>, <a class=\"reference internal\" href=\"3/3-1.html#キーの一覧を得る\"><span class=\"std std-ref\">3/3-1#キーの一覧を得る</span></a>, <a class=\"reference internal\" href=\"3/3-2.html#for文による繰り返しと辞書\"><span class=\"std std-ref\">3/3-2#for文による繰り返しと辞書</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">lambda</span></code> <a class=\"reference internal\" href=\"6/6-2.html#ラムダ式\"><span class=\"std std-ref\">6/6-2#ラムダ式</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">legend</span></code> <a class=\"reference internal\" href=\"appendix/5-matplotlib.html#線グラフ\"><span class=\"std std-ref\">appendix/5-matplotlib#線グラフ</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">len</span></code> <a class=\"reference internal\" href=\"3/3-1.html#3-1.-辞書-(dictionary)\"><span class=\"std std-ref\">3/3-1#3-1. 辞書 (dictionary)</span></a>, <a class=\"reference internal\" href=\"2/2-1.html#2-1.-文字列-(string)\"><span class=\"std std-ref\">2/2-1#2-1. 文字列 (string)</span></a>, <a class=\"reference internal\" href=\"2/2-2.html#リストの要素数\"><span class=\"std std-ref\">2/2-2#リストの要素数</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">line</span></code> <a class=\"reference internal\" href=\"appendix/5-bokeh.html#線グラフ\"><span class=\"std std-ref\">appendix/5-bokeh#線グラフ</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">list</span></code> <a class=\"reference internal\" href=\"2/2-2.html#2-2.-リスト-(list)\"><span class=\"std std-ref\">2/2-2#2-2. リスト (list)</span></a>, <a class=\"reference internal\" href=\"2/2-2.html#タプル-(tuple)\"><span class=\"std std-ref\">2/2-2#タプル (tuple)</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">loc</span></code> <a class=\"reference internal\" href=\"7/7-1.html#iloc-と-loc\"><span class=\"std std-ref\">7/7-1#iloc と loc</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">lower</span></code> <a class=\"reference internal\" href=\"2/2-1.html#大文字・小文字\"><span class=\"std std-ref\">2/2-1#大文字・小文字</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">map</span></code> <a class=\"reference internal\" href=\"6/6-2.html#map\"><span class=\"std std-ref\">6/6-2#map</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">match</span></code> <a class=\"reference internal\" href=\"appendix/5-re.html#正規表現の基本\"><span class=\"std std-ref\">appendix/5-re#正規表現の基本</span></a></p></li>\n<li><p>matchオブジェクト <a class=\"reference internal\" href=\"appendix/5-re.html#正規表現の基本\"><span class=\"std std-ref\">appendix/5-re#正規表現の基本</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">math</span></code> <a class=\"reference internal\" href=\"1/1-1.html#数学関数（モジュールのインポート）\"><span class=\"std std-ref\">1/1-1#数学関数（モジュールのインポート）</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">math.cos</span></code> <a class=\"reference internal\" href=\"1/1-1.html#数学関数（モジュールのインポート）\"><span class=\"std std-ref\">1/1-1#数学関数（モジュールのインポート）</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">math.pi</span></code> <a class=\"reference internal\" href=\"1/1-1.html#数学関数（モジュールのインポート）\"><span class=\"std std-ref\">1/1-1#数学関数（モジュールのインポート）</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">math.sin</span></code> <a class=\"reference internal\" href=\"1/1-1.html#数学関数（モジュールのインポート）\"><span class=\"std std-ref\">1/1-1#数学関数（モジュールのインポート）</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">math.sqrt</span></code> <a class=\"reference internal\" href=\"1/1-1.html#数学関数（モジュールのインポート）\"><span class=\"std std-ref\">1/1-1#数学関数（モジュールのインポート）</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">matplotlib</span></code> <a class=\"reference internal\" href=\"appendix/3-visualization.html#matplotlib\"><span class=\"std std-ref\">appendix/3-visualization#matplotlib</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">max</span></code> <a class=\"reference internal\" href=\"6/6-2.html#max\"><span class=\"std std-ref\">6/6-2#max</span></a>, <a class=\"reference internal\" href=\"2/2-2.html#max-と-min\"><span class=\"std std-ref\">2/2-2#max と min</span></a>, <a class=\"reference internal\" href=\"5/5-3.html#sum,-max,-min,-mean\"><span class=\"std std-ref\">5/5-3#sum, max, min, mean</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">mean</span></code> <a class=\"reference internal\" href=\"5/5-3.html#sum,-max,-min,-mean\"><span class=\"std std-ref\">5/5-3#sum, max, min, mean</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">merge</span></code> <a class=\"reference internal\" href=\"7/7-1.html#▲データの結合\"><span class=\"std std-ref\">7/7-1#▲データの結合</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">min</span></code> <a class=\"reference internal\" href=\"2/2-2.html#max-と-min\"><span class=\"std std-ref\">2/2-2#max と min</span></a>, <a class=\"reference internal\" href=\"5/5-3.html#sum,-max,-min,-mean\"><span class=\"std std-ref\">5/5-3#sum, max, min, mean</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">next</span></code> <a class=\"reference internal\" href=\"4/4-2.html#next\"><span class=\"std std-ref\">4/4-2#next</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">not</span></code> <a class=\"reference internal\" href=\"1/1-3.html#様々な条件\"><span class=\"std std-ref\">1/1-3#様々な条件</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">not</span> <span class=\"pre\">in</span></code> <a class=\"reference internal\" href=\"3/3-2.html#in\"><span class=\"std std-ref\">3/3-2#in</span></a>, <a class=\"reference internal\" href=\"2/2-1.html#文字列の検索\"><span class=\"std std-ref\">2/2-1#文字列の検索</span></a>, <a class=\"reference internal\" href=\"2/2-2.html#リストと演算子\"><span class=\"std std-ref\">2/2-2#リストと演算子</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">numpy</span></code> <a class=\"reference internal\" href=\"5/5-3.html#5-3.-NumPyライブラリ\"><span class=\"std std-ref\">5/5-3#5-3. NumPyライブラリ</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">numpy.arange</span></code> <a class=\"reference internal\" href=\"5/5-3.html#arange\"><span class=\"std std-ref\">5/5-3#arange</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">numpy.array</span></code> <a class=\"reference internal\" href=\"5/5-3.html#配列の構築\"><span class=\"std std-ref\">5/5-3#配列の構築</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">numpy.bool_</span></code> <a class=\"reference internal\" href=\"5/5-3.html#要素型\"><span class=\"std std-ref\">5/5-3#要素型</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">numpy.complex128</span></code> <a class=\"reference internal\" href=\"5/5-3.html#要素型\"><span class=\"std std-ref\">5/5-3#要素型</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">numpy.dot</span></code> <a class=\"reference internal\" href=\"5/5-3.html#dot\"><span class=\"std std-ref\">5/5-3#dot</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">numpy.float64</span></code> <a class=\"reference internal\" href=\"5/5-3.html#要素型\"><span class=\"std std-ref\">5/5-3#要素型</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">numpy.histogram</span></code> <a class=\"reference internal\" href=\"appendix/5-bokeh.html#ヒストグラム\"><span class=\"std std-ref\">appendix/5-bokeh#ヒストグラム</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">numpy.identity</span></code> <a class=\"reference internal\" href=\"5/5-3.html#▲線形代数の演算\"><span class=\"std std-ref\">5/5-3#▲線形代数の演算</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">numpy.int32</span></code> <a class=\"reference internal\" href=\"5/5-3.html#要素型\"><span class=\"std std-ref\">5/5-3#要素型</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">numpy.linalg</span></code> <a class=\"reference internal\" href=\"5/5-3.html#▲線形代数の演算\"><span class=\"std std-ref\">5/5-3#▲線形代数の演算</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">numpy.linalg.norm</span></code> <a class=\"reference internal\" href=\"5/5-3.html#▲線形代数の演算\"><span class=\"std std-ref\">5/5-3#▲線形代数の演算</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">numpy.linspace</span></code> <a class=\"reference internal\" href=\"5/5-3.html#linspace\"><span class=\"std std-ref\">5/5-3#linspace</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">numpy.loadtxt</span></code> <a class=\"reference internal\" href=\"5/5-3.html#配列の保存と復元\"><span class=\"std std-ref\">5/5-3#配列の保存と復元</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">numpy.matmul</span></code> <a class=\"reference internal\" href=\"5/5-3.html#▲線形代数の演算\"><span class=\"std std-ref\">5/5-3#▲線形代数の演算</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">numpy.ndarray</span></code> <a class=\"reference internal\" href=\"5/5-3.html#配列の構築\"><span class=\"std std-ref\">5/5-3#配列の構築</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">numpy.ones</span></code> <a class=\"reference internal\" href=\"5/5-3.html#zeros-と-ones\"><span class=\"std std-ref\">5/5-3#zeros と ones</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">numpy.random.binomial</span></code> <a class=\"reference internal\" href=\"5/5-3.html#random.rand\"><span class=\"std std-ref\">5/5-3#random.rand</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">numpy.random.poisson</span></code> <a class=\"reference internal\" href=\"5/5-3.html#random.rand\"><span class=\"std std-ref\">5/5-3#random.rand</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">numpy.random.rand</span></code> <a class=\"reference internal\" href=\"5/5-3.html#random.rand\"><span class=\"std std-ref\">5/5-3#random.rand</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">numpy.random.randn</span></code> <a class=\"reference internal\" href=\"5/5-3.html#random.rand\"><span class=\"std std-ref\">5/5-3#random.rand</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">numpy.savetxt</span></code> <a class=\"reference internal\" href=\"5/5-3.html#配列の保存と復元\"><span class=\"std std-ref\">5/5-3#配列の保存と復元</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">numpy.sort</span></code> <a class=\"reference internal\" href=\"5/5-3.html#sort\"><span class=\"std std-ref\">5/5-3#sort</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">numpy.sqrt</span></code> <a class=\"reference internal\" href=\"5/5-3.html#ユニバーサル関数\"><span class=\"std std-ref\">5/5-3#ユニバーサル関数</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">numpy.zeros</span></code> <a class=\"reference internal\" href=\"5/5-3.html#zeros-と-ones\"><span class=\"std std-ref\">5/5-3#zeros と ones</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">on</span></code> <a class=\"reference internal\" href=\"7/7-1.html#▲データの結合\"><span class=\"std std-ref\">7/7-1#▲データの結合</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">open</span></code> <a class=\"reference internal\" href=\"4/4-1.html#ファイルのオープン\"><span class=\"std std-ref\">4/4-1#ファイルのオープン</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">or</span></code> <a class=\"reference internal\" href=\"1/1-3.html#様々な条件\"><span class=\"std std-ref\">1/1-3#様々な条件</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">ord</span></code> <a class=\"reference internal\" href=\"3/3-2.html#for文による繰り返し\"><span class=\"std std-ref\">3/3-2#for文による繰り返し</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">os.chdir</span></code> <a class=\"reference internal\" href=\"4/4-3.html#カレントワーキングディレクトリ\"><span class=\"std std-ref\">4/4-3#カレントワーキングディレクトリ</span></a></p></li>\n<li><p>pandas <a class=\"reference internal\" href=\"7/7-1.html#7-1.-pandasライブラリ\"><span class=\"std std-ref\">7/7-1#7-1. pandasライブラリ</span></a></p></li>\n<li><p>parameter <a class=\"reference internal\" href=\"3/3-3.html#引数\"><span class=\"std std-ref\">3/3-3#引数</span></a></p></li>\n<li><p>pass文 <a class=\"reference internal\" href=\"3/3-2.html#pass文\"><span class=\"std std-ref\">3/3-2#pass文</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">plot</span></code> <a class=\"reference internal\" href=\"appendix/5-matplotlib.html#線グラフ\"><span class=\"std std-ref\">appendix/5-matplotlib#線グラフ</span></a></p></li>\n<li><p>pop <a class=\"reference internal\" href=\"appendix/2-set.html#pop\"><span class=\"std std-ref\">appendix/2-set#pop</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">pop</span></code> <a class=\"reference internal\" href=\"3/3-1.html#▲キーを指定した削除\"><span class=\"std std-ref\">3/3-1#▲キーを指定した削除</span></a>, <a class=\"reference internal\" href=\"2/2-2.html#▲リストからインデックスで指定した要素を削除する\"><span class=\"std std-ref\">2/2-2#▲リストからインデックスで指定した要素を削除する</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">predict</span></code> <a class=\"reference internal\" href=\"7/7-2.html#教師あり学習・分類の例\"><span class=\"std std-ref\">7/7-2#教師あり学習・分類の例</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">print</span></code> <a class=\"reference internal\" href=\"1/1-2.html#print\"><span class=\"std std-ref\">1/1-2#print</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">quad</span></code> <a class=\"reference internal\" href=\"appendix/5-bokeh.html#ヒストグラム\"><span class=\"std std-ref\">appendix/5-bokeh#ヒストグラム</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">raise</span></code> <a class=\"reference internal\" href=\"6/6-3.html#特殊メソッド\"><span class=\"std std-ref\">6/6-3#特殊メソッド</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">range</span></code> <a class=\"reference internal\" href=\"3/3-2.html#range\"><span class=\"std std-ref\">3/3-2#range</span></a>, <a class=\"reference internal\" href=\"3/3-2.html#range-とリスト\"><span class=\"std std-ref\">3/3-2#range とリスト</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">ravel</span></code> <a class=\"reference internal\" href=\"5/5-3.html#多次元配列\"><span class=\"std std-ref\">5/5-3#多次元配列</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">re.I</span></code> <a class=\"reference internal\" href=\"appendix/5-re.html#正規表現の基本\"><span class=\"std std-ref\">appendix/5-re#正規表現の基本</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">re.IGNORECASE</span></code> <a class=\"reference internal\" href=\"appendix/5-re.html#正規表現の基本\"><span class=\"std std-ref\">appendix/5-re#正規表現の基本</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">read</span></code> <a class=\"reference internal\" href=\"4/4-1.html#ファイル全体の読み込み\"><span class=\"std std-ref\">4/4-1#ファイル全体の読み込み</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">read_csv</span></code> <a class=\"reference internal\" href=\"7/7-1.html#CSVファイルからのデータフレームの作成\"><span class=\"std std-ref\">7/7-1#CSVファイルからのデータフレームの作成</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">readline</span></code> <a class=\"reference internal\" href=\"4/4-1.html#行の読み込み\"><span class=\"std std-ref\">4/4-1#行の読み込み</span></a></p></li>\n<li><p>remove <a class=\"reference internal\" href=\"appendix/2-set.html#remove\"><span class=\"std std-ref\">appendix/2-set#remove</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">remove</span></code> <a class=\"reference internal\" href=\"2/2-2.html#▲リストから要素を削除する\"><span class=\"std std-ref\">2/2-2#▲リストから要素を削除する</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">replace</span></code> <a class=\"reference internal\" href=\"2/2-1.html#置換\"><span class=\"std std-ref\">2/2-1#置換</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">reshape</span></code> <a class=\"reference internal\" href=\"5/5-3.html#多次元配列\"><span class=\"std std-ref\">5/5-3#多次元配列</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">return</span></code> <a class=\"reference internal\" href=\"1/1-2.html#関数の定義と返値\"><span class=\"std std-ref\">1/1-2#関数の定義と返値</span></a>, <a class=\"reference internal\" href=\"3/3-3.html#返値\"><span class=\"std std-ref\">3/3-3#返値</span></a></p></li>\n<li><p>return文 <a class=\"reference internal\" href=\"1/1-2.html#関数の定義と返値\"><span class=\"std std-ref\">1/1-2#関数の定義と返値</span></a>, <a class=\"reference internal\" href=\"3/3-2.html#制御構造とreturn文\"><span class=\"std std-ref\">3/3-2#制御構造とreturn文</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">reverse</span></code> <a class=\"reference internal\" href=\"6/6-2.html#sorted\"><span class=\"std std-ref\">6/6-2#sorted</span></a>, <a class=\"reference internal\" href=\"2/2-2.html#▲リストの要素を逆順にする\"><span class=\"std std-ref\">2/2-2#▲リストの要素を逆順にする</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">savefig</span></code> <a class=\"reference internal\" href=\"appendix/5-matplotlib.html#グラフの画像ファイル出力\"><span class=\"std std-ref\">appendix/5-matplotlib#グラフの画像ファイル出力</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">scatter</span></code> <a class=\"reference internal\" href=\"appendix/5-bokeh.html#散布図\"><span class=\"std std-ref\">appendix/5-bokeh#散布図</span></a>, <a class=\"reference internal\" href=\"appendix/5-matplotlib.html#散布図\"><span class=\"std std-ref\">appendix/5-matplotlib#散布図</span></a></p></li>\n<li><p>scikit-learn <a class=\"reference internal\" href=\"7/7-2.html#7-2.-scikit-learnライブラリ\"><span class=\"std std-ref\">7/7-2#7-2. scikit-learnライブラリ</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">search</span></code> <a class=\"reference internal\" href=\"appendix/5-re.html#正規表現の基本\"><span class=\"std std-ref\">appendix/5-re#正規表現の基本</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">set</span></code> <a class=\"reference internal\" href=\"appendix/2-set.html#▲セット-(set)\"><span class=\"std std-ref\">appendix/2-set#▲セット (set)</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">setdefault</span></code> <a class=\"reference internal\" href=\"3/3-1.html#▲キーがない場合に登録を行う\"><span class=\"std std-ref\">3/3-1#▲キーがない場合に登録を行う</span></a></p></li>\n<li><p>shebang <a class=\"reference internal\" href=\"appendix/5-command.html#shebang\"><span class=\"std std-ref\">appendix/5-command#shebang</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">sort</span></code> <a class=\"reference internal\" href=\"2/2-2.html#並べ替え（sort-メソッド）\"><span class=\"std std-ref\">2/2-2#並べ替え（sort メソッド）</span></a>, <a class=\"reference internal\" href=\"5/5-3.html#sort\"><span class=\"std std-ref\">5/5-3#sort</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">sort_index</span></code> <a class=\"reference internal\" href=\"7/7-1.html#データの並び替え\"><span class=\"std std-ref\">7/7-1#データの並び替え</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">sort_values</span></code> <a class=\"reference internal\" href=\"7/7-1.html#データの並び替え\"><span class=\"std std-ref\">7/7-1#データの並び替え</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">sorted</span></code> <a class=\"reference internal\" href=\"6/6-2.html#sorted\"><span class=\"std std-ref\">6/6-2#sorted</span></a>, <a class=\"reference internal\" href=\"2/2-2.html#並べ替え（sorted-組み込み関数）\"><span class=\"std std-ref\">2/2-2#並べ替え（sorted 組み込み関数）</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">split</span></code> <a class=\"reference internal\" href=\"appendix/5-re.html#re.split\"><span class=\"std std-ref\">appendix/5-re#re.split</span></a>, <a class=\"reference internal\" href=\"2/2-2.html#リストと文字列の相互変換\"><span class=\"std std-ref\">2/2-2#リストと文字列の相互変換</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">str</span></code> <a class=\"reference internal\" href=\"2/2-1.html#2-1.-文字列-(string)\"><span class=\"std std-ref\">2/2-1#2-1. 文字列 (string)</span></a>, <a class=\"reference internal\" href=\"2/2-1.html#2-1.-文字列-(string)\"><span class=\"std std-ref\">2/2-1#2-1. 文字列 (string)</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">sub</span></code> <a class=\"reference internal\" href=\"appendix/5-re.html#sub\"><span class=\"std std-ref\">appendix/5-re#sub</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">sum</span></code> <a class=\"reference internal\" href=\"6/6-1.html#リスト内包表記\"><span class=\"std std-ref\">6/6-1#リスト内包表記</span></a>, <a class=\"reference internal\" href=\"2/2-2.html#sum\"><span class=\"std std-ref\">2/2-2#sum</span></a>, <a class=\"reference internal\" href=\"5/5-3.html#sum,-max,-min,-mean\"><span class=\"std std-ref\">5/5-3#sum, max, min, mean</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">super</span></code> <a class=\"reference internal\" href=\"6/6-3.html#継承\"><span class=\"std std-ref\">6/6-3#継承</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">title</span></code> <a class=\"reference internal\" href=\"appendix/5-matplotlib.html#線グラフ\"><span class=\"std std-ref\">appendix/5-matplotlib#線グラフ</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">transform</span></code> <a class=\"reference internal\" href=\"7/7-2.html#教師なし学習・次元削減の例\"><span class=\"std std-ref\">7/7-2#教師なし学習・次元削減の例</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">tuple</span></code> <a class=\"reference internal\" href=\"2/2-2.html#タプル-(tuple)\"><span class=\"std std-ref\">2/2-2#タプル (tuple)</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">type</span></code> <a class=\"reference internal\" href=\"2/2-1.html#2-1.-文字列-(string)\"><span class=\"std std-ref\">2/2-1#2-1. 文字列 (string)</span></a></p></li>\n<li><p>union <a class=\"reference internal\" href=\"appendix/2-set.html#union,-intersection,-difference\"><span class=\"std std-ref\">appendix/2-set#union, intersection, difference</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">upper</span></code> <a class=\"reference internal\" href=\"2/2-1.html#大文字・小文字\"><span class=\"std std-ref\">2/2-1#大文字・小文字</span></a></p></li>\n<li><p>value <a class=\"reference internal\" href=\"3/3-1.html#3-1.-辞書-(dictionary)\"><span class=\"std std-ref\">3/3-1#3-1. 辞書 (dictionary)</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">values</span></code> <a class=\"reference internal\" href=\"3/3-1.html#値の一覧を得る\"><span class=\"std std-ref\">3/3-1#値の一覧を得る</span></a>, <a class=\"reference internal\" href=\"3/3-2.html#for文による繰り返しと辞書\"><span class=\"std std-ref\">3/3-2#for文による繰り返しと辞書</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">vbar</span></code> <a class=\"reference internal\" href=\"appendix/5-bokeh.html#棒グラフ\"><span class=\"std std-ref\">appendix/5-bokeh#棒グラフ</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">while</span></code> <a class=\"reference internal\" href=\"3/3-2.html#while文による繰り返し\"><span class=\"std std-ref\">3/3-2#while文による繰り返し</span></a></p></li>\n<li><p>while文 <a class=\"reference internal\" href=\"3/3-2.html#while文による繰り返し\"><span class=\"std std-ref\">3/3-2#while文による繰り返し</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">with</span></code> <a class=\"reference internal\" href=\"4/4-1.html#ファイルに対するwith文\"><span class=\"std std-ref\">4/4-1#ファイルに対するwith文</span></a></p></li>\n<li><p>with文 <a class=\"reference internal\" href=\"6/6-3.html#▲with文への対応\"><span class=\"std std-ref\">6/6-3#▲with文への対応</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">write</span></code> <a class=\"reference internal\" href=\"4/4-1.html#ファイルへの書き込み\"><span class=\"std std-ref\">4/4-1#ファイルへの書き込み</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">xlabel</span></code> <a class=\"reference internal\" href=\"appendix/5-matplotlib.html#線グラフ\"><span class=\"std std-ref\">appendix/5-matplotlib#線グラフ</span></a></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">ylabel</span></code> <a class=\"reference internal\" href=\"appendix/5-matplotlib.html#線グラフ\"><span class=\"std std-ref\">appendix/5-matplotlib#線グラフ</span></a></p></li>\n<li><p>値 <a class=\"reference internal\" href=\"3/3-1.html#3-1.-辞書-(dictionary)\"><span class=\"std std-ref\">3/3-1#3-1. 辞書 (dictionary)</span></a></p></li>\n<li><p>余り <a class=\"reference internal\" href=\"1/1-1.html#簡単な算術計算\"><span class=\"std std-ref\">1/1-1#簡単な算術計算</span></a></p></li>\n<li><p>イテラブル <a class=\"reference internal\" href=\"6/6-2.html#リストからイテラブルへ\"><span class=\"std std-ref\">6/6-2#リストからイテラブルへ</span></a>, <a class=\"reference internal\" href=\"4/4-2.html#for文とイテラブルとイテレータ\"><span class=\"std std-ref\">4/4-2#for文とイテラブルとイテレータ</span></a></p></li>\n<li><p>イテレータ <a class=\"reference internal\" href=\"6/6-2.html#map\"><span class=\"std std-ref\">6/6-2#map</span></a>, <a class=\"reference internal\" href=\"6/6-1.html#▲ジェネレータ式\"><span class=\"std std-ref\">6/6-1#▲ジェネレータ式</span></a>, <a class=\"reference internal\" href=\"4/4-2.html#for文とイテラブルとイテレータ\"><span class=\"std std-ref\">4/4-2#for文とイテラブルとイテレータ</span></a></p></li>\n<li><p>入れ子 <a class=\"reference internal\" href=\"6/6-1.html#内包表記の入れ子\"><span class=\"std std-ref\">6/6-1#内包表記の入れ子</span></a>, <a class=\"reference internal\" href=\"1/1-2.html#関数の定義と返値\"><span class=\"std std-ref\">1/1-2#関数の定義と返値</span></a>, <a class=\"reference internal\" href=\"3/3-2.html#for文の入れ子\"><span class=\"std std-ref\">3/3-2#for文の入れ子</span></a>, <a class=\"reference internal\" href=\"3/3-2.html#for文の入れ子\"><span class=\"std std-ref\">3/3-2#for文の入れ子</span></a>, <a class=\"reference internal\" href=\"2/2-3.html#if-...-else-による条件分岐\"><span class=\"std std-ref\">2/2-3#if … else による条件分岐</span></a></p></li>\n<li><p>印字 <a class=\"reference internal\" href=\"1/1-2.html#print\"><span class=\"std std-ref\">1/1-2#print</span></a></p></li>\n<li><p>インスタンス <a class=\"reference internal\" href=\"6/6-3.html#クラス定義\"><span class=\"std std-ref\">6/6-3#クラス定義</span></a></p></li>\n<li><p>インデックス <a class=\"reference internal\" href=\"7/7-1.html#シリーズとデータフレーム\"><span class=\"std std-ref\">7/7-1#シリーズとデータフレーム</span></a>, <a class=\"reference internal\" href=\"2/2-1.html#文字列とインデックス\"><span class=\"std std-ref\">2/2-1#文字列とインデックス</span></a></p></li>\n<li><p>インデント <a class=\"reference internal\" href=\"1/1-2.html#関数の定義と返値\"><span class=\"std std-ref\">1/1-2#関数の定義と返値</span></a>, <a class=\"reference internal\" href=\"2/2-3.html#インデントによる構文\"><span class=\"std std-ref\">2/2-3#インデントによる構文</span></a></p></li>\n<li><p>インプレース <a class=\"reference internal\" href=\"2/2-2.html#破壊的（インプレース）な操作と非破壊的な生成\"><span class=\"std std-ref\">2/2-2#破壊的（インプレース）な操作と非破壊的な生成</span></a></p></li>\n<li><p>インポート <a class=\"reference internal\" href=\"1/1-1.html#数学関数（モジュールのインポート）\"><span class=\"std std-ref\">1/1-1#数学関数（モジュールのインポート）</span></a>, <a class=\"reference internal\" href=\"5/5-1.html#モジュールのインポート\"><span class=\"std std-ref\">5/5-1#モジュールのインポート</span></a></p></li>\n<li><p>エスケープシーケンス <a class=\"reference internal\" href=\"4/4-1.html#ファイルへの書き込み\"><span class=\"std std-ref\">4/4-1#ファイルへの書き込み</span></a>, <a class=\"reference internal\" href=\"2/2-1.html#▲エスケープシーケンス\"><span class=\"std std-ref\">2/2-1#▲エスケープシーケンス</span></a></p></li>\n<li><p>エラー <a class=\"reference internal\" href=\"1/1-1.html#エラー\"><span class=\"std std-ref\">1/1-1#エラー</span></a></p></li>\n<li><p>大文字 <a class=\"reference internal\" href=\"2/2-1.html#大文字・小文字\"><span class=\"std std-ref\">2/2-1#大文字・小文字</span></a></p></li>\n<li><p>オブジェクト <a class=\"reference internal\" href=\"6/6-3.html#クラス定義\"><span class=\"std std-ref\">6/6-3#クラス定義</span></a>, <a class=\"reference internal\" href=\"1/1-3.html#オブジェクト\"><span class=\"std std-ref\">1/1-3#オブジェクト</span></a></p></li>\n<li><p>オブジェクト指向プログラミング <a class=\"reference internal\" href=\"6/6-3.html#クラス定義\"><span class=\"std std-ref\">6/6-3#クラス定義</span></a></p></li>\n<li><p>オブジェクトの同一性 <a class=\"reference internal\" href=\"2/2-2.html#▲オブジェクトの等価性と同一性\"><span class=\"std std-ref\">2/2-2#▲オブジェクトの等価性と同一性</span></a></p></li>\n<li><p>オブジェクトの等価性 <a class=\"reference internal\" href=\"2/2-2.html#▲オブジェクトの等価性と同一性\"><span class=\"std std-ref\">2/2-2#▲オブジェクトの等価性と同一性</span></a></p></li>\n<li><p>親クラス <a class=\"reference internal\" href=\"6/6-3.html#継承\"><span class=\"std std-ref\">6/6-3#継承</span></a></p></li>\n<li><p>オーダー <a class=\"reference internal\" href=\"3/3-2.html#for文の計算量\"><span class=\"std std-ref\">3/3-2#for文の計算量</span></a></p></li>\n<li><p>オープン <a class=\"reference internal\" href=\"4/4-1.html#ファイルのオープン\"><span class=\"std std-ref\">4/4-1#ファイルのオープン</span></a></p></li>\n<li><p>返値 <a class=\"reference internal\" href=\"1/1-2.html#関数の定義と返値\"><span class=\"std std-ref\">1/1-2#関数の定義と返値</span></a>, <a class=\"reference internal\" href=\"3/3-3.html#返値\"><span class=\"std std-ref\">3/3-3#返値</span></a></p></li>\n<li><p>書き込みモード <a class=\"reference internal\" href=\"4/4-1.html#ファイルへの書き込み\"><span class=\"std std-ref\">4/4-1#ファイルへの書き込み</span></a></p></li>\n<li><p>掛け算 <a class=\"reference internal\" href=\"1/1-1.html#簡単な算術計算\"><span class=\"std std-ref\">1/1-1#簡単な算術計算</span></a></p></li>\n<li><p>数え上げ <a class=\"reference internal\" href=\"2/2-1.html#数え上げ\"><span class=\"std std-ref\">2/2-1#数え上げ</span></a></p></li>\n<li><p>型 <a class=\"reference internal\" href=\"2/2-1.html#2-1.-文字列-(string)\"><span class=\"std std-ref\">2/2-1#2-1. 文字列 (string)</span></a></p></li>\n<li><p>形 <a class=\"reference internal\" href=\"5/5-3.html#多次元配列\"><span class=\"std std-ref\">5/5-3#多次元配列</span></a></p></li>\n<li><p>括弧 <a class=\"reference internal\" href=\"1/1-1.html#演算子の優先順位と括弧\"><span class=\"std std-ref\">1/1-1#演算子の優先順位と括弧</span></a></p></li>\n<li><p>可変長引数 <a class=\"reference internal\" href=\"3/3-3.html#▲可変長引数\"><span class=\"std std-ref\">3/3-3#▲可変長引数</span></a></p></li>\n<li><p>仮引数 <a class=\"reference internal\" href=\"1/1-2.html#関数の定義と返値\"><span class=\"std std-ref\">1/1-2#関数の定義と返値</span></a>, <a class=\"reference internal\" href=\"3/3-3.html#引数\"><span class=\"std std-ref\">3/3-3#引数</span></a></p></li>\n<li><p>カレントディレクトリ <a class=\"reference internal\" href=\"4/4-3.html#カレントワーキングディレクトリ\"><span class=\"std std-ref\">4/4-3#カレントワーキングディレクトリ</span></a></p></li>\n<li><p>カレントワーキングディレクトリ <a class=\"reference internal\" href=\"4/4-3.html#カレントワーキングディレクトリ\"><span class=\"std std-ref\">4/4-3#カレントワーキングディレクトリ</span></a></p></li>\n<li><p>関数 <a class=\"reference internal\" href=\"1/1-2.html#関数の定義と返値\"><span class=\"std std-ref\">1/1-2#関数の定義と返値</span></a>, <a class=\"reference internal\" href=\"3/3-3.html#関数の定義\"><span class=\"std std-ref\">3/3-3#関数の定義</span></a></p></li>\n<li><p>関数定義 <a class=\"reference internal\" href=\"1/1-2.html#関数の定義と返値\"><span class=\"std std-ref\">1/1-2#関数の定義と返値</span></a>, <a class=\"reference internal\" href=\"1/1-2.html#関数の定義と返値\"><span class=\"std std-ref\">1/1-2#関数の定義と返値</span></a>, <a class=\"reference internal\" href=\"3/3-3.html#関数の定義\"><span class=\"std std-ref\">3/3-3#関数の定義</span></a></p></li>\n<li><p>木 <a class=\"reference internal\" href=\"4/4-3.html#木構造\"><span class=\"std std-ref\">4/4-3#木構造</span></a></p></li>\n<li><p>機械学習 <a class=\"reference internal\" href=\"7/7-2.html#機械学習について\"><span class=\"std std-ref\">7/7-2#機械学習について</span></a></p></li>\n<li><p>木構造 <a class=\"reference internal\" href=\"4/4-3.html#木構造\"><span class=\"std std-ref\">4/4-3#木構造</span></a></p></li>\n<li><p>キャプチャ <a class=\"reference internal\" href=\"appendix/5-re.html#group\"><span class=\"std std-ref\">appendix/5-re#group</span></a></p></li>\n<li><p>教師あり学習 <a class=\"reference internal\" href=\"7/7-2.html#教師あり学習\"><span class=\"std std-ref\">7/7-2#教師あり学習</span></a></p></li>\n<li><p>教師なし学習 <a class=\"reference internal\" href=\"7/7-2.html#教師なし学習\"><span class=\"std std-ref\">7/7-2#教師なし学習</span></a></p></li>\n<li><p>兄弟 <a class=\"reference internal\" href=\"4/4-3.html#木構造\"><span class=\"std std-ref\">4/4-3#木構造</span></a></p></li>\n<li><p>キー <a class=\"reference internal\" href=\"3/3-1.html#3-1.-辞書-(dictionary)\"><span class=\"std std-ref\">3/3-1#3-1. 辞書 (dictionary)</span></a></p></li>\n<li><p>キーワード引数 <a class=\"reference internal\" href=\"3/3-3.html#▲キーワード引数\"><span class=\"std std-ref\">3/3-3#▲キーワード引数</span></a></p></li>\n<li><p>偽 <a class=\"reference internal\" href=\"1/1-3.html#真理値を返す関数\"><span class=\"std std-ref\">1/1-3#真理値を返す関数</span></a></p></li>\n<li><p>行番号 <a class=\"reference internal\" href=\"1/1-2.html#関数の定義と返値\"><span class=\"std std-ref\">1/1-2#関数の定義と返値</span></a></p></li>\n<li><p>空行 <a class=\"reference internal\" href=\"1/1-2.html#コメントと空行\"><span class=\"std std-ref\">1/1-2#コメントと空行</span></a></p></li>\n<li><p>空タプル <a class=\"reference internal\" href=\"2/2-2.html#タプル-(tuple)\"><span class=\"std std-ref\">2/2-2#タプル (tuple)</span></a></p></li>\n<li><p>空白 <a class=\"reference internal\" href=\"1/1-1.html#空白\"><span class=\"std std-ref\">1/1-1#空白</span></a></p></li>\n<li><p>空白文字 <a class=\"reference internal\" href=\"appendix/5-re.html#メタ文字\"><span class=\"std std-ref\">appendix/5-re#メタ文字</span></a>, <a class=\"reference internal\" href=\"2/2-1.html#▲空白文字の削除\"><span class=\"std std-ref\">2/2-1#▲空白文字の削除</span></a></p></li>\n<li><p>空文字列 <a class=\"reference internal\" href=\"appendix/5-re.html#正規表現の基本\"><span class=\"std std-ref\">appendix/5-re#正規表現の基本</span></a>, <a class=\"reference internal\" href=\"2/2-1.html#空文字列\"><span class=\"std std-ref\">2/2-1#空文字列</span></a></p></li>\n<li><p>空リスト <a class=\"reference internal\" href=\"2/2-2.html#2-2.-リスト-(list)\"><span class=\"std std-ref\">2/2-2#2-2. リスト (list)</span></a></p></li>\n<li><p>空列 <a class=\"reference internal\" href=\"appendix/5-re.html#正規表現の基本\"><span class=\"std std-ref\">appendix/5-re#正規表現の基本</span></a>, <a class=\"reference internal\" href=\"2/2-1.html#空文字列\"><span class=\"std std-ref\">2/2-1#空文字列</span></a></p></li>\n<li><p>組み込み関数 <a class=\"reference internal\" href=\"1/1-2.html#print\"><span class=\"std std-ref\">1/1-2#print</span></a></p></li>\n<li><p>組み込み定数 <a class=\"reference internal\" href=\"1/1-3.html#真理値を返す関数\"><span class=\"std std-ref\">1/1-3#真理値を返す関数</span></a></p></li>\n<li><p>クラス <a class=\"reference internal\" href=\"6/6-3.html#クラス定義\"><span class=\"std std-ref\">6/6-3#クラス定義</span></a></p></li>\n<li><p>クラスタリング <a class=\"reference internal\" href=\"7/7-2.html#教師なし学習・クラスタリングの例\"><span class=\"std std-ref\">7/7-2#教師なし学習・クラスタリングの例</span></a></p></li>\n<li><p>繰り返し <a class=\"reference internal\" href=\"3/3-2.html#3-2.-繰り返し\"><span class=\"std std-ref\">3/3-2#3-2. 繰り返し</span></a></p></li>\n<li><p>クローズ <a class=\"reference internal\" href=\"4/4-1.html#ファイルのクローズ\"><span class=\"std std-ref\">4/4-1#ファイルのクローズ</span></a></p></li>\n<li><p>グラフ <a class=\"reference internal\" href=\"appendix/5-matplotlib.html#線グラフ\"><span class=\"std std-ref\">appendix/5-matplotlib#線グラフ</span></a></p></li>\n<li><p>グローバル変数 <a class=\"reference internal\" href=\"1/1-2.html#▲グローバル変数\"><span class=\"std std-ref\">1/1-2#▲グローバル変数</span></a>, <a class=\"reference internal\" href=\"3/3-3.html#変数とスコープ\"><span class=\"std std-ref\">3/3-3#変数とスコープ</span></a></p></li>\n<li><p>計算量 <a class=\"reference internal\" href=\"3/3-2.html#for文の計算量\"><span class=\"std std-ref\">3/3-2#for文の計算量</span></a>, <a class=\"reference internal\" href=\"3/3-2.html#for文の計算量\"><span class=\"std std-ref\">3/3-2#for文の計算量</span></a></p></li>\n<li><p>計算量のオーダー <a class=\"reference internal\" href=\"3/3-2.html#for文の計算量\"><span class=\"std std-ref\">3/3-2#for文の計算量</span></a></p></li>\n<li><p>継承 <a class=\"reference internal\" href=\"6/6-3.html#継承\"><span class=\"std std-ref\">6/6-3#継承</span></a></p></li>\n<li><p>検索 <a class=\"reference internal\" href=\"2/2-1.html#検索\"><span class=\"std std-ref\">2/2-1#検索</span></a></p></li>\n<li><p>親 <a class=\"reference internal\" href=\"4/4-3.html#木構造\"><span class=\"std std-ref\">4/4-3#木構造</span></a></p></li>\n<li><p>子 <a class=\"reference internal\" href=\"4/4-3.html#木構造\"><span class=\"std std-ref\">4/4-3#木構造</span></a></p></li>\n<li><p>高階関数 <a class=\"reference internal\" href=\"6/6-2.html#max\"><span class=\"std std-ref\">6/6-2#max</span></a></p></li>\n<li><p>構文エラー <a class=\"reference internal\" href=\"1/1-4.html#構文エラー\"><span class=\"std std-ref\">1/1-4#構文エラー</span></a>, <a class=\"reference internal\" href=\"1/1-1.html#エラー\"><span class=\"std std-ref\">1/1-1#エラー</span></a></p></li>\n<li><p>子クラス <a class=\"reference internal\" href=\"6/6-3.html#継承\"><span class=\"std std-ref\">6/6-3#継承</span></a></p></li>\n<li><p>コマンドライン実行 <a class=\"reference internal\" href=\"appendix/5-command.html#▲Pythonスクリプトとコマンドライン実行\"><span class=\"std std-ref\">appendix/5-command#▲Pythonスクリプトとコマンドライン実行</span></a></p></li>\n<li><p>コマンドライン引数 <a class=\"reference internal\" href=\"appendix/5-command.html#コマンドライン引数\"><span class=\"std std-ref\">appendix/5-command#コマンドライン引数</span></a></p></li>\n<li><p>コメント <a class=\"reference internal\" href=\"1/1-2.html#コメントと空行\"><span class=\"std std-ref\">1/1-2#コメントと空行</span></a>, <a class=\"reference internal\" href=\"1/1-1.html#コメント\"><span class=\"std std-ref\">1/1-1#コメント</span></a></p></li>\n<li><p>小文字 <a class=\"reference internal\" href=\"2/2-1.html#大文字・小文字\"><span class=\"std std-ref\">2/2-1#大文字・小文字</span></a></p></li>\n<li><p>コンストラクタ <a class=\"reference internal\" href=\"6/6-3.html#クラス定義\"><span class=\"std std-ref\">6/6-3#クラス定義</span></a></p></li>\n<li><p>コーディングスタイル <a class=\"reference internal\" href=\"1/1-4.html#コーディングスタイル\"><span class=\"std std-ref\">1/1-4#コーディングスタイル</span></a></p></li>\n<li><p>再帰 <a class=\"reference internal\" href=\"appendix/3-recursion.html#▲再帰\"><span class=\"std std-ref\">appendix/3-recursion#▲再帰</span></a>, <a class=\"reference internal\" href=\"1/1-3.html#▲再帰\"><span class=\"std std-ref\">1/1-3#▲再帰</span></a></p></li>\n<li><p>再帰関数 <a class=\"reference internal\" href=\"appendix/3-recursion.html#▲再帰\"><span class=\"std std-ref\">appendix/3-recursion#▲再帰</span></a></p></li>\n<li><p>再帰呼び出し <a class=\"reference internal\" href=\"appendix/3-recursion.html#▲再帰\"><span class=\"std std-ref\">appendix/3-recursion#▲再帰</span></a></p></li>\n<li><p>作業ディレクトリ <a class=\"reference internal\" href=\"4/4-3.html#カレントワーキングディレクトリ\"><span class=\"std std-ref\">4/4-3#カレントワーキングディレクトリ</span></a></p></li>\n<li><p>差集合 <a class=\"reference internal\" href=\"appendix/2-set.html#集合演算\"><span class=\"std std-ref\">appendix/2-set#集合演算</span></a>, <a class=\"reference internal\" href=\"appendix/2-set.html#union,-intersection,-difference\"><span class=\"std std-ref\">appendix/2-set#union, intersection, difference</span></a></p></li>\n<li><p>散布図 <a class=\"reference internal\" href=\"appendix/5-matplotlib.html#散布図\"><span class=\"std std-ref\">appendix/5-matplotlib#散布図</span></a></p></li>\n<li><p>子孫 <a class=\"reference internal\" href=\"4/4-3.html#木構造\"><span class=\"std std-ref\">4/4-3#木構造</span></a></p></li>\n<li><p>集合 <a class=\"reference internal\" href=\"appendix/2-set.html#▲セット-(set)\"><span class=\"std std-ref\">appendix/2-set#▲セット (set)</span></a></p></li>\n<li><p>集合演算 <a class=\"reference internal\" href=\"appendix/2-set.html#集合演算\"><span class=\"std std-ref\">appendix/2-set#集合演算</span></a></p></li>\n<li><p>商 <a class=\"reference internal\" href=\"1/1-1.html#簡単な算術計算\"><span class=\"std std-ref\">1/1-1#簡単な算術計算</span></a></p></li>\n<li><p>初期化 <a class=\"reference internal\" href=\"6/6-3.html#初期化と属性\"><span class=\"std std-ref\">6/6-3#初期化と属性</span></a></p></li>\n<li><p>初期値 <a class=\"reference internal\" href=\"3/3-3.html#▲引数の初期値\"><span class=\"std std-ref\">3/3-3#▲引数の初期値</span></a></p></li>\n<li><p>仕様 <a class=\"reference internal\" href=\"1/1-4.html#仕様・テスト・デバッグ\"><span class=\"std std-ref\">1/1-4#仕様・テスト・デバッグ</span></a></p></li>\n<li><p>シリーズ <a class=\"reference internal\" href=\"7/7-1.html#シリーズとデータフレーム\"><span class=\"std std-ref\">7/7-1#シリーズとデータフレーム</span></a></p></li>\n<li><p>真 <a class=\"reference internal\" href=\"1/1-3.html#真理値を返す関数\"><span class=\"std std-ref\">1/1-3#真理値を返す関数</span></a></p></li>\n<li><p>真理値 <a class=\"reference internal\" href=\"1/1-3.html#真理値を返す関数\"><span class=\"std std-ref\">1/1-3#真理値を返す関数</span></a></p></li>\n<li><p>真理値配列によるインデックスアクセス <a class=\"reference internal\" href=\"7/7-1.html#データの条件取り出し\"><span class=\"std std-ref\">7/7-1#データの条件取り出し</span></a>, <a class=\"reference internal\" href=\"5/5-3.html#▲真理値配列によるインデックスアクセス\"><span class=\"std std-ref\">5/5-3#▲真理値配列によるインデックスアクセス</span></a></p></li>\n<li><p>ジェネレータ式 <a class=\"reference internal\" href=\"6/6-1.html#▲ジェネレータ式\"><span class=\"std std-ref\">6/6-1#▲ジェネレータ式</span></a></p></li>\n<li><p>次元削減 <a class=\"reference internal\" href=\"7/7-2.html#教師なし学習・次元削減の例\"><span class=\"std std-ref\">7/7-2#教師なし学習・次元削減の例</span></a></p></li>\n<li><p>辞書 <a class=\"reference internal\" href=\"3/3-1.html#3-1.-辞書-(dictionary)\"><span class=\"std std-ref\">3/3-1#3-1. 辞書 (dictionary)</span></a></p></li>\n<li><p>辞書型の可変長引数 <a class=\"reference internal\" href=\"3/3-3.html#▲辞書型の可変長引数\"><span class=\"std std-ref\">3/3-3#▲辞書型の可変長引数</span></a></p></li>\n<li><p>辞書内包表記 <a class=\"reference internal\" href=\"6/6-1.html#▲辞書内包表記\"><span class=\"std std-ref\">6/6-1#▲辞書内包表記</span></a></p></li>\n<li><p>実行時エラー <a class=\"reference internal\" href=\"1/1-4.html#実行時エラー\"><span class=\"std std-ref\">1/1-4#実行時エラー</span></a>, <a class=\"reference internal\" href=\"1/1-1.html#エラー\"><span class=\"std std-ref\">1/1-1#エラー</span></a></p></li>\n<li><p>実数 <a class=\"reference internal\" href=\"1/1-1.html#整数と実数\"><span class=\"std std-ref\">1/1-1#整数と実数</span></a></p></li>\n<li><p>実引数 <a class=\"reference internal\" href=\"3/3-3.html#引数\"><span class=\"std std-ref\">3/3-3#引数</span></a></p></li>\n<li><p>条件付き内包表記 <a class=\"reference internal\" href=\"6/6-1.html#▲条件付き内包表記\"><span class=\"std std-ref\">6/6-1#▲条件付き内包表記</span></a></p></li>\n<li><p>条件分岐 <a class=\"reference internal\" href=\"1/1-3.html#if文による条件分岐\"><span class=\"std std-ref\">1/1-3#if文による条件分岐</span></a>, <a class=\"reference internal\" href=\"2/2-3.html#2-3.-条件分岐\"><span class=\"std std-ref\">2/2-3#2-3. 条件分岐</span></a></p></li>\n<li><p>剰余 <a class=\"reference internal\" href=\"1/1-1.html#簡単な算術計算\"><span class=\"std std-ref\">1/1-1#簡単な算術計算</span></a></p></li>\n<li><p>除算 <a class=\"reference internal\" href=\"1/1-1.html#簡単な算術計算\"><span class=\"std std-ref\">1/1-1#簡単な算術計算</span></a></p></li>\n<li><p>数値誤差 <a class=\"reference internal\" href=\"1/1-1.html#数値誤差\"><span class=\"std std-ref\">1/1-1#数値誤差</span></a></p></li>\n<li><p>スライス <a class=\"reference internal\" href=\"7/7-1.html#データの参照\"><span class=\"std std-ref\">7/7-1#データの参照</span></a>, <a class=\"reference internal\" href=\"2/2-1.html#文字列とスライス\"><span class=\"std std-ref\">2/2-1#文字列とスライス</span></a>, <a class=\"reference internal\" href=\"5/5-3.html#スライス\"><span class=\"std std-ref\">5/5-3#スライス</span></a></p></li>\n<li><p>正規表現 <a class=\"reference internal\" href=\"appendix/5-re.html#▲正規表現\"><span class=\"std std-ref\">appendix/5-re#▲正規表現</span></a></p></li>\n<li><p>整数 <a class=\"reference internal\" href=\"1/1-1.html#整数と実数\"><span class=\"std std-ref\">1/1-1#整数と実数</span></a></p></li>\n<li><p>整数除算 <a class=\"reference internal\" href=\"1/1-1.html#簡単な算術計算\"><span class=\"std std-ref\">1/1-1#簡単な算術計算</span></a></p></li>\n<li><p>積集合 <a class=\"reference internal\" href=\"appendix/2-set.html#集合演算\"><span class=\"std std-ref\">appendix/2-set#集合演算</span></a>, <a class=\"reference internal\" href=\"appendix/2-set.html#union,-intersection,-difference\"><span class=\"std std-ref\">appendix/2-set#union, intersection, difference</span></a></p></li>\n<li><p>セット <a class=\"reference internal\" href=\"appendix/2-set.html#▲セット-(set)\"><span class=\"std std-ref\">appendix/2-set#▲セット (set)</span></a></p></li>\n<li><p>セット内包表記 <a class=\"reference internal\" href=\"6/6-1.html#▲セット内包表記\"><span class=\"std std-ref\">6/6-1#▲セット内包表記</span></a></p></li>\n<li><p>線形回帰 <a class=\"reference internal\" href=\"appendix/4-csv.html#東京の7月の気温\"><span class=\"std std-ref\">appendix/4-csv#東京の7月の気温</span></a>, <a class=\"reference internal\" href=\"7/7-2.html#教師あり学習・回帰の例\"><span class=\"std std-ref\">7/7-2#教師あり学習・回帰の例</span></a></p></li>\n<li><p>選択 <a class=\"reference internal\" href=\"appendix/5-re.html#正規表現の基本\"><span class=\"std std-ref\">appendix/5-re#正規表現の基本</span></a></p></li>\n<li><p>絶対パス <a class=\"reference internal\" href=\"4/4-3.html#パス\"><span class=\"std std-ref\">4/4-3#パス</span></a></p></li>\n<li><p>相対パス <a class=\"reference internal\" href=\"4/4-3.html#パス\"><span class=\"std std-ref\">4/4-3#パス</span></a></p></li>\n<li><p>祖先 <a class=\"reference internal\" href=\"4/4-3.html#木構造\"><span class=\"std std-ref\">4/4-3#木構造</span></a></p></li>\n<li><p>属性 <a class=\"reference internal\" href=\"6/6-3.html#初期化と属性\"><span class=\"std std-ref\">6/6-3#初期化と属性</span></a></p></li>\n<li><p>属性名 <a class=\"reference internal\" href=\"6/6-3.html#初期化と属性\"><span class=\"std std-ref\">6/6-3#初期化と属性</span></a></p></li>\n<li><p>対称差 <a class=\"reference internal\" href=\"appendix/2-set.html#集合演算\"><span class=\"std std-ref\">appendix/2-set#集合演算</span></a>, <a class=\"reference internal\" href=\"appendix/2-set.html#union,-intersection,-difference\"><span class=\"std std-ref\">appendix/2-set#union, intersection, difference</span></a></p></li>\n<li><p>足し算 <a class=\"reference internal\" href=\"1/1-1.html#簡単な算術計算\"><span class=\"std std-ref\">1/1-1#簡単な算術計算</span></a></p></li>\n<li><p>多次元配列 <a class=\"reference internal\" href=\"5/5-3.html#多次元配列\"><span class=\"std std-ref\">5/5-3#多次元配列</span></a></p></li>\n<li><p>多重代入 <a class=\"reference internal\" href=\"2/2-2.html#多重代入\"><span class=\"std std-ref\">2/2-2#多重代入</span></a></p></li>\n<li><p>多重リスト <a class=\"reference internal\" href=\"2/2-2.html#多重リスト\"><span class=\"std std-ref\">2/2-2#多重リスト</span></a></p></li>\n<li><p>タプル <a class=\"reference internal\" href=\"2/2-2.html#タプル-(tuple)\"><span class=\"std std-ref\">2/2-2#タプル (tuple)</span></a></p></li>\n<li><p>単項演算子 <a class=\"reference internal\" href=\"1/1-1.html#単項の-+-と--\"><span class=\"std std-ref\">1/1-1#単項の + と -</span></a></p></li>\n<li><p>代入 <a class=\"reference internal\" href=\"1/1-2.html#代入文\"><span class=\"std std-ref\">1/1-2#代入文</span></a></p></li>\n<li><p>代入演算子 <a class=\"reference internal\" href=\"1/1-2.html#累積代入文\"><span class=\"std std-ref\">1/1-2#累積代入文</span></a></p></li>\n<li><p>代入文 <a class=\"reference internal\" href=\"1/1-2.html#代入文\"><span class=\"std std-ref\">1/1-2#代入文</span></a></p></li>\n<li><p>置換 <a class=\"reference internal\" href=\"2/2-1.html#置換\"><span class=\"std std-ref\">2/2-1#置換</span></a></p></li>\n<li><p>テスト <a class=\"reference internal\" href=\"1/1-4.html#仕様・テスト・デバッグ\"><span class=\"std std-ref\">1/1-4#仕様・テスト・デバッグ</span></a></p></li>\n<li><p>テストケース <a class=\"reference internal\" href=\"1/1-4.html#仕様・テスト・デバッグ\"><span class=\"std std-ref\">1/1-4#仕様・テスト・デバッグ</span></a></p></li>\n<li><p>ディレクトリ <a class=\"reference internal\" href=\"4/4-3.html#ディレクトリと階層構造\"><span class=\"std std-ref\">4/4-3#ディレクトリと階層構造</span></a></p></li>\n<li><p>デバッグ <a class=\"reference internal\" href=\"1/1-2.html#print\"><span class=\"std std-ref\">1/1-2#print</span></a>, <a class=\"reference internal\" href=\"1/1-4.html#仕様・テスト・デバッグ\"><span class=\"std std-ref\">1/1-4#仕様・テスト・デバッグ</span></a></p></li>\n<li><p>データ型 <a class=\"reference internal\" href=\"2/2-1.html#2-1.-文字列-(string)\"><span class=\"std std-ref\">2/2-1#2-1. 文字列 (string)</span></a></p></li>\n<li><p>データフレーム <a class=\"reference internal\" href=\"7/7-1.html#シリーズとデータフレーム\"><span class=\"std std-ref\">7/7-1#シリーズとデータフレーム</span></a></p></li>\n<li><p>特殊メソッド <a class=\"reference internal\" href=\"6/6-3.html#特殊メソッド\"><span class=\"std std-ref\">6/6-3#特殊メソッド</span></a></p></li>\n<li><p>特徴量 <a class=\"reference internal\" href=\"7/7-2.html#データ\"><span class=\"std std-ref\">7/7-2#データ</span></a></p></li>\n<li><p>トップレベル <a class=\"reference internal\" href=\"1/1-2.html#▲グローバル変数\"><span class=\"std std-ref\">1/1-2#▲グローバル変数</span></a></p></li>\n<li><p>内包表記 <a class=\"reference internal\" href=\"6/6-1.html#6-1.-内包表記\"><span class=\"std std-ref\">6/6-1#6-1. 内包表記</span></a>, <a class=\"reference internal\" href=\"6/6-1.html#リスト内包表記\"><span class=\"std std-ref\">6/6-1#リスト内包表記</span></a>, <a class=\"reference internal\" href=\"2/2-2.html#for文によるリスト初期化の短縮記法\"><span class=\"std std-ref\">2/2-2#for文によるリスト初期化の短縮記法</span></a></p></li>\n<li><p>根 <a class=\"reference internal\" href=\"4/4-3.html#木構造\"><span class=\"std std-ref\">4/4-3#木構造</span></a></p></li>\n<li><p>ネスト <a class=\"reference internal\" href=\"6/6-1.html#内包表記の入れ子\"><span class=\"std std-ref\">6/6-1#内包表記の入れ子</span></a>, <a class=\"reference internal\" href=\"3/3-2.html#for文の入れ子\"><span class=\"std std-ref\">3/3-2#for文の入れ子</span></a>, <a class=\"reference internal\" href=\"2/2-3.html#if-...-else-による条件分岐\"><span class=\"std std-ref\">2/2-3#if … else による条件分岐</span></a></p></li>\n<li><p>ノード <a class=\"reference internal\" href=\"4/4-3.html#木構造\"><span class=\"std std-ref\">4/4-3#木構造</span></a></p></li>\n<li><p>葉 <a class=\"reference internal\" href=\"4/4-3.html#木構造\"><span class=\"std std-ref\">4/4-3#木構造</span></a></p></li>\n<li><p>配列 <a class=\"reference internal\" href=\"2/2-2.html#2-2.-リスト-(list)\"><span class=\"std std-ref\">2/2-2#2-2. リスト (list)</span></a>, <a class=\"reference internal\" href=\"5/5-3.html#配列の構築\"><span class=\"std std-ref\">5/5-3#配列の構築</span></a></p></li>\n<li><p>配列同士の演算 <a class=\"reference internal\" href=\"5/5-3.html#配列同士の演算\"><span class=\"std std-ref\">5/5-3#配列同士の演算</span></a></p></li>\n<li><p>配列のスカラ演算 <a class=\"reference internal\" href=\"5/5-3.html#配列のスカラ演算\"><span class=\"std std-ref\">5/5-3#配列のスカラ演算</span></a></p></li>\n<li><p>配列のデータ属性 <a class=\"reference internal\" href=\"5/5-3.html#▲配列のデータ属性\"><span class=\"std std-ref\">5/5-3#▲配列のデータ属性</span></a></p></li>\n<li><p>破壊的 <a class=\"reference internal\" href=\"2/2-2.html#破壊的（インプレース）な操作と非破壊的な生成\"><span class=\"std std-ref\">2/2-2#破壊的（インプレース）な操作と非破壊的な生成</span></a></p></li>\n<li><p>半角の空白 <a class=\"reference internal\" href=\"1/1-1.html#空白\"><span class=\"std std-ref\">1/1-1#空白</span></a></p></li>\n<li><p>バグ <a class=\"reference internal\" href=\"1/1-2.html#print\"><span class=\"std std-ref\">1/1-2#print</span></a>, <a class=\"reference internal\" href=\"1/1-4.html#仕様・テスト・デバッグ\"><span class=\"std std-ref\">1/1-4#仕様・テスト・デバッグ</span></a></p></li>\n<li><p>パス <a class=\"reference internal\" href=\"4/4-3.html#パス\"><span class=\"std std-ref\">4/4-3#パス</span></a></p></li>\n<li><p>パターン <a class=\"reference internal\" href=\"appendix/5-re.html#正規表現の基本\"><span class=\"std std-ref\">appendix/5-re#正規表現の基本</span></a></p></li>\n<li><p>比較演算 <a class=\"reference internal\" href=\"appendix/2-set.html#比較演算\"><span class=\"std std-ref\">appendix/2-set#比較演算</span></a></p></li>\n<li><p>比較演算子 <a class=\"reference internal\" href=\"1/1-3.html#様々な条件\"><span class=\"std std-ref\">1/1-3#様々な条件</span></a></p></li>\n<li><p>引き算 <a class=\"reference internal\" href=\"1/1-1.html#簡単な算術計算\"><span class=\"std std-ref\">1/1-1#簡単な算術計算</span></a></p></li>\n<li><p>引数 <a class=\"reference internal\" href=\"1/1-2.html#関数の定義と返値\"><span class=\"std std-ref\">1/1-2#関数の定義と返値</span></a>, <a class=\"reference internal\" href=\"1/1-2.html#関数の定義と返値\"><span class=\"std std-ref\">1/1-2#関数の定義と返値</span></a>, <a class=\"reference internal\" href=\"3/3-3.html#関数の定義\"><span class=\"std std-ref\">3/3-3#関数の定義</span></a></p></li>\n<li><p>ヒストグラム <a class=\"reference internal\" href=\"appendix/5-matplotlib.html#ヒストグラム\"><span class=\"std std-ref\">appendix/5-matplotlib#ヒストグラム</span></a></p></li>\n<li><p>否定文字クラス <a class=\"reference internal\" href=\"appendix/5-re.html#文字クラス\"><span class=\"std std-ref\">appendix/5-re#文字クラス</span></a></p></li>\n<li><p>非破壊的 <a class=\"reference internal\" href=\"2/2-2.html#破壊的（インプレース）な操作と非破壊的な生成\"><span class=\"std std-ref\">2/2-2#破壊的（インプレース）な操作と非破壊的な生成</span></a></p></li>\n<li><p>ヒートマップ <a class=\"reference internal\" href=\"appendix/5-matplotlib.html#ヒートマップ\"><span class=\"std std-ref\">appendix/5-matplotlib#ヒートマップ</span></a></p></li>\n<li><p>ファイル <a class=\"reference internal\" href=\"4/4-1.html#ファイルのオープン\"><span class=\"std std-ref\">4/4-1#ファイルのオープン</span></a></p></li>\n<li><p>ファイルオブジェクト <a class=\"reference internal\" href=\"4/4-1.html#ファイルのオープン\"><span class=\"std std-ref\">4/4-1#ファイルのオープン</span></a></p></li>\n<li><p>フォルダ <a class=\"reference internal\" href=\"4/4-3.html#ディレクトリと階層構造\"><span class=\"std std-ref\">4/4-3#ディレクトリと階層構造</span></a></p></li>\n<li><p>浮動小数点数 <a class=\"reference internal\" href=\"1/1-1.html#整数と実数\"><span class=\"std std-ref\">1/1-1#整数と実数</span></a></p></li>\n<li><p>分割統治 <a class=\"reference internal\" href=\"appendix/3-recursion.html#▲再帰\"><span class=\"std std-ref\">appendix/3-recursion#▲再帰</span></a></p></li>\n<li><p>閉包 <a class=\"reference internal\" href=\"appendix/5-re.html#正規表現の基本\"><span class=\"std std-ref\">appendix/5-re#正規表現の基本</span></a></p></li>\n<li><p>変数 <a class=\"reference internal\" href=\"1/1-2.html#変数\"><span class=\"std std-ref\">1/1-2#変数</span></a>, <a class=\"reference internal\" href=\"2/2-1.html#初心者によくある誤解-----変数と文字列の混乱\"><span class=\"std std-ref\">2/2-1#初心者によくある誤解 — 変数と文字列の混乱</span></a></p></li>\n<li><p>変数定義 <a class=\"reference internal\" href=\"1/1-2.html#変数\"><span class=\"std std-ref\">1/1-2#変数</span></a></p></li>\n<li><p>べき乗 <a class=\"reference internal\" href=\"1/1-1.html#簡単な算術計算\"><span class=\"std std-ref\">1/1-1#簡単な算術計算</span></a></p></li>\n<li><p>べき表示 <a class=\"reference internal\" href=\"1/1-1.html#実数のべき表示\"><span class=\"std std-ref\">1/1-1#実数のべき表示</span></a></p></li>\n<li><p>棒グラフ <a class=\"reference internal\" href=\"appendix/5-matplotlib.html#棒グラフ\"><span class=\"std std-ref\">appendix/5-matplotlib#棒グラフ</span></a></p></li>\n<li><p>マジックコマンド <a class=\"reference internal\" href=\"appendix/3-visualization.html#matplotlib\"><span class=\"std std-ref\">appendix/3-visualization#matplotlib</span></a></p></li>\n<li><p>マッチする <a class=\"reference internal\" href=\"appendix/5-re.html#正規表現の基本\"><span class=\"std std-ref\">appendix/5-re#正規表現の基本</span></a></p></li>\n<li><p>無名関数 <a class=\"reference internal\" href=\"6/6-2.html#ラムダ式\"><span class=\"std std-ref\">6/6-2#ラムダ式</span></a></p></li>\n<li><p>メソッド <a class=\"reference internal\" href=\"2/2-1.html#文字列とメソッド\"><span class=\"std std-ref\">2/2-1#文字列とメソッド</span></a></p></li>\n<li><p>文字クラス <a class=\"reference internal\" href=\"appendix/5-re.html#文字クラス\"><span class=\"std std-ref\">appendix/5-re#文字クラス</span></a></p></li>\n<li><p>文字コード <a class=\"reference internal\" href=\"appendix/4-csv.html#東京の7月の気温\"><span class=\"std std-ref\">appendix/4-csv#東京の7月の気温</span></a>, <a class=\"reference internal\" href=\"4/4-1.html#ファイルの読み書きにおける文字コード指定\"><span class=\"std std-ref\">4/4-1#ファイルの読み書きにおける文字コード指定</span></a></p></li>\n<li><p>文字コード宣言 <a class=\"reference internal\" href=\"appendix/5-command.html#文字コード宣言\"><span class=\"std std-ref\">appendix/5-command#文字コード宣言</span></a></p></li>\n<li><p>モジュール <a class=\"reference internal\" href=\"1/1-1.html#数学関数（モジュールのインポート）\"><span class=\"std std-ref\">1/1-1#数学関数（モジュールのインポート）</span></a>, <a class=\"reference internal\" href=\"5/5-1.html#モジュールのインポート\"><span class=\"std std-ref\">5/5-1#モジュールのインポート</span></a>, <a class=\"reference internal\" href=\"5/5-2.html#5-2.-モジュールの作り方\"><span class=\"std std-ref\">5/5-2#5-2. モジュールの作り方</span></a></p></li>\n<li><p>モジュール名 <a class=\"reference internal\" href=\"5/5-2.html#自作モジュールの使い方\"><span class=\"std std-ref\">5/5-2#自作モジュールの使い方</span></a></p></li>\n<li><p>モジュールレベル <a class=\"reference internal\" href=\"1/1-2.html#▲グローバル変数\"><span class=\"std std-ref\">1/1-2#▲グローバル変数</span></a></p></li>\n<li><p>文字列 <a class=\"reference internal\" href=\"2/2-1.html#2-1.-文字列-(string)\"><span class=\"std std-ref\">2/2-1#2-1. 文字列 (string)</span></a>, <a class=\"reference internal\" href=\"2/2-1.html#初心者によくある誤解-----変数と文字列の混乱\"><span class=\"std std-ref\">2/2-1#初心者によくある誤解 — 変数と文字列の混乱</span></a></p></li>\n<li><p>文字列の比較演算 <a class=\"reference internal\" href=\"2/2-1.html#文字列の比較演算\"><span class=\"std std-ref\">2/2-1#文字列の比較演算</span></a></p></li>\n<li><p>優先順位 <a class=\"reference internal\" href=\"1/1-1.html#演算子の優先順位と括弧\"><span class=\"std std-ref\">1/1-1#演算子の優先順位と括弧</span></a></p></li>\n<li><p>ユニバーサル関数 <a class=\"reference internal\" href=\"5/5-3.html#ユニバーサル関数\"><span class=\"std std-ref\">5/5-3#ユニバーサル関数</span></a></p></li>\n<li><p>読み込みモード <a class=\"reference internal\" href=\"4/4-1.html#ファイルのオープン\"><span class=\"std std-ref\">4/4-1#ファイルのオープン</span></a></p></li>\n<li><p>予約語 <a class=\"reference internal\" href=\"1/1-2.html#予約語\"><span class=\"std std-ref\">1/1-2#予約語</span></a></p></li>\n<li><p>ライブラリ <a class=\"reference internal\" href=\"1/1-1.html#数学関数（モジュールのインポート）\"><span class=\"std std-ref\">1/1-1#数学関数（モジュールのインポート）</span></a></p></li>\n<li><p>ラムダ式 <a class=\"reference internal\" href=\"6/6-2.html#ラムダ式\"><span class=\"std std-ref\">6/6-2#ラムダ式</span></a></p></li>\n<li><p>リスト <a class=\"reference internal\" href=\"2/2-2.html#2-2.-リスト-(list)\"><span class=\"std std-ref\">2/2-2#2-2. リスト (list)</span></a></p></li>\n<li><p>累算代入文 <a class=\"reference internal\" href=\"1/1-2.html#累積代入文\"><span class=\"std std-ref\">1/1-2#累積代入文</span></a></p></li>\n<li><p>ループ <a class=\"reference internal\" href=\"3/3-2.html#for文による繰り返し\"><span class=\"std std-ref\">3/3-2#for文による繰り返し</span></a></p></li>\n<li><p>連結 <a class=\"reference internal\" href=\"2/2-1.html#文字列の連結\"><span class=\"std std-ref\">2/2-1#文字列の連結</span></a></p></li>\n<li><p>連接 <a class=\"reference internal\" href=\"appendix/5-re.html#正規表現の基本\"><span class=\"std std-ref\">appendix/5-re#正規表現の基本</span></a></p></li>\n<li><p>ロジスティック回帰 <a class=\"reference internal\" href=\"7/7-2.html#教師あり学習・分類の例\"><span class=\"std std-ref\">7/7-2#教師あり学習・分類の例</span></a></p></li>\n<li><p>論理エラー <a class=\"reference internal\" href=\"1/1-4.html#論理エラー\"><span class=\"std std-ref\">1/1-4#論理エラー</span></a></p></li>\n<li><p>ローカル変数 <a class=\"reference internal\" href=\"1/1-2.html#ローカル変数\"><span class=\"std std-ref\">1/1-2#ローカル変数</span></a>, <a class=\"reference internal\" href=\"3/3-3.html#引数\"><span class=\"std std-ref\">3/3-3#引数</span></a>, <a class=\"reference internal\" href=\"3/3-3.html#変数とスコープ\"><span class=\"std std-ref\">3/3-3#変数とスコープ</span></a></p></li>\n<li><p>和 <a class=\"reference internal\" href=\"appendix/5-re.html#正規表現の基本\"><span class=\"std std-ref\">appendix/5-re#正規表現の基本</span></a></p></li>\n<li><p>ワイルドカード <a class=\"reference internal\" href=\"5/5-1.html#from\"><span class=\"std std-ref\">5/5-1#from</span></a></p></li>\n<li><p>和集合 <a class=\"reference internal\" href=\"appendix/2-set.html#集合演算\"><span class=\"std std-ref\">appendix/2-set#集合演算</span></a>, <a class=\"reference internal\" href=\"appendix/2-set.html#union,-intersection,-difference\"><span class=\"std std-ref\">appendix/2-set#union, intersection, difference</span></a></p></li>\n<li><p>割り算 <a class=\"reference internal\" href=\"1/1-1.html#簡単な算術計算\"><span class=\"std std-ref\">1/1-1#簡単な算術計算</span></a></p></li>\n<li><p>ワーキングディレクトリ <a class=\"reference internal\" href=\"4/4-3.html#カレントワーキングディレクトリ\"><span class=\"std std-ref\">4/4-3#カレントワーキングディレクトリ</span></a></p></li>\n</ul>\n</section>\n\n\n          </div>\n          \n        </div>\n      </div>\n      <div class=\"sphinxsidebar\" role=\"navigation\" aria-label=\"Main\">\n        <div class=\"sphinxsidebarwrapper\">\n<h1 class=\"logo\"><a href=\"index.html\">Pythonプログラミング入門</a></h1>\n\n\n\n\n\n\n\n\n<p>\n  <a style=\"font-family: sans-serif; font-size: smaller; background: linear-gradient(to top, #353535 0%, #141414 100%); -webkit-font-smoothing: antialiased; font-weight: normal; text-shadow: rgb(0 0 0 / 40%) 0 -1px 0; padding: 2px 6px; color: #fff; text-decoration: none; border-radius: 4px; border: 1px solid #0d0d0d; box-shadow: inset 0 1px 1px 0 #8f8f8f;\" href=\"https://github.com/utokyo-ipp/utokyo-ipp.github.io\">View on GitHub</a>\n</p><p>\n  <a style=\"font-family: sans-serif; font-size: smaller; background: linear-gradient(to top, #ff1e00 0%, #de1e00 100%); -webkit-font-smoothing: antialiased; font-weight: normal; text-shadow: rgb(0 0 0 / 40%) 0 -1px 0; padding: 2px 6px; color: #fff; text-decoration: none; border-radius: 4px; border: 1px solid #0d0d0d; box-shadow: inset 0 1px 1px 0 #ff8e70;\" href=\"https://utokyo-ipp.github.io/IPP_textbook.pdf\">View PDF</a>\n</p><p>\n  <a style=\"border-bottom: none;\" href=\"https://colab.research.google.com/github/utokyo-ipp/utokyo-ipp.github.io/blob/master/colab/index_of_terms.ipynb\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Google Colaboratory\"></a>\n</p><h3>Navigation</h3>\n<ul class=\"current\">\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"1/1-0.html\">1-0. Colaboratory (Colab) の使い方</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"1/1-1.html\">1-1. 数値演算</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"1/1-2.html\">1-2. 変数と関数の基礎</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"1/1-3.html\">1-3. 論理・比較演算と条件分岐の基礎</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"1/1-4.html\">1-4. テストとデバッグ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"2/2-1.html\">2-1. 文字列 (string)</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"2/2-2.html\">2-2. リスト (list)</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"2/2-3.html\">2-3. 条件分岐</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"3/3-1.html\">3-1. 辞書 (dictionary)</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"3/3-2.html\">3-2. 繰り返し</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"3/3-3.html\">3-3. 関数</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"4/4-1.html\">4-1. ファイル入出力の基本</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"4/4-2.html\">4-2. イテラブルとイテレータ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"4/4-3.html\">4-3. ディレクトリと木構造</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"5/5-1.html\">5-1. モジュールの使い方</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"5/5-2.html\">5-2. モジュールの作り方</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"5/5-3.html\">5-3. NumPyライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"6/6-1.html\">6-1. 内包表記</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"6/6-2.html\">6-2. 高階関数</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"6/6-3.html\">6-3. クラス</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"7/7-1.html\">7-1. pandasライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"7/7-2.html\">7-2. scikit-learnライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"appendix/1-jupyter-notebook.html\">▲Jupyter Notebook の使い方</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"appendix/2-set.html\">▲セット (set)</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"appendix/3-recursion.html\">▲再帰</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"appendix/3-visualization.html\">▲簡単なデータの可視化</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"appendix/4-csv.html\">▲CSVファイルの入出力</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"appendix/5-bokeh.html\">▲Bokehライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"appendix/5-command.html\">▲Pythonスクリプトとコマンドライン実行</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"appendix/5-matplotlib.html\">▲Matplotlibライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"appendix/5-re.html\">▲正規表現</a></li>\n<li class=\"toctree-l1 current\"><a class=\"current reference internal\" href=\"#\">索引</a></li>\n</ul>\n\n<div class=\"relations\">\n<h3>Related Topics</h3>\n<ul>\n  <li><a href=\"index.html\">Documentation overview</a><ul>\n      <li>Previous: <a href=\"appendix/5-re.html\" title=\"previous chapter\">▲正規表現</a></li>\n  </ul></li>\n</ul>\n</div>\n<search id=\"searchbox\" style=\"display: none\" role=\"search\">\n  <h3 id=\"searchlabel\">Quick search</h3>\n    <div class=\"searchformwrapper\">\n    <form class=\"search\" action=\"search.html\" method=\"get\">\n      <input type=\"text\" name=\"q\" aria-labelledby=\"searchlabel\" autocomplete=\"off\" autocorrect=\"off\" autocapitalize=\"off\" spellcheck=\"false\"/>\n      <input type=\"submit\" value=\"Go\" />\n    </form>\n    </div>\n</search>\n<script>document.getElementById('searchbox').style.display = \"block\"</script>\n\n\n\n\n\n\n\n\n        </div>\n      </div>\n      <div class=\"clearer\"></div>\n    </div>\n    <div class=\"footer\">\n      &#169;2020–2024, 東京大学 数理・情報教育研究センター (CC BY-NC-ND 4.0).\n      \n      |\n      Powered by <a href=\"https://www.sphinx-doc.org/\">Sphinx 8.0.2</a>\n      &amp; <a href=\"https://alabaster.readthedocs.io\">Alabaster 1.0.0</a>\n      \n    </div>\n\n    \n\n    \n    <script>\n\n      var _gaq = _gaq || [];\n      _gaq.push(['_setAccount', 'G-8M0RXGPPSR']);\n      _gaq.push(['_setDomainName', 'none']);\n      _gaq.push(['_setAllowLinker', true]);\n      _gaq.push(['_trackPageview']);\n\n      (function() {\n        var ga = document.createElement('script'); ga.async = true;\n        ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'https://www') + '.google-analytics.com/ga.js';\n        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);\n      })();\n\n    </script>\n    \n  </body>\n</html>"
  },
  {
    "path": "docs/search.html",
    "content": "<!DOCTYPE html>\n\n<html lang=\"jp\" data-content_root=\"./\">\n  <head>\n    <meta charset=\"utf-8\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n    <!-- Google tag (gtag.js) -->\n    <script async src=\"https://www.googletagmanager.com/gtag/js?id=G-8M0RXGPPSR\"></script>\n    <script>\n        window.dataLayer = window.dataLayer || [];\n        function gtag(){dataLayer.push(arguments);}\n        gtag('js', new Date());\n        gtag('config', 'G-8M0RXGPPSR');\n    </script>\n    \n    <title>Search &#8212; Pythonプログラミング入門  documentation</title>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"_static/pygments.css?v=d1102ebc\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"_static/basic.css?v=c058f7c8\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"_static/alabaster.css?v=27fed22d\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"_static/custom.css?v=1a1aa8dd\" />\n    \n    <script src=\"_static/documentation_options.js?v=3ff7d7a7\"></script>\n    <script src=\"_static/doctools.js?v=9a2dae69\"></script>\n    <script src=\"_static/sphinx_highlight.js?v=dc90522c\"></script>\n    <script crossorigin=\"anonymous\" integrity=\"sha256-Ae2Vz/4ePdIu6ZyI/5ZGsYnb+m0JlOmKPjt6XZ9JJkA=\" src=\"https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.4/require.min.js\"></script>\n    <script src=\"_static/searchtools.js\"></script>\n    <script src=\"_static/language_data.js\"></script>\n    <link rel=\"index\" title=\"Index\" href=\"genindex.html\" />\n    <link rel=\"search\" title=\"Search\" href=\"#\" />\n    <script src=\"searchindex.js\" defer=\"defer\"></script>\n    <meta name=\"robots\" content=\"noindex\" />\n    \n   \n  <link rel=\"stylesheet\" href=\"_static/custom.css\" type=\"text/css\" />\n  \n\n  \n  \n\n\n  </head><body>\n  \n\n    <div class=\"document\">\n      <div class=\"documentwrapper\">\n        <div class=\"bodywrapper\">\n          \n\n          <div class=\"body\" role=\"main\">\n            \n  <h1 id=\"search-documentation\">Search</h1>\n  \n  <noscript>\n  <div class=\"admonition warning\">\n  <p>\n    Please activate JavaScript to enable the search\n    functionality.\n  </p>\n  </div>\n  </noscript>\n  \n  \n  <p>\n    Searching for multiple words only shows matches that contain\n    all words.\n  </p>\n  \n  \n  <form action=\"\" method=\"get\">\n    <input type=\"text\" name=\"q\" aria-labelledby=\"search-documentation\" value=\"\" autocomplete=\"off\" autocorrect=\"off\" autocapitalize=\"off\" spellcheck=\"false\"/>\n    <input type=\"submit\" value=\"search\" />\n    <span id=\"search-progress\" style=\"padding-left: 10px\"></span>\n  </form>\n  \n  \n  <div id=\"search-results\"></div>\n  \n\n          </div>\n          \n        </div>\n      </div>\n      <div class=\"sphinxsidebar\" role=\"navigation\" aria-label=\"Main\">\n        <div class=\"sphinxsidebarwrapper\">\n<h1 class=\"logo\"><a href=\"index.html\">Pythonプログラミング入門</a></h1>\n\n\n\n\n\n\n\n\n<p>\n  <a style=\"font-family: sans-serif; font-size: smaller; background: linear-gradient(to top, #353535 0%, #141414 100%); -webkit-font-smoothing: antialiased; font-weight: normal; text-shadow: rgb(0 0 0 / 40%) 0 -1px 0; padding: 2px 6px; color: #fff; text-decoration: none; border-radius: 4px; border: 1px solid #0d0d0d; box-shadow: inset 0 1px 1px 0 #8f8f8f;\" href=\"https://github.com/utokyo-ipp/utokyo-ipp.github.io\">View on GitHub</a>\n</p><p>\n  <a style=\"font-family: sans-serif; font-size: smaller; background: linear-gradient(to top, #ff1e00 0%, #de1e00 100%); -webkit-font-smoothing: antialiased; font-weight: normal; text-shadow: rgb(0 0 0 / 40%) 0 -1px 0; padding: 2px 6px; color: #fff; text-decoration: none; border-radius: 4px; border: 1px solid #0d0d0d; box-shadow: inset 0 1px 1px 0 #ff8e70;\" href=\"https://utokyo-ipp.github.io/IPP_textbook.pdf\">View PDF</a>\n</p><p>\n  <a style=\"border-bottom: none;\" href=\"https://colab.research.google.com/github/utokyo-ipp/utokyo-ipp.github.io/blob/master/colab/search.ipynb\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Google Colaboratory\"></a>\n</p><h3>Navigation</h3>\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"1/1-0.html\">1-0. Colaboratory (Colab) の使い方</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"1/1-1.html\">1-1. 数値演算</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"1/1-2.html\">1-2. 変数と関数の基礎</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"1/1-3.html\">1-3. 論理・比較演算と条件分岐の基礎</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"1/1-4.html\">1-4. テストとデバッグ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"2/2-1.html\">2-1. 文字列 (string)</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"2/2-2.html\">2-2. リスト (list)</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"2/2-3.html\">2-3. 条件分岐</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"3/3-1.html\">3-1. 辞書 (dictionary)</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"3/3-2.html\">3-2. 繰り返し</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"3/3-3.html\">3-3. 関数</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"4/4-1.html\">4-1. ファイル入出力の基本</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"4/4-2.html\">4-2. イテラブルとイテレータ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"4/4-3.html\">4-3. ディレクトリと木構造</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"5/5-1.html\">5-1. モジュールの使い方</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"5/5-2.html\">5-2. モジュールの作り方</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"5/5-3.html\">5-3. NumPyライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"6/6-1.html\">6-1. 内包表記</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"6/6-2.html\">6-2. 高階関数</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"6/6-3.html\">6-3. クラス</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"7/7-1.html\">7-1. pandasライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"7/7-2.html\">7-2. scikit-learnライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"appendix/1-jupyter-notebook.html\">▲Jupyter Notebook の使い方</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"appendix/2-set.html\">▲セット (set)</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"appendix/3-recursion.html\">▲再帰</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"appendix/3-visualization.html\">▲簡単なデータの可視化</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"appendix/4-csv.html\">▲CSVファイルの入出力</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"appendix/5-bokeh.html\">▲Bokehライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"appendix/5-command.html\">▲Pythonスクリプトとコマンドライン実行</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"appendix/5-matplotlib.html\">▲Matplotlibライブラリ</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"appendix/5-re.html\">▲正規表現</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"index_of_terms.html\">索引</a></li>\n</ul>\n\n<div class=\"relations\">\n<h3>Related Topics</h3>\n<ul>\n  <li><a href=\"index.html\">Documentation overview</a><ul>\n  </ul></li>\n</ul>\n</div>\n\n\n\n\n\n\n\n\n        </div>\n      </div>\n      <div class=\"clearer\"></div>\n    </div>\n    <div class=\"footer\">\n      &#169;2020–2024, 東京大学 数理・情報教育研究センター (CC BY-NC-ND 4.0).\n      \n      |\n      Powered by <a href=\"https://www.sphinx-doc.org/\">Sphinx 8.0.2</a>\n      &amp; <a href=\"https://alabaster.readthedocs.io\">Alabaster 1.0.0</a>\n      \n    </div>\n\n    \n\n    \n    <script>\n\n      var _gaq = _gaq || [];\n      _gaq.push(['_setAccount', 'G-8M0RXGPPSR']);\n      _gaq.push(['_setDomainName', 'none']);\n      _gaq.push(['_setAllowLinker', true]);\n      _gaq.push(['_trackPageview']);\n\n      (function() {\n        var ga = document.createElement('script'); ga.async = true;\n        ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'https://www') + '.google-analytics.com/ga.js';\n        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);\n      })();\n\n    </script>\n    \n  </body>\n</html>"
  },
  {
    "path": "docs/searchindex.js",
    "content": "Search.setIndex({\"alltitles\": {\"1-0. Colaboratory (Colab) \\u306e\\u4f7f\\u3044\\u65b9\": [[0, null]], \"1-1. \\u6570\\u5024\\u6f14\\u7b97\": [[1, null]], \"1-2. \\u5909\\u6570\\u3068\\u95a2\\u6570\\u306e\\u57fa\\u790e\": [[2, null]], \"1-3. \\u8ad6\\u7406\\u30fb\\u6bd4\\u8f03\\u6f14\\u7b97\\u3068\\u6761\\u4ef6\\u5206\\u5c90\\u306e\\u57fa\\u790e\": [[3, null]], \"1-4. \\u30c6\\u30b9\\u30c8\\u3068\\u30c7\\u30d0\\u30c3\\u30b0\": [[4, null]], \"2-1. \\u6587\\u5b57\\u5217 (string)\": [[5, null]], \"2-2. \\u30ea\\u30b9\\u30c8 (list)\": [[6, null]], \"2-3. \\u6761\\u4ef6\\u5206\\u5c90\": [[7, null]], \"3-1. \\u8f9e\\u66f8 (dictionary)\": [[8, null]], \"3-2. \\u7e70\\u308a\\u8fd4\\u3057\": [[9, null]], \"3-3. \\u95a2\\u6570\": [[10, null]], \"4-1. \\u30d5\\u30a1\\u30a4\\u30eb\\u5165\\u51fa\\u529b\\u306e\\u57fa\\u672c\": [[11, null]], \"4-2. \\u30a4\\u30c6\\u30e9\\u30d6\\u30eb\\u3068\\u30a4\\u30c6\\u30ec\\u30fc\\u30bf\": [[12, null]], \"4-3. \\u30c7\\u30a3\\u30ec\\u30af\\u30c8\\u30ea\\u3068\\u6728\\u69cb\\u9020\": [[13, null]], \"5-1. \\u30e2\\u30b8\\u30e5\\u30fc\\u30eb\\u306e\\u4f7f\\u3044\\u65b9\": [[14, null]], \"5-2. \\u30e2\\u30b8\\u30e5\\u30fc\\u30eb\\u306e\\u4f5c\\u308a\\u65b9\": [[15, null]], \"5-3. NumPy\\u30e9\\u30a4\\u30d6\\u30e9\\u30ea\": [[16, null]], \"6-1. \\u5185\\u5305\\u8868\\u8a18\": [[17, null]], \"6-2. \\u9ad8\\u968e\\u95a2\\u6570\": [[18, null]], \"6-3. \\u30af\\u30e9\\u30b9\": [[19, null]], \"7-1. pandas\\u30e9\\u30a4\\u30d6\\u30e9\\u30ea\": [[20, null]], \"7-2. scikit-learn\\u30e9\\u30a4\\u30d6\\u30e9\\u30ea\": [[21, null]], \"CSV\\u30d5\\u30a1\\u30a4\\u30eb\\u304b\\u3089\\u306e\\u30c7\\u30fc\\u30bf\\u30d5\\u30ec\\u30fc\\u30e0\\u306e\\u4f5c\\u6210\": [[20, \"CSV\\u30d5\\u30a1\\u30a4\\u30eb\\u304b\\u3089\\u306e\\u30c7\\u30fc\\u30bf\\u30d5\\u30ec\\u30fc\\u30e0\\u306e\\u4f5c\\u6210\"]], \"CSV\\u30d5\\u30a1\\u30a4\\u30eb\\u306b\\u5bfe\\u3059\\u308bfor\\u6587\": [[26, \"CSV\\u30d5\\u30a1\\u30a4\\u30eb\\u306b\\u5bfe\\u3059\\u308bfor\\u6587\"]], \"CSV\\u30d5\\u30a1\\u30a4\\u30eb\\u306b\\u5bfe\\u3059\\u308bwith\\u6587\": [[26, \"CSV\\u30d5\\u30a1\\u30a4\\u30eb\\u306b\\u5bfe\\u3059\\u308bwith\\u6587\"]], \"CSV\\u30d5\\u30a1\\u30a4\\u30eb\\u306e\\u66f8\\u304d\\u8fbc\\u307f\": [[26, \"CSV\\u30d5\\u30a1\\u30a4\\u30eb\\u306e\\u66f8\\u304d\\u8fbc\\u307f\"]], \"CSV\\u30d5\\u30a1\\u30a4\\u30eb\\u306e\\u8aad\\u307f\\u8fbc\\u307f\": [[26, \"CSV\\u30d5\\u30a1\\u30a4\\u30eb\\u306e\\u8aad\\u307f\\u8fbc\\u307f\"]], \"CSV\\u5f62\\u5f0f\\u3068\\u306f\": [[26, \"CSV\\u5f62\\u5f0f\\u3068\\u306f\"]], \"Colaboratory\\u306e\\u7acb\\u3061\\u4e0a\\u3052\": [[0, \"Colaboratory\\u306e\\u7acb\\u3061\\u4e0a\\u3052\"]], \"Jupyter Notebook \\u3067\\u306e\\u5b9f\\u884c\\u65b9\\u6cd5\": [[28, \"Jupyter-Notebook-\\u3067\\u306e\\u5b9f\\u884c\\u65b9\\u6cd5\"]], \"None\": [[3, \"None\"]], \"Python\\u30d7\\u30ed\\u30b0\\u30e9\\u30df\\u30f3\\u30b0\\u5165\\u9580\": [[31, null]], \"Windows\\u3067\\u306e\\u5b9f\\u884c\\u65b9\\u6cd5\": [[28, \"Windows\\u3067\\u306e\\u5b9f\\u884c\\u65b9\\u6cd5\"]], \"add\": [[23, \"add\"]], \"arange\": [[16, \"arange\"]], \"as\": [[14, \"as\"]], \"assert\\u6587\": [[4, \"assert\\u6587\"]], \"break\\u6587\": [[9, \"break\\u6587\"]], \"clear\": [[23, \"clear\"]], \"continue\\u6587\": [[9, \"continue\\u6587\"]], \"discard\": [[23, \"discard\"]], \"dot\": [[16, \"dot\"]], \"enumerate\": [[9, \"enumerate\"]], \"filter\": [[18, \"filter\"]], \"findall\": [[30, \"findall\"]], \"finditer\": [[30, \"finditer\"]], \"for\\u6587\": [[16, \"for\\u6587\"]], \"for\\u6587\\u3068\\u30a4\\u30c6\\u30e9\\u30d6\\u30eb\\u3068\\u30a4\\u30c6\\u30ec\\u30fc\\u30bf\": [[12, \"for\\u6587\\u3068\\u30a4\\u30c6\\u30e9\\u30d6\\u30eb\\u3068\\u30a4\\u30c6\\u30ec\\u30fc\\u30bf\"]], \"for\\u6587\\u306b\\u3088\\u308b\\u30ea\\u30b9\\u30c8\\u521d\\u671f\\u5316\\u306e\\u77ed\\u7e2e\\u8a18\\u6cd5\": [[6, \"for\\u6587\\u306b\\u3088\\u308b\\u30ea\\u30b9\\u30c8\\u521d\\u671f\\u5316\\u306e\\u77ed\\u7e2e\\u8a18\\u6cd5\"]], \"for\\u6587\\u306b\\u3088\\u308b\\u7e70\\u308a\\u8fd4\\u3057\": [[9, \"for\\u6587\\u306b\\u3088\\u308b\\u7e70\\u308a\\u8fd4\\u3057\"]], \"for\\u6587\\u306b\\u3088\\u308b\\u7e70\\u308a\\u8fd4\\u3057\\u3068\\u30d5\\u30a1\\u30a4\\u30eb\\u30aa\\u30d6\\u30b8\\u30a7\\u30af\\u30c8\": [[12, \"for\\u6587\\u306b\\u3088\\u308b\\u7e70\\u308a\\u8fd4\\u3057\\u3068\\u30d5\\u30a1\\u30a4\\u30eb\\u30aa\\u30d6\\u30b8\\u30a7\\u30af\\u30c8\"]], \"for\\u6587\\u306b\\u3088\\u308b\\u7e70\\u308a\\u8fd4\\u3057\\u3068\\u30ea\\u30b9\\u30c8\\u30fb\\u30bf\\u30d7\\u30eb\": [[6, \"for\\u6587\\u306b\\u3088\\u308b\\u7e70\\u308a\\u8fd4\\u3057\\u3068\\u30ea\\u30b9\\u30c8\\u30fb\\u30bf\\u30d7\\u30eb\"]], \"for\\u6587\\u306b\\u3088\\u308b\\u7e70\\u308a\\u8fd4\\u3057\\u3068\\u6587\\u5b57\\u5217\": [[6, \"for\\u6587\\u306b\\u3088\\u308b\\u7e70\\u308a\\u8fd4\\u3057\\u3068\\u6587\\u5b57\\u5217\"]], \"for\\u6587\\u306b\\u3088\\u308b\\u7e70\\u308a\\u8fd4\\u3057\\u3068\\u8f9e\\u66f8\": [[9, \"for\\u6587\\u306b\\u3088\\u308b\\u7e70\\u308a\\u8fd4\\u3057\\u3068\\u8f9e\\u66f8\"]], \"for\\u6587\\u306e\\u4ed5\\u7d44\\u307f\": [[12, \"for\\u6587\\u306e\\u4ed5\\u7d44\\u307f\"]], \"for\\u6587\\u306e\\u5165\\u308c\\u5b50\": [[9, \"for\\u6587\\u306e\\u5165\\u308c\\u5b50\"]], \"for\\u6587\\u306e\\u8a08\\u7b97\\u91cf\": [[9, \"for\\u6587\\u306e\\u8a08\\u7b97\\u91cf\"]], \"from\": [[14, \"from\"]], \"group\": [[30, \"group\"]], \"if \\u2026 elif \\u2026 else \\u306b\\u304a\\u3051\\u308b\\u6761\\u4ef6\\u306e\\u8a55\\u4fa1\": [[7, \"if-...-elif-...-else-\\u306b\\u304a\\u3051\\u308b\\u6761\\u4ef6\\u306e\\u8a55\\u4fa1\"]], \"if \\u2026 elif \\u2026 else \\u306b\\u3088\\u308b\\u6761\\u4ef6\\u5206\\u5c90\": [[7, \"if-...-elif-...-else-\\u306b\\u3088\\u308b\\u6761\\u4ef6\\u5206\\u5c90\"]], \"if \\u2026 else \\u306b\\u3088\\u308b\\u6761\\u4ef6\\u5206\\u5c90\": [[7, \"if-...-else-\\u306b\\u3088\\u308b\\u6761\\u4ef6\\u5206\\u5c90\"]], \"if\\u6587\\u306b\\u3088\\u308b\\u6761\\u4ef6\\u5206\\u5c90\": [[3, \"if\\u6587\\u306b\\u3088\\u308b\\u6761\\u4ef6\\u5206\\u5c90\"]], \"iloc \\u3068 loc\": [[20, \"iloc-\\u3068-loc\"]], \"in\": [[9, \"in\"]], \"iter\": [[12, \"iter\"]], \"linspace\": [[16, \"linspace\"]], \"macOS \\u3067\\u306e\\u5b9f\\u884c\\u65b9\\u6cd5\": [[28, \"macOS-\\u3067\\u306e\\u5b9f\\u884c\\u65b9\\u6cd5\"]], \"map\": [[18, \"map\"]], \"matplotlib\": [[25, \"matplotlib\"]], \"max\": [[18, \"max\"]], \"max \\u3068 min\": [[6, \"max-\\u3068-min\"]], \"next\": [[12, \"next\"]], \"or \\u3082\\u3057\\u304f\\u306f and \\u3067\\u7d50\\u5408\\u3055\\u308c\\u305f\\u6761\\u4ef6\\u306e\\u8a55\\u4fa1\": [[7, \"or-\\u3082\\u3057\\u304f\\u306f-and-\\u3067\\u7d50\\u5408\\u3055\\u308c\\u305f\\u6761\\u4ef6\\u306e\\u8a55\\u4fa1\"]], \"pass\\u6587\": [[9, \"pass\\u6587\"]], \"pop\": [[23, \"pop\"]], \"print\": [[2, \"print\"]], \"print \\u3068 return\": [[2, \"print-\\u3068-return\"]], \"r \\u3092\\u4ed8\\u3051\\u308b\\u7406\\u7531\": [[30, \"r-\\u3092\\u4ed8\\u3051\\u308b\\u7406\\u7531\"]], \"random.rand\": [[16, \"random.rand\"]], \"range\": [[9, \"range\"]], \"range \\u3068\\u30ea\\u30b9\\u30c8\": [[9, \"range-\\u3068\\u30ea\\u30b9\\u30c8\"]], \"re.split\": [[30, \"re.split\"]], \"remove\": [[23, \"remove\"]], \"shebang\": [[28, \"shebang\"]], \"sort\": [[16, \"sort\"]], \"sorted\": [[18, \"sorted\"]], \"sub\": [[30, \"sub\"]], \"sum\": [[6, \"sum\"]], \"sum, max, min, mean\": [[16, \"sum,-max,-min,-mean\"]], \"union, intersection, difference\": [[23, \"union,-intersection,-difference\"]], \"while\\u6587\\u306b\\u3088\\u308b\\u7e70\\u308a\\u8fd4\\u3057\": [[9, \"while\\u6587\\u306b\\u3088\\u308b\\u7e70\\u308a\\u8fd4\\u3057\"]], \"zeros \\u3068 ones\": [[16, \"zeros-\\u3068-ones\"]], \"\\u25b2 copy\": [[6, \"\\u25b2-copy\"]], \"\\u25b2 global \\u5ba3\\u8a00\": [[10, \"\\u25b2-global-\\u5ba3\\u8a00\"]], \"\\u25b2 keys, values, items \\u306e\\u8fd4\\u5024\": [[8, \"\\u25b2-keys,-values,-items-\\u306e\\u8fd4\\u5024\"]], \"\\u25b23\\u9805\\u6f14\\u7b97\\u5b50\\uff08\\u6761\\u4ef6\\u5f0f\\uff09\": [[7, \"\\u25b23\\u9805\\u6f14\\u7b97\\u5b50\\uff08\\u6761\\u4ef6\\u5f0f\\uff09\"]], \"\\u25b2Bokeh\\u30e9\\u30a4\\u30d6\\u30e9\\u30ea\": [[27, null]], \"\\u25b2CSV\\u30d5\\u30a1\\u30a4\\u30eb\\u306e\\u5165\\u51fa\\u529b\": [[26, null]], \"\\u25b2Jupyter Notebook \\u306e\\u4f7f\\u3044\\u65b9\": [[22, null]], \"\\u25b2Matplotlib\\u30e9\\u30a4\\u30d6\\u30e9\\u30ea\": [[29, null]], \"\\u25b2Python\\u30b9\\u30af\\u30ea\\u30d7\\u30c8\\u3068\\u30b3\\u30de\\u30f3\\u30c9\\u30e9\\u30a4\\u30f3\\u5b9f\\u884c\": [[28, null]], \"\\u25b2for\\u6587\\u3068while\\u6587\\u306b\\u304a\\u3051\\u308b else\": [[9, \"\\u25b2for\\u6587\\u3068while\\u6587\\u306b\\u304a\\u3051\\u308b-else\"]], \"\\u25b2with\\u6587\\u3078\\u306e\\u5bfe\\u5fdc\": [[19, \"\\u25b2with\\u6587\\u3078\\u306e\\u5bfe\\u5fdc\"]], \"\\u25b2\\u30a4\\u30c6\\u30e9\\u30d6\\u30eb\\u3068\\u30a4\\u30c6\\u30ec\\u30fc\\u30bf\\u306e\\u5b9a\\u7fa9\": [[12, \"\\u25b2\\u30a4\\u30c6\\u30e9\\u30d6\\u30eb\\u3068\\u30a4\\u30c6\\u30ec\\u30fc\\u30bf\\u306e\\u5b9a\\u7fa9\"]], \"\\u25b2\\u30a8\\u30b9\\u30b1\\u30fc\\u30d7\\u30b7\\u30fc\\u30b1\\u30f3\\u30b9\": [[5, \"\\u25b2\\u30a8\\u30b9\\u30b1\\u30fc\\u30d7\\u30b7\\u30fc\\u30b1\\u30f3\\u30b9\"]], \"\\u25b2\\u30aa\\u30d6\\u30b8\\u30a7\\u30af\\u30c8\\u306e\\u7b49\\u4fa1\\u6027\\u3068\\u540c\\u4e00\\u6027\": [[6, \"\\u25b2\\u30aa\\u30d6\\u30b8\\u30a7\\u30af\\u30c8\\u306e\\u7b49\\u4fa1\\u6027\\u3068\\u540c\\u4e00\\u6027\"]], \"\\u25b2\\u30ad\\u30fc\\u304c\\u306a\\u3044\\u5834\\u5408\\u306b\\u767b\\u9332\\u3092\\u884c\\u3046\": [[8, \"\\u25b2\\u30ad\\u30fc\\u304c\\u306a\\u3044\\u5834\\u5408\\u306b\\u767b\\u9332\\u3092\\u884c\\u3046\"]], \"\\u25b2\\u30ad\\u30fc\\u3092\\u6307\\u5b9a\\u3057\\u305f\\u524a\\u9664\": [[8, \"\\u25b2\\u30ad\\u30fc\\u3092\\u6307\\u5b9a\\u3057\\u305f\\u524a\\u9664\"]], \"\\u25b2\\u30ad\\u30fc\\u30ef\\u30fc\\u30c9\\u5f15\\u6570\": [[10, \"\\u25b2\\u30ad\\u30fc\\u30ef\\u30fc\\u30c9\\u5f15\\u6570\"]], \"\\u25b2\\u30b0\\u30ed\\u30fc\\u30d0\\u30eb\\u5909\\u6570\": [[2, \"\\u25b2\\u30b0\\u30ed\\u30fc\\u30d0\\u30eb\\u5909\\u6570\"]], \"\\u25b2\\u30b8\\u30a7\\u30cd\\u30ec\\u30fc\\u30bf\\u5f0f\": [[17, \"\\u25b2\\u30b8\\u30a7\\u30cd\\u30ec\\u30fc\\u30bf\\u5f0f\"]], \"\\u25b2\\u30bb\\u30c3\\u30c8 (set)\": [[23, null]], \"\\u25b2\\u30bb\\u30c3\\u30c8\\u5185\\u5305\\u8868\\u8a18\": [[17, \"\\u25b2\\u30bb\\u30c3\\u30c8\\u5185\\u5305\\u8868\\u8a18\"]], \"\\u25b2\\u30c7\\u30fc\\u30bf\\u306e\\u30b0\\u30eb\\u30fc\\u30d7\\u5316\": [[20, \"\\u25b2\\u30c7\\u30fc\\u30bf\\u306e\\u30b0\\u30eb\\u30fc\\u30d7\\u5316\"]], \"\\u25b2\\u30c7\\u30fc\\u30bf\\u306e\\u7d50\\u5408\": [[20, \"\\u25b2\\u30c7\\u30fc\\u30bf\\u306e\\u7d50\\u5408\"]], \"\\u25b2\\u30c7\\u30fc\\u30bf\\u306e\\u9023\\u7d50\": [[20, \"\\u25b2\\u30c7\\u30fc\\u30bf\\u306e\\u9023\\u7d50\"]], \"\\u25b2\\u30ea\\u30b9\\u30c8\\u304b\\u3089\\u30a4\\u30f3\\u30c7\\u30c3\\u30af\\u30b9\\u3067\\u6307\\u5b9a\\u3057\\u305f\\u8981\\u7d20\\u3092\\u524a\\u9664\\u3059\\u308b\": [[6, \"\\u25b2\\u30ea\\u30b9\\u30c8\\u304b\\u3089\\u30a4\\u30f3\\u30c7\\u30c3\\u30af\\u30b9\\u3067\\u6307\\u5b9a\\u3057\\u305f\\u8981\\u7d20\\u3092\\u524a\\u9664\\u3059\\u308b\"]], \"\\u25b2\\u30ea\\u30b9\\u30c8\\u304b\\u3089\\u8981\\u7d20\\u3092\\u524a\\u9664\\u3059\\u308b\": [[6, \"\\u25b2\\u30ea\\u30b9\\u30c8\\u304b\\u3089\\u8981\\u7d20\\u3092\\u524a\\u9664\\u3059\\u308b\"]], \"\\u25b2\\u30ea\\u30b9\\u30c8\\u306b\\u30ea\\u30b9\\u30c8\\u306e\\u8981\\u7d20\\u3092\\u8ffd\\u52a0\\u3059\\u308b\": [[6, \"\\u25b2\\u30ea\\u30b9\\u30c8\\u306b\\u30ea\\u30b9\\u30c8\\u306e\\u8981\\u7d20\\u3092\\u8ffd\\u52a0\\u3059\\u308b\"]], \"\\u25b2\\u30ea\\u30b9\\u30c8\\u306b\\u8981\\u7d20\\u3092\\u633f\\u5165\\u3059\\u308b\": [[6, \"\\u25b2\\u30ea\\u30b9\\u30c8\\u306b\\u8981\\u7d20\\u3092\\u633f\\u5165\\u3059\\u308b\"]], \"\\u25b2\\u30ea\\u30b9\\u30c8\\u306e\\u8981\\u7d20\\u3092\\u9006\\u9806\\u306b\\u3059\\u308b\": [[6, \"\\u25b2\\u30ea\\u30b9\\u30c8\\u306e\\u8981\\u7d20\\u3092\\u9006\\u9806\\u306b\\u3059\\u308b\"]], \"\\u25b2\\u30ea\\u30b9\\u30c8\\u8981\\u7d20\\u3092\\u524a\\u9664\\u3059\\u308b\": [[6, \"\\u25b2\\u30ea\\u30b9\\u30c8\\u8981\\u7d20\\u3092\\u524a\\u9664\\u3059\\u308b\"]], \"\\u25b2\\u5168\\u3066\\u306e\\u30ad\\u30fc\\u3068\\u5024\\u306e\\u524a\\u9664\": [[8, \"\\u25b2\\u5168\\u3066\\u306e\\u30ad\\u30fc\\u3068\\u5024\\u306e\\u524a\\u9664\"]], \"\\u25b2\\u518d\\u5e30\": [[3, \"\\u25b2\\u518d\\u5e30\"], [24, null]], \"\\u25b2\\u53ef\\u5909\\u9577\\u5f15\\u6570\": [[10, \"\\u25b2\\u53ef\\u5909\\u9577\\u5f15\\u6570\"]], \"\\u25b2\\u5909\\u6570\\u3068\\u3057\\u3066\\u306e\\u95a2\\u6570\": [[10, \"\\u25b2\\u5909\\u6570\\u3068\\u3057\\u3066\\u306e\\u95a2\\u6570\"]], \"\\u25b2\\u5f15\\u6570\\u306e\\u521d\\u671f\\u5024\": [[10, \"\\u25b2\\u5f15\\u6570\\u306e\\u521d\\u671f\\u5024\"]], \"\\u25b2\\u5f15\\u6570\\u306e\\u9806\\u756a\": [[10, \"\\u25b2\\u5f15\\u6570\\u306e\\u9806\\u756a\"]], \"\\u25b2\\u6761\\u4ef6\\u3068\\u3057\\u3066\\u4f7f\\u308f\\u308c\\u308b\\u4ed6\\u306e\\u5024\": [[3, \"\\u25b2\\u6761\\u4ef6\\u3068\\u3057\\u3066\\u4f7f\\u308f\\u308c\\u308b\\u4ed6\\u306e\\u5024\"]], \"\\u25b2\\u6761\\u4ef6\\u4ed8\\u304d\\u5185\\u5305\\u8868\\u8a18\": [[17, \"\\u25b2\\u6761\\u4ef6\\u4ed8\\u304d\\u5185\\u5305\\u8868\\u8a18\"]], \"\\u25b2\\u6b20\\u640d\\u5024\\u3001\\u6642\\u7cfb\\u5217\\u30c7\\u30fc\\u30bf\\u306e\\u51e6\\u7406\": [[20, \"\\u25b2\\u6b20\\u640d\\u5024\\u3001\\u6642\\u7cfb\\u5217\\u30c7\\u30fc\\u30bf\\u306e\\u51e6\\u7406\"]], \"\\u25b2\\u6b63\\u898f\\u8868\\u73fe\": [[30, null]], \"\\u25b2\\u771f\\u7406\\u5024\\u914d\\u5217\\u306b\\u3088\\u308b\\u30a4\\u30f3\\u30c7\\u30c3\\u30af\\u30b9\\u30a2\\u30af\\u30bb\\u30b9\": [[16, \"\\u25b2\\u771f\\u7406\\u5024\\u914d\\u5217\\u306b\\u3088\\u308b\\u30a4\\u30f3\\u30c7\\u30c3\\u30af\\u30b9\\u30a2\\u30af\\u30bb\\u30b9\"]], \"\\u25b2\\u7a7a\\u767d\\u6587\\u5b57\\u306e\\u524a\\u9664\": [[5, \"\\u25b2\\u7a7a\\u767d\\u6587\\u5b57\\u306e\\u524a\\u9664\"]], \"\\u25b2\\u7c21\\u5358\\u306a\\u30c7\\u30fc\\u30bf\\u306e\\u53ef\\u8996\\u5316\": [[25, null]], \"\\u25b2\\u7dda\\u5f62\\u4ee3\\u6570\\u306e\\u6f14\\u7b97\": [[16, \"\\u25b2\\u7dda\\u5f62\\u4ee3\\u6570\\u306e\\u6f14\\u7b97\"]], \"\\u25b2\\u8907\\u6570\\u884c\\u306b\\u307e\\u305f\\u304c\\u308b\\u6761\\u4ef6\\u5f0f\": [[7, \"\\u25b2\\u8907\\u6570\\u884c\\u306b\\u307e\\u305f\\u304c\\u308b\\u6761\\u4ef6\\u5f0f\"]], \"\\u25b2\\u8f9e\\u66f8\\u3092\\u8907\\u88fd\\u3059\\u308b\": [[8, \"\\u25b2\\u8f9e\\u66f8\\u3092\\u8907\\u88fd\\u3059\\u308b\"]], \"\\u25b2\\u8f9e\\u66f8\\u5185\\u5305\\u8868\\u8a18\": [[17, \"\\u25b2\\u8f9e\\u66f8\\u5185\\u5305\\u8868\\u8a18\"]], \"\\u25b2\\u8f9e\\u66f8\\u578b\\u306e\\u53ef\\u5909\\u9577\\u5f15\\u6570\": [[10, \"\\u25b2\\u8f9e\\u66f8\\u578b\\u306e\\u53ef\\u5909\\u9577\\u5f15\\u6570\"]], \"\\u25b2\\u914d\\u5217\\u306e\\u30c7\\u30fc\\u30bf\\u5c5e\\u6027\": [[16, \"\\u25b2\\u914d\\u5217\\u306e\\u30c7\\u30fc\\u30bf\\u5c5e\\u6027\"]], \"\\u3044\\u304f\\u3089\\u3067\\u3082\\u5927\\u304d\\u304f\\u306a\\u308b\\u6574\\u6570\": [[1, \"\\u3044\\u304f\\u3089\\u3067\\u3082\\u5927\\u304d\\u304f\\u306a\\u308b\\u6574\\u6570\"]], \"\\u305d\\u306e\\u4ed6\\u306e\\u53cd\\u5fa9\\u6f14\\u7b97\": [[30, \"\\u305d\\u306e\\u4ed6\\u306e\\u53cd\\u5fa9\\u6f14\\u7b97\"]], \"\\u3088\\u304f\\u4f7f\\u308f\\u308c\\u308b\\u914d\\u5217\\u64cd\\u4f5c\": [[16, \"\\u3088\\u304f\\u4f7f\\u308f\\u308c\\u308b\\u914d\\u5217\\u64cd\\u4f5c\"]], \"\\u30a4\\u30c6\\u30e9\\u30d6\\u30eb\\u306f\\u30a4\\u30c6\\u30ec\\u30fc\\u30bf\\u3067\\u306f\\u306a\\u3044\": [[12, \"\\u30a4\\u30c6\\u30e9\\u30d6\\u30eb\\u306f\\u30a4\\u30c6\\u30ec\\u30fc\\u30bf\\u3067\\u306f\\u306a\\u3044\"]], \"\\u30a4\\u30c6\\u30ec\\u30fc\\u30bf\\u306f\\u7279\\u6b8a\\u306a\\u30a4\\u30c6\\u30e9\\u30d6\\u30eb\": [[12, \"\\u30a4\\u30c6\\u30ec\\u30fc\\u30bf\\u306f\\u7279\\u6b8a\\u306a\\u30a4\\u30c6\\u30e9\\u30d6\\u30eb\"]], \"\\u30a4\\u30c6\\u30ec\\u30fc\\u30bf\\u3092\\u8fd4\\u3059 enumerate\": [[12, \"\\u30a4\\u30c6\\u30ec\\u30fc\\u30bf\\u3092\\u8fd4\\u3059-enumerate\"]], \"\\u30a4\\u30f3\\u30c7\\u30c3\\u30af\\u30b9\\u30a2\\u30af\\u30bb\\u30b9\": [[16, \"\\u30a4\\u30f3\\u30c7\\u30c3\\u30af\\u30b9\\u30a2\\u30af\\u30bb\\u30b9\"]], \"\\u30a4\\u30f3\\u30c7\\u30f3\\u30c8\\u306b\\u3088\\u308b\\u69cb\\u6587\": [[7, \"\\u30a4\\u30f3\\u30c7\\u30f3\\u30c8\\u306b\\u3088\\u308b\\u69cb\\u6587\"]], \"\\u30a8\\u30e9\\u30fc\": [[1, \"\\u30a8\\u30e9\\u30fc\"]], \"\\u30a8\\u30e9\\u30fc\\u306e\\u5206\\u985e\": [[4, \"\\u30a8\\u30e9\\u30fc\\u306e\\u5206\\u985e\"]], \"\\u30aa\\u30d6\\u30b8\\u30a7\\u30af\\u30c8\": [[3, \"\\u30aa\\u30d6\\u30b8\\u30a7\\u30af\\u30c8\"]], \"\\u30ab\\u30ec\\u30f3\\u30c8\\u30ef\\u30fc\\u30ad\\u30f3\\u30b0\\u30c7\\u30a3\\u30ec\\u30af\\u30c8\\u30ea\": [[13, \"\\u30ab\\u30ec\\u30f3\\u30c8\\u30ef\\u30fc\\u30ad\\u30f3\\u30b0\\u30c7\\u30a3\\u30ec\\u30af\\u30c8\\u30ea\"]], \"\\u30ad\\u30fc\\u3068\\u5024\\u306e\\u4e00\\u89a7\\u3092\\u5f97\\u308b\": [[8, \"\\u30ad\\u30fc\\u3068\\u5024\\u306e\\u4e00\\u89a7\\u3092\\u5f97\\u308b\"]], \"\\u30ad\\u30fc\\u306e\\u4e00\\u89a7\\u3092\\u5f97\\u308b\": [[8, \"\\u30ad\\u30fc\\u306e\\u4e00\\u89a7\\u3092\\u5f97\\u308b\"]], \"\\u30ad\\u30fc\\u3092\\u6307\\u5b9a\\u3057\\u3066\\u5024\\u3092\\u5f97\\u308b\\u30e1\\u30bd\\u30c3\\u30c9\": [[8, \"\\u30ad\\u30fc\\u3092\\u6307\\u5b9a\\u3057\\u3066\\u5024\\u3092\\u5f97\\u308b\\u30e1\\u30bd\\u30c3\\u30c9\"]], \"\\u30af\\u30e9\\u30b9\\u5b9a\\u7fa9\": [[19, \"\\u30af\\u30e9\\u30b9\\u5b9a\\u7fa9\"]], \"\\u30b0\\u30e9\\u30d5\\u306e\\u30d5\\u30a1\\u30a4\\u30eb\\u51fa\\u529b\": [[27, \"\\u30b0\\u30e9\\u30d5\\u306e\\u30d5\\u30a1\\u30a4\\u30eb\\u51fa\\u529b\"]], \"\\u30b0\\u30e9\\u30d5\\u306e\\u4f8b\\uff1a\\u30bd\\u30fc\\u30c8\\u30a2\\u30eb\\u30b4\\u30ea\\u30ba\\u30e0\\u306b\\u304a\\u3051\\u308b\\u6bd4\\u8f03\\u56de\\u6570\": [[27, \"\\u30b0\\u30e9\\u30d5\\u306e\\u4f8b\\uff1a\\u30bd\\u30fc\\u30c8\\u30a2\\u30eb\\u30b4\\u30ea\\u30ba\\u30e0\\u306b\\u304a\\u3051\\u308b\\u6bd4\\u8f03\\u56de\\u6570\"], [29, \"\\u30b0\\u30e9\\u30d5\\u306e\\u4f8b\\uff1a\\u30bd\\u30fc\\u30c8\\u30a2\\u30eb\\u30b4\\u30ea\\u30ba\\u30e0\\u306b\\u304a\\u3051\\u308b\\u6bd4\\u8f03\\u56de\\u6570\"]], \"\\u30b0\\u30e9\\u30d5\\u306e\\u753b\\u50cf\\u30d5\\u30a1\\u30a4\\u30eb\\u51fa\\u529b\": [[29, \"\\u30b0\\u30e9\\u30d5\\u306e\\u753b\\u50cf\\u30d5\\u30a1\\u30a4\\u30eb\\u51fa\\u529b\"]], \"\\u30b3\\u30de\\u30f3\\u30c9\\u30e2\\u30fc\\u30c9\": [[22, \"\\u30b3\\u30de\\u30f3\\u30c9\\u30e2\\u30fc\\u30c9\"]], \"\\u30b3\\u30de\\u30f3\\u30c9\\u30e9\\u30a4\\u30f3\\u5b9f\\u884c\\u306e\\u5177\\u4f53\\u4f8b\": [[28, \"\\u30b3\\u30de\\u30f3\\u30c9\\u30e9\\u30a4\\u30f3\\u5b9f\\u884c\\u306e\\u5177\\u4f53\\u4f8b\"]], \"\\u30b3\\u30de\\u30f3\\u30c9\\u30e9\\u30a4\\u30f3\\u5f15\\u6570\": [[28, \"\\u30b3\\u30de\\u30f3\\u30c9\\u30e9\\u30a4\\u30f3\\u5f15\\u6570\"]], \"\\u30b3\\u30e1\\u30f3\\u30c8\": [[1, \"\\u30b3\\u30e1\\u30f3\\u30c8\"]], \"\\u30b3\\u30e1\\u30f3\\u30c8\\u3068\\u7a7a\\u884c\": [[2, \"\\u30b3\\u30e1\\u30f3\\u30c8\\u3068\\u7a7a\\u884c\"]], \"\\u30b3\\u30fc\\u30c7\\u30a3\\u30f3\\u30b0\\u30b9\\u30bf\\u30a4\\u30eb\": [[4, \"\\u30b3\\u30fc\\u30c7\\u30a3\\u30f3\\u30b0\\u30b9\\u30bf\\u30a4\\u30eb\"]], \"\\u30b7\\u30ea\\u30fc\\u30ba (Series) \\u306e\\u4f5c\\u6210\": [[20, \"\\u30b7\\u30ea\\u30fc\\u30ba-(Series)-\\u306e\\u4f5c\\u6210\"]], \"\\u30b7\\u30ea\\u30fc\\u30ba\\u3068\\u30c7\\u30fc\\u30bf\\u30d5\\u30ec\\u30fc\\u30e0\": [[20, \"\\u30b7\\u30ea\\u30fc\\u30ba\\u3068\\u30c7\\u30fc\\u30bf\\u30d5\\u30ec\\u30fc\\u30e0\"]], \"\\u30b9\\u30e9\\u30a4\\u30b9\": [[16, \"\\u30b9\\u30e9\\u30a4\\u30b9\"]], \"\\u30bb\\u30c3\\u30c8\\u306e\\u30e1\\u30bd\\u30c3\\u30c9\": [[23, \"\\u30bb\\u30c3\\u30c8\\u306e\\u30e1\\u30bd\\u30c3\\u30c9\"]], \"\\u30bb\\u30c3\\u30c8\\u306e\\u7d44\\u307f\\u8fbc\\u307f\\u95a2\\u6570\": [[23, \"\\u30bb\\u30c3\\u30c8\\u306e\\u7d44\\u307f\\u8fbc\\u307f\\u95a2\\u6570\"]], \"\\u30bb\\u30eb\": [[0, \"\\u30bb\\u30eb\"], [22, \"\\u30bb\\u30eb\"]], \"\\u30bb\\u30eb\\u306e\\u5b9f\\u884c\\u304c\\u6b62\\u307e\\u3089\\u306a\\u3044\\u3068\\u304d\": [[0, \"\\u30bb\\u30eb\\u306e\\u5b9f\\u884c\\u304c\\u6b62\\u307e\\u3089\\u306a\\u3044\\u3068\\u304d\"]], \"\\u30bb\\u30eb\\u306e\\u633f\\u5165\": [[0, \"\\u30bb\\u30eb\\u306e\\u633f\\u5165\"]], \"\\u30bb\\u30eb\\u306e\\u64cd\\u4f5c\": [[0, \"\\u30bb\\u30eb\\u306e\\u64cd\\u4f5c\"]], \"\\u30bb\\u30eb\\u306e\\u7de8\\u96c6\": [[0, \"\\u30bb\\u30eb\\u306e\\u7de8\\u96c6\"]], \"\\u30bd\\u30fc\\u30b9\\u30d5\\u30a1\\u30a4\\u30eb\\u5148\\u982d\\u90e8\\u5206\\u306b\\u3042\\u308b\\u5ba3\\u8a00\": [[28, \"\\u30bd\\u30fc\\u30b9\\u30d5\\u30a1\\u30a4\\u30eb\\u5148\\u982d\\u90e8\\u5206\\u306b\\u3042\\u308b\\u5ba3\\u8a00\"]], \"\\u30bf\\u30d7\\u30eb (tuple)\": [[6, \"\\u30bf\\u30d7\\u30eb-(tuple)\"]], \"\\u30c7\\u30a3\\u30ec\\u30af\\u30c8\\u30ea\\u3068\\u968e\\u5c64\\u69cb\\u9020\": [[13, \"\\u30c7\\u30a3\\u30ec\\u30af\\u30c8\\u30ea\\u3068\\u968e\\u5c64\\u69cb\\u9020\"]], \"\\u30c7\\u30d0\\u30c3\\u30b0\\u306e\\u5177\\u4f53\\u4f8b\": [[4, \"\\u30c7\\u30d0\\u30c3\\u30b0\\u306e\\u5177\\u4f53\\u4f8b\"]], \"\\u30c7\\u30fc\\u30bf\": [[21, \"\\u30c7\\u30fc\\u30bf\"]], \"\\u30c7\\u30fc\\u30bf\\u306e\\u4e26\\u3073\\u66ff\\u3048\": [[20, \"\\u30c7\\u30fc\\u30bf\\u306e\\u4e26\\u3073\\u66ff\\u3048\"]], \"\\u30c7\\u30fc\\u30bf\\u306e\\u53c2\\u7167\": [[20, \"\\u30c7\\u30fc\\u30bf\\u306e\\u53c2\\u7167\"]], \"\\u30c7\\u30fc\\u30bf\\u306e\\u6761\\u4ef6\\u53d6\\u308a\\u51fa\\u3057\": [[20, \"\\u30c7\\u30fc\\u30bf\\u306e\\u6761\\u4ef6\\u53d6\\u308a\\u51fa\\u3057\"]], \"\\u30c7\\u30fc\\u30bf\\u306e\\u7d71\\u8a08\\u91cf\": [[20, \"\\u30c7\\u30fc\\u30bf\\u306e\\u7d71\\u8a08\\u91cf\"]], \"\\u30c7\\u30fc\\u30bf\\u30d5\\u30ec\\u30fc\\u30e0 (DataFrame) \\u306e\\u4f5c\\u6210\": [[20, \"\\u30c7\\u30fc\\u30bf\\u30d5\\u30ec\\u30fc\\u30e0-(DataFrame)-\\u306e\\u4f5c\\u6210\"]], \"\\u30c7\\u30fc\\u30bf\\u8868\\u73fe\\u3068\\u3057\\u3066\\u306e\\u6728\\u69cb\\u9020\": [[13, \"\\u30c7\\u30fc\\u30bf\\u8868\\u73fe\\u3068\\u3057\\u3066\\u306e\\u6728\\u69cb\\u9020\"]], \"\\u30ce\\u30fc\\u30c8\\u30d6\\u30c3\\u30af\\u306e\\u30c0\\u30a6\\u30f3\\u30ed\\u30fc\\u30c9\": [[0, \"\\u30ce\\u30fc\\u30c8\\u30d6\\u30c3\\u30af\\u306e\\u30c0\\u30a6\\u30f3\\u30ed\\u30fc\\u30c9\"]], \"\\u30ce\\u30fc\\u30c8\\u30d6\\u30c3\\u30af\\u306e\\u53c2\\u7167\": [[0, \"\\u30ce\\u30fc\\u30c8\\u30d6\\u30c3\\u30af\\u306e\\u53c2\\u7167\"]], \"\\u30ce\\u30fc\\u30c8\\u30d6\\u30c3\\u30af\\u306e\\u64cd\\u4f5c\": [[0, \"\\u30ce\\u30fc\\u30c8\\u30d6\\u30c3\\u30af\\u306e\\u64cd\\u4f5c\"]], \"\\u30ce\\u30fc\\u30c8\\u30d6\\u30c3\\u30af\\u30d5\\u30a1\\u30a4\\u30eb\\u3092\\u30e2\\u30b8\\u30e5\\u30fc\\u30eb\\u30d5\\u30a1\\u30a4\\u30eb\\u306b\\u5909\\u63db\\u3059\\u308b\": [[15, \"\\u30ce\\u30fc\\u30c8\\u30d6\\u30c3\\u30af\\u30d5\\u30a1\\u30a4\\u30eb\\u3092\\u30e2\\u30b8\\u30e5\\u30fc\\u30eb\\u30d5\\u30a1\\u30a4\\u30eb\\u306b\\u5909\\u63db\\u3059\\u308b\"]], \"\\u30d0\\u30c3\\u30af\\u30b9\\u30e9\\u30c3\\u30b7\\u30e5\\u306e\\u8868\\u793a\\u3068\\u5165\\u529b\": [[5, \"\\u30d0\\u30c3\\u30af\\u30b9\\u30e9\\u30c3\\u30b7\\u30e5\\u306e\\u8868\\u793a\\u3068\\u5165\\u529b\"]], \"\\u30d1\\u30b9\": [[13, \"\\u30d1\\u30b9\"]], \"\\u30d2\\u30b9\\u30c8\\u30b0\\u30e9\\u30e0\": [[27, \"\\u30d2\\u30b9\\u30c8\\u30b0\\u30e9\\u30e0\"], [29, \"\\u30d2\\u30b9\\u30c8\\u30b0\\u30e9\\u30e0\"]], \"\\u30d2\\u30fc\\u30c8\\u30de\\u30c3\\u30d7\": [[27, \"\\u30d2\\u30fc\\u30c8\\u30de\\u30c3\\u30d7\"], [29, \"\\u30d2\\u30fc\\u30c8\\u30de\\u30c3\\u30d7\"]], \"\\u30d5\\u30a1\\u30a4\\u30eb\\u306b\\u5bfe\\u3059\\u308bwith\\u6587\": [[11, \"\\u30d5\\u30a1\\u30a4\\u30eb\\u306b\\u5bfe\\u3059\\u308bwith\\u6587\"]], \"\\u30d5\\u30a1\\u30a4\\u30eb\\u306e\\u30aa\\u30fc\\u30d7\\u30f3\": [[11, \"\\u30d5\\u30a1\\u30a4\\u30eb\\u306e\\u30aa\\u30fc\\u30d7\\u30f3\"]], \"\\u30d5\\u30a1\\u30a4\\u30eb\\u306e\\u30af\\u30ed\\u30fc\\u30ba\": [[11, \"\\u30d5\\u30a1\\u30a4\\u30eb\\u306e\\u30af\\u30ed\\u30fc\\u30ba\"]], \"\\u30d5\\u30a1\\u30a4\\u30eb\\u306e\\u8aad\\u307f\\u66f8\\u304d\\u306b\\u304a\\u3051\\u308b\\u6587\\u5b57\\u30b3\\u30fc\\u30c9\\u6307\\u5b9a\": [[11, \"\\u30d5\\u30a1\\u30a4\\u30eb\\u306e\\u8aad\\u307f\\u66f8\\u304d\\u306b\\u304a\\u3051\\u308b\\u6587\\u5b57\\u30b3\\u30fc\\u30c9\\u6307\\u5b9a\"]], \"\\u30d5\\u30a1\\u30a4\\u30eb\\u3078\\u306e\\u66f8\\u304d\\u8fbc\\u307f\": [[11, \"\\u30d5\\u30a1\\u30a4\\u30eb\\u3078\\u306e\\u66f8\\u304d\\u8fbc\\u307f\"]], \"\\u30d5\\u30a1\\u30a4\\u30eb\\u30aa\\u30d6\\u30b8\\u30a7\\u30af\\u30c8\\u306f\\u30a4\\u30c6\\u30ec\\u30fc\\u30bf\": [[12, \"\\u30d5\\u30a1\\u30a4\\u30eb\\u30aa\\u30d6\\u30b8\\u30a7\\u30af\\u30c8\\u306f\\u30a4\\u30c6\\u30ec\\u30fc\\u30bf\"]], \"\\u30d5\\u30a1\\u30a4\\u30eb\\u5168\\u4f53\\u306e\\u8aad\\u307f\\u8fbc\\u307f\": [[11, \"\\u30d5\\u30a1\\u30a4\\u30eb\\u5168\\u4f53\\u306e\\u8aad\\u307f\\u8fbc\\u307f\"]], \"\\u30e1\\u30bf\\u6587\\u5b57\": [[30, \"\\u30e1\\u30bf\\u6587\\u5b57\"]], \"\\u30e2\\u30b8\\u30e5\\u30fc\\u30eb\\u306e\\u30a4\\u30f3\\u30dd\\u30fc\\u30c8\": [[14, \"\\u30e2\\u30b8\\u30e5\\u30fc\\u30eb\\u306e\\u30a4\\u30f3\\u30dd\\u30fc\\u30c8\"]], \"\\u30e2\\u30b8\\u30e5\\u30fc\\u30eb\\u306e\\u30b3\\u30de\\u30f3\\u30c9\\u30e9\\u30a4\\u30f3\\u5b9f\\u884c\": [[28, \"\\u30e2\\u30b8\\u30e5\\u30fc\\u30eb\\u306e\\u30b3\\u30de\\u30f3\\u30c9\\u30e9\\u30a4\\u30f3\\u5b9f\\u884c\"]], \"\\u30e2\\u30b8\\u30e5\\u30fc\\u30eb\\u30d5\\u30a1\\u30a4\\u30eb\": [[15, \"\\u30e2\\u30b8\\u30e5\\u30fc\\u30eb\\u30d5\\u30a1\\u30a4\\u30eb\"]], \"\\u30e2\\u30b8\\u30e5\\u30fc\\u30eb\\u30d5\\u30a1\\u30a4\\u30eb\\u3092\\u30a2\\u30c3\\u30d7\\u30ed\\u30fc\\u30c9\\u3059\\u308b\": [[15, \"\\u30e2\\u30b8\\u30e5\\u30fc\\u30eb\\u30d5\\u30a1\\u30a4\\u30eb\\u3092\\u30a2\\u30c3\\u30d7\\u30ed\\u30fc\\u30c9\\u3059\\u308b\"]], \"\\u30e2\\u30c7\\u30eb\\u5b66\\u7fd2\\u306e\\u57fa\\u790e\": [[21, \"\\u30e2\\u30c7\\u30eb\\u5b66\\u7fd2\\u306e\\u57fa\\u790e\"]], \"\\u30e6\\u30cb\\u30d0\\u30fc\\u30b5\\u30eb\\u95a2\\u6570\": [[16, \"\\u30e6\\u30cb\\u30d0\\u30fc\\u30b5\\u30eb\\u95a2\\u6570\"]], \"\\u30e9\\u30e0\\u30c0\\u5f0f\": [[18, \"\\u30e9\\u30e0\\u30c0\\u5f0f\"]], \"\\u30ea\\u30b9\\u30c8\\u304b\\u3089\\u30a4\\u30c6\\u30e9\\u30d6\\u30eb\\u3078\": [[18, \"\\u30ea\\u30b9\\u30c8\\u304b\\u3089\\u30a4\\u30c6\\u30e9\\u30d6\\u30eb\\u3078\"]], \"\\u30ea\\u30b9\\u30c8\\u3068\\u30a4\\u30f3\\u30c7\\u30c3\\u30af\\u30b9\": [[6, \"\\u30ea\\u30b9\\u30c8\\u3068\\u30a4\\u30f3\\u30c7\\u30c3\\u30af\\u30b9\"]], \"\\u30ea\\u30b9\\u30c8\\u3068\\u6587\\u5b57\\u5217\\u306e\\u76f8\\u4e92\\u5909\\u63db\": [[6, \"\\u30ea\\u30b9\\u30c8\\u3068\\u6587\\u5b57\\u5217\\u306e\\u76f8\\u4e92\\u5909\\u63db\"]], \"\\u30ea\\u30b9\\u30c8\\u3068\\u6f14\\u7b97\\u5b50\": [[6, \"\\u30ea\\u30b9\\u30c8\\u3068\\u6f14\\u7b97\\u5b50\"]], \"\\u30ea\\u30b9\\u30c8\\u306b\\u5bfe\\u3059\\u308b\\u95a2\\u6570\\u30fb\\u6f14\\u7b97\\u5b50\\u30fb\\u30e1\\u30bd\\u30c3\\u30c9\": [[6, \"\\u30ea\\u30b9\\u30c8\\u306b\\u5bfe\\u3059\\u308b\\u95a2\\u6570\\u30fb\\u6f14\\u7b97\\u5b50\\u30fb\\u30e1\\u30bd\\u30c3\\u30c9\"]], \"\\u30ea\\u30b9\\u30c8\\u306b\\u8981\\u7d20\\u3092\\u8ffd\\u52a0\\u3059\\u308b\": [[6, \"\\u30ea\\u30b9\\u30c8\\u306b\\u8981\\u7d20\\u3092\\u8ffd\\u52a0\\u3059\\u308b\"]], \"\\u30ea\\u30b9\\u30c8\\u306e\\u8981\\u7d20\\u6570\": [[6, \"\\u30ea\\u30b9\\u30c8\\u306e\\u8981\\u7d20\\u6570\"]], \"\\u30ea\\u30b9\\u30c8\\u3084\\u30bf\\u30d7\\u30eb\\u306e\\u6bd4\\u8f03\\u6f14\\u7b97\": [[6, \"\\u30ea\\u30b9\\u30c8\\u3084\\u30bf\\u30d7\\u30eb\\u306e\\u6bd4\\u8f03\\u6f14\\u7b97\"]], \"\\u30ea\\u30b9\\u30c8\\u3092\\u64cd\\u4f5c\\u3059\\u308b\\u30e1\\u30bd\\u30c3\\u30c9\\u306a\\u3069\": [[6, \"\\u30ea\\u30b9\\u30c8\\u3092\\u64cd\\u4f5c\\u3059\\u308b\\u30e1\\u30bd\\u30c3\\u30c9\\u306a\\u3069\"]], \"\\u30ea\\u30b9\\u30c8\\u5185\\u5305\\u8868\\u8a18\": [[17, \"\\u30ea\\u30b9\\u30c8\\u5185\\u5305\\u8868\\u8a18\"]], \"\\u30ed\\u30fc\\u30ab\\u30eb\\u5909\\u6570\": [[2, \"\\u30ed\\u30fc\\u30ab\\u30eb\\u5909\\u6570\"]], \"\\u4e26\\u3079\\u66ff\\u3048\\uff08sort \\u30e1\\u30bd\\u30c3\\u30c9\\uff09\": [[6, \"\\u4e26\\u3079\\u66ff\\u3048\\uff08sort-\\u30e1\\u30bd\\u30c3\\u30c9\\uff09\"]], \"\\u4e26\\u3079\\u66ff\\u3048\\uff08sorted \\u7d44\\u307f\\u8fbc\\u307f\\u95a2\\u6570\\uff09\": [[6, \"\\u4e26\\u3079\\u66ff\\u3048\\uff08sorted-\\u7d44\\u307f\\u8fbc\\u307f\\u95a2\\u6570\\uff09\"]], \"\\u4e88\\u7d04\\u8a9e\": [[2, \"\\u4e88\\u7d04\\u8a9e\"]], \"\\u4ed5\\u69d8\\u30fb\\u30c6\\u30b9\\u30c8\\u30fb\\u30c7\\u30d0\\u30c3\\u30b0\": [[4, \"\\u4ed5\\u69d8\\u30fb\\u30c6\\u30b9\\u30c8\\u30fb\\u30c7\\u30d0\\u30c3\\u30b0\"]], \"\\u4ee3\\u5165\\u6587\": [[2, \"\\u4ee3\\u5165\\u6587\"]], \"\\u5024\\u306e\\u4e00\\u89a7\\u3092\\u5f97\\u308b\": [[8, \"\\u5024\\u306e\\u4e00\\u89a7\\u3092\\u5f97\\u308b\"]], \"\\u5168\\u89d2\\u306e\\u7a7a\\u767d\": [[1, \"\\u5168\\u89d2\\u306e\\u7a7a\\u767d\"]], \"\\u5185\\u5305\\u8868\\u8a18\\u306e\\u5165\\u308c\\u5b50\": [[17, \"\\u5185\\u5305\\u8868\\u8a18\\u306e\\u5165\\u308c\\u5b50\"]], \"\\u518d\\u5e30\\u95a2\\u6570\\u306e\\u4f8b\\uff1a\\u3079\\u304d\\u4e57\\u306e\\u8a08\\u7b97\": [[24, \"\\u518d\\u5e30\\u95a2\\u6570\\u306e\\u4f8b\\uff1a\\u3079\\u304d\\u4e57\\u306e\\u8a08\\u7b97\"]], \"\\u518d\\u5e30\\u95a2\\u6570\\u306e\\u4f8b\\uff1a\\u30de\\u30fc\\u30b8\\u30bd\\u30fc\\u30c8\": [[24, \"\\u518d\\u5e30\\u95a2\\u6570\\u306e\\u4f8b\\uff1a\\u30de\\u30fc\\u30b8\\u30bd\\u30fc\\u30c8\"]], \"\\u518d\\u5e30\\u95a2\\u6570\\u306e\\u4f8b\\uff1a\\u63a5\\u982d\\u8f9e\\u30ea\\u30b9\\u30c8\\u3068\\u63a5\\u5c3e\\u8f9e\\u30ea\\u30b9\\u30c8\": [[24, \"\\u518d\\u5e30\\u95a2\\u6570\\u306e\\u4f8b\\uff1a\\u63a5\\u982d\\u8f9e\\u30ea\\u30b9\\u30c8\\u3068\\u63a5\\u5c3e\\u8f9e\\u30ea\\u30b9\\u30c8\"]], \"\\u5217\\u306e\\u8ffd\\u52a0\\u3068\\u524a\\u9664\": [[20, \"\\u5217\\u306e\\u8ffd\\u52a0\\u3068\\u524a\\u9664\"]], \"\\u521d\\u5fc3\\u8005\\u306b\\u3088\\u304f\\u3042\\u308b\\u8aa4\\u89e3 \\u2014 \\u5909\\u6570\\u3068\\u6587\\u5b57\\u5217\\u306e\\u6df7\\u4e71\": [[5, \"\\u521d\\u5fc3\\u8005\\u306b\\u3088\\u304f\\u3042\\u308b\\u8aa4\\u89e3-----\\u5909\\u6570\\u3068\\u6587\\u5b57\\u5217\\u306e\\u6df7\\u4e71\"]], \"\\u521d\\u671f\\u5316\\u3068\\u5c5e\\u6027\": [[19, \"\\u521d\\u671f\\u5316\\u3068\\u5c5e\\u6027\"]], \"\\u5236\\u5fa1\\u69cb\\u9020\\u3068return\\u6587\": [[9, \"\\u5236\\u5fa1\\u69cb\\u9020\\u3068return\\u6587\"]], \"\\u5358\\u9805\\u306e + \\u3068 -\": [[1, \"\\u5358\\u9805\\u306e-+-\\u3068--\"]], \"\\u5909\\u6570\": [[2, \"\\u5909\\u6570\"]], \"\\u5909\\u6570\\u3068\\u30b9\\u30b3\\u30fc\\u30d7\": [[10, \"\\u5909\\u6570\\u3068\\u30b9\\u30b3\\u30fc\\u30d7\"]], \"\\u591a\\u6b21\\u5143\\u914d\\u5217\": [[16, \"\\u591a\\u6b21\\u5143\\u914d\\u5217\"]], \"\\u591a\\u91cd\\u30ea\\u30b9\\u30c8\": [[6, \"\\u591a\\u91cd\\u30ea\\u30b9\\u30c8\"]], \"\\u591a\\u91cd\\u4ee3\\u5165\": [[6, \"\\u591a\\u91cd\\u4ee3\\u5165\"]], \"\\u5927\\u6587\\u5b57\\u30fb\\u5c0f\\u6587\\u5b57\": [[5, \"\\u5927\\u6587\\u5b57\\u30fb\\u5c0f\\u6587\\u5b57\"]], \"\\u5b9f\\u6570\\u306e\\u3079\\u304d\\u8868\\u793a\": [[1, \"\\u5b9f\\u6570\\u306e\\u3079\\u304d\\u8868\\u793a\"]], \"\\u5b9f\\u884c\\u6642\\u30a8\\u30e9\\u30fc\": [[4, \"\\u5b9f\\u884c\\u6642\\u30a8\\u30e9\\u30fc\"]], \"\\u5f15\\u6570\": [[10, \"\\u5f15\\u6570\"]], \"\\u6298\\u308c\\u7dda\\u30b0\\u30e9\\u30d5\": [[25, \"\\u6298\\u308c\\u7dda\\u30b0\\u30e9\\u30d5\"]], \"\\u6307\\u5b9a\\u3057\\u305f\\u8981\\u7d20\\u306e\\u30a4\\u30f3\\u30c7\\u30c3\\u30af\\u30b9\\u53d6\\u5f97\\u3068\\u6570\\u3048\\u3042\\u3052\": [[6, \"\\u6307\\u5b9a\\u3057\\u305f\\u8981\\u7d20\\u306e\\u30a4\\u30f3\\u30c7\\u30c3\\u30af\\u30b9\\u53d6\\u5f97\\u3068\\u6570\\u3048\\u3042\\u3052\"]], \"\\u6539\\u884c\\u6587\\u5b57\\u306e\\u524a\\u9664\": [[11, \"\\u6539\\u884c\\u6587\\u5b57\\u306e\\u524a\\u9664\"]], \"\\u6559\\u5e2b\\u3042\\u308a\\u5b66\\u7fd2\": [[21, \"\\u6559\\u5e2b\\u3042\\u308a\\u5b66\\u7fd2\"]], \"\\u6559\\u5e2b\\u3042\\u308a\\u5b66\\u7fd2\\u30fb\\u5206\\u985e\\u306e\\u4f8b\": [[21, \"\\u6559\\u5e2b\\u3042\\u308a\\u5b66\\u7fd2\\u30fb\\u5206\\u985e\\u306e\\u4f8b\"]], \"\\u6559\\u5e2b\\u3042\\u308a\\u5b66\\u7fd2\\u30fb\\u56de\\u5e30\\u306e\\u4f8b\": [[21, \"\\u6559\\u5e2b\\u3042\\u308a\\u5b66\\u7fd2\\u30fb\\u56de\\u5e30\\u306e\\u4f8b\"]], \"\\u6559\\u5e2b\\u306a\\u3057\\u5b66\\u7fd2\": [[21, \"\\u6559\\u5e2b\\u306a\\u3057\\u5b66\\u7fd2\"]], \"\\u6559\\u5e2b\\u306a\\u3057\\u5b66\\u7fd2\\u30fb\\u30af\\u30e9\\u30b9\\u30bf\\u30ea\\u30f3\\u30b0\\u306e\\u4f8b\": [[21, \"\\u6559\\u5e2b\\u306a\\u3057\\u5b66\\u7fd2\\u30fb\\u30af\\u30e9\\u30b9\\u30bf\\u30ea\\u30f3\\u30b0\\u306e\\u4f8b\"]], \"\\u6559\\u5e2b\\u306a\\u3057\\u5b66\\u7fd2\\u30fb\\u6b21\\u5143\\u524a\\u6e1b\\u306e\\u4f8b\": [[21, \"\\u6559\\u5e2b\\u306a\\u3057\\u5b66\\u7fd2\\u30fb\\u6b21\\u5143\\u524a\\u6e1b\\u306e\\u4f8b\"]], \"\\u6559\\u6750\\u306e\\u30aa\\u30fc\\u30d7\\u30f3\": [[0, \"\\u6559\\u6750\\u306e\\u30aa\\u30fc\\u30d7\\u30f3\"]], \"\\u6563\\u5e03\\u56f3\": [[25, \"\\u6563\\u5e03\\u56f3\"], [27, \"\\u6563\\u5e03\\u56f3\"], [29, \"\\u6563\\u5e03\\u56f3\"]], \"\\u6570\\u3048\\u4e0a\\u3052\": [[5, \"\\u6570\\u3048\\u4e0a\\u3052\"]], \"\\u6570\\u5024\\u8aa4\\u5dee\": [[1, \"\\u6570\\u5024\\u8aa4\\u5dee\"]], \"\\u6570\\u5b66\\u95a2\\u6570\\uff08\\u30e2\\u30b8\\u30e5\\u30fc\\u30eb\\u306e\\u30a4\\u30f3\\u30dd\\u30fc\\u30c8\\uff09\": [[1, \"\\u6570\\u5b66\\u95a2\\u6570\\uff08\\u30e2\\u30b8\\u30e5\\u30fc\\u30eb\\u306e\\u30a4\\u30f3\\u30dd\\u30fc\\u30c8\\uff09\"]], \"\\u6574\\u6570\\u3068\\u5b9f\\u6570\": [[1, \"\\u6574\\u6570\\u3068\\u5b9f\\u6570\"]], \"\\u6574\\u6570\\u3068\\u5b9f\\u6570\\u306e\\u9593\\u306e\\u5909\\u63db\": [[1, \"\\u6574\\u6570\\u3068\\u5b9f\\u6570\\u306e\\u9593\\u306e\\u5909\\u63db\"]], \"\\u6587\\u5b57\\u30af\\u30e9\\u30b9\": [[30, \"\\u6587\\u5b57\\u30af\\u30e9\\u30b9\"]], \"\\u6587\\u5b57\\u30b3\\u30fc\\u30c9\\u5ba3\\u8a00\": [[28, \"\\u6587\\u5b57\\u30b3\\u30fc\\u30c9\\u5ba3\\u8a00\"]], \"\\u6587\\u5b57\\u5217\\u3068\\u30a4\\u30f3\\u30c7\\u30c3\\u30af\\u30b9\": [[5, \"\\u6587\\u5b57\\u5217\\u3068\\u30a4\\u30f3\\u30c7\\u30c3\\u30af\\u30b9\"]], \"\\u6587\\u5b57\\u5217\\u3068\\u30b9\\u30e9\\u30a4\\u30b9\": [[5, \"\\u6587\\u5b57\\u5217\\u3068\\u30b9\\u30e9\\u30a4\\u30b9\"]], \"\\u6587\\u5b57\\u5217\\u3068\\u30e1\\u30bd\\u30c3\\u30c9\": [[5, \"\\u6587\\u5b57\\u5217\\u3068\\u30e1\\u30bd\\u30c3\\u30c9\"]], \"\\u6587\\u5b57\\u5217\\u306e\\u691c\\u7d22\": [[5, \"\\u6587\\u5b57\\u5217\\u306e\\u691c\\u7d22\"]], \"\\u6587\\u5b57\\u5217\\u306e\\u6bd4\\u8f03\\u6f14\\u7b97\": [[5, \"\\u6587\\u5b57\\u5217\\u306e\\u6bd4\\u8f03\\u6f14\\u7b97\"]], \"\\u6587\\u5b57\\u5217\\u306e\\u9023\\u7d50\": [[5, \"\\u6587\\u5b57\\u5217\\u306e\\u9023\\u7d50\"]], \"\\u6728\\u69cb\\u9020\": [[13, \"\\u6728\\u69cb\\u9020\"]], \"\\u6771\\u4eac\\u306e7\\u6708\\u306e\\u6c17\\u6e29\": [[26, \"\\u6771\\u4eac\\u306e7\\u6708\\u306e\\u6c17\\u6e29\"]], \"\\u68d2\\u30b0\\u30e9\\u30d5\": [[25, \"\\u68d2\\u30b0\\u30e9\\u30d5\"], [27, \"\\u68d2\\u30b0\\u30e9\\u30d5\"], [29, \"\\u68d2\\u30b0\\u30e9\\u30d5\"]], \"\\u691c\\u7d22\": [[5, \"\\u691c\\u7d22\"]], \"\\u69cb\\u6587\\u30a8\\u30e9\\u30fc\": [[4, \"\\u69cb\\u6587\\u30a8\\u30e9\\u30fc\"]], \"\\u69d8\\u3005\\u306a\\u6761\\u4ef6\": [[3, \"\\u69d8\\u3005\\u306a\\u6761\\u4ef6\"]], \"\\u6a5f\\u68b0\\u5b66\\u7fd2\\u306b\\u3064\\u3044\\u3066\": [[21, \"\\u6a5f\\u68b0\\u5b66\\u7fd2\\u306b\\u3064\\u3044\\u3066\"]], \"\\u6b63\\u898f\\u8868\\u73fe\\u306b\\u95a2\\u3059\\u308b\\u57fa\\u672c\\u7684\\u306a\\u95a2\\u6570\": [[30, \"\\u6b63\\u898f\\u8868\\u73fe\\u306b\\u95a2\\u3059\\u308b\\u57fa\\u672c\\u7684\\u306a\\u95a2\\u6570\"]], \"\\u6b63\\u898f\\u8868\\u73fe\\u306b\\u95a2\\u3059\\u308b\\u95a2\\u6570\\u3068\\u30e1\\u30bd\\u30c3\\u30c9\": [[30, \"\\u6b63\\u898f\\u8868\\u73fe\\u306b\\u95a2\\u3059\\u308b\\u95a2\\u6570\\u3068\\u30e1\\u30bd\\u30c3\\u30c9\"]], \"\\u6b63\\u898f\\u8868\\u73fe\\u306e\\u30a8\\u30b9\\u30b1\\u30fc\\u30d7\\u30b7\\u30fc\\u30b1\\u30f3\\u30b9\": [[30, \"\\u6b63\\u898f\\u8868\\u73fe\\u306e\\u30a8\\u30b9\\u30b1\\u30fc\\u30d7\\u30b7\\u30fc\\u30b1\\u30f3\\u30b9\"]], \"\\u6b63\\u898f\\u8868\\u73fe\\u306e\\u57fa\\u672c\": [[30, \"\\u6b63\\u898f\\u8868\\u73fe\\u306e\\u57fa\\u672c\"]], \"\\u6bd4\\u8f03\\u6f14\\u7b97\": [[23, \"\\u6bd4\\u8f03\\u6f14\\u7b97\"]], \"\\u6f14\\u7b97\\u5b50\\u306e\\u512a\\u5148\\u9806\\u4f4d\\u3068\\u62ec\\u5f27\": [[1, \"\\u6f14\\u7b97\\u5b50\\u306e\\u512a\\u5148\\u9806\\u4f4d\\u3068\\u62ec\\u5f27\"]], \"\\u7279\\u6b8a\\u30e1\\u30bd\\u30c3\\u30c9\": [[19, \"\\u7279\\u6b8a\\u30e1\\u30bd\\u30c3\\u30c9\"]], \"\\u771f\\u7406\\u5024\\u3092\\u8fd4\\u3059\\u95a2\\u6570\": [[3, \"\\u771f\\u7406\\u5024\\u3092\\u8fd4\\u3059\\u95a2\\u6570\"]], \"\\u7834\\u58ca\\u7684\\uff08\\u30a4\\u30f3\\u30d7\\u30ec\\u30fc\\u30b9\\uff09\\u306a\\u64cd\\u4f5c\\u3068\\u975e\\u7834\\u58ca\\u7684\\u306a\\u751f\\u6210\": [[6, \"\\u7834\\u58ca\\u7684\\uff08\\u30a4\\u30f3\\u30d7\\u30ec\\u30fc\\u30b9\\uff09\\u306a\\u64cd\\u4f5c\\u3068\\u975e\\u7834\\u58ca\\u7684\\u306a\\u751f\\u6210\"]], \"\\u7a7a\\u6587\\u5b57\\u5217\": [[5, \"\\u7a7a\\u6587\\u5b57\\u5217\"]], \"\\u7a7a\\u767d\": [[1, \"\\u7a7a\\u767d\"]], \"\\u7b97\\u8853\\u6f14\\u7b97\\u5b50\\u306e\\u307e\\u3068\\u3081\": [[1, \"\\u7b97\\u8853\\u6f14\\u7b97\\u5b50\\u306e\\u307e\\u3068\\u3081\"]], \"\\u7c21\\u5358\\u306a\\u7b97\\u8853\\u8a08\\u7b97\": [[1, \"\\u7c21\\u5358\\u306a\\u7b97\\u8853\\u8a08\\u7b97\"]], \"\\u7d22\\u5f15\": [[32, null]], \"\\u7d2f\\u7a4d\\u4ee3\\u5165\\u6587\": [[2, \"\\u7d2f\\u7a4d\\u4ee3\\u5165\\u6587\"]], \"\\u7d99\\u627f\": [[19, \"\\u7d99\\u627f\"]], \"\\u7d99\\u627f\\u306b\\u3088\\u308b\\u632f\\u821e\\u3044\\u306e\\u6539\\u5909\": [[19, \"\\u7d99\\u627f\\u306b\\u3088\\u308b\\u632f\\u821e\\u3044\\u306e\\u6539\\u5909\"]], \"\\u7dda\\u30b0\\u30e9\\u30d5\": [[27, \"\\u7dda\\u30b0\\u30e9\\u30d5\"], [29, \"\\u7dda\\u30b0\\u30e9\\u30d5\"]], \"\\u7de8\\u96c6\\u30e2\\u30fc\\u30c9\": [[22, \"\\u7de8\\u96c6\\u30e2\\u30fc\\u30c9\"]], \"\\u7de8\\u96c6\\u4e2d\\u306e\\u30d5\\u30a1\\u30a4\\u30eb\\u306e\\u52d5\\u4f5c\": [[11, \"\\u7de8\\u96c6\\u4e2d\\u306e\\u30d5\\u30a1\\u30a4\\u30eb\\u306e\\u52d5\\u4f5c\"]], \"\\u7df4\\u7fd2\": [[0, \"\\u7df4\\u7fd2\"], [1, \"\\u7df4\\u7fd2\"], [5, \"\\u7df4\\u7fd2\"], [5, \"id11\"], [5, \"id13\"], [5, \"id15\"], [5, \"id19\"], [5, \"id21\"], [6, \"\\u7df4\\u7fd2\"], [6, \"id18\"], [6, \"id19\"], [6, \"id22\"], [6, \"id24\"], [7, \"\\u7df4\\u7fd2\"], [7, \"id4\"], [7, \"id7\"], [8, \"\\u7df4\\u7fd2\"], [8, \"id12\"], [9, \"\\u7df4\\u7fd2\"], [9, \"id4\"], [9, \"id5\"], [9, \"id8\"], [9, \"id9\"], [9, \"id11\"], [9, \"id12\"], [9, \"id13\"], [9, \"id14\"], [9, \"id15\"], [9, \"id16\"], [9, \"id17\"], [9, \"id18\"], [9, \"id19\"], [9, \"id20\"], [11, \"\\u7df4\\u7fd2\"], [11, \"id7\"], [11, \"id10\"], [12, \"\\u7df4\\u7fd2\"], [12, \"id6\"], [14, \"\\u7df4\\u7fd2\"], [16, \"\\u7df4\\u7fd2\"], [17, \"\\u7df4\\u7fd2\"], [17, \"id4\"], [17, \"id5\"], [17, \"id7\"], [17, \"id8\"], [18, \"\\u7df4\\u7fd2\"], [18, \"id5\"], [18, \"id6\"], [18, \"id7\"], [19, \"\\u7df4\\u7fd2\"], [21, \"\\u7df4\\u7fd2\"], [21, \"id10\"], [22, \"\\u7df4\\u7fd2\"], [23, \"\\u7df4\\u7fd2\"], [23, \"id3\"], [23, \"id7\"], [26, \"\\u7df4\\u7fd2\"], [26, \"id6\"], [28, \"\\u7df4\\u7fd2\"], [28, \"id4\"], [28, \"id5\"], [28, \"id6\"], [28, \"id7\"], [29, \"\\u7df4\\u7fd2\"], [29, \"id4\"], [29, \"id6\"], [29, \"id8\"], [29, \"id10\"], [29, \"id12\"], [30, \"\\u7df4\\u7fd2\"], [30, \"id4\"], [30, \"id5\"], [30, \"id6\"], [30, \"id7\"], [30, \"id10\"], [30, \"id11\"], [30, \"id14\"], [30, \"id15\"], [30, \"id16\"], [30, \"id17\"], [30, \"id20\"], [30, \"id21\"]], \"\\u7df4\\u7fd2 absolute\": [[3, \"\\u7df4\\u7fd2-absolute\"]], \"\\u7df4\\u7fd2 ft_to_cm\": [[2, \"\\u7df4\\u7fd2-ft_to_cm\"]], \"\\u7df4\\u7fd2 qe_disc qe_solution1 qe_solution1\": [[2, \"\\u7df4\\u7fd2-qe_disc-qe_solution1-qe_solution1\"]], \"\\u7df4\\u7fd2 quadratic\": [[2, \"\\u7df4\\u7fd2-quadratic\"]], \"\\u7df4\\u7fd2 sign\": [[3, \"\\u7df4\\u7fd2-sign\"]], \"\\u7df4\\u7fd2\\u306e\\u89e3\\u7b54\": [[2, \"\\u7df4\\u7fd2\\u306e\\u89e3\\u7b54\"], [3, \"\\u7df4\\u7fd2\\u306e\\u89e3\\u7b54\"], [5, \"\\u7df4\\u7fd2\\u306e\\u89e3\\u7b54\"], [6, \"\\u7df4\\u7fd2\\u306e\\u89e3\\u7b54\"], [7, \"\\u7df4\\u7fd2\\u306e\\u89e3\\u7b54\"], [8, \"\\u7df4\\u7fd2\\u306e\\u89e3\\u7b54\"], [9, \"\\u7df4\\u7fd2\\u306e\\u89e3\\u7b54\"], [9, \"id23\"], [11, \"\\u7df4\\u7fd2\\u306e\\u89e3\\u7b54\"], [12, \"\\u7df4\\u7fd2\\u306e\\u89e3\\u7b54\"], [14, \"\\u7df4\\u7fd2\\u306e\\u89e3\\u7b54\"], [16, \"\\u7df4\\u7fd2\\u306e\\u89e3\\u7b54\"], [17, \"\\u7df4\\u7fd2\\u306e\\u89e3\\u7b54\"], [18, \"\\u7df4\\u7fd2\\u306e\\u89e3\\u7b54\"], [19, \"\\u7df4\\u7fd2\\u306e\\u89e3\\u7b54\"], [23, \"\\u7df4\\u7fd2\\u306e\\u89e3\\u7b54\"], [26, \"\\u7df4\\u7fd2\\u306e\\u89e3\\u7b54\"], [28, \"\\u7df4\\u7fd2\\u306e\\u89e3\\u7b54\"], [29, \"\\u7df4\\u7fd2\\u306e\\u89e3\\u7b54\"], [30, \"\\u7df4\\u7fd2\\u306e\\u89e3\\u7b54\"]], \"\\u7df4\\u7fd2\\u306e\\u89e3\\u7b54\\u4f8b\": [[21, \"\\u7df4\\u7fd2\\u306e\\u89e3\\u7b54\\u4f8b\"]], \"\\u7df4\\u7fd2\\u306e\\u89e3\\u8aac\": [[7, \"\\u7df4\\u7fd2\\u306e\\u89e3\\u8aac\"], [9, \"\\u7df4\\u7fd2\\u306e\\u89e3\\u8aac\"]], \"\\u7f6e\\u63db\": [[5, \"\\u7f6e\\u63db\"]], \"\\u81ea\\u4f5c\\u30e2\\u30b8\\u30e5\\u30fc\\u30eb\\u306e\\u4f7f\\u3044\\u65b9\": [[15, \"\\u81ea\\u4f5c\\u30e2\\u30b8\\u30e5\\u30fc\\u30eb\\u306e\\u4f7f\\u3044\\u65b9\"]], \"\\u884c\\u306e\\u8aad\\u307f\\u8fbc\\u307f\": [[11, \"\\u884c\\u306e\\u8aad\\u307f\\u8fbc\\u307f\"]], \"\\u884c\\u306e\\u8ffd\\u52a0\\u3068\\u524a\\u9664\": [[20, \"\\u884c\\u306e\\u8ffd\\u52a0\\u3068\\u524a\\u9664\"]], \"\\u8907\\u6570\\u306e\\u5f15\\u6570\": [[10, \"\\u8907\\u6570\\u306e\\u5f15\\u6570\"]], \"\\u8981\\u7d20\\u578b\": [[16, \"\\u8981\\u7d20\\u578b\"]], \"\\u8981\\u7d20\\u6bce\\u306e\\u6f14\\u7b97\": [[16, \"\\u8981\\u7d20\\u6bce\\u306e\\u6f14\\u7b97\"]], \"\\u8ad6\\u7406\\u30a8\\u30e9\\u30fc\": [[4, \"\\u8ad6\\u7406\\u30a8\\u30e9\\u30fc\"]], \"\\u8f9e\\u66f8\\u3068\\u30ea\\u30b9\\u30c8\": [[8, \"\\u8f9e\\u66f8\\u3068\\u30ea\\u30b9\\u30c8\"]], \"\\u8f9e\\u66f8\\u306e\\u30e1\\u30bd\\u30c3\\u30c9\": [[8, \"\\u8f9e\\u66f8\\u306e\\u30e1\\u30bd\\u30c3\\u30c9\"]], \"\\u8fd4\\u5024\": [[10, \"\\u8fd4\\u5024\"]], \"\\u914d\\u5217\\u306e\\u30b9\\u30ab\\u30e9\\u6f14\\u7b97\": [[16, \"\\u914d\\u5217\\u306e\\u30b9\\u30ab\\u30e9\\u6f14\\u7b97\"]], \"\\u914d\\u5217\\u306e\\u4fdd\\u5b58\\u3068\\u5fa9\\u5143\": [[16, \"\\u914d\\u5217\\u306e\\u4fdd\\u5b58\\u3068\\u5fa9\\u5143\"]], \"\\u914d\\u5217\\u306e\\u69cb\\u7bc9\": [[16, \"\\u914d\\u5217\\u306e\\u69cb\\u7bc9\"]], \"\\u914d\\u5217\\u540c\\u58eb\\u306e\\u6f14\\u7b97\": [[16, \"\\u914d\\u5217\\u540c\\u58eb\\u306e\\u6f14\\u7b97\"]], \"\\u914d\\u5217\\u8981\\u7d20\\u306e\\u64cd\\u4f5c\": [[16, \"\\u914d\\u5217\\u8981\\u7d20\\u306e\\u64cd\\u4f5c\"]], \"\\u914d\\u5217\\u8981\\u7d20\\u3092\\u751f\\u6210\\u3059\\u308b\\u69cb\\u7bc9\\u95a2\\u6570\": [[16, \"\\u914d\\u5217\\u8981\\u7d20\\u3092\\u751f\\u6210\\u3059\\u308b\\u69cb\\u7bc9\\u95a2\\u6570\"]], \"\\u95a2\\u6570\\u306e\\u53c2\\u7167\\u306e\\u66f8\\u304d\\u65b9\": [[2, \"\\u95a2\\u6570\\u306e\\u53c2\\u7167\\u306e\\u66f8\\u304d\\u65b9\"]], \"\\u95a2\\u6570\\u306e\\u5b9a\\u7fa9\": [[10, \"\\u95a2\\u6570\\u306e\\u5b9a\\u7fa9\"]], \"\\u95a2\\u6570\\u306e\\u5b9a\\u7fa9\\u3068\\u8fd4\\u5024\": [[2, \"\\u95a2\\u6570\\u306e\\u5b9a\\u7fa9\\u3068\\u8fd4\\u5024\"]], \"\\u96c6\\u5408\\u6f14\\u7b97\": [[23, \"\\u96c6\\u5408\\u6f14\\u7b97\"]], \"\\uff08\\u6ce8\\u610f\\uff09Shift-Enter\\u306b\\u53cd\\u5fdc\\u304c\\u306a\\u304f\\u306a\\u3063\\u305f\\u3068\\u304d\": [[22, \"\\uff08\\u6ce8\\u610f\\uff09Shift-Enter\\u306b\\u53cd\\u5fdc\\u304c\\u306a\\u304f\\u306a\\u3063\\u305f\\u3068\\u304d\"]]}, \"docnames\": [\"1/1-0\", \"1/1-1\", \"1/1-2\", \"1/1-3\", \"1/1-4\", \"2/2-1\", \"2/2-2\", \"2/2-3\", \"3/3-1\", \"3/3-2\", \"3/3-3\", \"4/4-1\", \"4/4-2\", \"4/4-3\", \"5/5-1\", \"5/5-2\", \"5/5-3\", \"6/6-1\", \"6/6-2\", \"6/6-3\", \"7/7-1\", \"7/7-2\", \"appendix/1-jupyter-notebook\", \"appendix/2-set\", \"appendix/3-recursion\", \"appendix/3-visualization\", \"appendix/4-csv\", \"appendix/5-bokeh\", \"appendix/5-command\", \"appendix/5-matplotlib\", \"appendix/5-re\", \"index\", \"index_of_terms\"], \"envversion\": {\"nbsphinx\": 4, \"sphinx\": 63, \"sphinx.domains.c\": 3, \"sphinx.domains.changeset\": 1, \"sphinx.domains.citation\": 1, \"sphinx.domains.cpp\": 9, \"sphinx.domains.index\": 1, \"sphinx.domains.javascript\": 3, \"sphinx.domains.math\": 2, \"sphinx.domains.python\": 4, \"sphinx.domains.rst\": 2, \"sphinx.domains.std\": 2}, \"filenames\": [\"1/1-0.ipynb\", \"1/1-1.ipynb\", \"1/1-2.ipynb\", \"1/1-3.ipynb\", \"1/1-4.ipynb\", \"2/2-1.ipynb\", \"2/2-2.ipynb\", \"2/2-3.ipynb\", \"3/3-1.ipynb\", \"3/3-2.ipynb\", \"3/3-3.ipynb\", \"4/4-1.ipynb\", \"4/4-2.ipynb\", \"4/4-3.ipynb\", \"5/5-1.ipynb\", \"5/5-2.ipynb\", \"5/5-3.ipynb\", \"6/6-1.ipynb\", \"6/6-2.ipynb\", \"6/6-3.ipynb\", \"7/7-1.ipynb\", \"7/7-2.ipynb\", \"appendix/1-jupyter-notebook.ipynb\", \"appendix/2-set.ipynb\", \"appendix/3-recursion.ipynb\", \"appendix/3-visualization.ipynb\", \"appendix/4-csv.ipynb\", \"appendix/5-bokeh.ipynb\", \"appendix/5-command.ipynb\", \"appendix/5-matplotlib.ipynb\", \"appendix/5-re.ipynb\", \"index.rst\", \"index_of_terms.ipynb\"], \"indexentries\": {}, \"objects\": {}, \"objnames\": {}, \"objtypes\": {}, \"terms\": {\"!&\": 5, \"!'\": [5, 9, 23, 30], \"!/\": 28, \"!=\": [5, 6, 9, 23], \"!?\": 30, \"!\\\\\": 30, \"\\\"\\\"\": [5, 30], \"\\\"(\": 30, \"\\\")\": [7, 11, 30], \"\\\",\": 8, \"\\\">\": 30, \"\\\"[\": 30, \"# '\": [11, 20], \"# k\": 21, \"# x\": [3, 24], \"# \\u03c0\": 14, \"# \\u6708\": 29, \"##\": [7, 10, 21], \"#'\": 1, \"#\\\\\": 30, \"#`\": 30, \"#add\": 32, \"#arg\": 28, \"#break\": 9, \"#clear\": 32, \"#csv\": 32, \"#defining\": [2, 10], \"#dictionaries\": 8, \"#discard\": 32, \"#findall\": 32, \"#finditer\": 32, \"#first\": [2, 9], \"#for\": 9, \"#group\": 32, \"#if\": 7, \"#iterators\": 12, \"#list\": 17, \"#lists\": 6, \"#matplotlib\": 32, \"#nested\": 17, \"#numargs\": 28, \"#pass\": 9, \"#pop\": 32, \"#print\": 2, \"#re\": 32, \"#reading\": 11, \"#remove\": 32, \"#scriptname\": 28, \"#sets\": 23, \"#shebang\": 32, \"#sphx\": 25, \"#strings\": 5, \"#sub\": 32, \"#sum\": 28, \"#term\": 12, \"#the\": 9, \"#tuples\": 6, \"#typeiter\": 12, \"#union\": 32, \"#using\": 1, \"#w\": 6, \"#\\u25b2\": 32, \"#\\u300c\": 30, \"#\\u30e1\\u30bf\": 32, \"$'\": 30, \"$\\uff09\": 14, \"%matplotlib\": [25, 29], \"& (\": [16, 20], \"&#\": [2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 17, 18, 19, 23, 24, 26, 27, 28, 29, 30], \"&gt\": [9, 11, 18], \"&lt\": [9, 13, 18, 19, 20, 30], \"' #\": 30, \"'\\\"\": 5, \"'#\": 27, \"''\": [5, 11, 19, 24, 30], \"'(\": 30, \"')\": [3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 16, 17, 18, 20, 21, 23, 24, 25, 26, 27, 29, 30], \"'*\": 29, \"'+\": 9, \"',\": [2, 4, 5, 6, 8, 9, 10, 11, 12, 13, 16, 17, 18, 19, 20, 21, 26, 27, 28, 29, 30], \"'.\": [5, 6, 11, 26], \"':\": [4, 6, 8, 9, 10, 13, 17, 20, 23, 25, 27, 28], \"';\": 30, \"'<\": 30, \"'>\": 30, \"'[\": [5, 30], \"'\\\\\": 30, \"']\": [6, 8, 9, 10, 13, 17, 19, 20, 21, 27], \"'__\": 28, \"'a\": [4, 5, 6, 9, 11, 23, 30], \"'a']\": 9, \"'aaaaaaa\": 5, \"'aabccc\": 23, \"'apple\": 8, \"'atgc\": 6, \"'b\": [6, 9, 23], \"'b']\": 4, \"'banana\": [6, 8], \"'black\": 9, \"'bool\": 16, \"'c\": [5, 6, 9, 23], \"'cat\": 17, \"'complex\": 16, \"'d\": [6, 9], \"'e\": [6, 9], \"'f\": [6, 9, 20], \"'float\": 16, \"'g\": [5, 6, 9], \"'h\": 9, \"'hello\": [5, 10, 19, 30], \"'i\": 9, \"'int\": 16, \"'j\": 9, \"'k\": 9, \"'l\": 9, \"'lo\": 5, \"'mod\": 28, \"'mycolumn\": 20, \"'n\": 6, \"'pen\": 8, \"'r\": [4, 11, 12, 13, 18, 26, 29, 30], \"'s\": [5, 30], \"'sample\": 11, \"'sepal\": 20, \"'shift\": 26, \"'species\": 20, \"'str\": 5, \"'t\": [5, 27, 30], \"'tokyo\": 26, \"'user\": 26, \"'utf\": 26, \"'w\": [11, 26], \"'w']\": 20, \"'white\": 9, \"'x\": [7, 27], \"'y\": [6, 27], \"'z\": [5, 6, 9], \"'}\": [9, 10, 20], \"'\\u5217\": 20, \"'\\uff09\": 10, \"(\\\"\": [5, 7, 8, 30], \"(&\": [4, 5, 6, 7, 8, 10, 11, 12, 13, 19, 30], \"('\": [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 16, 17, 18, 19, 20, 21, 23, 24, 26, 27, 28, 29, 30], \"('s\": 30, \"((\": [6, 14, 16, 18, 23, 30], \"()\": [1, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 19, 20, 21, 23, 25, 26, 27, 28, 29, 30], \"(*\": 10, \"(-\": [1, 3, 4, 27, 29], \"(.\": 30, \"(..\": [13, 24], \"([\": [6, 7, 8, 9, 10, 12, 16, 17, 18, 20, 23, 26, 27, 29, 30], \"(\\\\\": 7, \"(a\": [1, 2, 3, 6, 7, 16, 24, 30], \"(ab\": 30, \"(abs\": 18, \"(add\": 9, \"(all\": 16, \"(args\": 10, \"(ary\": 29, \"(aryx\": 29, \"(atgc\": [5, 6], \"(b\": [1, 16, 30], \"(base\": 24, \"(bc\": 30, \"(c\": [6, 9, 16], \"(change\": 6, \"(characters\": 6, \"(check\": [5, 23, 30], \"(chr\": 9, \"(cls\": 1, \"(collect\": 9, \"(color\": 27, \"(colors\": 27, \"(comprehension\": 17, \"(construct\": 9, \"(cos\": 14, \"(count\": [9, 23], \"(csv\": 26, \"(d\": [9, 18, 20, 25, 27, 29], \"(data\": [24, 27, 29], \"(datareader\": 26, \"(datawriter\": 26, \"(desired\": 27, \"(dic\": [8, 9, 23], \"(e\": 14, \"(egory\": 30, \"(email\": 6, \"(en\": 10, \"(english\": 25, \"(escaped\": 5, \"(exception\": 7, \"(expt\": 24, \"(f\": [2, 11, 12, 13, 18, 19, 26, 29], \"(fact\": [14, 28], \"(factorial\": 14, \"(file\": [4, 11, 13, 18], \"(filter\": 18, \"(float\": [1, 26, 29], \"(floor\": 14, \"(format\": 27, \"(ft\": 2, \"(get\": 30, \"(greet\": 10, \"(greeting\": 10, \"(h\": 2, \"(handle\": 9, \"(height\": [2, 9], \"(hellofile\": 19, \"(hellofileiterator\": 19, \"(helloforever\": 19, \"(i\": [1, 9, 12, 16, 17, 26, 29, 30], \"(identify\": 9, \"(idx\": 16, \"(im\": 29, \"(infile\": 11, \"(int\": [9, 21], \"(iris\": [20, 21], \"(it\": [12, 18], \"(iter\": 12, \"(iterable\": 12, \"(iterator\": 12, \"(itms\": 8, \"(j\": 9, \"(k\": [27, 29], \"(ks\": 8, \"(kwargs\": 10, \"(l\": [24, 27, 29], \"(lambda\": 18, \"(last\": 11, \"(ld\": 8, \"(left\": 9, \"(len\": [8, 9, 17, 20, 26, 27, 29, 30], \"(length\": 17, \"(line\": [11, 12, 19, 21], \"(list\": [8, 9, 17, 19, 23, 27, 30], \"(ln\": [6, 9, 18], \"(ln1\": 9, \"(log\": 14, \"(ls\": [6, 12, 18], \"(ls1\": 25, \"(ls2\": 25, \"(lst\": [9, 17, 27, 29], \"(m\": [2, 30], \"(map\": [16, 18], \"(mapping\": 9, \"(marker\": 27, \"(match\": 30, \"(math\": [1, 2, 14], \"(max\": 18, \"(mi\": 26, \"(month\": 29, \"(months\": 29, \"(mycolumn\": 20, \"(n\": [3, 9, 15, 16, 21, 27, 28], \"(name\": [10, 11, 12, 26], \"(none\": 3, \"(np\": [14, 16, 20], \"(num\": 28, \"(number\": [11, 18, 30], \"(numbers\": [6, 8], \"(numpy\": [14, 26], \"(nums\": 10, \"(obj\": 1, \"(ord\": 9, \"(outfile\": 11, \"(p\": 27, \"(palette\": 27, \"(pi\": 14, \"(point\": 6, \"(pos\": 18, \"(ppap\": 8, \"(qe\": 2, \"(r\": [24, 30], \"(random\": 9, \"(range\": [9, 27], \"(reg\": 30, \"(regular\": 30, \"(remove\": [5, 6], \"(res\": 29, \"(reverse\": [6, 8, 9], \"(row\": [16, 26, 29], \"(s\": [2, 9, 11, 12, 17, 20, 24, 28, 30], \"(self\": [1, 11, 19], \"(sepal\": 20, \"(seq\": 9, \"(set\": 23, \"(shape\": 16, \"(sign\": 7, \"(simple\": 9, \"(sin\": 14, \"(size\": 27, \"(solver\": 21, \"(some\": 9, \"(sorted\": 6, \"(sqrt\": 14, \"(src\": 11, \"(start\": 20, \"(str\": [5, 6, 8, 9, 23, 30], \"(stream\": 1, \"(sum\": [6, 9, 17], \"(sumnumbers\": 30, \"(swap\": [5, 9], \"(sys\": 28, \"(temp\": 29, \"(temperature\": 2, \"(temps\": 29, \"(title\": 27, \"(top\": 27, \"(triple\": 5, \"(true\": 29, \"(u\": 30, \"(v\": [16, 28], \"(value\": [6, 8, 9], \"(var\": 17, \"(ve\": 30, \"(vs\": 8, \"(w\": [9, 17], \"(word\": [5, 30], \"(words\": 9, \"(x\": [1, 2, 3, 4, 6, 7, 9, 12, 17, 18, 21, 24, 25, 26, 27, 29], \"(xp\": 26, \"(y\": [1, 6, 21, 27, 29], \"(year\": [26, 29], \"(years\": [26, 29], \"({\": [8, 9, 18, 20, 23, 27], \"(\\u00d7\": 30, \"(\\u5f0f\": [5, 19], \")\\n#\": [9, 30], \")\\np\": 27, \")\\\"\": 30, \")#\": 30, \")%\": 26, \")&\": [18, 30], \")'\": [29, 30], \")(\": [1, 30], \"))\": [1, 2, 6, 7, 8, 9, 14, 16, 17, 18, 19, 20, 23, 24, 25, 26, 27, 28, 29, 30], \")*\": [1, 2, 9, 17, 24, 30], \")+\": [9, 17, 30], \"),\": [8, 16, 20, 24, 26, 27, 29, 30], \")-\": 9, \").\": [16, 20, 29], \")/\": [1, 9, 10, 17, 21, 27, 29], \"):\": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 15, 16, 17, 18, 19, 23, 24, 26, 27, 28, 29, 30], \");\": [21, 29], \")</\": 30, \")=\": 17, \")>\": 18, \")?\": 30, \")@\": 30, \")[\": 6, \")\\\\\": 30, \")]\": [8, 9, 16, 17, 18, 20, 24, 27, 29, 30], \")`\": 30, \")d\": 30, \")e\": 30, \")t\": 30, \")|\": 30, \")\\u3001\": [2, 9], \")\\u3002\": 22, \")\\u30fb\": 20, \"* (\": 2, \"* b\": 16, \"*&\": 30, \"*'\": [29, 30], \"*(\": [1, 2, 24], \"*(\\\\\": 30, \"*)\": 30, \"**\": [1, 2, 4, 6, 9, 10, 11, 13, 17, 24], \"*-\": [28, 30], \"*..\": 24, \"*\\\\\": 30, \"*]\": [22, 30], \"*av\": 17, \"*b\": 2, \"*c\": 2, \"*g\": [2, 30], \"*m\": 24, \"*n\": 27, \"*number\": 10, \"*x\": [2, 4, 17, 24], \"*y\": 17, \"+ a\": 7, \"+ c\": 9, \"+'\": [10, 30], \"+(\": [27, 29], \"+1\": 9, \"+=\": [9, 29], \"+[\": 9, \"+b\": 2, \"+c\": [0, 2, 22], \"+enter\": [0, 22], \"+i\": 16, \"+j\": 9, \"+name\": 10, \"+return\": 0, \"+s\": [0, 22], \"+v\": [0, 22], \"+w\": 21, \"+x\": [0, 4, 6, 22], \"+z\": [0, 22], \"+\\u2192\": 30, \", \\\"\": 30, \", '\": [5, 9, 10, 11, 20, 23, 27, 30], \", [\": [6, 9, 17, 20], \", axis\": 20, \", color\": 29, \", count\": 9, \", dic\": 9, \", digits\": 5, \", end\": 13, \", fact\": 28, \", file\": 11, \", float\": 26, \", high\": 27, \", i\": 9, \", index\": 20, \", j\": 9, \", key\": 9, \", label\": 29, \", line\": 27, \", list\": 9, \", match\": 30, \", numbers\": 6, \", ppap\": 8, \", str\": 30, \", tick\": 25, \", value\": [6, 9], \",&\": 19, \",'\": [5, 9, 20, 23, 26], \",')\": [5, 17], \",'+\": 10, \",(\": 16, \",)\": [6, 10, 16], \",-\": 18, \",:\": 16, \",:;\": 30, \",[\": [16, 20], \",\\\\\": 30, \",b\": 2, \",c\": 30, \",t\": 30, \",y\": 6, \"-&\": [1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13, 16, 17, 19, 23, 26, 29, 30], \"-'\": [11, 12, 26], \"-(\": 30, \"-(w1\": 21, \"--\": [1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13, 16, 17, 19, 23, 26, 28, 29, 30], \"--&\": [1, 4, 5, 8, 10, 11, 16, 17, 19, 28], \"-5\": 18, \"-7\": 16, \"-\\\\\": 30, \"-a\": [1, 2], \"-and\": [6, 9, 11], \"-as\": 1, \"-av\": 9, \"-average\": 9, \"-b\": [1, 2], \"-c\": [1, 2, 21, 30], \"-calculator\": 1, \"-clauses\": 9, \"-comprehensions\": 17, \"-continue\": 9, \"-d\": 1, \"-defg\": 30, \"-docs\": 20, \"-else\": 9, \"-enter\": 31, \"-except\": 12, \"-existent\": 4, \"-f\": 28, \"-files\": 11, \"-function\": 9, \"-functions\": [2, 10], \"-g\": 30, \"-glr\": 25, \"-input\": 2, \"-introductory\": 25, \"-ipp\": 6, \"-iterable\": 12, \"-jp\": 11, \"-july\": [13, 26], \"-l\": [27, 29], \"-learn\": [31, 32], \"-list\": 17, \"-loops\": 9, \"-means\": 21, \"-notebook\": 13, \"-on\": 9, \"-packages\": [1, 4, 11, 13, 28], \"-place\": [6, 32], \"-printable\": [1, 4], \"-programming\": [2, 9], \"-py\": 25, \"-pyplot\": 25, \"-python\": 1, \"-range\": 9, \"-sample\": [13, 30], \"-separated\": 26, \"-sequences\": 6, \"-statements\": [7, 9], \"-steps\": [2, 9], \"-tab\": 7, \"-temps\": [13, 26, 29], \"-test\": 11, \"-tokyo\": [6, 21, 30], \"-towards\": [2, 9], \"-tutorials\": 25, \"-upper\": 11, \"-writing\": 11, \"-x\": [18, 30], \"-z\": 30, \"-za\": 30, \".\\\"\": [5, 30], \".&\": [1, 4, 11, 13, 18, 30], \".'\": [5, 7, 9, 23, 30], \".)\": [13, 24, 27], \".*\": 30, \".+\": 16, \".,\": 13, \"..\": [2, 3, 5, 6, 7, 8, 9, 11, 12, 13, 14, 16, 17, 18, 19, 20, 23, 24, 26, 27, 29, 30], \"...\": [2, 5, 6, 7, 8, 11, 13, 14, 19, 26, 27, 29, 30], \"../\": 13, \"./\": 13, \".[^\": 30, \".\\\\\": [11, 12, 19], \".]\": [14, 16, 30], \"._\": [1, 12, 19], \".ac\": [6, 21, 30], \".add\": 27, \".app\": 28, \".append\": [6, 8, 9, 12, 26, 29, 30], \".arange\": [16, 27, 29, 32], \".argv\": 28, \".array\": [16, 27, 29, 32], \".assign\": 20, \".bak\": 11, \".bar\": [9, 25, 29], \".binomial\": [16, 32], \".bool\": [16, 32], \".break\": 1, \".capitalize\": 5, \".chdir\": [13, 32], \".circle\": 27, \".clear\": 8, \".close\": [11, 12, 26], \".cluster\": 21, \".coef\": 21, \".colab\": 15, \".colorbar\": 29, \".columndatasource\": [27, 32], \".columns\": 20, \".com\": 0, \".complex\": [16, 32], \".concat\": 20, \".copy\": [6, 8], \".core\": 20, \".cos\": [1, 14, 27, 29, 32], \".count\": [5, 6], \".cross\": 27, \".csv\": [13, 20, 21, 26, 29], \".data\": [21, 26], \".dataframe\": 20, \".dataframegroupby\": 20, \".datasets\": 21, \".decomposition\": 21, \".deferred\": 1, \".describe\": 20, \".dot\": [16, 32], \".dtype\": 16, \".e\": 14, \".ecc\": 30, \".exp\": 29, \".extend\": 6, \".fact\": [15, 28], \".factorial\": 14, \".figure\": [27, 32], \".find\": 5, \".findall\": 30, \".finditer\": 30, \".fit\": 21, \".flat\": 16, \".flip\": 29, \".float\": [16, 20, 21, 32], \".floor\": 14, \".flush\": 1, \".gauss\": 9, \".generic\": 20, \".get\": 8, \".getvalue\": 1, \".go\": 26, \".google\": 0, \".grid\": 29, \".group\": 1, \".groupby\": 20, \".gz\": 16, \".he\": 21, \".head\": [20, 21], \".hist\": 29, \".histogram\": [27, 32], \".href\": 30, \".html\": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 14, 15, 16, 17, 18, 19, 20, 21, 23, 25, 26, 27, 28, 30], \".i\": [30, 32], \".identity\": [16, 32], \".ignorecase\": [30, 32], \".iloc\": 20, \".imshow\": 29, \".index\": [5, 6, 20], \".insert\": 6, \".int\": [16, 32], \".intercept\": 21, \".io\": [0, 22], \".ipynb\": [13, 15], \".items\": 8, \".j\": 16, \".jma\": 26, \".join\": 6, \".jp\": [6, 21, 26, 30], \".keys\": [8, 25], \".legend\": 29, \".linalg\": [16, 32], \".line\": [9, 27], \".linear\": 21, \".linearcolormapper\": [27, 32], \".lines\": 9, \".linspace\": [16, 21, 26, 32], \".lmplot\": 21, \".loadtxt\": [16, 32], \".loc\": 20, \".log\": 14, \".lower\": [5, 30], \".match\": 30, \".matmul\": [16, 32], \".max\": [1, 27], \".merge\": 20, \".metrics\": 21, \".min\": 27, \".model\": 21, \".models\": [27, 32], \".modules\": 15, \".n\": 19, \".natcorp\": 30, \".ndarray\": [16, 32], \".ndenumerate\": 16, \".ndim\": 16, \".newaxis\": 21, \".newline\": 1, \".norm\": [16, 32], \".ones\": [14, 16, 32], \".org\": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 14, 15, 16, 17, 18, 19, 20, 21, 23, 25, 26, 27, 28, 29], \".output\": [27, 32], \".ox\": 30, \".palettes\": 27, \".pi\": [1, 14, 27, 29, 32], \".plot\": [9, 21, 25, 26, 29], \".plotting\": [27, 32], \".png\": [13, 29], \".poisson\": [16, 32], \".poly\": 26, \".polyfit\": 26, \".pop\": [6, 8], \".predict\": 21, \".pretty\": 1, \".py\": [1, 4, 11, 13, 15, 28], \".pydata\": [20, 27], \".pyplot\": [9, 21, 25, 26, 29], \".python\": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 14, 15, 17, 18, 19, 23, 26, 28, 30], \".quad\": 27, \".rand\": [20, 27, 29, 32], \".randint\": [24, 27, 29], \".randn\": [16, 27, 29, 32], \".random\": [16, 20, 27, 29, 32], \".ravel\": 16, \".read\": [11, 13, 20, 21, 30], \".reader\": [26, 29, 32], \".readline\": [11, 12, 19], \".readthedocs\": [0, 22], \".rect\": 27, \".remove\": [6, 30], \".replace\": [5, 9, 23], \".representationprinter\": 1, \".research\": 0, \".reset\": [27, 32], \".reshape\": 16, \".reverse\": 6, \".rstrip\": 11, \".s\": 19, \".savefig\": 29, \".savetxt\": [16, 32], \".scatter\": [21, 25, 27, 29], \".scipy\": 16, \".search\": 30, \".series\": 20, \".set\": 1, \".setdefault\": 8, \".shape\": 16, \".show\": [25, 26, 27, 32], \".sin\": [1, 14, 27, 29, 32], \".singleton\": 1, \".size\": 16, \".sort\": [6, 16, 20, 30, 32], \".split\": [6, 9, 32], \".splitlines\": 1, \".sqrt\": [1, 2, 14, 16, 32], \".sre\": 30, \".sub\": 30, \".sum\": 16, \".t\": 16, \".target\": 21, \".textiowrapper\": 13, \".title\": 29, \".transform\": [21, 27], \".txt\": [4, 11, 12, 13, 18, 30], \".type\": 1, \".u\": [6, 21, 30], \".uk\": 30, \".upload\": 15, \".upper\": [5, 6, 11], \".values\": [8, 25], \".vbar\": 27, \".verbose\": 1, \".write\": 11, \".writer\": [26, 32], \".writerow\": 26, \".xlabel\": 29, \".xml\": [13, 30], \".ylabel\": 29, \".zeros\": [16, 29, 32], \".\\u300d\": 14, \"/ b\": 16, \"/ n\": 27, \"/&\": 30, \"/'\": 30, \"/(\": 30, \"/)&\": 18, \"/..\": 13, \"//\": [1, 9, 24], \"/appendix\": 28, \"/basics\": 16, \"/bin\": 28, \"/classes\": [12, 19], \"/compound\": 3, \"/controlflow\": [2, 3, 7, 9, 10], \"/core\": [1, 4, 11, 13], \"/courses\": 21, \"/csv\": 26, \"/datamodel\": 19, \"/datastructures\": [6, 8, 17, 23], \"/dd\": 30, \"/doc\": 16, \"/en\": [0, 22], \"/env\": 28, \"/errors\": 4, \"/folders\": 30, \"/formatters\": 1, \"/functional\": 18, \"/functions\": 2, \"/getting\": [20, 21], \"/gmd\": 26, \"/import\": [14, 15, 28], \"/index\": [20, 21], \"/inputoutput\": 11, \"/interactiveshell\": [4, 11, 13], \"/interpreter\": 28, \"/introduction\": [1, 2, 5, 6, 9], \"/introductory\": 25, \"/ipykernel\": [28, 30], \"/ipython\": [1, 4, 11, 13], \"/ja\": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 14, 15, 17, 18, 19, 23, 26, 28], \"/jmori\": 28, \"/latest\": [0, 22], \"/len\": 9, \"/lib\": [1, 4, 11, 13, 28], \"/math\": [1, 14], \"/modules\": [1, 14, 15, 28], \"/n\": 17, \"/novel\": [11, 13], \"/numeric\": 1, \"/numpy\": 16, \"/obsdl\": 26, \"/pandas\": 20, \"/pretty\": 1, \"/projects\": 28, \"/pyplot\": 25, \"/python\": [1, 4, 11, 13, 28], \"/quickstart\": 16, \"/re\": 30, \"/risk\": 26, \"/sample\": 13, \"/sec\": 30, \"/stable\": [20, 21], \"/stdtypes\": [3, 12], \"/sys\": 28, \"/t\": 30, \"/text\": 13, \"/tutorial\": 21, \"/tutorials\": 25, \"/user\": 16, \"/users\": 28, \"/utpython\": [1, 4, 11, 13, 28], \"/y\": 1, \"/z\": 1, \"0d\": 30, \"0k\": 30, \"0to\": 30, \"0x\": [9, 11, 18, 19, 20, 30], \"0\\u304b\": 5, \"10\": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 16, 17, 18, 19, 20, 21, 23, 26, 27, 29, 30], \"11\": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 16, 17, 18, 19, 20, 21, 23, 26, 27, 29, 30], \"12\": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 16, 17, 18, 19, 20, 21, 23, 26, 27, 29, 30], \"12\\u6708\": 29, \"13\": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 16, 17, 18, 19, 20, 21, 23, 26, 27, 29, 30], \"14\": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 16, 17, 18, 19, 20, 21, 23, 26, 27, 29, 30], \"15\": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 16, 17, 18, 19, 20, 21, 23, 26, 27, 29, 30], \"16\": [1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 16, 17, 18, 19, 20, 23, 26, 27, 29, 30], \"17\": [1, 2, 3, 5, 6, 8, 9, 10, 11, 12, 16, 17, 18, 19, 20, 23, 26, 27, 29, 30], \"18\": [1, 2, 3, 5, 6, 8, 9, 10, 11, 12, 16, 17, 18, 19, 20, 23, 26, 29, 30], \"19\": [1, 2, 3, 5, 6, 8, 9, 10, 11, 12, 16, 17, 18, 19, 20, 23, 26, 29, 30], \"1]\": 9, \"1d\": [26, 27], \"1e\": 1, \"1f\": 27, \"1grw\": 30, \"1s\": [13, 30], \"1st\": 25, \"1to\": 30, \"1\\u305a\": 0, \"1\\u3064\": [1, 2, 4, 5, 6, 7, 9, 11, 12, 17, 19, 21, 23, 24, 26, 28, 30], \"1\\u30d0\\u30a4\\u30c8\": 1, \"1\\u6708\": 29, \"1\\u6b21\": 16, \"1\\u884c\": [6, 7, 11, 26, 29], \"2abcd\": 30, \"2b\": 18, \"2c\": 30, \"2d\": [9, 21, 30], \"2e\": 27, \"2m\": 24, \"2nd\": 25, \"2sld\": 30, \"2x\": [16, 30], \"2\\u3064\": [1, 3, 4, 5, 6, 7, 9, 11, 16, 20, 21, 23, 25, 29, 30], \"2\\u4e57\": 16, \"2\\u91cd\": 17, \"2\\u9805\": 1, \"30\": 6, \"3xx\": 30, \"3\\u3064\": [4, 6, 9, 10, 17, 21, 27, 28, 30], \"47\": 29, \"4ac\": 2, \"4e\": 30, \"4n\": 30, \"4str\": 30, \"4\\u3064\": [4, 7, 16, 20, 21, 29], \"53\": 29, \"5ax\": 30, \"5b\": 30, \"5f\": 30, \"5t\": 30, \"5x\": 30, \"5yxcx\": 30, \"5\\u3064\": 29, \"6g\": 30, \"6\\u6708\": 29, \"7a\": 30, \"7b\": 27, \"7d\": 30, \"7\\u6708\": [29, 32], \"8b\": 30, \"9c\": 30, \"9d\": 27, \":#\": [5, 9], \":&\": [6, 30], \":'\": [5, 6, 9, 12, 20, 23, 28, 29, 30], \":,\": 16, \":-\": [5, 16], \":/\": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 25, 26, 27, 28, 29, 30], \"::\": 6, \":[a\": 30, \":]\": [5, 16, 20, 24, 27, 28], \":bbb\": 30, \":ccc\": 30, \":ddd\": 30, \":hello\": 5, \":j\": 17, \":len\": 17, \":mm\": 30, \":world\": 5, \":y\": 6, \":\\u300d\": 30, \";&\": [1, 5, 7, 11, 13, 19, 30], \";'\": [5, 9, 23], \";(\": [18, 30], \";)\": [4, 5, 6, 7, 8, 10, 11, 12, 13, 30], \";*\": 30, \";-\": 28, \";.\": 30, \";:\": [4, 8, 9, 10, 11, 17, 19, 30], \";=\": 4, \";@\": 30, \";[\": 30, \";\\\\\": 30, \";]\": [4, 6, 8, 9, 12, 17, 18, 19, 24, 26, 30], \";^\": 30, \";_\": [13, 19, 26], \";barcontainer\": 9, \";frozen\": 11, \";function\": 18, \";lambda\": 18, \";map\": 18, \";matplotlib\": 9, \";pandas\": 20, \";re\": 30, \";|\": 30, \";}\": [10, 17, 23], \";\\u260e\": 30, \"< '\": 5, \"</\": 30, \"</w\": 30, \"<=\": [5, 6, 23, 24, 27, 29], \"<a\": 30, \"<w\": 30, \"= '\": [5, 6, 9, 11, 12, 30], \"= b\": 6, \"= c\": 9, \"= d\": 6, \"= i\": [9, 15, 28], \"= n\": 3, \"= r\": [24, 27, 29], \"= x\": 9, \"= y\": [3, 6, 7], \"= z\": 7, \"=\\\"\": 30, \"=&\": [13, 27, 30], \"='\": [5, 9, 10, 11, 12, 13, 18, 20, 21, 25, 26, 27, 29, 30], \"=(\": [27, 30], \"=..\": [11, 27], \"==\": [2, 3, 4, 5, 6, 7, 8, 9, 12, 16, 17, 18, 19, 21, 23, 24, 26, 28, 29, 30], \"==\\\"\": 11, \"=='\": 21, \"=[\": [6, 17, 20], \"=\\\\\": 30, \"=abs\": 18, \"=basicticker\": 27, \"=bin\": 27, \"=c\": 27, \"=colors\": 27, \"=d\": 27, \"=data\": 27, \"=e\": 29, \"=f\": 11, \"=false\": [20, 21], \"=hist\": 27, \"=int\": 29, \"=invert\": 18, \"=iris\": [20, 21], \"=labels\": 9, \"=lambda\": 18, \"=len\": [18, 27], \"=linearregression\": 21, \"=list\": [25, 27], \"=logisticregression\": 21, \"=mapper\": 27, \"=model\": 21, \"=mybin\": 29, \"=none\": 27, \"=np\": [16, 20, 21], \"=plt\": 29, \"=printftickformatter\": 27, \"=self\": 1, \"=src\": 27, \"=transform\": 27, \"=true\": [6, 18, 20], \"=x\": 21, \"=y\": 21, \"={\": [4, 11, 13], \">\\\"\": 30, \">'\": 30, \">(\": 30, \">=\": [3, 4, 26], \">>\": 28, \">\\\\\": 30, \">\\\\\\\"\": 30, \">]*\": 30, \">n\": 18, \"?\\\"\": 30, \"?&\": 30, \"?'\": [5, 9, 23, 30], \"?=\": 30, \"?\\\\\": 30, \"?r\": 30, \"@'\": [6, 30], \"@ipp\": 6, \"@test\": 30, \"@utokyo\": 6, \"[&\": [6, 8, 9, 12, 17, 18, 24, 26, 30], \"['\": [6, 8, 9, 10, 13, 17, 19, 20, 21, 27, 30], \"['a\": [6, 9], \"['b\": 20, \"['x\": 6, \"[(\": [8, 16, 20, 21], \"[-\": [5, 16, 18, 20], \"[.\": 30, \"[1\": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 23, 24, 25, 26, 27, 28, 29, 30], \"[2\": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 23, 24, 25, 26, 27, 28, 29, 30], \"[3\": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 23, 24, 25, 26, 27, 28, 29, 30], \"[4\": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 23, 24, 25, 26, 27, 28, 29, 30], \"[5\": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 23, 24, 25, 26, 27, 28, 29, 30], \"[6\": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 23, 24, 25, 26, 27, 28, 29, 30], \"[7\": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 14, 16, 17, 18, 19, 20, 21, 23, 24, 26, 27, 28, 29, 30], \"[8\": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 14, 16, 17, 18, 19, 20, 21, 23, 24, 26, 27, 29, 30], \"[9\": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 16, 17, 18, 19, 20, 21, 23, 26, 27, 29, 30], \"[:\": [5, 9, 16, 20, 21, 24, 27], \"[[\": [6, 9, 14, 16, 17, 20, 21, 26], \"[['\": 20, \"[]\": 6, \"[^\": 30, \"[^<\": 30, \"[^>\": 30, \"[^@\": 30, \"[^a\": 30, \"[a\": [6, 16, 30], \"[a*]\": 30, \"[abc\": 30, \"[abcdefg\": 30, \"[abs\": 18, \"[b\": 6, \"[chr\": 17, \"[cls\": 1, \"[d\": 30, \"[gcdbeaf\": 30, \"[i\": [9, 17, 24, 26, 27, 29], \"[i1\": [24, 27, 29], \"[i2\": [24, 27, 29], \"[int\": 5, \"[j\": 9, \"[k\": 18, \"[ord\": 9, \"[sd\": 30, \"[value\": 9, \"[w\": 9, \"[word\": 30, \"[x\": [6, 17, 18], \"[y\": [6, 29], \"\\\\\\\"\": [5, 30], \"\\\\'\": 5, \"\\\\(\": 30, \"\\\\(a\": 30, \"\\\\)\": 30, \"\\\\*\": 30, \"\\\\+\": 30, \"\\\\.\": 30, \"\\\\\\\\\": 30, \"\\\\\\\\\\\\\": 30, \"\\\\d\": [30, 32], \"\\\\ge\": 16, \"\\\\n\": [5, 11, 30], \"\\\\nc\": 6, \"\\\\nworld\": 11, \"\\\\pi\": [27, 29], \"\\\\r\": 11, \"\\\\s\": [30, 32], \"\\\\sum\": 9, \"\\\\t\": [5, 11, 30, 32], \"\\\\times\": 16, \"\\\\u\": 30, \"\\\\w\": [30, 32], \"\\\\|\": 30, \"]\\nb\": 6, \"]\\nx\": 21, \"] #\": 6, \"]$\": 30, \"]'\": 30, \"](\": [1, 30], \"])\": [5, 6, 7, 8, 9, 10, 12, 16, 17, 18, 20, 23, 24, 26, 27, 28, 29, 30], \"]*\": [6, 9, 24, 27, 29, 30], \"]+\": [9, 30], \"],\": [3, 4, 5, 6, 7, 8, 9, 12, 13, 14, 16, 17, 20, 26, 27, 28, 29], \"]-\": 30, \"].\": [9, 20, 21], \"]:\": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30], \"]=\": 9, \"][\": [6, 8, 9, 17, 29, 30], \"]]\": [6, 9, 16, 17, 18, 20, 26], \"]e\": 30, \"]{\": 30, \"]|\": 30, \"]}\": 8, \"^>\": 30, \"^@\": 30, \"^a\": 30, \"^abc\": 30, \"^bcdef\": 30, \"^ef\": 30, \"^{\": 29, \"_(\": 1, \"_)\": 16, \"_[\": 21, \"_]\": 30, \"__\": [1, 12, 18, 19, 26, 28, 32], \"_abs\": 18, \"_acgt\": 30, \"_acgtstr\": 30, \"_air\": 2, \"_atgc\": [5, 6], \"_augc\": 9, \"_axis\": 27, \"_bar\": 27, \"_big\": 18, \"_bpcnt\": 6, \"_bpname\": 5, \"_bppair\": 5, \"_browser\": 13, \"_c\": 21, \"_capitalletters\": 9, \"_characters\": [11, 23], \"_class\": 1, \"_clause\": 5, \"_clusters\": 21, \"_codonnum\": 9, \"_codons\": 9, \"_collision\": [8, 9], \"_colon\": 5, \"_color\": 27, \"_commas\": 9, \"_components\": 21, \"_conv\": 13, \"_count\": [5, 6, 9], \"_countlist\": 6, \"_csv\": [20, 21, 32], \"_d\": [8, 20], \"_dash\": 27, \"_day\": 30, \"_deferred\": 1, \"_dic\": 17, \"_dicsize\": 23, \"_dict\": [10, 30], \"_difference\": 23, \"_digits\": 1, \"_dna\": 5, \"_domain\": 6, \"_double\": 5, \"_edges\": 27, \"_engsentence\": 9, \"_engsentences\": [5, 9, 23, 30], \"_engwords\": 9, \"_enter\": [19, 32], \"_error\": 21, \"_escaped\": 5, \"_even\": 3, \"_evenindex\": 6, \"_ex\": 26, \"_exit\": [19, 32], \"_exp\": 29, \"_extension\": 30, \"_file\": [27, 30, 32], \"_first\": 12, \"_fruits\": 6, \"_function\": 24, \"_global\": 10, \"_hour\": 30, \"_in\": 13, \"_index\": [5, 20, 32], \"_init\": [19, 32], \"_int\": 1, \"_ip\": 30, \"_ipv\": 30, \"_iris\": [20, 21], \"_irist\": 21, \"_iter\": [12, 19, 32], \"_jis\": [11, 13, 26, 28], \"_key\": 18, \"_km\": 21, \"_label\": [9, 25, 27], \"_launcher\": 28, \"_layout\": 27, \"_len\": 20, \"_lengh\": 21, \"_length\": [1, 20, 21], \"_line\": [11, 12], \"_lines\": 18, \"_list\": [6, 9, 10, 17, 30], \"_lists\": [9, 17], \"_local\": 10, \"_long\": 18, \"_lookup\": [8, 9], \"_lower\": 5, \"_lsearch\": 9, \"_mac\": 13, \"_main\": 19, \"_mapper\": 27, \"_match\": [9, 30], \"_matrix\": [9, 16, 17, 26], \"_max\": 1, \"_menu\": 13, \"_min\": 30, \"_model\": 21, \"_month\": 30, \"_monthday\": 30, \"_monthdaystr\": 30, \"_months\": 29, \"_monthstr\": 30, \"_mro\": 1, \"_n\": 9, \"_name\": [28, 32], \"_next\": [12, 19, 32], \"_notebook\": [27, 32], \"_num\": 27, \"_numbers\": 18, \"_odd\": 3, \"_of\": [11, 13, 18], \"_open\": [4, 11, 13], \"_output\": [27, 32], \"_pair\": 5, \"_plot\": 21, \"_pos\": 30, \"_postalcode\": 30, \"_pprint\": 1, \"_pprinters\": 1, \"_predicted\": 21, \"_printers\": 1, \"_punctuation\": 9, \"_punctuations\": 5, \"_py\": 13, \"_quated\": 5, \"_rdic\": 17, \"_rec\": [24, 27, 29], \"_reg\": 21, \"_res\": 5, \"_row\": 29, \"_score\": 21, \"_script\": 30, \"_selection\": 21, \"_seq\": 1, \"_set\": 17, \"_sin\": 29, \"_single\": 5, \"_size\": [9, 21], \"_sort\": [24, 27, 29], \"_split\": 21, \"_square\": 16, \"_squared\": 21, \"_sre\": 30, \"_started\": [20, 21], \"_state\": 21, \"_stmts\": 3, \"_str\": [1, 9, 30], \"_strings\": 9, \"_subclass\": 26, \"_sum\": 6, \"_temperature\": 2, \"_temps\": [26, 29], \"_terms\": 13, \"_test\": 21, \"_text\": 5, \"_textbook\": 13, \"_ticks\": 27, \"_time\": 30, \"_timestr\": 30, \"_tokyotemps\": 29, \"_totuple\": 6, \"_train\": 21, \"_type\": 19, \"_types\": 1, \"_upper\": 11, \"_value\": [18, 19], \"_values\": [20, 32], \"_variable\": 4, \"_wid\": 20, \"_width\": [1, 20, 21, 27], \"_win\": 13, \"_words\": 23, \"_x\": 29, \"_years\": 29, \"_{\": 9, \"`)\": 29, \"`;\": 29, \"`\\uff09\": 30, \"a1\": [6, 16, 28], \"a1b\": 30, \"a5bab\": 27, \"aa\": [5, 9, 24, 30], \"aaa\": [17, 30], \"aaaaaa\": 30, \"aab\": 24, \"aabbcc\": 30, \"aabc\": 24, \"aabcc\": 24, \"aabccc\": 23, \"aabdceabdae\": 23, \"aagccccatggtaa\": [5, 6], \"ab\": [5, 17, 30], \"ababc\": 30, \"ababcd\": 30, \"abb\": 30, \"abbb\": 30, \"abc\": [5, 6, 9, 17, 19, 30], \"abcc\": 24, \"abcd\": 6, \"abcde\": 30, \"abcdef\": 30, \"abcdefg\": 30, \"abcdefgh\": 30, \"abcdefxyz\": 30, \"abcdefxyzdef\": 30, \"abd\": [5, 30], \"abe\": 30, \"above\": 22, \"abs\": [3, 18, 26], \"ac\": 30, \"acaacgta\": 30, \"acaba\": 23, \"access\": [4, 10], \"accgtagcacatcggaaattgcact\": 30, \"accountname\": 30, \"accuracy\": 21, \"acd\": 30, \"acdb\": 12, \"acdf\": 30, \"acgt\": 30, \"ackroyd\": 9, \"across\": 23, \"act\": 9, \"ad\": [11, 12, 13], \"add\": [9, 32], \"ade\": 30, \"adipiscing\": [11, 12, 13], \"adriatic\": 23, \"after\": [4, 6, 9, 16], \"ah\": 30, \"aliqua\": [11, 12, 13], \"aliquip\": [11, 12, 13], \"all\": [5, 6], \"allsubstrings\": 17, \"almost\": 30, \"alpha\": [27, 29], \"alt\": 5, \"amet\": [11, 12, 13], \"an\": [4, 6, 9, 16, 23, 30], \"anaconda\": 28, \"anaonda\": 28, \"and\": [1, 2, 3, 6, 9, 16, 20, 26, 27, 29, 30, 31, 32], \"anim\": [11, 12, 13], \"ans\": 29, \"anthing\": 30, \"app\": 28, \"append\": [6, 9, 17, 32], \"appendix\": [13, 32], \"apple\": [6, 8, 9, 23, 25, 30], \"apples\": 30, \"application\": 28, \"arange\": [27, 29, 32], \"are\": [4, 7, 11, 13, 30], \"aren\": 5, \"arg\": 28, \"args\": [4, 10, 11, 13], \"argsprint\": [13, 28], \"argument\": [10, 32], \"argv\": 28, \"array\": 16, \"artists\": 9, \"ary\": 29, \"aryx\": 29, \"aryy\": 29, \"as\": [4, 9, 11, 12, 13, 15, 16, 18, 19, 20, 21, 25, 26, 27, 29, 30, 31, 32], \"ascending\": [20, 32], \"ascii\": 16, \"assert\": [2, 3, 12, 31, 32], \"assertionerror\": [2, 3, 4, 12], \"assign\": [16, 20, 32], \"assignment\": [2, 5, 32], \"associated\": [4, 10], \"astype\": 21, \"at\": [4, 9, 18, 19, 20], \"atgc\": [5, 6], \"attribute\": [19, 30], \"attributeerror\": [19, 30], \"augmented\": [2, 32], \"aute\": [11, 12, 13], \"auxiliary\": 5, \"av\": [9, 17], \"average\": [9, 10], \"ax\": 2, \"axis\": [20, 29, 32], \"a\\u4e00\\u6587\\u5b57\": 30, \"ba\": 6, \"bacaad\": 30, \"baltic\": 23, \"banana\": [6, 8, 25, 30], \"bar\": [2, 29, 32], \"base\": [24, 28], \"bash\": 28, \"basicticker\": 27, \"bbacbabbbbc\": 30, \"bbb\": [17, 30], \"bc\": [17, 30], \"bcc\": 24, \"bcdef\": 30, \"bdata\": [27, 29], \"be\": [7, 27], \"being\": 5, \"below\": 22, \"better\": 30, \"big\": 9, \"bin\": 27, \"bins\": 29, \"bit\": [16, 28], \"black\": 9, \"blank\": [5, 30], \"block\": [4, 6, 9], \"blue\": [9, 27, 29], \"bmax\": [3, 7], \"bmi\": 2, \"bo\": 30, \"body\": 30, \"bokeh\": [13, 27, 32], \"bokehdeprecationwarning\": 27, \"bokehjs\": 27, \"bonjour\": 10, \"boo\": [2, 20, 30], \"boooo\": 30, \"booooo\": 30, \"booooooo\": 30, \"bottom\": 27, \"bp\": 6, \"brandy\": 8, \"break\": [11, 31, 32], \"brown\": 17, \"bubble\": [27, 29], \"builtins\": [4, 11, 13], \"but\": [5, 7, 12, 30], \"bx\": 2, \"by\": [1, 4, 11, 13], \"byte\": 11, \"c1\": 20, \"ca\": 30, \"call\": [1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13, 16, 17, 19, 23, 26, 28, 29, 30], \"called\": 18, \"can\": [4, 11, 13, 16], \"cannot\": [4, 10], \"capitalize\": [5, 32], \"car\": 30, \"carpet\": [9, 30], \"castanets\": 30, \"cat\": [8, 9, 17, 30], \"category\": [9, 27, 30], \"cattle\": 30, \"cc\": 24, \"cc7\": 27, \"ccc\": [9, 17, 30], \"cccccggcacct\": 9, \"ccg\": 9, \"ccnt\": 9, \"cct\": 9, \"cd\": [28, 30], \"cde\": 30, \"cell\": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 19, 23, 26, 28, 29, 30], \"change\": 6, \"character\": [1, 4], \"characters\": 6, \"check\": [5, 23, 30], \"checkpoint\": 22, \"chelly\": 6, \"chicken\": 8, \"chr\": [9, 32], \"cillum\": [11, 12, 13], \"circle\": [27, 32], \"class\": [19, 26], \"clear\": [8, 32], \"close\": [11, 32], \"clouds\": 9, \"cls\": 1, \"cluster\": 21, \"cm\": 2, \"cmd\": [0, 22], \"coast\": 5, \"code\": [21, 22], \"codec\": 11, \"codecs\": 11, \"code\\u30bb\\u30eb\": [0, 1, 2, 7, 15, 22, 25], \"coding\": 28, \"coffee\": 8, \"col\": 5, \"colab\": [13, 31], \"colaboratory\": [7, 13, 15, 31], \"colabratory\": 0, \"collect\": 9, \"colo\": 30, \"color\": [9, 27, 29, 30], \"colorbar\": [27, 29], \"colormap\": 21, \"colors\": [9, 27], \"colou\": 30, \"colour\": 30, \"columndatasource\": 27, \"columns\": 20, \"come\": 23, \"comma\": 26, \"command\": [13, 32], \"commodo\": [11, 12, 13], \"comparisons\": [27, 29], \"complex\": [26, 32], \"concat\": [20, 32], \"consectetur\": [11, 12, 13], \"consequat\": [11, 12, 13], \"console\": 13, \"construct\": 9, \"contains\": 28, \"continent\": 23, \"continue\": [31, 32], \"conversion\": 1, \"copy\": [0, 8, 22, 32], \"cos\": [1, 14, 27, 29], \"count\": [5, 6, 9, 20, 23, 32], \"crash\": [4, 11, 13], \"cross\": [27, 32], \"csv\": [13, 29, 31, 32], \"ctrl\": [0, 22], \"culpa\": [11, 12, 13], \"cupidatat\": [11, 12, 13], \"current\": 15, \"curried\": 8, \"curtain\": 23, \"curves\": [27, 29], \"cut\": [0, 22], \"cycle\": 1, \"d1\": 9, \"d10\": 9, \"d3\": 27, \"dashed\": 27, \"data\": [11, 13, 21, 24, 27, 29], \"dataframe\": [31, 32], \"dataframegroupby\": 20, \"datareader\": [26, 29], \"datawriter\": 26, \"day\": 30, \"dd\": 30, \"ddb\": 27, \"ddd\": 30, \"de\": [10, 30], \"decode\": 11, \"def\": [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 15, 16, 17, 18, 19, 23, 24, 26, 27, 28, 29, 30, 32], \"defabcxyz\": 30, \"default\": [4, 11, 13], \"deferred\": 1, \"defg\": 30, \"defined\": [2, 4, 7, 10, 17, 29, 30], \"definition\": 4, \"del\": [6, 7, 8, 20, 32], \"delattr\": 26, \"delimiter\": 16, \"deprecated\": 27, \"descended\": 23, \"describe\": [20, 32], \"deserunt\": [11, 12, 13], \"detected\": [4, 16], \"dfccce\": 27, \"dialect\": 26, \"dic\": [8, 9, 23, 30], \"dict\": 8, \"dictionary\": [31, 32], \"difference\": 32, \"different\": 7, \"digits\": [1, 5], \"dimensions\": 16, \"dir\": 26, \"directory\": [4, 11, 13, 15], \"discard\": 32, \"division\": [1, 4], \"dna\": 5, \"do\": [9, 11, 12, 13], \"doc\": 26, \"docs\": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 14, 15, 16, 17, 18, 19, 23, 26, 28, 30], \"does\": 5, \"doesn\": 30, \"dog\": [8, 9, 17, 30], \"doing\": [4, 11, 13], \"dolor\": [11, 12, 13], \"dolore\": [11, 12, 13], \"domain\": 6, \"don\": 30, \"donation\": 5, \"donations\": 5, \"doors\": 5, \"dot\": 32, \"dotted\": 27, \"doublequated\": 5, \"down\": 5, \"downloads\": 28, \"dozens\": 8, \"drive\": 0, \"drop\": [20, 32], \"dst\": 11, \"dtype\": [16, 20, 29], \"duis\": [11, 12, 13], \"during\": 6, \"ea\": [11, 12, 13], \"eccs\": 0, \"edgware\": 9, \"edit\": 22, \"efa\": 9, \"effect\": 30, \"efg\": 30, \"egg\": 8, \"eiusmod\": [11, 12, 13], \"element\": 16, \"elems\": 16, \"elephant\": [8, 9, 17], \"elf\": 21, \"elif\": [9, 24, 27, 29, 31, 32], \"elit\": [11, 12, 13], \"else\": [1, 3, 8, 18, 24, 27, 29, 30, 31, 32], \"email\": 6, \"empty\": [6, 8], \"emptyfile\": 19, \"en\": 10, \"encoding\": [11, 12, 13, 18, 20, 26, 29, 30, 32], \"end\": [9, 11, 29], \"enim\": [11, 12, 13], \"enter\": [0, 1, 19, 22], \"enumerate\": [16, 31, 32], \"env\": 28, \"eq\": 26, \"equal\": [7, 9], \"errno\": [4, 11, 13], \"error\": [4, 9, 26, 27], \"esc\": 22, \"escape\": 30, \"escaped\": 5, \"esse\": [11, 12, 13], \"est\": [11, 12, 13], \"et\": [11, 12, 13], \"eu\": [11, 12, 13], \"euc\": 11, \"evening\": 30, \"ex\": [11, 12, 13], \"example\": 7, \"exceeds\": 1, \"excel\": 26, \"except\": 12, \"excepteur\": [11, 12, 13], \"exception\": [7, 19], \"execution\": 27, \"exercitation\": [11, 12, 13], \"exit\": 19, \"exp\": 29, \"expected\": [4, 6, 9], \"expression\": 30, \"expt\": 24, \"extend\": [6, 32], \"fa\": 30, \"fact\": [14, 15, 28], \"factorial\": [13, 14, 15, 28], \"false\": [3, 5, 6, 7, 8, 9, 11, 16, 17, 18, 20, 23, 24, 26, 27, 29, 30, 32], \"fd\": [4, 11, 13], \"felt\": 2, \"fgadeab\": 30, \"fgdeab\": 30, \"fgtgh\": 30, \"fib\": 3, \"fig\": 13, \"figure\": 27, \"file\": [1, 4, 11, 13, 18, 22, 30], \"filenotfounderror\": [4, 11, 13], \"files\": 15, \"fill\": 27, \"filter\": [31, 32], \"final\": 11, \"find\": [1, 5, 6, 30, 32], \"findall\": 32, \"finder\": 11, \"finditer\": 32, \"fine\": 30, \"finish\": 9, \"first\": 29, \"firstvalue\": 28, \"fit\": [21, 32], \"fitp\": 26, \"flatten\": [16, 32], \"float\": [1, 2, 5, 20, 26, 29, 32], \"fmatch\": 9, \"foo\": [2, 20], \"for\": [1, 2, 8, 15, 17, 18, 19, 24, 27, 28, 29, 30, 31, 32], \"force\": 2, \"format\": 26, \"formatter\": 27, \"found\": 5, \"four\": 9, \"fr\": 10, \"from\": [9, 15, 21, 23, 24, 27, 29, 31, 32], \"fruits\": 6, \"fugiat\": [11, 12, 13], \"func\": 5, \"function\": [1, 4, 10], \"gca\": 9, \"ge\": 26, \"get\": [1, 8, 9, 30, 32], \"getattribute\": 26, \"getstate\": 26, \"giraffe\": [17, 30], \"global\": 32, \"glossary\": 12, \"gn\": 30, \"good\": 30, \"google\": [0, 15], \"graph\": 29, \"greater\": 7, \"green\": [9, 27, 29], \"greet\": 10, \"greeting\": 10, \"grid\": [29, 32], \"group\": 32, \"groupby\": [20, 32], \"gt\": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 16, 17, 18, 19, 20, 23, 26, 28, 29, 30], \"guard\": 5, \"guten\": 10, \"gzip\": 16, \"ha\": 30, \"had\": 30, \"hall\": 5, \"ham\": 8, \"handle\": [8, 9], \"has\": [16, 19, 23, 30], \"hash\": 26, \"have\": 30, \"he\": [5, 30], \"head\": [20, 32], \"heat\": 29, \"height\": [2, 9], \"hello\": [5, 6, 7, 10, 11, 18, 19, 30], \"hellofile\": 19, \"hellofileiterator\": 19, \"helloforever\": 19, \"hellohello\": 10, \"hellohellohello\": [5, 10], \"hellooooo\": 30, \"here\": 21, \"heron\": 2, \"hh\": 30, \"hi\": [9, 10, 30], \"him\": 30, \"hist\": [27, 29, 32], \"hit\": 30, \"hour\": 30, \"house\": 9, \"how\": 30, \"howto\": 18, \"href\": 30, \"html\": [0, 27, 30], \"http\": [20, 26, 30], \"https\": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 14, 15, 16, 17, 18, 19, 21, 22, 23, 25, 26, 27, 28, 29, 30], \"hue\": 21, \"humidity\": 2, \"hundreds\": 8, \"hw\": 30, \"i1\": [24, 27, 29], \"i2\": [24, 27, 29], \"id\": [11, 12, 13, 26], \"identify\": 9, \"idx\": 16, \"if\": [1, 4, 5, 6, 8, 9, 11, 13, 15, 17, 18, 19, 24, 26, 27, 28, 29, 30, 31, 32], \"if\\u6587\": [3, 7], \"ignore\": 20, \"iii\": 9, \"iloc\": 32, \"im\": 29, \"ime\": 5, \"import\": [1, 2, 9, 13, 14, 15, 16, 20, 21, 24, 25, 26, 27, 28, 29, 30, 32], \"impshow\": 29, \"imshow\": 29, \"in\": [0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 22, 23, 24, 26, 27, 28, 29, 30, 31, 32], \"incididunt\": [11, 12, 13], \"increase\": 1, \"indentationerror\": [4, 6, 9], \"indented\": [4, 6, 9], \"index\": [5, 6, 8, 13, 20, 32], \"indexerror\": 5, \"infile\": 11, \"inhomogeneous\": 16, \"init\": [19, 26, 29], \"initial\": 20, \"inline\": [21, 25, 26, 29], \"inplace\": [20, 32], \"input\": 11, \"insert\": [6, 32], \"insert\\u30e1\\u30cb\\u30e5\\u30fc\": 1, \"instead\": 27, \"int\": [1, 5, 6, 9, 17, 20, 26, 28, 29, 30, 32], \"integer\": 1, \"intersection\": 32, \"invalid\": [1, 4, 5, 11, 14, 28, 29, 30], \"invert\": 18, \"io\": [4, 11, 13], \"ip\": 30, \"ipp\": [6, 13], \"ipsum\": [11, 12, 13], \"ipv4\": 30, \"ipynb\": [0, 13, 22], \"ipython\": [2, 4, 11, 13], \"iris\": [13, 20, 21], \"iron\": 23, \"irure\": [11, 12, 13], \"is\": [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 17, 19, 23, 29, 30, 32], \"it\": [4, 5, 9, 10, 11, 12, 13, 17, 18, 30], \"itarator\": 12, \"item\": [5, 9], \"items\": [9, 27, 29, 32], \"iter\": [19, 30, 31, 32], \"iterable\": [6, 12, 16], \"iterate\": 12, \"itms\": 8, \"itr\": 30, \"james\": 30, \"japan\": 10, \"jis\": 5, \"jklm\": 30, \"john\": [9, 30], \"join\": [6, 32], \"jp\": 30, \"jugemu\": [13, 18], \"july\": 26, \"jupyter\": [0, 13, 15, 22], \"just\": 1, \"kernel\": 22, \"key\": [8, 9, 18, 30, 32], \"keyerror\": [4, 8, 23], \"keys\": [9, 32], \"kg\": 2, \"kick\": 9, \"king\": 9, \"kiwi\": [8, 25], \"kmeans\": [21, 32], \"kmk\": 28, \"know\": [4, 11, 13, 30], \"ks\": 8, \"kwargs\": [4, 10, 11, 13], \"label\": [25, 29], \"labels\": 9, \"labore\": [11, 12, 13], \"laboris\": [11, 12, 13], \"laborum\": [11, 12, 13], \"lambda\": [18, 32], \"larger\": [7, 9], \"last\": [1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13, 16, 17, 19, 23, 26, 28, 29, 30], \"latin\": 16, \"lbfgs\": 21, \"ld\": 8, \"le\": 26, \"lear\": 9, \"left\": [9, 27], \"legend\": [27, 29, 32], \"len\": [5, 6, 8, 9, 10, 11, 16, 17, 18, 20, 23, 24, 27, 28, 29, 32], \"lengend\": 29, \"length\": [17, 20], \"less\": 7, \"let\": [4, 11, 13], \"library\": [1, 2, 3, 12, 14, 26, 28, 30], \"license\": 13, \"likely\": [4, 11, 13], \"limit\": 1, \"line\": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 19, 21, 23, 26, 27, 28, 29, 30, 32], \"linear\": [27, 29], \"linearcolormapper\": 27, \"linearregression\": [21, 32], \"lines\": [1, 12], \"linestyle\": 29, \"link\": 9, \"linspace\": 32, \"linux\": [11, 13], \"list\": [8, 9, 12, 16, 17, 18, 23, 27, 30, 31, 32], \"list1\": 17, \"literal\": [4, 28], \"little\": 9, \"ln\": [6, 9, 18], \"ln1\": 9, \"ln2\": [6, 9], \"lns\": 6, \"lo\": 5, \"load\": 21, \"loading\": 27, \"loadtxt\": 16, \"loc\": [29, 32], \"local\": [4, 10], \"locate\": 30, \"location\": [9, 27], \"locked\": 5, \"log\": 14, \"logisticregression\": [21, 32], \"loop\": 6, \"lorem\": [11, 12, 13], \"low\": 27, \"lower\": [5, 9, 32], \"ls\": [6, 8, 18, 25], \"ls1\": 25, \"ls2\": 25, \"lst\": [9, 17, 27, 29], \"lstrip\": 5, \"lt\": [9, 11, 18, 26, 30], \"m1\": 30, \"ma\": 26, \"macos\": [5, 11, 13], \"magna\": [11, 12, 13], \"main\": [18, 19, 28], \"make\": 5, \"map\": [31, 32], \"mapper\": 27, \"mapping\": 9, \"mar\": 23, \"markdown\": 22, \"markdown\\u30bb\\u30eb\": [0, 15, 22], \"marker\": [27, 29], \"match\": [30, 32], \"matches\": 30, \"materials\": 28, \"math\": [1, 2, 14, 32], \"matoplotlib\": 29, \"matplotlib\": [9, 13, 21, 26, 29, 31, 32], \"max\": [1, 3, 20, 26, 31, 32], \"mdata\": [27, 29], \"me\": [5, 30], \"mean\": [20, 21, 32], \"median\": 4, \"merge\": [20, 24, 27, 29, 32], \"method\": 27, \"mi\": 26, \"midsummer\": 9, \"min\": [20, 26, 32], \"mine\": [5, 30], \"minim\": [11, 12, 13], \"minute\": 30, \"mm\": 30, \"mod\": 28, \"mode\": 13, \"model\": 21, \"modified\": [4, 11, 13], \"module\": [2, 26], \"mollit\": [11, 12, 13], \"mon\": 30, \"money\": 5, \"month\": [29, 30], \"months\": 29, \"month\\u6708\": 29, \"more\": 9, \"morning\": 30, \"most\": [1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13, 16, 17, 19, 23, 26, 28, 29, 30], \"mouse\": 9, \"my\": 29, \"mybin\": 29, \"mycolumn\": 20, \"myiris\": 20, \"myitem\": 9, \"n1\": [24, 27, 29], \"n2\": 24, \"name\": [2, 4, 7, 10, 11, 12, 13, 17, 20, 28, 29, 30], \"nameerror\": [2, 4, 7, 10, 17, 29, 30], \"nclick\": 30, \"ndarray\": 16, \"nduis\": 11, \"ne\": 26, \"negative\": 7, \"negatives\": 7, \"new\": [22, 26, 28], \"newline\": 26, \"newlines\": 1, \"nexcepteur\": 11, \"next\": [18, 19, 26, 31, 32], \"ng\": 3, \"nisi\": [11, 12, 13], \"no\": [4, 9, 11, 13, 19, 30], \"non\": [1, 4, 5, 11, 12, 13], \"none\": [2, 5, 6, 7, 8, 9, 10, 17, 30, 31, 32], \"nonetype\": [2, 6, 30], \"normal\": 1, \"nostrud\": [11, 12, 13], \"not\": [2, 3, 4, 5, 6, 7, 8, 9, 10, 16, 17, 20, 23, 29, 30, 32], \"notebook\": [0, 15, 31], \"notip\": 30, \"novel\": [11, 13], \"np\": [14, 16, 20, 21, 27, 29], \"ntime\": 5, \"nulla\": [11, 12, 13], \"num\": 28, \"numargs\": 28, \"number\": [10, 11, 18, 27, 29, 30], \"numbers\": [6, 8, 30], \"numpy\": [14, 20, 21, 26, 27, 29, 31, 32], \"obj\": 1, \"object\": [5, 6, 9, 19, 20, 23, 30], \"observing\": 5, \"occaecat\": [11, 12, 13], \"of\": [2, 5, 9, 27, 28, 29, 30], \"officia\": [11, 12, 13], \"ok\": [3, 5], \"on\": [4, 6, 9, 18, 20, 30, 32], \"onde\": 23, \"ones\": 32, \"online\": 4, \"only\": [16, 25], \"onlyone\": 6, \"open\": [4, 11, 12, 13, 18, 26, 29, 30, 32], \"operand\": 2, \"or\": [3, 4, 6, 9, 11, 13, 16, 20, 26, 31, 32], \"orange\": [8, 9, 23, 25], \"ord\": [9, 17, 32], \"orient\": 9, \"orig\": [8, 9], \"os\": [11, 13, 32], \"os\\u4e0a\": 13, \"othello\": 9, \"out\": [5, 26], \"outfile\": 11, \"output\": [1, 27], \"palette\": 27, \"pandas\": [16, 21, 27, 31, 32], \"parameter\": [10, 32], \"pariatur\": [11, 12, 13], \"part\": 16, \"pass\": [0, 12, 19, 22, 31, 32], \"paste\": [0, 22], \"pca\": [21, 32], \"pd\": [20, 21], \"peck\": 30, \"pen\": [6, 8, 9, 23], \"pep\": [4, 5, 7, 32], \"pep8\": 4, \"peppers\": 30, \"petal\": [20, 21], \"peter\": 30, \"pets\": [8, 30], \"pi\": [14, 27, 29], \"picked\": 30, \"pickled\": 30, \"piece\": 30, \"pinapple\": 8, \"pineapples\": 30, \"piper\": 30, \"plaintextformatter\": 1, \"play\": 30, \"please\": 30, \"plot\": [25, 29, 32], \"plt\": [9, 21, 25, 26, 29], \"plutonium\": 9, \"png\": [13, 27], \"point\": 6, \"pop\": [6, 8, 32], \"port\": 8, \"pos\": [18, 30], \"position\": 11, \"positive\": [7, 9], \"positives\": 6, \"power\": 24, \"powershell\": 28, \"ppap\": 8, \"pprint\": 1, \"predict\": [21, 32], \"prefixes\": 24, \"pretty\": 1, \"price\": 5, \"print\": [3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 23, 26, 28, 29, 30, 31, 32], \"printer\": 1, \"printftickformatter\": 27, \"proclaim\": 30, \"prod\": [15, 28], \"proident\": [11, 12, 13], \"projects\": [1, 4, 11, 13], \"prompt\": 28, \"pron\": 30, \"py\": [13, 15, 28, 30], \"pycodestyle\": 4, \"pyplot\": 29, \"python\": [0, 1, 2, 3, 4, 5, 6, 7, 9, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21, 22, 25, 26, 28, 30, 32], \"pythontest\": 28, \"quad\": [27, 29, 32], \"quadratic\": 27, \"que\": 9, \"qui\": [11, 12, 13], \"quick\": 17, \"quiet\": 5, \"quis\": [11, 12, 13], \"rained\": 30, \"rainy\": 30, \"raise\": [4, 11, 13, 19, 32], \"random\": [9, 21, 24, 27, 29, 32], \"range\": [5, 12, 15, 16, 17, 24, 26, 27, 28, 29, 31, 32], \"rangeindex\": 20, \"ravel\": [16, 32], \"re\": [13, 32], \"read\": [11, 20, 32], \"readline\": [11, 12, 19, 32], \"recent\": [1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13, 16, 17, 19, 23, 26, 28, 29, 30], \"rect\": 27, \"recursion\": [13, 32], \"recursive\": 24, \"red\": 9, \"redirects\": 1, \"reduce\": 26, \"reference\": [3, 14, 15, 19, 28], \"reg\": 30, \"registered\": 1, \"remove\": [5, 6, 32], \"removed\": 27, \"replace\": [1, 5, 23, 32], \"repr\": [1, 26], \"reprehenderit\": [11, 12, 13], \"representationprinter\": 1, \"requested\": 16, \"requires\": 9, \"res\": 29, \"reset\": 27, \"reshape\": [16, 20, 29, 32], \"result\": 8, \"return\": [1, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13, 15, 16, 17, 18, 19, 22, 23, 24, 26, 27, 28, 29, 30, 31, 32], \"reverse\": [6, 8, 9, 18, 32], \"richard\": 9, \"right\": 27, \"round\": [2, 5], \"row\": [16, 20, 26, 29], \"rows\": 26, \"rstrip\": [5, 11], \"sample\": [11, 12, 13, 28], \"sato\": 28, \"save\": 27, \"savefig\": [29, 32], \"savetxt\": 16, \"saw\": 30, \"scatter\": [27, 29, 32], \"scikit\": [31, 32], \"scriptname\": 28, \"sd\": 30, \"seaborn\": 21, \"search\": [30, 32], \"secondvalue\": 28, \"sed\": [11, 12, 13], \"seen\": 5, \"self\": [1, 19], \"sep\": 11, \"sepal\": [20, 21], \"seq\": 9, \"sequence\": [16, 30], \"ser\": 9, \"series\": [31, 32], \"set\": [13, 31, 32], \"setattr\": 26, \"setdefault\": [8, 32], \"setosa\": [20, 21], \"setting\": 16, \"shape\": 16, \"she\": 30, \"shebang\": 32, \"shift\": [0, 1, 7, 11, 13, 22, 26, 28], \"show\": [27, 29], \"sign\": 7, \"simple\": 9, \"sin\": [14, 27, 29], \"singleton\": 1, \"sint\": [11, 12, 13], \"sit\": [11, 12, 13], \"site\": [1, 4, 11, 13, 28], \"size\": 27, \"sizeof\": 26, \"sjis\": 29, \"sklearn\": 21, \"sleep\": 9, \"slipped\": 30, \"small\": [13, 26], \"smaller\": 9, \"sns\": 21, \"soccer\": 9, \"solver\": 21, \"some\": 9, \"something\": 9, \"sort\": [6, 20, 27, 29, 32], \"sorted\": [6, 16, 20, 31, 32], \"sort\\u30e1\\u30bd\\u30c3\\u30c9\": [6, 30], \"source\": 27, \"spam\": 6, \"span\": 30, \"species\": [20, 21], \"split\": [6, 17, 23, 30, 32], \"sqrt\": [14, 16], \"square\": 4, \"squares\": [6, 17], \"src\": [11, 27], \"start\": [9, 11, 28], \"statement\": [2, 6, 9, 32], \"std\": 20, \"step\": [9, 20], \"stettin\": 23, \"stop\": [9, 20], \"stopiteration\": [12, 19, 26, 32], \"str\": [5, 6, 8, 9, 10, 11, 17, 23, 26, 30, 32], \"str1\": 8, \"stratify\": 21, \"stream\": 1, \"string\": [1, 4, 31, 32], \"stringfileiterator\": 19, \"stringio\": 1, \"strings\": 17, \"strip\": 5, \"styles\": 9, \"sub\": 32, \"subclasshook\": 26, \"subscriptable\": 23, \"substitution\": 2, \"substr\": 5, \"substring\": 5, \"such\": [4, 11, 13], \"suffixes\": 24, \"suit\": 30, \"sum\": [9, 10, 17, 18, 28, 32], \"sumnumbers\": 30, \"sunt\": [11, 12, 13], \"super\": [19, 32], \"supercalifragilisticexpialidocious\": 9, \"support\": 5, \"swap\": [5, 9], \"symmetric\": 23, \"syntax\": [1, 5, 14, 29, 30], \"syntaxerror\": [1, 4, 5, 14, 29, 30], \"syntaxwarning\": 30, \"sys\": [1, 15, 28], \"ta\": 0, \"tab\": 7, \"tag\": 10, \"target\": 30, \"tea\": 8, \"teacher\": 30, \"temp\": 29, \"temperature\": 2, \"tempest\": 9, \"tempor\": [11, 12, 13], \"temps\": 29, \"terminal\": [13, 28], \"terra\": 23, \"test\": [11, 13, 21, 28, 30], \"text\": [5, 11, 13, 30], \"than\": [7, 9], \"that\": [1, 30], \"the\": [1, 2, 4, 5, 10, 15, 16, 17, 23, 28, 30], \"them\": 1, \"there\": 5, \"they\": [5, 30], \"thirdvalue\": 28, \"this\": [4, 5, 10, 30], \"thow\": 30, \"three\": [9, 30], \"tick\": 9, \"ticker\": 27, \"time\": [5, 9, 30], \"title\": [27, 29, 32], \"to\": [1, 4, 5, 7, 9, 11, 13, 15, 23, 30], \"today\": 30, \"tokyo\": [13, 26, 29], \"too\": 6, \"total\": 9, \"traceback\": [1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13, 16, 17, 19, 23, 26, 28, 29, 30], \"train\": [9, 21], \"transform\": [21, 27, 32], \"trieste\": 23, \"triple\": 5, \"true\": [0, 1, 3, 5, 6, 7, 8, 9, 11, 12, 16, 17, 18, 19, 20, 22, 23, 24, 26, 27, 29, 30, 32], \"try\": 12, \"ttcggggtaccatt\": 5, \"tup\": 6, \"tuple\": [17, 31, 32], \"tutorial\": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 14, 15, 17, 19, 23, 28], \"txt\": [11, 13, 16], \"type\": [1, 2, 5, 6, 8, 10, 12, 16, 19, 23, 32], \"typeerror\": [2, 5, 6, 16, 23], \"uh\": 5, \"ullamco\": [11, 12, 13], \"unboundlocalerror\": [4, 10], \"undefined\": 4, \"undo\": [0, 22], \"unfortunately\": 9, \"unicode\": 26, \"unicodedecodeerror\": 11, \"union\": 32, \"unix\": 28, \"unsupported\": 2, \"unterminated\": 4, \"untitled\": 22, \"upload\": 15, \"uploaded\": 15, \"upper\": [5, 9, 11, 32], \"url\": [0, 5], \"use\": [1, 4, 11, 13, 27], \"user\": 26, \"usr\": 28, \"ut\": [11, 12, 13], \"utf\": [11, 12, 13, 15, 18, 26, 28, 30], \"utilities\": 28, \"v2\": 28, \"val\": 9, \"value\": [2, 4, 6, 8, 9, 10, 27, 28, 32], \"valueerror\": [1, 4, 5, 6, 11, 13, 16, 28], \"values\": [9, 21, 26, 32], \"var\": [17, 30], \"variable\": [4, 10], \"variance\": 9, \"vb\": 30, \"vbar\": [27, 32], \"velit\": [11, 12, 13], \"veniam\": [11, 12, 13], \"verb\": 30, \"versicolor\": [20, 21], \"vhi\": 30, \"vietnam\": 30, \"virginica\": [20, 21], \"viridis\": 21, \"visualization\": [13, 32], \"voluptate\": [11, 12, 13], \"vs\": [8, 27, 29], \"want\": 5, \"was\": [16, 27, 30], \"we\": 30, \"weight\": 2, \"were\": 5, \"what\": [4, 11, 13, 30], \"where\": [4, 10], \"while\": [0, 11, 12, 18, 22, 30, 31, 32], \"white\": [9, 27], \"width\": 20, \"wikipedia\": 1, \"will\": [7, 27], \"windows\": [5, 11, 13], \"wine\": 8, \"with\": [1, 4, 9, 10, 12, 13, 16, 18, 19, 27, 28, 29, 30, 31, 32], \"won\": [4, 11, 13], \"woo\": 20, \"word\": [5, 9, 30], \"words\": [9, 17], \"work\": [24, 27, 29], \"world\": [5, 7, 10, 11, 18, 30], \"would\": 30, \"write\": [11, 32], \"writerow\": 26, \"writerows\": 26, \"www\": [26, 30], \"w\\u30bf\\u30b0\": 30, \"xlabel\": [29, 32], \"xml\": 30, \"xp\": 26, \"xs\": 12, \"xyz\": 30, \"x\\u8ef8\": [27, 29], \"yeah\": 9, \"year\": [26, 29, 30], \"years\": [26, 29], \"yesterday\": 30, \"ylabel\": [29, 32], \"you\": [4, 5, 11, 13, 30], \"your\": [21, 30], \"youth\": 5, \"yx\": 27, \"y\\u8ef8\": [27, 29], \"zero\": [1, 4, 6, 7], \"zerodivisionerror\": [1, 4], \"zeros\": 32, \"zip\": 13, \"{&\": [8, 9, 10, 17, 23], \"{'\": [8, 9, 10, 13, 25], \"{w\": 17, \"{x\": [30, 32], \"{}\": [8, 23], \"|&\": 30, \"|'\": 30, \"|(\": 21, \"|)\": 30, \"|..\": 30, \"|abc\": 30, \"|ade\": 30, \"|an\": 30, \"|b\": 30, \"|c\": 30, \"|d\": 30, \"|de\": 30, \"|evening\": 30, \"|g\": 30, \"|i\": 30, \"|t\": 30, \"|the\": 30, \"|tle\": 30, \"|\\u03c9\\u30fb\": 30, \"|\\uff20\": 30, \"} #\": [9, 23], \"}$\": 30, \"}'\": 30, \"})\": [8, 9, 18, 23, 27], \"},\": [8, 13, 20, 30], \"}-\": 30, \"}:\": [4, 11, 13], \"}[\": 4, \"}^\": 9, \"\\u00a5n\": 5, \"\\u00e1'\": 9, \"\\u00e1,\": 9, \"\\u00e7a\": 23, \"\\u03c9\\u30fb`\": 30, \"\\u2026\\u300d\": 7, \"\\u2026\\uff1f\": 9, \"\\u2500\\u2500\": 13, \"\\u25b2bokeh\": 31, \"\\u25b2csv\": 31, \"\\u25b2for\": 31, \"\\u25b2jupyter\": 31, \"\\u25b2matplotlib\": 31, \"\\u25b2python\": 31, \"\\u25b2with\": 31, \"\\u29f5n\": 5, \"\\u3001\\\"\": 6, \"\\u3001$\": 14, \"\\u3001'\": 20, \"\\u3001*\": [22, 30], \"\\u3001for\": 18, \"\\u3001|\": 30, \"\\u3001\\u2026\": [7, 29], \"\\u3001\\u25cf\": 0, \"\\u3001\\u300c\": [0, 2, 7, 9, 14, 21, 30], \"\\u3001\\u300c\\u6708\": 30, \"\\u3001\\u6708\": 29, \"\\u3001\\uff08\": [16, 30], \"\\u3002*\": 30, \"\\u3002csv\": 20, \"\\u3002numpy\": 20, \"\\u3002return\": 2, \"\\u3002scikit\": 21, \"\\u3002shift\": 22, \"\\u3002sin\": 1, \"\\u3002y\": 29, \"\\u3002\\u3002\": 28, \"\\u3002\\u300d\": [9, 11], \"\\u3002\\u3044\": 20, \"\\u3002\\u304f\\u308b\": 11, \"\\u3002\\u3057\\u304b\\u3057\": 30, \"\\u3002\\u3059\": 30, \"\\u3002\\u3064\\u3051\": 30, \"\\u3002\\u3064\\u307e\\u308a\": 30, \"\\u3002\\u307e\\u305a\": 21, \"\\u3002\\u307e\\u305f\": [2, 5, 6, 9, 20, 21, 29, 30], \"\\u3002\\u30ad\\u30fc\": 9, \"\\u3002\\u7d04\": 1, \"\\u3002\\uff08\": [1, 3, 5, 7, 11, 23, 26, 28, 30], \"\\u3002\\uff09\": [0, 1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 16, 17, 18, 19, 23, 26, 30], \"\\u300c+\": 0, \"\\u300c.\": [0, 15], \"\\u300cipv4\": 30, \"\\u300copen\": 0, \"\\u300c\\u25b2\": 6, \"\\u300c\\u3059\\u3079\\u3066\": 0, \"\\u300c\\u30d1\\u30a4\": 14, \"\\u300c\\u30e2\\u30b8\\u30e5\\u30fc\\u30eb\": 14, \"\\u300c\\u30ea\\u30b9\\u30c8\": 8, \"\\u300c\\u53f3\": 1, \"\\u300c\\u542b\\u3080\": 30, \"\\u300c\\u5f0f\": 7, \"\\u300c\\u6708\": 30, \"\\u300c\\u9e7f\": 11, \"\\u300f\\u300e\": 26, \"\\u3042\\u3044\\u3046\\u3048\": 11, \"\\u3042\\u3048\": 16, \"\\u3042\\u3052\": [1, 32], \"\\u3042\\u3063\": [1, 2, 4, 7, 10, 12, 17, 20, 30], \"\\u3042\\u3063\\u3068\\u307e\\u30fc\\u304f\": 30, \"\\u3042\\u3068\": 7, \"\\u3042\\u307e\\u3059\": 7, \"\\u3042\\u3089\\u304b\\u3058\\u3081\": 3, \"\\u3042\\u3089\\u3086\\u308b\": [6, 8, 30], \"\\u3042\\u308a\": [0, 2, 3, 4, 5, 6, 7, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 22, 23, 24, 25, 26, 27, 28, 30, 31, 32], \"\\u3042\\u308b\": [0, 1, 2, 3, 4, 6, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 19, 21, 26, 27, 30, 31, 32], \"\\u3042\\u308b\\u3044\": [5, 6, 7, 9, 10, 11, 20, 21, 28], \"\\u3042\\u308c\": [5, 6, 7, 9, 10, 21], \"\\u3044\\u3044\": [1, 2, 6, 14, 18, 24, 30], \"\\u3044\\u304b\": 30, \"\\u3044\\u304d\": [2, 6, 9, 12, 20, 24], \"\\u3044\\u304f\\u3064\\u304b\": [1, 4, 5, 24], \"\\u3044\\u304f\\u3089\": 2, \"\\u3044\\u3061\\u3044\\u3061\": 18, \"\\u3044\\u3064\\u307e\\u3067\": 0, \"\\u3044\\u307e\\u305b\": [0, 9, 11, 14, 15, 19, 30], \"\\u3044\\u308b\": [0, 1, 2, 3, 4, 5, 7, 8, 9, 11, 12, 13, 14, 15, 16, 18, 19, 20, 21, 22, 23, 24, 26, 27, 28, 29, 30, 31], \"\\u3044\\u308c\": [0, 3, 5, 16, 30], \"\\u3044\\u308f\\u3086\\u308b\": [5, 6], \"\\u3046\\u3061\": [2, 3, 7, 9, 18, 19, 30], \"\\u3046\\u3064\": 9, \"\\u304a\\u3044\": [5, 6, 13, 14, 17, 19, 21, 24, 30], \"\\u304a\\u304a\\u307e\\u304b\": 9, \"\\u304a\\u304a\\u3088\\u305d\\u306e\": 4, \"\\u304a\\u304d\": [1, 5, 8, 9, 26], \"\\u304a\\u304d\\u307e\\u3057\\u3087\": 1, \"\\u304a\\u304f\": [3, 30], \"\\u304a\\u3051\\u3070\": 2, \"\\u304a\\u3051\\u308b\": [2, 3, 4, 6, 8, 9, 12, 13, 18, 19, 20, 21, 28, 31, 32], \"\\u304a\\u307e\\u3058\": 1, \"\\u304a\\u3088\\u3073\": [8, 9], \"\\u304a\\u3089\": 11, \"\\u304a\\u308a\": [5, 7, 9, 11, 17, 20, 21, 26, 29, 30], \"\\u304a\\u308f\\u308c\": 9, \"\\u304b\\u304b\\u308a\": [6, 9], \"\\u304b\\u304b\\u308b\": [6, 9], \"\\u304b\\u304b\\u308f\\u3089\": 8, \"\\u304b\\u304d\\u304f\\u3051\": 11, \"\\u304b\\u304d\\u304f\\u3051\\u3053\": 11, \"\\u304b\\u304e\": 6, \"\\u304b\\u3055\": 11, \"\\u304b\\u305f\\u3061\": 11, \"\\u304b\\u3064\": [3, 7, 30], \"\\u304b\\u3064\\u3044\": 11, \"\\u304b\\u3069\": [6, 8, 30], \"\\u304b\\u3069\\u3046\": [2, 6, 8, 9, 16, 30], \"\\u304b\\u306b\\u95a2\\u308f\\u3089\": 19, \"\\u304b\\u3082\": [2, 10, 30], \"\\u304b\\u3089\": [0, 1, 2, 3, 4, 5, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 19, 21, 22, 23, 24, 26, 27, 28, 29, 30, 31, 32], \"\\u304b\\u308f\": 8, \"\\u304b\\u308f\\u308a\": 1, \"\\u304b\\u6708\": [26, 29], \"\\u304c\\u3042\\u308a\": [19, 30], \"\\u304c\\u3042\\u308c\": 27, \"\\u304c\\u3044\\u305a\\u308c\": 7, \"\\u304c\\u304f\\u7247\": 20, \"\\u304c\\u3061\": 11, \"\\u304c\\u3063\": [1, 3, 6, 7, 12, 18, 31], \"\\u304c\\u3064\\u3051\": 20, \"\\u304c\\u306a\\u3044\": 30, \"\\u304c\\u3088\\u308a\": 1, \"\\u304c\\u3089\\u3093\": 11, \"\\u304c\\u308b\": [6, 31, 32], \"\\u304c\\u308f\\u304b\\u308a\": [2, 7, 9, 16, 18, 19, 21, 27, 29], \"\\u304d\\u305f\": 30, \"\\u304d\\u3061\\u3093\": 4, \"\\u304d\\u307e\\u3063\": 6, \"\\u304f\\u3060\": [0, 1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 26, 27, 28, 29, 30, 31], \"\\u304f\\u308b\": [7, 24], \"\\u304f\\u308c\": [2, 4, 11], \"\\u3053\\u3046\\u3057\\u3066\": 5, \"\\u3053\\u3048\\u308c\": 9, \"\\u3053\\u3053\": [0, 1, 2, 3, 4, 5, 6, 7, 10, 11, 12, 13, 16, 17, 19, 20, 21, 25, 26, 28, 29, 30], \"\\u3053\\u3053\\u3067\": [1, 2, 3, 6, 7, 12, 19, 25, 26, 27], \"\\u3053\\u3053\\u306b\": 17, \"\\u3053\\u3053\\u306e\": 7, \"\\u3053\\u3053\\u307e\\u3067\": [4, 10, 18, 30], \"\\u3053\\u3061\\u3089\": [1, 11, 19], \"\\u3053\\u3068\": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 26, 27, 28, 29, 30], \"\\u3053\\u306e\": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 24, 25, 26, 27, 28, 30], \"\\u3053\\u3080\": 4, \"\\u3053\\u308c\": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 22, 26, 27, 28, 30], \"\\u3053\\u308c\\u3089\": [0, 1, 2, 3, 4, 5, 8, 10, 14, 16, 19, 20, 30], \"\\u3053\\u3093\\u306a\": 11, \"\\u3054\\u3068\": [6, 14, 19, 20, 21, 23, 26, 29], \"\\u3055\\u3044\": [0, 1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 26, 27, 28, 29, 30, 31], \"\\u3055\\u304c\": 9, \"\\u3055\\u3066\": [4, 9, 12, 13, 18, 28, 30], \"\\u3055\\u3089\": [7, 8], \"\\u3055\\u3089\\u306b\": [3, 6, 7, 9, 11, 17, 18, 19, 25, 26], \"\\u3057\\u304b\": [9, 11, 30], \"\\u3057\\u304b\\u3057\": [1, 4, 5, 6, 10, 11, 12, 18, 19, 28, 30], \"\\u3057\\u304b\\u3082\": 16, \"\\u3057\\u304f\": 30, \"\\u3057\\u305d\\u306e\": 21, \"\\u3057\\u3064\\u3064\": 29, \"\\u3057\\u3066\": [1, 5, 6, 9, 10, 11, 14, 18, 19, 20, 21, 22, 24, 26, 28, 30], \"\\u3057\\u3070\\u3057\\u3070\": [4, 6], \"\\u3057\\u307e\\u3044\": [2, 6, 7, 8, 11, 22], \"\\u3057\\u307e\\u3046\": [5, 30], \"\\u3057\\u307e\\u3057\\u3087\": [1, 2, 4, 10, 19, 22, 26, 28], \"\\u3057\\u307e\\u3059\": [6, 8, 9, 17, 21, 30], \"\\u3057\\u307e\\u305b\": [19, 24, 25, 26, 30], \"\\u3057\\u307e\\u3063\": 2, \"\\u3057\\u3084\\u3059\\u304f\": 28, \"\\u3057\\u3088\": [1, 3, 4, 6, 11, 24, 28], \"\\u3057\\u308c\": [2, 10, 30], \"\\u3059\\u3050\": 6, \"\\u3059\\u3064\\u304b\\u308a\": 11, \"\\u3059\\u306a\\u308f\\u3061\": [1, 3, 6, 7, 8, 16, 18, 23, 26, 30], \"\\u3059\\u3079\\u304d\": 4, \"\\u3059\\u308b\": [0, 1, 2, 3, 4, 5, 7, 9, 10, 11, 12, 13, 14, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32], \"\\u3059\\u308c\": [0, 2, 5, 6, 7, 27, 28], \"\\u305a\\u3063\\u3068\": [2, 19], \"\\u305a\\u3064\": [6, 9, 13, 24, 26, 29, 30], \"\\u305a\\u306b\": [1, 11], \"\\u305a\\u308c\": [5, 18, 20, 30], \"\\u305a\\u3090\\u3076\\u3093\": 11, \"\\u305b\\u305a\": 28, \"\\u305b\\u308b\": [1, 3, 4, 6, 8, 9, 12, 13, 16, 19, 20, 21, 23, 25, 27, 29, 30], \"\\u305c\\u3093\\u305f\\u3044\": 11, \"\\u305d\\u3046\": [3, 5, 14, 15, 18, 19, 21, 24, 30], \"\\u305d\\u3046\\u3044\\u3046\": 16, \"\\u305d\\u3046\\u3057\": 1, \"\\u305d\\u3053\": [3, 4, 10, 19, 29, 30], \"\\u305d\\u3053\\u3067\": [19, 27], \"\\u305d\\u3057\": [2, 3, 7], \"\\u305d\\u3057\\u3066\": [2, 4, 6, 7, 9, 12, 19, 21], \"\\u305d\\u306e\": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 26, 27, 28, 29, 31, 32], \"\\u305d\\u306e\\u307e\\u307e\": [5, 26], \"\\u305d\\u306e\\u3088\\u3046\": 2, \"\\u305d\\u306e\\u4e0a\": [0, 9, 29], \"\\u305d\\u306e\\u4e0b\": 0, \"\\u305d\\u306e\\u5024\": 19, \"\\u305d\\u306e\\u5f8c\": [9, 12], \"\\u305d\\u306e\\u969b\": 10, \"\\u305d\\u3082\": 4, \"\\u305d\\u308c\": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 16, 17, 19, 22, 24, 26, 27, 28, 30], \"\\u305d\\u308c\\u305e\\u308c\": [1, 4, 5, 6, 7, 8, 9, 10, 16, 17, 20, 21, 26, 27, 29], \"\\u305d\\u308c\\u3089\": [3, 6, 9, 10, 17, 19], \"\\u305e\\u308c\": [10, 17, 24], \"\\u305f\\u3044\": [1, 5, 6, 7, 8, 9, 10, 11, 12, 14, 15, 16, 20, 26, 27, 29, 30], \"\\u305f\\u304b\": 0, \"\\u305f\\u304c\\u3063\": [3, 4, 5, 6, 9, 11, 12, 16, 17, 18, 19, 25, 28, 30], \"\\u305f\\u3060\": [11, 30], \"\\u305f\\u3060\\u3057\": [2, 3, 4, 5, 6, 8, 9, 11, 14, 15, 16, 17, 22, 27, 29, 30], \"\\u305f\\u3060\\u3061\": 9, \"\\u305f\\u3063\": [0, 6, 9], \"\\u305f\\u3064\": 11, \"\\u305f\\u3068\\u3048\": [1, 4, 5, 6, 9, 10, 11, 13, 14, 18, 23, 24, 28, 30], \"\\u305f\\u306a\": [2, 19], \"\\u305f\\u3073\": [0, 2, 6, 18], \"\\u305f\\u3081\": [1, 2, 3, 4, 5, 6, 7, 9, 10, 11, 12, 13, 14, 15, 19, 20, 21, 25, 26, 27, 28, 29], \"\\u305f\\u3082\\u306e\": [14, 18], \"\\u305f\\u3088\\u3046\": [6, 12, 19], \"\\u305f\\u3089\": [1, 2, 3, 4, 10, 11, 12, 21, 26, 28], \"\\u305f\\u308a\": [0, 1, 5, 8, 16, 18, 19, 28], \"\\u3060\\u3044\\u3076\": 11, \"\\u3060\\u304b\\u3089\": 13, \"\\u3060\\u3051\": [1, 2, 3, 4, 5, 6, 9, 12, 13, 14, 15, 16, 17, 19, 21, 25, 27, 30], \"\\u3060\\u3055\\u3044\": [0, 1, 2, 5, 6, 7, 9, 11, 17, 18, 20, 21, 22, 28, 29, 30], \"\\u3060\\u3063\": 30, \"\\u3060\\u3068\": [6, 30], \"\\u3060\\u3089\": 11, \"\\u3060\\u308a\": 11, \"\\u3064\\u3044\": [6, 28], \"\\u3064\\u3051\": [16, 20, 29], \"\\u3064\\u306a\\u304e\": [27, 29], \"\\u3064\\u306a\\u3052\\u308b\": 20, \"\\u3064\\u307e\\u308a\": [1, 4, 6, 12, 16, 28, 30], \"\\u3064\\u3082\\u308a\": 4, \"\\u3065\\u3051\\u308b\": 8, \"\\u3066\\u304f\": [6, 18, 22, 29], \"\\u3066\\u307f\\u307e\\u3057\\u3087\": 6, \"\\u3066\\u308b\": [6, 8], \"\\u3067\\u3042\\u3063\": 28, \"\\u3067\\u3042\\u308a\": [23, 30], \"\\u3067\\u3042\\u308c\": 16, \"\\u3067\\u3044\": 9, \"\\u3067\\u304d\": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 26, 27, 28, 29, 30], \"\\u3067\\u304d\\u308b\": [4, 7, 12, 14, 16, 17, 18, 19, 24, 25, 27, 28, 30], \"\\u3067\\u304f\": 17, \"\\u3067\\u3057\": [1, 4, 6, 11, 13, 27], \"\\u3067\\u3057\\u3070\\u3057\\u3070\": [6, 8], \"\\u3067\\u3057\\u3087\": [0, 1, 2, 5, 8, 9, 12, 15, 16, 17, 19, 21, 28, 30], \"\\u3067\\u3059\": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 26, 27, 28, 29, 30], \"\\u3067\\u305d\\u308c\\u305e\\u308c\": 8, \"\\u3067\\u305f\\u3060\\u3061\": 9, \"\\u3067\\u3064\": 29, \"\\u3067\\u306a\\u304f\": [6, 9], \"\\u3067\\u306f\": 23, \"\\u3067\\u307f\\u307e\\u3057\\u3087\": [11, 26], \"\\u3067\\u3082\": [0, 2, 5, 6, 7, 9, 10, 11, 12, 16, 17, 18, 22, 27, 30], \"\\u3067\\u3082\\u53ef\": 30, \"\\u3068list\": 9, \"\\u3068\\u3044\\u3046\": [0, 1, 2, 3, 4, 5, 6, 7, 9, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 22, 26, 27, 28, 29, 30], \"\\u3068\\u3044\\u3048\": 21, \"\\u3068\\u3044\\u3063\": [9, 11, 25], \"\\u3068\\u3048\": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14, 16, 22, 26, 28, 29, 30], \"\\u3068\\u304a\\u304f\": 3, \"\\u3068\\u304a\\u308a\": 9, \"\\u3068\\u304b\": 30, \"\\u3068\\u304d\": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 23, 24, 26, 27, 28, 29, 30, 31], \"\\u3068\\u3053\": 11, \"\\u3068\\u3053\\u306e\": 9, \"\\u3068\\u3053\\u308d\": [0, 2, 5, 7, 9, 24], \"\\u3068\\u3053\\u308d\\u3069\\u3053\\u308d\": 3, \"\\u3068\\u3053\\u3093\\u306a\": 26, \"\\u3068\\u3057\": [2, 4, 5, 6, 7, 8, 9, 11, 24, 26, 27, 28, 29, 30], \"\\u3068\\u3057\\u3066\": [1, 2, 4, 5, 6, 7, 8, 9, 11, 12, 14, 15, 16, 17, 18, 19, 20, 21, 23, 24, 25, 26, 27, 28, 29, 30, 31], \"\\u3068\\u3059\\u308b\": [9, 16, 30], \"\\u3068\\u3059\\u308c\": 11, \"\\u3068\\u3063\": 7, \"\\u3068\\u3066\": 16, \"\\u3068\\u3068\\u3082\": [1, 2], \"\\u3068\\u3068\\u3082\\u306b\": [24, 29], \"\\u3068\\u3069\": 6, \"\\u3068\\u306a\\u3063\": 9, \"\\u3068\\u306a\\u308a\": [1, 5, 9, 11, 16, 17], \"\\u3068\\u306a\\u308b\": [7, 9], \"\\u3068\\u306e\": 5, \"\\u3068\\u306f\": [6, 9], \"\\u3068\\u3073\\u3068\\u3073\": 5, \"\\u3068\\u307f\": 3, \"\\u3068\\u3082\": [1, 2, 9, 10, 12, 13, 19, 23], \"\\u3068\\u308a\": 16, \"\\u3068\\u308b\": 3, \"\\u3068\\u308f\\u304b\\u308a\": 17, \"\\u3068\\u308f\\u304b\\u308b\": [4, 28], \"\\u3068\\u540c\\u3058\": [6, 29], \"\\u3068\\u547c\\u3070\": [2, 5, 10, 16, 19, 28, 30], \"\\u3068\\u547c\\u3070\\u308c\\u308b\": [5, 9, 30], \"\\u3068\\u547c\\u3073\": [2, 4, 5, 11, 13, 21, 25, 28], \"\\u3068\\u8a00\\u3044\": [1, 2, 3, 19], \"\\u3069\\u3046\": [1, 3, 5, 6, 8, 9, 10, 12, 17, 18, 23, 26, 28, 30], \"\\u3069\\u304a\\u308a\": 7, \"\\u3069\\u3053\": [10, 19], \"\\u3069\\u3053\\u304b\": 13, \"\\u3069\\u3061\\u3089\": [6, 7, 16], \"\\u3069\\u306e\": [11, 12, 18], \"\\u306a\\u3042\": 11, \"\\u306a\\u3044\": [1, 2, 3, 4, 5, 6, 7, 9, 10, 11, 13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 26, 28, 30, 31, 32], \"\\u306a\\u304a\": [0, 1, 2, 3, 5, 6, 7, 9, 11, 13, 14, 16, 17, 18, 19, 20, 23, 28, 29, 30], \"\\u306a\\u304b\\u3063\": [1, 2, 4, 9, 11], \"\\u306a\\u304c\\u3089\": [0, 1, 9, 11, 12, 24], \"\\u306a\\u304e\": 29, \"\\u306a\\u304f\": [1, 2, 3, 4, 5, 6, 7, 11, 12, 14, 16, 17, 18, 19, 23, 26, 30, 31], \"\\u306a\\u3051\\u308c\": [1, 3, 4, 5, 6, 9, 13, 14, 16, 18, 19, 24, 25, 30], \"\\u306a\\u3053\": 26, \"\\u306a\\u3055\": [1, 3, 30], \"\\u306a\\u3057\": [6, 30, 31, 32], \"\\u306a\\u305b\\u308b\": 30, \"\\u306a\\u3063\": [0, 1, 2, 5, 6, 7, 9, 11, 13, 16, 17, 20, 21, 24, 26, 28, 29, 30, 31], \"\\u306a\\u3068\\u304d\": 18, \"\\u306a\\u3069\": [0, 2, 3, 4, 5, 7, 8, 9, 10, 11, 13, 14, 15, 16, 17, 18, 20, 21, 22, 23, 26, 30, 31], \"\\u306a\\u306b\": 9, \"\\u306a\\u3082\\u306e\": [1, 3, 5, 8, 11, 19, 30], \"\\u306a\\u3089\": [0, 1, 3, 4, 5, 9, 10, 11, 14, 18, 19, 24, 28], \"\\u306a\\u3089\\u3070\": [19, 30], \"\\u306a\\u308a\": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 25, 26, 27, 28, 29, 30], \"\\u306a\\u308b\": [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 15, 16, 17, 18, 19, 20, 21, 23, 26, 27, 28, 29, 30], \"\\u306a\\u308f\\u3061\": [5, 6, 9, 18, 30], \"\\u306a\\u3093\": 11, \"\\u306b\\u3044\": 6, \"\\u306b\\u3044\\u304f\\u3064\": 5, \"\\u306b\\u304a\\u3044\": [1, 4, 6, 7, 9, 12, 13, 14, 21], \"\\u306b\\u304a\\u3051\\u308b\": [4, 8, 15, 19, 31, 32], \"\\u306b\\u304f\\u3044\": 4, \"\\u306b\\u304f\\u304f\": 4, \"\\u306b\\u3057\": 20, \"\\u306b\\u3059\\u3050\": 6, \"\\u306b\\u3059\\u308b\": [7, 17, 20], \"\\u306b\\u305d\\u306e\": 26, \"\\u306b\\u305d\\u308c\\u305e\\u308c\": 25, \"\\u306b\\u3064\\u3044\\u3066\": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32], \"\\u306b\\u3064\\u3051\": 30, \"\\u306b\\u3064\\u3051\\u3066\": 10, \"\\u306b\\u307e\\u3068\\u3081\\u308b\": 23, \"\\u306b\\u3082\": [16, 19], \"\\u306b\\u3088\\u304f\": [6, 31, 32], \"\\u306b\\u3088\\u3063\": [0, 2, 4, 5, 6, 7, 8, 9, 11, 12, 13, 15, 16, 18, 19, 22, 26, 30], \"\\u306b\\u3088\\u3063\\u3066\": [1, 3, 5, 7, 12, 22, 28, 30], \"\\u306b\\u3088\\u308a\": [0, 2, 5, 19, 20, 21, 26, 28, 29], \"\\u306b\\u3088\\u308b\": [0, 1, 2, 4, 5, 17, 20, 24, 26, 30, 31, 32], \"\\u306b\\u308f\": [6, 9], \"\\u306b\\u308f\\u305f\\u3063\": 9, \"\\u306b\\u308f\\u305f\\u308b\": 5, \"\\u306b\\u5bfe\\u3057\": [2, 5, 6, 9, 10, 11, 12, 16, 17, 18, 19, 21, 23, 27, 28, 29, 30], \"\\u306b\\u5bfe\\u3059\\u308b\": [0, 4, 5, 8, 9, 10, 12, 16, 18, 25, 31, 32], \"\\u306b\\u5bfe\\u5fdc\": [8, 9, 13, 16, 18, 21, 26, 30], \"\\u306b\\u5bfe\\u5fdc\\u4ed8\\u3051\": 8, \"\\u306b\\u95a2\\u3057\": [2, 11], \"\\u306b\\u95a2\\u3059\\u308b\": [0, 1, 4, 16, 21, 31], \"\\u306d\\u3048\": 11, \"\\u306e\\u3044\": 30, \"\\u306e\\u3044\\u305a\\u308c\": 5, \"\\u306e\\u3044\\u305a\\u308c\\u304b\": [4, 30], \"\\u306e\\u3046\\u3061\": [7, 19], \"\\u306e\\u3061\": [7, 8], \"\\u306e\\u3064\\u3051\": 4, \"\\u306e\\u3067\": [1, 2, 3, 4, 5, 6, 7, 9, 10, 11, 12, 13, 17, 18, 19, 21, 22, 23, 24, 25, 26, 27, 29, 30, 31], \"\\u306e\\u3067\\u3059\": [2, 30], \"\\u306e\\u3068\\u3053\\u308d\": [0, 5, 6, 7, 8, 9, 17, 23, 29, 30], \"\\u306e\\u3069\\u3053\": 5, \"\\u306e\\u3069\\u3061\\u3089\\u304b\": 3, \"\\u306e\\u306b\": [2, 6, 9, 23], \"\\u306e\\u307f\": [1, 2, 3, 6, 7, 8, 10, 15, 28], \"\\u306e\\u3088\\u3046\": [0, 1, 2, 6, 8, 11, 13, 14, 18, 20, 25, 30], \"\\u306f\\u3044\\u3051\": [2, 9, 30], \"\\u306f\\u3044\\u305a\\u308c\": 30, \"\\u306f\\u3053\\u308c\": 6, \"\\u306f\\u3058\\u3081\": 5, \"\\u306f\\u3058\\u3081\\u3066\": [26, 29], \"\\u306f\\u305a\": [0, 1, 11, 16, 26], \"\\u306f\\u305d\\u306e\": 4, \"\\u306f\\u305d\\u308c\\u305e\\u308c\": 30, \"\\u306f\\u306a\\u3053\": 26, \"\\u306f\\u307f\": 1, \"\\u3070\\u305d\\u306e\\u3044\": 18, \"\\u3070\\u3088\\u304f\": 6, \"\\u3070\\u3089\": 6, \"\\u3072\\u304d\\u3059\\u3046\": 2, \"\\u3072\\u3068\": [2, 28], \"\\u3072\\u3068\\u3064\": 6, \"\\u3074\\u304b\": 11, \"\\u3078\\u306e\": [2, 13], \"\\u3079\\u304d\": [4, 6, 30, 31, 32], \"\\u307b\\u3068\\u3093\\u3069\": 30, \"\\u307e\\u3046\": 11, \"\\u307e\\u3057\": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 13, 14, 16, 17, 18, 19, 23, 25, 28], \"\\u307e\\u3057\\u3087\": [2, 4, 13, 24, 26], \"\\u307e\\u3059\": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31], \"\\u307e\\u305a\": [1, 2, 6, 7, 9, 10, 11, 16, 19, 20, 29], \"\\u307e\\u305b\": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 18, 19, 23, 24, 25, 26, 27, 28, 30, 31], \"\\u307e\\u305f\": [1, 3, 4, 5, 6, 8, 9, 10, 11, 13, 16, 17, 20, 21, 22, 23, 26, 27, 28, 30, 31, 32], \"\\u307e\\u3060\": 11, \"\\u307e\\u3067\": [1, 2, 5, 6, 7, 9, 10, 11, 12, 13, 17, 21, 24, 25, 26, 27, 29, 30], \"\\u307e\\u3068\": 2, \"\\u307e\\u3068\\u3081\": [10, 12, 14, 16, 28, 31], \"\\u307e\\u3068\\u3081\\u3066\": [6, 11, 16, 27, 29, 30], \"\\u307e\\u3068\\u3081\\u308b\": [5, 7, 13, 18, 20], \"\\u307e\\u306f\\u3064\": 11, \"\\u307e\\u307e\": [0, 6, 12, 14, 15, 22, 26], \"\\u307e\\u307e\\u3067\": 22, \"\\u307e\\u308a\": 2, \"\\u307e\\u308c\": 30, \"\\u307e\\u308c\\u308b\": 5, \"\\u307f\\u304b\": 5, \"\\u307f\\u304b\\u3089\": [2, 6, 18, 26], \"\\u307f\\u3066\": [0, 1, 6, 9, 11, 18, 21, 22, 28, 29, 30], \"\\u307f\\u306a\\u3055\": [2, 3], \"\\u307f\\u306a\\u3055\\u3093\": [25, 26], \"\\u307f\\u306a\\u3057\": 30, \"\\u307f\\u306a\\u3059\": 20, \"\\u307f\\u307e\\u3057\\u3087\": [1, 2, 4, 6, 7, 9, 10, 16, 18, 19, 21, 26], \"\\u307f\\u308b\": [2, 21, 30], \"\\u3082\\u3042\\u308a\": 5, \"\\u3082\\u3046\": [1, 2, 5, 6, 7, 9, 11, 12, 21], \"\\u3082\\u304b\\u307e\\u3044\": [2, 6], \"\\u3082\\u3057\": [9, 28], \"\\u3082\\u3057\\u304f\": [0, 2, 5, 6, 9, 11, 13, 16, 29, 30, 31], \"\\u3082\\u3058\\u308c\\u3064\": 5, \"\\u3082\\u305b\": 12, \"\\u3082\\u3061\\u308d\\u3093\": [1, 6, 30], \"\\u3082\\u3063\": 1, \"\\u3082\\u3063\\u3071\\u3089\": 19, \"\\u3082\\u3068\": [6, 7, 8, 9, 19, 30], \"\\u3082\\u3069\\u3061\\u3089\": 0, \"\\u3082\\u306e\": [0, 1, 2, 3, 4, 5, 6, 7, 9, 10, 11, 12, 13, 14, 15, 17, 18, 19, 27, 29, 30, 31], \"\\u3082\\u3082\\u3046\": 8, \"\\u3082\\u3088\": 19, \"\\u3082\\u3088\\u3044\": [2, 16, 30], \"\\u3082\\u3088\\u304f\": 24, \"\\u3082\\u3089\\u3057\\u3044\": 4, \"\\u3082\\u3089\\u3063\": [2, 12, 18], \"\\u3082\\u308a\": 9, \"\\u3082\\u308b\": 9, \"\\u3082\\u308f\\u304b\\u308a\": 30, \"\\u3082\\u308f\\u304b\\u308b\": 2, \"\\u3082\\u3093\": 11, \"\\u3084\\u3046\": 11, \"\\u3084\\u3059\\u3044\": [6, 12, 16, 17, 24, 30], \"\\u3084\\u3059\\u304f\": [4, 9, 17], \"\\u3084\\u3063\": 11, \"\\u3084\\u3064\\u3066\": 11, \"\\u3084\\u308a\": [3, 9], \"\\u3084\\u308b\": 30, \"\\u3088\\u3044\": [0, 2, 6, 9, 16, 17, 18, 27, 30], \"\\u3088\\u3046\": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30], \"\\u3088\\u304f\": [1, 4, 9, 11, 21, 31], \"\\u3088\\u304f\\u308f\": 18, \"\\u3088\\u306d\": 26, \"\\u3088\\u308a\": [2, 3, 4, 5, 6, 7, 9, 11, 13, 16, 17, 18, 20, 21, 24, 29, 30], \"\\u3089\\u3048\": 17, \"\\u3089\\u308c\": [1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 16, 17, 18, 19, 20, 21, 23, 24, 26, 28, 29, 30], \"\\u3089\\u308c\\u308b\": [5, 6, 9, 10, 17, 19, 28, 30], \"\\u308c\\u305a\": 10, \"\\u308c\\u307e\\u305b\": [0, 3, 7, 9, 12, 16, 28], \"\\u308c\\u308b\": [0, 1, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 18, 19, 21, 23, 26, 27, 28, 30, 31], \"\\u308c\\u308c\": 6, \"\\u308f\\u304b\\u308a\": 12, \"\\u308f\\u304b\\u308b\": [4, 16], \"\\u308f\\u3051\": [12, 15, 18, 28], \"\\u3092\\u304a\\u3051\\u3070\": 1, \"\\u3092\\u305d\\u306e\": 10, \"\\u3092\\u3064\\u3051\": [29, 30], \"\\u3092\\u307e\\u305c\": 1, \"\\u3092\\u307e\\u305f\": 6, \"\\u3092\\u308a\": 11, \"\\u3093\\u304b\": 18, \"\\u3093\\u306d\": 11, \"\\u309d\\u3089\": 11, \"\\u30a2\\u30a4\\u30b3\\u30f3\": [0, 22], \"\\u30a2\\u30a4\\u30ea\\u30b9\\u30c7\\u30fc\\u30bf\\u30bb\\u30c3\\u30c8\": 21, \"\\u30a2\\u30ab\\u30a6\\u30f3\\u30c8\": [0, 30], \"\\u30a2\\u30af\\u30bb\\u30b9\": 13, \"\\u30a2\\u30c9\\u30ec\\u30b9\": 6, \"\\u30a2\\u30d7\\u30ea\\u30b1\\u30fc\\u30b7\\u30e7\\u30f3\": [13, 28], \"\\u30a2\\u30e4\\u30e1\": 20, \"\\u30a2\\u30eb\\u30b4\\u30ea\\u30ba\\u30e0\": [9, 24], \"\\u30a2\\u30eb\\u30d5\\u30a1\\u30d9\\u30c3\\u30c8\": [5, 30], \"\\u30a2\\u30ec\\u30a4\": 6, \"\\u30a2\\u30f3\\u30c0\\u30fc\\u30b9\\u30b3\\u30a2\": [2, 14], \"\\u30a4\\u30ae\\u30ea\\u30b9\": [11, 30], \"\\u30a4\\u30c1\\u30ed\\u30fc\": 26, \"\\u30a4\\u30c6\\u30e9\\u30d6\\u30eb\": [31, 32], \"\\u30a4\\u30c6\\u30ec\\u30fc\\u30bf\": [17, 18, 26, 31, 32], \"\\u30a4\\u30e1\\u30fc\\u30b8\": 11, \"\\u30a4\\u30f3\\u30b9\\u30bf\\u30f3\\u30b9\": [19, 21, 32], \"\\u30a4\\u30f3\\u30b9\\u30c8\\u30fc\\u30eb\": 28, \"\\u30a4\\u30f3\\u30bf\\u30d5\\u30a7\\u30fc\\u30b9\": 0, \"\\u30a4\\u30f3\\u30bf\\u30d7\\u30ea\\u30bf\": 28, \"\\u30a4\\u30f3\\u30bf\\u30fc\\u30d7\\u30ea\\u30bf\": 22, \"\\u30a4\\u30f3\\u30c1\": 2, \"\\u30a4\\u30f3\\u30c7\\u30c3\\u30af\\u30b9\": [8, 9, 16, 20, 23, 24, 27, 29, 30, 31, 32], \"\\u30a4\\u30f3\\u30c7\\u30c3\\u30af\\u30b9\\u30a2\\u30af\\u30bb\\u30b9\": [20, 31, 32], \"\\u30a4\\u30f3\\u30c7\\u30f3\\u30c8\": [2, 3, 4, 9, 10, 31, 32], \"\\u30a4\\u30f3\\u30c7\\u30f3\\u30c8\\u30ec\\u30d9\\u30eb\": 7, \"\\u30a4\\u30f3\\u30d7\\u30ec\\u30fc\\u30b9\": [16, 24, 31, 32], \"\\u30a4\\u30f3\\u30dd\\u30fc\\u30c8\": [16, 20, 21, 27, 28, 29, 30, 31, 32], \"\\u30a6\\u30a4\\u30f3\\u30c9\\u30a6\": 28, \"\\u30a8\\u30af\\u30b9\\u30c6\\u30f3\\u30b7\\u30e7\\u30f3\": [0, 22], \"\\u30a8\\u30af\\u30b9\\u30d7\\u30ed\\u30fc\\u30e9\": 11, \"\\u30a8\\u30b9\\u30b1\\u30fc\\u30d7\": 30, \"\\u30a8\\u30b9\\u30b1\\u30fc\\u30d7\\u30b7\\u30fc\\u30b1\\u30f3\\u30b9\": [11, 31, 32], \"\\u30a8\\u30e9\\u30fc\": [2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 16, 19, 23, 26, 27, 28, 30, 31, 32], \"\\u30a8\\u30e9\\u30fc\\u30e1\\u30c3\\u30bb\\u30fc\\u30b8\": 4, \"\\u30a8\\u30eb\": 2, \"\\u30a8\\u30f3\\u30b3\\u30fc\\u30c9\": [11, 15], \"\\u30aa\\u30d6\\u30b8\\u30a7\\u30af\\u30c8\": [11, 12, 16, 17, 18, 19, 20, 26, 27, 29, 30, 31, 32], \"\\u30aa\\u30d6\\u30b8\\u30a7\\u30af\\u30c8greeting\": 10, \"\\u30aa\\u30d7\\u30b7\\u30e7\\u30ca\\u30eb\": 30, \"\\u30aa\\u30d7\\u30b7\\u30e7\\u30f3\": 6, \"\\u30aa\\u30da\\u30ec\\u30fc\\u30c6\\u30a3\\u30f3\\u30b0\\u30b7\\u30b9\\u30c6\\u30e0\": 28, \"\\u30aa\\u30f3\\u30e9\\u30a4\\u30f3\\u30b5\\u30fc\\u30d3\\u30b9\": 4, \"\\u30aa\\u30fc\\u30c0\\u30fc\": [9, 32], \"\\u30aa\\u30fc\\u30c8\\u30bb\\u30fc\\u30d6\": [0, 22], \"\\u30aa\\u30fc\\u30d7\\u30f3\": [12, 18, 26, 31, 32], \"\\u30aa\\u30fc\\u30d7\\u30f3\\u30c7\\u30fc\\u30bf\": [26, 29], \"\\u30ab\\u30e9\\u30fc\\u30d0\\u30fc\": 27, \"\\u30ab\\u30ec\\u30f3\\u30c8\\u30c7\\u30a3\\u30ec\\u30af\\u30c8\\u30ea\": [13, 15, 32], \"\\u30ab\\u30ec\\u30f3\\u30c8\\u30ef\\u30fc\\u30ad\\u30f3\\u30b0\\u30c7\\u30a3\\u30ec\\u30af\\u30c8\\u30ea\": [31, 32], \"\\u30ab\\u30fc\\u30bd\\u30eb\": [0, 22], \"\\u30ab\\u30fc\\u30d6\": [27, 29], \"\\u30ac\\u30a6\\u30b9\": 9, \"\\u30ad\\u30e3\\u30d7\\u30c1\\u30e3\": [30, 32], \"\\u30ad\\u30e3\\u30ec\\u30c3\\u30c8\": 30, \"\\u30ad\\u30fc\": [4, 5, 9, 10, 18, 20, 23, 25, 30, 32], \"\\u30ad\\u30fcapple\": 8, \"\\u30ad\\u30fcorange\": 8, \"\\u30ad\\u30fc\\u30dc\\u30fc\\u30c9\": 5, \"\\u30ad\\u30fc\\u30ef\\u30fc\\u30c9\": [6, 11, 18, 26, 27, 31, 32], \"\\u30af\\u30a9\\u30fc\\u30c8\": [4, 5], \"\\u30af\\u30e9\\u30b9\": [14, 21, 27, 31, 32], \"\\u30af\\u30e9\\u30b9\\u30bf\": 21, \"\\u30af\\u30e9\\u30b9\\u30bf\\u30ea\\u30f3\\u30b0\": [21, 32], \"\\u30af\\u30ea\\u30c3\\u30af\": [0, 13, 22, 27, 28], \"\\u30af\\u30ed\\u30fc\\u30ba\": [26, 31, 32], \"\\u30b0\\u30e9\\u30d5\": [31, 32], \"\\u30b0\\u30ea\\u30c3\\u30c9\": 29, \"\\u30b0\\u30eb\\u30fc\\u30d7\": [7, 9, 21, 31, 32], \"\\u30b0\\u30ed\\u30fc\\u30d0\\u30eb\": [4, 10, 14, 31, 32], \"\\u30b0\\u30fc\\u30ea\\u30f3\\u30c0\\u30a4\": 18, \"\\u30b3\\u30d4\\u30fc\": [0, 11, 16, 24], \"\\u30b3\\u30d4\\u30fc\\u30da\\u30fc\\u30b9\\u30c8\": 0, \"\\u30b3\\u30de\\u30f3\\u30c9\": [0, 22, 28], \"\\u30b3\\u30de\\u30f3\\u30c9\\u30e2\\u30fc\\u30c9\": [2, 31], \"\\u30b3\\u30de\\u30f3\\u30c9\\u30e9\\u30a4\\u30f3\": [31, 32], \"\\u30b3\\u30e1\\u30f3\\u30c8\": [5, 31, 32], \"\\u30b3\\u30e1\\u30f3\\u30c8\\u30a2\\u30a6\\u30c8\": [1, 5, 15], \"\\u30b3\\u30ed\\u30f3\": [4, 5], \"\\u30b3\\u30f3\\u30b9\\u30c8\\u30e9\\u30af\\u30bf\": [19, 32], \"\\u30b3\\u30f3\\u30d4\\u30e5\\u30fc\\u30bf\": [1, 6], \"\\u30b3\\u30f3\\u30de\": [2, 5, 6, 9, 10, 14, 17, 26], \"\\u30b3\\u30fc\\u30c7\\u30a3\\u30f3\\u30b0\\u30b9\\u30bf\\u30a4\\u30eb\": [5, 7, 31, 32], \"\\u30b3\\u30fc\\u30c9\": [0, 1, 2, 4, 9, 10, 15, 20, 21, 22, 24, 26, 29, 31, 32], \"\\u30b3\\u30fc\\u30c9\\u30bb\\u30eb\": [0, 2, 12, 15, 28], \"\\u30b3\\u30fc\\u30c9\\u30d6\\u30ed\\u30c3\\u30af\": 9, \"\\u30b3\\u30fc\\u30d1\\u30b9\": 30, \"\\u30b5\\u30a4\\u30ba\": 16, \"\\u30b5\\u30fc\\u30af\\u30eb\": 26, \"\\u30b7\\u30a7\\u30eb\": 28, \"\\u30b7\\u30ca\\u30ea\\u30aa\": 4, \"\\u30b7\\u30ea\\u30fc\\u30ba\": [21, 31, 32], \"\\u30b7\\u30ea\\u30fc\\u30ba\\u30aa\\u30d6\\u30b8\\u30a7\\u30af\\u30c8\": 20, \"\\u30b7\\u30f3\\u30b0\\u30eb\": 5, \"\\u30b7\\u30f3\\u30b0\\u30eb\\u30af\\u30a9\\u30fc\\u30c8\": 5, \"\\u30b8\\u30a7\\u30cd\\u30ec\\u30fc\\u30bf\": [31, 32], \"\\u30b9\\u30a4\\u30c3\\u30c1\": [2, 22], \"\\u30b9\\u30ab\\u30e9\": 32, \"\\u30b9\\u30af\\u30ea\\u30d7\\u30c8\": [31, 32], \"\\u30b9\\u30af\\u30ea\\u30d7\\u30c8\\u30d5\\u30a1\\u30a4\\u30eb\": 28, \"\\u30b9\\u30b3\\u30fc\\u30d7\": [31, 32], \"\\u30b9\\u30bf\\u30a4\\u30eb\": 4, \"\\u30b9\\u30bf\\u30a4\\u30eb\\u30ac\\u30a4\\u30c9\": [4, 5, 7], \"\\u30b9\\u30c6\\u30c3\\u30d7\": [17, 26], \"\\u30b9\\u30c8\\u30c3\\u30d7\\u30dc\\u30bf\\u30f3\": [0, 9], \"\\u30b9\\u30d1\\u30e0\": 30, \"\\u30b9\\u30da\\u30fc\\u30b9\": [4, 5, 6, 7, 9, 23, 28, 30], \"\\u30b9\\u30e9\\u30a4\\u30b9\": [6, 20, 31, 32], \"\\u30bb\\u30c3\\u30c8\": [31, 32], \"\\u30bb\\u30df\\u30b3\\u30ed\\u30f3\": 29, \"\\u30bb\\u30eb\": [1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 14, 15, 16, 17, 18, 19, 23, 26, 28, 29, 30, 31], \"\\u30bb\\u30f3\\u30c1\\u30e1\\u30fc\\u30c8\\u30eb\": 2, \"\\u30bb\\u30fc\\u30d6\": [0, 15, 22], \"\\u30bc\\u30ed\": [1, 2, 3, 4], \"\\u30bd\\u30fc\\u30b9\\u30b3\\u30fc\\u30c9\": [15, 28], \"\\u30bd\\u30fc\\u30b9\\u30d5\\u30a1\\u30a4\\u30eb\": 31, \"\\u30bd\\u30fc\\u30c8\": [6, 16, 18, 20, 24], \"\\u30bf\\u30a4\\u30c8\\u30eb\": [0, 22, 27, 29], \"\\u30bf\\u30a4\\u30df\\u30f3\\u30b0\": [0, 22], \"\\u30bf\\u30b0\": 30, \"\\u30bf\\u30b9\\u30af\": 4, \"\\u30bf\\u30d6\": [11, 28, 30], \"\\u30bf\\u30d7\\u30eb\": [8, 9, 10, 16, 17, 18, 23, 29, 31, 32], \"\\u30bf\\u30f3\\u30bf\\u30a2\\u30fc\\u30f3\": 11, \"\\u30bf\\u30fc\\u30df\\u30ca\\u30eb\": 28, \"\\u30c0\\u30a6\\u30f3\\u30ed\\u30fc\\u30c9\": [15, 26, 29, 31], \"\\u30c0\\u30a6\\u30f3\\u30ed\\u30fc\\u30c9\\u30d5\\u30a9\\u30eb\\u30c0\": [15, 28], \"\\u30c0\\u30d6\\u30eb\\u30af\\u30a9\\u30fc\\u30c8\": [5, 30], \"\\u30c0\\u30d6\\u30eb\\u30af\\u30ea\\u30c3\\u30af\": 22, \"\\u30c1\\u30a7\\u30c3\\u30af\": 30, \"\\u30c1\\u30e5\\u30fc\\u30c8\\u30ea\\u30a2\\u30eb\": 12, \"\\u30c1\\u30e9\": 30, \"\\u30c6\\u30ad\\u30b9\\u30c8\": [0, 16], \"\\u30c6\\u30ad\\u30b9\\u30c8\\u30bb\\u30eb\": 0, \"\\u30c6\\u30ad\\u30b9\\u30c8\\u30e2\\u30fc\\u30c9\": 11, \"\\u30c6\\u30b9\\u30c8\": [7, 9, 26, 28, 31, 32], \"\\u30c6\\u30b9\\u30c8\\u30b1\\u30fc\\u30b9\": [4, 32], \"\\u30c6\\u30b9\\u30c8\\u30b3\\u30fc\\u30c9\": 28, \"\\u30c6\\u30b9\\u30c8\\u30c7\\u30fc\\u30bf\": 21, \"\\u30c7\\u30a3\\u30ec\\u30af\\u30c8\\u30ea\": [11, 15, 22, 28, 31, 32], \"\\u30c7\\u30d0\\u30c3\\u30b0\": [2, 31, 32], \"\\u30c7\\u30d5\\u30a9\\u30eb\\u30c8\": [11, 16, 20, 27, 28], \"\\u30c7\\u30ea\\u30df\\u30bf\": 30, \"\\u30c7\\u30fc\\u30bf\": [3, 5, 6, 8, 9, 11, 12, 18, 19, 23, 26, 27, 29, 30, 31, 32], \"\\u30c7\\u30fc\\u30bf\\u30bb\\u30c3\\u30c8\": 21, \"\\u30c7\\u30fc\\u30bf\\u30d5\\u30ec\\u30fc\\u30e0\": [21, 31, 32], \"\\u30c7\\u30fc\\u30bf\\u30d5\\u30ec\\u30fc\\u30e0\\u30aa\\u30d6\\u30b8\\u30a7\\u30af\\u30c8\": 20, \"\\u30c7\\u30fc\\u30bf\\u30dd\\u30a4\\u30f3\\u30c8\": 29, \"\\u30c8\\u30a4\\u30ec\": 11, \"\\u30c8\\u30c3\\u30d7\\u30ec\\u30d9\\u30eb\": [2, 32], \"\\u30c8\\u30ea\\u30d7\\u30eb\\u30af\\u30a9\\u30fc\\u30c8\": 5, \"\\u30c9\\u30ad\\u30e5\\u30e1\\u30f3\\u30c8\": 11, \"\\u30c9\\u30c3\\u30c8\": 16, \"\\u30c9\\u30e1\\u30a4\\u30f3\": 6, \"\\u30c9\\u30e9\\u30a4\\u30d6\": 0, \"\\u30c9\\u30eb\": 30, \"\\u30cb\\u30c3\\u30af\\u30cd\\u30fc\\u30e0\": 26, \"\\u30cd\\u30a4\\u30d4\\u30a2\": 14, \"\\u30cd\\u30b9\\u30c8\": [7, 9, 17, 32], \"\\u30ce\\u30eb\\u30e0\": 16, \"\\u30ce\\u30fc\\u30c8\\u30d6\\u30c3\\u30af\": [5, 11, 15, 19, 22, 25, 27, 29, 31], \"\\u30ce\\u30fc\\u30c9\": [13, 32], \"\\u30ce\\u30fc\\u30c9\\u30d6\\u30c3\\u30af\": 0, \"\\u30cf\\u30a4\\u30d1\\u30fc\\u30d1\\u30e9\\u30e1\\u30fc\\u30bf\": 21, \"\\u30cf\\u30a4\\u30d5\\u30f3\": 30, \"\\u30cf\\u30a4\\u30e9\\u30a4\\u30c8\": 2, \"\\u30d0\\u30a4\\u30ca\\u30ea\\u30e2\\u30fc\\u30c9\": 11, \"\\u30d0\\u30b0\": [2, 4, 32], \"\\u30d0\\u30c3\\u30af\\u30b9\\u30b9\\u30e9\\u30c3\\u30b7\\u30e5\": 30, \"\\u30d0\\u30c3\\u30af\\u30b9\\u30e9\\u30c3\\u30b7\\u30e5\": [7, 30, 31], \"\\u30d0\\u30c3\\u30af\\u30b9\\u30e9\\u30c3\\u30b7\\u30e5\\u30ad\\u30fc\": 5, \"\\u30d0\\u30fc\": [27, 29], \"\\u30d1\\u30a4\": 14, \"\\u30d1\\u30b9\": [11, 28, 31, 32], \"\\u30d1\\u30bd\\u30b3\\u30f3\": 0, \"\\u30d1\\u30bf\\u30fc\\u30f3\": [21, 30, 32], \"\\u30d1\\u30e9\\u30e1\\u30fc\\u30bf\": 21, \"\\u30d1\\u30ec\\u30c3\\u30c8\": 27, \"\\u30d2\\u30b9\\u30c8\\u30b0\\u30e9\\u30e0\": [31, 32], \"\\u30d2\\u30f3\\u30c8\": [6, 18], \"\\u30d2\\u30fc\\u30c8\\u30de\\u30c3\\u30d7\": [31, 32], \"\\u30d3\\u30c3\\u30c8\": [1, 26], \"\\u30d3\\u30f3\": 27, \"\\u30d4\\u30ea\\u30aa\\u30c9\": 30, \"\\u30d5\\u30a1\\u30a4\\u30eb\": [0, 4, 12, 13, 15, 16, 18, 19, 22, 28, 30, 31, 32], \"\\u30d5\\u30a1\\u30a4\\u30eb\\u30aa\\u30d6\\u30b8\\u30a7\\u30af\\u30c8\": [11, 18, 19, 26, 31, 32], \"\\u30d5\\u30a1\\u30a4\\u30eb\\u30b5\\u30a4\\u30ba\": 16, \"\\u30d5\\u30a1\\u30a4\\u30eb\\u30b7\\u30b9\\u30c6\\u30e0\": 15, \"\\u30d5\\u30a1\\u30a4\\u30eb\\u30c7\\u30fc\\u30bf\": 13, \"\\u30d5\\u30a1\\u30a4\\u30eb\\u30de\\u30cd\\u30fc\\u30b8\\u30e3\": 28, \"\\u30d5\\u30a1\\u30a4\\u30eb\\u30e1\\u30cb\\u30e5\\u30fc\": 0, \"\\u30d5\\u30a3\\u30c3\\u30c6\\u30a3\\u30f3\\u30b0\": 26, \"\\u30d5\\u30a3\\u30dc\\u30ca\\u30c3\\u30c1\": 3, \"\\u30d5\\u30a3\\u30fc\\u30c8\": 2, \"\\u30d5\\u30a3\\u30fc\\u30eb\\u30c9\": 22, \"\\u30d5\\u30a9\\u30eb\\u30c0\": [13, 28, 32], \"\\u30d5\\u30a9\\u30f3\\u30c8\": 5, \"\\u30d5\\u30a9\\u30fc\\u30de\\u30c3\\u30c8\": 22, \"\\u30d5\\u30e9\\u30c3\\u30c8\": 17, \"\\u30d6\\u30e9\\u30a6\\u30b6\": [0, 15, 27], \"\\u30d6\\u30ed\\u30c3\\u30af\": 9, \"\\u30d6\\u30fc\\u30eb\": 20, \"\\u30d7\\u30ec\\u30a4\\u30dc\\u30bf\\u30f3\": [0, 1], \"\\u30d7\\u30ed\\u30b0\\u30e9\\u30de\": 7, \"\\u30d7\\u30ed\\u30b0\\u30e9\\u30df\\u30f3\\u30b0\": [2, 4, 5, 6, 16, 19, 24, 32], \"\\u30d7\\u30ed\\u30b0\\u30e9\\u30e0\": [1, 2, 4, 5, 6, 7, 8, 9, 10, 11, 13, 14, 15, 17, 25, 28], \"\\u30d7\\u30ed\\u30b0\\u30e9\\u30e0\\u30b3\\u30fc\\u30c9\": [4, 28], \"\\u30d7\\u30ed\\u30c3\\u30c8\": [27, 29], \"\\u30d7\\u30ed\\u30f3\\u30d7\\u30c8\": 28, \"\\u30d8\\u30c3\\u30c0\": 10, \"\\u30d8\\u30ed\\u30f3\": 2, \"\\u30d9\\u30af\\u30bf\\u30fc\": 6, \"\\u30d9\\u30af\\u30c8\\u30eb\": 16, \"\\u30da\\u30a2\": [4, 8], \"\\u30da\\u30fc\\u30b8\": [22, 27], \"\\u30dc\\u30bf\\u30f3\": [0, 27], \"\\u30dc\\u30c7\\u30a3\\u30de\\u30b9\": 2, \"\\u30dd\\u30a4\\u30f3\\u30c8\": 4, \"\\u30dd\\u30f3\\u30dd\\u30b3\\u30ca\\u30fc\": 18, \"\\u30dd\\u30f3\\u30dd\\u30b3\\u30d4\\u30fc\": 18, \"\\u30de\\u30a6\\u30b9\\u30ab\\u30fc\\u30bd\\u30eb\": [0, 22], \"\\u30de\\u30b7\\u30f3\": 13, \"\\u30de\\u30b8\\u30c3\\u30af\\u30b3\\u30de\\u30f3\\u30c9\": [25, 32], \"\\u30de\\u30b8\\u30c3\\u30af\\u30ca\\u30f3\\u30d0\\u30fc\": 4, \"\\u30de\\u30b9\": 27, \"\\u30de\\u30c3\\u30c1\": [9, 30, 32], \"\\u30de\\u30fc\\u30ab\": [27, 29], \"\\u30de\\u30fc\\u30b8\": 24, \"\\u30de\\u30fc\\u30b8\\u30bd\\u30fc\\u30c8\": 31, \"\\u30df\\u30b9\": 4, \"\\u30e1\\u30bd\\u30c3\\u30c9\": [2, 9, 11, 12, 16, 17, 20, 21, 26, 27, 31, 32], \"\\u30e1\\u30bf\": 31, \"\\u30e1\\u30c3\\u30bb\\u30fc\\u30b8\": [9, 11, 18], \"\\u30e1\\u30cb\\u30e5\\u30fc\": [0, 15, 22, 28], \"\\u30e1\\u30e2\\u30ea\": [1, 17], \"\\u30e1\\u30ea\\u30c3\\u30c8\": 30, \"\\u30e1\\u30f3\\u30d0\\u30fc\": 26, \"\\u30e1\\u30f3\\u30d0\\u30fc\\u30c7\\u30fc\\u30bf\": 26, \"\\u30e2\\u30b8\\u30e5\\u30fc\\u30eb\": [9, 16, 19, 20, 21, 25, 26, 27, 29, 30, 31, 32], \"\\u30e2\\u30b8\\u30e5\\u30fc\\u30eb\\u30d5\\u30a1\\u30a4\\u30eb\": [28, 31], \"\\u30e2\\u30b8\\u30e5\\u30fc\\u30eb\\u30ec\\u30d9\\u30eb\": [2, 32], \"\\u30e2\\u30c1\\u30d9\\u30fc\\u30b7\\u30e7\\u30f3\": 25, \"\\u30e2\\u30c7\\u30eb\": 31, \"\\u30e2\\u30fc\\u30c9\": [11, 26, 31, 32], \"\\u30e6\\u30cb\\u30d0\\u30fc\\u30b5\\u30eb\": 32, \"\\u30e6\\u30fc\\u30af\\u30ea\\u30c3\\u30c9\\u30ce\\u30eb\\u30e0\": 16, \"\\u30e6\\u30fc\\u30b6\\u30fc\\u30a2\\u30ab\\u30a6\\u30f3\\u30c8\": 28, \"\\u30e6\\u30fc\\u30c6\\u30a3\\u30ea\\u30c6\\u30a3\": 28, \"\\u30e9\\u30a4\\u30bf\\u30fc\": [26, 32], \"\\u30e9\\u30a4\\u30d6\\u30e9\\u30ea\": [1, 14, 28, 31, 32], \"\\u30e9\\u30a4\\u30d6\\u30e9\\u30ea\\u30e2\\u30b8\\u30e5\\u30fc\\u30eb\": 28, \"\\u30e9\\u30d9\\u30eb\": [20, 21, 25, 27, 29], \"\\u30e9\\u30d9\\u30eb\\u30c7\\u30fc\\u30bf\": 21, \"\\u30e9\\u30e0\\u30c0\": [31, 32], \"\\u30e9\\u30f3\\u30c0\\u30e0\": [23, 27, 29], \"\\u30ea\\u30b9\\u30c8\": [3, 7, 10, 12, 16, 20, 23, 25, 26, 27, 28, 29, 30, 31, 32], \"\\u30ea\\u30b9\\u30c8a\": 29, \"\\u30ea\\u30b9\\u30c8x\": 29, \"\\u30ea\\u30b9\\u30c8y\": 29, \"\\u30ea\\u30bb\\u30c3\\u30c8\": 27, \"\\u30ea\\u30f3\\u30af\": 30, \"\\u30ea\\u30fc\\u30c0\": [26, 29, 32], \"\\u30eb\\u30fc\\u30c8\\u30c7\\u30a3\\u30ec\\u30af\\u30c8\\u30ea\": 13, \"\\u30eb\\u30fc\\u30d7\": [8, 9, 10, 32], \"\\u30eb\\u30fc\\u30eb\": 11, \"\\u30ec\\u30d9\\u30eb\": [4, 7], \"\\u30ed\\u30b0\\u30a4\\u30f3\": 0, \"\\u30ed\\u30b8\\u30b9\\u30c6\\u30a3\\u30c3\\u30af\": [21, 32], \"\\u30ed\\u30fc\\u30ab\\u30eb\": [4, 9, 10, 31, 32], \"\\u30ef\\u30a4\\u30eb\\u30c9\\u30ab\\u30fc\\u30c9\": [14, 15, 32], \"\\u30ef\\u30fc\\u30ad\\u30f3\\u30b0\\u30c7\\u30a3\\u30ec\\u30af\\u30c8\\u30ea\": [13, 32], \"\\u30fblinux\": 13, \"\\u30fbmacos\": 13, \"\\u30fb\\u30af\\u30e9\\u30b9\\u30bf\\u30ea\\u30f3\\u30b0\": [31, 32], \"\\u30fb\\u30bf\\u30d6\": 5, \"\\u30fb\\u30bf\\u30d7\\u30eb\": [8, 12, 31, 32], \"\\u30fb\\u30c6\\u30b9\\u30c8\": [31, 32], \"\\u30fb\\u30dd\\u30a2\\u30bd\\u30f3\": 16, \"\\u30fb\\u30e1\\u30bd\\u30c3\\u30c9\": [4, 31], \"\\u30fb\\u30e9\\u30d9\\u30eb\": 20, \"\\u30fb\\u30e9\\u30d9\\u30eb\\u30c7\\u30fc\\u30bf\": 21, \"\\u30fb\\u30ea\\u30b9\\u30c8\": 9, \"\\u30fb\\u5168\\u89d2\": 5, \"\\u30fb\\u523b\\u307f\\u5e45\": 16, \"\\u30fb\\u6539\\u884c\": 5, \"\\u30fb\\u6700\\u5927\\u5024\": 16, \"\\u30fb\\u7b97\\u8853\": 16, \"\\u30fb\\u7d42\\u4e86\\u5024\": 16, \"\\u30fb\\u95a2\\u6570\\u540d\": 4, \"\\u4e00\\u5b9a\": 9, \"\\u4e00\\u5ea6\": [1, 2, 6, 9, 11, 12, 15], \"\\u4e00\\u5ea6for\": 9, \"\\u4e00\\u6027\": [31, 32], \"\\u4e00\\u62ec\": 11, \"\\u4e00\\u6587\": 30, \"\\u4e00\\u6587\\u5b57\": [6, 9, 22, 30], \"\\u4e00\\u65b9\": [6, 8, 9, 10, 12, 13, 15, 16, 28], \"\\u4e00\\u65e6\": 6, \"\\u4e00\\u6642\": 17, \"\\u4e00\\u6bb5\\u4e0a\": 13, \"\\u4e00\\u6bb5\\u4e0b\": 13, \"\\u4e00\\u756a\": [5, 6, 9, 29], \"\\u4e00\\u756a\\u4e0a\": 14, \"\\u4e00\\u756a\\u5f8c\\u308d\": 9, \"\\u4e00\\u758b\": 11, \"\\u4e00\\u77ac\": 9, \"\\u4e00\\u7a2e\": [2, 11, 18, 19], \"\\u4e00\\u81f4\": [9, 20], \"\\u4e00\\u81f4\\u3057\": 9, \"\\u4e00\\u822c\": [0, 1, 3, 4, 5, 6, 7, 9, 10, 12, 13, 15, 18, 19, 20, 24, 28, 30], \"\\u4e00\\u822c\\u5f62\": 10, \"\\u4e00\\u884c\": [7, 17, 30], \"\\u4e00\\u884c\\u305a\\u3064\": 12, \"\\u4e00\\u898b\": 16, \"\\u4e00\\u89a7\": [9, 10, 16, 32], \"\\u4e00\\u9023\": 8, \"\\u4e00\\u90ce\": 26, \"\\u4e00\\u90e8\": [5, 10], \"\\u4e00\\u91cd\": 9, \"\\u4e09\\u89d2\\u5f62\": 2, \"\\u4e09\\u8fba\": 2, \"\\u4e0a\\u3052\\u308b\": 4, \"\\u4e0a\\u3068\": 5, \"\\u4e0a\\u624b\": 16, \"\\u4e0a\\u65b9\": [0, 22], \"\\u4e0a\\u66f8\\u304d\": [11, 14, 16], \"\\u4e0a\\u8a18\": [2, 3, 5, 6, 10, 21, 24, 27, 28, 29, 30], \"\\u4e0a\\u8ff0\": 6, \"\\u4e0b\\u3055\\u3044\": 11, \"\\u4e0b\\u6841\": 9, \"\\u4e0b\\u7e70\\u308a\": 30, \"\\u4e0b\\u8a18\": [5, 9, 28, 30], \"\\u4e0b\\u90e8\": 0, \"\\u4e0d\\u4fbf\": 30, \"\\u4e0d\\u53ef\\u80fd\": [5, 6, 8], \"\\u4e0d\\u53ef\\u907f\": 1, \"\\u4e0d\\u601d\\u8b70\": 30, \"\\u4e0d\\u6210\\u7acb\": 4, \"\\u4e0d\\u6b63\": 4, \"\\u4e0d\\u7279\\u5b9a\": 27, \"\\u4e0d\\u8981\": [4, 7], \"\\u4e0e\\u3048\": [2, 4, 5, 6, 8, 9, 10, 11, 12, 16, 17, 18, 19, 23, 24, 25, 26, 28, 29], \"\\u4e0e\\u3048\\u308b\": [4, 5, 7, 8, 9, 12, 16, 18, 19, 28, 29], \"\\u4e0e\\u3048\\u308c\": 30, \"\\u4e21\\u65b9\": [1, 28, 29], \"\\u4e21\\u8005\": [1, 6, 16], \"\\u4e21\\u8fba\": 12, \"\\u4e26\\u3073\": [5, 6, 16, 30, 31, 32], \"\\u4e26\\u3076\": [27, 29], \"\\u4e26\\u3079\": [5, 6, 14, 16], \"\\u4e26\\u3079\\u66ff\\u3048\": [30, 32], \"\\u4e2d\\u592e\": 4, \"\\u4e2d\\u65ad\": 9, \"\\u4e2d\\u8eab\": [26, 28, 29, 30], \"\\u4e38\\u3081\": 29, \"\\u4e38\\u62ec\": [6, 7, 30], \"\\u4e38\\u62ec\\u5f27\": 30, \"\\u4e3b\\u6210\": 21, \"\\u4e57\\u7b97\": 16, \"\\u4e57\\u8a08\": 24, \"\\u4e71\\u6570\": [16, 27], \"\\u4e88\\u60f3\": 7, \"\\u4e88\\u6e2c\": 21, \"\\u4e88\\u7d04\": 32, \"\\u4e88\\u9632\": 4, \"\\u4e8b\\u524d\": 10, \"\\u4e8b\\u5b9f\": 16, \"\\u4e8b\\u60c5\": 28, \"\\u4e8b\\u67c4\": 4, \"\\u4e8c\\u4e57\": [4, 21], \"\\u4e8c\\u4eba\": 11, \"\\u4e8c\\u6b21\": 2, \"\\u4e8c\\u6b21\\u65b9\\u7a0b\\u5f0f\": 2, \"\\u4e8c\\u756a\\u76ee\": 7, \"\\u4e8c\\u758b\\u3064\\u308c\": 11, \"\\u4e8c\\u91cd\": [6, 9], \"\\u4e8c\\u91cd\\u30eb\\u30fc\\u30d7\": 9, \"\\u4e8c\\u9805\": 16, \"\\u4e91\\u3072\": 11, \"\\u4e9b\\u7d30\": 4, \"\\u4eca\\u5f8c\": 3, \"\\u4ed5\\u69d8\": [31, 32], \"\\u4ed5\\u7d44\": [2, 25, 31], \"\\u4ed5\\u7d44\\u307f\": 4, \"\\u4ed8\\u3044\": [0, 31], \"\\u4ed8\\u304b\": [0, 6, 22], \"\\u4ed8\\u304d\": [2, 6, 10, 18, 22, 27, 31, 32], \"\\u4ed8\\u304f\": [3, 22], \"\\u4ed8\\u3051\": [2, 4, 6, 8, 10, 14, 19, 20, 23, 28, 30], \"\\u4ed8\\u3051\\u308b\": [2, 14, 27], \"\\u4ed8\\u4e0e\": [16, 19], \"\\u4ed8\\u52a0\": 2, \"\\u4ed8\\u9332\": 9, \"\\u4ed8\\u968f\": 4, \"\\u4ee3\\u308f\\u308a\": [1, 4, 5, 9, 10, 16, 17, 20, 29], \"\\u4ee3\\u5165\": [3, 4, 5, 8, 9, 10, 12, 14, 16, 19, 20, 23, 31, 32], \"\\u4ee3\\u5165\\u6587\": 32, \"\\u4ee3\\u6570\": [31, 32], \"\\u4ee3\\u8868\": [4, 16], \"\\u4ee5\\u4e0a\": [1, 2, 3, 5, 9, 16, 17, 18, 24, 27, 29, 30], \"\\u4ee5\\u4e0b\": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30], \"\\u4ee5\\u524d\": 11, \"\\u4ee5\\u5916\": [2, 6, 7, 11, 13, 16, 26, 30], \"\\u4ee5\\u964d\": [1, 2, 6, 7, 9, 11, 29], \"\\u4eee\\u5b9a\": [2, 4, 15, 26], \"\\u4eee\\u5f15\": 10, \"\\u4eee\\u5f15\\u6570\": [2, 10, 32], \"\\u4eee\\u60f3\": 13, \"\\u4efb\\u610f\": [2, 5, 10, 16, 20, 21, 27, 28, 29], \"\\u4f1d\\u3048\\u308b\": 0, \"\\u4f3c\\u305f\": 17, \"\\u4f4d\\u7f6e\": [2, 4, 5, 6, 7, 10, 16, 20, 27, 29], \"\\u4f4e\\u3044\": [4, 21], \"\\u4f53\\u611f\": 2, \"\\u4f53\\u91cd\": 2, \"\\u4f55\\u3089\\u304b\": [10, 13, 30], \"\\u4f55\\u5ea6\": 12, \"\\u4f55\\u6545\": 10, \"\\u4f55\\u756a\": 0, \"\\u4f59\\u308a\": [1, 3, 32], \"\\u4f5c\\u3063\": [6, 19, 26], \"\\u4f5c\\u3089\": 19, \"\\u4f5c\\u3089\\u308c\": [0, 5, 6, 16, 17, 19, 22, 30], \"\\u4f5c\\u308a\": [6, 12, 19, 26], \"\\u4f5c\\u308a\\u65b9\": [31, 32], \"\\u4f5c\\u308b\": [6, 8, 9, 15, 17, 19, 26, 30], \"\\u4f5c\\u6210\": [5, 6, 8, 9, 11, 16, 17, 18, 19, 21, 22, 23, 26, 27, 28, 29, 30, 31, 32], \"\\u4f5c\\u696d\": [9, 13, 20, 24, 32], \"\\u4f75\\u305b\": [20, 27, 29], \"\\u4f75\\u5408\": 24, \"\\u4f75\\u7528\": 16, \"\\u4f7f\\u3044\": [0, 1, 5, 6, 11, 12, 14, 15, 19, 22, 26, 27], \"\\u4f7f\\u3044\\u65b9\": [6, 20, 21, 25, 31, 32], \"\\u4f7f\\u3046\": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 20, 23, 26, 28, 30], \"\\u4f7f\\u3048\": [0, 1, 5, 6, 9, 11, 18, 22, 27], \"\\u4f7f\\u3048\\u308b\": 16, \"\\u4f7f\\u304a\": [10, 30], \"\\u4f7f\\u3063\": [1, 2, 6, 7, 9, 10, 11, 12, 14, 16, 18, 21, 24, 25, 26, 27, 28, 29, 30], \"\\u4f7f\\u308f\": [2, 4, 6, 8, 9, 11, 19, 28, 31], \"\\u4f7f\\u308f\\u305a\": [3, 5], \"\\u4f7f\\u7528\": [0, 5, 8, 11, 14, 20, 21, 26, 27, 29], \"\\u4f8b\\u3048\": 1, \"\\u4f8b\\u3068\\u3057\\u3066\": [6, 18, 21], \"\\u4f8b\\u306b\": 7, \"\\u4f8b\\u5916\": [4, 12], \"\\u4fbf\\u5229\": [2, 7, 15, 20, 27, 30], \"\\u4fc3\\u3059\": 28, \"\\u4fdd\\u3061\": 24, \"\\u4fdd\\u5b58\": [0, 15, 27, 28, 29, 30, 31, 32], \"\\u4fdd\\u5b88\": [15, 28], \"\\u4fdd\\u6301\": [16, 20], \"\\u4fee\\u6b63\": [1, 2, 7], \"\\u500b\\u3005\": [14, 19, 21, 24], \"\\u500b\\u4eba\": 0, \"\\u500b\\u542b\": 30, \"\\u500b\\u5ba4\": 11, \"\\u500b\\u6240\": 6, \"\\u500b\\u6570\": [10, 18], \"\\u500d\\u6570\": 9, \"\\u5012\\u308c\\u308b\": 11, \"\\u5024\\u3068\": [1, 3, 5, 6, 7, 9, 19, 20, 25, 26, 27, 29, 30], \"\\u5024\\u3068\\u3057\": 8, \"\\u5024\\u3068\\u3057\\u3066\": [2, 3, 8, 26, 27, 29], \"\\u5024\\u5217\": 20, \"\\u5024\\u540c\": 1, \"\\u5024\\u6f14\": 1, \"\\u5024\\u8aa4\": 32, \"\\u5024\\u914d\": [20, 31, 32], \"\\u504f\\u5dee\": 20, \"\\u505c\\u6b62\": [4, 8, 9, 12, 22], \"\\u5074\\u9762\": 4, \"\\u5076\\u6570\": [6, 9, 16], \"\\u507d\\u3068\": 3, \"\\u50cd\\u304d\": [6, 11], \"\\u512a\\u5148\": [31, 32], \"\\u5143\\u3005\": 2, \"\\u5143\\u8868\": 16, \"\\u5143\\u914d\": [20, 21, 32], \"\\u5144\\u5f1f\": [13, 32], \"\\u5145\\u5206\": 27, \"\\u5148url\": 30, \"\\u5148\\u982d\": [5, 7, 9, 11, 13, 16, 20, 30, 31], \"\\u5165\\u3063\": [9, 11, 19, 22, 26, 29], \"\\u5165\\u308a\": [0, 11], \"\\u5165\\u308b\": [2, 12], \"\\u5165\\u308c\": [4, 5, 6, 9, 30], \"\\u5165\\u308c\\u308b\": [1, 2, 4, 7, 9], \"\\u5165\\u308c\\u5b50\": [2, 7, 13, 16, 31, 32], \"\\u5165\\u308c\\u5b50\\u30ea\\u30b9\\u30c8\": 16, \"\\u5165\\u51fa\": [4, 31], \"\\u5165\\u529b\": [0, 1, 2, 7, 10, 21, 22, 24, 28, 31], \"\\u5165\\u53e3\": 4, \"\\u5165\\u624b\": 30, \"\\u5168\\u304f\": [15, 16, 28], \"\\u5168\\u3066\": [5, 6, 9, 11, 14, 15, 17, 19, 21, 23, 30], \"\\u5168\\u4f53\": [0, 6, 9, 10, 13, 24, 26, 30, 31, 32], \"\\u5168\\u822c\": 4, \"\\u5168\\u8981\": [16, 17], \"\\u5168\\u89d2\": [4, 26], \"\\u5168\\u90e8\": 21, \"\\u516c\\u5f0f\": [2, 4, 11, 12, 15, 28], \"\\u516c\\u5f0ffaq\": 10, \"\\u516c\\u6bd4\": 9, \"\\u5171\\u306b\": [7, 9, 17], \"\\u5171\\u6709\": [0, 16], \"\\u5171\\u901a\": [11, 13], \"\\u5175\\u968a\": 11, \"\\u5177\\u4f53\": [5, 6, 8, 9, 12, 14, 16, 29, 30, 31], \"\\u5177\\u4f53\\u4f8b\": 7, \"\\u5177\\u5408\": 30, \"\\u5178\\u578b\": [1, 4, 6, 19, 24, 30], \"\\u5185\\u3069\": 10, \"\\u5185\\u5074\": [9, 16, 30], \"\\u5185\\u5305\": [6, 9, 18, 31, 32], \"\\u5185\\u5bb9\": [4, 6, 7, 8, 9, 11, 13, 15, 16, 26, 28, 30], \"\\u5185\\u7a4d\": 16, \"\\u5185\\u7dda\": 30, \"\\u5185\\u90e8\": [11, 15, 16], \"\\u518d\\u3073\": 7, \"\\u518d\\u5165\": 2, \"\\u518d\\u5229\": [10, 15], \"\\u518d\\u5b9a\": [2, 19], \"\\u518d\\u5b9f\\u884c\": 11, \"\\u518d\\u5e30\": [31, 32], \"\\u518d\\u5e30\\u547c\": 24, \"\\u518d\\u5ea6\": [9, 11, 12], \"\\u5192\\u982d\": [8, 11, 25], \"\\u51aa\\u6307\\u6570\": 24, \"\\u51e1\\u4f8b\": [27, 29], \"\\u51e6\\u7406\": [2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 16, 21, 24, 25, 30, 31], \"\\u51fa\\u3057\": [24, 28, 32], \"\\u51fa\\u305f\\u308a\": [5, 11], \"\\u51fa\\u3066\": 2, \"\\u51fa\\u307e\\u305b\": 11, \"\\u51fa\\u308c\": 6, \"\\u51fa\\u529b\": [2, 6, 7, 15, 18, 25, 31, 32], \"\\u51fa\\u7248\": 9, \"\\u51fa\\u73fe\": [1, 2, 5, 6, 9, 30], \"\\u51fa\\u8eab\\u5730\": 26, \"\\u5206\\u304b\\u308a\": 4, \"\\u5206\\u304b\\u308b\": 11, \"\\u5206\\u3051\": [4, 21, 27], \"\\u5206\\u3051\\u308b\": 21, \"\\u5206\\u5148\": 12, \"\\u5206\\u5206\": 21, \"\\u5206\\u5272\": [7, 15, 16, 21, 24, 27, 30, 32], \"\\u5206\\u5c90\": [28, 30, 31, 32], \"\\u5206\\u5e03\": [9, 16, 21, 27, 29], \"\\u5206\\u6563\": [9, 17], \"\\u5206\\u6790\": [4, 20], \"\\u5206\\u89e3\": [16, 30], \"\\u5206\\u90e8\": 30, \"\\u5206\\u91ce\": 16, \"\\u5206\\u96e2\": 21, \"\\u5206\\u985e\": [5, 27, 31, 32], \"\\u5207\\u308a\": [9, 12], \"\\u5207\\u308a\\u51fa\\u3057\": [15, 30], \"\\u5207\\u308a\\u6368\\u3066\": 1, \"\\u5217a\": [5, 30], \"\\u5217b\": [5, 30], \"\\u5217it\": 30, \"\\u5217\\u3068\\u3057\\u3066\": 21, \"\\u5217\\u4e0a\": 30, \"\\u5217\\u4e2d\": 5, \"\\u5217\\u5024\": 16, \"\\u5217\\u5168\": [6, 30], \"\\u5217\\u51e6\": 6, \"\\u5217\\u540c\": 5, \"\\u5217\\u540d\": 20, \"\\u5217\\u578b\": 28, \"\\u5217\\u5909\": 5, \"\\u5217\\u6319\": 16, \"\\u5217\\u6570\": 16, \"\\u5217\\u65b9\": 20, \"\\u5217\\u7248\": 16, \"\\u5217\\u76ee\": [20, 21, 26, 29], \"\\u5217\\u7d50\\u5408\": 28, \"\\u521d\\u5fc3\\u8005\": [31, 32], \"\\u521d\\u671f\": [31, 32], \"\\u521d\\u671f\\u5024\": [31, 32], \"\\u521d\\u671f\\u5316\": [9, 19, 30, 32], \"\\u521d\\u671f\\u6642\": 19, \"\\u521d\\u9805\": 9, \"\\u5224\\u5225\\u5f0f\": 2, \"\\u5224\\u5b9a\": [6, 9, 23, 24, 30], \"\\u5224\\u65ad\": [6, 7, 16], \"\\u5224\\u660e\": 4, \"\\u5225\\u3005\": 6, \"\\u5225\\u3082\\u306e\": 2, \"\\u5225\\u540d\": [16, 20, 29], \"\\u5225\\u89e3\": [9, 30], \"\\u5229\\u7528\": [2, 4, 5, 6, 7, 8, 9, 10, 11, 13, 14, 15, 16, 17, 25, 28, 30], \"\\u5230\\u9054\": [2, 12], \"\\u5236\\u5fa1\": [2, 3, 7, 31, 32], \"\\u523b\\u307f\": [1, 9, 16, 27, 29], \"\\u523b\\u307f\\u5e45\": 16, \"\\u524a\\u6e1b\": [31, 32], \"\\u524a\\u9664\": [0, 2, 4, 22, 23, 30, 31, 32], \"\\u524d\\u51e6\": 21, \"\\u524d\\u534a\": [5, 30], \"\\u524d\\u5f8c\": [4, 5, 16], \"\\u524d\\u63d0\": 4, \"\\u524d\\u8005\": 9, \"\\u524d\\u8ff0\": 2, \"\\u5270\\u4f59\": [1, 16, 32], \"\\u5272\\u3063\": [1, 2, 3], \"\\u5272\\u308a\": [2, 20, 29], \"\\u5272\\u308a\\u5f53\\u3066\": [2, 27], \"\\u5272\\u308a\\u5f53\\u3066\\u308b\": 2, \"\\u5272\\u308a\\u7b97\": [1, 32], \"\\u5272\\u308a\\u8fbc\\u307f\": 12, \"\\u52a0\\u3048\": [1, 5, 6, 8, 9, 11, 17, 28, 29], \"\\u52a0\\u3048\\u308b\": [11, 30], \"\\u52a0\\u5de5\": 5, \"\\u52a0\\u7b97\": [16, 28], \"\\u52b9\\u679c\": [19, 27], \"\\u52b9\\u7387\": [6, 16, 17, 24], \"\\u52d5\\u3044\": 13, \"\\u52d5\\u304b\": 17, \"\\u52d5\\u304b\\u3057\": 17, \"\\u52d5\\u304d\": 4, \"\\u52d5\\u304f\": [9, 18], \"\\u52d5\\u4f5c\": [4, 7, 9, 13, 25, 31], \"\\u52d5\\u7684\": 8, \"\\u52d8\\u9055\\u3044\": 4, \"\\u52ff\\u8ad6\": 30, \"\\u5305\\u542b\": [13, 23], \"\\u5316\\u3051\": [11, 26], \"\\u5316\\u624b\": 21, \"\\u533a\\u5207\": [6, 16, 17, 26], \"\\u533a\\u5207\\u3063\": [6, 11, 13, 14, 26, 28], \"\\u533a\\u5207\\u308a\": [2, 6, 9, 10, 11, 13, 16, 30], \"\\u533a\\u5207\\u308b\": 30, \"\\u533a\\u5225\": [23, 28, 30], \"\\u5341\\u5206\": 16, \"\\u5341\\u5b57\": 27, \"\\u534a\\u5206\": [2, 24], \"\\u534a\\u89d2\": [1, 4, 5, 7, 11, 26, 32], \"\\u5358\\u306a\\u308b\": [16, 30], \"\\u5358\\u4f4d\": [6, 15, 16], \"\\u5358\\u72ec\": [27, 28], \"\\u5358\\u7d14\": [2, 24], \"\\u5358\\u8a9e\": [2, 9, 23, 30], \"\\u5358\\u9805\": 32, \"\\u5370\\u5b57\": [2, 4, 9, 10, 11, 16, 28, 30, 32], \"\\u5373\\u5ea7\": [3, 12, 19], \"\\u539f\\u5247\": [10, 11, 15], \"\\u539f\\u56e0\": 4, \"\\u539f\\u59cb\": 11, \"\\u53b3\\u5bc6\": 29, \"\\u53c2\\u7167\": [1, 3, 4, 5, 6, 8, 9, 10, 11, 12, 14, 15, 16, 18, 19, 27, 28, 29, 30, 31, 32], \"\\u53c2\\u7167\\u304f\": 9, \"\\u53c2\\u8003\": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 25, 26, 27, 28, 29, 30], \"\\u53ca\\u3073\\u4ed6\": 27, \"\\u53ca\\u307c\": 16, \"\\u53ca\\u307c\\u3059\": 10, \"\\u53cd\\u3057\": 4, \"\\u53cd\\u5fa9\": [16, 31, 32], \"\\u53cd\\u5fa9\\u5b50\": 12, \"\\u53cd\\u5fdc\": 31, \"\\u53cd\\u6620\": 4, \"\\u53d6\\u3063\": [6, 18], \"\\u53d6\\u308a\": [6, 9, 10, 12, 16, 18, 29, 30], \"\\u53d6\\u308a\\u4e0a\\u3052\\u308b\": 25, \"\\u53d6\\u308a\\u51fa\\u3055\": [6, 9, 12], \"\\u53d6\\u308a\\u51fa\\u3057\": [6, 9, 12, 16, 23, 30, 31, 32], \"\\u53d6\\u308a\\u51fa\\u3059\": [6, 8, 9, 12, 16, 23, 26], \"\\u53d6\\u308a\\u51fa\\u305b\": [6, 8, 12], \"\\u53d6\\u308a\\u6271\\u3046\": 6, \"\\u53d6\\u308a\\u6271\\u3048\": 5, \"\\u53d6\\u308a\\u9664\\u304f\": [4, 5], \"\\u53d6\\u308b\": [2, 4, 5, 10, 18, 26], \"\\u53d6\\u308c\\u308b\": 17, \"\\u53d6\\u5f97\": [4, 5, 8, 11, 20, 21, 30, 32], \"\\u53d7\\u3051\": [2, 6, 8, 10, 12, 18, 26], \"\\u53d7\\u3051\\u308b\": 6, \"\\u53d7\\u3051\\u53d6\\u3063\": [10, 18], \"\\u53d7\\u3051\\u53d6\\u308a\": 10, \"\\u53e5\\u8aad\": [5, 9, 23, 30], \"\\u53e5\\u8aad\\u70b9\": 23, \"\\u53ef\\u5426\": 8, \"\\u53ef\\u5909\": [31, 32], \"\\u53ef\\u5909\\u9577\": 10, \"\\u53ef\\u80fd\": [0, 2, 5, 6, 7, 8, 9, 10, 12, 14, 15, 16, 17, 19, 21, 22, 23, 26, 28, 29, 30], \"\\u53ef\\u8996\": [21, 27, 29, 31], \"\\u53ef\\u8aad\": 4, \"\\u53f3\\u4e0a\": [0, 22], \"\\u53f3\\u5074\": [1, 5, 6], \"\\u53f3\\u56de\\u308a\": 22, \"\\u53f3\\u8fba\": [2, 16, 19], \"\\u5404\\u5217\": [16, 20, 21], \"\\u5404\\u5834\\u5408\": 9, \"\\u5404\\u5869\": 6, \"\\u5404\\u5b50\": 9, \"\\u5404\\u624b\": 21, \"\\u5404\\u6570\": 20, \"\\u5404\\u6587\": 5, \"\\u5404\\u6708\": 29, \"\\u5404\\u6b21\": [16, 21], \"\\u5404\\u70b9\": 29, \"\\u5404\\u7a2e\": [0, 1, 17, 25], \"\\u5404\\u7dda\": 29, \"\\u5404\\u82b1\": 21, \"\\u5404\\u884c\": [12, 16, 18, 20, 21, 26, 29], \"\\u5404\\u8981\": [6, 8, 9, 16, 17, 18, 27, 29], \"\\u5404\\u8981\\u7d20\": [16, 18], \"\\u5404\\u8ef8\": 29, \"\\u5408\\u308f\": [27, 29], \"\\u5408\\u308f\\u305b\": 10, \"\\u5408\\u6210\": 24, \"\\u5408\\u8a08\": 2, \"\\u540c\\u3058\": [2, 3, 5, 6, 7, 8, 9, 10, 11, 13, 14, 15, 16, 17, 19, 21, 22, 23, 25, 26, 27, 28, 29, 30], \"\\u540c\\u3058\\u304f\": [11, 16], \"\\u540c\\u3058\\u5024\": [6, 16, 19, 20], \"\\u540c\\u3058\\u5f62\": 19, \"\\u540c\\u3058\\u6570\": 1, \"\\u540c\\u3058\\u6df1\\u3055\": 2, \"\\u540c\\u3058\\u9577\\u3055\": 6, \"\\u540c\\u540d\": 10, \"\\u540c\\u58eb\": [1, 32], \"\\u540c\\u6642\": [8, 10, 14, 29], \"\\u540c\\u69d8\": [1, 2, 3, 5, 6, 8, 9, 10, 11, 12, 14, 16, 18, 19, 20, 23, 26, 29, 30], \"\\u540c\\u7b49\": 9, \"\\u540c\\u7fa9\": [3, 12], \"\\u540c\\u8272\": 27, \"\\u540d\\u524d\": [2, 4, 6, 10, 11, 14, 15, 16, 19, 26, 28], \"\\u540d\\u53e4\\u5c4b\": 26, \"\\u540d\\u79f0\": [6, 14], \"\\u5411\\u304b\\u3063\": 9, \"\\u5411\\u304d\": 29, \"\\u5426\\u5b9a\": [3, 6, 30, 32], \"\\u542b\\u307e\": [1, 3, 5, 6, 8, 9, 13, 20, 21, 23, 24, 29, 30], \"\\u542b\\u307e\\u308c\": [4, 5, 6, 9, 24, 30], \"\\u542b\\u307e\\u308c\\u3044\": 30, \"\\u542b\\u307e\\u308c\\u308b\": [5, 6, 9, 23, 30], \"\\u542b\\u3080\": [5, 6, 9, 10, 12, 16, 23, 24, 26, 28, 30], \"\\u542b\\u3080\\u5f0f\": 6, \"\\u542b\\u3081\": [2, 13, 18, 30], \"\\u542b\\u3081\\u308b\": 2, \"\\u542b\\u3093\": [9, 15], \"\\u5468\\u308a\": 0, \"\\u5468\\u7387\": 1, \"\\u5468\\u8fba\": 30, \"\\u547c\\u3070\": [4, 6, 10, 11, 12, 13, 18, 21, 24, 28], \"\\u547c\\u3073\": [2, 9, 12, 13, 16], \"\\u547c\\u3073\\u51fa\\u3055\": [19, 26, 27], \"\\u547c\\u3073\\u51fa\\u3055\\u305a\": 11, \"\\u547c\\u3073\\u51fa\\u3057\": [2, 5, 6, 10, 11, 19, 24], \"\\u547c\\u3073\\u51fa\\u3057\\u5143\": 2, \"\\u547c\\u3073\\u51fa\\u3059\": [2, 6, 10, 11, 19, 24, 26], \"\\u547c\\u3073\\u51fa\\u3059\\u6bce\\u306b\": 12, \"\\u547c\\u3073\\u51fa\\u3059\\u969b\": 10, \"\\u547c\\u3073\\u51fa\\u3059\\u969b\\u306b\": 10, \"\\u547c\\u3076\": [5, 10, 11, 13, 29], \"\\u547c\\u3093\": [9, 11, 18, 27], \"\\u548c\\u3084\": 30, \"\\u548c\\u3088\\u308a\": 30, \"\\u548c\\u6f14\": 30, \"\\u548c\\u7d00\": 9, \"\\u548c\\u96c6\\u5408\": [23, 32], \"\\u5531\\u3048\": 1, \"\\u554f\\u984c\": [2, 4, 6, 11, 21, 24], \"\\u554f\\u984c\\u6587\": 30, \"\\u56db\\u89d2\": 0, \"\\u56de\\u3060\\u3051\": 10, \"\\u56de\\u3084\\u3063\": 19, \"\\u56de\\u308a\\u7d9a\\u3051\": 0, \"\\u56de\\u4ee5\": 30, \"\\u56de\\u542b\": 5, \"\\u56de\\u547c\\u3073\\u51fa\\u3057\": 24, \"\\u56de\\u5b9f\\u884c\": 9, \"\\u56de\\u5e30\": [26, 31, 32], \"\\u56de\\u6570\": [5, 6, 9, 19, 24], \"\\u56de\\u73fe\": 6, \"\\u56de\\u76ee\": 8, \"\\u56de\\u7e70\\u308a\\u8fd4\\u3055\": 6, \"\\u56de\\u907f\": [8, 30], \"\\u56f2\\u307e\": [0, 5, 30], \"\\u56f2\\u307f\": [6, 23], \"\\u56f2\\u3080\": 5, \"\\u56f2\\u308f\": 26, \"\\u56f2\\u3093\": 5, \"\\u56f3\\u5f62\": 27, \"\\u5727\\u7e2e\": 16, \"\\u5730\\u4f4d\": 16, \"\\u5782\\u76f4\": 25, \"\\u578b\\u3068\": 19, \"\\u578b\\u540d\": 16, \"\\u57fa\\u3065\\u3044\": [4, 20], \"\\u57fa\\u3065\\u304d\": 21, \"\\u57fa\\u3065\\u304f\": [20, 27, 29], \"\\u57fa\\u672c\": [2, 3, 10, 16, 20, 21, 24, 27, 29, 31, 32], \"\\u57fa\\u6e96\": 5, \"\\u57fa\\u790e\": 31, \"\\u5834\\u5408\": [0, 1, 2, 3, 4, 5, 6, 7, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 20, 22, 23, 24, 26, 27, 28, 29, 30, 32], \"\\u5834\\u6240\": [4, 10, 13, 19, 28], \"\\u5857\\u3063\": 27, \"\\u5869\\u57fa\": 5, \"\\u5883\\u754c\": [21, 27], \"\\u5897\\u3048\": [0, 9, 12], \"\\u5897\\u3048\\u308b\": 0, \"\\u5897\\u3084\": [9, 28], \"\\u5897\\u3084\\u3059\": [2, 9, 27, 29], \"\\u58ca\\u7684\": [31, 32], \"\\u5909\\u3048\\u308b\": [0, 2, 7, 10, 28, 29], \"\\u5909\\u308f\\u3063\": 30, \"\\u5909\\u308f\\u308a\": [2, 4, 8], \"\\u5909\\u308f\\u308b\": [2, 5, 28], \"\\u5909\\u5316\": [2, 5, 6, 10, 13, 27, 30], \"\\u5909\\u63db\": [2, 4, 5, 9, 11, 16, 17, 18, 23, 26, 29, 30, 31, 32], \"\\u5909\\u6570\": [1, 3, 4, 6, 8, 9, 11, 12, 14, 17, 19, 26, 28, 30, 31, 32], \"\\u5909\\u66f4\": [0, 2, 5, 6, 7, 8, 9, 10, 13, 14, 19, 20, 22, 28, 29], \"\\u5909\\u66f4\\u5f8c\": 2, \"\\u5916\\u5074\": [6, 9, 16, 17], \"\\u591a\\u3044\": [5, 11, 24, 27, 29], \"\\u591a\\u304f\": [4, 5, 6, 20], \"\\u591a\\u6570\": [16, 19], \"\\u591a\\u6b21\": [20, 32], \"\\u591a\\u6b21\\u5143\": 16, \"\\u591a\\u7528\": 16, \"\\u591a\\u8a00\": 5, \"\\u591a\\u91cd\": [9, 23, 31, 32], \"\\u5927\\u304d\": [1, 9], \"\\u5927\\u304d\\u3044\": [3, 5, 6, 9, 17, 18], \"\\u5927\\u304d\\u304f\": [2, 4, 5, 9, 15, 16, 20], \"\\u5927\\u304d\\u3051\\u308c\": [3, 6], \"\\u5927\\u304d\\u3055\": [9, 17, 27, 29], \"\\u5927\\u4e08\\u592b\": 30, \"\\u5927\\u4f53\": 2, \"\\u5927\\u5206\": 0, \"\\u5927\\u5207\": 4, \"\\u5927\\u5b66\": 9, \"\\u5927\\u5c0f\": [5, 6], \"\\u5927\\u62b5\": [4, 14, 17], \"\\u5927\\u6587\\u5b57\": [2, 6, 9, 11, 23, 30, 32], \"\\u5927\\u898f\\u6a21\": 16, \"\\u5929\\u4e0b\\u308a\": 6, \"\\u592a\\u5b57\": [2, 9], \"\\u5931\\u6557\": [4, 30], \"\\u5947\\u6570\": 9, \"\\u59cb\\u307e\\u308a\": [2, 6, 7, 12, 19, 20], \"\\u59cb\\u307e\\u308b\": [1, 3, 5, 6, 7, 13, 14, 16, 20, 25, 30, 31], \"\\u59cb\\u3081\\u308b\": [1, 2, 30], \"\\u5b50\\u30ea\\u30b9\\u30c8\": 9, \"\\u5b50\\u5b6b\": [13, 32], \"\\u5b50\\u6271\\u3044\": 30, \"\\u5b57\\u3057\": 11, \"\\u5b57\\u4e0b\\u3052\": 7, \"\\u5b57\\u4ee5\": [9, 30], \"\\u5b57\\u5206\": 30, \"\\u5b57\\u5217\": [3, 9, 11, 19, 30, 31, 32], \"\\u5b58\\u5728\": [4, 5, 8, 11, 13, 15, 21, 23, 28, 30], \"\\u5b66\\u3073\": 25, \"\\u5b66\\u3076\": 25, \"\\u5b66\\u3093\": [5, 9, 25], \"\\u5b66\\u7fd2\": [2, 14, 16, 30, 31, 32], \"\\u5b89\\u5168\": 11, \"\\u5b8c\\u4e86\": [9, 12], \"\\u5b8c\\u6210\": [6, 21], \"\\u5b8c\\u7d50\": 28, \"\\u5b9a\\u307e\\u308a\": [6, 15], \"\\u5b9a\\u3081\": 5, \"\\u5b9a\\u6570\": [3, 32], \"\\u5b9a\\u7fa9\": [1, 3, 7, 9, 11, 13, 14, 15, 16, 17, 18, 24, 26, 30, 31, 32], \"\\u5b9f\\u5f15\": [4, 10], \"\\u5b9f\\u5f15\\u6570\": [10, 32], \"\\u5b9f\\u6570\": [2, 5, 16, 29, 31, 32], \"\\u5b9f\\u73fe\": [4, 12, 16, 27, 29, 30], \"\\u5b9f\\u884c\": [1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 15, 16, 17, 18, 19, 21, 22, 23, 25, 26, 29, 30, 31, 32], \"\\u5b9f\\u884c\\u5f8c\": 8, \"\\u5b9f\\u884c\\u6587\": [6, 9], \"\\u5b9f\\u88c5\": [6, 21, 24, 28], \"\\u5b9f\\u90e8\": 16, \"\\u5b9f\\u969b\": [3, 4, 5, 17, 18, 19, 21, 28], \"\\u5ba3\\u8a00\": [4, 31, 32], \"\\u5bb9\\u6613\": [24, 25], \"\\u5bfe\\u51e6\": 4, \"\\u5bfe\\u5fdc\": [5, 8, 9, 16, 17, 18, 21, 23, 25, 27, 29, 31, 32], \"\\u5bfe\\u6570\": 14, \"\\u5bfe\\u79f0\": 23, \"\\u5bfe\\u79f0\\u5dee\": [23, 32], \"\\u5bfe\\u8c61\": [4, 6, 11, 23], \"\\u5c0e\\u5165\": [2, 4], \"\\u5c0f\\u3055\": [1, 24], \"\\u5c0f\\u3055\\u3044\": [3, 5, 9, 20, 24, 29], \"\\u5c0f\\u3055\\u304f\": [1, 2, 3], \"\\u5c0f\\u6570\": [1, 16, 26, 32], \"\\u5c0f\\u6587\\u5b57\": [2, 11, 23, 30, 32], \"\\u5c11\\u3057\": 30, \"\\u5c11\\u3057\\u4f8b\": 1, \"\\u5c11\\u3057\\u8a73\\u3057\\u3044\": 11, \"\\u5c11\\u306a\\u304f\": [27, 29], \"\\u5c11\\u6570\": 9, \"\\u5c3a\\u5ea6\": 9, \"\\u5c45\\u3084\": 11, \"\\u5c55\\u958b\": [9, 13], \"\\u5c5e\\u3057\": 7, \"\\u5c5e\\u3059\\u308b\": 19, \"\\u5c5e\\u6027\": [20, 21, 27, 30, 31, 32], \"\\u5c5e\\u6027\\u540d\": 19, \"\\u5c71\\u53e3\": 9, \"\\u5c71\\u5965\": 11, \"\\u5c71\\u7530\": 26, \"\\u5d29\\u308c\": 4, \"\\u5de6\\u304b\\u3089\": 17, \"\\u5de6\\u5074\": [5, 16], \"\\u5de6\\u53f3\": [5, 30], \"\\u5de6\\u7aef\": 0, \"\\u5de6\\u8fba\": [2, 6, 9, 19], \"\\u5dee\\u3057\": 3, \"\\u5dee\\u96c6\\u5408\": [23, 32], \"\\u5e30\\u547c\": [24, 32], \"\\u5e30\\u95a2\": [31, 32], \"\\u5e73\\u5747\": [9, 10, 16, 20, 21, 26, 29], \"\\u5e73\\u65b9\\u6839\": [1, 14], \"\\u5e73\\u9762\": 6, \"\\u5e74\\u4ee5\\u964d\": 29, \"\\u5e74\\u6708\": 29, \"\\u5e7e\\u3064\\u304b\": [16, 30], \"\\u5e83\\u304f\": [7, 13, 25], \"\\u5e83\\u5cf6\": 26, \"\\u5e95base\": 24, \"\\u5e95\\u3068\": 14, \"\\u5ea6\\u540c\": 9, \"\\u5ea7\\u6a19\": [6, 25], \"\\u5f0f\\u304c\": 10, \"\\u5f0f\\u306a\": 2, \"\\u5f0f\\u306a\\u3057\": 10, \"\\u5f0f\\u5168\": 7, \"\\u5f15\\u304d\\u7b97\": [1, 32], \"\\u5f15\\u304d\\u7b97\\u3088\\u308a\": 1, \"\\u5f15\\u304d\\u8d77\\u3053\\u3057\": 4, \"\\u5f15\\u6570\": [2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 16, 17, 18, 19, 20, 21, 23, 26, 27, 29, 30, 31, 32], \"\\u5f15\\u7528\": 9, \"\\u5f31\\u304f\": 1, \"\\u5f37\\u3044\": 1, \"\\u5f37\\u304f\": [1, 4, 30], \"\\u5f37\\u3055\": 30, \"\\u5f37\\u5236\": [0, 19], \"\\u5f37\\u8abf\": 2, \"\\u5f53\\u3066\": [20, 29], \"\\u5f53\\u3066\\u308b\": 2, \"\\u5f62\\u5f0f\": [1, 2, 12, 16, 27, 30, 31, 32], \"\\u5f62\\u72b6\": 29, \"\\u5f6b\\u308a\": 4, \"\\u5f71\\u97ff\": [2, 6, 7, 8, 16], \"\\u5f79\\u5272\": [2, 30], \"\\u5f8c\\u304b\\u3089\": 6, \"\\u5f8c\\u3060\": 11, \"\\u5f8c\\u308d\": [5, 9, 28, 30], \"\\u5f8c\\u534a\": [5, 30], \"\\u5f8c\\u7d9a\": 12, \"\\u5f8c\\u8005\": [6, 9], \"\\u5f8c\\u8ff0\": [1, 6, 11], \"\\u5f93\\u3044\": 2, \"\\u5f93\\u3063\": [5, 10, 28], \"\\u5f97\\u305f\\u3044\": 5, \"\\u5f97\\u3089\": 9, \"\\u5f97\\u3089\\u308c\": 6, \"\\u5f97\\u308b\": [1, 5, 32], \"\\u5f97\\u610f\": 6, \"\\u5fa9\\u5143\": [31, 32], \"\\u5fa9\\u5e30\": 11, \"\\u5fc5\\u305a\": [1, 2, 3, 13], \"\\u5fc5\\u305a\\u3057\": [2, 4, 11, 20], \"\\u5fc5\\u305a\\u65b0\\u3057\\u3044\": 6, \"\\u5fc5\\u305a\\u7570\": 9, \"\\u5fc5\\u8981\": [0, 1, 4, 5, 6, 7, 9, 10, 11, 14, 15, 16, 18, 23, 25, 27, 28, 29, 30], \"\\u5fd8\\u308c\": [2, 4, 11, 26], \"\\u5fdc\\u3058\": [2, 4, 5, 6, 7, 12, 27, 29], \"\\u5fdc\\u7528\": 27, \"\\u601d\\u3044\": [18, 26, 30], \"\\u601d\\u3046\": 30, \"\\u601d\\u3063\": 3, \"\\u601d\\u308f\": 25, \"\\u602a\\u3057\": 11, \"\\u60c5\\u5831\": [6, 9, 16, 20, 21, 30], \"\\u60f3\\u5b9a\": [11, 16, 28], \"\\u610f\\u5473\": [0, 1, 2, 4, 5, 6, 11, 12, 13, 16, 19, 26, 28, 30], \"\\u610f\\u56f3\": [4, 6, 7, 30], \"\\u6163\\u4f8b\": [19, 20, 29], \"\\u6163\\u7fd2\": 16, \"\\u6210\\u3059\": 13, \"\\u6210\\u308a\\u7acb\\u305f\": 3, \"\\u6210\\u308a\\u7acb\\u3061\": [1, 3], \"\\u6210\\u308a\\u7acb\\u3063\": [0, 3, 22], \"\\u6210\\u308a\\u7acb\\u3064\": 3, \"\\u6210\\u308b\": [1, 2, 5, 6, 9, 30], \"\\u6210\\u529f\": 12, \"\\u6210\\u7acb\": [9, 30], \"\\u623b\\u3055\": 7, \"\\u623b\\u3057\": [9, 24], \"\\u623b\\u3059\": [7, 16], \"\\u623b\\u3063\": 9, \"\\u623b\\u308b\": [7, 13], \"\\u6240\\u5b9a\": 16, \"\\u6240\\u5c5e\": 21, \"\\u624b\\u7d9a\\u304d\": [6, 8, 9, 10, 21], \"\\u624b\\u9806\": [9, 21], \"\\u6253\\u3061\": 29, \"\\u6253\\u3061\\u5207\\u3089\\u308c\": 9, \"\\u6271\\u3044\": [2, 3, 19, 31], \"\\u6271\\u3046\": [1, 3, 5, 6, 8, 9, 16, 30], \"\\u6271\\u3048\": 26, \"\\u6271\\u3048\\u308b\": [12, 16], \"\\u6271\\u3063\": [4, 15], \"\\u6271\\u308f\": [1, 2, 3, 5, 7, 10, 13, 26, 30], \"\\u6280\\u8853\": 16, \"\\u628a\\u63e1\": 9, \"\\u6291\\u5236\": [7, 29], \"\\u6295\\u3052\": 19, \"\\u6298\\u308c\": 31, \"\\u629c\\u304d\\u51fa\\u3057\": 6, \"\\u629c\\u304d\\u51fa\\u3059\": 30, \"\\u629c\\u3051\": 9, \"\\u629c\\u3051\\u308b\": [9, 10], \"\\u62bc\\u3057\": [0, 1, 22], \"\\u62bc\\u3059\": [0, 1], \"\\u62bc\\u305b\": 0, \"\\u62bd\\u51fa\": 20, \"\\u62e1\\u5f35\": [5, 6], \"\\u62e1\\u5f35\\u5b50\": [0, 15, 16, 22, 28], \"\\u62ec\\u3089\": 7, \"\\u62ec\\u308b\": 7, \"\\u62ec\\u5f27\": [2, 4, 5, 6, 8, 10, 19, 30, 31, 32], \"\\u6301\\u3061\": [2, 3, 7, 9, 15, 17, 19, 21], \"\\u6301\\u3063\": [0, 27], \"\\u6301\\u3064\": [2, 5, 6, 9, 10, 12, 13, 16, 17, 18, 19, 21, 29, 30], \"\\u6301\\u3064\\u5b50\\u30ea\\u30b9\\u30c8\": 9, \"\\u6301\\u3064\\u7d44\\u307f\\u8fbc\\u307f\": 17, \"\\u6301\\u3064\\u884c\": 20, \"\\u6307\\u3057\": [4, 11, 13, 24, 28], \"\\u6307\\u3057\\u793a\\u3057\": 2, \"\\u6307\\u3057\\u793a\\u3059\": 2, \"\\u6307\\u3057\\u793a\\u3059\\u5024\": 2, \"\\u6307\\u3059\": 19, \"\\u6307\\u5411\": [19, 32], \"\\u6307\\u5b9a\": [0, 1, 3, 5, 9, 10, 12, 13, 14, 16, 18, 19, 20, 21, 23, 26, 27, 28, 29, 30, 31, 32], \"\\u6307\\u6570\": 2, \"\\u6307\\u6a19\": 9, \"\\u6319\\u3052\": 4, \"\\u631f\\u3093\": 30, \"\\u632f\\u3089\": 22, \"\\u632f\\u308b\": [2, 22], \"\\u632f\\u821e\": [19, 28], \"\\u632f\\u821e\\u3044\": [4, 9, 12, 16, 28, 31], \"\\u633f\\u5165\": [1, 7, 22, 31, 32], \"\\u6349\\u3048\": [12, 13], \"\\u6355\\u307e\\u3048\": 19, \"\\u6368\\u3066\\u308b\": 9, \"\\u6388\\u696d\": 31, \"\\u639b\\u3051\": 2, \"\\u639b\\u3051\\u7b97\": [1, 10, 32], \"\\u639b\\u3051\\u7b97\\u3084\\u5272\\u308a\": 1, \"\\u63a2\\u3057\": [9, 11, 28], \"\\u63a2\\u7d22\": 19, \"\\u63a5\\u5408\\u70b9\": 6, \"\\u63a5\\u5c3e\": 31, \"\\u63a5\\u982d\": 31, \"\\u63a8\\u5968\": [4, 7, 11, 14, 15, 28, 30], \"\\u63a8\\u5bdf\": 4, \"\\u63a8\\u79fb\": 13, \"\\u63cf\\u3051\": 27, \"\\u63cf\\u753b\": [27, 29], \"\\u63d0\\u4f9b\": [1, 14, 16, 20, 27], \"\\u63db\\u3048\": [5, 21, 30], \"\\u63db\\u3048\\u308b\": [6, 8, 9, 17, 30], \"\\u63db\\u3048\\u308c\": 17, \"\\u63db\\u308f\\u308a\": [1, 30], \"\\u64cd\\u4f5c\": [2, 5, 9, 12, 20, 24, 30, 31, 32], \"\\u652f\\u3048\": 3, \"\\u652f\\u63f4\": 20, \"\\u6539\\u3081\": [2, 4, 10, 12], \"\\u6539\\u3081\\u3066\": 11, \"\\u6539\\u5909\": 31, \"\\u6539\\u884c\": [2, 5, 12, 18, 26, 30, 31], \"\\u653e\\u7f6e\": 11, \"\\u6559\\u54e1\": 0, \"\\u6559\\u5e2b\": [31, 32], \"\\u6559\\u6750\": [11, 13, 28, 31], \"\\u6559\\u6750\\u7b49\": 22, \"\\u6563\\u5e03\": [21, 27, 29, 32], \"\\u6563\\u5e03\\u56f3\": [31, 32], \"\\u6570\\u3048\": [5, 23, 29, 32], \"\\u6570\\u3048\\u4e0a\\u3052\": [1, 32], \"\\u6570\\u5024\": [3, 5, 6, 8, 10, 16, 21, 23, 26, 27, 29, 31, 32], \"\\u6570\\u5217\": [3, 9], \"\\u6570\\u5b57\": [2, 8, 10, 30], \"\\u6570\\u5b66\": [2, 6, 14, 16, 30, 31, 32], \"\\u6570\\u5f0f\": 1, \"\\u6574\\u5217\": 18, \"\\u6574\\u6570\": [5, 6, 7, 8, 9, 14, 16, 17, 18, 25, 26, 28, 29, 30, 31, 32], \"\\u6587\\u540c\": 9, \"\\u6587\\u5b57\": [0, 1, 2, 3, 9, 10, 12, 13, 15, 16, 17, 18, 19, 20, 22, 23, 24, 26, 29, 31, 32], \"\\u6587\\u5b57\\u5217\": [3, 4, 8, 9, 10, 11, 12, 14, 17, 18, 19, 23, 25, 26, 28, 29, 30, 31, 32], \"\\u6587\\u5b57\\u5217a\": [5, 30], \"\\u6587\\u5b57\\u5217b\": [5, 30], \"\\u6587\\u5b57\\u6570\": 11, \"\\u6587\\u66f8\": [5, 15, 30], \"\\u6587\\u6cd5\": 9, \"\\u6587\\u732e\": 0, \"\\u6587\\u7ae0\": [5, 9, 23], \"\\u65ad\\u308a\": 16, \"\\u65b0\\u3057\\u3044\": [5, 6, 9, 11, 16, 19, 20, 30], \"\\u65b0\\u3057\\u304f\": 19, \"\\u65b0\\u305f\": [0, 5, 6, 8, 11, 12, 19, 20, 22, 23], \"\\u65b9\\u5411\": 1, \"\\u65b9\\u6cd5\": [0, 2, 5, 6, 7, 8, 9, 14, 15, 18, 19, 24, 27], \"\\u65e2\\u5b58\": [10, 11, 15, 19, 22], \"\\u65e2\\u5b9a\": 9, \"\\u65e5\\u672c\": [4, 26, 30], \"\\u65e5\\u672c\\u8a9e\": [1, 5, 11, 28], \"\\u65e9\\u304f\": 11, \"\\u6607\\u9806\": [6, 16, 20, 30], \"\\u660e\\u3089\\u304b\": [7, 9], \"\\u660e\\u5feb\": 24, \"\\u660e\\u793a\": [2, 9, 10, 13, 14, 16], \"\\u660e\\u8a18\": [1, 30], \"\\u6613\\u304f\": 4, \"\\u6642\\u523b\": 30, \"\\u6642\\u70b9\": 18, \"\\u6642\\u7cfb\": 31, \"\\u6642\\u90e8\": 30, \"\\u6642\\u9593\": [6, 9, 30], \"\\u66f2\\u7dda\": [27, 29], \"\\u66f4\\u65b0\": [8, 10, 16, 20], \"\\u66f8\\u3044\": [2, 4, 30], \"\\u66f8\\u304b\": [0, 1, 2, 3, 4, 6, 9, 18, 22, 26], \"\\u66f8\\u304d\": [6, 8, 9, 15, 17, 26, 31, 32], \"\\u66f8\\u304d\\u51fa\\u3057\": 26, \"\\u66f8\\u304d\\u63db\\u3048\": [1, 5, 6, 7, 8, 9, 17, 23, 29, 30], \"\\u66f8\\u304d\\u65b9\": [4, 6, 31], \"\\u66f8\\u304d\\u76f4\\u3057\": 9, \"\\u66f8\\u304d\\u8fbc\\u307e\": 26, \"\\u66f8\\u304d\\u8fbc\\u307f\": [31, 32], \"\\u66f8\\u304d\\u8fbc\\u3080\": [11, 26, 28], \"\\u66f8\\u304d\\u8fbc\\u3080\\u969b\": 11, \"\\u66f8\\u304d\\u8fbc\\u3093\": 11, \"\\u66f8\\u304f\": [1, 3, 4, 6, 7, 9, 11, 14, 15, 17, 18, 24, 26, 30], \"\\u66f8\\u3051\": [6, 9, 17, 19], \"\\u66f8\\u5f0f\": 7, \"\\u66ff\\u3048\": [5, 6, 9, 31, 32], \"\\u66ff\\u3048\\u308b\": [4, 6], \"\\u6700\\u3082\": [1, 6, 18, 25], \"\\u6700\\u4e0a\": 13, \"\\u6700\\u521d\": [2, 4, 5, 6, 7, 9, 10, 12, 18, 19, 27, 28, 29, 30], \"\\u6700\\u5916\": 16, \"\\u6700\\u5927\": [6, 14, 18, 20], \"\\u6700\\u5c0f\\u5024\": [6, 16, 20], \"\\u6700\\u5f8c\": [1, 2, 4, 5, 6, 7, 9, 10, 11, 12, 16, 24, 27, 29, 30], \"\\u6700\\u7d42\": 20, \"\\u6700\\u7d42\\u884c\": 20, \"\\u6700\\u9069\": 21, \"\\u6709\\u52b9\": [15, 17, 22], \"\\u6709\\u7121\": [6, 9], \"\\u6709\\u7528\": [4, 16], \"\\u6709\\u9650\": 1, \"\\u671b\\u307e\\u3057\\u3044\": 28, \"\\u671f\\u5024\": [10, 32], \"\\u671f\\u5316\": [31, 32], \"\\u671f\\u5f85\": [2, 4, 10], \"\\u671f\\u5f85\\u901a\\u308a\": 4, \"\\u6728\\u69cb\": [31, 32], \"\\u6728\\u69cb\\u9020\": [31, 32], \"\\u672a\\u5b9a\": [2, 4, 7, 10], \"\\u672a\\u5b9a\\u7fa9\": 2, \"\\u672a\\u6e80\": [16, 27], \"\\u672a\\u77e5\": [14, 15], \"\\u672b\\u5c3e\": [11, 12], \"\\u672b\\u7aef\": 13, \"\\u672c\\u4f53\": [2, 10, 19], \"\\u672c\\u5f53\": 1, \"\\u672c\\u6388\\u696d\": [11, 15], \"\\u672c\\u6559\\u6750\": 7, \"\\u672c\\u683c\": 3, \"\\u672c\\u90f7\": 30, \"\\u6761\\u4ef6\": [4, 6, 9, 16, 18, 28, 30, 31, 32], \"\\u6761\\u4ef6\\u5f0f\": 9, \"\\u6765\\u305f\": 11, \"\\u6765\\u3066\": [0, 2], \"\\u6765\\u308b\": [3, 18, 30], \"\\u6771\\u4eac\": [9, 29, 32], \"\\u679c\\u305f\": 30, \"\\u67d4\\u8edf\": 13, \"\\u683c\\u6bb5\": 16, \"\\u683c\\u7d0d\": [5, 6, 9, 11, 21, 23, 28, 29, 30], \"\\u6841\\u6bce\": 9, \"\\u68d2\\u30b0\\u30e9\\u30d5\": 25, \"\\u691c\\u67fb\": [4, 6, 9], \"\\u691c\\u77e5\": 19, \"\\u691c\\u7d22\": [31, 32], \"\\u691c\\u8a3c\": 4, \"\\u6982\\u5ff5\": [2, 13], \"\\u69cb\\u3044\": [6, 9, 18], \"\\u69cb\\u6210\": [5, 6, 9, 12, 16, 20, 23, 30], \"\\u69cb\\u6587\": [1, 2, 12, 19, 30, 31, 32], \"\\u69cb\\u6587\\u4e0a\": 2, \"\\u69cb\\u7bc9\": [17, 27, 31, 32], \"\\u69cb\\u9020\": [3, 7, 8, 21, 31, 32], \"\\u69d8\\u3005\": [4, 5, 6, 7, 12, 16, 23, 25, 30, 31, 32], \"\\u6a19\\u6e96\": [5, 16, 20, 28], \"\\u6a2a\\u3064\\u8179\\u306a\\u3093\\u305e\": 11, \"\\u6a5f\\u68b0\": [16, 31, 32], \"\\u6a5f\\u80fd\": [4, 5, 7, 9, 14, 16, 17, 19, 20], \"\\u6b20\\u640d\": 31, \"\\u6b20\\u640d\\u5024\": 20, \"\\u6b21\\u3005\": [6, 18, 19], \"\\u6b21\\u3044\": 8, \"\\u6b21\\u306e\": 30, \"\\u6b21\\u5143\": [16, 25, 31, 32], \"\\u6b32\\u3057\\u3044\": 9, \"\\u6b62\\u307e\\u3089\": 31, \"\\u6b62\\u307e\\u308a\": 28, \"\\u6b62\\u3081\\u308b\": 19, \"\\u6b63\\u3057\\u3044\": [3, 4], \"\\u6b63\\u3057\\u304f\": [4, 28, 30], \"\\u6b63\\u306a\\u3089\": [3, 18], \"\\u6b63\\u5e38\": 9, \"\\u6b63\\u5f0f\": 30, \"\\u6b63\\u78ba\": [3, 5, 11, 16, 19], \"\\u6b63\\u898f\": [9, 16, 27, 29, 31, 32], \"\\u6b63\\u8ca0\": 5, \"\\u6b74\\u53f2\": 28, \"\\u6b8b\\u308a\": 7, \"\\u6bb5\\u4e0a\": 11, \"\\u6bb5\\u4e0b\": 13, \"\\u6bb5\\u968e\": [25, 30], \"\\u6bce\\u56de\": 12, \"\\u6bd4\\u3079\": 9, \"\\u6bd4\\u4f8b\": [6, 9], \"\\u6bd4\\u8f03\": [1, 4, 16, 21, 24, 31, 32], \"\\u6c0f\\u540d\": 26, \"\\u6c17\\u306b\": 28, \"\\u6c17\\u4ed8\\u3044\": 12, \"\\u6c17\\u6e29\": [29, 32], \"\\u6c17\\u8c61\\u5e81\": [26, 29], \"\\u6c34\\u5e73\": 25, \"\\u6c34\\u5e73\\u8ef8\": 25, \"\\u6c38\\u4e45\": 9, \"\\u6c42\\u307e\\u308a\": [1, 3], \"\\u6c42\\u3081\": [1, 2, 4, 5, 9, 17, 18, 29], \"\\u6c42\\u3081\\u308b\": [2, 3, 6, 9, 14, 17, 18, 20, 23, 29], \"\\u6c7a\\u3057\": 9, \"\\u6c7a\\u3081\": [5, 6], \"\\u6c7a\\u3081\\u308b\": 27, \"\\u6c7a\\u5b9a\": 21, \"\\u6cbf\\u3063\": 4, \"\\u6ce2\\u62ec\": 23, \"\\u6ce8\\u610f\": [0, 1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 14, 15, 16, 18, 20, 27, 28, 30, 31], \"\\u6d3b\\u7528\": [4, 8], \"\\u6d41\\u308c\": 10, \"\\u6d45\\u304f\": 7, \"\\u6d6e\\u304d\": 4, \"\\u6d6e\\u52d5\": [1, 26, 32], \"\\u6d88\\u3048\": 4, \"\\u6d88\\u3057\": [4, 29, 30], \"\\u6d88\\u3059\": 27, \"\\u6d88\\u8cbb\": [11, 12, 17], \"\\u6df1\\u304f\": [7, 9], \"\\u6df1\\u3055\": 7, \"\\u6df7\\u3056\\u3063\": 1, \"\\u6df7\\u4e71\": [31, 32], \"\\u6df7\\u540c\": 19, \"\\u6df7\\u5728\": [6, 16], \"\\u6dfb\\u5b57\": 20, \"\\u6e08\\u307f\": [5, 10], \"\\u6e1b\\u3063\": 2, \"\\u6e1b\\u3089\": [2, 19, 24, 28], \"\\u6e1b\\u3089\\u3059\": 2, \"\\u6e1b\\u7b97\": 16, \"\\u6e21\\u3055\": [7, 10, 12, 18, 19], \"\\u6e21\\u3057\": [10, 24, 26, 27, 29], \"\\u6e21\\u3059\": [6, 10, 11, 13, 16, 17, 29], \"\\u6e21\\u305b\": 17, \"\\u6e29\\u5ea6\": [2, 27], \"\\u6e7f\\u5ea6\": 2, \"\\u6e80\\u305f\": [3, 4, 6, 7, 16, 30], \"\\u6e96\\u5099\": [21, 27, 29], \"\\u6f14\\u7b97\": [2, 20, 31, 32], \"\\u6f14\\u7b97\\u5b50\": [2, 3, 4, 5, 8, 9, 12, 23, 30, 31, 32], \"\\u6f38\\u5316\": 3, \"\\u6fc3\\u6de1\": 29, \"\\u6feb\\u7528\": 10, \"\\u70b9\\u3068\\u3057\\u3066\": [27, 29], \"\\u70b9\\u4ee5\\u4e0b\": 9, \"\\u70b9\\u6570\": [1, 7, 26, 32], \"\\u7121\\u3044\": 16, \"\\u7121\\u304b\\u3063\": 28, \"\\u7121\\u52b9\": [5, 30], \"\\u7121\\u540d\": [18, 32], \"\\u7121\\u5f15\": [6, 11], \"\\u7121\\u7406\": 3, \"\\u7121\\u8996\": 1, \"\\u7121\\u9650\": 1, \"\\u7121\\u99c4\": 9, \"\\u7247\\u65b9\": [5, 6], \"\\u7279\\u306b\": [3, 4, 7, 11, 13, 19, 28, 30], \"\\u7279\\u5225\": [2, 13, 14, 16], \"\\u7279\\u5b9a\": [6, 9, 11, 16], \"\\u7279\\u5fb4\": [10, 21], \"\\u7279\\u5fb4\\u91cf\": [21, 32], \"\\u7279\\u6b8a\": [5, 30, 31, 32], \"\\u7279\\u6bb5\": 3, \"\\u72b6\\u614b\": 27, \"\\u72b6\\u6cc1\": [2, 4, 6], \"\\u72ec\\u7acb\": 26, \"\\u7363\\u3082\": 11, \"\\u73fe\\u308c\": 27, \"\\u73fe\\u308c\\u308b\": [2, 9], \"\\u73fe\\u5728\": [0, 13], \"\\u7406\\u7531\": [14, 15], \"\\u7406\\u89e3\": [6, 9], \"\\u74b0\\u5883\": [5, 15, 28], \"\\u751f\\u3058\": [1, 2, 4, 10, 13, 19], \"\\u751f\\u3058\\u308b\": [4, 26], \"\\u751f\\u6210\": [9, 12, 19, 20, 27, 28, 29, 31, 32], \"\\u7528\\u3044\": [1, 2, 3, 4, 5, 6, 8, 9, 10, 12, 13, 14, 15, 16, 17, 18, 20, 21, 23, 24, 26, 27, 28, 29, 30], \"\\u7528\\u3044\\u308b\": [1, 2, 3, 5, 6, 9, 10, 14, 16, 17, 18, 20, 21, 27, 29, 30], \"\\u7528\\u3044\\u308c\": [5, 18], \"\\u7528\\u53ef\": 10, \"\\u7528\\u610f\": [1, 2, 3, 5, 9, 11, 21, 25, 27, 28, 29], \"\\u7528\\u8a9e\": [3, 19], \"\\u7528\\u9014\": 2, \"\\u7531\\u6765\": 13, \"\\u753b\\u50cf\": [27, 28, 31, 32], \"\\u753b\\u9762\": 28, \"\\u7565\\u79f0\": 14, \"\\u756a\\u53f7\": [0, 6, 9, 20, 22, 30], \"\\u756a\\u76ee\": [3, 4, 5, 6, 8, 9, 12, 16, 18, 28, 29, 30], \"\\u7570\\u306a\\u308a\": [2, 5, 6, 16, 17, 23], \"\\u7570\\u306a\\u308b\": [1, 2, 7, 9, 10, 11, 16, 21, 29], \"\\u7570\\u5e38\": 4, \"\\u7591\\u308f\\u3057\\u3044\": 4, \"\\u75db\\u5feb\": 11, \"\\u767a\\u751f\": [4, 12, 19], \"\\u767b\\u5834\": 3, \"\\u767b\\u9332\": [4, 9, 23, 32], \"\\u767d\\u718a\": 11, \"\\u76c6\\u4f8b\": 29, \"\\u76ee\\u7684\": 9, \"\\u76ee\\u76db\\u308a\": 27, \"\\u76f4\\u3057\": [1, 22], \"\\u76f4\\u3059\": [1, 9], \"\\u76f4\\u524d\": 1, \"\\u76f4\\u5f8c\": 7, \"\\u76f4\\u611f\": 30, \"\\u76f4\\u63a5\": [0, 3, 6, 8, 17, 24, 28], \"\\u76f4\\u7dda\": [27, 29], \"\\u76f4\\u9762\": 4, \"\\u76f8\\u4e92\": [31, 32], \"\\u76f8\\u5bfe\": [11, 13], \"\\u76f8\\u5bfe\\u30d1\\u30b9\": [13, 32], \"\\u76f8\\u5f53\": [6, 9], \"\\u76f8\\u7570\": 4, \"\\u7701\\u304b\": 7, \"\\u7701\\u3051\": 2, \"\\u7701\\u7565\": [5, 7, 9, 17, 20, 29], \"\\u771f\\u3068\": 30, \"\\u771f\\u3093\\u4e2d\": 4, \"\\u771f\\u7406\": [3, 18, 20, 31, 32], \"\\u771f\\u7406\\u5024\": [4, 16, 31, 32], \"\\u77e2\\u5370\": 22, \"\\u77e5\\u3063\": 16, \"\\u77e5\\u308b\": 25, \"\\u77ed\\u3044\": 14, \"\\u77ed\\u7e2e\": [31, 32], \"\\u7834\\u58ca\": [9, 10, 16, 23, 30, 31, 32], \"\\u78ba\\u304b\": 5, \"\\u78ba\\u304b\\u3081\": [0, 2, 6, 30], \"\\u78ba\\u7acb\": 16, \"\\u78ba\\u8a8d\": [2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 16, 17, 18, 19, 20, 23, 25, 26, 28, 29, 30], \"\\u793a\\u3055\": [6, 19], \"\\u793a\\u3057\": [3, 4, 6, 7, 9, 12, 13, 21, 27, 28, 29], \"\\u793a\\u3059\": [0, 4, 11, 24, 27, 28], \"\\u793a\\u3059\\u4f8b\": 7, \"\\u793a\\u7684\": 10, \"\\u7956\\u5148\": [13, 32], \"\\u79d1\\u5b66\": 16, \"\\u79fb\\u52d5\": [0, 22, 28], \"\\u79fb\\u884c\": 22, \"\\u7a2e\\u985e\": [0, 3, 5, 6, 8, 11, 12, 18, 19, 20, 21, 22, 23, 27, 29, 30], \"\\u7a4d\\u5c02\": 16, \"\\u7a4d\\u96c6\\u5408\": [23, 32], \"\\u7a7a\\u3068\": 8, \"\\u7a7a\\u30bf\\u30d7\\u30eb\": [6, 32], \"\\u7a7a\\u30ea\\u30b9\\u30c8\": [6, 32], \"\\u7a7a\\u5217\": [5, 30, 32], \"\\u7a7a\\u6587\": [3, 9, 11, 19, 30, 31, 32], \"\\u7a7a\\u6587\\u5b57\": 5, \"\\u7a7a\\u6587\\u5b57\\u5217\": 5, \"\\u7a7a\\u767d\": [2, 6, 7, 9, 11, 16, 30, 31, 32], \"\\u7a7a\\u884c\": [31, 32], \"\\u7a7a\\u9593\": 21, \"\\u7acb\\u3061\\u4e0a\\u3052\": 31, \"\\u7b26\\u53f7\": [5, 26], \"\\u7b49\\u3057\\u3044\": [1, 3, 9, 16, 30], \"\\u7b49\\u3057\\u304f\": [3, 16], \"\\u7b49\\u4fa1\": [7, 12, 31, 32], \"\\u7b49\\u5206\": 16, \"\\u7b49\\u53f7\": 2, \"\\u7b49\\u6bd4\": 9, \"\\u7b49\\u9593\": 25, \"\\u7b87\\u6240\": [6, 9], \"\\u7b97\\u5b50\": [1, 7, 31, 32], \"\\u7b97\\u8853\": [16, 31, 32], \"\\u7ba1\\u7406\": [13, 20], \"\\u7bc4\\u56f2\": [5, 6, 16, 27, 29, 30], \"\\u7c21\\u5358\": [2, 4, 6, 9, 15, 16, 18, 19, 26, 31, 32], \"\\u7c21\\u6f54\": [2, 6, 7, 16, 21, 30], \"\\u7c92\\u5ea6\": 24, \"\\u7cbe\\u5ea6\": 21, \"\\u7d0d\\u307e\\u308b\": 1, \"\\u7d1a\\u6570\": 9, \"\\u7d22\\u5f15\": 31, \"\\u7d2f\\u7a4d\": 32, \"\\u7d2f\\u7b97\": [2, 32], \"\\u7d30\\u304b\\u3044\": 30, \"\\u7d30\\u304b\\u304f\": 7, \"\\u7d33\\u58eb\": 11, \"\\u7d39\\u4ecb\": [1, 3, 5, 6, 7, 8, 11, 12, 16, 28, 30], \"\\u7d42\\u3048\": 9, \"\\u7d42\\u308f\": 6, \"\\u7d42\\u308f\\u3063\": [9, 11, 26], \"\\u7d42\\u308f\\u3089\": 11, \"\\u7d42\\u308f\\u308a\": [1, 3, 9, 11, 19, 26], \"\\u7d42\\u308f\\u308b\": [6, 9], \"\\u7d42\\u4e86\": [0, 2, 3, 6, 7, 9, 10, 12, 16, 19], \"\\u7d42\\u4e86\\u5f8c\": 9, \"\\u7d42\\u7aef\": [11, 12, 20], \"\\u7d44\\u307f\": [10, 27], \"\\u7d44\\u307f\\u5408\\u308f\": [3, 13, 30], \"\\u7d44\\u307f\\u5408\\u308f\\u305b\": [6, 8, 9, 10, 30], \"\\u7d44\\u307f\\u5408\\u308f\\u305b\\u308b\": 30, \"\\u7d44\\u307f\\u8fbc\\u307f\": [2, 3, 5, 8, 9, 10, 12, 16, 17, 28, 31, 32], \"\\u7d44\\u3081\": 6, \"\\u7d4c\\u7531\": [1, 12, 24], \"\\u7d4c\\u8def\": 13, \"\\u7d50\\u5408\": [1, 2, 5, 30, 31, 32], \"\\u7d50\\u679c\": [0, 1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 15, 16, 17, 18, 19, 21, 23, 24, 27, 28, 29, 30], \"\\u7d5e\\u308a\": 4, \"\\u7d71\\u4e00\": 12, \"\\u7d71\\u6cbb\": [24, 32], \"\\u7d71\\u8a08\": [16, 31, 32], \"\\u7d76\\u5bfe\": [3, 11, 18, 28], \"\\u7d76\\u5bfe\\u30d1\\u30b9\": [13, 32], \"\\u7d99\\u627f\": [31, 32], \"\\u7d9a\\u3044\": 3, \"\\u7d9a\\u304d\": [2, 7], \"\\u7d9a\\u304f\": [2, 7, 28], \"\\u7d9a\\u304f\\u5f0f\": 2, \"\\u7d9a\\u3051\": [0, 1, 7, 12], \"\\u7d9a\\u884c\": 9, \"\\u7dad\\u6301\": 25, \"\\u7dca\\u6025\": 12, \"\\u7dcf\\u4e57\": 16, \"\\u7dcf\\u548c\": [6, 9, 16, 17, 18], \"\\u7dcf\\u6570\": 21, \"\\u7dcf\\u79f0\": [3, 5, 6, 12], \"\\u7dd1\\u8272\": [2, 22], \"\\u7dda\\u3054\\u3068\": 29, \"\\u7dda\\u5f62\": [21, 26, 31, 32], \"\\u7de8\\u96c6\": 31, \"\\u7df4\\u7fd2\": [31, 32], \"\\u7e4b\\u3052\": [9, 30], \"\\u7e70\\u308a\": [10, 12], \"\\u7e70\\u308a\\u8fd4\\u3055\": [6, 9, 12, 30], \"\\u7e70\\u308a\\u8fd4\\u3057\": [5, 8, 10, 19, 24, 25, 26, 30, 31, 32], \"\\u7e70\\u308a\\u8fd4\\u3057\\u884c\\u3046\": 6, \"\\u7e70\\u308a\\u8fd4\\u3057\\u8fd4\\u3059\": 19, \"\\u7e70\\u308a\\u8fd4\\u3059\": [4, 6, 9, 12], \"\\u7f6e\\u3044\": 30, \"\\u7f6e\\u304b\": [11, 13], \"\\u7f6e\\u304d\": [1, 5, 6, 17, 21, 30], \"\\u7f6e\\u304d\\u63db\\u3048\": 30, \"\\u7f6e\\u304d\\u63db\\u308f\\u3089\": 22, \"\\u7f6e\\u304f\": [2, 7], \"\\u7f6e\\u63db\": [2, 9, 30, 32], \"\\u8003\\u3048\": [2, 3, 5, 7, 12, 13, 19, 26, 28], \"\\u8003\\u3048\\u308b\": [2, 9, 12], \"\\u8003\\u3048\\u65b9\": 24, \"\\u8003\\u5bdf\": 18, \"\\u8003\\u616e\": 30, \"\\u809d\\u8981\": 4, \"\\u81ea\\u3089\": 4, \"\\u81ea\\u4e57\": [6, 17], \"\\u81ea\\u4f53\": [2, 12, 28], \"\\u81ea\\u4f5c\": [31, 32], \"\\u81ea\\u5206\": [0, 1, 24, 27], \"\\u81ea\\u52d5\": [4, 7, 9, 11, 13, 16, 19, 20, 29], \"\\u81ea\\u5df1\": [4, 28], \"\\u81ea\\u5df1\\u8aac\\u660e\": 4, \"\\u81ea\\u660e\": [4, 7], \"\\u81ea\\u7136\": [6, 17], \"\\u81ea\\u7531\": [1, 2], \"\\u81ea\\u8eab\": [0, 3, 12, 19, 22, 24], \"\\u8208\\u5473\": 31, \"\\u826f\\u304f\": 11, \"\\u826f\\u304f\\u4f7f\\u3046\": 30, \"\\u826f\\u304f\\u4f7f\\u308f\": 27, \"\\u8272\\u3005\": [0, 1, 2, 6, 30], \"\\u8272\\u3084\\u7dda\": 27, \"\\u8272\\u9078\": 27, \"\\u8272\\u968e\": 27, \"\\u82b1\\u5b50\": 26, \"\\u82b1\\u5f01\": 20, \"\\u82e5\\u3044\": 11, \"\\u82f1\\u5358\": [9, 30], \"\\u82f1\\u5c0f\": 9, \"\\u82f1\\u6570\": [1, 11, 26], \"\\u82f1\\u6587\": [11, 30], \"\\u82f1\\u6587\\u5b57\": [5, 11], \"\\u82f1\\u8a9e\": [5, 9, 23, 27, 30], \"\\u865a\\u90e8\": 16, \"\\u884c\\u3044\": [4, 5, 6, 10, 19, 21, 24, 25, 29, 30], \"\\u884c\\u3046\": [0, 1, 5, 6, 7, 9, 16, 18, 21, 24, 25, 27, 32], \"\\u884c\\u3048\": [5, 6, 11], \"\\u884c\\u304f\": 13, \"\\u884c\\u3063\": [0, 1, 2, 9, 19, 24, 26], \"\\u884c\\u3068\\u3057\\u3066\": 16, \"\\u884c\\u306a\\u3063\": 21, \"\\u884c\\u308f\": [1, 2, 6, 7, 9, 18], \"\\u884c\\u30a4\\u30f3\\u30c7\\u30c3\\u30af\\u30b9\": 16, \"\\u884c\\u5168\": 1, \"\\u884c\\u5206\": 20, \"\\u884c\\u5217\": [14, 16, 21, 27, 29], \"\\u884c\\u5358\": 11, \"\\u884c\\u540d\": 10, \"\\u884c\\u6570\": [16, 20, 21], \"\\u884c\\u672b\": [7, 30], \"\\u884c\\u756a\": [2, 12, 29], \"\\u884c\\u756a\\u53f7\": [2, 32], \"\\u884c\\u76ee\": [7, 9, 12, 20, 29], \"\\u884c\\u81ea\\u4f53\": 1, \"\\u884c\\u982d\": [1, 2, 7], \"\\u885d\\u7a81\": [10, 14, 15], \"\\u8868\\u3055\": [1, 13, 26, 30], \"\\u8868\\u3057\": [1, 3, 11, 18, 19, 21, 30], \"\\u8868\\u3059\": [1, 2, 3, 5, 11, 13, 16, 18, 21, 26, 30], \"\\u8868\\u3059\\u578b\": 16, \"\\u8868\\u3059\\u5f0f\": 30, \"\\u8868\\u305d\": 6, \"\\u8868\\u73fe\": [1, 2, 8, 9, 12, 21, 31, 32], \"\\u8868\\u793a\": [0, 3, 7, 8, 10, 14, 16, 18, 19, 20, 21, 22, 25, 27, 28, 29, 30, 31, 32], \"\\u8868\\u8a18\": [6, 9, 13, 16, 18, 30, 31, 32], \"\\u88dc\\u308f\": 13, \"\\u8907\\u5408\": [2, 4], \"\\u8907\\u6570\": [1, 2, 5, 6, 9, 11, 12, 14, 15, 18, 20, 23, 25, 26, 27, 29, 30, 31, 32], \"\\u8907\\u7d20\": 26, \"\\u8907\\u7d20\\u6570\": 16, \"\\u8907\\u88fd\": [4, 6, 32], \"\\u8907\\u96d1\": [2, 7, 16, 24, 27, 30], \"\\u897f\\u66a6\": 26, \"\\u897f\\u66a6\\u5e74\": 26, \"\\u8981\\u7d04\": 20, \"\\u8981\\u7d20\": [4, 5, 7, 8, 9, 10, 12, 13, 17, 18, 23, 24, 25, 26, 27, 28, 29, 31, 32], \"\\u8981\\u7d20x\": 9, \"\\u8981\\u7d20\\u6bce\": 31, \"\\u898b\\u3048\": [4, 16, 19], \"\\u898b\\u3048\\u308b\": 5, \"\\u898b\\u3048\\u65b9\": 5, \"\\u898b\\u304b\\u3051\": 9, \"\\u898b\\u305b\\u308b\": 0, \"\\u898b\\u3064\": 9, \"\\u898b\\u3064\\u304b\\u3063\": 9, \"\\u898b\\u3064\\u304b\\u308a\": 27, \"\\u898b\\u3064\\u3051\": [2, 4], \"\\u898b\\u3066\": [3, 9, 16, 19, 30], \"\\u898b\\u307e\\u3057\\u3087\": [6, 12, 18], \"\\u898b\\u3084\\u3059\\u3044\": 7, \"\\u898b\\u3084\\u3059\\u304f\": 27, \"\\u898b\\u308b\": [6, 28], \"\\u898b\\u505a\": [6, 13, 16], \"\\u898b\\u505a\\u3059\": 4, \"\\u898b\\u7a4d\": 9, \"\\u898b\\u821e\": 11, \"\\u898b\\u901a\\u3057\": 24, \"\\u898f\\u5247\": 4, \"\\u8996\\u899a\": 9, \"\\u899a\\u3048\": [2, 30], \"\\u89aa\\u5b50\": 13, \"\\u89aa\\u621a\": 2, \"\\u89b3\\u5bdf\": [2, 4, 21], \"\\u89b3\\u6e2c\": 21, \"\\u89b3\\u70b9\": 13, \"\\u89d2\\u62ec\": 30, \"\\u89e3\\u3044\": 24, \"\\u89e3\\u304f\": 24, \"\\u89e3\\u3051\\u308b\": 24, \"\\u89e3\\u51cd\": 16, \"\\u89e3\\u7b54\": 31, \"\\u89e3\\u8aac\": [0, 11, 31], \"\\u89e3\\u91c8\": [2, 4, 11, 16, 30], \"\\u89e6\\u308c\": 25, \"\\u8a00\\u3044\": [2, 3, 30], \"\\u8a00\\u3046\": [1, 18], \"\\u8a00\\u3048\": [4, 7], \"\\u8a00\\u3063\": [4, 16, 30], \"\\u8a00\\u53ca\": 4, \"\\u8a00\\u8a9e\": [2, 4, 5, 6], \"\\u8a08\\u7b97\": [2, 3, 6, 7, 10, 14, 16, 17, 18, 26, 27, 28, 31, 32], \"\\u8a08\\u7b97\\u5f0f\": 30, \"\\u8a08\\u7b97\\u91cf\": [9, 31, 32], \"\\u8a13\\u7df4\": 21, \"\\u8a18\\u53f7\": [2, 4, 5, 13, 28, 30], \"\\u8a18\\u61b6\": 1, \"\\u8a18\\u6cd5\": [2, 5, 16, 31, 32], \"\\u8a18\\u8ff0\": [2, 4, 5, 6, 7, 10, 12, 13, 14, 15, 16, 17, 24, 28, 30], \"\\u8a18\\u9332\": [6, 11, 19, 26, 30], \"\\u8a2a\\u554f\": 17, \"\\u8a2d\\u5b9a\": [0, 5, 6, 19, 21, 26, 27], \"\\u8a31\\u3055\": 9, \"\\u8a55\\u4fa1\": [1, 2, 3, 6, 16, 19, 21, 29, 31, 32], \"\\u8a55\\u5b9a\": 7, \"\\u8a66\\u3057\": [1, 9, 29], \"\\u8a72\\u5f53\": 7, \"\\u8a73\\u3057\\u3044\": 25, \"\\u8a73\\u3057\\u304f\": [6, 9, 16, 18, 19, 26], \"\\u8a73\\u7d30\": [11, 12, 20, 21, 27], \"\\u8a8d\\u8b58\": 11, \"\\u8a9e\\u6587\": 26, \"\\u8a9e\\u8a33\": 4, \"\\u8aa4\\u308a\": 2, \"\\u8aa4\\u5dee\": [1, 21, 32], \"\\u8aa4\\u690d\": 4, \"\\u8aa4\\u89e3\": [31, 32], \"\\u8aac\\u660e\": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30], \"\\u8aad\\u307f\": [4, 6, 9, 12, 17, 24, 26, 31, 32], \"\\u8aad\\u307f\\u51fa\\u3057\": [11, 16], \"\\u8aad\\u307f\\u7d42\\u308f\\u308b\": 11, \"\\u8aad\\u307f\\u8fbc\\u307e\": [1, 11, 14, 15], \"\\u8aad\\u307f\\u8fbc\\u307f\": [4, 14, 15, 20, 29, 30, 31, 32], \"\\u8aad\\u307f\\u8fbc\\u3080\": [15, 25, 26], \"\\u8aad\\u307f\\u8fbc\\u3093\": [11, 14, 20, 26], \"\\u8aad\\u3080\": [17, 26], \"\\u8aad\\u3093\": [2, 4, 11, 12, 17, 27], \"\\u8abf\\u3079\": [5, 16, 18, 28, 30], \"\\u8abf\\u3079\\u308b\": [1, 5, 6, 8, 9, 12, 30], \"\\u8abf\\u6574\": 21, \"\\u8ad6\\u7406\": [6, 7, 31, 32], \"\\u8ca0\\u6570\": 5, \"\\u8ce2\\u660e\": 16, \"\\u8d70\\u67fb\": 17, \"\\u8d77\\u304d\": [4, 27], \"\\u8d77\\u3053\\u3063\": 1, \"\\u8d77\\u3053\\u308b\": [1, 6], \"\\u8d77\\u52d5\": [0, 13, 22, 28], \"\\u8d85\\u3048\\u308c\": 9, \"\\u8db3\\u3057\": [2, 18], \"\\u8db3\\u3057\\u5408\\u305b\": [9, 17, 30], \"\\u8db3\\u3057\\u7b97\": [1, 32], \"\\u8db3\\u3057\\u7b97\\u3084\": 1, \"\\u8db3\\u308a\": 1, \"\\u8eab\\u9577\": 2, \"\\u8ee2\\u7f6e\": 16, \"\\u8ef8\\u4e0a\": [27, 29], \"\\u8f9e\\u66f8\": [4, 5, 6, 12, 13, 18, 20, 23, 25, 30, 31, 32], \"\\u8f9e\\u66f8\\u578b\": [10, 32], \"\\u8fd4\\u3055\": [2, 3, 5, 6, 9, 10, 12, 16, 19, 26, 30], \"\\u8fd4\\u3057\": [1, 2, 3, 5, 6, 8, 9, 11, 12, 16, 17, 18, 19, 23, 24, 26, 30], \"\\u8fd4\\u3057\\u7d9a\\u3051\\u308b\": 19, \"\\u8fd4\\u3059\": [2, 4, 5, 6, 7, 8, 9, 10, 11, 15, 16, 17, 18, 19, 23, 24, 26, 27, 28, 29, 30, 31, 32], \"\\u8fd4\\u3059\\u5f0f\": 6, \"\\u8fd4\\u3063\": [5, 18, 26], \"\\u8fd4\\u3089\": 30, \"\\u8fd4\\u308a\": [2, 3, 5, 16, 18, 19], \"\\u8fd4\\u308b\": [11, 18, 30], \"\\u8fd4\\u5024\": [6, 9, 18, 30, 31, 32], \"\\u8ff0\\u3079\": [5, 6, 8, 21, 28, 30], \"\\u8ffd\\u52a0\": [1, 8, 9, 21, 23, 27, 30, 31, 32], \"\\u8ffd\\u8a18\": 11, \"\\u9001\\u51fa\": 4, \"\\u9006\\u3055\": 13, \"\\u9006\\u306b\": 17, \"\\u9006\\u5411\\u304d\": 5, \"\\u9006\\u9806\": 32, \"\\u900f\\u660e\": [27, 29], \"\\u9014\\u4e2d\": [1, 2, 6, 10, 17], \"\\u901a\\u3058\": 19, \"\\u901a\\u308a\": [2, 4, 6, 7, 10, 21, 24, 28, 30], \"\\u901a\\u4f8b\": [13, 15, 27], \"\\u901a\\u5e38\": [8, 10, 11, 21, 29], \"\\u901a\\u79f0\": 0, \"\\u9023\\u63a5\": [30, 32], \"\\u9023\\u756a\": 16, \"\\u9023\\u7d50\": [6, 31, 32], \"\\u9023\\u7d9a\": [3, 5, 6, 9, 21, 30], \"\\u9032\\u307f\": 7, \"\\u9032\\u3080\": [7, 13], \"\\u9032\\u3081\\u308b\": 12, \"\\u9032\\u6570\": 17, \"\\u904e\\u8a00\": 16, \"\\u9054\\u3057\": 26, \"\\u9054\\u3059\\u308b\": 11, \"\\u9055\\u3044\": [5, 7, 10, 16, 28], \"\\u9055\\u3046\": 8, \"\\u9055\\u3063\": [6, 16, 27], \"\\u9055\\u53cd\": [1, 4], \"\\u9069\\u3057\": [11, 24], \"\\u9069\\u5207\": [5, 12], \"\\u9069\\u5408\": [4, 21, 30], \"\\u9069\\u5b9c\": 4, \"\\u9069\\u5f53\": [0, 1, 22, 28], \"\\u9069\\u7528\": [6, 8, 11, 12, 16, 17, 18, 19, 20, 23, 27], \"\\u9078\\u3076\": 9, \"\\u9078\\u629e\": [0, 15, 21, 22, 28, 30, 32], \"\\u907f\\u3051\\u308b\": 5, \"\\u90e8\\u5206\": [2, 3, 4, 5, 6, 9, 15, 17, 19, 22, 24, 30, 31], \"\\u90f5\\u4fbf\": 30, \"\\u914d\\u5217\": [5, 6, 10, 20, 21, 24, 26, 27, 29, 31, 32], \"\\u914d\\u5217x\": 29, \"\\u914d\\u5217y\": 29, \"\\u914d\\u7f6e\": 27, \"\\u91cd\\u306d\": 27, \"\\u91cd\\u8907\": [9, 10, 17, 23, 30], \"\\u91cd\\u8981\": [4, 11], \"\\u91cf\\u8a08\": 20, \"\\u9234\\u6728\": 26, \"\\u9244\\u7832\": 11, \"\\u9577\\u3044\": [2, 18], \"\\u9577\\u3044\\u884c\": 18, \"\\u9577\\u3055\": [2, 5, 6, 7, 8, 9, 16, 17, 18, 20, 21, 23, 30], \"\\u9577\\u3059\\u304e\\u308b\": [14, 15], \"\\u9577\\u5f15\": [31, 32], \"\\u9589\\u3058\": [4, 11], \"\\u9589\\u3058\\u308b\": 11, \"\\u9589\\u3058\\u5fd8\\u308c\": 4, \"\\u9589\\u5305\": [13, 30, 32], \"\\u958b\\u3044\": [0, 11, 13, 28], \"\\u958b\\u304b\": 28, \"\\u958b\\u304d\": [4, 11], \"\\u958b\\u304f\": [11, 13, 22, 27], \"\\u958b\\u3051\": 13, \"\\u958b\\u3051\\u308b\": 13, \"\\u958b\\u3053\": [11, 13], \"\\u958b\\u59cb\": [7, 9, 16], \"\\u958b\\u767a\": 15, \"\\u9593\\u5206\": 26, \"\\u9593\\u63a5\": [19, 24], \"\\u9593\\u9055\\u3044\": [10, 16], \"\\u9593\\u9055\\u3063\": [3, 4, 6], \"\\u95a2\\u308f\\u3089\": 30, \"\\u95a2\\u308f\\u308b\": 4, \"\\u95a2\\u4fc2\": [1, 5, 7, 13, 14, 21, 23], \"\\u95a2\\u6570\": [4, 5, 7, 8, 9, 11, 12, 14, 15, 17, 19, 20, 21, 24, 26, 27, 28, 29, 31, 32], \"\\u95a2\\u9023\": [4, 16], \"\\u963b\\u5bb3\": 11, \"\\u964d\\u9806\": [6, 18, 20], \"\\u9650\\u3063\": 5, \"\\u9650\\u3089\": [2, 11, 13, 24], \"\\u9650\\u308a\": [1, 9, 19], \"\\u9650\\u5b9a\": [11, 16], \"\\u9664\\u3044\": [7, 14, 15, 17], \"\\u9664\\u304b\": 17, \"\\u9664\\u304d\": 30, \"\\u9664\\u304f\": 30, \"\\u9664\\u7b97\": [1, 4, 9, 16, 32], \"\\u968e\\u4e57\": [14, 15, 28], \"\\u968e\\u4e57n\": 28, \"\\u968e\\u5c64\": [31, 32], \"\\u968e\\u8abf\": 27, \"\\u96c6\\u5408\": [13, 17, 21, 31, 32], \"\\u96c6\\u8a08\": 16, \"\\u96e2\\u6563\": [1, 21], \"\\u96e3\\u3057\\u3044\": 25, \"\\u96fb\\u5353\": 1, \"\\u96fb\\u8a71\": 30, \"\\u9752\\u8272\": 22, \"\\u975e\\u516c\\u5f0f\": 4, \"\\u975e\\u5e38\": [1, 9], \"\\u975e\\u660e\": 10, \"\\u975e\\u7834\": [31, 32], \"\\u975e\\u7834\\u58ca\": [6, 32], \"\\u9762\\u5012\": [2, 18, 27], \"\\u9762\\u7a4d\": 2, \"\\u9805\\u6f14\": [1, 7, 31, 32], \"\\u9805\\u76ee\": [15, 31], \"\\u9806\\u4e0d\": 10, \"\\u9806\\u4f4d\": [31, 32], \"\\u9806\\u5e8f\": [1, 5, 6, 9, 23, 24, 30], \"\\u9806\\u6b21\": 12, \"\\u9806\\u756a\": [1, 2, 6, 7, 9, 20, 23, 31], \"\\u983b\\u5ea6\": 9, \"\\u983b\\u7e41\": 13, \"\\u9854\\u6587\\u5b57\": 30, \"\\u98db\\u3070\": 6, \"\\u99c4\\u76ee\": 2, \"\\u9ad8\\u3005\": [11, 30], \"\\u9ad8\\u3044\": [1, 4, 16], \"\\u9ad8\\u3055\": 25, \"\\u9ad8\\u3081\\u308b\": 4, \"\\u9ad8\\u6b21\": 16, \"\\u9ad8\\u901f\": 24, \"\\u9ad8\\u968e\": [31, 32], \"\\u9ec4\\u3044\\u308d\": 11, \"\\u9ec4\\u91d1\": 1, \"\\uff01\\uff09\": 22, \"\\uff08accuracy\": 21, \"\\uff08ancestor\": 13, \"\\uff08cf\": 4, \"\\uff08child\": 13, \"\\uff08cm\": 2, \"\\uff08descendant\": 13, \"\\uff08kg\": 2, \"\\uff08leaf\": 13, \"\\uff08logic\": 4, \"\\uff08mac\": [0, 22], \"\\uff08macos\": 28, \"\\uff08node\": 13, \"\\uff08parent\": 13, \"\\uff08python\": 22, \"\\uff08root\": 13, \"\\uff08runtime\": 4, \"\\uff08sibling\": 13, \"\\uff08sort\": 32, \"\\uff08sorted\": 32, \"\\uff08syntax\": 4, \"\\uff08tex\": 14, \"\\uff08tree\": 13, \"\\uff08unicode\": 5, \"\\uff08utf\": 26, \"\\uff08word\": 30, \"\\uff08x\": 3, \"\\uff08\\u304b\\u308a\": 2, \"\\uff08\\u304f\\u3046\": 5, \"\\uff08\\u304f\\u3046\\u308c\\u3064\": 5, \"\\uff08\\u3059\": 5, \"\\uff08\\u3064\\u307e\\u308a\": 4, \"\\uff08\\u307e\\u305f\": 18, \"\\uff08\\u30ad\\u30fc\": 9, \"\\uff08\\u30d3\\u30f3\": 29, \"\\uff08\\u4f8b\": 4, \"\\uff08\\u512a\": 7, \"\\uff08\\u5217\": [16, 20], \"\\uff08\\uff09\": 30, \"\\uff08\\uff0b\": 30, \"\\uff09#\": 9, \"\\uff09<\": 30, \"\\uff09>\": 30, \"\\uff09greeting\": 10, \"\\uff09search\": 30, \"\\uff09shift\": 31, \"\\uff09\\u3001\": [1, 2, 12], \"\\uff09\\u3002\": [5, 6, 8, 9, 11, 14, 16, 23, 30], \"\\uff09\\u300d\": 11, \"\\uff09\\u3057\\u3066\": 9, \"\\uff09\\u30c1\\u30e9\": 30, \"\\uff09\\u5024\": 9, \"\\uff09\\u5207\\u308a\\u4e0b\\u3052\": 1, \"\\uff09\\uff09\": [5, 21], \"\\uff09\\uff1a\": 0, \"\\uff0f\\uff3c\": 11, \"\\uff1a'\": 30}, \"titles\": [\"1-0. Colaboratory (Colab) \\u306e\\u4f7f\\u3044\\u65b9\", \"1-1. \\u6570\\u5024\\u6f14\\u7b97\", \"1-2. \\u5909\\u6570\\u3068\\u95a2\\u6570\\u306e\\u57fa\\u790e\", \"1-3. \\u8ad6\\u7406\\u30fb\\u6bd4\\u8f03\\u6f14\\u7b97\\u3068\\u6761\\u4ef6\\u5206\\u5c90\\u306e\\u57fa\\u790e\", \"1-4. \\u30c6\\u30b9\\u30c8\\u3068\\u30c7\\u30d0\\u30c3\\u30b0\", \"2-1. \\u6587\\u5b57\\u5217 (string)\", \"2-2. \\u30ea\\u30b9\\u30c8 (list)\", \"2-3. \\u6761\\u4ef6\\u5206\\u5c90\", \"3-1. \\u8f9e\\u66f8 (dictionary)\", \"3-2. \\u7e70\\u308a\\u8fd4\\u3057\", \"3-3. \\u95a2\\u6570\", \"4-1. \\u30d5\\u30a1\\u30a4\\u30eb\\u5165\\u51fa\\u529b\\u306e\\u57fa\\u672c\", \"4-2. \\u30a4\\u30c6\\u30e9\\u30d6\\u30eb\\u3068\\u30a4\\u30c6\\u30ec\\u30fc\\u30bf\", \"4-3. \\u30c7\\u30a3\\u30ec\\u30af\\u30c8\\u30ea\\u3068\\u6728\\u69cb\\u9020\", \"5-1. \\u30e2\\u30b8\\u30e5\\u30fc\\u30eb\\u306e\\u4f7f\\u3044\\u65b9\", \"5-2. \\u30e2\\u30b8\\u30e5\\u30fc\\u30eb\\u306e\\u4f5c\\u308a\\u65b9\", \"5-3. NumPy\\u30e9\\u30a4\\u30d6\\u30e9\\u30ea\", \"6-1. \\u5185\\u5305\\u8868\\u8a18\", \"6-2. \\u9ad8\\u968e\\u95a2\\u6570\", \"6-3. \\u30af\\u30e9\\u30b9\", \"7-1. pandas\\u30e9\\u30a4\\u30d6\\u30e9\\u30ea\", \"7-2. scikit-learn\\u30e9\\u30a4\\u30d6\\u30e9\\u30ea\", \"\\u25b2Jupyter Notebook \\u306e\\u4f7f\\u3044\\u65b9\", \"\\u25b2\\u30bb\\u30c3\\u30c8 (set)\", \"\\u25b2\\u518d\\u5e30\", \"\\u25b2\\u7c21\\u5358\\u306a\\u30c7\\u30fc\\u30bf\\u306e\\u53ef\\u8996\\u5316\", \"\\u25b2CSV\\u30d5\\u30a1\\u30a4\\u30eb\\u306e\\u5165\\u51fa\\u529b\", \"\\u25b2Bokeh\\u30e9\\u30a4\\u30d6\\u30e9\\u30ea\", \"\\u25b2Python\\u30b9\\u30af\\u30ea\\u30d7\\u30c8\\u3068\\u30b3\\u30de\\u30f3\\u30c9\\u30e9\\u30a4\\u30f3\\u5b9f\\u884c\", \"\\u25b2Matplotlib\\u30e9\\u30a4\\u30d6\\u30e9\\u30ea\", \"\\u25b2\\u6b63\\u898f\\u8868\\u73fe\", \"Python\\u30d7\\u30ed\\u30b0\\u30e9\\u30df\\u30f3\\u30b0\\u5165\\u9580\", \"\\u7d22\\u5f15\"], \"titleterms\": {\"-enter\": 22, \"-learn\": 21, \".rand\": 16, \".split\": 30, \"7\\u6708\": 26, \"_cm\": 2, \"_disc\": 2, \"_solution\": 2, \"_to\": 2, \"absolute\": 3, \"add\": 23, \"and\": 7, \"arange\": 16, \"as\": 14, \"assert\": 4, \"break\": 9, \"clear\": 23, \"colab\": 0, \"colaboratory\": 0, \"continue\": 9, \"copy\": 6, \"csv\": [20, 26], \"dataframe\": 20, \"dictionary\": 8, \"difference\": 23, \"discard\": 23, \"dot\": 16, \"elif\": 7, \"else\": [7, 9], \"enumerate\": [9, 12], \"filter\": 18, \"findall\": 30, \"finditer\": 30, \"for\": [6, 9, 12, 16, 26], \"from\": 14, \"ft\": 2, \"global\": 10, \"group\": 30, \"if\": [3, 7], \"iloc\": 20, \"in\": 9, \"intersection\": 23, \"items\": 8, \"iter\": 12, \"jupyter\": 28, \"keys\": 8, \"linspace\": 16, \"list\": 6, \"loc\": 20, \"macos\": 28, \"map\": 18, \"matplotlib\": 25, \"max\": [6, 16, 18], \"mean\": 16, \"min\": [6, 16], \"next\": 12, \"none\": 3, \"notebook\": [22, 28], \"numpy\": 16, \"ones\": 16, \"or\": 7, \"pandas\": 20, \"pass\": 9, \"pop\": 23, \"print\": 2, \"python\": 31, \"qe\": 2, \"quadratic\": 2, \"random\": 16, \"range\": 9, \"re\": 30, \"remove\": 23, \"return\": [2, 9], \"scikit\": 21, \"series\": 20, \"set\": 23, \"shebang\": 28, \"sign\": 3, \"sort\": 16, \"sorted\": 18, \"string\": 5, \"sub\": 30, \"sum\": [6, 16], \"tuple\": 6, \"union\": 23, \"values\": 8, \"while\": 9, \"windows\": 28, \"with\": [11, 26], \"zeros\": 16, \"\\u25b2bokeh\": 27, \"\\u25b2csv\": 26, \"\\u25b2for\": 9, \"\\u25b2jupyter\": 22, \"\\u25b2matplotlib\": 29, \"\\u25b2python\": 28, \"\\u25b2with\": 19, \"\\u25b2\\u30ad\\u30fc\": 8, \"\\u3042\\u3052\": 6, \"\\u3042\\u308a\": 21, \"\\u3042\\u308b\": [5, 28], \"\\u3044\\u304f\\u3089\": 1, \"\\u304a\\u3051\\u308b\": [11, 27, 29], \"\\u304b\\u3089\": [6, 18, 20], \"\\u304c\\u308b\": 7, \"\\u3059\\u308b\": [6, 8, 15, 16], \"\\u305d\\u306e\": 30, \"\\u3067\\u3082\": 1, \"\\u3068\\u304d\": [0, 22], \"\\u3068\\u3057\\u3066\": [3, 10, 13], \"\\u306a\\u3044\": [0, 8, 12], \"\\u306a\\u304f\": 22, \"\\u306a\\u3057\": 21, \"\\u306a\\u3063\": 22, \"\\u306a\\u3069\": 6, \"\\u306a\\u308b\": 1, \"\\u306b\\u304a\\u3051\\u308b\": [7, 9], \"\\u306b\\u3064\\u3044\\u3066\": 21, \"\\u306b\\u3088\\u304f\": 5, \"\\u306b\\u3088\\u308b\": [3, 6, 7, 9, 12, 16, 19], \"\\u306b\\u5bfe\\u3059\\u308b\": [6, 11, 26], \"\\u306b\\u95a2\\u3059\\u308b\": 30, \"\\u3079\\u304d\": [1, 24], \"\\u307e\\u305f\": 7, \"\\u307e\\u3068\\u3081\": 1, \"\\u3082\\u3057\\u304f\": 7, \"\\u3088\\u304f\": 16, \"\\u308c\\u308b\": [3, 16], \"\\u30a2\\u30c3\\u30d7\\u30ed\\u30fc\\u30c9\": 15, \"\\u30a4\\u30c6\\u30e9\\u30d6\\u30eb\": [12, 18], \"\\u30a4\\u30c6\\u30ec\\u30fc\\u30bf\": 12, \"\\u30a4\\u30f3\\u30c7\\u30c3\\u30af\\u30b9\": [5, 6], \"\\u30a4\\u30f3\\u30c7\\u30c3\\u30af\\u30b9\\u30a2\\u30af\\u30bb\\u30b9\": 16, \"\\u30a4\\u30f3\\u30c7\\u30f3\\u30c8\": 7, \"\\u30a4\\u30f3\\u30d7\\u30ec\\u30fc\\u30b9\": 6, \"\\u30a4\\u30f3\\u30dd\\u30fc\\u30c8\": [1, 14], \"\\u30a8\\u30b9\\u30b1\\u30fc\\u30d7\\u30b7\\u30fc\\u30b1\\u30f3\\u30b9\": [5, 30], \"\\u30a8\\u30e9\\u30fc\": [1, 4], \"\\u30aa\\u30d6\\u30b8\\u30a7\\u30af\\u30c8\": [3, 6], \"\\u30aa\\u30fc\\u30d7\\u30f3\": [0, 11], \"\\u30ab\\u30ec\\u30f3\\u30c8\\u30ef\\u30fc\\u30ad\\u30f3\\u30b0\\u30c7\\u30a3\\u30ec\\u30af\\u30c8\\u30ea\": 13, \"\\u30ad\\u30fc\": 8, \"\\u30ad\\u30fc\\u30ef\\u30fc\\u30c9\": 10, \"\\u30af\\u30e9\\u30b9\": [19, 30], \"\\u30af\\u30ed\\u30fc\\u30ba\": 11, \"\\u30b0\\u30e9\\u30d5\": [25, 27, 29], \"\\u30b0\\u30eb\\u30fc\\u30d7\": 20, \"\\u30b0\\u30ed\\u30fc\\u30d0\\u30eb\": 2, \"\\u30b3\\u30de\\u30f3\\u30c9\\u30e2\\u30fc\\u30c9\": 22, \"\\u30b3\\u30de\\u30f3\\u30c9\\u30e9\\u30a4\\u30f3\": 28, \"\\u30b3\\u30e1\\u30f3\\u30c8\": [1, 2], \"\\u30b3\\u30fc\\u30c7\\u30a3\\u30f3\\u30b0\\u30b9\\u30bf\\u30a4\\u30eb\": 4, \"\\u30b3\\u30fc\\u30c9\": [11, 28], \"\\u30b7\\u30ea\\u30fc\\u30ba\": 20, \"\\u30b8\\u30a7\\u30cd\\u30ec\\u30fc\\u30bf\": 17, \"\\u30b9\\u30ab\\u30e9\": 16, \"\\u30b9\\u30af\\u30ea\\u30d7\\u30c8\": 28, \"\\u30b9\\u30b3\\u30fc\\u30d7\": 10, \"\\u30b9\\u30e9\\u30a4\\u30b9\": [5, 16], \"\\u30bb\\u30c3\\u30c8\": [17, 23], \"\\u30bb\\u30eb\": [0, 22], \"\\u30bd\\u30fc\\u30b9\\u30d5\\u30a1\\u30a4\\u30eb\": 28, \"\\u30bd\\u30fc\\u30c8\\u30a2\\u30eb\\u30b4\\u30ea\\u30ba\\u30e0\": [27, 29], \"\\u30bf\\u30d7\\u30eb\": 6, \"\\u30c0\\u30a6\\u30f3\\u30ed\\u30fc\\u30c9\": 0, \"\\u30c6\\u30b9\\u30c8\": 4, \"\\u30c7\\u30a3\\u30ec\\u30af\\u30c8\\u30ea\": 13, \"\\u30c7\\u30d0\\u30c3\\u30b0\": 4, \"\\u30c7\\u30fc\\u30bf\": [13, 16, 20, 21, 25], \"\\u30c7\\u30fc\\u30bf\\u30d5\\u30ec\\u30fc\\u30e0\": 20, \"\\u30ce\\u30fc\\u30c8\\u30d6\\u30c3\\u30af\": 0, \"\\u30ce\\u30fc\\u30c8\\u30d6\\u30c3\\u30af\\u30d5\\u30a1\\u30a4\\u30eb\": 15, \"\\u30d0\\u30c3\\u30af\\u30b9\\u30e9\\u30c3\\u30b7\\u30e5\": 5, \"\\u30d1\\u30b9\": 13, \"\\u30d2\\u30b9\\u30c8\\u30b0\\u30e9\\u30e0\": [27, 29], \"\\u30d2\\u30fc\\u30c8\\u30de\\u30c3\\u30d7\": [27, 29], \"\\u30d5\\u30a1\\u30a4\\u30eb\": [11, 20, 26, 27, 29], \"\\u30d5\\u30a1\\u30a4\\u30eb\\u30aa\\u30d6\\u30b8\\u30a7\\u30af\\u30c8\": 12, \"\\u30d7\\u30ed\\u30b0\\u30e9\\u30df\\u30f3\\u30b0\": 31, \"\\u30de\\u30fc\\u30b8\\u30bd\\u30fc\\u30c8\": 24, \"\\u30e1\\u30bd\\u30c3\\u30c9\": [5, 6, 8, 19, 23, 30], \"\\u30e1\\u30bf\": 30, \"\\u30e2\\u30b8\\u30e5\\u30fc\\u30eb\": [1, 14, 15, 28], \"\\u30e2\\u30b8\\u30e5\\u30fc\\u30eb\\u30d5\\u30a1\\u30a4\\u30eb\": 15, \"\\u30e2\\u30c7\\u30eb\": 21, \"\\u30e2\\u30fc\\u30c9\": 22, \"\\u30e6\\u30cb\\u30d0\\u30fc\\u30b5\\u30eb\": 16, \"\\u30e9\\u30a4\\u30d6\\u30e9\\u30ea\": [16, 20, 21, 27, 29], \"\\u30e9\\u30e0\\u30c0\": 18, \"\\u30ea\\u30b9\\u30c8\": [6, 8, 9, 17, 18, 24], \"\\u30ed\\u30fc\\u30ab\\u30eb\": 2, \"\\u30fb\\u30af\\u30e9\\u30b9\\u30bf\\u30ea\\u30f3\\u30b0\": 21, \"\\u30fb\\u30bf\\u30d7\\u30eb\": 6, \"\\u30fb\\u30c6\\u30b9\\u30c8\": 4, \"\\u30fb\\u30e1\\u30bd\\u30c3\\u30c9\": 6, \"\\u4e00\\u6027\": 6, \"\\u4e00\\u89a7\": 8, \"\\u4e26\\u3073\": 20, \"\\u4e26\\u3079\\u66ff\\u3048\": 6, \"\\u4e88\\u7d04\": 2, \"\\u4ed5\\u69d8\": 4, \"\\u4ed5\\u7d44\": 12, \"\\u4ed8\\u304d\": 17, \"\\u4ed8\\u3051\\u308b\": 30, \"\\u4ee3\\u5165\": [2, 6], \"\\u4ee3\\u5165\\u6587\": 2, \"\\u4ee3\\u6570\": 16, \"\\u4f5c\\u308a\\u65b9\": 15, \"\\u4f5c\\u6210\": 20, \"\\u4f7f\\u3044\\u65b9\": [0, 14, 15, 22], \"\\u4f7f\\u308f\": [3, 16], \"\\u4fdd\\u5b58\": 16, \"\\u5024\\u8aa4\": 1, \"\\u5024\\u914d\": 16, \"\\u512a\\u5148\": 1, \"\\u5143\\u914d\": 16, \"\\u5148\\u982d\": 28, \"\\u5165\\u308c\\u5b50\": [9, 17], \"\\u5165\\u51fa\": [11, 26], \"\\u5165\\u529b\": 5, \"\\u5165\\u9580\": 31, \"\\u5168\\u3066\": 8, \"\\u5168\\u4f53\": 11, \"\\u5168\\u89d2\": 1, \"\\u5177\\u4f53\": [4, 28], \"\\u5185\\u5305\": 17, \"\\u518d\\u5e30\": [3, 24], \"\\u51e6\\u7406\": 20, \"\\u51fa\\u529b\": [27, 29], \"\\u5206\\u5c90\": [3, 7], \"\\u5206\\u985e\": [4, 21], \"\\u521d\\u5fc3\\u8005\": 5, \"\\u521d\\u671f\": 6, \"\\u521d\\u671f\\u5024\": 10, \"\\u5236\\u5fa1\": 9, \"\\u524a\\u6e1b\": 21, \"\\u524a\\u9664\": [5, 6, 8, 11, 20], \"\\u52d5\\u4f5c\": 11, \"\\u5358\\u9805\": 1, \"\\u53c2\\u7167\": [0, 2, 20], \"\\u53cd\\u5fa9\": 30, \"\\u53cd\\u5fdc\": 22, \"\\u53d6\\u308a\\u51fa\\u3057\": 20, \"\\u53d6\\u5f97\": 6, \"\\u53ef\\u5909\": 10, \"\\u53ef\\u8996\": 25, \"\\u540c\\u58eb\": 16, \"\\u56de\\u5e30\": 21, \"\\u56de\\u6570\": [27, 29], \"\\u57fa\\u672c\": [11, 30], \"\\u57fa\\u790e\": [2, 3, 21], \"\\u5834\\u5408\": 8, \"\\u58ca\\u7684\": 6, \"\\u5909\\u63db\": [1, 6, 15], \"\\u5909\\u6570\": [2, 5, 10], \"\\u591a\\u6b21\": 16, \"\\u591a\\u91cd\": 6, \"\\u5927\\u304d\\u304f\": 1, \"\\u5927\\u6587\\u5b57\": 5, \"\\u5b57\\u5217\": 5, \"\\u5b66\\u7fd2\": 21, \"\\u5b9a\\u7fa9\": [2, 10, 12, 19], \"\\u5b9f\\u6570\": 1, \"\\u5b9f\\u884c\": [0, 4, 28], \"\\u5ba3\\u8a00\": [10, 28], \"\\u5bfe\\u5fdc\": 19, \"\\u5c0f\\u6587\\u5b57\": 5, \"\\u5c5e\\u6027\": [16, 19], \"\\u5e30\\u95a2\": 24, \"\\u5f15\\u6570\": [10, 28], \"\\u5f62\\u5f0f\": 26, \"\\u5f97\\u308b\": 8, \"\\u5fa9\\u5143\": 16, \"\\u6298\\u308c\": 25, \"\\u62ec\\u5f27\": 1, \"\\u6307\\u5b9a\": [6, 8, 11], \"\\u632f\\u821e\\u3044\": 19, \"\\u633f\\u5165\": [0, 6], \"\\u63a5\\u5c3e\": 24, \"\\u63a5\\u982d\": 24, \"\\u64cd\\u4f5c\": [0, 6, 16], \"\\u6539\\u5909\": 19, \"\\u6539\\u884c\": 11, \"\\u6559\\u5e2b\": 21, \"\\u6559\\u6750\": 0, \"\\u6563\\u5e03\\u56f3\": [25, 27, 29], \"\\u6570\\u3048\": 6, \"\\u6570\\u3048\\u4e0a\\u3052\": 5, \"\\u6570\\u5024\": 1, \"\\u6570\\u5b66\": 1, \"\\u6574\\u6570\": 1, \"\\u6587\\u5b57\": [5, 6, 11, 28, 30], \"\\u6587\\u5b57\\u5217\": [5, 6], \"\\u65b9\\u6cd5\": 28, \"\\u6642\\u7cfb\": 20, \"\\u66f8\\u304d\": 11, \"\\u66f8\\u304d\\u65b9\": 2, \"\\u66f8\\u304d\\u8fbc\\u307f\": [11, 26], \"\\u66ff\\u3048\": 20, \"\\u671f\\u5316\": 19, \"\\u6728\\u69cb\": 13, \"\\u6728\\u69cb\\u9020\": 13, \"\\u6761\\u4ef6\": [3, 7, 17, 20], \"\\u6771\\u4eac\": 26, \"\\u691c\\u7d22\": 5, \"\\u69cb\\u6587\": [4, 7], \"\\u69cb\\u7bc9\": 16, \"\\u69cb\\u9020\": [9, 13], \"\\u69d8\\u3005\": 3, \"\\u6a5f\\u68b0\": 21, \"\\u6b20\\u640d\": 20, \"\\u6b21\\u5143\": 21, \"\\u6b62\\u307e\\u3089\": 0, \"\\u6b63\\u898f\": 30, \"\\u6bd4\\u8f03\": [3, 5, 6, 23, 27, 29], \"\\u6c17\\u6e29\": 26, \"\\u6ce8\\u610f\": 22, \"\\u6df7\\u4e71\": 5, \"\\u6f14\\u7b97\": [1, 3, 5, 6, 16, 23, 30], \"\\u6f14\\u7b97\\u5b50\": [1, 6, 7], \"\\u7279\\u6b8a\": [12, 19], \"\\u7406\\u7531\": 30, \"\\u751f\\u6210\": [6, 16], \"\\u753b\\u50cf\": 29, \"\\u767b\\u9332\": 8, \"\\u76f8\\u4e92\": 6, \"\\u771f\\u7406\": 16, \"\\u771f\\u7406\\u5024\": 3, \"\\u77ed\\u7e2e\": 6, \"\\u7834\\u58ca\": 6, \"\\u7a7a\\u6587\": 5, \"\\u7a7a\\u767d\": [1, 5], \"\\u7a7a\\u884c\": 2, \"\\u7acb\\u3061\\u4e0a\\u3052\": 0, \"\\u7b49\\u4fa1\": 6, \"\\u7b97\\u8853\": 1, \"\\u7c21\\u5358\": [1, 25], \"\\u7d22\\u5f15\": 32, \"\\u7d2f\\u7a4d\": 2, \"\\u7d44\\u307f\\u8fbc\\u307f\": [6, 23], \"\\u7d50\\u5408\": [7, 20], \"\\u7d71\\u8a08\": 20, \"\\u7d99\\u627f\": 19, \"\\u7dda\\u5f62\": 16, \"\\u7de8\\u96c6\": [0, 11, 22], \"\\u7df4\\u7fd2\": [0, 1, 2, 3, 5, 6, 7, 8, 9, 11, 12, 14, 16, 17, 18, 19, 21, 22, 23, 26, 28, 29, 30], \"\\u7e70\\u308a\\u8fd4\\u3057\": [6, 9, 12], \"\\u7f6e\\u63db\": 5, \"\\u81ea\\u4f5c\": 15, \"\\u884c\\u3046\": 8, \"\\u8868\\u73fe\": [13, 30], \"\\u8868\\u793a\": [1, 5], \"\\u8868\\u8a18\": 17, \"\\u8907\\u6570\": [7, 10], \"\\u8907\\u88fd\": 8, \"\\u8981\\u7d20\": [6, 16], \"\\u8981\\u7d20\\u578b\": 16, \"\\u8981\\u7d20\\u6bce\": 16, \"\\u89e3\\u7b54\": [2, 3, 5, 6, 7, 8, 9, 11, 12, 14, 16, 17, 18, 19, 21, 23, 26, 28, 29, 30], \"\\u89e3\\u8aac\": [7, 9], \"\\u8a08\\u7b97\": [1, 9, 24], \"\\u8a18\\u6cd5\": 6, \"\\u8a55\\u4fa1\": 7, \"\\u8aa4\\u89e3\": 5, \"\\u8aad\\u307f\": 11, \"\\u8aad\\u307f\\u8fbc\\u307f\": [11, 26], \"\\u8ad6\\u7406\": [3, 4], \"\\u8f9e\\u66f8\": [8, 9, 10, 17], \"\\u8fd4\\u3059\": [3, 12], \"\\u8fd4\\u5024\": [2, 8, 10], \"\\u8ffd\\u52a0\": [6, 20], \"\\u9006\\u9806\": 6, \"\\u9023\\u7d50\": [5, 20], \"\\u90e8\\u5206\": 28, \"\\u914d\\u5217\": 16, \"\\u9577\\u5f15\": 10, \"\\u95a2\\u6570\": [1, 2, 3, 6, 10, 16, 18, 23, 30], \"\\u968e\\u5c64\": 13, \"\\u96c6\\u5408\": 23, \"\\u975e\\u7834\": 6, \"\\u9806\\u4f4d\": 1, \"\\u9806\\u756a\": 10, \"\\u9ad8\\u968e\": 18, \"\\uff08sort\": 6, \"\\uff08sorted\": 6, \"\\uff09shift\": 22}})"
  },
  {
    "path": "docs/toc.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XMHTML 1.0 Strict//EN\"\n          \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n\n<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"en\" lang=\"en\">\n  <head>\n    <meta http-equiv=\"content-type\" content=\"text/html;charset=UTF-8\" />\n    <meta http-equiv=\"content-language\" content=\"ja\" />\n    <meta http-equiv=\"cache-control\" content=\"no-cache\" />\n    <meta http-equiv=\"pragma\" content=\"no-cache\" />\n    <meta name=\"robots\" content=\"noindex, nofollow\" />\n\n    <!-- Global site tag (gtag.js) - Google Analytics -->\n    <script async src=\"https://www.googletagmanager.com/gtag/js?id=UA-159819977-1\"></script>\n    <script>\n      window.dataLayer = window.dataLayer || [];\n      function gtag(){dataLayer.push(arguments);}\n      gtag('js', new Date());\n\n      gtag('config', 'UA-159819977-1');\n    </script>\n\n    <script type=\"text/javascript\">\n      if (document.referrer) {\n        var referrer = \"referrer=\" + encodeURIComponent(document.referrer);\n        redirect_url = redirect_url + (location.search ? '&' : '?') + referrer;\n      }\n      location.href = \"index.html\";\n    </script>\n    <title>Pythonプログラミング入門 &#8212; Pythonプログラミング入門 documentation</title>\n  </head>\n</html>\n"
  }
]