Python♪基本:変数は覚えたし、次は型変換と簡単な入出力input(), print()

 ゆうちゃん(中1)との勉強会。変数は覚えたので、次は型変換と簡単な入出力「input()」,「print()」をやってみます。ここまでやれば、やっと、プログラムっぽくなってくるね。type()でデータ型を確認したり、計算した結果を文字列と組み合わせて出力したりしてみましょう。

 「きたよ~」今日も、ゆうちゃんがやってきました。あれ、また背が伸びた?1週間違うだけで、ぐっと、背が伸びてる気がする。夏休み前に身長抜かれて、ショック(うれしい?)だったんだけど、あっという間に、見上げるようになっちゃうんだろうな~。もうすぐ、あの、ゆうちゃんが、おっさんになってしまう~。まだ、声変わりはしてないけど・・・。

 まあ、それはそれ。今日も、Pytyonの勉強はじめましょう!

0.ゆうちゃんとPythonシリーズ

この記事は「ゆうちゃんとPythonシリーズ」の記事です。一連の記事は、以下のリンク集を参照してください。

中学生のゆうちゃんとPythonシリーズ

なお、それぞれの記事は、シリーズの中でそれまでに習った文法を使ってサンプルコードを考えています。実際には、もっと、効率のよい書き方があるかもしれませんが、ご了承ください。

1.数値の足し算と文字列の足し算の比較。

 ちょっと復習ですが、1+2を計算して出力してみましょう。簡単なプログラムですね。

#コード01
x = 1 + 2
print(x)
#出力01
3

 コード01は、コード02のように、print()のカッコの中に、直接、計算式「1 + 2」を記述することもできます。「1 + 2」と出力されるのではなく、計算結果である「3」が出力されます。

#コード02
print(1 + 2)
#出力02
3

  次は、文字列の和(’1’ + ’2’)を出力します。’1’や ’2’は、文字列型(str型、ストリング型)です。結果は出力03のように、12となります。「+」という演算子は、数値の場合は2つの数値の和を求めますが、文字列の場合は、2つの文字列を結合します。このように、pythonはデータ型を判断しながら実行の方法を変えています。つまり、コードを記述する側も、しっかり、データ型を意識しましょう。

#コード03
x = '1' + '2'
print(x)

print('1' + '2')
#出力03
12
12

 さてさて、コード04、コード05はエラーになるコードです。コード04は、文字列型(str型、ストリング型)と整数型(int型、イント型)の和を求めようとしていますが、演算子「+」は、違うデータ型である文字列型と数値型(int型、float型)の演算を行うことはできません。

#コード04 → エラー
#「+」で「'1'」と「2」の演算はできません。
print('1' + 2)

 コード05は’12’ – ‘2’で、’1’にならないかなと思って実行してみましたが、エラーになりました。演算子「-」は、文字列と文字列の演算には使えません。

#コード05 → エラー
#「-」では文字列の演算はできません。
print('12'-'2')

2.input()

 input() (読み:インプット)を使うことによって、プログラムを実行した後に、データを入力することができます。
 input()関数は以下のような書式になります。そして、入力されたデータは左辺(さへん)の「変数名」に代入されます。また、右辺(うへん)の括弧の中の文字列は入力待ちのときに表示されます。
 変数名 = input(文字列) 

 さて、言葉ではわかりにくいと思いますので、Pythonの統合開発環境(IDE)のひとつであるSpyderを使って、コード06を実行してみます。

#コード06
x = input('数字をいれてね:')
print(x)

 Spyderの画面は、以下の通りです。左側は「テキストエディタ」右下は「Ipythonコンソール」です。

 左側のテキストエディタにコード06を入力し、ツールバーの「緑の横向き▼ボタン」を押すか、キーボードの「F5(ファンクション5)ボタン」を押すとプログラムが実行され、右下のIpyhonコンソールの部分に、以下のように表示されます。

数字を入れてね:

 ここで、データを入力するのですが、この「数字を入れてね:」の右側ぐらいを、一度、マウスでクリックしてください。これが、ポイントです。そして、キーボードで、「3」と入力します。「数字を入れてね:」の右をクリックしないと、左側のテキストエディタに「3」が記述されたり、うまく入力できません。

数字を入れてね:3

 そして、「enterキー」を押すと、コード06の「x」に「3」が代入され、「print(x)」によって、「3」が出力されます。

数字を入れてね:3
3

 input()の括弧の中の文字列は省略でき、コード07のような書き方もできますが、「数字を入れてね:」のようなコメントがなにも表示されないので、慣れていないと何が起こったのかわからず、びっくりすると思います。できるだけ、文字列は入れるようにしましょう。

#コード07
x = input()
print(x)

3.type()で型を調べよう

 このようにデータ型は大切です。そこで、type()という便利な関数を紹介します。typeの括弧の中に型を調べたいものを入れると、型を調べることができます。コード08の出力結果が出力08です。「1」「1.1」「’a’」の型がそれぞれ「int」「float」「str」になっていることがわかります。なお、出力の「class」という部分は、今は無視してもかまいません。

#コード08
print(type(1))
print(type(1.1))
print(type('a'))
#出力08
<class 'int'>
<class 'float'>
<class 'str'>

 では、変数はどうなるのでしょうか。コード09に対する出力09を見てみましょう。変数xの型は、変数xに代入した値の型と同じになっています。しかも、「x」という名称の変数は、実行の途中で「int型」→「float型」→「str型」とデータ型が変化しています。プログラミング言語によっては、このようなデータ型の変化を許さない言語もあり、Pythonのようにデータ型の変化を許す言語を「動的型付け言語(どうてきかたづけげんご)」といい、許さない言語を「静的型付け言語(せいてきかたづけげんご)」といいます。

#コード09
x = 1
print(type(x))
x = 1.1
print(type(x))
x = 'a'
print(type(x))
#出力09
<class 'int'>
<class 'float'>
<class 'str'>

 さて、最後にinput()関数で入力したデータの型を調べてみましょう。コード10の出力である出力10をみると、 整数型である10を入れたつもりでも、 文字列型になっていることがわかります。
 このように、input()関数で入力したデータはすべて文字列型になるので、注意する必要があります。

#コード10
x = input('整数を入れてね:')
print(x)
print(type(x))
#出力10
整数を入れてね:3
3
<class 'str'>

4. データ型が原因のエラー

 コード11はエラーになります。コード11の2行目のxは「10 * 10」の計算結果なので整数型です。したがって、3行目の出力「print(‘計算結果は’ + x)」では、文字列型の「’計算結果は’」と整数型の「x」を連結することができません。 

#コード11 → エラー
x = 10 * 10
print('計算結果は' + x) int型のxとstr型のxを連結することはできません
#出力11
    print('計算結果は' + x)
TypeError: must be str, not int

 コード12もエラーになります。コード12では、input()で入力したデータは文字列型です。したがって、3行目の「y = x + 10」で文字列型の「x」と整数型の「10」の和を求めることはできません。
 コード11もコード12も、ついつい、間違えてしまうエラーなので注意する必要があります。

#出力12 → エラー
x = input('整数をいれてね:')
y = x + 10   #str型のxとint型の10の和を求めることはできません
print(y)
#出力12
整数をいれてね:3
  ・
  ・
  ・
    y = x + 10
TypeError: must be str, not int

 ところで、出力11、出力12はエラーメッセージです。例えば出力12ではエラーの場所「y = x +10」とエラーの内容が表示されます。「TypeError: must be str, not int」をgoogle翻訳で翻訳してみると「TypeError:intでなくstrでなければなりません」と翻訳されます。
 翻訳されない部分があったり、変な日本語になることも多いですが、エラーの内容の雰囲気はつかむことができます。今は、こんな便利なツールがあるので、是非、google翻訳を使って、エラーメッセージに慣れましょう。

 ゆうちゃんはエラーが大嫌いです。すぐにイラっとして、横目で私を見て、助けてほしそうな顔をします。「すごく考えたけど、なんでエラーになるのかわからない」と言うけど、私から見ると、まだまだです。エラーは消えないときには1日かけて消えないことがあります。時間ばかりが過ぎていき、冷や汗タラリ。エラー消しに慣れないと長いプログラムは組めません。ゆうちゃん、エラーが出たら翻訳しようね!そして、たくさんエラーがでたときは、わかるエラーからひとつずつ消していこうね。

5.型変換

 整数型、浮動点小数点型(少数)、文字列型、という名称で覚えるほうがわかりやすいですが、以下の英語の名称と読みも覚えましょう。ここでは型変換を勉強しますが、英語名で説明します。まずは、しっかり覚えてから解説に進んでください。
 整数型:int型(イント型)
 浮動点少数点型(ふどうてんしょうすうてんがた):float型(フロート型)
 文字列型:str型(ストリング型)

(1) 型変換の関数int(), float(), str()

 以下、型変換の関数int(), float(), str()の一覧表です。注意点としては、int()関数で、float型をint型に変換するとき、四捨五入ではなく、切り捨てになります。よく使う機能なので、しっかり覚えましょう。

(2)コード11、コード12の修正

 それでは、エラーが発生した先ほどのコードを修正します。先ほどのコード11は4行目でstr()関数を使うと「’計算結果は’」と「x」がいずれもstr型になり、連結可能になります。

#コード13
x = 10 * 10
print('計算結果は' + str(x))
#出力13
計算結果は100

 コード12は4行目のxをint()関数を使うと「x」も「10」もint型になり、x + 10の計算が可能になります。

#出力14
x = input('整数をいれてね:')
y = int(x) + 10
print(y)
#出力14
整数をいれてね:3
13

6.print(‘a’ + ‘b’)とprint(‘a’, ‘b’)

 計算結果などの出力ができる関数として、print()があります。細かい書式設定をする方法もありますが、まずは、「print(‘a’ + ‘b’)タイプ」と「print(‘a’, ‘b’)タイプ」を覚えましょう。プログラムの練習では、「print(‘a’, ‘b’)タイプ」の方が、型変換も不要ですし楽です。

(1)print(‘a’ + ‘b’)タイプの出力

 コード15と出力15を見てください。 「print(‘a’ + ‘b’)タイプ」では、全てstr型である必要があり、それぞれのstr型を「+」で連結します。つまり、str型でないものはstr型に変換する必要があります。

なお、出力15のように出力したデータとデータの間を詰めて出力できます。つまり、「a b」とはならず、「ab」とできます。

#コード15
print('a' + 'b')
#出力15
ab

 なお、くりかえしの説明になってしまいますが、「+」で連結できるのはstr型だけです。コード16はエラーになります。

#コード16 → エラー
#print('a' + 1)    #文字列'a'と数値1は連結できません

(2)print(‘a’, ‘b’)タイプの出力

 「print(‘a’, ‘b’)タイプ」では、「,」で区切れば、違う型を並べて出力することができるので、全てをstr型に変換する不要がありません。簡単なので、ちょっとした出力ならば、こちらの方が楽です。

しかし、それぞれのデータは、出力のときにデータとデータの間に半角スペースが入ります。つまり、出力17のように、「ab」ではなく、「a b」となります。くっつかないので、見やすいのですが、逆にくっつけたい場合には「print(‘a’ + ‘b’)タイプ」 を使い方がよいです。

#コード17
print('a', 'b')
print('a', 1)
#出力17
a b
a 1

まあ、自分用のプログラムならば、楽な 「print(‘a’, ‘b’)タイプ」 を使うことの方が多いですね。

7.コードを見やすくするための書式

 扱うコードが少しずつ長くなってきましたので、最後にコードを見やすくする方法について説明します。この方法に従わなくてもエラーにはなりませんが、見やすいコードになります。

(1) コードを見やすくする半角スペースの入れ方

(a) イコール「=」の前後には半角スペースを入れる。
(b) 「+」「-」「/」「*」「**」といった、演算子の前後には半角スペースを入れる。
(c) データを区切るカンマ「,」の後には半角スペースを入れる。(前には入れません)
(d) 少数の「3.14」や、まだ勉強していませんが「a.sort()」といった記述のピリオド「.」の前後には半角スペースは入れません

(2) 半角スペースの有無を比較

 コード18は、半角スペースを全く入れなかった例であり、コード19は、半角スペースを入れた例です。コードが短いので、下の例では見やすくなったかどうか、ちょっと微妙かもしれませんが、コードが複雑になるほど、半角スペースを入れると見やすくなります。半角スペースを入れることを習慣にしましょう。

#コード18
x=input('整数を入力してください:')
print('入力した整数に10を加えます')
print('答えは'+str(int(x)+10)+'です') 
print('答えは',int(x)+10,'です')
#コード19
x = input('整数を入力してください:')
print('入力した整数に10を加えます')
print('答えは' + str(int(x) + 10) + 'です') 
print('答えは', int(x) + 10, 'です')
#出力18,出力19
整数を入力してください:3
入力した整数に10を加えます
答えは13です
答えは 13 です

8.まとめ

 今回は、型変換と入出力を中心に勉強をしました。内容をまとめましたので、復習のときに使ってください。

(1)数値の足し算と文字列の足し算

x = 1 + 2 → x = 3 ※xはint型
x = ‘1’ + ‘2’ → x = 12 ※xはstr型
x = ‘1’ + 2 → エラー
x = ‘2’ – ‘1’ → エラー

(2)input()

input()で入力した値はstr型になる。

(3)type()で型を調べよう

変数や値のデータ型を調べるのはtype()関数を使う。また、Pythonは変数の型を途中で変更できる「動的型付け言語」であり、「静的型付け言語」ではない。

(4)データ型が原因のエラー

エラーが出たときは、Google翻訳で調べよう。エラーがたくさん出たときは、わかるエラーからひとつずつ消していこう。エラーに慣れることが、プログラム上達の近道です。

(5)型変換

データには、必ず「型(かた)」が決まっていますが、この型を途中で変えることを型変換(かたへんかん)といいます。

(a) 以下の英語の名称を覚えましょう。

 整数型:int型(イント型)
 浮動点少数点型(ふどうてんしょうすうてんがた):float型(フロート型)
 文字列型:str型(ストリング型)

(b)型変換

(6)print(‘a’+’b’)とprint(‘a’,’b’)

(a) print(‘a’+’b’)タイプ

print(‘a’ + ‘b’) → ab ※間を詰めて出力できる。
print(‘a’ + 1) → エラー ※文字列しか使えない。

(b) print(‘a’,’b’)タイプ

print(‘a’, ‘b’) → a b ※出力のとき、間に半角スペースが入る。
print(‘a’, 1) → a 1 ※どんなデータ型でも並べて出力できる。

(7) コードを見やすくするための書式

(a) イコール「=」の前後には半角スペースを入れる。
(b) 「+」「-」「/」「*」「**」といった、演算子の前後には半角スペースを入れる。
(c) データを区切るカンマ「,」の後には半角スペースを入れる。(前には入れません)
(d) 少数の「3.14」や、まだ勉強していませんが「a.sort()」といった記述のピリオド「.」の前後には半角スペースは入れません

9.例題

 さて、例題を解いてみましょう。プログラミングの上達は、実際にコードを書いて実行してみるのが一番です。

例題1

(a) 問題

半径(r)の円の面積(a)と円周の長さ(L)を求めよ。
※円周率は3.14とする。
※同じ変数をかけるときは、「*」ではなく、累乗の算術演算子を使う。
※データの入力はinput()を使い、「半径を入力してください:」というコメントを表示する。※print(‘a’ + ‘b’)タイプの出力を使用する。
※例えば3を入力すると、出力20のような出力になる。

#出力20
半径を入力してください:3
半径3.0の円の面積は28.26です。
また、円周の長さは18.84です。

(b) 解答

  問題が解けたら、解答を表示しましょう。3を入力して、面積が28.26、円周の長さが18.84にならなかったら間違いです。解答を見る前にもう一度、考え直しましょう。

解答を表示する

「3.14 * r ** 2」の部分は、「*」よりも「**」の方が優先順位が高いので、「3.14 * (r **2)」とする必要はありません。ただ、括弧を入れた方が読みやすいなら、入れる必要がなくても入れた方がよいです。

#コード20
r = input('半径を入力してください:')
r = float(r)
a = 3.14 * r **2
L = 2 * 3.14 * r
print('半径' + str(r) + 'の円の面積は' + str(a) + 'です。')
print('また、円周の長さは' + str(L) + 'です。')

例題2

(a) 問題

半径(r)の円の面積(a)と円周の長さ(L)を求めよ。
※円周率は3.14とする。
※同じ変数をかけるときは、「*」ではなく、累乗の算術演算子を使う。
※データの入力はinput()を使い、「半径を入力してください:」というコメントを表示する。※print(‘a’, ‘b’)タイプの出力を使用する。←これが、例題1と違います。
※例えば3を入力すると、出力21のような出力になる。(数字の前後に半角スペースあり)

#出力21
半径を入力してください:3
半径 3.0 の円の面積は 28.26 です。
また、円周の長さは 18.84 です。
(b) 解答

 ヒントは、最後の2行だけが例題1と違います。答がわかったら、解答を表示するをクリックしましょう。

解答を表示する
#コード21
r = input('半径を入力してください:')
r = float(r)
a = r ** 2 * 3.14
L = 2 * r * 3.14
print('半径', r, 'の円の面積は', a, 'です。')
print('また、円周の長さは', L, 'です。')

私が実際に購入した教材のご紹介

以下、私が実際に購入したPythonの教材をまとめてみました。 Pythonを学習する上で、少しでもお役に立つことができればうれしいです。

Python♪私が購入したPythonの書籍のレビュー

UdemyのPythonの動画講座を書籍を買う感覚で購入してみた