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复制代码
相关文章
相关标签/搜索