動画
課題
課題(チャプター9:ライブラリ)
【基本問題】ライブラリの種類と考え方(5問)
問題1
変数kindsに["標準ライブラリ", "外部ライブラリ", "自作ライブラリ"]を代入し、そのリストをprintで表示するプログラムを作成してください。
期待される出力:
['標準ライブラリ', '外部ライブラリ', '自作ライブラリ']
ヒント: 台本にある3分類をリストで表します。
問題2
import mathを書いたうえで、円周率を小数第2位で四捨五入してprintしてください(round(math.pi, 2))。
期待される出力:
3.14
ヒント: mathは標準ライブラリのモジュールです。
問題3
import mathとして、print(math.sqrt(25))を実行するプログラムを作成してください。
期待される出力:
5.0
ヒント: 平方根は浮動小数点数で返ります。
問題4
次の文は「読みやすさ」のメリットに関係します。print(len("random.randint"))だけを書いたプログラムを作成し、文字数を表示してください。
期待される出力:
14
ヒント: メソッド名の文字列の長さを数えます。
問題5
import sysとして、print(type(sys.version).__name__)を実行するプログラムを作成してください。
期待される出力:
str
ヒント: sys.versionはバージョン情報の文字列です。
【基本問題】import とドット記法(8問)
問題6
import randomとして、random.seed(0)のあとprint(random.randint(1, 6))を実行するプログラムを作成してください。
期待される出力:
4
ヒント: randintは両端を含みます。seedで結果を固定しています。
問題7
import randomとして、random.seed(42)のあとprint(random.randint(1, 6))を実行するプログラムを作成してください。
期待される出力:
6
ヒント: 台本のサイコロ例に近い形です。
問題8
import randomとして、random.seed(0)のあとprint(random.randint(10, 10))を実行するプログラムを作成してください。
期待される出力:
10
ヒント: 上下限が同じならその整数だけ返ります。
問題9
import randomとして、random.seed(1)のあとprint(random.choice(["A", "B", "C"]))を実行するプログラムを作成してください。
期待される出力:
A
ヒント: choiceはリストから1要素を選びます。
問題10
import randomとして、random.seed(1)のあとprint(random.randrange(0, 3))を実行するプログラムを作成してください。
期待される出力:
0
ヒント: randrangeの終端は含まれません。
問題11
from math import pow as pとして、print(int(p(2, 3)))を実行するプログラムを作成してください。
期待される出力:
8
ヒント: from ... import ...で名前を取り込めます。
問題12
import mathとして、print(math.ceil(4.1))を実行するプログラムを作成してください。
期待される出力:
5
ヒント: 天井関数は以上の最小の整数です。
問題13
import mathとして、print(math.floor(-2.1))を実行するプログラムを作成してください。
期待される出力:
-3
ヒント: 床関数は以下の最大の整数です。
【基本問題】random モジュール(11問)
問題14
import randomとして、random.seed(2)のあとprint(random.randint(100, 200))を実行するプログラムを作成してください。
期待される出力:
107
ヒント: seed固定で再現できる乱数にします。
問題15
import randomとして、random.seed(3)のあとprint(random.randint(5, 5))を実行するプログラムを作成してください。
期待される出力:
5
ヒント: 範囲が1点のときの確認です。
問題16
import randomとして、random.seed(10)のあとprint(round(random.uniform(1, 2), 2))を実行するプログラムを作成してください。
期待される出力:
1.13
ヒント: 実数乱数はroundで表示を揃えます。
問題17
import randomとして、random.seed(0)のあとprint(round(random.random(), 5))を実行するプログラムを作成してください。
期待される出力:
0.84442
ヒント: 0以上1未満の乱数です。
問題18
import randomとして、random.seed(0)のあとx = random.randint(1, 3); y = random.randint(1, 3); print(x + y)を実行するプログラムを作成してください。
期待される出力:
6
ヒント: 2回呼ぶとseedの消費順に従います。
問題19
import randomとして、lst = [1, 2, 3, 4, 5]; random.seed(0); random.shuffle(lst); print(lst)を実行するプログラムを作成してください。
期待される出力:
[3, 2, 1, 5, 4]
ヒント: 講義用PCのPython 3系で確認した並びです。
問題20
import randomとして、random.seed(0)のあとprint(sorted(random.sample(range(1, 10), 3)))を実行するプログラムを作成してください。
期待される出力:
[1, 7, 9]
ヒント: sampleは重複なしで複数個選びます。
問題21
import randomとして、random.seed(1)のあとprint(random.getrandbits(8))を実行するプログラムを作成してください。
期待される出力:
34
ヒント: ビット幅を指定した乱数です。
問題22
import randomとして、random.seed(4)のあとprint(random.randint(20, 30))を実行するプログラムを作成してください。
期待される出力:
23
ヒント: 範囲指定のrandintの練習です。
問題23
import randomとして、random.seed(0)のあとprint(random.choices([10, 20], k=3))を実行するプログラムを作成してください。
期待される出力:
[20, 20, 10]
ヒント: choicesは重複ありで複数回選べます。
問題24
import randomとして、random.seed(5)のあとprint(random.randint(1, 100))を実行するプログラムを作成してください。
期待される出力:
80
ヒント: 広い範囲の整数乱数です。
【基本問題】time モジュール(11問)
問題25
import timeとして、t = time.gmtime(0)のあとprint(t.tm_year)を実行するプログラムを作成してください。
期待される出力:
1970
ヒント: UTCのエポック(1970-01-01 00:00:00)です。
問題26
import timeとして、print(time.gmtime(0).tm_mon)を実行するプログラムを作成してください。
期待される出力:
1
ヒント: 月は1〜12です。
問題27
import timeとして、print(time.gmtime(0).tm_mday)を実行するプログラムを作成してください。
期待される出力:
1
ヒント: 日にちです。
問題28
import timeとして、print(time.gmtime(0).tm_wday)を実行するプログラムを作成してください。
期待される出力:
3
ヒント: 曜日(月曜=0)です。1970-01-01は木曜。
問題29
import timeとして、print(type(time.gmtime(0)).__name__)を実行するプログラムを作成してください。
期待される出力:
struct_time
ヒント: 台本にある通り、時刻はタプル的な構造体で返ることがあります。
問題30
import timeとして、print(time.gmtime(3600).tm_hour)を実行するプログラムを作成してください。
期待される出力:
1
ヒント: エポックから3600秒後のUTCの時です。
問題31
import timeとして、print(time.strftime('%Y-%m-%d', time.gmtime(0)))を実行するプログラムを作成してください。
期待される出力:
1970-01-01
ヒント: UTC基準で日付文字列を作れます。
問題32
import timeとして、print(time.strftime('%H:%M:%S', time.gmtime(3661)))を実行するプログラムを作成してください。
期待される出力:
01:01:01
ヒント: 秒から時分秒へ整形します。
問題33
import timeとして、print(time.gmtime(86400).tm_mday)を実行するプログラムを作成してください。
期待される出力:
2
ヒント: エポックから1日後は2日です。
問題34
import timeとして、print(time.gmtime(86400).tm_yday)を実行するプログラムを作成してください。
期待される出力:
2
ヒント: 年内の通日です。
問題35
import timeとして、print(time.monotonic() >= 0)を実行するプログラムを作成してください。
期待される出力:
True
ヒント: 単調増加の経過時間(秒)で、負にはなりません。
【基本問題】import … as …(7問)
問題36
import math as mとして、print(m.pow(3, 2))を実行するプログラムを作成してください。
期待される出力:
9.0
ヒント: 別名mでmathを呼びます。
問題37
import random as rとして、r.seed(0)のあとprint(r.randint(1, 1))を実行するプログラムを作成してください。
期待される出力:
1
ヒント: 台本のimport time as tと同じ別名の考え方です。
問題38
import time as tとして、print(t.gmtime(0).tm_year)を実行するプログラムを作成してください。
期待される出力:
1970
ヒント: 長い名前を短くして読みやすくできます。
問題39
import math as mとして、print(m.factorial(4))を実行するプログラムを作成してください。
期待される出力:
24
ヒント: 階乗は標準のmathにあります。
問題40
import math as mとして、print(m.gcd(48, 18))を実行するプログラムを作成してください。
期待される出力:
6
ヒント: 最大公約数です。
問題41
import random as rとして、r.seed(6)のあとprint(r.randint(0, 9))を実行するプログラムを作成してください。
期待される出力:
9
ヒント: 別名でもseedは同じように使えます。
問題42
import math as mとして、print(m.trunc(-3.7))を実行するプログラムを作成してください。
期待される出力:
-3
ヒント: 0に近い方へ切り捨てます。
【応用・間違い探し】注意点・pip・調べ方(8問)
問題43
以下のコードはモジュール名のスペルミスがあります。修正して、random.seed(0)のあと1から3の乱数を1つprintしてください。
import randon
randon.seed(0)
print(randon.randint(1, 3))
期待される出力:
2
ヒント: 正しくはimport randomです。ModuleNotFoundErrorの原因になります。
問題44
台本にあるとおり、外部ライブラリ導入の一例として、コマンド文字列(引用符なし)をそのまま1行printしてください。python -m pip install requestsを表示したいです。
期待される出力:
python -m pip install requests
ヒント: 講義で案内されることが多い、Pythonに紐づけてpipを実行する形です。
問題45
仮想環境の名前として台本で触れたvenvを、そのまま1行printしてください。
期待される出力:
venv
ヒント: プロジェクトごとに依存関係を分けられます。
問題46
import mathとして、標準モジュールが持つ名前__name__をprint(math.__name__)で表示するプログラムを作成してください。
期待される出力:
math
ヒント: 台本の「名前衝突」と対比して、取り込んだモジュールの正体を確認するイメージです。
問題47
import mathとして、平方根と二乗が2に十分近いかmath.iscloseで調べ、print(math.isclose(math.sqrt(2) * math.sqrt(2), 2.0))を実行するプログラムを作成してください。
期待される出力:
True
ヒント: 浮動小数点の比較にはiscloseが便利です。
問題48
import mathとして、ドキュメント調査の練習としてprint(math.log(100, 10))を実行するプログラムを作成してください。
期待される出力:
2.0
ヒント: 底10の対数で100は2乗です。
問題49
以下のコードはimport mathの直後の行に、誤ったインデントがあります。正しく直して、3.0と表示されるようにしてください。
import math
print(math.sqrt(9))
期待される出力:
3.0
ヒント: importの次の行はブロックではないので、余計なインデントを消します。
問題50
import mathとして、モジュールが公開している名前の数が50個より多いかどうかをprint(len(dir(math)) > 50)で調べるプログラムを作成してください。
期待される出力:
True
ヒント: dirは台本情報整理にある調査手段の一つです。
