練習問題の答えと理由
Practice Questions: Answers and Notes
本の各章の最後にある「答えと理由」と同じ内容です。先生用の採点の目安は、ここには載せません。
第1章:プログラムを動かす
自己チェック
- 1節:1. プログラムです。2. こんにちは、です。3. 表示されません。
#から始まる行はコメントで、実行されないからです。 - 2節:1.
>>>の後ろです。2. 学習を始めます、です。3. 例:printのつづり、かっこ、引用符、コメントと命令の区別を確認します。 - 3節:1.
hello.pyです。2.python3 hello.pyです。3. 保存しただけでは表示されません。保存したファイルを指定して実行します。
確認問題
- 1 答えはBです。コメントはコードの説明を書く部分で、実行されません。Aは
printの役割です。Cは値に名前を付けて扱う変数です。Dは保存したファイルの名前です。 - 2 答えはAです。表示は
OKです。引用符は文字を囲む記号なので画面には出ません。printやかっこも表示されません。 - 3 コードは
print("こんにちは")です。表示はこんにちはです。printのかっこの中の文字が画面に出ます。 - 4 答えは
print("また練習します")です。表示はまた練習しますです。表示したい文をかっこの中に書きます。
ワークシート1-1:練習と実行の記録
- 練習1-1:保存コードは
# はじめての実行とprint("学習を始めます")の2行です。出力は「学習を始めます」です。コメントの行は文字列の外にある#から行末までで、説明として使い、実行されません。 - WS1-1の穴埋め:表示は「学習を始めます」です。自力課題の例は、
print("また練習します")です。表示は「また練習します」です。 - 採点の目安:コードを指定の場所に保存し、実行して、記録した表示が実測出力と一致していること。コメントを一行加え、その役割を説明できること。保存・実行の実操作がない場合は、PY-1-1の実行技能を確認済みにしません。
考えよう・グループで話そう
答えは一つではありません。対話画面は一行を試すときに使えます。ファイルは、コードを保存して、あとからもう一度実行するときに使えます。予想と違う表示が出たときは、コードを入力した場所、保存したか、実行したか、文字や記号を順に確認する考え方ができます。
ミニ会話
ラジャンさんは、コードをファイルに保存したものの、まだ実行していませんでした。田中先生は、保存したファイル名を指定して実行し、表示を見るように伝えています。会話の順番に沿って説明できていれば合っています。
第2章:値と変数
自己チェック
1節:1. float。2. 文字列。3. 5と32です。
2節:1. count。2. 左側の変数名。3. strです。
3節:1. 4。2. 4。3. 比較です。
ワークシート
2-1:countはintで3から4へ変わり、labelはstrの"3"のままです。出力は4 3。
2-2:float、3.0。
2-3:str、表示は3です。
確認問題
1 答えはAです。=は右側の値を左側の変数に結び付けます。Bはprint、Cはfor、Dは==の役割です。
2 答えはBです。"3"と"2"は文字列なので、つながって32と表示されます。Aは数として足す誤解、Cは区切りの空白が入る誤解、Dは文字列をつなげられないという誤解です。
3 5 2.5 3です。countは5、priceは小数2.5、labelは文字列です。
4 12です。初期値10に2を加えます。
考えよう・グループで話そう
答えは一つではありません。型の違いや、変数名の役割を説明できればよいでしょう。
第3章:計算と文字列
自己チェック
- 1節:1.
*です。2. 14です。掛け算を先に行います。3. 丸かっこの中を先に計算します。 - 2節:1. 連結です。2.
str()です。3.合計は360円ですです。 - 3節:1. 波かっこ
{}です。2. 1桁です。3.0.7です。
確認問題
- 1 答えはAです。f文字列の波かっこには、埋め込みたい式や変数を書きます。コメントは
#で始まる説明、ファイル名は保存先の名前、インデントは行頭の空白です。 - 2 答えはBです。
3 * 4を先に計算して12、次に2 + 12を計算するので14です。Aの20は(2 + 3) * 4のように加算を先にした値です。Cの24は、+も掛け算の記号と読み違え、2 * 3 * 4と計算した値です。Dの9は、*を足し算として読み、2 + 3 + 4と計算した値です。 - 3 コードは「成果物の完成例」と同じです。表示は
合計は320円です(320.0円)です。80×4を計算し、文字列と小数1桁の表示を作ります。 - 4 個数を5に変えます。表示は
合計は400円です(400.0円)です。
ワークシート3-1
- 穴埋め:
120 * 2 = 240です。 - 自力課題:合計は320、表示は
合計は320円です(320.0円)です(Q3と同じコード・結果です)。
考えよう・グループで話そう
答えは一つに決まりません。丸かっこは先に計算する範囲を示します。.1fは表示の桁数を指定するため、計算値と表示の形を分けて説明できればよいです。
ミニ会話
画面の0.7が小数1桁の書式による表示だと説明できていれば合っています。
第4章:条件で処理を分ける
自己チェック
- 1節:1.
Trueです。7は9より小さいからです。2.==です。3. 代入です。 - 2節:1.
elseです。2. 上から順に調べます。3. インデントです。 - 3節:1.
Trueです。2.Falseです。3. 合いません。80は80未満ではないためです。
確認問題
1 答えはDです。60以上になる最小の整数は60です。AとBは60より小さく、Cは条件を満たしますが最小ではありません。
2 答えはBです。44は60以上ではないため、比較結果は
Falseです。Aは真偽が逆、Cは比較結果でなくscoreの値、Dは比較をエラーと考えた場合です。3 コード例は次のとおりです。scoreを59、60、79、80に一つずつ変え、毎回このコードを実行します。
score = 59 if score < 60: print("基準に届きません") elif score < 80: print("練習中") else: print("達成")出力は入力の順に「基準に届きません」「練習中」「練習中」「達成」です。入力の値を変えても、条件の順番と各処理は同じです。59は60未満、60と79は60以上80未満、80は80以上です。
4 59を60に変えると、出力は「基準に届きません」から「練習中」に変わります。60は60未満ではなく、80未満なので二つ目の分岐に入ります。
ワークシート
- WS4-1穴埋め:44は60以上ではないため
False、「もう一度練習します」です。自力課題は59がFalseで未達、60がTrueで基準に達します。60が切り替わる最小の値です。 - WS4-2:59「基準に届きません」、60「練習中」、79「練習中」、80「達成」です。予想と実行結果が同じなら一致欄に「はい」と書きます。
考えよう・グループで話そう
答えの例:59と60を試すと、< 60が60を含まないことを確かめられます。条件の順番を誤ると、60未満もscore < 80に当てはまって「練習中」となることがあります。そのため、より小さい範囲を先に調べます。
ミニ会話
ラジャンさんは44と60を比べ、条件に合うかどうかを確認します。比較結果、使った基準、次に表示を確かめることを説明できていれば合っています。
第5章:繰り返して合計する
自己チェック
1節 1. 3です。2. 3回です。3. 次の行に空白を入れて、繰り返す処理を示します。
2節 1. 1、2、3です。2. 含みません。3. 3回です。
3節 1. 前の値を残さず、足す値だけの合計を作るためです。2. 1、3、6です。3. 0回です。
ワークシート
穴埋めは5です。自力課題は3回目の開始値が5、計算は5 + 4、終了値は9です。コードの出力も9です。
確認問題
Q1はBです。range(2,5)は2、3、4を作ります。Q2はCです。0から始めて2、3、4を加えると、2、5、9と変わります。Q3(練習5-1)のコードは次のとおりで、出力は6です。
total = 0
for value in range(1, 4):
total = total + value
print(total)Q4では終わりの値を5にします。コードは次のとおりで、出力は10です。
total = 0
for value in range(1, 5):
total = total + value
print(total)考えよう・グループで話そう
答えの例:total = 0だけをfor文の中に置くと、各回の最初に0へ戻ります。計算後の値は3、4、5です。print(total)はfor文の外にあります。画面に出るのは最後の5だけです。途中の値も表示するときは、別にprint(total)をfor文の中へ移します。初期化をfor文の前に置けば、合計は12になります。
グループ活動では、rangeの値と累積を分けて確認します。リスト側も別表に書きます。値の違いが出力の違いにつながると説明できればよいです。
ミニ会話
rangeの開始値と終了値を質問し、値を順に列挙して、実行結果で確かめる流れです。開始値は含み、終了値は含まないことを説明できればよいです。
第6章:リストと辞書
自己チェック
- 1節:1. 角括弧
[]です。2. 3つです。3. 書いた順番で取り出します。 - 2節:1. 0です。2.
pages[1]です。3. 取り出せません。3つの要素がある場合、この章で使う0以上の添字は0、1、2です。 - 3節:1. キーです。2.
pages_by_title["本B"]です。3. リストは位置、辞書はキーで指定します。 - 4節:1. リストなどの要素数です。2. 合計270、件数3です。3. 件数が1以上あるか確かめます。
ワークシート
穴埋めは80です。自力課題はリストが80、辞書が120です。予想・実行結果は80 120です。リストでは添字1、辞書ではキー「本A」に対応する値を取得します。
確認問題
Q1はDです。添字は0から始まります。Aは1から数える考え、Bは負の添字だけを使えると考えたもの、Cは位置と要素数の混同です。
Q2はDです。キー
"pen"に対応する値は2です。Aはキーそのもの、Bは変数名を表示すると考えた答え、Cは存在するキーを見落とした答えです。Q3の例:
pages = [120, 80, 100] pages_by_title = {"本A": 120, "本B": 80} print(pages[1], pages_by_title["本A"])出力は
80 120です。添字1はリストの2番目、キー「本A」の値は120です。Q4では
pages=[10,80,100]にします。出力は80 120のままです。取り出すのは添字1と辞書のキー「本A」なので、リストの先頭の変更は影響しません。
考えよう・グループで話そう
答えの例:順番に取り出すならリストが分かりやすいです。本の名前を見てページ数を探すなら辞書が分かりやすいです。どちらも同じ本の値が対応していることを示し、用途と形を結びつけて説明できれば合っています。
ミニ会話
ラジャンさんが添字1を1冊目と考え、田中先生が位置は0から始まると説明します。2冊目の値がpages[1]で得られることを言葉と実行結果で確かめていれば合っています。
第7章:関数で処理をまとめる
自己チェック
1節 1. 関数名です。2. いいえ。定義だけでは関数の本体は実行されません。3. インデントです。
2節 1. 仮引数です。2. 4と6です。3. いいえ。returnは値を返し、画面へ表示するのはprintです。
3節 1. 外側です。2. returnです。3. いいえ。messageは関数内で作った名前なので、関数の外から直接参照できません。
ワークシート
穴埋めは、仮引数nameに入る値が「ミナ」、戻り値が「ミナさん、こんにちは」です。自力課題は「アリ」「アリさん、こんにちは」です。実行時の表示はアリさん、こんにちはです。
確認問題
Q1はCです。returnは値を呼び出し元へ返します。表示を行うprintとは役割が違います。Q2はAです。4と6を足すため、戻り値は10です。Bは文字としてつないだ場合の読み違い、CとDは一方の値だけを答えた場合です。
練習7-1の解答例です。新しいscope_practice.pyとして保存して、新しい実行で動かします。
label = "授業"
def make_message():
message = "学習を始めます"
return message
print(label, make_message())出力は授業 学習を始めますです。labelは関数の外側、messageは関数の内側です。実行して、表の記録と出力を照合します。
Q3の解答例です。新しいファイルで動かし、出力と表を照合します。
label = "授業"
def make_message():
message = "開始"
return message
print(label, make_message())出力は授業 開始です。
Q4では別の新しいファイルで関数内の文字列を"終了"に変え、関数を2回呼び出します。出力は次の2行です。
授業 終了
授業 終了
関数外参照の確認は、外側のmessageがない新しいファイルscope_error.pyで行います。関数定義とprint(message)だけを保存して新しい実行にすると、NameErrorになります。前の例を同じ対話画面で実行した後では外側の名前が残る場合があるため、この確認に使いません。外で値を使うには、関数の戻り値を外側の変数に代入します。
考えよう・グループで話そう
考えようでは、returnで値を受け取れば、変数に代入したり別の関数へ渡したりできます。printは画面に表示します。二つを分けて説明できれば合っています。グループ活動では、定義に書く名前が仮引数、呼び出しに渡す値が実引数、呼び出し元へ返る結果が戻り値です。
ミニ会話
returnで値を返し、呼び出し側のprintで表示することを区別できていれば合っています。会話の文と同じ言い方でなくても、二つの役割を説明できればよいです。
第8章:ファイルから読み集計する
自己チェック
1節 1. 配布されたファイルの名前と保存場所を確かめます。2. 文字を正しく読み込むためです。3. 2要素です。最後の改行だけで、余分な空の行はできません。
2節 2-1. int()で整数へ変えます。2-2. 空欄数を1増やし、合計には入れません。
3節 3-1. 3です。3-2. 3件の点数の平均が80.0点であることを示します。
ワークシート8-1
穴埋めBの累積は150です。Cは空欄なので累積150、空欄数1です。Dを加えた後は累積240、空欄数1です。例の出力は、件数3件・合計240点・平均80.0点・空欄1件です。
確認問題
Q1はDです。これは文字コードの指定で、暗号・圧縮・並べ替えではありません。Q2はCです。read_text()はファイル内容を文字列で読みます。
Q3は次のコードで、出力は合計は5個ですです。items.csvは準備済みのファイルを読みます。
import csv
from pathlib import Path
path = Path("items.csv")
with path.open(encoding="utf-8", newline="") as file:
rows = list(csv.DictReader(file))
total = 0
for row in rows:
total += int(row["count"])
print(f"合計は{total}個です")Q4は空欄を数値へ変える前に判定します。出力は合計は5個です、空欄は1件ですです。Q4用に、元の2行を残して空欄行を加えた別ファイルを用意します。
import csv
from pathlib import Path
path = Path("items.csv")
with path.open(encoding="utf-8", newline="") as file:
rows = list(csv.DictReader(file))
total = 0
missing = 0
for row in rows:
if row["count"] == "":
missing += 1
else:
total += int(row["count"])
print(f"合計は{total}個です")
print(f"空欄は{missing}件です")考えよう・グループで話そう
答えの例:CSVの値は文字列です。Cは未記入なので集計から除き、空欄数へ記録します。
A、B、C、Dの順に記録します。Cでは累積は変わらず、空欄数が1です。分母は3件です。
ミニ会話
列名・空欄・出力を確かめる流れが伝わればよいです。
第9章:エラーを手掛かりに直す
自己チェック
1節 1. 実行したコードとエラー表示全体です。2. 問題の種類を調べる手掛かりです。3. いいえ。行番号は候補なので、前後のコードも読みます。
2節 1. 定義した名前と、コードで使った名前です。2. "3"は文字列、3は整数です。3. 条件の行と前後の構文を見ます。
3節 1. この章で扱う0以上の添字は0と1です。2. どの変更で直ったか分かり、原因を確かめやすくするためです。3. 値の型と、演算の組み合わせです。
4節 1. 最初にエラーが出たときと同じ入力です。2. いいえ。目的の出力と一致するかを確かめます。3. 実行コード、表示、原因の予想、修正コード、再実行の出力です。
ワークシート9-1
穴埋めの原因は「変数名」の綴りです。修正後の出力はこんにちはです。自力課題は次のように直せます。
print(int("3") + 2)例外名はTypeError、原因は文字列と整数をそのまま足そうとしたことです。出力は5です。
確認問題
Q1はDです。文字列と整数をこの形の+に渡すとTypeErrorになります。Q2はCです。添字1の値は20です。
Q3の解答例:
message = "こんにちは"
print(message)出力はこんにちはです。定義したmessageと使用したmesageの綴りが違うため、名前が見つかりませんでした。
Q4の解答例:
score = 70
if score > 60:
print(score)出力は70です。ifの条件の後ろにコロンを置き、条件が真のときに実行する行を字下げします。
考えよう・グループで話そう
numbers=[10,20]で添字2を使うとIndexErrorが出ます。添字を1に直すとエラーは消え、二番目の値20が表示されます。この二つを確認し、目的の値が出たことを確かめます。グループ活動では、エラー表示、原因の予想、修正、同じ入力の出力、別入力の結果を説明できればよいです。
ミニ会話
表示を保存してから、最後の行の例外名を探し、問題の行と値を確かめています。添字を直した理由と、同じ入力で再実行することが伝われば合っています。
第10章:小さなプログラムを作る
確認問題
Q1はCです。Q2はA(225÷3=75.0)です。
Q3(PY-10-1) コード片をwork/ch10/ch10_program.pyにまとめます。期待出力は件数3・合計300・平均100.0・空欄1です。
Q4(PY-10-2) 同じコードをheader_onlyから実行します。期待値は0件・合計0・平均計算不可・空欄0です。
ワークシート10-1
実測を表10-2の期待値と比べ、入力ファイルが実行前後で同じであることを確認します。
自己チェック
1節:1-1入力・処理・出力。1-2空欄は0と異なる。1-3平均不可と表示。1-4入力と期待結果。1-5境界入力も確認。1-6件数0、空欄1。
2節:2-1列名付き辞書。2-2空欄の整数化はエラー。2-3各フォルダにreading.csv。
3節:3-1件数・合計・平均・空欄数。3-2None。3-3入力・列名・条件を調べる。
4節:4-1空欄数0対1。4-2入力保持。4-3完成形を確認。
5節:5-1授業規則。5-2説明と別入力。5-3「使用なし」。