python§01:print() を極める たかがprint、されどprint

Python基礎

print()は文字を表示するだけではない!

print()は、よく使うpythonの標準関数です。プログラムの計算結果を表示したり、進行を確認したり、そして、バグを見つけるための手助けに使います。

Python3からprint()は、関数になりました。Python2では、printは文でした。

これからは、Python3を勉強するほうが絶対いいので(※Python2は進化と改良をやめた)、print()関数について、説明します。

定番 Hello World 文字列の表示 print(“Hello World”)

プログラミング言語を覚えて、試しに、コードを書くのが「Hello World」という文字列を表示することですね。pythonでのこのコードはとても簡単です。

print("Hello World") 
''' ----- ここからoutput ----- 
Hello World 
-----ここまでoutput----- 
'''

1行目:Hello Worldと表示せよという命令。print()のかっこの中にダブルコーテーション、あるいはシングルコーテーションで囲むことで、文字列として指定しています。

2行目から6行目は、コメント文といって、プログラムには関係ないことを記述できます。プログラムに影響を及ぼしません。出力がどのようにされるかをこのようにコメント文で表現しています。今後もこのように書いて、出力がどうなるのかをコードの下に書くようにします。

実際に実行したい場合は、こちらを参考にして、試してみてください→(Pythonが試せるサイトを使う方法)   すぐに試すには→(Paiza.io

複数行のコメントを書くときにシングルコーテーション3つ続ける行を最初と最後に書くとその間がコメント文扱いとなります。

1行だけコメント文にしたいときは#を最初に書きます。次のように書いても同じということです。

print("Hello World") 
#----- ここからoutput ----- 
#Hello World 
#-----ここまでoutput-----

という具合にここまでは、文字列を表示した例でした。

数字や計算式を直接表示できる print(5) print(23+4)

実は、print()関数は、数字や式も表示できます。たとえば、数字の5とか[1行目]23+4とか[2行目]、直接かっこの中に数字や四則演算記号での計算式を入れることができるのです。出力を見ると2行目の結果は6行目の27というふうに答えが表示されています。

print(5) print(23+4) 
#----- ここからoutput ----- 
#5 
#27 
#-----ここまでoutput-----

でも普通は、電卓がわりに利用するのでなければ、このような使い方はあまりしません。

変数を使った表示 print(hensu)

ローマ字でhensuという変数を作ってみましょう。変数というのは、箱のようなもので、さまざまな計算結果を入れたり、再利用したり便利なものです。プログラムコードには100%、この「変数」が使われますので、変数の理解は重要です。

次のコードは、hensuという変数に123という数字を入れます。そして、hensuの中身を表示します。

hensu=123 
print(hensu) 
#123hen

次は、そのhensuを100倍します。

hensu=123 
print(hensu) 
#123 print(hensu*100) 
#12300

変数同士の計算もOKです。

hensu1=10 
hensu2=20 
print(hensu1+hensu2) 
#30

まだまだ奥が深い print() オプションについて

print(*objects, sep, end, file, flush)

これが、print()の全貌です。

最初の *objects は、複数のオブジェクトを渡せることを意味します。

#複数個の表示
print(1,2,3)
#1 2 3

#複数個の変数の表示
a=10
b=20
c=30

print(a,b,c)
#10 20 30

#複数個の文字列と変数の表示
print('a=',a,'b=',b,'c=',c)
#a= 10 b= 20 c= 30

#リストの表示
l=[1,2,3]
print(l)

#タプルの表示
t=(1,2,3)
print(t)

#複数個の表示
print(1,2,3,sep="-")
#1 2 3

#複数個の変数の表示
a=10
b=20
c=30

print(a,b,c,sep="*")
#10*20*30

#複数個の文字列と変数の表示
print('a=',a,'b=',b,'c=',c)
#a= 10 b= 20 c= 30

#リストの表示
l=[1,2,3]
print(l,sep="-")

#タプルの表示
t=(1,2,3)
print(t,sep="-")

a=input()


ここで、16行目からは「リスト」、20行目には「タプル」が登場しました。配列変数であるとでも知っておいてください。また、別のページで紹介しますね。

このように複数個の表示ができるようになっています。基本的には、数に制限はありません。

区切り文字を変える print(*objects,sep=”区切り文字 “)

デフォルトでは、sep=” “ つまり、区切りはスペースひとつ文になっています。なので、さきほどの複数個の表示では、文字と文字の間にスペースがあったのです。

区切り文字をたとえば、「*」にしたければ

print(a,b,c,sep="*")
#10*20*30

sep=”*” のように設定してやればよいだけです。

最後の出力文字を変える print(*objects,end=”\n”)

デフォルトでは、end=”\n” つまり、表示の最後に改行文字が設定されています。

たとえば、print()を3つ実行すると、以下のとおり、改行されて出力されます。

print(1) 
print(2) 
print(3) 
#1 
#2 
#3

 

これをend=””としてみると、出力はすべて、くっついています。

print(1,end="") 
print(2,end="") 
print(3,end="") 
#123

1行目:a.txtという名前のファイルを ’w’モード:書き込み専用 で代理人fさんで、開きますよーという意味。(f:オブジェクト)

2行目:文字列をprint()関数で、出力をfさんに渡すという意味。結果、内容がa.txtというファイルに書き込まれます。

a.txtの中身は以下のとおり。(実際のファイルには、行番号1はありません)

 

文字列を画面ではなく、ファイルに書き込む例

この例では、1行しかファイルい書き込まなかったけど、10000行書き込むのも簡単です。次の例では、10000行自動で書き込みます。(※こんな無意味な書き込みは普通しませんけど)

with open('b.txt', 'w') as f: 
  for i in range(10000): 
    print('文字列を画面ではなく、ファイルに書き込む例', file=f)

1行目:さきほどと同じおまじないで、ファイルb.txtに書き込む準備です

2行目:これは10000回繰りかえすという意味で、別のページで解説しますね

3行目:ここは、さっきの例とまったく同じ 内容です。

b.txtの中身はというと、全部は示しませんが、10000行の文字列が書き込まれます。

print()関数を使ったファイル出力には、次にような書き方もあります。

f = open('c.txt','w') 
print('文字列を画面ではなく、c.txtファイルに書き込む例', file=f) 
f.close()

1行目:fオブジェクトをc.txtに’w’モード:書き込み専用で設定して、開くという意味

2行目:fオブジェクトにprint()関数で出力(書き込む)

3行目:fオブジェクトを終了させる(閉じる)

この方式だと、プログラムの最初と最後にファイルオブジェクトのOPENとCLOSEの操作を入れると、その間は自由いprint()関数でファイル出力できるので、便利な場合もあります。

f = open('c.txt','w') 
print('文字列を画面に出力する例') 
print('文字列を画面ではなく、c.txtファイルに書き込む例', file=f) 
f.close()

このように2行目と3行目をそれぞれ、画面出力とファイル出力両方できるようにする方法もあります。

即刻出力を実行する print(*objects,flush=False)

最後のオプションの紹介です。flushです。デフォルトでFalseに設定されています。

「即刻出力をする」とはどういう意味でしょうか?わかりにくいですよね。

実はpythonが気を利かして?複数回登場したprint()関数をまとめて最後に実行してしまうことがあります。

サンプルコードで説明します。まず、まとめて実行してしまう例です。

import time 
for i in range(10): 
  print("*", end="") 
  time.sleep(0.5) 
a=input()

1行目:タイマーを使うためのモジュールをインポート

2行目:10回繰り返すおまじない

3行目:*印を表示させる。改行はしないオプション end=””

4行目:タイマーで0.5秒待たせる

5行目:10回の繰り返しが終わったら、何かキーを入力するまで待つ

このプログラムで期待しているのは、0.5秒ごとに*印が、横につながっていく様子ですが、実は5秒後に0個の*印が一気に表示されます。pythonが忖度して、「一度に表示したほうが、ええんじゃない?」と考えてしまったのです。

それでは、期待どおりに0.5秒ごとに表示するサンプルコードです。

import time 
for i in range(10): 
  print("*", end="",flush=True) 
  time.sleep(0.5) 
a=input()

ほとんど、変わりませんが、一か所だけ、違います。

4行目:flush=True とオプションを設定しています。これが、即刻表示せよというオプションです。

このコードは期待どおり、0.5秒ごとに表示します。

 

print()関数も結構奥が深いことがわかったかな?

 

コメント