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の動画講座を書籍を買う感覚で購入してみた

その他

Twitterへのリンクです。SNSもはじめました♪

液晶ペンタブレットを買いました
 (1) モバイルディスプレイを買うつもりだったのに激安ペンタブレット購入

以下、私が光回線を導入した時の記事一覧です。
 (1) 2020年「光回線は値段で選ぶ」では後悔する ←宅内工事の状況も説明しています。
 (2) NURO光の開通までWiFiルーターを格安レンタルできる
 (3) NURO光の屋外工事の状況をご紹介。その日に開通!
 (4) 光回線開通!実測するとNURO光はやっぱり速かった
 (5) ネット上のNURO光紹介特典は個人情報がもれないの?