printを使うと改行して出力されるんだけど…
改行なしで出力したいときは、どうすればいいんだ。
こちらの悩みを解決しますね。
本記事の内容
・printで改行なしの出力をする方法
・printの中身を改行なしで出力できる理由
・改行なしの出力は何の役に立つのか
print('文字列')
または
print("文字列")
で、文字列が出力されるのはご存知の通りです。
しかし、この書き方だと必ず改行されてしまい、コードを見にくくしてしまう原因にもなってしまいます。
必要に応じてという形にはなるのですが、ここではPythonにおける「print関数の中身を改行なしで出力する方法」について一歩踏み込んで見たいと思います。
printで改行なしの出力をする方法
2つ以上のprint関数を用いる際、通常なら改行されて実行結果となるのは先にお話しした通りです。
改行無しで出力する方法は以下の通り、エンドオプションで出力するオプションに対してカンマを入れます。
具体的には
print('Hello' ,end='')
と、end=’’を入れます。
2つのprint文を書いた時、実行例は以下の通りになります。
print("Hello", end='')
print("world!" end='')
以上のコードを出力してみます。
水色で下線をひいた部分が改行されず、コマンドラインの左側で出力されたのがお分かりいただけたと思います。
printの中身を改行なしで出力できる理由
printの中身を改行なしで出力できる理由は、エンドオプションを理解すれば分かります。
エンドオプションとは
- end関数を使って、最後に付け足したい文字列を指定できる
- print関数のカッコ内でend=”最後に付け足したい文字列“と指定すると、その文字列を最後に付け足すことができる
end=””で「何も最後に付け足さない」という意味になるから、改行なしで出力できるのですね。
逆に言えば、print関数では、エンドオプションを使わないと自動的に改行コードが付け足されるため、勝手に改行されていたのです。
改行なしの出力は何の役に立つのか
これだけでは、print関数に改行を入れないということ以外分かりづらいかもしれません。
しかし、エンドオプションでの改行打ち消しは、プログラミングの意外なところで役に立ちます。
改行打消しのメリット
- 文字列や数値を改行しないで、コードを後で見やすくする
- 別の関数と組み合わせると役に立つ
- タイマーを使ったプログラムが作りやすい
1については既に解説したので、2と3についてみていきましょう。
別の関数と組み合わせると役に立つ
ここで、セパレートというエンドオプションとよく似たものがあるので、ご紹介します。
セパレートとは
- sep関数を使って、2つの文字列の間に挿入したい文字列を指定できる
- print(“文字列”, “文字列”)のように2つの文字列を出力するときに使うことができる
- print関数のカッコ内でsep=”2つの文字列の間に挿入したい文字列“と指定すると、その文字列を間に挿入することができる
書き方は、エンドオプションと同じだと思ってOK
2つの関数を同時に解説すると混乱すると思うので、まとめてみます。
sep関数とend関数の違い
sep関数:文字列と文字列の間に挿入
end関数:文字列の一番最後に挿入
実際に、プログラムを見てみましょう。
print('Hi', 'Mike', sep=',', end='.')
print('Hi', 'Ken', sep=',', end='.')
出力結果はこうなります。
せっかくなので、2つ一緒に覚えておきましょう。
タイマーを使ったプログラムが作りやすい
printとタイマーとendの相性が良いので解説しますね。
下のサンプルコードをご覧ください。
import time
for i in range(10):
print(i)
time.sleep(1)
import timeは、この一行をプログラムの中に書くことで、timeモジュールの機能を出来るようになるimport文です。
2行目は、過去の記事内でも書いた通りfor rangeで、0から9までの数値を計測します。
最下部にあるtime.sleep(1)では、引数に1を指定することで1秒間ずつ数値を数えていく関数になります。
実際に実行してみると、このようになります。
for rangeで出された数値が0から9まで、1秒間ずつ呼ばれています。
ただこの場合ですと改行をして一つ一つ呼ばれているため、大量の数値を扱う際に不具合が生じる恐れがあります。
そこで、エンドオプションの出番です。
下記のコードをご覧ください。
import time
for i in range(10):
print("\r"+str(i), end="")
time.sleep(1)
print文の前半に改行及びiを文字列にする命令が入っていますが、ここで肝心なのが後半のエンドオプションです。
試しにこの記法で出力してみましょう。
はじめは0からスタートし
同じ場所で1秒毎に1カウントします。
このように9までいくと、その場で処理が止まります。
以上、エンドオプションを使うと、timeモジュールを使うときに思い通りの出力結果が得られます。
エンドオプションで組み合わせることの出来る関数は他にもありますので、いろいろ工夫して試してみるのも良いでしょう。
まとめ:print関数で改行なしの出力を解説
まとめると、エンドオプションによって改行なしを指定できるため、printでも改行しないことができるのです。
print関数を使うと、デフォルトでは改行コードがエンドオプションによって挿入されているので、改行されていたのですね。
次は下の記事をどうぞ。
コメント