python基礎知識點

一、turtle庫的使用

Turtle,也叫海龜渲染器,使用Turtle庫畫圖也叫海龜做圖。Turtle庫是Python語言中一個很流行的繪製圖像的函數庫。海龜渲染器,和各類三維軟件都有着良好的結合。功能強大,使用方便。該渲染器的特點在於其渲染速度能夠優海龜渲染器,和各類三維軟件都有着良好的結合。

 (1)畫圓 python

(circle() 有三個參數:radius必須,extent--角度 與step--圖形(無關緊要)) 複製代碼

一、radius -- 任意大小圓 git

import turtle 
t = turtle.Turtle() 
t.circle(x) 複製代碼

二、radius extent --- 任意大小圓得部分 算法

# 半圓
import turtle
t = turtle.Turtle()
t.circle(100,180) 複製代碼

三、 編程

radius  extent  steps  # 可實現多邊形的繪製
import turtle
t = turtle.Turtle()
t.circle(100,180,3) 複製代碼

四、bash

radius step  #三角形 
import turtle
t = turtle.Turtle()
t.circle(100,steps=3) 複製代碼

五、實心圓 app

t.hot() 複製代碼

(2)畫筆的轉換(shape()函數的使用)可填寫以下圖形: dom

一、海龜 turtle ide

二、等邊三角形 triangle 等腰三角形 arrow 函數

三、正方形 square oop

四、實心圓 circle  

(3)畫筆的繪製狀態 

一、pendown() 

二、penup() 

三、pensize() #可直接寫數字 

(4)畫筆的運動狀態

一、t.forward() / t.fd()箭頭方向前進 

二、t.backward() / t.bd() ------後退

三、t.left() / t.right() 

四、t.goto() / t.setpos() ----移到某一位置 

五、t.setx() / t.sety() ---- 改變x座標或者Y座標

六、t.home() ---- 回到初始位置

七、t.position() / t.pos() print(t.pos)---返回當前箭頭座標 

(4)畫筆的隱藏與顯示 

一、隱藏 hideturtle() / ht() 

二、顯示 showturtle() / st() 

(5)顏色 

一、turtle.begin_fill():在填充圖形前訪問這個方法 

二、turtle.end_fill():在最後調用begin_fill以前填充繪製的圖形 

三、turtle.color(c):設置筆的顏色 

四、turtle.fillcolor(c):設置筆填充顏色 

一、在begin_fill()和end_fill()之間設置的turtle.color(c)和turtle.fillcolor(c)均可以做爲填充色 二、將turtle.color(c)提到前面,不寫begin_fill()和end_fill(),則就不會實現填充 

三、將turtle.color(c)提到前面,並在begin_fill()和end_fill()之間設置turtle.fillcolor(c),那麼圖形的邊框和內部填充顏色分別對應於color和fillcolor 

四、在begin_fill()和end_fill()之間設置不一樣的turtle.color(c)和turtle.fillcolor(c),則以排序在後面的爲準去填充圖形 

 補充: 

(1)

input # 輸入的數字爲字符串
import turtle
num = int(input(""))
t = turtle.Turtle()
t.circle(num) 複製代碼

 (2)

random

print( random.randint(1,10) )        # 產生 1 到 10 的一個整數型隨機數 
print( random.random() )             # 產生 0 到 1 之間的隨機浮點數
print( random.uniform(1.1,5.4) )     # 產生 1.1 到 5.4 之間的隨機浮點數,區間能夠不是整數
print( random.choice('tomorrow') )   # 從序列中隨機選取一個元素
print( random.randrange(1,100,2) )   # 生成從1到100的間隔爲2的隨機整數


turtle、input、random可相互結合演示  複製代碼

擴展:

1.forward() | fd():向前移動指定的距離。參數:一個數字(integer or float))。

turtle.forward(25)複製代碼

2.backward() | bk() | back():向後移動指定的距離。參數:一個數字(integer or float))。

turtle.backward(30)複製代碼

3.right() | rt():以角度單位向右轉動。參數:一個數字(integer or float))。單位默認爲度數,能夠經過degrees()和radians()進行設置

turtle.right(45)複製代碼

4.left() | lt():以角度單位向左轉動。參數:一個數字(integer or float))。單位默認爲度數,能夠經過degrees()和radians()進行設置。

turtle.left(45)  複製代碼

5.goto() | steps() | setposition():移動到絕對位置,若是筆落下,畫線,不改變方向。參數:x-一個數字或一對數字。y-一個數字或None。

turtle.setpos(60,30)#60.00,30.00)複製代碼

6.setx():設置第一個座標的值即X方向。參數:一個數字(integer or float))。

turtle.setx(10)#(10.00,0.00)複製代碼

7.sety():設置第二個座標的值即Y方向。參數:一個數字(integer or float))。

turtle.sety(10)#(0.00,10.00)複製代碼

8.setheading() | seth(): 將方向設置爲to_angle.就是東西南北方向。具體以下:標準模式:0 - 東 90 - 北 180 - 西 270 - 南 標誌模式 0- 北 90- 東 180- 南 270 - 西

turtle.setheading(90)複製代碼

9.home() : 移動到原點 - 座標(0,0):並將其標題設置爲其起始方向(取決於模式)。

turtle.home()# (0.00,0.00)複製代碼

10.circle():繪製一個給定半徑的圓。參數:radius-一個數字(半徑,若是值爲正則逆時針,負數爲順時針),extent-一個數字()steps- 執行的步數。

turtle.circle(120,180,5)複製代碼

11.dot() :用顏色畫出一個直徑大小的圓點。參數:size-一個大於1的整數,可None。默認用的是pensize+4和2*pensize的最大值,color-顏色值

turtle.dot(20, "blue")複製代碼

12.stamp():將當前位置上的形狀複製到畫布上返回stamp_id.能夠調用,能夠刪除。

turtle.stamp()複製代碼

13.clearstamp():刪除stamp()返回來的值。參數:stampid。
14.clearstamps():刪除所有stamp()的值。參數:stampid。

15.undo():撤銷最後的動做。

16.speed():將速度設置爲0..10範圍內整數。若是沒有參數,則返回當前速度。若是大於10或

者小於0.5,則速度設置爲0 。

  • 最快」:0 :直接成圖,沒有動畫效果
  • 「快」:10:大概一秒
  • 「正常」:6:
  • 「慢」:3
  • 「最慢」:1

17:position() | pos(): 返回當前的位置。

turtle.pos()
# (0.00,0.00)複製代碼

18.towards(): 返回當前位置同指定位置之間的角度。參數:x-一個數字或一對數字或一個實

例的向量,y-若是x是數字,則爲數字,不然爲None。

turtle.goto(10,10)
tw = turtle.towards(0,0)
print(tw)
# 225複製代碼

19.xcor():返回x座標。 ycor():返回y座標。

20.heading(): 返回當前的方向值。

21.distance():返回x,y兩個點的直線距離

22.degrees():設置一整圈的度數。默認是360度。

23.radians():將角度測量單位設置爲弧度。至關於 degrees(2*math.pi)

24.pendown() | pd() | down():放下筆,移動的時候繪圖。

25.penup() | pu() | up():將提起筆,移動時無圖。

26.pensize():設置線條的粗細。參數:width-一個正數

27.pen():使用鍵值對設置筆的屬性:

「shown」: True/False

「pendown」: True/False

「pencolor」: 顏色字符串或者顏色值

「fillcolor」: 顏色字符串或者顏色值

「pensize」: 正數 「speed」: 速度範圍爲0..10的數字

「resizemode」: 「auto」 or 「user」 or 「noresize」

「stretchfactor」: (positive number, positive number)

「outline」: 正數

「tilt」: 正數

28.isdown():若是筆中止返回True,反之False

29.pencolor():設置筆的顏色。

30.fillcolor():筆的填充色。

31.color():同時設置pencolor和fillcolor

32.filling():返回fillstate狀態,若是填充則返回True,反之False。

33.begin_fill():在繪製要填充的形狀前調用。固然在調用完還須要end_fill()。

34.reset():重置,將屏幕中的圖紙刪除,從新居中並將全部變量設置爲默認值。

35.clear():刪除圖紙。對屬性不作操做。

36.write():寫文本。參數:arg-要寫入的對象。move-是否移動。align-對齊方式:left,right,center。font-字體。fontname,fontsize,fonttype。

37.ideturtle() | ht() :刪隱藏烏龜的形狀,在作複雜繪圖的時候隱藏的時候有利於提升繪圖速度。

38.showturtle() | st():顯示烏龜的形狀。


39.isvisible():烏龜是否可見。

若是可見返回True,反之則False。 40.shape():設置烏龜的圖形形狀,取值:「arrow」, 「turtle」, 「circle」, 「square」, 「triangle」, 「classic」 41.isvisible():烏龜是否可見。若是可見返回True,反之則False。

42.resizemode():參數:rmode取值:"auto","user","noresize".

43.shapesize() | turtlesize() : 返回筆的屬性。

44.shearfactor(): 設置或者返回但錢的剪切因子。

45.tilt():旋轉由turtle shape角度從當前的傾斜角度。

46.settiltangle():不管當前的傾斜角度如何,旋轉烏龜指向 angle 指定的方向。參數:angle -數字。已棄用

47.tiltangle():設置或者返回當前的傾斜角度。參數:angle - 數字

48.shapetransform():設置或返回烏龜的形狀的當前轉換矩陣。

49.get_shapepoly():返回當前形狀的座標。

50.onclick():鼠標點擊事件。

參數:fun-一個帶有兩個參數的函數,這些參數將與畫布上單擊點的座標一個調用。num-鼠標按鈕的數量,默認爲1(左鍵)。add- True的時候將添加新的綁定。不然替換之前的綁定。

51.onrelease():鼠標釋放事件。參數同點擊事件。

52.ondrag():鼠標移動事件。參數同點擊事件。

53.begin_poly(): 開始記錄多邊形的頂點。

54.end_poly():中止記錄多邊形的頂點。

55.get_poly():返回最後記錄的多邊形。

56.clone():建立並返回具備相同位置等等屬性的烏龜克隆。

57.getturtle() | getpen() :獲取trutle對象自己。

58.getscreen():返回正在繪製的對象。

59.setundobuffer(): 設置或禁用中斷器。

參數: size-整數。若是大小是None,則禁用緩衝區。 60.undobufferentries():返回undobuffer中的條目數。

61.bgcolor():設置或者返回當前的TurtleScreen的背景顏色。

62.bgpic():設置背景圖片。參數: picname-文件名。

62.delay(): 設置或返回以毫秒爲單位的繪製延遲,延遲越大,繪圖越慢。

63.ontimer():定時器。

64.mainloop() | done() :開始循環 。

65.textinput() | numinput():彈出一個輸入字符串和數字的窗口。

66.mode(): 三種方式:「standard」, 「logo」 or 「world」

案例:時鐘


# coding=utf-8
 
import turtle
from datetime import *
 
 
# 擡起畫筆,向前運動一段距離放下
def Skip(step):
    turtle.penup()
    turtle.forward(step)
    turtle.pendown()
 
 
def mkHand(name, length):
    # 註冊Turtle形狀,創建錶針Turtle
    turtle.reset()
    Skip(-length * 0.1)
    # 開始記錄多邊形的頂點。當前的烏龜位置是多邊形的第一個頂點。
    turtle.begin_poly()
    turtle.forward(length * 1.1)
    # 中止記錄多邊形的頂點。當前的烏龜位置是多邊形的最後一個頂點。將與第一個頂點相連。
    turtle.end_poly()
    # 返回最後記錄的多邊形。
    handForm = turtle.get_poly()
    turtle.register_shape(name, handForm)
 
 
def Init():
    global secHand, minHand, hurHand, printer
    # 重置Turtle指向北
    turtle.mode("logo")
    # 創建三個錶針Turtle並初始化
    mkHand("secHand", 135)
    mkHand("minHand", 125)
    mkHand("hurHand", 90)
    secHand = turtle.Turtle()
    secHand.shape("secHand")
    minHand = turtle.Turtle()
    minHand.shape("minHand")
    hurHand = turtle.Turtle()
    hurHand.shape("hurHand")
 
    for hand in secHand, minHand, hurHand:
        hand.shapesize(1, 1, 3)
        hand.speed(0)
 
        # 創建輸出文字Turtle
    printer = turtle.Turtle()
 
    # 隱藏畫筆的turtle形狀
    printer.hideturtle()
    printer.penup()
 
 
def SetupClock(radius):
    # 創建表的外框
    turtle.reset()
    turtle.pensize(7)
    turtle.pencolor("#ff5500")
    turtle.fillcolor("green")
 
    for i in range(60):
        Skip(radius)
        if i % 5 == 0:
            turtle.forward(20)
            Skip(-radius - 20)
 
            Skip(radius + 20)
            if i == 0:
                turtle.write(int(12), align="center", font=("Courier", 14, "bold"))
            elif i == 30:
                Skip(25)
                turtle.write(int(i / 5), align="center", font=("Courier", 14, "bold"))
                Skip(-25)
            elif (i == 25 or i == 35):
                Skip(20)
                turtle.write(int(i / 5), align="center", font=("Courier", 14, "bold"))
                Skip(-20)
            else:
                turtle.write(int(i / 5), align="center", font=("Courier", 14, "bold"))
            Skip(-radius - 20)
        else:
            turtle.dot(5)
            Skip(-radius)
        turtle.right(6)
 
 
def Week(t):
    week = ["星期一", "星期二", "星期三",
            "星期四", "星期五", "星期六", "星期日"]
    return week[t.weekday()]
 
 
def Date(t):
    y = t.year
    m = t.month
    d = t.day
    return "%s-%d-%d" % (y, m, d)
 
 
def Tick():
    # 繪製錶針的動態顯示
    t = datetime.today()
    second = t.second + t.microsecond * 0.000001
    minute = t.minute + second / 60.0
    hour = t.hour + minute / 60.0
    secHand.setheading(6 * second)
    minHand.setheading(6 * minute)
    hurHand.setheading(30 * hour)
 
    turtle.tracer(False)
 
    printer.forward(65)
    printer.write(Week(t), align="center",
                  font=("Courier", 14, "bold"))
    printer.back(130)
    printer.write(Date(t), align="center",
                  font=("Courier", 14, "bold"))
    printer.home()
    turtle.tracer(True)
 
    # 100ms後繼續調用tick
    turtle.ontimer(Tick, 100)
 
 
def main():
    # 打開/關閉龜動畫,併爲更新圖紙設置延遲。
    turtle.tracer(False)
    Init()
    SetupClock(160)
    turtle.tracer(True)
    Tick()
    turtle.mainloop()
 
 
if __name__ == "__main__":
    main()複製代碼


二、一些算法基礎

一、打印九九乘法表

for循環

for i in range(10):
    for j in range(i+1):
        print("%d*%d=%2d "%(i,j,i*j),end="")
    print()複製代碼

while循環

n = 1
while n <= 9:
        m = 1
        while m<= 9:
                print("%d*%d=%2d "%(n,m,n*m), end="")
                m += 1
        print()
        n += 1複製代碼

二、打印圖形

三角形

for i in range(10):
    for j in range(1,i):
        print("*",end="")
    print()

for i in range(10):
    for j in range(10-i):
        print("*",end="")
    print()複製代碼

正方形

for i in range(5):
    for j in range(10):
        print("*",end="")
    print()複製代碼

正三角形

for i in range(1,6):
    for j in range(1,6-i):
        print(" ",end="")
    for k in range(1,i+1):
        print("* ",end="")
    print("")複製代碼

三、請編寫1-100全部數的和。

#for循環
sum = 0
for i in range(1,101):    
    sum += i
print(sum)


#while循環
n = 1
sum = 0while n < 101:    
    sum += n    
    n += 1
print(sum)複製代碼

四、使用冒泡排序對list列表進行排序

list = [1,4,1,34,23,54,34]
def maopao(list):       
    for i in range(len(list)):        
        for j in range(len(list)-1):            
            if list[i] > list [j]:                
                list[j], list[i] = list[i], list[j] #從大到小 
    print(list)複製代碼

五、編寫代碼,實現求100-200裏面全部的素數

sum = 0
for i in range(100,200):    
    flag = True    
    for j in range(2,i):        
        if i % j == 0:            
            flag = False            
            break    
        if(flag):        
            print(i,"是素數")        
            sum += 1
print("一共",sum,"個素數")複製代碼

六、編程用sort進行排序,而後從最後一個元素開始判斷,去除重複數字

a=[1,2,4,2,4,5,7,10,5,5,7,8,9,0,3]
a.sort()
last=a[-1]
for i in range(len(a)-2,-1,-1):    
    if last==a[i]:        
        del a[i]    
    else:
        last=a[i]
print(a)複製代碼

能夠從前面的元素開始判斷去除重複的數字

a = [11, 11, 22, 22, 33, 44, 55, 66, 88, 99]
for i in range(len(a)):    
    for j in range(i + 1 , len(a) - 1):        
        if a[i] == a[j]:            
            del a[j]            
            j -= 1
print(a)複製代碼

七、漢諾塔()

ta1 = [i for i in range(10,0,-1)]
ta2 = []
ta3 = []
n = len(ta1)


def move(n, ta1,ta2,ta3):
    if n == 1:
        ta3.append(ta1.pop())
    else:
        move(n - 1,ta1,ta3,ta2)
        ta3.append(ta1.pop())
        move(n-1,ta2,ta1,ta3)


move(n,ta1,ta2,ta3)
print(ta1)
print(ta3)

複製代碼

八、趣味天然數

掌握使用自定義函數實現水仙花數和徹底數

水仙花數(narcissistic number)中的narcissistic本意是「自我陶醉,自賞的,自戀的」。
在希臘神話中,貌美青年那喀索斯(narcissus)愛上了本身在水中的倒影,他死後化做水仙花,此花
即因之命名。因此,水仙花數也稱爲自戀數,自冪數,本名爲超徹底數字不變數(pluperfect digital invariant, PPDl)
水仙花數,在咱們認識的大概認知,數學概念的自幕數是這樣解釋的。
自冪數是指一個 n 位數,它的每一個位上的數字的 n 次冪之和等於它自己。
n爲1時,自冪數稱爲獨身數。顯然,0,1,2,3,4,5,6,7,8,9都是自冪數。
n爲2時,沒有自冪數。
n爲3時,自冪數稱爲水仙花數,有4個:153,370,371,407;
n爲4時,自冪數稱爲四葉玫瑰數,共有3個:1634,8208,9474;
n爲5時,自冪數稱爲五角星數,共有3個:54748,92727,93084;
n爲6時,自冪數稱爲六合數, 只有1個:548834;
n爲7時,自冪數稱爲北斗七星數, 共有4個:1741725,4210818,9800817,9926315;
n爲8時,自冪數稱爲八仙數, 共有3個:24678050,24678051,88593477;
n爲9時,自冪數稱爲九九重陽數,共有4個:146511208,472335975,534494836,912985153;
n爲10時,自冪數稱爲十全十美數,只有1個:4679307774。複製代碼

話很少說,來代碼:

#若是一個 3 位數等於其各位數字的立方和,則稱這個數爲水仙花數。 
#例如:153 = 1^3 + 5^3 + 3^3,所以 153 就是一個水仙花數。 
 
#方法1:
def flower1(a,b):     # 限制範圍
    for i in range(a,b):        
        sum = 0  #用來存放各個位數的立方和 
        temp = i        
        while temp:            
            sum += (temp%10) ** 3   #累加 
            temp //= 10 # // 取整除 - 向下取接近除數的整數 
        if sum == i:            
            print(i)flower1(10,1000) # 153 370 371 407複製代碼

還能夠先定義一個求冪次方和的函數

import math# 定義一個函數求取列表中的冪次方和
def pow3(list):    
sum = 0    
for i in list:        
    sum += math.pow(int(i),3)    
    return sum複製代碼

# 方法2 依次求取各個位數 def flower(): 
    for i in range(100,1000):        
        a = i // 1000    # 取最高位 
        b = i //100 % 10 # 取百位 
        c = i //10 % 10  # 取十位 
        d = i % 10      # 取末位 
        list = [a,b,c,d]        
        if pow3(list) == i:            
            print('100-1000之內的水仙花數有:%d'%i)
flower()

#100-1000之內的水仙花數有:153
#100-1000之內的水仙花數有:370
#100-1000之內的水仙花數有:371
#100-1000之內的水仙花數有:407複製代碼


# 方法3: 數值轉爲list def flower2(): 
    for i in range(100, 1000):        
        list1 = list(str(i))        
        if pow3(list1) == i:            
            print('100-1000之內的水仙花數有:%d'%i)
flower2()

#100-1000之內的水仙花數有:153
#100-1000之內的水仙花數有:370
#100-1000之內的水仙花數有:371
#100-1000之內的水仙花數有:407複製代碼

徹底數

若是一個數剛好等於它的因子之和,則稱該數爲「徹底數」 。各個小於它的約數(真約數,列出某數的約數,去掉該數自己,剩下的就是它的真約數)的和等於它自己的天然數叫作徹底數(Perfect number),又稱完美數或完備數。

例如:
第一個徹底數是6,它有約數一、二、三、6,除去它自己6外,其他3個數相加,1+2+3=6。
第二個徹底數是28,它有約數一、二、四、七、1四、28,除去它自己28外,其他5個數相加,1+2+4+7+14=28
那麼問題來了:如何用python去求出下一個(大於28的)徹底數?
(求出1000之內全部的徹底數)

方法一

# coding:utf-8
a=range(1,1001)
b=range(1,1001)
result=[]
for i in a:    
    tmp=[]    
for k in b:        
    if k<i:            
        if not i%k:                
            tmp.append(k)            
        else:                
            continue        
    else:            
        break    
    count=0    
    for m in tmp:        
        count=count+m    
    if count==i:        
        result.append(i)    
    else:        
        continue
print result複製代碼
上面的方法中,求tmp這個list中元素的和時,咱們也能夠經過sum函數實現,具體以下:

方法二

# coding:utf-8
a=range(1,1001)
b=range(1,1001)
result=[]
for i in a:    
    tmp=[]    
    for k in b:        
        if k<i:            
            if not i%k:                
                tmp.append(k)            
            else:                
                continue        
        else:            
            break    
    count=sum(tmp)    
    if count==i:        
        result.append(i)    
    else:        
    continue
print result複製代碼
#方法三
#方法三是直接經過遍歷出list a中的元素後,生成一個小於次元素的list,而後取餘
#對於range(1,0) 個人解釋是:range的理解應該是range是先用咱們指定的條件生成一個列表,
而後用for循環取出來(此句出自python核心編程第八章),range(1,0),start=1,stop=0,step=1,
這樣的條件生成的#的列表實際是上空的,即爲False複製代碼
a=range(1,1001)
perfect=[]
for i in a:    
    tmp=[]    
    for k in range(1,i):        
        if not i%k:            
            tmp.append(k)    
    count=sum(tmp)    
    if count==i:        
        perfect.append(i)
print perfect複製代碼
方法四(史上最簡單的方式了)

for i in range(1,1000):  
    s=0  
    for k in range(1,i):    
        if i%k==0:      
            s=s+k  
    if i==s:    
        print i複製代碼

九、最大公約數

掌握結合python循環求解最大公約數

十、浮屠增級

掌握使用枚舉解決浮屠增級問題

十一、千錢百雞

掌握使用枚舉法解決千錢百雞問題

十二、猜數字的小遊戲

# python實現猜數字遊戲,主要用於練習for循環和if else。
# 需求以下:# 一、隨機生成一個1-100之間的數。
# 二、7次猜數字的機會,若是沒有猜正確,遊戲結束。
# 三、輸入字母q,則退出遊戲。

import random
num = random.randint(1,100)
guess_chances = 7
print('您只有7次猜數字的機會哦!') 
for i in range(1,guess_chances + 1):    
    print('這是第'+ str(i) + '次猜數字')    
    guess = input('請輸入數字:')    
    if guess.isdigit():       
        guess = int(guess)       
        if guess < num:           
            print('您輸入的數字過小了,您還有' + str(guess_chances - i)+'次機會,請從新輸入:')
        elif guess > num:           
            print('您輸入的數字太大了,您還有' + str(guess_chances - i)+'次機會,請從新輸入:')
        elif guess == num:          
            print('恭喜您猜對了')           
            break    
        elif guess == 'q':        
            print('退出遊戲!')        
            break    
    else:        
        print('輸入的內容必須爲整數,請從新輸入:')
while (guess_chances - i) == 0:    
    print('您輸入已經超過7次,遊戲結束!')    
    break複製代碼
相關文章
相關標籤/搜索