情報Ⅰ プログラミング演習

第2章 演算子と型

この章で学べること
この章のゴール:商とあまりを使う計算をプログラムで書けるようになること。そして「いま扱っているのは数値か、文字列か」を意識できるようになること。あまりの計算(%)は共通テストで判定・集計問題の頻出となる演算です。
目次

    STEP 1計算する ― 4つの演算子

    プログラムでは、数値を使った計算ができます。たし算とひき算は数学と同じ +- ですが、かけ算は *(アスタリスク)、わり算は /(スラッシュ)を使います。数学の ×÷ の記号は使えません。

    書き方の例結果意味
    print(7 + 3)10たし算
    print(7 - 3)4ひき算
    print(7 * 3)21かけ算
    print(7 / 3)2.3333333333333335わり算(小数になる)

    例題 1

    どのように表示されるのかを予想してから実行しましょう。

    アラン先生
    かけ算の * とわり算の / は、数学の ×÷ と記号が違います。最初はつい数学の記号を書いてしまうものですが、エラーを見て直せば大丈夫ですよ。また、数学で 2x と書くようなかけ算記号の省略もできません。必ず 2 * x と書きましょう。
    やってみよう 2-1

    1週間が何時間かをかけ算で計算して、以下のように表示されるプログラムを自分で考えて作りなさい。

    <実行結果例>1週間は 168 時間です
    解答例を見る(まず自分で書いてから開くこと)
    print('1週間は', 7 * 24, '時間です')
    7 * 24 の計算結果がそのまま表示に使えます。jikan = 7 * 24 と変数に入れてから表示しても、もちろん正解です。

    STEP 2商とあまり ― // と %

    127個のあめを7人で分けると、1人18個ずつで、1個あまります。この「」と「あまり」を求める専用の演算子が //% です。127 // 7 は商の 18 を、127 % 7 はあまりの 1 を返します(/ のわり算と違って、答えは整数になります)。

    127 ÷ 7 = 18 あまり 1 127 // 7 → 18 商(整数のわり算) 127 % 7 → 1 あまり
    図1 // は商を、% はあまりを求める

    例題 2

    どのように表示されるのかを予想してから実行しましょう。数値を変えて試すのもおすすめです。

    いじってみよう:a % 2 を計算すると、a が偶数なら0、奇数なら1になります。いろいろな数で確かめてみましょう。
    ノイマン先生
    いいかね、商 // とあまり % は共通テストのでは頻出なんだ。偶数・奇数の判定も、番号を順番にグループ分けするのも、正体はあまりの計算だ。試作問題では商とあまりを使う計算がそのまま出題された。絶対におさえておくように。
    やってみよう 2-2

    100個のクッキーを8人で分けます。//% を使って、以下のように表示されるプログラムを自分で考えて作りなさい。

    <実行結果例>1人分は 12 個で、あまりは 4 個
    解答例を見る(まず自分で書いてから開くこと)
    cookie = 100
    hito = 8
    print('1人分は', cookie // hito, '個で、あまりは', cookie % hito, '個')
    商が「1人分」、あまりが「余った個数」に対応します。数値を変数にしておくと、人数を変えた実験もすぐできます。
    ⏱ ここまでで1時間くらいが目安です。つづきは次の時間でもOK(クリアの記録は残っています)。

    STEP 3キーボードから入力する ― input()

    input() を使うと、プログラムの実行中にキーボードから値を受け取れます。カッコの中に書いた文字列は、入力をうながすメッセージとして表示されます。受け取った値は変数に代入して使います。

    例題 3

    実行すると入力欄が開きます。自分の名前を入力してみましょう。

    やってみよう 2-3

    input() で好きな食べ物を聞いて、以下のように表示されるプログラムを自分で考えて作りなさい。

    <実行結果例>好きな食べ物:カレー カレー が好きなんですね!
    解答例を見る(まず自分で書いてから開くこと)
    tabemono = input('好きな食べ物:')
    print(tabemono, 'が好きなんですね!')
    input() の結果を変数に受け取って、print() で使えていればOKです。

    STEP 4数値と文字列 ― 型と int()

    プログラミングでは、5(数値)と '5'(文字列)は見た目が似ていても別物として扱われます。この「値の種類」のことをと呼びます。同じ + でも、数値どうしなら「たし算」、文字列どうしなら「つなげる」という別の働きをします。

    5 + 5 → 10 数値どうし:たし算 '5' + '5' → '55' 文字列どうし:つなげる
    図2 同じ + でも、型によって働きが変わる
    たしかめてみよう

    以下のプログラムを実行したときに、どのように出力されるのかを予想してから実行しなさい。数値と文字列を扱うときでは演算子の役割が変化することと、なぜプログラムでは数値と文字列を区別するのかを考えてみましょう。

    確認ポイントを見る(実行してから開くこと)
    数値の場合は 544(たし算)、文字列の場合は 52123(つなげる)になります。同じ + でも型によって結果がまったく変わるからこそ、プログラムでは数値と文字列をはっきり区別する必要がある、というわけです。
    アラン先生
    実はinput() が受け取った値は、数字を打ち込んだとしても必ず文字列になるんです。これが次のステップの大切なポイントになりますよ。

    input() で受け取った値は文字列なので、計算に使いたいときは int()数値(整数)に変換してから使います。

    例題 4

    実行して、入力した数字が計算に使えることを確かめましょう。そのあと、2行目の int() の行を消すとどうなるかも試してみましょう。

    アラン先生
    「いま扱っているのは数値なのか、文字列なのか」——これを意識する習慣が、この章でいちばん大切なことなんだ。エラーの多くは、型のすれ違いから生まれるんだよ。
    やってみよう 2-4

    年齢を input() で入力させて、10年後の年齢が以下のように表示されるプログラムを自分で考えて作りなさい。

    <実行結果例>年齢:16 10年後は 26 歳です
    解答例を見る(まず自分で書いてから開くこと)
    nenrei = input('年齢:')
    nenrei = int(nenrei)
    print('10年後は', nenrei + 10, '歳です')
    int() への変換を忘れると、エラー例1で見たTypeErrorになります。忘れていた人は、いま経験できてラッキーです。

    エラー例 ― よくあるエラーを知ろう!

    第1章と同じように、よくあるエラーをわざと起こして、メッセージの読み方に慣れましょう。読み方はいつも同じ、いちばん最後の行からです。

    エラー例 1 int() のつけ忘れ

    input() で受け取った文字列を、そのまま計算に使おうとしています。数字を入力して、どんなエラーが出るか見てみましょう。

    エラーの読み方を見る(実行してから開くこと)
    TypeError: can only concatenate str (not "int") to str と出ます。TypeError(タイプエラー)は「型がちがう」という意味で、「文字列(str)と数値(int)は + でつなげられない」と教えてくれています。kazu = int(kazu) の1行を入れてから計算すれば直ります。実際のプログラミングでとても多いエラーです。

    エラー例 2 0で割る

    数学と同じで、プログラムでも0で割ることはできません。

    エラーの読み方を見る(実行してから開くこと)
    ZeroDivisionError: division by zero と出ます。「0によるわり算」という意味そのままのエラーです。変数で割り算をするプログラムでは、「割る数が0になる瞬間がないか」を意識するのが上級者への一歩です。

    エラー例 3 かけ算記号の省略

    数学の癖で 2x のように書いてしまった例です。

    エラーの読み方を見る(実行してから開くこと)
    SyntaxError: invalid decimal literal と出ます。文法のまちがい(SyntaxError)で、Pythonは 2x を「変な数値」として読もうとして失敗しています。かけ算は省略せず 2 * x と書けば直ります。

    演習問題

    問 2-1

    以下のように出力されるようプログラムを自分で考えて作成しなさい。ただし、半径は input() で入力しなさい。

    <実行結果例>半径:2 半径 2 の円の面積は 12.56 です
    解答例を見る(まず自分で書いてから開くこと)
    hankei = input('半径:')
    hankei = int(radius)
    pi = 3.14
    print('半径', radius, 'の円の面積は', hankei*hankei*pi, 'です')
    input() で受け取った値を int() で数値に変えてから計算するのがポイントです。円周率を変数 pi にしておくと、あとから3.14159に変えたいときも1か所直すだけで済みます。
    問 2-2

    以下のように出力されるようプログラムを自分で考えて作成しなさい。ただし、127や7といった数値は後から変更できるように変数を用いなさい。

    <実行結果例>127 を 7 で割ったときの答えは 18 余り 1
    解答例を見る(まず自分で書いてから開くこと)
    kazu1 = 127
    kazu2 = 7
    print(kazu1, 'を', kazu2, 'で割ったときの答えは', kazu1//kazu2, '余り', kazu1%kazu2)
    商は //、あまりは % でした。数値を変数にしておけば、1行目と2行目を書きかえるだけで別の計算に使い回せます。
    問 2-3

    秒数を input() で入力させて、それが「何分何秒」かを以下のように表示するプログラムを自分で考えて作りなさい。

    <実行結果例>秒数:200 200 秒は 3 分 20 秒です
    解答例を見る(まず自分で書いてから開くこと)
    byou = input('秒数:')
    byou = int(byou)
    print(byou, '秒は', byou // 60, '分', byou % 60, '秒です')
    60で割った商が「分」、あまりが「秒」です。時間の計算は、共通テストのシミュレーション問題(待ち時間など)でも土台になる考え方です。
    問 2-4(発展)

    3桁の整数を input() で入力させて、//% だけを使って百の位・十の位・一の位を取り出し、以下のように表示するプログラムを作りなさい。
    ヒント:472 // 100 は4。472 // 10 は47で、その一の位が「十の位」です。

    <実行結果例>3桁の整数:472 百の位: 4 十の位: 7 一の位: 2
    解答例を見る(まず自分で書いてから開くこと)
    n = input('3桁の整数:')
    n = int(n)
    print('百の位:', n // 100)
    print('十の位:', n // 10 % 10)
    print('一の位:', n % 10)
    「位を取り出す」計算は、共通テスト2025年本試験に出たチェックディジット(番号の誤り検出)の土台になるテクニックです。n // 10 % 10 は「10で割って一の位を見る」という2段構えになっています。

    自由実行スペース

    思いついたことを自由に試すための場所です。学んだことを使って、好きな計算をさせてみましょう。

    ノイマン先生
    ちなみに共通テスト用の表記では、商を求める演算子が ÷ と書かれることがあるんだ。Pythonの // と同じ働きだ。あまりの % はそのまま使われる。記号が違っても考え方は同じ——ここで身につけた計算が、そのまま入試で通用するんだ。
    実行環境を準備中…