⑴ python有什么缺点呢
1. - 运行速度慢,因为Python是解释型语言,是一种高级语言,代码会在执行的时候,一行一行的使用解释器翻译成底层代码,翻译成机器码,而这个过程非常耗时,所以他运行过程中,比很多语言的代码都慢了很多。
- 线程不能利用多CPU,这是Python最大的确定,GIL即全局解释器锁(Global Interpreter Lock),是计算机程序设计语言解释器用于同步线程的工具,使得任何时刻仅有一个线程在执行,Python的线程是操作系统的原生线程。在Linux上为pthread,在Windows上为Win thread,完全由操作系统调度线程的执行。一个python解释器进程内有一条主线程,以及多条用户程序的执行线程。即使在多核CPU平台上,由于GIL的存在,所以禁止多线程的并行执行。
Python的优缺点可以看看传智播客的社区,里面很多技术老师写的相关文章。并且有学习线路图适合小白学习,每个板块下面都有配套视频。
⑵ python怎样改才能变为,正方形,不是长方形的螺旋线
如下图所示,把代码中对应部分代码改成红圏处样式
运行结果展示
上图为运行结果,不知是否符合需求
⑶ python 画图,有一个N*N的格子,每一个格子对应着一个数值,根据数值将不同格子绘制不同的颜色,怎么做
fromTkinterimport*
defdrawboard(board,colors,startx=50,starty=50,cellwidth=50):
width=2*startx+len(board)*cellwidth
height=2*starty+len(board)*cellwidth
canvas.config(width=width,height=height)
foriinrange(len(board)):
forjinrange(len(board)):
index=board[i][j]
color=colors[index]
cellx=startx+i*50
celly=starty+j*50
canvas.create_rectangle(cellx,celly,cellx+cellwidth,celly+cellwidth,
fill=color,outline="black")
canvas.update()
root=Tk()
canvas=Canvas(root,bg="white")
canvas.pack()
board=[[1,2,0],[0,2,1],[0,1,2]]
colors=['red','orange','yellow','green','cyan','blue','pink']
drawboard(board,colors)
root.mainloop()
colors必须有不小于最大数值的颜色数
⑷ 如何采用Python语言绘制一个螺旋线
打开直接的IDLE软件,也就是Python语言shell的界面。 单击“file”-“new file”新建立一个脚本。 保存文件,在脚本界面中,选中“file”-“save”,就会出现保存的配置界面; 配置文件名并且单击“保存”就可以啦
⑸ python与VB的区别是什么
区别一:适用平台不同
VB只能用于windows,python可以多平台使用。这个之前的知友提过就不过多的说明。
总体来看,python的适用性更广。
区别二:难易程度不同
Python好学,易上手,即使0基础也不怕。我们的学员里有不少是0基础转过来的。如果你是第一次学习计算机编程语言,推荐你学这个。Python目前使用的也越来越广,所以推荐。
VB入门不难,甚至很多刚开始接触计算机的都可以学习VB,不少学校要求学生考的计算机二级也是基于VB或者C语言,但是学精很难。市面上现在用VB系统的偏少。
区别三:应用程度不同
python用途太广了。从科学计算,运维,WEB,甚至手机应用都有。几乎无所不能,无所不精。而且不少大公司的网站:例如豆瓣、网易都是利用python语言编写的,后期的维护基本也都会python。可见Python应用范围广。
而VB的应用面就比较窄了,一个是受制于应用平台,另一个是应用范围,VB主要用于简单的应用,数据库管理,管理信息系统。自动控制系统的界面。监控界面等等。而且现在使用VB的高手也越来越少了,从侧面也说明VB不是主流语言。
区别四:运行速度上
Python能够快速对电脑的文档软件进行处理,运行速度比较快,处理起来得心应手。而无论是C、还是VB,面对大多数任务,编码速度都不及Python的。
⑹ 总结用python绘制正多边形的规律
如果能够找到规律,可以让代码变得更简单。上述代码中其实就是调用circle()函数四次,每次传入参数不同而已。
我们可以加入循环,循环就是重复不停地做相同的事情;再找到循环变量和画圆参数之间的规律即可。
第一个圆的半径为50,每次按15的节奏递减,直到绘制完半径为5的圆。这样就可以使用range()函数,传入如下参数:range(50,0,-15)。
或者由小到大绘制,传入这样的参数也可以:range(5,51,15)。
还可以这样:循环四次,循环变量i依次为0、1、2、3,再在绘制圆的过程中构造递减的表达式:100/2-i*15。
分析这个表达式,当i等于0时,结果为50,绘制半径为50的圆;当i等于1时,结果为35,绘制半径为35的圆……正好符合题目要求的参数值。
【扩展】思考如何绘制以坐标原点为中心的同心圆呢?
仔细观察画笔绘制圆的轨迹,可发现:默认小海龟从坐标原点出发,逆时针旋转一圈画圆;然后,再回到起始点。
所以,绘制同心圆。我们需要将画笔向下移动一定的距离,即改变y的坐标,x坐标保持不变为0。参考代码如下:
循环体内,每次需要抬笔和落笔功能。
02
案例二:绘制一个正多边形
绘制正多边形有这样一个结论:用360°去除以绘制的边数,即可得到旋转角度。
比如:正三角形的旋转角度(360/3=120°)、正四边形的旋转角度(360/4=90°)、正八边形的旋转角度(360/8=45°)。其他以此类推。
那么,我们要绘制一个正八边形呢?
使用循环结构,循环八次。每次前移一定距离,再旋转(360/边数)的角度,这里旋转的就是45°角。参考代码如下:
有了这样的结论,其他的正多边形都可以信手拈来,小菜一碟了。只需要稍微改几个参数即可。
03
案例三:绘制由多种颜色组成的正螺旋线
比如,这样的图形:
这是由八种颜色组成的正八边形螺旋线结构图,颜色依次为:红(red)、绿(green)、蓝(blue)、黄(yellow)、紫(purple)、橙(orange)、黑(black)、粉(pink)等八种。
绘制思路:
首先,需要创建一个颜色列表list,含有八种颜色元素。
第二,前移一定距离,这个距离值是由小到大逐级递增的过程。
第三,旋转一定角度,可参照案例二的结论。
最后,考虑画笔的颜色,每8次(边数)为一个周期循环颜色列表。
参考代码如下:
其他的正螺旋线,也是如此规律。
【扩展】如果是有一定旋转角度的螺旋线呢?比如,这样的图形:
解题思路:只需要在正螺旋线的基础上,让旋转角度多偏移1-2°即可。修改上述案例中最后一行的代码:
⑺ java和python哪个做后台好一些
python好些。
⑻ 如何用Python语言编写螺旋线
#coding=utf-8
frommathimportsqrt,cos,sin
importImage,ImageDraw
classSpireShape(object):
def__init__(self,draw):
self.draw=draw
self.line_width=1
self.line_color=(0,0,0)
self.current_point=(0,0)
defsetPoints(self,points):
self.points=points
defsetLineWidth(self,line_width):
self.line_width=line_width
defsetLineColor(self,line_color):
self.line_color=line_color
defmoveto(self,p):
self.current_point=p
deflineto(self,p):
self.draw.line((self.current_point,p),width=self.line_width,fill=self.line_color)
self.current_point=p
defpoint(self,p):
self.draw.point(p,fill=self.line_color)
self.current_point=p
defspire(self,p,angle,rate):
'''
pisstartpoint,angleisstartangle,rateisscatterspeedlen/thita.
'''
r=0;
thita=0;
pi=3.14
=2*pi/360
whiler<=500.0:
posX=r*cos(thita+angle*)
posY=r*sin(thita+angle*)
pSpare=(posX+p[0],posY+p[1])
self.point(pSpare)
r=r+thita*rate
thita=thita+
#测试代码
if__name__=='__main__':
im=Image.new('RGBA',(1024,1024),(255,255,255))
draw=ImageDraw.Draw(im)
b=SpireShape(draw)
point=(500,500)
b.spire(point,0,0.2)
#b.spire(point,90,0.2)
deldraw
im.show()
⑼ python比java速度快
骗人的,python是字符文本格式,直接用记事本写代码,都不用编译,改个后缀名就可以运行。java是字节码,需要编译器。文本和字节码在运行时的区别就是文本格式需要解释器对标识符长度、换行符之类的进行比对,而字节码不需要考虑这些格式。文本格式在进行解释时由于标识符的长度不等,查找代码的速度会差很多,而字节码则可以直接用一个函数指针数组来作为解释器的核心,查找速度更快。
虽然如此,python在某些时候可能会比java还快。就像是我之前有试过用Matlab和C++做矩阵运算,发现matlab比C++快了好多倍。这是因为matlab中一条指令可以被解释成一个很复杂的算法,而我又无法对C++做出很好的优化。matlab的核心也是C++程序,做矩阵运算反而比直接使用C++还快。当然,我没有拿matlab和openCV作比较。如果当时使用openCV的库函数来做矩阵运算,结果又会是天差地别。openCV的性能之高,可以靠画线和图块用来做动画,这才是真正发挥出了C++的性能。
可以说对于标准算法和菜鸡程序员,matlab可能会比C++还快。那么对于这些标准算法,python比java快,java比C++快,C++比C快就不是什么很奇怪的事情了。事实就是我自己在做一些标准算法的时候,C反而是最慢的,无论运行速度还是开发速度C都是倒数。
但是对于一些不是很标准的程序,性能的比较就很公正了。就像坐火箭朝反方向绕地球一圈和步行一百米的区别,由于脚本语言的封装程度太高,对于一些细节的操作就会力不从心。经过专家优化过的python可能不如菜鸟写的java,同样,对于这样的程序C语言的优势是压倒性的。
⑽ 如何用python turtle画斐波那契螺旋曲线
我把矩形和圆弧都用不同颜色填充了,你按照自己的需求修改一下吧,你的题目说的不清楚。
#Python3.6
#使用turtle绘制Fibonacci螺旋
defdraw_fibonacci(x):
#F0=1
#F1=1
#Fn=F(n-1)+F(n-2)
#产生斐波那契数列,用于查表
#像这种计算复杂性指数增长的计算,不要写个函数去每次求一个数
#最好的办法是,按照规律写出查找表,用查找的方法来得到数据
f_list=[]
foriinrange(x):
ifi==0:
f_list.append(1)
elifi==1:
f_list.append(1)
else:
f_list.append(f_list[i-1]+f_list[i-2])
#像素比例
f0=50
#设置画笔属性
turtle.pensize(5)
turtle.pencolor("black")
turtle.penup()
turtle.home()
turtle.pendown()
foriinrange(0,len(f_list)):
#绘制速度,1~10个不同速度等级,小于1或者大于10立即绘制
turtle.speed(1)
turtle.pendown()
#绘制矩形
ifi==0:
fill_color="black"
else:
fill_color=(random.random(),random.random(),random.random())
turtle.fillcolor(fill_color)
turtle.begin_fill()
turtle.forward(f_list[i]*f0)
turtle.left(90)
turtle.forward(f_list[i]*f0)
turtle.left(90)
turtle.forward(f_list[i]*f0)
turtle.left(90)
turtle.forward(f_list[i]*f0)
turtle.left(90)
turtle.end_fill()
#绘制圆弧
fill_color=(random.random(),random.random(),random.random())
turtle.fillcolor(fill_color)
ifi==0:
turtle.forward(f_list[i]*f0/2)
turtle.begin_fill()
turtle.circle(f_list[i]*f0/2,360)
turtle.end_fill()
#移动到一下起点
turtle.forward(f_list[i]*f0/2)
continue
else:
turtle.begin_fill()
turtle.circle(f_list[i]*f0,90)
turtle.left(90)
turtle.forward(f_list[i]*f0)
turtle.left(90)
turtle.forward(f_list[i]*f0)
turtle.end_fill()
#移动到一下起点
turtle.speed(0)
turtle.penup()
turtle.left(90)
turtle.forward(f_list[i]*f0)
turtle.left(90)
turtle.forward(f_list[i]*f0)
turtle.done()
if__name__=="__main__":
draw_fibonacci(6)
下面是我跑出来的结果: