
武蔵野個別指導塾の特徴
高校情報I データ型と入出力—文字と数を区別して入力を計算につなげる|武蔵野個別指導塾

先頭0を含む整理番号と個数を別々に受け取り、連結の誤りや入力失敗から、目的に合わせて選ぶデータ型です。
よくあるのは、高校生が文字の連結を数の加算と考える場面です。画面に見える「2」と「3」は、文字列ならつなぐと「23」ですが、整数なら足すと5です。同じ形の数字でも、何を表し、どの操作をするかを決めてから扱います。
入力から表示までの問いを分ける
整理券の番号と、受け取る品物の個数を入力する場面を考えます。番号は人や品物を区別するしるしです。先頭の0を含む表記を保ち、計算には使いません。一方、個数は追加分と足して合計を求める整数です。番号が数字で書かれているからといって、個数と同じ型にする必要はありません。
問われ方には、入力された値の型と演算結果を追う型、目的に合う型変換を選ぶ型、誤った出力から変換の位置を直す型があります。どの型でも、入力の条件、途中の値と型、出力の形を順に書き出します。見た目が数字かどうかだけで、演算結果を決めないことが出発点です。
ここでは番号を3文字の数字、個数を0以上の整数として扱います。出力は番号を入力どおりに残し、合計を十進の整数で表示します。範囲外や読めない入力については、そのまま結果を信用せず、何が起こるかも検討します。実数の近似誤差や外部機器との通信の仕組みには立ち入りません。
値の型と変換の境目
Pythonの整数は小数部分のない数、実数を表すfloatは小数を含む数の計算に使います。文字列は文字の並び、真偽値は条件の成立を表すTrueまたはFalseです。例えば「0」という文字列、整数0、真偽値Falseは表示や条件判断で関係して見えることがあっても、同じ種類の値として扱うものではありません。
図1のように、入力の直後は文字列として受け取り、目的に応じて分けます。inputは入力された1行を文字列で返します。個数の文字列をintに渡すと整数に変換できますが、番号は変換しないので先頭0が残ります。整数同士のプラスは加算、文字列同士のプラスは連結です。文字列と整数をそのままプラスで混ぜると型が合わず、例外が発生します。

図1の分岐は、入力機器が型を自動で見分けるという意味ではありません。プログラムを書く人が項目の意味から変換を選ぶという意味です。intは整数として読める文字列を整数へ変えますが、文字を何でも数に直せるわけではありません。例えば小数点を含む文字列をintに直接渡すと失敗します。floatへの変換は実数の入力に使えますが、近似表現を伴う値もあるため、整数の個数に安易に使う必要はありません。
printは値を画面に表示します。表示された文字から元の型をいつも見分けられるわけではありません。整数5も文字列「5」も単独で表示すると5に見えます。型を調べるにはtypeを使えますが、処理の途中で何を行ったかを追うことも必要です。比較式の結果は真偽値であり、文字列の「True」とは別です。文字列が空でないかの判定と、文字列が整数として読めるかの判定も別の問いです。
基本例題:整理番号と追加個数
番号「007」、最初の個数「2」、追加個数「3」をこの順に各1行で入力します。番号は3文字のまま、個数は0以上の整数とし、出力を 番号 007 合計 5 の1行にするプログラムを作ります。項目の間には半角の空白を1つ入れます。手計算では2と3を足して5です。番号は計算しないため007のままです。
number = input()
first = int(input())
extra = int(input())
total = first + extra
print("番号", number, "合計", total)
1行目は番号を文字列で受け取ります。2行目は最初の個数を文字列で受け取り、その文字列をintで整数にしてfirstに入れます。3行目も追加個数を同じ方法で整数にします。4行目では両方が整数なので加算し、結果をtotalに入れます。5行目のprintは渡された項目の間に既定で空白を入れ、末尾で改行します。番号の前にintを置かないことが、先頭0を残すための選択です。
図2のように、入力直後の「2」と「3」は文字列ですが、加算時には整数2と3です。処理表の引用符は文字列を見分けるための記号で、画面への入力や出力に付けるものではありません。

段階 number first extra total
番号を読む "007" 未設定 未設定 未設定
最初の個数を読む "007" 2 未設定 未設定
追加個数を読む "007" 2 3 未設定
加算する "007" 2 3 5
図2の出力は、手で求めた合計5と一致します。場面に戻しても、最初の2個と追加の3個を合わせた5個です。番号007は入力と出力が同じ3文字なので、別の番号として扱っていません。
実行環境はPython 3.14.7です。入力は上記の3行、期待出力は 番号 007 合計 5、実際の出力も 番号 007 合計 5 でした。入力が0と0なら合計0、片方が0ならもう片方が合計です。これらの境界も確かめると、正の個数だけで試すより初期条件の誤りを見つけやすくなります。
別の型を選ぶ場面と入力の条件
標準例題では、長さを表す文字列「1.5」と「2.0」を実数に変換し、合計を求めます。単位はメートル、答えは画面に表示される数値とします。どちらもfloatで読めることを前提にします。手で足すと3.5メートルです。
left = float(input())
right = float(input())
length = left + right
print(length)
1行目と2行目は各入力行をfloatで実数に変換します。3行目は変換後の値を加算し、4行目で結果を表示します。入力1.5、2.0に対する期待出力と実際の出力はともに 3.5 です。2本の長さを足した結果を元の単位に戻しても3.5メートルです。floatは小数を常に正確に保持するという約束ではありません。この例の一致から、任意の小数の計算が厳密になるとは結論できません。
発展例題では番号「042」と個数「4」を受け取り、個数が1以上ならTrue、そうでなければFalseを表示します。番号は3文字、個数は0以上の整数とします。表示は番号と真偽値を空白で区切る1行です。個数4は1以上なので、期待する表示は 042 True です。
number = input()
count = int(input())
has_items = count >= 1
print(number, has_items)
1行目は識別用の文字列を保存し、2行目は計算や比較をする個数を整数にします。3行目は比較の結果を真偽値として保存し、4行目で2項目を表示します。実際の出力は 042 True です。4個という元の場面へ戻すと品物があるのでTrueと合います。個数0ならFalseになり、番号の先頭0は残ります。Trueという表示自体が文字列の入力「True」になったわけではありません。
失敗を含めた試験の設計
成功する入力は、基本例題について 007 / 2 / 3、007 / 0 / 0、007 / 0 / 3 の3組で試します。スラッシュは行の区切りを示し、実際の入力には含めません。期待出力は順に 番号 007 合計 5、番号 007 合計 0、番号 007 合計 3 です。実行結果もそれぞれ一致しました。0個を許すという条件に照らし、0個と3個で合計3個になることも確認できます。
失敗側も同じ3組を用意します。007 / 二 / 3 は2行目のint変換でValueError、007 / 空行 / 3 も同じ変換でValueError、007 / 2 の後に入力が終わる場合は3行目のinputでEOFErrorです。いずれも合計行は表示されません。実際の実行でもそれぞれこの例外が発生しました。空行は空の文字列であって、整数0ではありません。入力終了は空行の入力とも異なり、次の行を取得できない状態です。
さらに、入力元の機器や別の道具が応答せず時間切れになった場合は、値を受け取れたと仮定して合計を出してはいけません。この短いプログラムは時間制限や再試行を実装していないため、自分では時間切れを検出できません。実行する側が制限を設けて停止し、未完了として扱う設計が必要です。外部の入力元が途中で壊れた場合も、正常な結果と区別し、受け取れた範囲と失敗箇所を確認します。例外の捕捉や再試行の実装はここでは扱いません。
実行できることと、仕様を満たすことも別です。番号「7」は文字列として読めても3文字ではありません。個数「-1」はintで変換できても0以上という条件に反します。このコードは形式や範囲を検査しないため、前提外の値を拒否できません。運用するなら番号の長さと文字、個数の範囲を別途検査し、拒否時の表示を決めます。成功した3例は条件内の動作の証拠であり、前提外への安全性の証明ではありません。
連結の誤りから修正へ
基本例題の2行目と3行目でintを省くと、firstとextraはそれぞれ文字列「2」と「3」のままです。この場合 first + extra は加算ではなく連結になり、画面には 番号 007 合計 23 と出ます。図3のように、誤った結果の最初の原因は表示行ではなく、加算する前に型を変えなかったことです。

修正は両方の個数の入力にintを付けることです。片方だけを整数にすると、文字列と整数のプラスはTypeErrorになり、合計行は表示されません。図3の修正後は整数2と整数3が5になり、同じ入力を再実行すると 番号 007 合計 5 でした。2個と3個を合わせて23個にはならないので、場面への照合でも誤りを発見できます。
番号にもintを付ければ加算の誤りが直るわけではありません。番号007は整数7になり、表示に必要な先頭0を失います。個数の変換と番号の保存は、それぞれ目的の違う操作です。入力の見た目が似ていても、修正する場所を項目ごとに判断します。
練習:入力と値を追う
次の5問では、引用符は文字列を示す記号で、出力には含めません。必要な場合は項目間に半角空白を1つ入れます。番号は文字列のまま扱います。
- 棚番号「031」と個数の入力「6」「1」を基本例題のコードに渡します。出力される1行を答えてください。
- 文字列「8」と「4」を変換せずプラスでつなぐ場合と、それぞれintで変換して足す場合の結果を順に答えてください。
- 番号「090」、個数「0」を発展例題のコードに渡します。出力される1行と、真偽値の理由を答えてください。
- 基本例題の個数の入力が空行だった場合、合計行が出るか、どの操作で何が起こるか答えてください。
- 長さのコードに「2.5」と「1.0」を入力します。期待する出力と、元の長さの合計を答えてください。
答えと確かめ方
番号 031 合計 7です。2つの個数は整数6と1になり、6 + 1は7です。6個と1個を合わせて7個であり、棚番号の3文字も維持されています。実行出力も同じ1行でした。- 連結の結果は文字列「84」、加算の結果は整数12です。8個と4個を合わせる場面なら12個なので、84という文字の並びを個数の合計にしてはいけません。各演算の実行結果も84と12でした。
090 Falseです。0は1以上ではないので比較結果はFalseです。0個という元の条件にも合い、番号は090のままです。実行出力も一致しました。- 合計行は出ません。空行は空の文字列となり、intによる整数変換でValueErrorが起きます。空欄を0個とする規則は問題にないため、0と読み替えません。実行でも変換時に同じ例外が発生しました。
3.5です。2.5メートルと1.0メートルを合わせると3.5メートルです。実行出力も3.5で、2本分の合計という条件に戻して一致します。
練習の正常入力4件と空行による失敗1件は、いずれもPython 3.14.7で実行しました。失敗の設計を広げるなら、入力終了や数に変換できない文字も加えます。前の試験と合わせ、何を正常な入力とし、どの段階で失敗するかを説明できるようにします。
手元に残す要点
入力の1行は文字列として受け取ります。 識別番号は表記を残し、計算する個数は整数に変換します。 プラスは文字列なら連結、数なら加算です。 入力の失敗と前提外の値を区別して試します。
つまずいた位置を見つける
答えが23になった人には、まずfirstとextraの各値を引用符付きで書いてもらいます。値の見た目を写せても引用符が抜けるなら、入力直後の型から追い直します。値が5になっても番号が7になった人には、番号の変換と個数の変換を別の行として説明してもらいます。
個別指導では、空行と入力終了のどちらを試しているか、どの行まで進んだかを処理表で確かめます。正しい例と失敗例を同じ入力欄に並べれば、結果だけでなく前提も点検できます。数字の見た目と値の役割を分けると、入出力の設計が明確になります。
読んで終わりにするか、ここから変えるか。
武蔵境駅徒歩30秒、講師1人に生徒1人の完全1対1。授業のあいだ、先生は隣を離れません。いまの詰まりを、無料相談でそのまま話してください。
まず15分だけ電話で話したい方は、無料電話相談(15分)から。塾からお電話を差し上げます。
本気になった日が、入塾の日。
お子様の教育、迷ったら「丸投げ」してください。必ず、期待以上の結果で返します。武蔵野で育む、武蔵境で学ぶ。
電話は年中無休。365日、24時間、お電話可能。




