Skip to content

Instantly share code, notes, and snippets.

@takatakamanbou
Created October 16, 2020 09:50
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/55d93d15b0847ebb17cef44a273ba38d to your computer and use it in GitHub Desktop.
Save takatakamanbou/55d93d15b0847ebb17cef44a273ba38d to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"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