Skip to content

Instantly share code, notes, and snippets.

@takatakamanbou
Last active September 26, 2020 09:46
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save takatakamanbou/4908f0edf182be97230ab8c86077487c to your computer and use it in GitHub Desktop.
Save takatakamanbou/4908f0edf182be97230ab8c86077487c to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# AProg2020 ex03 Notebook その4\n",
"\n",
"AProgのページ https://www-tlab.math.ryukoku.ac.jp/wiki/?AProg/2020"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"---\n",
"## モジュールを使う (pp.107-112)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### モジュールを import する (pp.107-109) "
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"import random # randomモジュールを読み込む\n",
"\n",
"print(random.random()) # 0 <= x < 1 の乱数を得る(浮動小数点数)\n",
"print(random.randint(0, 6)) # 0 <= x <= 6 の乱数を得る(整数)\n",
"a_list = [0, 1, 2, 3, 4, 5]\n",
"random.shuffle(a_list) # リストをランダムに入れ替える\n",
"print(a_list)\n",
"print(random.choice(a_list)) # リストの要素をひとつランダムに選ぶ"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"上記で利用している `random` というモジュールは Python の標準ライブラリに含まれているモジュールの一つである.\n",
"```\n",
"import random\n",
"```\n",
"を実行すると,この `random` モジュールに含まれている `hoge()` という関数を `random.hoge()` という形で呼び出すことができるようになる."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"次の例は,matplotlib というライブラリを使ってグラフを描画するコードである."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"import matplotlib.pyplot # matplotlib.pyplot モジュールを読み込む\n",
"\n",
"X = [ -3, -2, -1, 0, 1, 2, 3]\n",
"Y = [ (x-2)*x*(x+2) for x in X ] # (よだんだよん) 「リスト内包表記」という書き方.forループしてリストを作る処理を簡潔に書ける(p.236)\n",
"\n",
"matplotlib.pyplot.plot(X, Y, color = \"green\", marker = \"o\", linestyle = \"dashed\") # plot 関数を呼び出す(名前が長い...)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"上記では, `matplotlib` というグラフ描画ライブラリの中の `pyplot` というモジュールを普通に読み込もうとして\n",
"```\n",
"import matplotlib.pyplot\n",
"```\n",
"と書いている.そのため,`plot()` 関数を呼び出す際には\n",
"```\n",
"matplotlib.pyplot.plot(...)\n",
"```\n",
"と書かないといけない.長くて面倒くさいと思ったら,次のように `as` を使って別名を付ければすればよい."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"import matplotlib.pyplot as plt # matplotlib.pyplot モジュールを plt という名前で使えるように読み込む\n",
"\n",
"X = [ -3, -2, -1, 0, 1, 2, 3]\n",
"Y = [ (x-2)*x*(x+2) for x in X ] # (よだんだよん) 「リスト内包表記」という書き方.forループしてリストを作る処理を簡潔に書ける(p.236)\n",
"\n",
"plt.plot(X, Y, color = \"green\", marker = \"o\", linestyle = \"dashed\") # plot 関数を呼び出す(名前 plt.plot で済む)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"import する際に `as` で `plt` という別名をつけて,\n",
"```\n",
"plt.plot(...)\n",
"```\n",
"で済むようにしている."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### from を使ったインポート/モジュールいろいろ (pp.110-112)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"monk_fish_team = [158, 157, 163, 157, 145]\n",
"volleyball_team = [143, 167, 170, 165]"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# statisticsモジュールを普通に import した場合\n",
"import statistics \n",
"\n",
"print(statistics.median(monk_fish_team)) \n",
"print(statistics.median(volleyball_team))"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# 「from ほげ import へな」の場合\n",
"from statistics import median \n",
"\n",
"print(median(monk_fish_team))\n",
"print(median(volleyball_team))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
" 前者の例では,`statistics` モジュールの `median` 関数を呼び出すには `statistics.median()` と書く必要があるが,後者の例では, `median()` と略記できることがわかる.ただし,この例では `statistics` モジュールの他の関数まで省略形で書けるわけではない.\n",
" ```\n",
" from statistics import *\n",
" ```\n",
" と書くことで, `statistics` モジュール内の全ての関数などを `statistics` 付けず省略形で書けるようになるが,元から存在する関数など(標準の組み込み関数や自分で作った関数など)と同じ名前のものがあったりすると混乱するので,ご利用は計画的に."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"ところで,ここまでの例で登場したモジュールについては,ウェブ上にリファレンスが存在している.\n",
"\n",
"- `random` モジュールに含まれている関数その他の機能(p.386にも説明あり):\n",
"https://docs.python.jp/3/library/random.html\n",
"- `statistics` モジュールに含まれている関数その他の機能 https://docs.python.jp/3/library/statistics.html\n",
"\n",
"これらは Python の標準ライブラリに含まれているモジュールである.以下にアクセスすると,Python の標準ライブラリの詳細等の様々な文書を閲覧することができる.\n",
"https://docs.python.jp/3/\n",
"\n",
"`matplotlib` については,以下へどうぞ.ウェブで検索すれば日本語の情報も見つかるでしょう.\n",
"- matplotlibのウェブサイト: https://matplotlib.org/\n",
"- `matplotlib.pyplot` : https://matplotlib.org/api/_as_gen/matplotlib.pyplot.html\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"次の例は,以下を参考に作ったコードである(p.356以降も参照). https://docs.python.jp/3/library/datetime.html"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"import datetime # 標準ライブラリの datetime モジュールをインポート\n",
"today = datetime.date.today() # 今日の日付\n",
"birthday = datetime.date(2004, 10, 26) # 誰かの誕生日\n",
"delta = today - birthday # 時間差を表す timedelta オブジェクト\n",
"print(\"生まれてから\", delta.days, \"日経ったみたいほげ\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"日付を変えて実行し直してみよう."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"次の例は,以下を参考に作ったコードである(p.377以降も参照).\n",
"- https://docs.python.org/ja/3/library/sys.html\n",
"- https://docs.python.jp/3/library/os.html\n",
"- https://docs.python.org/ja/3/library/getpass.html"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"import sys # 標準ライブラリの sys モジュールをインポート\n",
"\n",
"# sys.platform でこのコードを実行してる環境の OS を識別できる\n",
"if sys.platform == 'win32':\n",
" osname = 'Windows'\n",
"elif sys.platform == 'darwin':\n",
" osname = 'macOS'\n",
"elif sys.platform == 'linux':\n",
" osname = 'Linux'\n",
"else:\n",
" osname = sys.platform\n",
"\n",
"import os # 標準ライブラリの os モジュールをインポート\n",
"\n",
"# この jupyter notebook が動作しているディレクトリ\n",
"# (current working directory)を取得\n",
"cwd = os.getcwd()\n",
"\n",
"import getpass # getpass モジュールをインポート\n",
"username = getpass.getuser() # ユーザ名を取得\n",
"\n",
"print(\"やあこんちは.\")\n",
"print()\n",
"print(\"ふむ,僕は\", osname, \"の環境下で動いてるほげね.\")\n",
"print(\"で,僕が今いる場所は\", cwd, \"ほげね.\")\n",
"print()\n",
"print(\"でもって君のIDは\", username, \"ほげね.\")\n",
"print(\"よろしくほげ.\")"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8.5"
},
"toc": {
"base_numbering": 1,
"nav_menu": {
"height": "146px",
"width": "258px"
},
"number_sections": false,
"sideBar": true,
"skip_h1_title": true,
"title_cell": "目次",
"title_sidebar": "Contents",
"toc_cell": true,
"toc_position": {},
"toc_section_display": true,
"toc_window_display": false
}
},
"nbformat": 4,
"nbformat_minor": 4
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment