Created
October 16, 2020 09:50
-
-
Save takatakamanbou/55d93d15b0847ebb17cef44a273ba38d to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"cells": [ | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "qqyvt9JCC8Sc" | |
}, | |
"source": [ | |
"# AProg2020 ex04 課題A\n", | |
"\n", | |
"https://www-tlab.math.ryukoku.ac.jp/wiki/?AProg/2020/ex04#kadaiA" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## 準備\n", | |
"以下のセルの内容を指示通り修正して実行してください.指示に従っていない場合,課題のチェックはされません." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 1, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"ename": "AssertionError", | |
"evalue": "", | |
"output_type": "error", | |
"traceback": [ | |
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", | |
"\u001b[0;31mAssertionError\u001b[0m Traceback (most recent call last)", | |
"\u001b[0;32m<ipython-input-1-6eb7f89973c6>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m 7\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 8\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 9\u001b[0;31m \u001b[0;32massert\u001b[0m \u001b[0mtype\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmyID\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0mstr\u001b[0m \u001b[0;32mand\u001b[0m \u001b[0mlen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmyID\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m>\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 10\u001b[0m \u001b[0;32massert\u001b[0m \u001b[0mdidItMyself\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 11\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", | |
"\u001b[0;31mAssertionError\u001b[0m: " | |
] | |
} | |
], | |
"source": [ | |
"myID = '' # この変数に文字列として自分の学籍番号を書く\n", | |
"# この notebook を自分のPC環境で自分がやったというひとは, \n", | |
"# 以下の False を True に書き換える\n", | |
"didItMyself = False\n", | |
"\n", | |
"### このセルのここから下はいじってはいけません ###\n", | |
"\n", | |
"\n", | |
"assert type(myID) == str and len(myID) > 0\n", | |
"assert didItMyself\n", | |
"\n", | |
"import sys\n", | |
"import os\n", | |
"import getpass\n", | |
"print(sys.platform)\n", | |
"print(getpass.getuser())\n", | |
"print(os.getcwd())\n", | |
"print(myID)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## P1\n", | |
"以下の関数は,p.138 のコードを基にして作ったものです." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": null, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"# 地表で水平方向に速度 v [km/h] で打ち出した物体のふるまいを表示する関数\n", | |
"#\n", | |
"def EscapeVelocity(v):\n", | |
"\n", | |
" print(\"速度\", v, \"[km/h]の場合...\", end = \"\")\n", | |
" \n", | |
" if v < 28400: # 第一宇宙速度以下\n", | |
" print(\"地上に落下します\")\n", | |
" if v >= 40300 and v < 60100: # 第二宇宙速度以上\n", | |
" print(\"惑星の仲間入りです\")\n", | |
" if v >= 28400 and v < 40300: # 第一宇宙速度以上\n", | |
" print(\"月とお友達です\")\n", | |
" if v >= 60100: # 第三宇宙速度以上\n", | |
" print(\"アルファケンタウリを目指せ\")" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"1. まずは,そのまま以下を実行してみましょう." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": null, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"# 動作確認\n", | |
"#\n", | |
"for x in [10000, 30000, 50000, 70000]:\n", | |
" EscapeVelocity(x)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"2. 次に,関数 `EscapeVelocity()` 中の条件式で `and` を使っている部分を,`a <= v < b` の形に書き直しましょう." | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"3. この関数の条件判定は,`if-elif-else` の形にするとすっきり書けます.しかも,上記の `28400` や `40300` のような値を複数箇所に書く必要もなくなるので,バグも入りにくくなります.以下のセルに,そのようにした関数 `EscapeVelocity2()` の定義を書き(**↑ではなく↓をいじれと言ってることに注意**),「動作確認」のセルで `EscapeVelocity()` を呼んでいるところを `2` の方を呼ぶように修正して動作確認しましょう." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": null, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"# 地表で水平方向に速度 v [km/h] で打ち出した物体のふるまいを表示する関数 ver.2\n", | |
"#" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## P2\n", | |
"1. 以下のセルの`#(1)#` のところに [moodle の Q04a](https://moodle.media.ryukoku.ac.jp/mod/quiz/view.php?id=71907) の問題 [Q0411] の選択肢の中から正しいものを選んで書いてください\n", | |
"1. `#(2)#` のところを修正して,このセルを実行すると `d` の内容が「キー = 値」という形で表示されるようにしてください." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": null, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"d = #(1)#\n", | |
"for key in ['青いタヌキ', '0.93秒で熟睡', 'いいえ,もっと汚いの']:\n", | |
" print(key, '=', #(2))" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## P3\n", | |
"まず以下のセルを実行して, `zipcode` という辞書を作ろう." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": null, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"zipcode = {\n", | |
" '0010010':'北海道札幌市北区北十条西(1~4丁目)',\n", | |
" '1002101':'東京都小笠原村父島', \n", | |
" '9998531':'山形県飽海郡遊佐町菅里(その他)',\n", | |
" '1234567':'ほげおんち'\n", | |
" }" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"以下のセルに,実行すると次のような結果が得られるコードを書いてください.\n", | |
"\n", | |
"```\n", | |
"郵便番号をどぞ 0010010 ==> \"0010010\" がキーボードからの入力\n", | |
"0010010 北海道札幌市北区北十条西(1~4丁目)\n", | |
"郵便番号をどぞ 1002101 ==> \"1002101\" がキーボードからの入力\n", | |
"1002101 東京都小笠原村父島\n", | |
"郵便番号をどぞ 9999999 ==> \"9999999\" がキーボードからの入力\n", | |
"9999999 は見つかりません\n", | |
"郵便番号をどぞ q ==> \"q\" がキーボードからの入力\n", | |
"```\n", | |
"\n", | |
"ただし,キーボードから郵便番号相当の文字列の入力を受け付けたら,それを辞書`zipcode`から探した結果を表示するようにして,それを繰り返し,入力が `'Q'` か `'q'` になったら終了するようにしてください.\n", | |
"\n", | |
"ヒント(1) 次のようにすると無限ループできます(`while`文はp.139).\n", | |
"\n", | |
"```\n", | |
"while True:\n", | |
" print('ほげ')\n", | |
"```\n", | |
"\n", | |
"ヒント(2) Python にも `break` 文あります(p.141)." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": null, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"# このセルに上記の指示にしたがったコードを書く\n" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## P4\n", | |
"\n", | |
"次のことを上から順番にやりましょう.\n" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"### P4-(1)\n", | |
"\n", | |
"| キー | 値 |\n", | |
"|:--:|:--:|\n", | |
"| 名前 | \"ほげお\" |\n", | |
"| HP | 18 |\n", | |
"| MP | 999 |\n", | |
"\n", | |
"以下のセルを修正して,変数 `hoge` が上記のようなキーと値のペアを持つディクショナリとなるようにしてください.\n" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": null, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"# ディクショナリ hoge を定義する\n" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"### P4-(2)\n", | |
"\n", | |
"以下のセルに,次の指示にしたがって `hoge` の内容を変更するコードを書いてください. `hoge` を一から定義し直すのではありません.\n", | |
"\n", | |
"1. キー `攻撃力` 値 `0.1` を追加\n", | |
"1. キー `防御力` 値 `0.001` を追加\n", | |
"1. キー `MP` の値 `999` は間違いで,本当は `0` だったので,修正しよう" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": null, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"# ここに hoge の内容を変更するコードを書く\n", | |
"\n", | |
"print(hoge)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"### P4-(3)\n", | |
"\n", | |
"以下のセルに,次のような仕様の関数 `Wizard` を定義するコードを書いてください.\n", | |
"\n", | |
"1. 引数は一つだけ(練習のため名前を指定します,`p`としてください)\n", | |
"1. その引数はディクショナリを表すと仮定して,そのディクショナリのキー `MP` の値が `0` より大きければ\n", | |
"```\n", | |
"「名前」 は魔法使いです\n", | |
"```\n", | |
"と表示し,さもなくば,\n", | |
"```\n", | |
"「名前」 は魔法使えません\n", | |
"```\n", | |
"と表示する.「名前」の部分は,実際には,ディクショナリのキー `名前` の値とする.\n", | |
"1. 引数で受け取ったものがディクショナリでなかった,上記で扱ってるキーが存在しなかった,というような場合のエラー処理は考えなくてよい.\n", | |
"\n", | |
"```\n", | |
"<実行例>\n", | |
"Wizard(hoge)\n", | |
"ほげお は魔法使えません\n", | |
"```" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": null, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"# ここに魔法使い判定関数を定義する\n" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": null, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"# 動作確認.このセルを修正する必要はないはず\n", | |
"Wizard(hoge)" | |
] | |
} | |
], | |
"metadata": { | |
"colab": { | |
"collapsed_sections": [], | |
"name": "ex02kadaiA.ipynb", | |
"provenance": [] | |
}, | |
"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" | |
} | |
}, | |
"nbformat": 4, | |
"nbformat_minor": 4 | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment