変数とデータの扱い
第2章では,print を使って画面に文字や計算結果を表示しました.しかし, これまでのプログラムには大事なものが足りていません.それは計算した値を 覚えておくしくみです.
たとえばテストの点数を3つ受け取り,合計してから平均を出したいとします.このとき, 「いったん合計を覚えておいて,あとでそれを人数で割る」という流れになります.この 「覚えておく」役目をはたすのが,この章の主役である変数です. 変数を使えるようになると,プログラムは一気に「計算する道具」らしくなります.
この章では,変数とは何か,値にはどんなデータ型(種類)があるか, そして変数を使ってどう計算するかを学ぶ.
変数は「名前のついた箱」
買い物に行くとき,かごに品物を入れていくところを想像してください.かごには 「くだものかご」「飲みものかご」のように名前をつけておくと,あとで中身を 取り出すのがらくです.
プログラムでも同じことをします.値を入れておく「名前のついた箱」を用意し, あとでその名前を呼べば中身を取り出せます.この箱が変数である (図3.1).
値を箱に入れる:代入
実際に,点数を入れる変数を作ってみましょう.
# 点数 78 を変数 tensuu に入れる tensuu = 78 print(tensuu)
これを実行すると,次のように表示されます.
78
1行目はコメントである(# から行末までは実行されない覚え書きであった). 2行目の tensuu = 78 が,この章でいちばん大事な命令です.これは 「右にある値 78 を,左にある箱 tensuu に入れる」という意味で, この動作を代入という(図3.2). 箱の名前(ここでは tensuu)を変数名といいます.
= は「右の値を左の箱に入れる」3行目の print(tensuu) では,カッコの中にダブルクォートがない点に注目して ください."tensuu" のように引用符ではさむと文字どおり「tensuu」という文字列が 表示されてしまう.引用符なしの tensuu は箱の中身を意味するので, 画面には中身の 78 が表示されます.
= は数学の「等しい」ではなく,「右を左に入れる」という命令です. だから 78 = tensuu のように左右を逆に書くことはできない(エラーになる). 入れる先(箱)を必ず左に書く,と覚えるとよいでしょう.
箱の中身は入れかえられる
変数の便利なところは,中身をあとから入れかえられる点です.同じ箱に 新しい値を代入すると,前の値は消えて新しい値に置きかわる.
kion = 25 # 気温を 25 にする print(kion) kion = 30 # 同じ箱に 30 を入れ直す print(kion)
25 30
1回目の print では 25,2回目では 30 が表示されます.3行目で kion に 30 を代入し直したことで,箱の中身が 25 から 30 に置きかわったからです.このように,1つの箱を何度でも使い回せる.
自分自身を使って入れかえる
入れかえるときの右側には,その箱の今の中身を使うこともできます.買い物で, かごの中の合計金額に新しい品物の値段を足していく場面を考えてみましょう.
goukei = 0 # はじめは 0 円 goukei = goukei + 150 # りんご150円を足す goukei = goukei + 90 # みかん90円を足す print(goukei)
240
2行目の goukei = goukei + 150 は,数学の等式として読むと「変だ」と感じる かもしれません.しかし = は代入でした.右側の goukei + 150 を 先に計算し(このとき goukei の中身 0 を使う),その結果 150 を,あらためて左の goukei に入れ直しています.3行目も同じく, 今の中身 150 に 90 を足した 240 を入れ直します.こうして1つの 箱に値をためていける.この「ためていく」書き方は,第5章の繰り返しでよく使います.
goukei = goukei + 150 は右側が先に計算されます.だから,最初の行で goukei = 0 のように一度も代入していない箱をいきなり右側で使うと エラーになります.ためる箱は,使い始める前に 0 を入れておく必要があります.
変数は「名前のついた箱」で,中に値を入れておける.
変数名 = 値で代入します.=は「右を左に入れる」という意味.同じ変数に代入し直すと,中身は新しい値に置きかわる.
名前を付けて値を読み出す
知識
変数は値へ名前を付ける仕組みです。名前をprintへ渡すと、その時点で対応している値が表示されます。
tensuu = 78
print(tensuu)実行前に、表示される行数と各行の値を予想してください。上のコードを編集欄へ開き、変更せずに実行します。その後「出力例」を開き、予想と実行結果を比べてください。入力操作はありません。各表示行の末尾には改行があります。
出力例
78
ヒントを見る
最初の行で名前に対応した値を記録します。表示の行が名前の文字そのものを出すのか、対応する値を出すのか区別してください。
演習の解説
代入でtensuuに78が対応します。表示の行では名前を引用符で囲まず、変数の値を読み出します。
___の1か所だけを補い、上と同じ結果が出るコードにしてください。他の行は変えません。
___ = 78
print(tensuu)ヒントを見る
表示の行で参照している名前と、代入の行の名前を一致させてください。
虫食いの解説
tensuu = 78
print(tensuu)空欄には tensuu が入ります。代入でtensuuに78が対応します。表示の行では名前を引用符で囲まず、変数の値を読み出します。
変数名のつけ方
変数名は自由につけられるが,いくつかの決まりがあります.
半角の英小文字・数字・アンダースコア
_を使います.数字から始めてはいけない(
2tensuuは不可,tensuu2は可).printやifなど,Python があらかじめ使っている語は避ける.
本書では,読んで意味がわかるように変数名をローマ字でつける.たとえば 点数なら tensuu,合計なら goukei,平均なら heikin, 人数なら ninzuu,気温なら kion とします.a や x の ような1文字名は,何の値かわからなくなりやすいので避ける.
変数名では大文字と小文字が区別される.tensuu と Tensuu は 別の箱になります.代入したときと取り出すときで,つづりを完全に同じにする必要があります.
定義と参照の綴りをそろえる
知識
変数名は定義した綴りと同じ綴りで使います。大文字と小文字は区別されます。
goukei = 155
print(goukei)実行前に、表示される行数と各行の値を予想してください。上のコードを編集欄へ開き、変更せずに実行します。その後「出力例」を開き、予想と実行結果を比べてください。入力操作はありません。各表示行の末尾には改行があります。
出力例
155
ヒントを見る
代入の行と表示の行で、同じ名前が使われているか確かめてください。対応する値を読み出した場合の表示を予想します。
演習の解説
代入と参照の両方がgoukeiなので155を表示します。Goukeiやgokeiは別の名前になり、ここでは定義されていません。
___の1か所だけを補い、上と同じ結果が出るコードにしてください。他の行は変えません。
___ = 155
print(goukei)ヒントを見る
名前は1文字違うと別の名前です。定義した名前を参照先と照らし合わせてください。
虫食いの解説
goukei = 155
print(goukei)空欄には goukei が入ります。代入と参照の両方がgoukeiなので155を表示します。Goukeiやgokeiは別の名前になり、ここでは定義されていません。
データには種類がある:整数・小数・文字列
箱に入れる値には種類があります.この種類をデータ型といいます.本書でまず覚える データ型は次の3つである(図3.3).
- 整数(int)
-
0,78,-5のような, 小数点のない数. - 小数(float)
-
1.72,36.5のような, 小数点のある数. - 文字列(str)
-
"こんにちは"のような, ダブルクォートではさんだ文字の並び.
型を確かめる:type()
ある値がどのデータ型なのかは,type(タイプ)という関数で確かめられます.
shinchou = 172 # 整数 taijuu = 58.5 # 小数 namae = "山田" # 文字列 print(type(shinchou)) print(type(taijuu)) print(type(namae))
<class 'int'> <class 'float'> <class 'str'>
<class 'int'> は「整数(int)型である」という意味です.同じように float は小数,str は文字列を表します. 172 のように小数点なしで書くと整数,58.5 のように小数点ありで書くと 小数になります."山田" のようにダブルクォートではさむと文字列になります.
18 と "18" は別物です.前者は整数の18,後者は文字の 「1」と「8」が並んだ文字列です.見た目は似ているが,計算に使えるのは整数の 18 だけです.数として使いたい値をうっかりダブルクォートではさまないよう 注意します.
型によって + の意味が変わる
データ型は,ただの種類分けではありません.同じ + でも,型によってはたらきが 変わる.整数どうしの + は「たし算」だが,文字列どうしの + は 「つなげる」です.
print(3 + 4) # 整数どうし:たし算
print("3" + "4") # 文字列どうし:つなげる7 34
整数の 3 + 4 は 7 になるが,文字列の "3" + "4" は,文字の 「3」と「4」がつながって "34" になります.同じ記号でも,両側の値の型によって 結果がまったく変わる点をおさえておきたい.だから,計算したい数をダブルクォートで はさんでしまうと,思った答えになりません.
型を変える:int() と str()
ある型の値を別の型に変えることを変換といいます.文字列を数に, 数を文字列に変えるには,それぞれ int と str を使います.
moji = "100" # これは文字列
kazu = int(moji) # 整数の 100 に変換
print(kazu + 50) # 数として計算できる
print("値段は" + str(kazu) + "円") # 数を文字列に変換してつなぐ150 値段は100円
2行目の int(moji) は,文字列 "100" を整数の 100 に変えます. これで kazu + 50 のように計算できます.4行目では逆に,整数 kazu を str(kazu) で文字列 "100" に変えてから,+ で前後の文字と つないでいます.数と文字列を + でつなぎたいときは,このように str() で そろえる必要があります.
変換できたか型で確かめる
変換が本当にできているかは,さきほどの type で見ると確かめられます. 文字列の "36" を小数に変えて,前後で型がどう変わるかを見てみましょう.
moji = "36" # 文字列の "36" print(type(moji)) # 変換する前の型 kion = float(moji) # 小数に変換 print(type(kion)) # 変換したあとの型 print(kion + 0.5) # 数として計算できる
<class 'str'> <class 'float'> 36.5
1行目の "36" はダブルクォートではさんであるので文字列です.2行目の type で str(文字列)と確かめられます.3行目の float(moji) で 小数に変換すると,4行目の type は float(小数)に変わります.変換後は 数になっているので,5行目の kion + 0.5 のような計算ができ,36.5 と 求まる.変換がうまくいったか不安なときは,このように type で見るとよいでしょう.
float("36") のように数字だけの文字列は変換できるが, int("abc") のように数字でない文字列を int や float に 渡すとエラーになります.変換できるのは,中身が数字として読める文字列だけです.
値の種類を調べる
知識
整数、小数、文字列は異なるデータ型です。typeで型を調べると、見た目だけでは分からない違いを確認できます。
print(type(78))
print(type(1.72))
print(type("78"))実行前に、表示される行数と各行の値を予想してください。上のコードを編集欄へ開き、変更せずに実行します。その後「出力例」を開き、予想と実行結果を比べてください。入力操作はありません。各表示行の末尾には改行があります。
出力例
<class 'int'>
<class 'float'>
<class 'str'>
ヒントを見る
引用符の有無を手掛かりに、3つの値の種類を予想してください。型を調べた結果は、数値自体の表示とは異なります。
演習の解説
順にint、float、strの型が表示されます。「78」を引用符で囲んだ3行目は整数ではなく文字列です。
___の1か所だけを補い、上と同じ結果が出るコードにしてください。他の行は変えません。
print(___(78))
print(type(1.72))
print(type("78"))ヒントを見る
数値の78と引用符で囲んだ78を比べます。値そのものを表示する場合と、値の種類を調べる場合を区別します。
虫食いの解説
print(type(78))
print(type(1.72))
print(type("78"))空欄には type が入ります。順にint、float、strの型が表示されます。「78」を引用符で囲んだ3行目は整数ではなく文字列です。
算術演算子で計算する
数の計算には演算子を使います.演算子とは + や - の ような,計算の記号のことです.まずは四則演算(たし算・ひき算・かけ算・わり算)を 見てみましょう.
print(7 + 3) # たし算 print(7 - 3) # ひき算 print(7 * 3) # かけ算 print(7 / 3) # わり算
10 4 21 2.3333333333333335
かけ算は *(アスタリスク),わり算は /(スラッシュ)で書く点に 注意します.キーボードから打てない $\times$ や $\div$ という記号は 使いません.また,わり算 / の結果は 2 ではなく 2.3333\ldots のように小数になります.Python では / の結果は いつも小数になる,と覚えておく.
整数のわり算と余り:// と %
「7個のあめを3人で分けると,1人何個で,何個あまるか」を知りたいことがあります. このようなときは // と % を使います.
print(7 // 3) # 何個ずつ分けられるか(商) print(7 % 3) # 何個あまるか(余り)
2 1
//(スラッシュ2つ)は整数のわり算で,小数点以下を切り捨てた商を 返します.%(パーセント)は余りを返します.7を3で割ると「2あまり1」なので, 7 // 3 が 2,7 % 3 が 1 となります.
この // と % は,おつりの計算にも使えます.たとえば 1280 円の おつりを,500円・100円・10円玉で何枚ずつ返すかを考えてみましょう.
otsuri = 1280 print(otsuri // 500) # 500円玉の枚数 otsuri = otsuri % 500 # 500円で払った残り print(otsuri // 100) # 100円玉の枚数 otsuri = otsuri % 100 # さらに残り print(otsuri // 10) # 10円玉の枚数
2 2 8
1280 // 500 は 2 なので500円玉が2枚.1280 % 500 は 280 で,これが残りです.この残り 280 を同じ箱 otsuri に 入れ直し,次は100円で同じことをくり返します.280 // 100 で100円玉が2枚, 残り 80 を 80 // 10 で10円玉が8枚と求まる.「商で枚数,余りで残り」を くり返すのが,両がえやおつりの基本の考え方です.
べき乗:**
同じ数を何回かかけるべき乗は,アスタリスク2つ ** で書きます.
print(2 ** 3) # 2を3回かける(2×2×2) print(5 ** 2) # 5の2乗
8 25
2 ** 3 は 2 を3回かけた 8,5 ** 2 は5の2乗の 25 です.
かけ算 * とべき乗 ** を取りちがえやすい.2 * 3 は 「2かける3」で 6,2 ** 3 は「2の3乗」で 8 です.アスタリスクが 1つか2つかで意味がまったく変わるので注意します.
四則演算は
+,-,*,/で書きます./の結果は小数.//は整数のわり算(商),%は余り,**はべき乗.記号はすべて半角で入力します.
割り算の商と余りを比べる
知識
整数の割り算には通常の割り算、商、余りがあります。//と%は別の結果を求めます。
print(7 / 3)
print(7 // 3)
print(7 % 3)実行前に、表示される行数と各行の値を予想してください。上のコードを編集欄へ開き、変更せずに実行します。その後「出力例」を開き、予想と実行結果を比べてください。入力操作はありません。各表示行の末尾には改行があります。
出力例
2.3333333333333335
2
1
ヒントを見る
通常の割り算、整数の商、余りを順に求めてください。商と余りを使って元の整数を作り直せるかも確認します。
演習の解説
通常の割り算の後、整数の商2、余り1をそれぞれ表示します。7=3×2+1という関係で商と余りを確認できます。
___の1か所だけを補い、上と同じ結果が出るコードにしてください。他の行は変えません。
print(7 / 3)
print(7 ___ 3)
print(7 % 3)ヒントを見る
1行目は通常の割り算、最後は余りです。真ん中の行では小数部分を含まない商を求めます。
虫食いの解説
print(7 / 3)
print(7 // 3)
print(7 % 3)空欄には // が入ります。通常の割り算の後、整数の商2、余り1をそれぞれ表示します。7=3×2+1という関係で商と余りを確認できます。
文字列をつなぐ
+ は数だけでなく,文字列どうしにも使えます.文字列に + を使うと, 2つの文字列がつながって1つになります.これを文字列の連結といいます.
sei = "山田" mei = "太郎" namae = sei + mei # 文字列をつなぐ print(namae)
山田太郎
sei + mei で "山田" と "太郎" がつながり,"山田太郎" という1つの文字列になりました.
連結と print のカンマ区切りの違い
第2章で,print の中をカンマ , で区切ると複数の値を並べて表示できる ことを学んだ.連結 + とカンマ , は,似ているようで違う.
print("山田" + "太郎") # 連結:すきまなし
print("山田", "太郎") # カンマ:自動で半角スペースが入る山田太郎 山田 太郎
+ はすきまなくつなぐのに対し,カンマ , は値と値の間に自動で 半角スペースを1つ入れて表示します.用途に応じて使い分けるとよいでしょう.
連結 + は文字列どうしでしか使えません."点数は" + 78 の ように文字列と数を + でつなごうとするとエラーになります.数を文字とつなぎたい ときは,print("点数は", 78) のようにカンマで区切るとよいでしょう.
名前に呼び掛けをつなげる
知識
文字列同士は+でつなげられます。数値の加算と同じ記号ですが、文字列では連結です。
namae = "松本"
print(namae + "さん")実行前に、表示される行数と各行の値を予想してください。上のコードを編集欄へ開き、変更せずに実行します。その後「出力例」を開き、予想と実行結果を比べてください。入力操作はありません。各表示行の末尾には改行があります。
出力例
松本さん
ヒントを見る
2つの文字列が結び付いた後の1つの文字列を予想します。自動で空白を挟む複数引数の表示とは区別してください。
演習の解説
名前の文字列と「さん」がつながり「松本さん」になります。printの複数引数と違い、自動の空白は入りません。
___の1か所だけを補い、上と同じ結果が出るコードにしてください。他の行は変えません。
namae = "松本"
print(namae ___ "さん")ヒントを見る
名前と呼び掛けはどちらも文字列です。間に自動の空白を入れず、一つの文字列にまとめます。
虫食いの解説
namae = "松本"
print(namae + "さん")空欄には + が入ります。名前の文字列と「さん」がつながり「松本さん」になります。printの複数引数と違い、自動の空白は入りません。
変数を使って計算する
ここまでをまとめて,変数を使った計算をしてみましょう.3人の点数の合計から平均を 求めるプログラムです.
tensuu1 = 80
tensuu2 = 75
tensuu3 = 91
goukei = tensuu1 + tensuu2 + tensuu3 # 合計
ninzuu = 3
heikin = goukei / ninzuu # 平均 = 合計 ÷ 人数
print("合計", goukei)
print("平均", heikin)合計 246 平均 82.0
goukei に3人の点数の合計を代入し,それを ninzuu(人数)で割って heikin(平均)を求めています.いったん合計を箱にしまっておき,あとで 取り出して割り算に使う,という流れです.これが章のはじめに述べた 「覚えておく」しくみのはたらきです.
平均が 82 ではなく 82.0 と表示されるのは,わり算 / の結果が 小数になるためです.
小数とべき乗を組み合わせる
変数と演算子を組み合わせれば,少し複雑な式も書けます.身長と体重から体格の目安を 計算してみましょう.身長(メートル)を2乗し,体重をそれで割る計算です.
shinchou = 1.7 # 身長(メートル)
taijuu = 60.0 # 体重(キログラム)
kekka = taijuu / shinchou ** 2 # 体重 ÷ 身長の2乗
print("目安", kekka)目安 20.76124567474049
4行目の taijuu / shinchou ** 2 では,まず shinchou ** 2(身長の2乗)が 計算され,そのあとで taijuu がその結果で割られます.算数と同じく,べき乗は わり算より先に計算されます.小数どうしの計算なので,結果も小数になります.
複数の変数で集計する:アンケートの平均
複数の変数を組み合わせると,身近な集計もそのまま書けます.5段階のアンケートで, 4人が 5,3,4,2 と答えたときの平均を求めてみましょう.
kotae1 = 5 # 1人目の回答
kotae2 = 3 # 2人目の回答
kotae3 = 4 # 3人目の回答
kotae4 = 2 # 4人目の回答
goukei = kotae1 + kotae2 + kotae3 + kotae4 # 合計
ninzuu = 4
heikin = goukei / ninzuu # 平均 = 合計 ÷ 人数
print("合計", goukei)
print("平均", heikin)合計 14 平均 3.5
4人の回答をそれぞれ別の箱に入れ,5行目でそれらをすべて足して goukei(合計)に 代入しています.7行目では goukei を ninzuu(人数)で割って heikin(平均)を求めた.合計 14 を4で割るので,平均は小数の 3.5 になります.このように,値を変数にためてから割り算に使うと,集計の手順が そのまま式になります.
平均を求めるとき,goukei / ninzuu を goukei / 4 のように人数を 数字で直接書いてもよいが,あとで人数が変わると直し忘れやすい.人数も ninzuu という変数にしておくと,1か所だけ直せばすむので間違いが減る.
計算の順番は算数と同じで,** が最初,次に * / // %,最後に + - です.順番を変えたいときは,算数と同様に カッコ (\ ) でくくる.たとえば (2 + 3) * 4 は 20, 2 + 3 * 4 は 14 です.
使う前に代入しておく必要があります.まだ一度も代入していない変数を print などで使うと,「そんな名前の箱は知らない」というエラー (NameError)になります.計算に使う変数は,必ず先に代入しておく.
変数から面積を求める
知識
式の右辺には変数を使えます。変数の値を読み出し、計算結果を別の名前へ代入します。
tate = 3
yoko = 4
menseki = tate * yoko
print(menseki)実行前に、表示される行数と各行の値を予想してください。上のコードを編集欄へ開き、変更せずに実行します。その後「出力例」を開き、予想と実行結果を比べてください。入力操作はありません。各表示行の末尾には改行があります。
出力例
12
ヒントを見る
縦と横の値を式へ当てはめ、計算結果がどの名前へ入るか追います。最後に参照する変数の値を確認してください。
演習の解説
tateの3とyokoの4を掛けて12をmensekiへ代入します。元のtateとyokoの値は変わりません。
___の1か所だけを補い、上と同じ結果が出るコードにしてください。他の行は変えません。
tate = 3
yoko = 4
menseki = tate ___ yoko
print(menseki)ヒントを見る
縦と横の長さから面積を求める式を思い出し、その式へ変数の値を当てはめてください。
虫食いの解説
tate = 3
yoko = 4
menseki = tate * yoko
print(menseki)空欄には * が入ります。tateの3とyokoの4を掛けて12をmensekiへ代入します。元のtateとyokoの値は変わりません。
= と == は違う
ここで,初学者がもっともよくつまずく点を予告しておく.= と == は まったく別物です.
=(イコール1つ)… 代入.「右を左に入れる」命令.==(イコール2つ)… 比較.「左と右が等しいか」を調べます.
たとえば tensuu = 80 は「tensuu に80を入れる」だが, tensuu == 80 は「tensuu は80と等しいか?」という問いかけで あり,答えとして True(はい)か False(いいえ)が返る.いまは深く 考えず,値を入れるときは =,等しいか調べるときは ==と 区別だけ覚えておけばよいでしょう.== を使った条件分岐は第4章でくわしく学ぶ.
等しいか調べたいのに == を = と書いてしまうのは,非常によくある 間違いです.「比べるときはイコール2つ」と声に出して覚えるとよいでしょう.
代入後の値を比較する
知識
=は代入、==は等しいかを調べる比較です。代入後の値を比較すると真理値が得られます。
x = 5
print(x == 5)
print(x == 3)実行前に、表示される行数と各行の値を予想してください。上のコードを編集欄へ開き、変更せずに実行します。その後「出力例」を開き、予想と実行結果を比べてください。入力操作はありません。各表示行の末尾には改行があります。
出力例
True
False
ヒントを見る
代入で決まった値を、2つの比較の左側へそれぞれ当てはめてください。比較は値を書き換えず、真偽を求めます。
演習の解説
xに5を代入した後、5と等しい比較はTrue、3と等しい比較はFalseです。=を2個書く理由は代入と比較を区別するためです。
___の1か所だけを補い、上と同じ結果が出るコードにしてください。他の行は変えません。
x = 5
print(x ___ 5)
print(x == 3)ヒントを見る
値を入れる記号と、一致を調べる記号を区別します。表示の行には真偽を返す式が必要です。
虫食いの解説
x = 5
print(x == 5)
print(x == 3)空欄には == が入ります。xに5を代入した後、5と等しい比較はTrue、3と等しい比較はFalseです。=を2個書く理由は代入と比較を区別するためです。
キーボードから値を受け取る:input()
これまでは値をプログラムの中に直接書いてきた.しかし,実行するたびに違う値を 扱いたいこともあります.そんなときは input(インプット)関数を使うと, キーボードから入力した値を受け取れます.
namae = input("名前を入力してください:")
print("こんにちは", namae)実行すると,まず案内の文が表示されて入力待ちになります.ここで 「山田」と打ってEnterキーを押すと,次のようになります.
名前を入力してください:山田 こんにちは 山田
input("\ldots") のカッコの中の文字列は,入力をうながすための案内として 画面に表示されます.入力された値は変数 namae に代入され,あとで使えます.
数として使うなら int() が要る
ここで大事な注意があります.input で受け取った値は,数字を入れても 文字列になります.そのため,そのままでは計算に使えません.数として使いたい ときは int(整数に変換)で整数に変換する必要があります.
tensuu = int(input("点数を入力:")) # 文字列を整数に変換
kekka = tensuu + 10 # 数として計算できる
print("補正後", kekka)点数を入力:70 補正後 80
int(input(\ldots)) と書くことで,キーボードから受け取った文字列をいったん 整数に変換してから tensuu に代入しています.これで tensuu + 10 の ような計算ができます.小数として受け取りたいときは int の代わりに float を使います.
int() を忘れて tensuu = input("点数を入力:") とすると, tensuu は文字列のままなので,tensuu + 10 がエラーになります. キーボードから受け取った数を計算に使うときは,int() を忘れません.
入力した値で計算する:買い物の例
入力と計算を組み合わせれば,実行のたびに違う値を扱う「道具」らしいプログラムが 作れます.品物の値段と個数をキーボードから受け取り,合計金額を表示してみましょう.
nedan = int(input("値段:")) # 値段を整数で受け取る
kosuu = int(input("個数:")) # 個数を整数で受け取る
goukei = nedan * kosuu # 合計 = 値段 × 個数
print("合計は", goukei, "円")値段:120 個数:3 合計は 360 円
1行目と2行目で,値段と個数をそれぞれ int(input(...)) で整数として受け取って います.どちらも int で変換しているので,3行目の nedan * kosuu という かけ算がそのままできます.120 円の品物を 3 個買うと合計 360 円 と求まる.入力する値を変えれば,同じプログラムでどんな買い物でも計算できます.
入力した値で計算するときは,計算に使う前に
int()で型をそろえます.複数の値を受け取りたいときは,
inputを必要な数だけ並べる.入力する値を変えるだけで,同じプログラムをいろいろな場面に使えます.
input("案内")でキーボードから値を受け取れます.受け取った値は文字列になります.数として使うなら
int(input(...))で整数に変換します.小数で受け取りたいときは
float(input(...))を使います.
入力された文字を計算に使う
知識
inputの返値は文字列です。整数として計算するにはintで変換します。ここでは入力された文字の変換を独立して確かめます。
nyuuryoku = "20"
nenrei = int(nyuuryoku)
print(nenrei + 1)実行前に、表示される行数と各行の値を予想してください。上のコードを編集欄へ開き、変更せずに実行します。その後「出力例」を開き、予想と実行結果を比べてください。入力操作はありません。各表示行の末尾には改行があります。
出力例
21
ヒントを見る
引用符で囲まれた値が、変換の後にはどの種類になるか追ってください。最後の式が連結か数値計算かを区別します。
演習の解説
入力相当の文字列「20」を整数20に変え、1を加えて21を表示します。文字列のまま数値1を足すことはできません。
___の1か所だけを補い、上と同じ結果が出るコードにしてください。他の行は変えません。
nyuuryoku = "20"
nenrei = ___(nyuuryoku)
print(nenrei + 1)ヒントを見る
入力相当の値は文字列です。小数でない数値として扱える型へ変換してから加算します。
虫食いの解説
nyuuryoku = "20"
nenrei = int(nyuuryoku)
print(nenrei + 1)空欄には int が入ります。入力相当の文字列「20」を整数20に変え、1を加えて21を表示します。文字列のまま数値1を足すことはできません。
この章のまとめ
この章では,値を覚えておくための変数と,値の種類(データ型),そして計算の しかたを学んだ.変数を使えるようになったことで,「受け取った値を処理して結果を 出す」という,第1章で見た入力・処理・出力の流れを,自分の手で書けるように なりました.
変数は名前のついた箱.
変数名 = 値で代入し,中身は入れかえられます.データ型には整数・小数・文字列があり,
type()で確かめられます.計算は
+ - * /,整数わり算//,余り%,べき乗**.=は代入,==は比較(等しいか調べる).まったく別物です.
古い値から新しい値へ更新する
知識
変数への代入と更新を区別します。x=x+2は、古い値で右辺を計算してから新しい値へ更新します。
x = 5
x = x + 2
print(x)実行前に、表示される行数と各行の値を予想してください。上のコードを編集欄へ開き、変更せずに実行します。その後「出力例」を開き、予想と実行結果を比べてください。入力操作はありません。各表示行の末尾には改行があります。
出力例
7
ヒントを見る
更新する行の右側を、古い値で計算してください。その結果で左側を更新してから、表示する行へ進みます。
演習の解説
古いxは5、右辺5+2は7です。その7をxへ代入するため、表示されるのは7です。
___の1か所だけを補い、上と同じ結果が出るコードにしてください。他の行は変えません。
x = 5
x = x ___ 2
print(x)ヒントを見る
更新行の右側では、まだ古い値を使っています。右側を計算してから左側を更新してください。
虫食いの解説
x = 5
x = x + 2
print(x)空欄には + が入ります。古いxは5、右辺5+2は7です。その7をxへ代入するため、表示されるのは7です。
図で理解する
練習して確かめる
章末演習(10問)
ここには解答を載せていません。
- 章末演習章末演習 1
変数への代入と表示
3つの変数
a、b、cに整数を代入し、変数名と値の組を3行で表示します。入力
入力なし(
input()は使わない)。処理条件
- 代入文を使い、変数
aに5、bに7、cに-3を代入します。 - 表示には
print()を使い、値の部分は必ず変数から取り出します。print("a = 5")のように、値を文字列の中に直接書いてはいけません。 - 変数名を示す
a =の部分は、文字列として書いてよいでしょう。print()の引数をカンマで区切ると、引数の間に半角空白が1つ入ります。
出力
- 3行を、
a、b、cの順に表示します。 - 各行は「変数名、半角空白1つ、
=、半角空白1つ、値」の形にします。英字・数字・記号はすべて半角とします。 - 負の数には半角のマイナス記号を付ける。
- 行末に空白を付けません。見出しや空行など、ほかの表示はしません。
実行例
出力例:
a = 5 b = 7 c = -3右側のエディタにコードを書いて実行し、出力例と一致するか確かめてください。
ヒントを見る
まず3つの代入文を書き、次に3つの表示文を書きます。表示文では、文字列として書く部分と、変数から取り出す部分を分けて考えましょう。
- 代入文を使い、変数
- 章末演習章末演習 2
変数を使った計算と代入の順序
変数
bとcの値の和を変数aに代入し、a、b、cの値を表示します。代入する順序と表示する順序は違ってよいことを確かめる。入力
入力なし(
input()は使わない)。処理条件
- 変数
bに5、cに3を代入します。 - 変数
aには数値を直接書かず、bとcを+で足した式を代入します。 - 式の中で使う変数には、その式より前の行で値を代入しておく。3つの代入文をどの順に並べるかは自分で決めます。
- 表示には
print()を使い、値の部分は変数から取り出します。
出力
- 3行を、
a、b、cの順に表示する(代入した順ではない)。 - 各行は「変数名、半角空白1つ、
=、半角空白1つ、値」の形にします。英字・数字・記号はすべて半角とします。 - 行末に空白を付けません。見出しや空行など、ほかの表示はしません。
実行例
出力例:
a = 8 b = 5 c = 3確認例:
bに10、cに-4を代入するように書き換えると、aの行も自動的に変わり、出力は次のようになります。a = 6 b = 10 c = -4右側のエディタにコードを書いて実行し、出力例と一致するか確かめてください。
ヒントを見る
Pythonは上の行から順に実行します。a の式を実行する時点で、b と c に値が入っている必要があります。代入の並びと表示の並びは、別々に考えましょう。
- 変数
- 章末演習章末演習 3
算術演算子による和・差・積
変数
aとbの和・差・積を算術演算子で計算し、3行で表示します。入力
入力なし(
input()は使わない)。処理条件
- 変数
aに10、bに3を代入します。 - 和は
+、差は-、積は*で計算します。差はaからbを引いた値とします。 - 式は
print()の括弧の中に直接書いても、結果を別の変数に代入してから表示してもよいでしょう。ただし、計算結果の数値を直接書いてはいけません。
出力
- 3行を、和、差、積の順に表示します。
- 各行は半角の整数だけとし、見出し・単位・空白は付けません。
- 負の数には半角のマイナス記号を付ける。
実行例
出力例:
13 7 30確認例:
aに-4、bに6を代入するように書き換えると、出力は次のようになります。2 -10 -24右側のエディタにコードを書いて実行し、出力例と一致するか確かめてください。
ヒントを見る
最初に2つの代入文を書きます。次に、和・差・積の順に1行ずつ表示します。差では、どちらからどちらを引くかに注意しましょう。
- 変数
- 章末演習章末演習 4
変数自身を使った再代入
変数の値を、その変数自身の値を使って更新する手順を順に実行し、最後に求めた
cの値を表示します。入力
入力なし(
input()は使わない)。処理条件
- 次の4つの処理を、この順序で実行します。
- 変数
aに5、bに7を代入します。 aの値に1を加えた値を、aに代入し直します。bの値に、2.で更新した後のaの値を加えた値を、bに代入し直します。aとbの和を、変数cに代入します。- 2.と3.は、右辺に同じ変数を含む代入文(または複合代入演算子
+=)で書きます。a2のような別の変数を作って回避してはいけません。 - 表示には
print()を使い、変数cを表示します。計算結果の数値を直接書いてはいけません。
出力
- 1行だけ表示します。内容は
cの値(半角の整数)だけとし、見出し・単位・空白は付けません。
実行例
出力例:
19右側のエディタにコードを書いて実行し、出力例と一致するか確かめてください。
ヒントを見る
1行実行するごとに a と b の値がどう変わるかを、紙に表を作って追いかけましょう。3.で使う a は、更新する前の値ではありません。
- 章末演習章末演習 5
規則に従った変数名の付け方
自分で名前を付けた2つの変数を使い、1つ目の変数の値を10倍した値を表示します。
入力
入力なし(
input()は使わない)。処理条件
- 変数を2つ使います。1つ目の変数に整数
5を代入し、2つ目の変数には「1つ目の変数*10」の式を代入します。 - 変数名は自分で決めます。ただし、次の規則をすべて守る。
- 英小文字で始める。
- 使ってよい文字は、英小文字・数字・アンダースコア
_だけとします。 - 2つ目の変数名は、2つの英単語を
_でつないだ名前にする(total_priceのような形)。 a、xのような1文字の名前は使いません。if、for、Trueなどの予約語や、print、input、int、strなどの組み込み関数の名前は使いません。print()で2つ目の変数を表示します。計算結果の数値を直接書いてはいけません。
出力
- 1行だけ表示します。内容は2つ目の変数の値(半角の整数)だけとし、見出し・単位・空白は付けません。
実行例
出力例:
50右側のエディタにコードを書いて実行し、出力例と一致するか確かめてください。
ヒントを見る
まず、それぞれの値が何を表すかを考えて2つの名前を決め、規則を1つずつ確かめます。名前が決まったら、代入→計算→表示の順に書きましょう。
- 変数を2つ使います。1つ目の変数に整数
- 章末演習章末演習 6
str() による数値と文字列の連結
文字列と数値を
+で連結して、3つの文を表示します。数値はstr()で文字列に変換してから連結します。入力
入力なし(
input()は使わない)。次の4つの変数をプログラムの最初で代入し、以降の処理で使います。nameに文字列"Jiro"ageに整数19tempに整数30inchに整数24
処理条件
- 1行目は
nameとage、2行目はtemp、3行目はinchを使って文を作ります。 - 3行目のセンチメートルの値は、
inchに2.54を掛ける式で求めます。計算結果を直接書いてはいけません。 - 各行は、文字列を
+で連結して1つの文字列にしてから、print()で表示します。数値はstr()で文字列に変換します。 print()の引数をカンマで区切る書き方、f文字列、format()は使わない(カンマで区切ると余分な空白が入るため)。
出力
- 3行を、出力例と同じ順序・同じ文字で表示します。
- 「は今年で」「才です」「今日の気温は」「度です」「インチ」「センチ」は全角文字とします。英字・数字・
=・小数点は半角とします。 - 空白は、3行目の
=の前後に半角空白を1つずつ置くだけとします。ほかの位置には空白を入れません。
実行例
出力例:
Jiroは今年で19才です 今日の気温は30度です 24インチ = 60.96センチ右側のエディタにコードを書いて実行し、出力例と一致するか確かめてください。
ヒントを見る
まず、文字列のまま連結できる部分と、str() で変換が必要な部分を見分けます。次に、空白がどこに入るかを、出力例と1文字ずつ照らし合わせて確かめましょう。
- 章末演習章末演習 7
input() で受け取った文字列の連結
キーボードから名前を1つ受け取り、その名前を使ったあいさつ文を1行で表示します。
入力
キーボードから1行入力します。内容は名前を表す文字列(半角英小文字、1〜20文字、空白を含まない)とします。
処理条件
input()で名前を受け取り、変数に代入します。input()の括弧の中には何も書かない(「名前を入力:」などの案内文は表示しない)。- 受け取った名前とあいさつの文字列を
+で連結し、print()で表示します。
出力
- 1行だけ表示します。入力した名前の直後に「さん、こんにちは!」を続ける。
- 「さん、こんにちは!」の読点「、」と感嘆符「!」は全角文字とします。
- 名前とあいさつの間、行頭、行末には空白を入れません。
- 出力例には、キーボードから入力した値を含めません。
実行例
入力例1(キーボードから入力する値):
kujira出力例1(プログラムが表示する内容):
kujiraさん、こんにちは!入力例2(キーボードから入力する値):
taro出力例2(プログラムが表示する内容):
taroさん、こんにちは!右側のエディタにコードを書いて実行し、出力例と一致するか確かめてください。
ヒントを見る
入力を受け取る→変数に入れる→文字列と連結して表示する、の順に考えます。全角と半角の記号を取り違えないよう、出力例と1文字ずつ比べましょう。
- 章末演習章末演習 8
int() による入力値の数値変換
キーボードから整数を1つ受け取り、その2倍の値を表示します。
入力
キーボードから1行入力します。内容は -10000 以上 10000 以下の整数(半角数字。負の数は先頭に
-を付ける)とします。処理条件
input()で受け取った値をint()で整数に変換してから計算します。- 2倍の値は
*で計算します。float()は使いません。 input()の括弧の中には何も書きません。
出力
- 1行だけ表示します。内容は2倍した値(半角の整数)だけとし、見出し・単位・空白は付けません。
- 入力が
0のときは0を、負の数のときは負の数を表示します。 - 出力例には、キーボードから入力した値を含めません。
実行例
入力例1(キーボードから入力する値):
1100出力例1(プログラムが表示する内容):
2200入力例2(キーボードから入力する値):
0出力例2(プログラムが表示する内容):
0入力例3(キーボードから入力する値):
-7出力例3(プログラムが表示する内容):
-14右側のエディタにコードを書いて実行し、出力例と一致するか確かめてください。
ヒントを見る
input() が返す値の型を思い出しましょう。変換しないまま * 2 を使うと、計算ではなく別の処理になります。どの段階で型を変えるかを考えます。
- 章末演習章末演習 9
2つの入力値を使った合計金額の計算
品物の値段と個数をキーボードから受け取り、合計金額を計算して1行で表示します。
入力
キーボードから2行入力します。
- 1行目:品物の値段(0 以上 100000 以下の整数)
- 2行目:個数(0 以上 1000 以下の整数)
処理条件
input()を2回使い、それぞれint()で整数に変換して、値段と個数を別々の変数に代入します。- 合計金額は値段と個数を
*で掛けて求め、別の変数に代入します。 input()の括弧の中には何も書きません。- 表示の方法(
print()のカンマ区切り、またはstr()と+による連結)は自由とします。
出力
- 1行だけ表示します。「合計は」、半角空白1つ、合計金額(半角の整数)、半角空白1つ、「円」の順に並べる。
- 「合計は」「円」は全角文字とします。行頭・行末に空白を付けません。
- 個数が
0のときは、合計金額として0を表示します。 - 出力例には、キーボードから入力した値を含めません。
実行例
入力例1(キーボードから入力する値):
120 3出力例1(プログラムが表示する内容):
合計は 360 円入力例2(キーボードから入力する値):
980 0出力例2(プログラムが表示する内容):
合計は 0 円右側のエディタにコードを書いて実行し、出力例と一致するか確かめてください。
ヒントを見る
入力を2回受け取る→それぞれ整数にする→掛け算の結果を変数に入れる→表示する、の順に進めます。空白の数は、出力例で数えて確かめましょう。
- 章末演習章末演習 10
3人の点数の合計と平均
3人のテストの点数をキーボードから受け取り、合計と平均を計算して2行で表示します。
入力
キーボードから3行入力します。各行は1人分の点数で、0 以上 100 以下の整数とします。
処理条件
input()を3回使い、それぞれint()で整数に変換して、3つの変数に代入します。- 合計は3つの変数を
+で足して求めます。組み込み関数sum()やリストは使いません。 - 平均は、合計を
/で3で割って求めます。//やround()は使わず、/の結果をそのまま表示します。 input()の括弧の中には何も書きません。
出力
- 2行を表示します。1行目は「合計は」、半角空白1つ、合計(半角の整数)、半角空白1つ、「点」の順に並べる。2行目は「平均は」、半角空白1つ、平均、半角空白1つ、「点」の順に並べる。
/の結果は小数(float型)になるため、割り切れる場合も、平均は80.0のように.0付きで表示されます。割り切れない場合は、Pythonが表示する桁数のまま表示します。- 「合計は」「平均は」「点」は全角文字とします。行頭・行末に空白を付けません。
- 出力例には、キーボードから入力した値を含めません。
実行例
入力例1(キーボードから入力する値):
70 80 90出力例1(プログラムが表示する内容):
合計は 240 点 平均は 80.0 点入力例2(キーボードから入力する値):
0 0 0出力例2(プログラムが表示する内容):
合計は 0 点 平均は 0.0 点入力例3(キーボードから入力する値):
100 100 99出力例3(プログラムが表示する内容):
合計は 299 点 平均は 99.66666666666667 点右側のエディタにコードを書いて実行し、出力例と一致するか確かめてください。
ヒントを見る
3つの値を受け取って整数にする→合計を求める→合計を使って平均を求める→2行表示する、の順に考えます。平均の式で、何を何で割るかを確かめましょう。