[ 探讨:]python的效率实在是比不上c!

来源:百度文库 编辑:神马文学网 时间:2024/03/28 18:15:04
今天用python写了两个程序,水仙花数和完美数!经典的c练习题!
水仙花数的程序很小,没什么感觉,完美数的程序就复杂一些了!
同学用c写,我用python写,代码几乎是对等翻译!我用的机器cpu主频超过同学的两倍,内存是同学的4倍,就这样,程序运行的时间几乎相同(10w个数据)。。。可想而知,python作为解释型语言,速度上面确实是个巨大的问题!我曾经看到有文章说,就算对解释型语言,python也是其中比较慢的,可怕。。。想象一下运行起来比basic还慢的程序。。。!疯了!
还有就是,python的模板函数运行起来必须带模板的名称!比如开方的函数!
c是这样写:
include
sqrt(5);
就行了,直接可以调用sqrt()!
python必须这样写:
import math
math.sqrt(5)
math是必须要加上的,既然已经import math了,为什么还要加呢?不明白!!!
不是一个很方便的东东。。。hoho!
附注1:
水仙花数:各位数字的立方和等于原来的数!
结果:153,370,371,407
完美数:各个因子(素因子及其任意组合乘积,不包括这个数本身,但是包括1)之和等于原来的数!
结果:6,28,496,8128(10万以内)
附注2:
事实上,水仙花数可以扩展为任意位数,不过n位数必须要求是n个数字的n次方和,否则会无解!以下是我的代码,只考虑的计算问题,没有考虑输入的出界问题,比较草!大家批评指正!
n=input(‘Number of position?‘)
p=[0]*n
for i in range(pow(10,n-1),pow(10,n)):
k=i
for j in range(0,n):
p[n-j-1]=k%10
k=k/10
sum=0
for j in range(0,n):
sum=sum+pow(p[j],n)
if sum==i:
print i
今天就这么多,明天再继续吧!
作者Blog:http://blog.csdn.net/jamesfangjing/
相关文章
用python写的分数化小数的程序!
python编的算24的程序!
论语-学而第一(2)
Learning Python(5.3):Answers
Learning Python(5.3):Some question!
对该文的评论
CSDN 网友 ( 2004-11-10)
谢谢各位指点,呵呵!
我还是python初学,所写象楼上说得,代码显然很糙!
我写这个,只是在我自己的地方,发点感想,就我这水平,哪敢比较语言的优劣?再说我个人而言,是很赞同msmcd的评论的,很不喜欢比较语言的优劣!
现在正在学,希望大家进一步指点!
albertlee ( 2004-11-10)
import math
math.sqrt()   这样做是为了防止命名冲突
C 中 #include "math.h" 后,是可以直接用 math , 可是如果有其他的头文件里另有一个 math 的定义怎么办?
这是 Python 相对于C 的优点。怎么能说是不方便呢?
觉得不方便,可以 from math import sqrt 就可以了。
对于速度的说法。 我的观点是:一个程序,影响效率80%的因素,其实是集中在20%的代码中。 如果把这段代码用C来写,在Python中引入C写的模块。
那么,鱼与熊掌就可以兼得了。
我一直的观点就是: C/C++ + Python  高低搭配,无坚不摧。
nethermit ( 2004-10-27)
楼主此言差矣,from math import math就可以直接用sqrt()了
楼主算法也很有问题,好像故意让python慢悠悠运行似的,for i in range(pow(10,n-1),pow(10,n)):里面再嵌套两个range(0,n),这样写简直就是故意让程序磨洋工,既然n是外部输入的常数,就应该在最外面设rangeN=xrange(n),还有pow函数的使用,在这个情况下不要用pow函数,很慢,用另一个函数,爆快。
楼主由此得出这样的结论未免草率了一点。
satitan ( 2004-10-26)
楼上说的很在理,要论慢可能没谁能慢过JAVA,但很多地方在用。用好了啥都好用,呵呵
msmcd ( 2004-10-26)
好比三岁的小孩儿说“客机速度比不过火箭”。就速度来说,火箭是高效的;就载客运输能力来说,飞机是高效的。
不同的是,你要从中国飞到美国,做火箭(技术不是问题,就看有人愿意花钱不)固然快,可是你受不了成本;反之,如果你要去太空的话,客机飞不上去,只有用火箭载人了。
--关键在于各有所长,“术业有专功”,这才是各种语言百花齐放的原因。
_xyz