IT・技術研修ならCTC教育サービス

サイト内検索 企業情報 サイトマップ

研修コース検索

コラム

ゼロから歩くPythonの道

CTC 教育サービス

 [IT研修]注目キーワード   Python  UiPath(RPA)  最新技術動向  Microsoft Azure  Docker  Kubernetes 

第7回 print関数で遊んでみた。 (菱沼佑香) 2020年4月

こんにちは、吉政創成 アシスタントの菱沼です。
今回も「いちばんやさしいPython入門教室(大澤 文孝氏著)」を片手に勉強していきます。

前回はインタラクティブモードとエディタの違いをまとめつつ、最後にPythonicをご紹介しました。今回は前回でも出てきた「print関数」について調べてみました。その過程で文字列操作についても見かけたので、少しだけ一緒にまとめました。

print関数ってなに?

インタラクティブモードでは、プログラムを書いた次の行に結果が表示されますが、エディタになると複数行の記述ができる代わりにプログラムを実行するまで結果が表示されません。そのプログラムを実行したときに、結果を画面に表示させるために使うのがprint関数です。という理解です。

これまでの記事では数値しか扱っていませんでしたが、文字列を表示させることもできます。
print関数の使い方のイメージはこんな感じ。

print(1+2)
print('abc')
print("abc")

文字列を扱うときには「"」か「'」で囲む必要があります。どちらを使うかは特殊なことがない限りどっちでもいいようです。この「特殊」はテキストでは次のように説明されています。

-----引用-----
前が「"」であれば後ろが「"」、前が「'」であれば後ろが「'」、という組み合わせであればどちらを使っても同じです。(中略)「"」で括ったなかに「"」を入れたり、「'」で括ったなかに「'」を入れたりすることはできないため、記述したい文字列に「'」が入っているときは全体を「"」で、「"」が入っているときは全体を「'」で括るという形にするのが一般的です。
(中略)
"It's a pen" →正しい表記
'It's a pen' →正しくない(「'」の中に「'」がある)
----------------

例に関しては他の記述方法もあるようですが、それはまた改めて。で、早速試してみました。

fig01

はい、予想通り怒られました。赤いマーカーが引かれているところが間違っている箇所です。
「s」についていますが、直前で「'」で締められているのに、最後に「'」が残っているから、「s」の前にもう一回つけろということだと思われます。とはいえ、表示したい文章はあくまで「It's a pen」なので、「s」の前に付けたら「Its」になる気が...。一応検証。

fig02

やっぱりそうなりますよね~。
正しい位置に正しく「"」や「'」を付けたものは問題なく表示できています。

ところで、print関数はpython2まではprint「文」として扱われており、その記述に違いがあるそうです。

Python2 : print 1+2
Python3 : print(1+2)

これを見てわかる通り、Python3から関数になった結果、()が必要となりました。Python2で作られたプログラムをPython3で動かすなんていう機会に恵まれ、かつ、Syntax Error(構文エラー)が出たなんていうときには、printをチェック項目のひとつとしてみてもいいかもしれません。

printでできること。

テキストに書かれていたことをまとめると、こういうことができるようです。

・「+」を使えば文字をいくつでも結合することができる
・文字列と数値は「str関数」を使うと結合できる
・あらかじめ定義した情報を使って文章を作れる など

これ以外にもリストや辞書を定義していた場合、その中身を表示させることもできるようです。
空白(インデント)や文字コード、改行などで気を付けないといけないことはあるようですが、これは後日取り上げようと思います。

参考:実は奥が深いpythonのprint関数の使い方|Qiita|@hiroyuki_mrp

ところで、急に出てきたstr関数ですが、何者かきちんと知っておかないと絶対忘れると思ったので確認しておきました。テキストでの説明はこの通り。

-----引用-----
「文字列」と「数値」を連結するときは、数値のままでは連結できません。str関数による変換が必要になります。(中略)数値を何らかの理由で文字列として扱いたいとき(たとえば、末尾から3桁目の数を取り出したいとき、「特定の桁の文字」を取り出したいときなど)は、str関数を使っていきます。
※記述例:print("abc"+str(123*234))
----------------

数字を文字に変えてあげるものなんですね。普通に数値が書かれているだけなら「"」で囲めばいいんじゃ?とつい考えてしまいましたが、記述例を見て、そう言われれば、プログラムを作るとなれば、計算や何らかの条件を設定することもあるはず...。そういう場合には確かに必要になりそうだとイメージがつきました。

ちなみにこれ以外に文字に関係する関数は次のものがあるようです。
※参考にしたサイトでは記述方法もありましたがここでは割愛しました。詳細はリンクをご参照ください。

関数 処理内容 例 → 結果
str関数 数値を文字列に変換 10(数) → 10(文)
int関数 文字列を数値に変換 10(文) → 10(数)
float関数 文字列を数値(小数点含む)に変換 10.123456789 → 10.123456789(数)
※数値(半角)と文字(全角)が混ざった状態

(参考:【Python入門】文字列の操作をマスターしていこう -Pythonの文字列の型変換)

さらに他にもあるようで、基本的な文字列操作をこちらのページでまとめられていました。
Python文字列操作マスター|Qiita|@tomotaka_ito

これらの情報を眺めていたら、Excelやテキストエディタを使ってデータを処理していたものが、もしかしてさらに簡単になる...?なんていう希望をちょっと抱きました。いつか自分のための何かを作ってみたいっていう気になってきました。(遅)

といわけで、実験タイム!

<実験その1>

fig03

1行目はルールにのっとった書き方をし、2行目は数値を「"」や「'」で囲まないことで、数値のままにした書き方をしました。
結果、1行目は問題なく処理されましたが、2行目はTypeErrorが発生しました。

TypeError(関数の引数に不適切なデータ型が渡されている)で、その詳細はcan only concatenate str (not "int") to strとのこと。たぶん、文字と数値は結合できないよ!という意味だと思います。なので、1行目と同様、2を「"」か「'」で囲んであげたらやっぱり解決しました。

<実験その2>
今度は先に文字を定義しておいて、それをくっつけるというものを試してみました。

fig04

あ。怒られた。
NameErrorなので、名前が見つからない...と。テキストを確認すると定義する際に「"」「'」で囲んでないのが悪い模様。定義の時もいるようです。というか、TypeErrorやSyntaxErrorじゃないんですね。修正!

fig05

できたできた。「"」で囲んだら緑の字になりました。つけ忘れた時の違和感として覚えておきたいです。
さらに他にも試してみます。

<実験その3>
基本的にPythonは最後に改行されるのだそうです。なので、1行目と2行目を改行させないようにするにはどうすればいいのか?文章を繰り返したいときは?などを試してみました。

fig06

改行させたくない=末尾に「,end=""」を追加
文章を繰り返したい=「*n」を使う ※nは繰り返したい回数の数字
nは、数値をprint内で設定してもいいし、事前に定義(i)しておいてもできました。

ちなみに、ひとつの文章を任意の場所で改行したいときは次のようにすればできるようです。(サンプルコードより。)

fig07

実験はここまで。
今回もいろいろ試すことができて楽しかったです。こうして学んでいく中で、こういうこともできるんだなーという認識を通して、自分の仕事のどのシーンで使えそうかなという点に紐づけて考えていきたいなと改めて思いました。
また次回もお付き合いいただければ幸いです。ありがとうございました。

 


 

 [IT研修]注目キーワード   Python  UiPath(RPA)  最新技術動向  Microsoft Azure  Docker  Kubernetes