弊サイト「電脳世界」の技術同人誌5作目となる『【Python3で学ぶ】プログラミングはじめの一歩』の試し読み記事として、全249ページのうち61ページを無料で公開しています。
プログラミングに興味のある方やこれからプログラミングを初めて見たい方、一度は学習を挫折してしまった方にもわかりやすく、しっかりとプログラミングの基礎を身に付けられる内容としていますので、プログラミングをはじめるきっかけとしてお役立て頂けますと幸いです。
※本記事は書籍の内容をWebサイトでの公開用にフォーマットし直しているため枠や色合い、文章の改行部分など書籍とは少々異なる部分がございます。
第1章 プログラミングとは
この章ではプログラミングとはなにか、プログラムがどういう仕組みで動作しているのか、そして本著で取り扱うプログラミング言語Pythonの特徴について学びます。
1.1 プログラミング言語とはなにか
みなさんはプログラミング言語とはなにか説明できますか?この本を手に取っている方の多くは「なんかコードとかいう文字を書いたら動作するもの」くらいの認識かと思います。その認識でもプログラムは書けるのですが、もう少しだけ理解を深めておくとプログラミングの学習がはかどると思います。
そもそも何のためにプログラムを書くかというとコンピュータに何らかの処理をさせるためです。しかしコンピュータは人間の言葉をそのまま理解することはできません。例えば次のようなコードを書いて実行したとしてもエラーになってしまいます。
画面にHelloと表示しなさい!
コンピュータは全ての命令を電圧が高いか低いかの2通りの信号(0と1の2進数)でしか表現できないためです。つまり画面にHelloという言葉を表示させるためにはコンピュータに次のような機械語で信号を送る必要があります。
01001000 01100101 01101100 01101100 01101111 00100000 ...
しかしこのような0と1の羅列を人間に書けと言われても発狂してしまいます。当然何が書いてあるのかパッと見では理解できないため変更や修正なんてできたものではありません。
そこで人間の命令を機械語に翻訳するための言葉として開発されたのがプログラム言語です。例えば上記の例はPythonでは次のように記述します。
print("Hello")
記法や文法を覚える必要はありますが人間にも理解しやすく、実行時は一定の法則に従って機械語に変換されてコンピュータに信号が送られます。
このようにプログラミング言語を通じてコンピュータに命令を出し、計算や文字の表示といった処理をさせることがプログラミングです。
1.2 Pythonの特徴
本著では数あるプログラミング言語の1つであるPythonのバージョン3(Python3)を使ってプログラミングを学んでいきます。2019年現在、世界中に存在するプログラミング言語の種類は200種類以上と言われており、言語によって動作環境や得意不得意などの特徴が異なります。学習を始める前にPythonの特徴を簡単に知っておきましょう。
Pythonはコードがシンプルで扱いやすいオブジェクト指向の汎用プログラミング言語です。可読性が高く、様々な処理を短いプログラムコードで実現することができるため比較的習得しやすく、プログラミング初学者にもおすすめの言語です。またライブラリが充実しているのも特徴で、用途に応じて豊富なツール群の中から最適なものをインターネット上から無料で入手し、機能をカスタマイズしていくことができます。
汎用言語のため用途は幅広く、掲示板やCMS、SNS、クラウドストレージサービスなどの本格的なWebサービスを構築可能なほか、ビッグデータ解析や機械学習に適した言語としても注目されています。YoutubeやInstagram、Dropbox、Evernoteといった有名なサービスにもPythonで構築されているものがたくさんあります。
第2章 環境構築
この章では学習にあたってあなたのPCでPythonプログラムを実行するための環境を構築します。このように自分のPCで開発を行うための環境のことをローカル開発環境と呼びます。
2.1 本著で用意する環境
本来は仮想マシン上にローカルサーバーを構築し、Linux系OSをインストールし…と本番環境に近い環境を用意した方が良いのですが、これからプログラミングを学習しようという方にとって最初の障壁となりうるのがこの環境構築です。
そこで本著では最も構築が簡単な開発環境としてPythonをインストールしてWindowsのコマンドプロンプトで動かしながら学習を進めていきます。難解な仮想環境の理解や構築はいったん置いておいて、Pythonの基本的な文法や実際に何ができるのかを知って頂けると幸いです。
最近はブラウザ上で様々なプログラム言語のコードを試せるpaiza.ioなどのサービスもあるため、面倒な方はそちらを使ってみるのも良いかもしれません。
この本を読んだ後で本格的にPython を使ってみようという場合はぜひ仮想環境の構築にも挑戦してみてください。本番環境に近い環境でコードをテストすることができ、モジュールの管理もしやすいという利点があるほか、仮想環境なら最悪壊してしまっても大丈夫なので実行に不安のあるコードを試してみることもできます。
2.2 Pythonのインストール
まずはPythonのインストーラを次の公式サイトからダウンロードします。
画面上部の『Downloads』にカーソルを合わせると上記画像のようにメニューが表示されるので『Python3.7.4』というボタンをクリックしてインストーラをダウンロードします。
3.7.4というのはPythonのバージョンを示しています。ここではPython3.7.4をダウンロードして先に進めていきますが、基本的に最新版をダウンロードすればOKです。
ダウンロードしたファイルを開くと上記のような画面が表示されます。『Add Python 3.7 to PATH』というチェックボックスにチェックを入れ、『InstallNow』をクリックします。
上記画像のような画面が表示されればインストール完了です。『Close』を押して画面を閉じましょう。
次にPythonのインストールと設定が正常に完了したか確認します。PC画面の左下などにある検索バーに『コマンドプロンプト』または『cmd』と入力します。
検索結果に『コマンドプロンプト』というアプリケーションが表示されるのでクリックして開きます。
次のコマンドを入力してPythonのバージョンを確認してみましょう。
python --version
上記画像のように『Python 3.7.4』などのバージョン情報が表示されればインストールと設定が正常に完了しています。
『’Python’は…認識されていません。』と表示される場合はインストール時に『Add Python 3.7 to PATH』にチェックを入れ忘れた可能性があります。
このままでは環境変数が設定されていないためコマンドプロンプトでPythonを実行することができません。インストーラをもう一度立ち上げ『Uninstall(アンインストール)』してからもう一度インストールし直しましょう。
第3章 Pythonを実行してみよう
ここからは実際にPythonのコードを書きながら学習していきましょう。まずはPythonファイルの作り方と実行の仕方を学びます。
3.1 Pythonファイルの作成
まずはじめに、本著で使用する作業用フォルダを作成します。デスクトップ画面で右クリック→『新しいフォルダ』から『python_lessons』など任意の名前でフォルダを作成してください。
では、Pythonファイルを作成してみましょう。Pythonのコードを書くには『テキストエディタ』というソフトウェアが必要です。本著では『Atom』というフリーソフトを使って進めていきます。テキストエディタをお持ちでない方は次のURLからインストールしておいてください。
Atomを開き、画面左上の『File』から『Open Folder…』という項目を選択します。先ほどデスクトップに作成した『Python_lessons』フォルダを選択して開いてください。
なお、Atomは日本語化することもできますので英語だと使いづらいという方は『Atom 日本語化』などでGoogle検索してみてください。
左側に先ほど選択した『Python_lessons』フォルダが表示されますので、右クリックして『New File』をクリックします。
ファイル名を入力しましょう。Pythonファイルの拡張子は『.py』ですので『任意のファイル名.py』とします。
ファイル名はなんでもいいのですが、日本語や記号を使ってしまうと思わぬエラーの原因となることもあるので半角英数とアンダーバーだけを使うことをおすすめします。ここでは『test.py』として進めていきます。
作成したファイルに実際にPythonのコードを書いて実行してみましょう。今はコードの意味は分からなくてもいいので次のコードを書き込んでください。
print("Hello World")
ファイルに書き込んだ内容を保存します。『File』→『Save』をクリックするかキーボードで『Ctrl+s』キーを押すことでコードを保存することができます。
3.2 Pythonファイルの実行
作成した『test.py』ファイルを実行してみましょう。『コマンドプロンプト』を開き、次のコマンドを実行します。
cd Desktop cd python_lessons
これはコマンドプロンプトで使える命令文で、「cd ディレクトリ名」とすることで操作ディレクトリを移動することができます。これで現在の操作ディレクトリは先ほど作成した『python_lessons』となっています。
ここで次のコマンドを実行します。
python test.py
これは『test.py』という名前のPythonファイルを実行しなさいという命令です。
上記画像のように『Hello World』と表示されれば成功です。Pythonのプログラムコードを実行することができました。
本著ではコードをこの方法でテストしながら進めていきます。ファイルの作り方や実行方法がわからなくなってしまった場合はここまでのページを読み返して下さい。
第4章 標準出力
プログラムでは書き込んだり計算した内容を最終的に文字や数字で出力することになります。出力の仕方がわからなければテストもできないため、まずは出力の仕方から学びましょう。
4.1 画面への出力
画面への出力にはprintという命令を使います。すでに試した通りですが次のように記述します。
print("出力したい文字")
文字を囲っている記号はシングルクォーテーション ‘ とダブルクォーテーション ” のどちらでも構いません。Pythonではこれらのどちらで囲んでいても文法上同じように扱います。
ただしこれらを大文字で書いてしまったり、カッコや記号をつけ忘れてしまったり、printを大文字で書いてしまうとエラーになってしまいます。これはPythonが全角と半角、大文字と小文字を区別しているためです。また、printのつづりを間違えた場合もエラーになってしまいます。
出力したい文字は日本語でも問題ありません。試しに次のコードを実行してみてください。
print("ハローワールド")
先ほどのtest.pyファイルを編集してコマンドプロンプトで実行します。
上記のように『ハローワールド』と表示されます。
このprint()のような命令を『関数』といい、プログラミング言語にあらかじめ用意され、標準で使用できる関数のことを『組み込み関数』と言います。詳しくは後述しますのでそれまでは関数という記述があったらこのような命令のことだと思っておいてください。
ちなみにPython2まではファイルの1行目か2行目に次のような記述が必要でしたが、Python3からは不要となっています。
# coding: utf-8
4.2 コメントアウト
プログラムのコード内にはメモや注釈としてコメントを書くことができます。コメントはプログラムの実行時には無視されますが、人間がコードを読む際にその内容を理解しやすくなるため、複数人での開発やコードの修正・変更、開発の引継ぎなどがスムーズになります。そのためコメントも含め可読性(読みやすさ)の高いコードを書くことは重要です。
1行コメント
1行だけコメントアウトしたい場合は次のようにシャープと半角スペースに続けてコメントを記述します。
# この行だけコメントです。 print("ハローワールド")
この場合は1行目だけがコメントアウトされ、2行目は実行されます。
行の途中からコメントアウトするには次のように記述します。
print("ハローワールド") # この部分がコメントです
これもprint関数は実行されるためハローワールドと出力されますが、その後に続く部分はコメントアウトされているため無視されます。
複数行のコメント
複数行のコメントを書くには次のように、該当する行をシングルクォーテーションまたはダブルクォーテーション3つで囲います。
""" この行はコメントです。 この行もコメントです。 """ print("ハローワールド")
このコードを実行すると最後の行だけが実行され、ハローワールドという文字だけが出力されます。
4.3 様々な出力の仕方
print関数は単純に文字を出力する以外にも様々なことができます。ここではそのいくつかを見ていきましょう。
複数の文字の出力
カンマで区切ることで複数の文字列を出力することができます。
print("baseball", "soccer", "basketball", "tennis")
実行結果は次のようになります。
baseball soccer basketball tennis
末尾に任意の文字を付加して出力
次のように記述することにより末尾に任意の文字を付け加えて出力することができます。
print("出力したい内容", end="付け加えたい文字")
例えば次のようなコードを実行してみましょう。
print("200", end="円")
実行結果は次のようになります。
200円
また、pythonのprint関数はデフォルトでは末尾で改行して出力します。例えば次のようなコードを書いて実行してみましょう。
print("あいうえお") print("かきくけこ")
実行結果は次のようになります。
あいうえお かきくけこ
これを改行しないで出力したい時は次のようにend=””の中身を空にして記述します。
print("あいうえお", end="") print("かきくけこ")
実行結果は次のようになります。
あいうえおかきくけこ
このend=””のようなものをオプション引数といい、print関数などの命令はこのオプションを付けることで通常とは異なる挙動を加えることができます。
今はよくわからなくてもいいので「こういう書き方ができるんだ」程度に知っておいてください。
区切り文字を指定して出力
せっかくなのでprint関数で使えるオプション引数をもう1つ見ていきましょう。先ほど複数の文字列を出力した際には半角スペースで区切られていましたが、これを任意の文字で区切りたい場合には次のように記述します。
print("baseball","soccer","basketball","tennis", sep="任意の区切り文字")
例えばカンマで区切りたい場合は
print("baseball","soccer","basketball","tennis", sep=",")
と記述します。
実行結果は次のようになります。
baseball,soccer,basketball,tennis
第5章 変数と定数
この章では文字列や数字などのデータを格納する変数と定数について学びます。
5.1 変数とは
変数とはデータを入れておける、名前のついた箱のようなものです。プログラミングでは扱う文字列や数値といった値(データ)を名前のついた箱に入れておき、その名前を使ってデータを呼び出したり計算することができます。
特に複雑な計算式やプログラム内で何度も呼び出すデータに名前を与えることで、コード量を少なくするとともにデータの書き換えが必要になった場合も少ない労力で変更できるようになります。
例えば次のコードはアニメーションのセリフを表示するプログラムです。
print("千尋:あのー……ここで働かせてください!") print("千尋:ここで働かせてください!") print("千尋:ここで働きたいんです!")
実行結果は次のようになります。
千尋:あのー……ここで働かせてください! 千尋:ここで働かせてください! 千尋:ここで働きたいんです!
正常に動作していて一見問題ないように見えますが、ある日突然上司から次のように指示がありました。
『フン。千尋 というのかい?贅沢な名だねぇ。今からこいつの名前は「千」だ。いいかい、「千」だよ。分かったら返事をするんだ、「千」!!』
どうやらこのゲームの主人公の名前を『千尋』から『千』に変更したいようです。さぁ大変。この「千尋」という文字列を「千」に書き換えようとすると、「千尋」と書かれた全ての箇所を修正する必要があります。
5.2 変数を使ってみよう
こんなとき変数を使えばこの「千尋」という文字列を1つの名前で管理することができるのです。変数は次のように記述します。
name = "千尋" # nameという変数に"千尋"という文字列を代入 print(name) # nameという変数を出力
ここで登場するイコール記号は代入演算子と呼ばれ、左辺と右辺が等しいという意味ではなく、左辺に右辺を代入しなさいという意味になります。そしてprint関数で変数を出力する際はダブルクォーテーションで囲むことなく、カッコ内にそのまま記述します。
では前述のコードが変数を用いて書かれていた場合、どのような記述になるかみてみましょう。
name = "千尋" # nameという変数に"千尋"という文字列を代入 print(name + ":あのー……ここで働かせてください!") print(name + ":ここで働かせてください!") print(name + ":ここで働きたいんです!")
じゃーん!これが変数を使ったコードです。
変数と文字列の値をプラス記号(+)で繋ぐことで、文字を連結して出力することができます。
このコードなら主人公の名前を『千尋』から『千』に書き換える場合でも変数に代入する値のみを変えてあげればOKです。実際に『千尋』から『千』に書きかえてみましょう。
name = "千" # この行の『千尋』を『千』に書き換えるだけ! print(name + ":あのー……ここで働かせてください!") print(name + ":ここで働かせてください!") print(name + ":ここで働きたいんです!")
このとおり1か所を書き換えるだけで全ての『千尋』という文字列が『千』に変更できました。実際にtest.pyに記述してコマンドプロンプトで実行してみてください。
5.3 値の再代入
変数は同じプログラム中で何度も値を再代入することができます。例として次のようなコードを用意しました。
msg = "まァだそれを言うのかい!" # msg変数に値を代入 print(msg) # msg変数を出力 msg = "だァーーーまァーーーれェーーー!!!" # msg変数に値を再代入 print(msg) # msg変数を出力
実行結果は次のようになります。
まァだそれを言うのかい! だァーーーまァーーーれェーーー!!!
print関数では2回ともmsg変数を出力していますが、1回目と2回目の間の処理でmsg変数に値を再代入しているため、異なる値が出力されているのです。
5.4 定数とは
値の再代入が可能な変数に対し、再代入ができないものを定数と呼びます。こちらもデータに付ける名前のようなものですが、プログラム中で変更してほしくない値を保持するために使います。
Pythonでは定数を言語としてサポートしていませんが、慣習的なルールとして変数名を全て大文字にした場合は定数として扱うことになっています。といってもあくまで慣習的なルールのため、Pythonの定数は値を再代入することができてしまいます。
例えばサイト管理人のメールアドレスを定数に代入し、出力するには次のように記述します。
ADMIN_EMAIL = "sample@example.com" # 定数に値を代入 print(ADMIN_EMAIL) # 定数を出力
5.5 ドリル
本著では実際に手を動かしてコードを書きながらプログラミングを覚えてもらうために要所ごとにドリルを設けています。ここまでの学習が身についているかどうかチェックしてみてください。なお、解答例は各ドリルの次のページに記載してあります。
D5.5.1:変数の定義と出力
変数を使って次の文字列を出力してみましょう。
Hello World
D5.5.2:変数の値の変更
次のコードは変数を定義し、それを使った文章を表示するプログラムです。
x = "3" print(x + "倍界王拳かめはめ波ー!")
このコードの変数の値を 4 に変更し、次の文字列を出力してみましょう。
4倍界王拳かめはめ波ー!
D5.5.3:変数と定数の出力
次のコードには変数と定数が定義されています。
x = "10" HISSATSU = "倍界王拳かめはめ波ー!" # ここにコードを記述
これらを使って次の文字列を出力してみましょう。
10倍界王拳かめはめ波ー!
解答例
A5.5.1:変数の定義と出力
msg = "Hello World" # 変数に値を代入 print(msg) # 変数の値を出力
A5.5.2:変数の値の変更
x = "4" # 変数に値を代入 print(x + "倍界王拳かめはめ波ー!") # 変数と文字列を出力
A5.5.3:変数と定数の出力
x = "10" # 変数に値を代入 HISSATSU = "倍界王拳かめはめ波ー!" # 定数に値を代入 print(x + HISSATSU) # 変数の値と定数の値を出力
第6章 演算処理
この章では数値を使って計算する方法について学びます。
6.1 代数演算子
Python では計算をする際に次のような記号を使います。これらを代数演算子と呼びます。
処理 | 記号名 | 記号(演算子) |
---|---|---|
加算(足し算) | プラス | + |
減算(引き算) | マイナス | – |
乗算(掛け算) | アスタリスク | * |
除算(割り算) | スラッシュ | / |
切り捨て除算 | スラッシュ2つ | // |
剰余 | パーセント | % |
べき乗 | アスタリスク2つ | ** |
6.2 演算をしてみよう
実際に例をみていきましょう。なお、文字列を入力する際はシングルクォーテーションまたはダブルクォーテーションで囲っていましたが、数値を入力する際は記号などで囲うことなくそのまま記述します。
x = 10 print(x)
上記は変数xに10を代入し、変数xを出力するプログラムです。
変数xの中身を変更してみましょう。
x = 10 + 3 print(x)
出力結果は次のようになります。
13
10 + 3 の解である13が出力されました。
計算はprint関数の中でも行うことができます。次のコードを実行すると先ほどと同様に13と出力されます。
print(10 + 3)
出力結果は次のようになります。
13
6.3 変数を使った演算
演算には変数を用いることもできます。
例えば次のコードを実行してみましょう。
x = 10 print(x + 3)
実行結果は次の通りです。
13
こちらも先ほどと同様に13と出力されました。
なお、変数の中身は新たに代入を行わない限り変更されません。例えば次のようなコードを実行した場合をみてみましょう。
x = 10 print(x + 3) print(x)
実行結果は次のようになります。
13 10
2行目のコードでx+3の解である13を出力していますが、計算はprint関数の中で行われており、変数の値が再代入されたわけではないため、3行目のコードではxの値である10がそのまま出力されているためです。
変数同士で計算を行うこともできます。次のコードを実行してみましょう。
x = 10 print(x + x)
実行結果は次のようになります。
20
xの値である10と10を足した20が出力されました。
6.4 ドリル
D6.4.1:数値の計算
10-2*3の計算結果を表示してみましょう。
D6.4.2:変数を使った計算
xが10のとき、x*(2+3)の値を示す計算をしてみましょう。
解答例
A6.4.1:数値の計算
x = 10 - 2 * 3 # 変数xに計算式の結果を代入 print(x) # 変数xの値を出力
A6.4.2:変数を使った計算
x = 10 # 変数xに10を代入 ans = (x * (2 + 3)) # 変数ansに計算式の結果を代入 print(ans) # 変数ansの値を出力
第7章 データの型について知ろう
ここまでは文字列を扱ってきましたがPythonでは他にもいろいろなデータを扱うことができます。データの型とはなんなのか、どのようなデータ型があるのかについてみていきましょう。
7.1 データ型とは
データ型とはコンピュータにおけるデータ(値)の種類のことです。ここまでのページで簡単に触れてきましたが、Pythonでは文字列を表現するときは次のようにシングルクォーテーションまたはダブルクォーテーションで囲いました。
s = "hello"
一方で数値の場合は記号などで囲うことなくそのまま記述しました。
n = 16
なぜこのように書き方が異なるかというと、プログラミングでは文字列や数値といったデータの種類(データ型)を厳密に区別しているからです。
では実際のプログラミングにおいてこのデータ型の違いがどのように影響するのかについて例を見ていきましょう。前章の演算処理では数値を使って計算する方法について学びました。では数値と同様に文字列で四則演算を行うとどうなるか試してみましょう。
s = "hello" + "world" print(s)
実行結果は次のようになります。
helloworld
おや、問題なくできてしまいました。実はPythonではプラス記号がいくつかの役割を持っており、数値どうしに使った場合は『加算』、文字列どうしに使った場合は文字列の『連結』が行われます。
では文字列どうしにマイナス記号を使った場合はどうなるでしょうか。
s = "hello world" - "world" print(s)
実行結果は次のようになります。
Traceback (most recent call last): File "C:\Users\User\Desktop\python_lessons\test.py", line 1, in <module> s = "hello world" - "world" TypeError: unsupported operand type(s) for -: 'str' and 'str'
TypeErrorと表示されました。これは文字通り「型」に関するエラーが発生しました、という意味です。
その後の表記をみるとunsupported operand type(s) for -: ‘str’ and ‘str’(文字列型 – 文字列型という記法はサポートされていません)と書かれています。文字列どうしにマイナス記号を使うという記法がPythonには存在しないため、エラーになってしまったのです。
他にも例を見てみましょう。次のように数字をダブルクォーテーションで囲った場合はどうなるでしょうか。
n = "10" + "3" print(n)
実行結果は次のようになります。
103
10+3の計算結果である『13』ではなく、10と3を繋げた『103』が出力されました。
これはダブルクォーテーションで囲ったことにより、10と3がそれぞれ数字ではなく文字列として扱われ、プラス記号によって「連結」されたためです。このようにダブルクォーテーションで囲むことで数字も数値型ではなく文字列型として扱うことができます。
もう1つ例をみてみましょう。異なるデータ型である文字列と数値をプラス記号で繋いでみます。
s = "hello" n = 2019 print(s + n)
実行結果は次のようになります。
Traceback (most recent call last): File "test.py", line 3, in <module> print(s + n) TypeError: can only concatenate str (not "int") to str
TypeErrorになってしまいました。これは変数s(文字列)と変数n(数値)のデータ型が一致していないためです。
これらを合わせて表示したい場合は次のようにstr関数を使って数値データを文字列に変換してあげる必要があります。
s = "hello" n = 2019 print(s + str(n))
実行結果は次のようになります。
hello2019
こうすることで変数nの値が文字列として扱われるため、式が『文字列 + 文字列』の形となり、文字列が連結して出力されます。
str関数は数値を文字列に変換して戻り値として出力してくれますが、変数の値そのものを書き換えるわけではありません。たとえば先ほどのコードに次のように1行書き加えてみます。
s = "hello" n = 2019 print(s + str(n)) print(n + 3)
実行結果は次のようになります。
hello2019 2022
変数nの中身自体が書き換えられたわけではないため、出力内容の2行目では変数nは数値型の2019として扱われ、それに3を足した2022が出力されています。
7.2 データ型の種類
では実際にPythonで扱うことのできるデータ型とその書き方についてそれぞれみていきましょう。
文字列
文字列は次のようにシングルクォーテーションまたはダブルクォーテーションで囲って表現します。
s = "hello world"
文字列の中ではいくつかの特殊文字を使用することができます。
- \n:改行
- \t:Tab
例として先ほどのコードにこれらを書き加えて出力してみましょう。
s = "he\nllo wo\trld" print(s)
実行結果は次のようになります。
he llo wo rld
\n の位置で改行、\tの位置でTabが入って出力されました。
複数行の文章をそのままデータとして表現したい場合には、シングルクォーテーションまたはダブルクォーテーション3つで囲って表現します。
msg = """ かんがえ ると いずれしけいになるか てまねきしているあい つにころされるだけだ。 しってい る。おれは、キラのそんざいを。 えものにされる """ print(msg)
鋭い方はコメントアウトの時と同じ書き方であることに気付いたかもしれません。
実はPythonではこの記法でプログラム中に書いたものは処理に影響を与えないというルールがあるため、結果的にこれがコメントの記法として使われています。
数値
数値は次のように記号などで囲うことなくそのまま記述します。整数だけでなく、浮動小数点数も同様に扱うことができます。
i = 10 f = 3.14
真偽値(論理値、Bool値)
値の真偽を表す真偽値についても扱うことができます。真偽値はTrue(真)とFalse(偽)の2つがあります。
flag = True flag = False
また、次のような式では結果が真偽値で返されます。
print(5 < 10) print(10 < 5)
実行結果は次のようになります。
True False
真偽値については後述する条件分岐の項で実際に使ってみますので今はこういう型があるということだけ覚えておいてください。
リスト
文字通りデータをリスト状に並べた型です。こちらも今の段階で説明すると難しいので後述します。こういったデータ構造があるということだけ把握しておいてください。
num = [1, 2, 3] team = ["田中", "鈴木", "高橋"]
実行結果は次のようになります。
[1, 2, 3] ['田中', '鈴木', '高橋']
7.3 動的型付けと静的型付け
プログラム言語によっては変数を宣言する時点で文字列や数値といった型を指定しなくてはならないものがあります。CやJavaといった言語がこれにあたり、変数の型と一致しない値を代入しようとするとエラーになります。
int i; // 整数型でx変数を定義 i = 10 // x変数に数値の10を代入 i = "オーニシ" // 整数型のi変数に文字列は代入できないのでエラーになる
上記はJavaのコードです。このコードでは変数iは整数型で定義されているため、3行目で文字列を再代入する処理はエラーになってしまいます。このような言語を静的型付け言語といいます。
対してPythonは変数の宣言時に型を指定する必要がなく、変数の型は自動的に代入したデータの型となるため、同じ変数に異なる型の値を再代入することができます。このような言語を動的型付け言語といいます。
i = 10 # i変数に数値の10を代入 i = "オーニシ" # Pythonではエラーにならない
静的型付けと動的型付けはどちらが優れているという話ではなく、言語仕様の違いでどちらにもメリットデメリットが存在します。
また、動的型付けの中でも強い型付けと弱い型付けに分かれ、それによっても扱いが変わってくるので、最終的にはその言語がプロジェクトに合っているかどうか、開発者にとって扱いやすいかどうかといった観点から言語を選択していくことになります。
7.4 ドリル
D7.4.1:データの連結
次のコードでは文字を連結して出力しようとしていますがエラーになってしまいます。エラーを解消して 2019年 と出力してください。
print(2019 + "年")
D7.4.2:データの連結2
次のコードには変数が定義されています。
year = 2019 msg = "年は令和元年です"
これらを使って次の文字列を出力してみましょう。
2019年は令和元年です
D7.4.3:戦闘終了時のメッセージ
次のコードを実行するとエラーになってしまいます。
num = 3 gold = 100 msg1 = "スライムを" + num + "体倒した" msg2 = gold * num + "ゴールドを手に入れた" print(msg1) print(msg2)
エラーを解消して次の文字列を出力してみましょう。
スライムを3体倒した 300ゴールドを手に入れた
解答例
A7.4.1:データの連結1
print("2019" + "年")
元のコードでは2019が数値型となっているため、数値型 + 文字列の式となってしまいエラーになっています。2019をダブルクォーテーションで囲って文字列型としてあげることでエラーが解消されます。
A7.4.2:データの連結2
year = 2019 msg = "年は令和元年です" print(str(year) + msg)
year変数は数値として定義されているためstr関数で文字列型に変換して連結してあげましょう。
A7.4.3:戦闘終了時のメッセージ
num = 3 gold = 100 msg1 = "スライムを" + str(num) + "体倒した" msg2 = str(gold * num) + "ゴールドを手に入れた" print(msg1) print(msg2)
元のコードのmsg1変数では数値型であるnum変数と文字列を連結しようとしているためエラーになってしまっています。str関数でnum変数を文字列型に変換して連結してあげましょう。
msg2変数では数値型であるgold変数をnum倍し、そのまま文字列と連結しようとしているためエラーになってしまっています。gold変数とnum変数の乗算結果をstr関数で文字列に変換して連結してあげましょう。
第8章 標準入力
この章ではデータを読み込むための命令について学びましょう。標準入力を使えばファイルやデータベースといったプログラムの外部からデータを読み込んだり、プログラムの実行時にデータを受け取ったりすることができます。
8.1 プログラム実行の流れ
ここまではプログラムコードの中に書き込まれたデータを使って処理や出力を行ってきましたが、実用的なプログラムではデータを読み込んだり入力してもらい、それをプログラムで処理して結果を出力するということがよくあります。
データの入力元としてはTwitterのタイムラインやAmazonの商品データなどのネット上のWebサービスやAPI、Webサービスの中に組み込まれているデータベース、Excelやテキストなどのファイルのほか、プログラムの実行時にキーボードからデータを入力することもできます。
8.2 標準入力とは
標準入力はプログラム言語に用意されているデータを読み込む方法の中でも最も基本的な仕組みです。もともとはLinuxなどのUnix系OSに用意されていた仕組みですが、今ではWindowsやMacでも利用できます。
標準入力に対応するようプログラムを作っておけばプログラム実行時にファイルを読み込んだり、キーボードからデータを読み込んだり、パラメータを指定したりと入力先を切り替えることができます。
8.3 入力されたデータを受け取ってみよう
8.3.1 文字列型として受け取る
それでは実際に標準入力でデータを受け取って出力してみましょう。データを受け取るにはinput関数を使います。
name = input() print(name + "きさま!見ているなッ!")
実行結果は次のようになります。
コマンドプロンプトなどのCUIに慣れていない方は何も起きていないと思わるかもしれませんが、実行前と異なりカーソルの箇所(点滅しているところ)に現在のディレクトリが書かれていません。
これが入力待ちの状態です。試しにオーニシとでも入力してEnterキーで実行してみましょう。
記述した通り、入力した『オーニシ』に『きさま!見ているなッ!』という文字列が連結されて表示されました。このように標準入力に対応しておくとプログラムの外部からデータを簡単に読み込むことができます。
このままでは入力待ちの状態がわかりづらいので入力待ちをする前にメッセージを書き加えてみましょう。次のようにinput関数のカッコ内に文字列を入力してあげると、その文字列が出力された後に入力待ちの状態に移行します。
name = input("ぼくの名前は……") print(name + "きさま!見ているなッ!")
実行結果は次のようになります。
『ぼくの名前は……』と表示された後に入力待ちの状態になっているのがわかります。
ではいったんこのプログラムを停止させてみましょう。入力待ちとなっているプログラムを停止させるにはコマンドプロンプトのウィンドウをクリックしてアクティブ状態にしたうえで、キーボードで『Ctrl+c』を押します。
次の図のようにKeyboardInterrupt と表示されてプログラムが停止します。
なお標準入力を使う場合は入力欄を空のまま実行するとエラーになるので注意しましょう。これは例外処理で避けることはできますがここでは扱いません。
8.3.2 数値型として受け取る
input関数は入力されたデータを文字列型として受け取ります。データを数値型として扱いたい場合にはint関数という受け取った値を整数値に変換するための命令を使います。
num = int(input("数字を入力してください")) print(num + 3)
では実際にコードを実行して、標準入力から10を入力してみましょう。実行結果は次のようになります。
C:\Users\User\Desktop\python_lessons>python test.py 数字を入力してください10 13
入力した10という値と3が足し算できているので、受け取った10を数値型に変換できていることがわかりますね。
このあたりからプログラムの実行時にエラーが発生して思うように動かないことが出てくると思います。本著の終盤でプログラム勉強中に遭遇する「よくあるエラー」について簡単に解説しているので、プログラムが思うように動かない場合は参考にしてみて下さい。
8.4 ドリル
D8.4.1:ぼくの名前は
次のコードを元に、標準入力から名前を入力すると『ぼくの名前は○○です』と表示するプログラムを作ってみましょう。
name = input("ぼくの名前は……")
D8.4.2:正方形の面積
次のコードをこのまま実行するとエラーになってしまいます。コードを修正して、標準入力から正方形の1辺の長さを入力すると面積を返すプログラムをつくってみましょう。
length = input("1辺の長さは?") print(length * length)
解答例
A8.4.1:ぼくの名前は
name = input("ぼくの名前は……") print("ぼくの名前は" + name + "です")
出力部分のコードを書いてあげましょう。出力したい文字と標準入力から受け取った文字列を連結することでお題の文言を返すプログラムができあがります。
A8.4.2:正方形の面積
length = int(input("1辺の長さは")) print(length * length)
入力値を文字列型で受け取ってしまうと数値計算ができないため、int関数を使って数値型に変換します。正方形の面積は一辺×一辺なのでlength変数どうしを乗算してあげれば面積の値が算出されます。
実践演習①
ここまでの学習お疲れ様です。まだまだ基礎の基礎なのでいかにもプログラミングらしい処理は作れていませんが、実はここまでの段階でも簡単なプログラムを作ってみることができるんですよ!ここまでの知識だけでできる演習問題を用意しましたので挑戦してみてください。
なお、解答例のコードは次のページに記載してあるほか、下記のGitHubアカウントにもアップしてありますので、チェックしてみてください。
https://github.com/crucis-onishi/python_lessons
演習問題1:三角形の面積
input関数は書いた分だけの行数、標準入力を行うことができます。次のコードを元に、標準入力から三角形の底辺の長さと高さをそれぞれ入力するとその三角形の面積を算出してくれるプログラムを作ってみましょう。
a = input("三角形の底辺の長さは?") h = input("三角形の高さは?")
演習問題2:税込み価格
次のコードをこのまま実行するとエラーになってしまいます。コードを修正して、標準入力からリンゴの値段を入力すると消費税8%を加えて『税込み○○円です』と返すプログラムを作ってみましょう。
price = input("リンゴの値段はいくらですか?") print("税込み" + price * 1.08 + "円です")
解答例
A.演習問題1:三角形の面積
a = int(input("三角形の底辺の長さは?")) h = int(input("三角形の高さは?")) print(a * h / 2)
入力値を文字列型で受け取ってしまうと数値計算ができないため、int関数を使って数値型に変換します。三角形の面積は底辺×高さ÷2なので変数a×変数h÷2としてあげれば面積の値が算出されます。
A.演習問題2:税込み価格
price = int(input("リンゴの値段はいくらですか?")) print("税込み" + str(int(price * 1.08)) + "円です")
入力値を文字列型で受け取ってしまうと数値計算ができないため、数値型で受け取ります。その後、price変数を1.08倍して税込み価格を算出しますが、そのままだと浮動小数点数となり、108.0円などと表示されてしまうため、int関数で整数型に変換しています。さらに値段を文字列と連結させるためにstr関数で文字列型に変換したあと、他の文字列と連結して出力します。
第9章 条件分岐
この章では条件によって処理が枝分かれする条件分岐と、その条件を指定するために使われる真偽値、比較演算子、論理演算子について学びましょう。