作者: 藤岡和夫
日時: 2009/8/13(23:40)
コメントありがとうございます。よく意味がわかっていなかったので勉強になり
ました。ただ、次のようになりました。お忙しそうなので、コメントされなくて
も結構ですが^^;)

-----
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