pythonの文字列に入っている個々の文字の中に改行文字というものがあります。これを書きたいときは\nと書きます。(バックスラッシュ)を入力したい場合はキーボードの¥を押します。\は¥の半角で表示される場合もあります。
改行文字があるとコンソール画面では行替えが行われます。
python
1>>> print("abc\ndef")
2abc
3def
これは、pythonだけでなく、C言語なども同じですが、OSやプログラミング言語によってはそうではない場合もあります。
また、pythonのprint関数は、出力の最期に自動的に\nを追加します。
\nの扱いとか、printの最期に\nが追加されるとかいうのは、それはpythonを作ったひとがそう決めたからです。C言語のprintfは最後に\nを追加しませんが、それはC言語を作った人がそう決めたからです。そのような決まりを仕様(specification)といいます。自動車が左を走る国もあれば、自動車が右を走る国もあるのと同じです。
このために、print文の引数が文字列でその最後に改行文字が入っていると、そこで2回改行されるので行間が空いてしまいます。
皆さんが書かれているようにend=""を入れることでこれを止めることもできます。また、rstripというメソッドを使って最後の改行文字を取り除くという方法もあります。
rstripの使い方は以下です。
python
1>>> for x in ["abc\n", "def\n"]:
2... print(x)
3...
4abc
5
6def
7
8>>> for x in ["abc\n", "def\n"]:
9... print(x.rstrip())
10...
11abc
12def