⑴ 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)
下面是我跑出來的結果: