2016年3月23日水曜日

pythonで「0から9までの数をすべて足すコードを書いてみて?」ができないorz

プログラミングの勉強をしようと思い立ち、pythonを学んでいる中、今更ながらQiitaの騒動を知り、なにやらくだんの氏は書籍を出しており、その第1話が無料で公開されていたので読んでみた。

IQ145の美少女が言うに、どうやら “ループ文 = ださい” ということらしい。
IQ135のださい私にはループ文の何がださいのかわからないが、IQ145の美少女が言うのならばださいのだろう。

それはともかく、pythonならどうすれば良いか?

以下のコードで回答が得られる

print(sum(range(10)))


ださいと罵られることを承知でリストを作ったうえで、ループ文を使えば次のようになる。

n = 0
list = []
s = 0

while n <= 9:
    list.append(n)
    n += 1
else:
    for i in list:
        s += i
    print(s)

確かにこれは読み解くだけで時間が無駄に消えそうだ。ださいと言われても仕方ないかもしれない。

高階関数を使用すればもう少しすっきりする。これが一番少女が言うクールな関数に近いだろう。
 ※ グローバル関数("f = 0, n = 9")を指定する必要がある"range(f, n + 1)"ではなく、range(0, 10)が王道

from functools import reduce

f = 0
n = 9

list = list(range(f, n + 1))
print(list)

def function(x, y):
    return x + y

result = reduce(function, list)
print(result)


ちなみに私が最高にクールだと思うのは次のコードだ。

n = 9

s = ((n + 1) * n) / 2

print(int(s))


これは19世紀最大の数学者のひとりであるカール・フリードリヒ・ガウスが小学生の時に編み出したとされる逸話を数式にしたものだ。

書籍中の彼女のコードをみてもださい私にはリストを手書きすることの何がかっこいいのかわからなかったが、この記事を書くに当たり、上記の式を知り、何となくわかった。なるほど、確かにループ分を使わない解はかっこいいかもしれない。
もしも彼女がコードを書けといった時に主人公が上記のコードを書いたとしたら、彼女は主人公にめろめろになっただろうか?


それはともかくとして、上記の読みにくいループ文が合っていると馬鹿でもわかるように証明しろと言われると困る。
おそらく次のようになっていれば馬鹿でも何となくあってそうだと理解してくれるはずだ。

x軸が1, 2, 3, ...n
y軸が1, 1+2, 1+2+3, ...n
のマッピング上における解の直線が傾き45度であることを確認する。

ところが、Google先生によるとpythonでグラフを作るには、別途ライブラリをインストールしろと言ってくる。なんと、標準ライブラリでは無理なのか…。
それでなくとも現在の私にはy軸を数式に表す実力はない。
将来の課題としたい。

2016年3月22日火曜日

python3 in Xcode

エディタとかよくわからん。結局Xcode使えば良いんでしょ?
↓ Xcodeダウンロードするも…
Xcodeの使い方わからん

そんな人用の記事