HPO機密日誌

自己をならふといふは、自己をわするるなり。

pythonへの熱い思い

ちと感動。いまはやり(?)のフィボナッチ数を求められたみたい。


Python 2.5.1 (r251:54863, Apr 18 2007, 08:51:08) [MSC v.1310 32 bit (Intel)] on win32
Type "copyright", "credits" or "license()" for more information.

****************************************************************
Personal firewall software may warn about the connection IDLE
makes to its subprocess using this computer's internal loopback
interface. This connection is not visible on any external
interface and no data is sent to or received from the Internet.
****************************************************************

IDLE 1.2.1
>>> def fib(n):
if n==1:
return 1
if n==2:
return 2
else:
return fib(n-2)+fib(n-1)


>>> for value in range(10):
print fib(value+1)


1
2
3
5
8
13
21
34
55
89
>>>

あ、まぁ、ここのところの「Y談」で答えは知っていたようなものなのだけれどね。

ちなみに正解はこっちだそうな。

def fib(n):
  if n == 0 or n == 1:
   return n
  else:
   return fib(n-1) + fib(n-2)

私は0をすっとばしていたという笑えない話。


>>> def sum_list(x):
a=0
for n in x:
a=a+n
return a

>>> data
(69, 40, 74, 41, 56, 57, 38, 58, 26, 55)
>>> sum_list(data)
514
>>>


>>> from math import *
>>> data
(69, 40, 74, 41, 56, 57, 38, 58, 26, 55)
>>> average_list(data)
51
>>> sqrt(2)
1.4142135623730951
>>> 2^2
0
>>> def square(x):
return x*x
>>> square(2)
4
>>> def dev_list(x):
dev_total = 0
avg_list = average_list(x)
for n in x:
dev_total = dev_total + square(n - avg_list)
return sqrt(dev_total)

>>> dev_list(data)
44.654227123532216
>>>


>>> def max_list(x):
max=x[0]
for n in x:
if max < n:
max = n
return max

>>> max_list(data)
74
>>>

割り算が変!絶対、変!


>>> for i in range(40):
print i+1,(fib(i+2)*1.0)/(fib(i+1)*1.0)


1 1.0
2 2.0
3 1.5
4 1.66666666667
5 1.6
6 1.625
7 1.61538461538
8 1.61904761905
9 1.61764705882
10 1.61818181818
11 1.61797752809
12 1.61805555556
13 1.61802575107
14 1.61803713528
15 1.61803278689
16 1.61803444782
17 1.6180338134
18 1.61803405573
19 1.61803396317
20 1.61803399852

数値計算も誤差が大きい気がする。


>>> for i in range(10):
a = (10*1.0) ** -i
b = sin(a)/a *1.0
print a,b


1.0 0.841470984808
0.1 0.998334166468
0.01 0.999983333417
0.001 0.999999833333
0.0001 0.999999998333
1e-005 0.999999999983
1e-006 1.0
1e-007 1.0
1e-008 1.0
1e-009 1.0

うぉー!そーだったのか!

>>> from __future__ import division

元IT担当@谷根千辺り

あ、こっちのがきれいだね。rangeの使い方わかってきた。


>>> for i in range(1,20):
print i,(fib(i+1)*1.0)/(fib(i)*1.0)


■参照

404 Not Found
複雑ネットワークのお勉強道具 from Python to Pajek: HPO:個人的な意見 ココログ版
はてなブックマーク - HPO:Bookmark - Python