Python 学習教材
筑波⼤学 システム情報系 三⾕純
最終更新⽇ 2023/4/19(C) 2023 Jun Mitani

図表出典：三⾕純著『Python ゼロからはじめるプログラミング』（翔泳社 刊）

本資料の位置づけ
本資料は『Python ゼロからはじめるプログラミング』
を専⾨学校・⼤学・企業などで教科書として採⽤された教員・指導員を対象に、教科書の内容を解説するための副教材として作られています。
上記に該当する場合は、⾃由にご使⽤ください。
授業の進め⽅などに応じて、改変していただいて結構です。※ このページを削除して構いません
ただし、⺠間企業が商⽤、ビジネス⽬的で利⽤する際には別途許諾が必要ですので、著者までご連絡ください。

出版社
発売⽇
ISBN

： 翔泳社
： 2021/5/24： 9784798169460
2

はじめに

3

プログラミングを学ぶ意義（1/2）• ソフトウェアを使う⽴場から、作る⽴場へ– パソコン、スマートフォンなどで動作するアプリ– TV、エアコン、洗濯機などの電⼦機器の制御– 電⼦決済、電⼦申請、各種のシステム• 個⼈での簡単な開発– 電卓・Excelの⼀歩先– データ処理・データ解析– 個⼈⽤途のアプリ開発• スキルアップ– 情報処理関係の資格取得– プログラミングコンテスト
4

プログラミングを学ぶ意義（2/2）• 実際に開発する⽴場になる予定が無くても– アルゴリズム的思考（ものごとを処理する⼿順に関する合理的な考え⽅）が⾝につく– ソフトウェアの開発の様⼦、動作原理がわかることによる広い視野の獲得– 専⾨⽤語の理解、ITエンジニアとのコミュニケーション– 将来にプログラミングを独習したくなったときに役⽴つ（異なるプログラミング⾔語でも考え⽅の基本は同じ）

5

この講義で学ぶこと• プログラミング⾔語に拠らない、プログラミン
グ全般の基礎知識• プログラミングに関する基本的な⽤語と考え⽅• Pythonというプログラミング⾔語活⽤の基礎

6よりよく学ぶために• 実際に⼿を動かしてプログラムコードを⼊⼒する、⼀部を変更して実験する
いろいろ試してみよう！
• Webで公開されているプログラムコードを動かしてみる、⼀部を変更して実験する• プログラミングコンテストに参加してみる（モチベーションアップ、実⼒向上、他者のコードからの学び）
学習

実践

学習

実践

学習

実践
7

全体の流れ1. Pythonに触れる
2. Pythonの基本
3. 条件分岐と繰り返し
4. 組み込み型とオブジェクト
5. ユーザー定義関数
6. クラスの基本
7. 発展と応⽤

8

第1章 Pythonに触れる

プログラムとは• コンピュータに命令を与えるものが「プログラム」• プログラムを作成するための専⽤⾔語が「プログラミング⾔語」• その中の1つに「Python」がある

10

さまざまなプログラミング⾔語
• C
• C++
• C#
• Perl• PHP• Java

歴史のある⾔語、組み込みプログラム
C⾔語の後継、オブジェクト指向
C++⾔語の後継、⽶マイクソロソフト
スクリプト⾔語、⼿軽な開発
サーバサイド、Webページ⽣成
オブジェクト指向、⼤規模システム• JavaScript ブラウザで動作、動的なWebページ• Python

修得が容易、機械学習分野で普及
11プログラムコードが実⾏されるまで

Pythonはインタプリタ⽅式

12

Pythonのプログラムコード
total = 0
for i in range(1, 101):
total += iprint(total)↑
1から100までの整数を順番に⾜しあげて、その結果を画⾯に表⽰するプログラ
ムのプログラムコード• 半⾓英数と記号で記述する• ⼈が読んで理解できるテキスト形式

13

2通りの実⾏⽅法
1. プログラムコードを1⾏ずつ与え、そのつど実⾏させる
対話モード
2. プログラムコードを記述したファイルを作成し、そのファイルを与えて実⾏させる

14

Pythonに触れてみる

15

Pythonのインストール• Pythonの公式ページ
https://www.python.org/

16

Pythonのインストール

17

Pythonのインストール

18Windows PowerShell の起動

右クリック
19

Python の起動• シェルで「python」と⼊⼒>>>>

Windows PowerShell のプロンプト
対話モードのPythonのプロンプト※ プロンプト：命令を待っている状態を⽰す記号20

対話モードを電卓のように使う
インタラクティブシェル

プロンプト「コンソール」に結果が出⼒される

掛け算

割り算

括弧を使った計算

いろいろ試してみよう！
21

⽂字列を扱う

print('出力する内容')
として、⽂字列を出⼒できる。
⽂字列の前後をシングルクォーテーション（'）、または、
ダブルクォーテーション（"）で囲む

いろいろ試してみよう！
22

print関数

関数

引数

標準出力

print 関数は、引数で与えられたものを標準出⼒に出⼒する働きをする組み込み関数※ print 関数のように、はじめから使える関数を組み込み関数という（⾃分で作った関数はユーザ定義関数）※ 標準出⼒はプログラム実⾏環境によって異なる
23

プログラムコードのルール• 半⾓英数字と半⾓記号を使⽤して記述する（クオーテー
ションで囲んだ⽂字列は例外）• ⼤⽂字と⼩⽂字は区別される○ print('Hello')
× Print('Hello')• 単語や数字、記号の前後には、半⾓の空⽩⽂字を⼊れても⼊れなくてもよい○ 3+4○ 3 + 424

エラー

プログラムコードを適切に実⾏できない場合にエラーが発⽣し、エラーメッセージが表⽰される。
※ エラーメッセージには、発⽣したエラーに関する説明が表⽰される
ので、がんばって読むようにする。
25

インタラクティブシェルの終了
quit() または exit() で終了する。

※ Windows PowerShell を終了するには exit

26

変数

27

変数
「変数」とは、値を⼊れておく⼊れ物
a = 3「変数aに3を代⼊する」

変数名「代⼊」の⼀般的なイメージ

28

代⼊の正確なイメージ
a = 3「変数aに3を代⼊する」「3という値を表すオブジェクトがコンピュータのメモリ上のどこかに保管される。その保管場所を⽰す所在地情報
が、aという名前の箱に⼊れられる」29

代⼊した値を確認する
print 関数で、変数に代⼊されている値を出⼒できる。

※ 変数の値を見ることを「参照する」という複数の変数の値をいっぺんに出⼒できる

インタラクティブシェルでは print 関数を省略できる

いろいろ試してみよう！
30

3つのキーワード
• 変数
• 代⼊
• 参照

31

値を変更する
変数に、あとから別の値を代⼊できる

いろいろ試してみよう！
32

練習問題

33

問題 1
次の⽂章のうち正しいものには○を、正しくないものには×をつけてください。
（1） コンピュータは、Pythonのプログラムコードを直接理解して処理を⾏う。
（2） Pythonのプログラムコードは、⼤⽂字と⼩⽂字の違いを区別しない。
（3） Pythonには、1⾏ずつプログラムコードを⼊⼒して、そのつど実⾏する⽅法がある。
（4） 「 print(こんにちは)」と記述すると、「こんにちは」という⽂字列が出⼒される。
（5） 変数には後から異なる値を代⼊できる。

34

問題 1（解答）
次の⽂章のうち正しいものには○を、正しくないものには×をつけてください。

× （1） コンピュータは、Pythonのプログラムコードを直接理解して処理を⾏う。
× （2） Pythonのプログラムコードは、⼤⽂字と⼩⽂字の違いを区別しない。
○ （3） Pythonには、1⾏ずつプログラムコードを⼊⼒して、そのつど実⾏する⽅法がある。

× （4） 「 print(こんにちは)」と記述すると、「こんにちは」という⽂字列が出⼒される。

○ （5） 変数には後から異なる値を代⼊できる。

35

問題 2
次の⽂章の空欄に⼊れるべき語句を、選択肢から選んでください。
コンピュータが値を記憶しておくための⼊れ物のことを[（1）]という。
[（1）] に値を格納することを[（2） ]という。
[（2）] を⾏うには、記号[（3）]を使⽤する。
[（1）]に[（2）]された値は print 関数を⽤いてコンソールに[（4）] で
きる。
【選択肢】
・代⼊ ・変数・>>> ・=

・オブジェクト・出⼒36

問題 2（解答）
次の⽂章の空欄に⼊れるべき語句を、選択肢から選んでください。
コンピュータが値を記憶しておくための⼊れ物のことを[変数]という。
[変数] に値を格納することを[代⼊]という。
[代⼊] を⾏うには、記号[=]を使⽤する。
[変数]に[代⼊]された値は print 関数を⽤いてコンソールに[出⼒] できる。
【選択肢】
・代⼊ ・変数・>>> ・=

・オブジェクト

・出⼒

37

問題 3
対話モードで、次の計算を実⾏して結果を確認しましょう。

（1） 1 + 2 + 3 + 4（2） 2 + 3 * 2（3） (2 + 3) * 2（4） 10 / 2.5（5） 3 / 038

問題 3（解答）
対話モードで、次の計算を実⾏して結果を確認しましょう。

（1） 1 + 2 + 3 + 4（2） 2 + 3 * 2（3） (2 + 3) * 2（4） 10 / 2.5（5） 3 / 0

39

問題 4
次のようにして、インタラクティブシェルで変数aに10という値を代⼊し、print関数で値を出⼒できます。

（1） 変数bに5という値を代⼊してから、print関数で変数bに代⼊された値を出⼒してください。

（2） 変数cに「Python」という⽂字列を代⼊してから、print関数で変数cに代⼊された値を出⼒してください。

40

問題 4（解答）
次のようにして、インタラクティブシェルで変数aに10という値を代⼊し、print関数で値を出⼒できます。

（1） 変数bに5という値を代⼊してから、print関数で変数bに代⼊された値を出⼒してください。

（2） 変数cに「Python」という⽂字列を代⼊してから、print関数で変数cに代⼊された値を出⼒してください。

41

第2章 Pythonの基本

型と算術演算型• データの種類のことを「型」とよぶ
はじめから準備されている型「組み込み型」

44

type関数による型の確認
type(値) または type(変数名) で型を確認できる

いろいろ試してみよう！
45

算術演算
• 覚えるべき⽤語

演算子の種類文（代入文）

リテラル（プログラムコード中に記述される数値）

46

変数を含む算術演算
式に変数名が含まれる場合は、変数に代⼊されている値が使⽤される(変数aの値)+3 が変数bに代⼊される(変数aの値)+3 が変数aに代⼊される
つまりaの値が3増える
47算術演算の短縮表現

短縮

加算代⼊

いろいろ試してみよう！
48

数値の型
プログラムコードへの記述のしかたで、型が異なる。
・⼩数点を含まない → int型
・⼩数点を含む → float型

いろいろ試してみよう！
49

演算と数値の型
int型どうしの加算・減算・乗算 → int型
Int型どうしの除算 → float型
float型を含む演算 → float型

いろいろ試してみよう！
50

数値の型変換• int 型 → float 型
a = float(100)変数aは float 型になる

• float 型 → int 型
a = int(9.6)

変数aは int 型になる
⼩数点以下は切り捨て

いろいろ試してみよう！
51

⽂字列とリストの扱い

⽂字列の扱い• +演算⼦による⽂字列の連結
a = 'AAA' + 'BBB'
a = 'AAA'b = 'BBB'c = a + b

• *演算⼦による連結の繰り返し
a = 'ABC' * 3'ABCABCABC'になる
いろいろ試してみよう！
53

数値→⽂字列の変換
数値を⽂字列のようには扱えない

× a = 500 + '円'
str(数値)で⽂字列に変換する○ a = str(500) + '円'

いろいろ試してみよう！
54

変数の値の埋め込み
数値を⽂字列に変換してから連結

フォーマット⽂字列の使⽤して簡潔に記述できる

f'⽂字列' とすると、⽂字列に含まれる {変数名} 部分が変数の値に置き換わる
いろいろ試してみよう！
55

フォーマット⽂字列の活⽤
フォーマット⽂字列
f'⽂字列' とすると、⽂字列に含まれる {変数名} 部分が変数の値に置き換わる{変数名} 部分に式を⼊れることもできる

a = 5
b = 550
print(f'1つ{a}円です。{b}個で{a * b}円です')

いろいろ試してみよう！
56

⽂字列→数値の変換
⽂字列を数値のようには扱えない

a = '500'
b = a * 2

⽂字列bの値は'500500'になる

int(⽂字列)で整数に変換する

a = '500'
b = int(a) * 2

bの値は1000になる※ ⼩数点を含む数値に変換するときは float(⽂字列)

いろいろ試してみよう！
57

len関数による⽂字列の⻑さの取得
len(⽂字列)

で⽂字列の⻑さ（⽂字数）を取得できる>>> len('Hello')
5>>> a = 'Python'>>> len(a)6

いろいろ試してみよう！
58

数値の指数表現

59

リスト
リストを使って、複数の値をまとめて管理できる

a = [10, 20, 30, 40, 50]
リストに格納された要素には、インデックスを使ってアクセスする>>> print(a[0])10>>> print(a[1])20>>> print(a[4])50※ インデックスは0から始まる

先頭の要素
2番⽬の要素5番⽬の要素いろいろ試してみよう！
60

マイナスのインデックス
a = [10, 20, 30, 40, 50]
インデックスにマイナスの値も使える>>> print(a[-1])50>>> print(a[-2])40>>> print(a[-5])
10

末尾の要素
後ろから2番⽬の要素
後ろから5番⽬の要素

いろいろ試してみよう！
61

リスト内の値の変更
インデックスを指定して値を変更できる>>> a = [10, 20, 30, 40, 50]>>> print(a)リストの全要素を出⼒[10, 20, 30, 40, 50]>>> a[0] = 99>>> print(a)[99, 20, 30, 40, 50]

先頭の要素を99に変更>>> a[-1] = 'A'>>> print(a)[99, 20, 30, 40, 'A']

⽂字列にもできる

いろいろ試してみよう！
62

リストの要素数の確認
len関数でリストの要素数を取得できる>>> a = [10, 20, 30, 40, 50]>>> len(a)5

いろいろ試してみよう！
63モジュールの利⽤

64

モジュールの使⽤• モジュールとは各種の機能を管理する単位• 必要に応じてモジュールを読み込んでプログラ
ムを作る（「モジュールをインポートする」という）import モジュール名• mathモジュールをインポートすると、sin, cosなどの関数を使⽤できるようになる
import math65

mathモジュールに含まれる関数・定数

66

mathモジュールの利⽤
mathモジュールのインポート

import mathmathモジュールに含まれる関数の利⽤

math.関数名(引数)いろいろ試してみよう！
67mathモジュールの利⽤
mathモジュールに含まれる定数の利⽤

math.定数名>>> import math>>> print(math.pi)
3.141592653589793

いろいろ試してみよう！
68randomモジュールの利⽤• random モジュールに含まれる関数

randint(a, b)

a以上b以下のランダムな整数を返す>>> import random>>> random.randint(1, 6)
4
実⾏のたびに異なる値が出⼒される
69

randomモジュールの利⽤

いろいろ試してみよう！
70

モジュールに別名をつけて使う>>> import math as m>>> print(m.pi)
3.141592653589793

mathモジュールの別名をmとする
別名を使って記述

モジュール名が⻑いときに便利71ドキュメントを読む• Pythonの標準ライブラリのドキュメント
https://docs.python.org/ja/3/library/index.html

72モジュールに含まれる関数を調べる「標準ライブラリ」のページ右上の「モジュール」のリンクから「math」を探してみよう。
ブラウザの「検索」機能も使ってみよう（[Ctrl]+[F]）いろいろ試してみよう！
73

練習問題

74

問題 1
以下の記述について、正しいものには○を、誤りのあるものには×をつけてください。
（1） ⼀度int型の値を代⼊した変数aに対して、後から⽂字列を代⼊することはできない。
（2） int型の値とfloat型の値を加算するときには、その前にint型の値をfloat型に型変換しておく必要がある。
（3） int型とfloat型の値を含む算術演算の結果はfloat型になる。
（4） a = int(3.8)と記述した場合、変数aの値は4になる。

75

問題 1（解答）以下の記述について、正しいものには○を、誤りのあるものには×をつけてください。

× （1） ⼀度int型の値を代⼊した変数aに対して、後から⽂字列を代⼊することはできない。

× （2） int型の値とfloat型の値を加算するときには、その前にint型の値をfloat型に型変換しておく必要がある。

○ （3） int型とfloat型の値を含む算術演算の結果はfloat型になる。
× （4） a = int(3.8)と記述した場合、変数aの値は4になる。
（3になる）76

問題 2次の値を求める式を書いてください。
（1） 100を9で割った商（2） 1000を7で割った余り（3） 3の5乗77

問題 2 （解答）
次の値を求める式を書いてください。
（1） 100を9で割った商
100 // 9（2） 1000を7で割った余り
1000 % 7（3） 3の5乗
3 ** 578

問題 3
次の命令⽂を、加算代⼊（+=）、減算代⼊（-=）、乗算代⼊（*=）、除算代⼊（/=）、剰余代⼊（%=）の演算⼦を使って、短い表現に書き換えてください。
（1） a = a + 5（2） b = b – 6（3） c = c * a（4） d = d / 3（5） e = e % 2

79

問題 3 （解答）
次の命令⽂を、加算代⼊（+=）、減算代⼊（-=）、乗算代⼊（*=）、除算代⼊（/=）、剰余代⼊（%=）の演算⼦を使って、短い表現に書き換えてください。
（1） a = a + 5
a += 5（2） b = b – 6
b -= 6（3） c = c * a
c *= a（4） d = d / 3
d /= 3（5） e = e % 2
e %= 280

問題 4次のプログラムコードを実⾏した後の変数aの値を答えてください（対話モードで実⾏するときに表⽰されるプロンプト「>>>」は省略しています）。
（1） a = 3a *= 3（2）b = 2
a = b * b（3）

a = int(1.9)（4）

x = 'XXX'
y = 'YYY'
a = x + y81

問題 4 （解答）
次のプログラムコードを実⾏した後の変数aの値を答えてください（対話モードで実⾏するときに表⽰されるプロンプト「>>>」は省略しています）。
（1） a = 3a *= 39（2）

b = 2
a = b * b4（3）

a = int(1.9)

1（4）

x = 'XXX'
y = 'YYY'
a = x + y

XXXYYY82

問題 5「私は21歳です。」という⽂字列が出⼒されるように作成
した次のプログラムコードは、実⾏するとエラーが発⽣します。適切に動作するように修正してください。

83

問題 5 （解答）「私は21歳です。」という⽂字列が出⼒されるように作成
した次のプログラムコードは、実⾏するとエラーが発⽣します。適切に動作するように修正してください。

age = 21
print('私は' + str(age) + '歳です。')※ フォーマット文字列を使う場合

age = 21
print(f'私は{age}歳です。')
84

問題 6
mathモジュールを利⽤して、cos(120°)の値を求めてください。

85

問題 6 （解答）mathモジュールを利⽤して、cos(120°)の値を求めてください。
import mathprint(math.cos(math.radians(120)))※ 別解import mathprint(math.cos(2 / 3 * math.pi))

86

第3章 条件分岐と繰り返し

⼀歩前に進むための準備

ファイルに保存したプログラムコードの実⾏(1/3)• プログラムコードをファイルに保存して実⾏する利点
・⼀度作成したプログラムコードを繰り返し実⾏できる
・後から⼀部分だけ修正できる・プログラムコードを配布できる
・⼤きなプログラムを作成できる• 作成するファイル
・テキストファイル• ⽂字コード：UTF-8• 拡張⼦：.py89

ファイルに保存したプログラムコードの実⾏(2/3)• プログラムコードを記述したファイルの作成

Visual Studio Code

サクラエディタ

メモ帳

90

ファイルに保存したプログラムコードの実⾏(3/3)
1. Windows PowerShell で保存したフォルダへ移動

2. プログラムの実⾏＞ python ファイル名 と⼊⼒

91

input関数を使ったキーボードからの⼊⼒の受け取り

いろいろ試してみよう！
92コメント⽂# 記号に続けてコメント（メモ）を記述できる。
# 記号の後ろはプログラムに影響を与えない※ プログラムコードの一部を一時的に無効にする用途でも使用できる
93

インデントとブロック• インデント
⾏頭から最初の⽂字までの空⽩
空⽩⽂字4つ分を1つの単位とする• ブロックインデントによってプログラムコードを1つのまとまりにしたもの

94

条件分岐と論理演算⼦

if⽂による条件分岐

構文

コロンを付ける

if 条件式:
処理内容
インデント

条件を満たすとき（条件式の値が真（True）のとき）
処理内容が実⾏される。
そうでないときは、実⾏されない。
96

if⽂による条件分岐

いろいろ試してみよう！
97

if⽂による条件分岐98条件式と関係演算⼦

99

if〜else⽂による条件分岐
構文
インデント

コロンを付ける

if 条件式:
処理内容1
コロンを付ける
else:
処理内容2
インデント

条件を満たすとき（条件式の値が真（True）のとき）
処理内容1が実⾏される。
そうでないときは、
処理内容2が実⾏される。
100

if〜else⽂による条件分岐

いろいろ試してみよう！
101

if〜elif〜else⽂による条件分岐
構文

if 条件式1:
処理内容1
elif 条件式2:
処理内容2
else:
処理内容3
条件式1 が True のとき 処理内容1 が実⾏される。
そうでないとき、条件式2 が True のとき 処理内容2 が実⾏される。
それ以外の時には、処理内容2が実⾏される。
102

if〜elif〜else⽂による条件分岐

いろいろ試してみよう！
103

三項演算⼦条件式 が True のとき、値1 になる。
そうでないとき、値2 になる。
例

ｃの値は a になる（もし a > b なら）。そうでなけば b※ 英語の⽂章のようにして左から順番に読んでいくとわかりやすい104論理演算⼦による条件の組み合わせ「変数aが10で、かつ変数bが5である」

a == 10 and b == 5
「変数aが10である、または変数bが5である」

a == 10 or b == 5105

論理演算⼦106

論理演算⼦による条件の組み合わせ

いろいろ試してみよう！
107

演算⼦の優先度とカッコ

108

⽐較演算⼦の連結※ 左から順番に評価される（5 < a が評価されてから a < 10 が評価される）109

if⽂と真偽値※ a が True のときだけ処理内容が実⾏される※ a が False のときだけ処理内容が実⾏される110

処理の繰り返しwhile⽂による処理の繰り返し
構文

while 条件式:
処理内容
※ 条件式の値が True の間、処理内容を繰り返す

112

処理の流れ113

while⽂の例

いろいろ試してみよう！
114

for⽂による処理の繰り返し
構文

for 変数 in 反復可能オブジェクト:
処理内容※ 「反復可能オブジェクト」から1つずつ要素をとりだして「変数」に代⼊。処理内容を繰り返す。

115

for ⽂の処理の流れ

116

rangeオブジェクト

117

range オブジェクト

いろいろ試してみよう！
118

ループ処理の流れの変更
break ループの処理を中断する

119

ループ処理の流れの変更
continue ループ内の処理をスキップする

120

ループ処理のネスト

いろいろ試してみよう！
121

練習問題

122

問題 1
次の条件を、関係演算⼦を使って記述してください。
問題例 aはbより⼤きい
解答例 a > b（1） aはbと等しい（2） aはbと等しくない（3） bはcより⼩さい（4） aはb以下である（5） cはb以上である

123

問題 1（解答）
次の条件を、関係演算⼦を使って記述してください。
問題例 aはbより⼤きい
解答例 a > b（1） aはbと等しい（2） aはbと等しくない（3） bはcより⼩さい（4） aはb以下である（5） cはb以上である

a == ba != bb < ca <= bc >= b124

問題 2
次のプログラムコードにある空欄を埋めて、変数aの値が3で割り切れるときには「3で割り切れます」、そうでないときには「3で割り切れません」とコンソールに出⼒するプロ
グラムを完成させてください。

125

問題 2（解答）
次のプログラムコードにある空欄を埋めて、変数aの値が3で割り切れるときには「3で割り切れます」、そうでないときには「3で割り切れません」とコンソールに出⼒するプロ
グラムを完成させてください。

if a % 3 == 0:
print('3で割り切れます')
else:
print('3で割り切れません')126

問題 3-1
10から20までの整数を順番に⾜し合わせて、その結果を出⼒するプログラムを作ってください。
ただし、while⽂を使った場合とfor⽂を使った場合の2つのプログラムコードを作成してください。

127

問題 3-1（解答）10から20までの整数を順番に⾜し合わせて、その結果を出⼒するプログラムを作ってください。
ただし、while⽂を使った場合とfor⽂を使った場合の2つのプログラムコードを作成してください。
while 文for 文

total = 0i = 10while i < 21:
total += ii += 1
print(total)

total = 0
for i in range(10, 21):
total += iprint(total)128

問題 3-2
問題3-1で作成したfor⽂を使ったプログラムコードに対して、15だけは⾜し合わせしないように、変更してください。
ただし、continue 命令を使ってください。
for 文

total = 0
for i in range(10, 21):
total += iprint(total)129

問題 3-2（解答）問題3-1で作成したfor⽂を使ったプログラムコードに対して、15だけは⾜し合わせしないように、変更してください。
ただし、continue 命令を使ってください。
for 文

total = 0
for i in range(10, 21):if i == 15:
continue
total += iprint(total)

130

問題 4
次の条件を、論理演算⼦と関係演算⼦を使って記述してください。
（1） aは5または8と等しい（2） aとcは両⽅ともb以下（3） aは1より⼤きくて10より⼩さいが、5ではない（4） aはbまたはcと等しいが、aとdは等しくない

131

問題 4 （解答）
次の条件を、論理演算⼦と関係演算⼦を使って記述してください。
（1） aは5または8と等しい
a == 5 or a == 8（2） aとcは両⽅ともb以下
a <= b and c <= b（3） aは1より⼤きくて10より⼩さいが、5ではない
a > 1 and a < 10 and a != 5（4） aはbまたはcと等しいが、aとdは等しくない(a == b or a == c) and a != d
132

問題 5
次に⽰すものは、scoresという変数名のリストに格納されている要素のうち、値が60より⼤きいものの数をカウント
するプログラムコードです。空欄を埋めて、完成させてくだ
さい。

133

問題 5（解答）
次に⽰すものは、scoresという変数名のリストに格納されている要素のうち、値が60より⼤きいものの数をカウント
するプログラムコードです。空欄を埋めて、完成させてください。

if i > 60:
count += 1

134

第4章 組み込み型とオブジェクト

オブジェクト指向

インスタンスの管理とID• Python はオブジェクト指向⾔語
1つ1つのオブジェクトにIDを割り当てて管理
int型のインスタンス

コンピュータの中のオブジェクトのイメージ

3'Hello'ID: 140712048646084

ID: 140712048645920

100

str型のインスタンス

8
ID: 140712048646020'ABC'
ID: 140712048646104

ID: 140712048645856
137

代⼊の正確なイメージ
a = 3「変数aに3を代⼊する」「3という値を表すオブジェクトがコンピュータのメモリ上のどこかに保管される。その保管場所を⽰す所在地情報
が、aという名前の箱に⼊れられる」
138

代⼊の正確なイメージ

× まちがったイメージ
a = 2
b = a

○ 正しいイメージ139

インスタンスの同値性と同⼀性「同値」と「同⼀」は異なる概念※ 「==演算⼦」は同値性を、「is 演算⼦」は同⼀性を判定する

140

クラスとインスタンスとメソッド• インスタンス
オブジェクトのこと• クラス
インスタンスの種類（型）のこと• メソッドクラスごとに定義された機能（関数のようなもの）
例1： 'Hello' というオブジェクト（⽂字列）はstrクラスのインスタンスで、lower()やcount()などのメソッドを持つ
例2：[10,20,30]というオブジェクト（リスト）はlistクラスのインスタンスで、reverse()やpop()などのメソッドを持つ141

組み込み型• Pythonに最初から準備されている型（クラス）• これまでに学習したもの
int型、float型、str型、list型• これから学習するもの
タプル、辞書、セット※ いずれも複数のオブジェクトを格納するために使⽤する142

メソッドの呼び出しプログラムコードでの表記
オブジェクト. メソッド名( )例>>> 'Hello, Python'.count('o')
2オブジェクト

メソッド名143

strクラスのメソッド
strクラスには⽂字列を操作するメソッドが定義されている
count(x)xが⽂字列にいくつ含まれるかを返す
lower()
すべての⽂字を⼩⽂字にした⽂字列を返す
upper()
すべての⽂字を⼤⽂字にした⽂字列を返す
split(x)⽂字列をxで分割した結果をリストで返す
replace(x, y) ⽂字列に含まれるxをyに置換した結果を返す>>> 'Hello, Python'.count('o')
2>>> 'PYTHON'.lower()
python>>> 'python'.upper()PYTHON>>> '2021-12-31'.split('-')['2021', '12', '31']>>> 'Java言語'.replace('Java', 'Python')'Python言語'

144strクラスのformatメソッド
⽂字列に含まれる{} への変数の値の埋め込み{}の中でのインデックスの指定

145

strクラスのformatメソッド{}の中での書式を指定できる{インデックス番号:書式} のように記述する（インデックス番号は省略可）
書式の例.3f ⼩数点以下3桁まで出⼒,
3桁ごとにカンマで区切る>5 5⽂字分の幅に右寄せする>>> '1/3={:.3f}'.format(1/3)
1/3=0.333>>> '{:,}円'.format(1000000)
1,000,000円>>> '{:>5}'.format(123)123
いろいろ試してみよう！
146

in 演算⼦

⽂字列1 が ⽂字列2 に含まれると True、
そうでないなら False になる>>> 'cat' in 'catch'
True>>> 'Z' in 'ABCDE'
False>>> s1 = 'py'>>> s2 = 'python'>>> s1 in s2
True
いろいろ試してみよう！
147

リストとタプル

listクラスの主なメソッド← a はListクラスのインスタンス

149

メソッドを使ったリストの操作>>> a = [10, 20, 30, 40]>>> a.append(100)>>> a[10, 20, 30, 40, 100]>>> a.pop()
100
>>> a
[10, 20, 30, 40]>>> a.reverse()>>> a[40, 30, 20, 10]>>> a.index(20)2

いろいろ試してみよう！
150

メソッド以外のリストの操作>>> a = [10, 20, 30, 40]>>> del a[1]>>> a[10, 30, 40]>>> a = a + [0, 1]>>> a[10, 30, 40, 0, 1]>>> 1 in a
True>>> 2 in a
False>>> len(a)5>>> sorted(a)[0, 1, 10, 30, 40]>>> sorted(a, reverse=True)[40, 30, 10, 1, 0]

いろいろ試してみよう！
151

内包表記
for⽂を⽤いてリストの要素を作成することができる
構文例>>> data = [2**n for n in range(1, 11)]>>> data[2, 4, 8, 16, 32, 64, 128, 256, 512, 1024]>>> [str(n)+'月' for n in range(1, 13)]['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月']
いろいろ試してみよう！
152

if 構⽂を含む内包表記
構文例

いろいろ試してみよう！
153

リストを含むリスト

154

タプル
• リスト同様に複数の要素を格納する（コレクションとよぶ）
リスト

タプル

>>> a = [1, 2, 3, 4]>>> a[1, 2, 3, 4]>>> a[0]1>>> a[0] = 99>>> a[99, 2, 3, 4]>>> a = (1, 2, 3, 4)>>> a(1, 2, 3, 4)>>> a[0]1>>> a[0] = 99
エラー

タプルは要素の値を変更できない155

( )の省略とアンパック代⼊
タプルの作成時に ( )を省略できる>>> a = 1, 2, 3, 4>>> a
(1, 2, 3, 4)
複数の変数へ1つずつ値を代⼊できる（アンパック代⼊とよぶ）>>> a, b, c = (1, 2, 3)
>>> a
1
>>> b
2
>>> c
3

複数の変数への⼀括代⼊>>> x, y, z = 1, 3, 9
>>> x
1
>>> y
3
>>> z
9

いろいろ試してみよう！
156

辞書と集合（セット）辞書• キーと値のペアを格納• インデックスの代わりにキーを使って値を取得できる構文>>> info = {'firstname':'太郎', 'lastname':'山田', 'address': '茨
城県つくば市 99-99'}>>> info['firstname']太郎

158

辞書の要素の取得
keysメソッドによるすべてのキーの取得

valuesメソッドによるすべての値の取得

itemsメソッドによるすべての要素（キーと値のペアを格納したタプル）の取得
いろいろ試してみよう！
159

辞書の操作>>> info = {'firstname':'太郎', 'lastname':'山田','address': '茨城県つくば市 99-99'}>>> info.get('firstname')太郎>>> info.get('tel')None>>> info['tel'] = '090-000-0000'>>> info.get('tel')'090-000-0000'>>> del info['tel']>>> len(info)
3>>> 'age' in info
False>>> 'firstname' in info
True
いろいろ試してみよう！
160

辞書の要素の並べ替え
sorted 関数を使うと、辞書の要素を昇順に取得できる（キーを基準）

sorted 関数に key=lambda x:x[1] を指定すると、値を基準とした昇順に取得できる

161

セット
• 値を格納• 要素の重複を許さない。順序が無い。
構文>>> a = {'A', 'B', 'C', 'D'}>>> a{'A', 'B', 'C', 'D'}

リストは [1, 2, 3]
タプルは (1, 2, 3)
セットは {1, 2, 3}>>> a = {'A', 'B', 'B', 'C', 'C', 'C'}>>> a{'A', 'B', 'C'} ←それぞれの値が1つずつ含まれる

162

セットの操作>>> data = [1, 2, 3]>>> a = set(data)>>> a{1, 2, 3}>>> set1 = {'A', 'B', 'C'}>>> set2 = {'B', 'C'}>>> set1.issubset(set2)
False>>> set2.issubset(set1)
True

いろいろ試してみよう！
163

セットどうしの演算（集合演算）

164

セットどうしの演算（集合演算）>>> set1 = {'A', 'B', 'C'}>>> set2 = {'A', 'B', 'D'}>>> set1 | set2{'D', 'B', 'C', 'A'}>>> set1 & set2{'A', 'B'}>>> set1 - set2{'C'}>>> set1 ^ set2{'C', 'D'}

いろいろ試してみよう！
165

基本型の性質• 変更可能（ミュータブル）• 反復可能（イテラブル）• 順序を持つ（シーケンス）

基本型の性質

for⽂で要素を1つ1つ参照できる
インデックスで要素を参照できる167

ミュータブルな型とイミュータブルな型• ミュータブルな型：値を変更できるlist型、dict型、set型（リスト、辞書、セット）• イミュータブルな型：値を変更できない
int型、float型、bool型、str型、tuple型（数値、真偽値、⽂字列、タプル）※ インスタンス（オブジェクト）そのものを取り換えないと値を変えられない168ミュータブルな型とイミュータブルな型>>> a = 2>>> id(a)140735461447360>>> a = 3>>> id(a)140735461447392

変数aの値を変える↓
変数aが参照するオブジェクトが別のものに替わる>>> a = [1, 2, 3]>>> id(a)2103730545344>>> a[0] = 3>>> id(a)2103730545344

変数aの要素の値を変える↓
変数aが参照するオブジェクトは変
わらない
169

反復可能なオブジェクト
for a inprint(a)

反復可能なオブジェクト（イテラブルなオブジェクト）:※ for 構⽂で1つ1つの要素を参照できる
⽂字列、セット、タプル、リスト、辞書（str型、tuple型、list型、dict型、set型）>>> for a in 'Python':...
print(a)>>> for a in {1, 2, 3}:...
print(a)

P
y
t
h
o
n

1
2
3

170

順序を持つオブジェクト
a[0], a[1]のようにインデックスで要素を参照できる（シーケンス型のオブジェクト）
⽂字列、リスト、タプル（str型、list型、 tuple型）>>> a = 'Python'>>> a[2]'t'>>> a = (1, 2, 3)>>> a[2]3171スライス式
スライス式でインデックスの範囲を指定できる[start:end] ← start ～ (end-1)の範囲>>> a = 'Python'>>> a[1:3]'yt'>>> a = (0, 1, 2, 3, 4)>>> a[2:5](2, 3, 4)[start:end] start または end を省略できる。
省略した場合は、それぞれ0と（要素数）を指定したものとみなされる。
>>> a = 'Python'>>> a[:3]'Pyt'>>> a = (0, 1, 2, 3, 4)>>> a[2:](2, 3, 4)172

基本型の性質

for⽂で要素を1つ1つ参照できる
インデックスで要素を参照できる
173

練習問題

174

問題 1
次の⽂章の空欄に⼊れるべき語句を答えてください。
•

Pythonは [ (1) ] 指向型の⾔語であり、クラスは[ (1) ]の属性や機能を定義したものです。

•'Hello'や'Python'といった⽂字列はstr型のオブジェクトですが、別の表現をすると、strクラスの [ (2) ] である、ということができます。

•

strクラスには、⽂字列に含まれる⽂字を⼩⽂字に変換するlowerという[ (3) ]があります。

•

a == bという式の値がTrueであったとき、aとbは [ (4) ] であるといい、a is bという式の値がTrueであったとき、aとbは [ (5) ] であるといいます。
175

問題 1（解答）
次の⽂章の空欄に⼊れるべき語句を答えてください。
•

Pythonは [ オブジェクト ] 指向型の⾔語であり、クラスは[オブジェクト ]の属性や機能を定義したものです。

•'Hello'や'Python'といった⽂字列はstr型のオブジェクトですが、別の表現をすると、strクラスの [ インスタンス ] である、ということが
できます。

•

strクラスには、⽂字列に含まれる⽂字を⼩⽂字に変換するlowerという[メソッド]があります。

•

a == bという式の値がTrueであったとき、aとbは [ 同値 ] であるといい、a is bという式の値がTrueであったとき、aとbは [ 同⼀ ] であるといいます。
176

問題 2
n 番⽬の要素の値がn * nであるようなリストを、内包表記を使って作成してください。ただし、要素数は10とします。

177

問題 2（解答）n 番⽬の要素の値がn * nであるようなリストを、内包表記を使って作成してください。ただし、要素数は10とします。
[n * n for n in range(1, 11)]

178

問題 3
次の説明⽂が、リスト、タプル、辞書、セットのいずれに該当するか、答えてください（複数が該当する場合もあります）。
（1） キーと値のペアを格納する（2） 要素の値の重複が許されない（3） 要素の値を変更できない（4） インデックスで要素にアクセスできる179

問題 3（解答）
次の説明⽂が、リスト、タプル、辞書、セットのいずれに該当するか、答えてください（複数が該当する場合もあります）。
（1） キーと値のペアを格納する
辞書（2） 要素の値の重複が許されないセット（3） 要素の値を変更できない
タプル（4） インデックスで要素にアクセスできる
リストとタプル180問題 4
下記の表は、基本型が、どのような性質を持つかをまとめたものです。空欄に対して、○か×を⼊れてください。

181

問題 4（解答）
下記の表は、基本型が、どのような性質を持つかをまとめたものです。空欄に対して、○か×を⼊れてください。

×

×

×

×
○
×
○
○

○
○
○
○
○

○
○
○
×
×

for文で
使用可

インデックスで182
参照可第5章 ユーザ定義関数

関数

関数とは
• 複数の命令⽂を1つにまとめて名前を付けたもの• 何度も使う命令⽂の集まりを管理したり、プログ
ラムコードの⾒通しをよくするのに便利な仕組み• 組み込み関数：はじめから準備されている関数
例： print関数、 id関数、len関数、del関数• ユーザー定義関数：⾃分で新しく定義する関数
構文：関数の定義

185ユーザー定義関数
say_hello 関数の定義

say_hello 関数の呼び出し
say_hello 関数の呼び出し

実行結果

186

関数呼び出しの処理の流れ

187

関数の定義位置• 関数の定義は、関数の呼び出しの前に⾏われている必要がある

188

関数の呼び出しの階層

189

変数のスコープ
変数には参照できる範囲（スコープ）がある
ローカル変数：関数の中でのみ使⽤できる
def function_a():a = 10関数の中でのみ参照できる
print(a)print(a)エラーになるグローバル変数：プログラムコード全体で使⽤できる
a = 10プログラムコード全体で参照できる

def function_a():print(a)190

変数のスコープ• 関数の中でグローバル変数の値を変更したい場
合は global キーワードを使⽤する
global宣言がある場合

global宣言がない場合

a = 10a = 10def function_a():global a
グローバル変数a = 5

def function_a():
ローカル変数a = 5function_a()print(a)function_a()print(a)

実行結果

実行結果

5

10
191

関数の引数引数• 関数を呼び出すときに、関数に対して値を渡すことができる。
• 渡される値を引数という。

193

引数のある関数
関数の後ろのカッコ（）の中の変数で値を受け取る

受け取った値を使用する

実行結果

値3を引数にして関数を呼び出す
値10を 〃

194

引数が2つある関数

引数をカンマ区切りで並べる（引数列とよぶ）

2つの値を引数にして関数を呼び出す
変数名を指定した呼び出し（キーワード引数）

195

デフォルト引数
関数の定義※ デフォルト値のある引数は、そうでない引数よりも引数列の後⽅に書く必要がある。

引数列に「変数名=デフォルト値」を記述しておくと、関数を呼び出すときに、引数を省略できる関数の呼び出し例（2番⽬の引数を省略できる）

関数の呼び出し例（2つの引数を指定することもできる）

196

可変⻑引数• 可変⻑引数：引数の数に制限がない
タプルで複数の値を受け取る

辞書で複数のキーと値のペアを受け取る

def func_a(*args):
for a in args:
print(a)def func_b(**kwargs):
for k, v in kwargs:
print(k, v)

func_a(1, 2)
func_a(1, 2, 3, 4)

func_b(a=1, b=2)
func_b(c=3, d=4, e=5, f=6)

197

ドキュメントでの関数の書式※ Python標準ライブラリのドキュメントで使⽤されている表記[ ] 内の引数は省略できる

198

関数の戻り値戻り値• 関数で処理した結果の値を、呼び出し元に戻すことができる。
• 戻される値のことを「戻り値」という。

関数

200

戻り値のある関数• 値を戻すには、関数の中に
return 値

と記述する

201

真偽値を戻り値とする関数

202

複数の値を戻す• 複数の値を戻したい場合は、タプルを使⽤する

203

⾼階関数とラムダ式

⾼階関数• 関数もオブジェクト• ⾼階関数とは、関数を引数で受け取る関数
関数を受け取る受け取った関数を使う

関数を引数にしている
205ラムダ式（lambda式）• 関数の表記をシンプルにしたもの
構文

関数

ラムダ式

206

ラムダ式（lambda式）

ラムダ式を使うことで簡潔に記述できる

207

練習問題

208

問題 1
次の⽂章の空欄に⼊れるべき語句を、選択肢から選んでください。
• 関数を呼び出すときに関数に渡す値のことを[（1）]といい、関数から戻される値のことを[（2）]という。
• 関数に複数の値を渡すために、[（1）]をカンマ区切りで並べたものを[（3）]と呼ぶ。
• [（1）]のうち、変数の名前を指定したものを[（4）] 、値が渡されなかった場合に設定されるデフォルト値が決まっているものを[（5）]、個数が決まっていないものを[（6）]という。
【選択肢】
・戻り値 ・可変⻑引数 ・引数・デフォルト引数
・引数列・キーワード引数209

問題 1（解答）
次の⽂章の空欄に⼊れるべき語句を、選択肢から選んでください。
• 関数を呼び出すときに関数に渡す値のことを[ 引数 ]といい、関数から戻される値のことを[ 戻り値 ]という。
• 関数に複数の値を渡すために、[ 引数 ]をカンマ区切りで並べたもの
を[ 引数列 ]と呼ぶ。
• [ 引数 ]のうち、変数の名前を指定したものを[ キーワード引数 ] 、値が渡されなかった場合に設定されるデフォルト値が決まっているもの
を[ デフォルト引数 ]、個数が決まっていないものを[ 可変⻑引数 ]と
いう。
【選択肢】
・戻り値 ・可変⻑引数 ・引数・デフォルト引数
・引数列・キーワード引数

210

問題 2
次のようなfunc関数が定義されています。

次のうち、func関数を正しく呼び出せるものを選んでください。
（1） func()（2） func(5)（3） func(5, 10)（4） func(a = 5)
（5） func(b = 10)（6） func(5, b = 10)（7） func(b = 10, a = 5)
211

問題 2 （解答）
次のようなfunc関数が定義されています。

次のうち、func関数を正しく呼び出せるものを選んでください。
（1） func()○（2） func(5)○（3） func(5, 10)○（4） func(a = 5)
（5） func(b = 10)○（6） func(5, b = 10)○（7） func(b = 10, a = 5)
212

問題 3
各問いの条件に合う関数を作成してください。プログラムコードには、その関数を呼び出す命令⽂を含めてください。関数に戻り値がある場合
は、受け取った戻り値を出⼒するようにしてください。引数の値は⾃由に決めてかまいません。

213

問題 3-1

214

問題 3-1（解答）def print_hello(count):
for i in range(0, count):
print('Hello')
print_hello(3)215

問題 3-2

216

問題 3-2 （解答）def get_rectangle_area(width, height):
return width * heightprint(get_rectangle_area(10, 5))217

問題 3-3

218

問題 3-3 （解答）def get_message(name='名無し'):
return f'こんにちは{name}さん'
print(get_message())
print(get_message('山田'))219

問題 3-4

220

問題 3-4 （解答）def get_absolute_value(value):if value < 0:return -value
return value
print(get_absolute_value(5.2))
print(get_absolute_value(-3.3))
221

問題 3-5

222

問題 3-5 （解答）def get_tail(*args):
return args[-1]print(get_tail(3, 5, 9, 2))223

第6章 クラスの基本新しいクラスを作る

クラスとは• クラスとは、オブジェクトの種類のこと
例： strクラス、listクラス、dictクラス
クラスはオブジェクトがどのような情報を持つか
どのような機能を持つかを定義する
メソッド

インスタンス変数

226

これから扱うクラスとインスタンスの例

インスタンス

クラス
学⽣証
学籍番号
名前

学⽣証 a
属性
インスタンス変数

学籍番号=1234

学⽣証 b

名前='鈴⽊太郎'

学籍番号=1235
名前='佐藤花⼦'

227

クラスの定義
構文※ pass は何もしない命令

インスタンスが生成されるイメージ

228

初期化メソッド• 初期化メソッド
インスタンスが⽣成されるときに⾃動的に実⾏されるメソッド（これまでに学習した関数のようなもの）
構文

229

インスタンス変数• インスタンス変数
個々のインスタンスごとの値を持つ変数

インスタンス変数230

インスタンス変数の参照

231

初期化メソッドの引数

232

クラス変数とインスタンス変数233

メソッドの定義

これから扱うクラスとインスタンスの例

インスタンス

クラス
学⽣証
学籍番号
名前
情報出⼒

学⽣証 a
属性
インスタンス変数機能
メソッド

学籍番号=1234

学⽣証 b

名前='鈴⽊太郎'

学籍番号=1235

情報出⼒

名前='佐藤花⼦'
情報出⼒

235

メソッド
• メソッドとは
インスタンスが⾏う命令⽂をまとめたもの（関数のようなもの）
第⼀引数は⾃分⾃⾝を表す self
構文236

クラスメソッド• クラスメソッドとはインスタンスを⽣成しなくてもクラス名.メソッド名() で実⾏できるメソッド
第⼀引数は⾃分のクラスを表す cls

237

オリジナルのクラスをモジュールとして利⽤するクラスを定義したファイルをモジュールとして利⽤できる

拡張子を除いたファイル名
クラス名

student_card.py238

__name__変数
name_card.py

name_card.py

このファイルをインポートすると実行されてしまう

インポート時には実行されなくなる__name__変数の値
・ プログラムコードが直接実⾏されたとき → '__main__'・ インポートされたとき → モジュール名 （この場合は'name_card'）
239

継承

継承
• 継承とは既存のクラスの機能を再利⽤し、それを拡張することで新しいクラスを作成すること241

Python の継承• 全てのクラスがObjectクラスを直接または間接的に継承する• 1つのクラスが2つのクラスを継承できる（多重継承）

親クラス（スーパークラス）

子クラス（サブクラス）242

継承のしかた構文

class クラス名(親クラス名):
クラスの定義class A:
クラスの定義calss B(A):
クラスの定義

親クラス
A

B
子クラス
243

インスタンス変数とメソッドの継承
student_card.py244メソッドのオーバーライド• オーバーライドとはスーパークラスと同じ名前のメソッドをサブクラスで定義すること。スーパークラスのメソッドはサブクラスのメソッドで上書きされる。

親クラスも同じ名前のメソッドを
持っている
245

親クラスのメソッドの呼び出し
super().メソッド名()とすることで、⼦クラスの中から、親クラスのメソッドを呼び出すことができる

246

練習問題

247

問題 1
次の⽂章の空欄に⼊れるべき語句を、選択肢から選んでください。
•

Pythonは[（1）]指向型の⾔語といわれ、クラスは[（1）]の属性や機能を定義したものです。
• クラスの定義の中で[（1）]の持つ情報は[（2）]に持たせることができ、機能は[（3）]に持たせることができます。
• インスタンスが⽣成されるときに⾃動的に呼び出されるメソッドを [（4）]またはコンストラクタと呼びます。
【選択肢】
・クラス変数 ・インスタンス変数 ・関数・オブジェクト ・メソッド ・初期化メソッド248

問題 1 （解答）
次の⽂章の空欄に⼊れるべき語句を、選択肢から選んでください。
•••

Pythonは[ オブジェクト ]指向型の⾔語といわれ、クラスは[ オブジェクト ]の属性や機能を定義したものです。
クラスの定義の中で[ オブジェクト ]の持つ情報は[ インスタンス変数]に持たせることができ、機能は[ メソッド ]に持たせることができます。
インスタンスが⽣成されるときに⾃動的に呼び出されるメソッドを [初期化メソッド ]またはコンストラクタと呼びます。

【選択肢】
・クラス変数 ・インスタンス変数 ・関数・オブジェクト ・メソッド ・初期化メソッド

249

問題 2
空欄（A）に、問いの条件に合う関数を追加してください。空欄（B）には、その関数を呼び出す命令⽂を記述してください。なお、関数に戻り値がある場合は、受け取った戻り値を出⼒するようにしてください。引数の値は⾃由に決めてかまいません。

250

問題 2-1

251

問題 2-1
def print_info(p):print('名前', p.name)print('年齢', p.age)（解答）print_info(a)252

問題 2-2

253

問題 2-2
def age_check(p, i):return p.age > I（解答）print(age_check(a, 20))254

問題 2-3

255

問題 2-3
def print_younger_person_name(p1, p2):
if p1.age <= p2.age:
print(p1.name)else:
print(p2.name)（解答）

print_younger_person_name(a, b)

256

問題 2-4257

問題 2-4
def get_total_age(p1, p2):
return p1.age + p2.age（解答）print(get_total_age(a, b))

258

問題 3
空欄（A）に、次の条件に合うメソッドを追加してください。
条件259

問題 3（解答）空欄（A）に、次の条件に合うメソッドを追加してください。
条件

def get_area(self):
return self.width * self.height

260

問題 4
以下の処理で、それぞれどのような出⼒が得られるか答えてください。
x = X()x.a()x.b()
y = Y()
y.a()
y.b()

#（1）
#（2）
#（3）
#（4）
#（5）
#（6）

261

問題 4（解答）
以下の処理で、それぞれどのような出⼒が得られるか答えてください。
x = X()x.a()x.b()
y = Y()
y.a()
y.b()

#（1） [x]#（2） [x.a]#（3） [x.b]#（4） [x][y]#（5） [y.a][x.a]#（6） [x.b]262第7章 発展と応⽤

例外処理

例外
• 例外とはプログラム実⾏時に発⽣したトラブルやそれを表すもの。

⼊⼒された値が、数字ではない場合、bの値がゼロの場合、エラーが発⽣する

265

例外処理
構文： try～except 文

266

例外の種類による処理の切り替え
構文： try～except 文

267

例外が発⽣しなかった場合の処理

構文： try～except～else～finally 文

268

テキストファイルの読み書き

テキストファイル
テキストファイルとは⼈が読んで理解することができる⽂字の集まり（テキストファイルではないものをバイナリファイルという）各種データを保存するためのファイルで広く使われている
テキストファイルの例
visitor_record.txt
2021-07-01,東京都,1,0
2021-07-01,千葉県,2,1
2021-07-01,千葉県,2,22021-07-01,神奈川県,4,22021-07-02,福島県,2,02021-07-02,埼玉県,3,22021-07-02,埼玉県,4,2（略）

データをカンマ区切りで記述する形式を
CSV形式とよぶ
1⾏分のデータを1つのレコードとよぶ

270テキストファイルの読み込み
open関数 ：ファイルの読み書きをする

271

ファイルを1⾏ずつ読む

f = open(ファイルパス, 'r', encoding='UTF-8')
lines = f.readlines()for l in lines:
print(l)f.close()272

with⽂を使ったファイルの読み込み
構文

with文を使ってファイルを1行ずつ読み込む例
with open(ファイルパス, 'r', encoding='UTF-8') as f:
for l in f:print(l)

⼀度に全部をメモリに取り込まないので、サイズが⼤きなファイルを扱える

273

テキストファイルの書き出し
f = open(ファイルパス, 'w', encoding='UTF-8')
for i in range(0,100):
f.write(str(i) + '¥n')close(f)

改行も書き出す必要がある

with文を使う場合
with open(ファイルパス, 'w', encoding='UTF-8') as f:
for i in range(0,100):
f.write(str(i) + '¥n')274

テキストファイルの書き出し
7-08/file_write.py

with文を使う場合

with open(ファイルパス, 'w', encoding='UTF-8') as f:
for i in range(0,100):
f.write(str(i) + '¥n')
改行も書き出す必要がある

275

ファイルの読み書き
with⽂を使って、出⼒先のファイルと読み込むファイルの両⽅を開く
⼊⼒ファイルを1⾏ずつ読み込み、'東京都'という⽂字列が含まれる場合
は出⼒ファイルに書き出す
with open(出力ファイルのパス, 'w', encoding='UTF-8') as out_f:with open(入力ファイルのパス, 'r', encoding='UTF-8') as in_f:
for line in in_f:
if '東京都' in line:
out_f.write(line)

実行結果（出力ファイルの中身）276

データの集計とグラフ描画

データの読み込み
都道府県と来館者数の組を、来館者の多い順にソートして出力する
pref_count_dict = {}with open('data/visitor_record.txt', 'r', encoding='UTF-8') as f:
for line in f:date, pref, num_adult, num_children = line.split(',')
num_all = int(num_adult) + int(num_children)
if pref in pref_count_dict:pref_count_dict[pref] += num_all
else:
pref_count_dict[pref] = num_all
pref_count_sorted = sorted(pref_count_dict.items(), key=lambda x:x[1], reverse=True)for i in pref_count_sorted:
print(i)visitor_record.txt…

※ CSV形式（1行＝1レコード）

出力

7-10/pref_count.py278

matplotlibライブラリを⽤いたグラフの作成• matplotlibライブラリとは
グラフ描画⽤の機能をまとめたライブラリ• 公式サイトhttps://matplotlib.org/279

外部ライブラリ• 外部ライブラリとは– Pythonに最初から備わっている「標準ライブラリ」とは別に、外部で開発されたライブラリで、必要に応じてインストールが必要– 画像処理、機械学習、グラフ⽣成、最適化計算など、特定の分野に特化した機能を提供– matplotlib は、外部ライブラリの1つ。グラフ描画⽤の機能が含まれる280pip コマンド・外部ライブラリのインストール・管理を⾏うコマンド
・Windows PowerShell で「 pip list 」と⼊⼒することでインストール
済みのライブラリ⼀覧を得られる

・「 pip install ライブラリ名 」と⼊⼒することでライブラリをインストールできる

281

7-11/make_graph.py

データ読み込み

グラフ作成準備

グラフ出力

さまざまなグラフ

https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.plot.html#matpl
otlib.pyplot.plot

283

画像処理

OpenCVを⽤いた画像処理• OpenCVライブラリとは
画像処理⽤の機能をまとめたライブラリ

OpenCVを用いた画像ファイルの表示

import cv2
img = cv2.imread('data/block.jpg')
cv2.imshow('img', img)
cv2.waitKey(0)cv2.destroyAllWindows()
7-12/show_image.py285

画像処理とファイルの書き出し
画像サイズの変更

height = img.shape[0]width = img.shape[1]resized_img = cv2.resize(img, (int(width/2), height))
cv2.imwrite('resized.jpg', resized_img)286

画像処理とファイルの書き出し
色の変更（グレー画像）

gray_img = cv2.cvtColor(img, cv2.COLOR_RGBA2GRAY)
cv2.imwrite('gray.jpg', gray_img)
エッジ検出

エッジの長さを調整

エッジとみなす輝度の閾値

canny_img = cv2.Canny(img, 50, 100)
cv2.imwrite('canny.jpg', canny_img)

287

円の検出
写真から道路標識を検出

288

7-14/circle_detect.py

円抽出の閾値

エッジ検出用のパラメータ

289

実行結果

290

Webスクレイピング

Webスクレイピング• Webスクレイピングとはインターネット上のWebページから、欲しい情報を取り出すこと。
Webページの構成
HTML
ファイル

ページの構造と文書を記述したファイル

CSS
ファイル

画像
ファイル

ページのデザインを記述したファイル
292

HTMLファイルの構造• ⽂書の構造をタグで定義<タグ名>文章</タグ名>293

Webスクレイピングの流れ
1. インターネット上からHTMLファイルを取得する
2. HTMLファイルに含まれるタグの構造を⾒て、必要な情報が記述されている場所を特定する
3. HTMLファイルから必要な情報を取り出す294

ライブラリの準備• requestsライブラリ
インターネット上のファイルを取得する• beautifulsoup4ライブラリ
HTMLファイルの内容を解析する

295

HTMLファイルの取得• requestsモジュールのgetメソッドでHTMLファイルを取得できる
import requests
html = requests.get('https://www.shoeisha.co.jp/book/ranking')
print(html.txt)
ブラウザで「ページのソースを表示」
したときと同じ内容が得られる。

296

HTMLファイルの解析

import requests
from bs4 import BeautifulSoup
result = requests.get('取得したいURL')
soup = BeautifulSoup(result.text, 'html.parser')print(soup.title)

インスタンス変数の title を参照すると、
titleタグに囲まれた文字列が得られる

297

HTMLファイルの解析（ファイルを読み込む場合）• ファイルに保存済みのHTMLファイルを対象にする場合
from bs4 import BeautifulSoup
with open(ファイルパス, 'r', encoding='UTF-8') as f:soup = BeautifulSoup(f.read(), 'html.parser')print(soup.title)298

7-18/ranking.html

299

7-19/extraction.py

BeautifulSoup オブジェクトのメソッド
・select メソッド： 指定したタグの要素をリストの形式で取得
・select_one メソッド： 指定したタグの先頭の要素を取得
300

実行結果

301

練習問題

302

問題 1
次のコードは、リストに含まれる⽂字列を1つだけ出⼒します。どの⽂字列を出⼒するかは、ユーザーが⼊⼒する値をインデックスに使⽤して決めます。⼊⼒した値が0、1、2のいずれかの場合には正しく動作しますが、そうでない場合にはエラーが発⽣してしまいます。

try〜except 構⽂を使⽤して、次のような例外処理を追加してください。
・ ⼊⼒した値が数字でない場合（ValueErrorが発⽣します）に「数字が⼊⼒されませんでした」と出⼒する・ 数字であってもインデックスの範囲を超えている場合（IndexErrorが発⽣します）には、「範囲外の値が⼊⼒されました」と出⼒する

303

問題 1（解答）・⼊⼒した値が数字でない場合に「数字が⼊⼒されませんでした」と出⼒する・ 数字であってもインデックスの範囲を超えている場合には、「範囲外の値が⼊⼒されました」と出⼒する
l = ['リンゴ', 'バナナ', 'オレンジ']a = input('好きな整数を入力してください:')try:
print(l[int(a)])
except ValueError:
print('数字が入力されませんでした')
except IndexError:
print('範囲外の値が入力されました')
304

問題 2
次の⽂章の空欄に⼊れるべき語句を答えてください。
•

⼈が読んで理解することができる⽂字の集まりで記述されたファイル
をテキストファイルといい、テキストファイルでないものを [
]
という

•

テキストファイルのうち、データをカンマ区切りで記述する形式を
[
]とよぶ。

•

open関数の引数modeには、ファイルを読み込み⽤に開くときに[ ] を、書き込み⽤に開くときに [ ] を、追記⽤に開くときに [ ]を指定する。

305

問題 2（解答）
次の⽂章の空欄に⼊れるべき語句を答えてください。
•

⼈が読んで理解することができる⽂字の集まりで記述されたファイル
をテキストファイルといい、テキストファイルでないものを [ バイナ
リファイル ] という•テキストファイルのうち、データをカンマ区切りで記述する形式を[ CSV形式 ]とよぶ。

•

open関数の引数modeには、ファイルを読み込み⽤に開くときに[ r ] を、書き込み⽤に開くときに [ w ] を、追記⽤に開くときに[ a ] を指定する。

306

問題 3
次の⽂章の空欄に⼊れるべき語句を、選択肢から選んでください。
・Pythonに最初から備わっていない外部ライブラリは、[]コマンドでインストールする必要がある。
・[]ライブラリには、グラフ描画⽤の各種機能が含まれ、[]ラ
イブラリは、画像処理⽤の各種機能が含まれる。
・インターネット上のWebページから、欲しい情報を取り出すことを []という。
・⼀般的にWebページは、ページの構造と⽂書を [] を⽤いて記述した[]ファイルと、ページのデザインを記述した []ファイル、および
画像ファイルなどから構成される。

【選択肢】
・CSS ・HTML ・OpenCV ・pip ・matplotlib
・Webスクレイピング ・タグ307

問題 3（解答）
次の⽂章の空欄に⼊れるべき語句を、選択肢から選んでください。
・Pythonに最初から備わっていない外部ライブラリは、[ pip ]コマンドでインストールする必要がある。
・[ matplotlib ]ライブラリには、グラフ描画⽤の各種機能が含まれ、[ OpenCV ]ライブラリは、画像処理⽤の各種機能が含まれる。
・インターネット上のWebページから、欲しい情報を取り出すことを [ Webスク
レイピング ] という。
・⼀般的にWebページは、ページの構造と⽂書を [ タグ ] を⽤いて記述した[ HTML ] ファイルと、ページのデザインを記述した [ CSS ] ファイル、および
画像ファイルなどから構成される。

【選択肢】
・CSS ・HTML ・OpenCV ・pip ・matplotlib
・Webスクレイピング ・タグ
308

終

309