コメントありがとうございます。よく意味がわかっていなかったので勉強になり
ました。ただ、次のようになりました。お忙しそうなので、コメントされなくて
も結構ですが^^;)
-----
Python 2.5 (r25:51908, Sep 19 2006, 09:52:17) [MSC v.1310 32 bit (Intel)] on win
32
Type "help", "copyright", "credits" or "license" for more information.
>>> sol = lambda a,b,c:[(-b+k*(b*b-4*a*c)**(0.5))/(2*a) for k in (1,-1)]
>>> sol(1,2,3)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 1, in <lambda>
ValueError: negative number cannot be raised to a fractional power
>>>
-----
ActivePython 3.1.0.1 (ActiveState Software Inc.) based on
Python 3.1 (r31:73572, Jun 28 2009, 19:55:39) [MSC v.1500 32 bit (Intel)] on win
32
Type "help", "copyright", "credits" or "license" for more information.
>>> sol = lambda a,b,c:[(-b+k*(b*b-4*a*c)**(1/2))/(2*a) for k in (1,-1)]
>>> sol(1,2,3)
[(-0.9999999999999999+1.4142135623730951j), (-1-1.4142135623730951j)]
>>> sol = lambda a,b,c:[(-b+k*(b*b-4*a*c)**(0.5))/(2*a) for k in (1,-1)]
>>> sol(1,2,3)
[(-0.9999999999999999+1.4142135623730951j), (-1-1.4142135623730951j)]
>>>
-----
On Thu, 13 Aug 2009 23:05:05 +0900 (JST)
kikwai@... (機械伯爵) さんwrote:
> えっと、オリジナルには書いておいたんですけど……
>
> 「Python3.x系ではなく2.x系の人は、1/2を0.5にすればいいかと。」
>
> よって、2.xで試す時は、
>
> sol = lambda a,b,c:[(-b+k*(b*b-4*a*c)**(0.5))/(2*a) for k in (1,-1)]
> ^^^
>
> にしてくださいね。
>
> <理由>
> Python 2.x以前は int / int の答えはC言語のようにintになってしまうので、
> 1/2 => 1 になってしまいます。
> Python 3.x以降は int / int => floatなので、1/2 => 0.5となります。
> こうすれば、内包表記可能以降のverなら、十分に使える筈です。
>
> /機械伯爵/
>
> ※3.xでも0.5は使えるので、そーすればいいのですが、単位分数(分母が整数、
> 分子が1)を累乗してやると累乗根を扱えるとゆーことが書きたかったので……
>
藤岡 和夫
kazuf@...
日曜プログラマのひとりごと http://homepage1.nifty.com/kazuf/renewal.html