#TL, DR
print("\n".join([f'{" "*(10-i)}{"💩"*i}' for i in range(10)]))
#1.💩の表示
そもそもprintで絵文字を表示できていたかの確認
>>> print("💩")
💩
よし,出だしは順調
(考えてみれば日本語が入力できるので,絵文字も出力できてもおかしくなかった)
#2. 片階段💩の作成
絵文字をよくよくみる限りおそらくでかい💩は正三角形型に💩を並べれば良さそう
ならばfor文で適当に片階段💩が作れるはず
高さはとりあえず10段ぐらいでいいだろう
>>> for i in range(10):
... print("💩"*i)
...
💩
💩💩
💩💩💩
💩💩💩💩
💩💩💩💩💩
💩💩💩💩💩💩
💩💩💩💩💩💩💩
💩💩💩💩💩💩💩💩
💩💩💩💩💩💩💩💩💩
ここまではいい感じ
#3.正三角形のでかい💩の作成
正三角形を作るということは💩の前にスペースを置きたい,
💩が全角ということを考えると(本当に全角かは不明)
一行あたりに置くスペースの数は
(段数-i)/2\times2
となるはずだ
つまりコードにすると
>>> for i in range(10):
... print(f'{" "*(10-i)}{"💩"*i}')
...
💩
💩💩
💩💩💩
💩💩💩💩
💩💩💩💩💩
💩💩💩💩💩💩
💩💩💩💩💩💩💩
💩💩💩💩💩💩💩💩
💩💩💩💩💩💩💩💩💩
これでいいと思ったが,何かが違う
これでは💩ツリーだ
#4.💩ツリーの1行化
テクいことはできないので,素直にリスト内包表記を使っていく
ここでちょっと迷ったのが,
print([i for i in range(10)])
[print(i) for i in range(10)]
で結果が違うのだ(当たり前かもれないが)
それぞれ結果は
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
0
1
2
3
4
5
6
7
8
9
[None, None, None, None, None, None, None, None, None, None]
となる
下のコードの最後のNone配列ってなんだ?と思ったが,考えてみれば自然なことでインタプリタではリストの内容が勝手にprintされているので,print文の戻り値がリストに入っているのである
今回はインタプリタでもカッコよく💩を見せたいので,リストを生成してprintしてやろうと思う
ただし素直に書いてあげるとリストがそのまま表示されてしまうので(下コード)
>>> print([f'{" "*(10-i)}{"💩"*i}' for i in range(10)])
[' ', ' 💩', ' 💩💩', ' 💩💩💩', ' 💩💩💩💩', ' 💩💩💩💩💩', ' 💩💩💩💩💩💩', ' 💩💩💩💩💩💩💩', ' 💩💩💩💩💩💩💩💩', ' 💩💩💩💩💩💩💩💩💩']
joinを使って結合してあげる
>>> print("\n".join([f'{" "*(10-i)}{"💩"*i}' for i in range(10)]))
💩
💩💩
💩💩💩
💩💩💩💩
💩💩💩💩💩
💩💩💩💩💩💩
💩💩💩💩💩💩💩
💩💩💩💩💩💩💩💩
💩💩💩💩💩💩💩💩💩
これでワンライナー💩ツリーの完成だ
#終わりに
これが本当のクソ記事ってね
#Environment
python3.7