Python图形设计

2022-07-26,,

Python图形设计
导言:图形设计真的很有意思,尤其使用python制作一些动态的图片,真的很棒啊!
1.设计一条蟒蛇。

import turtle
turtle.setup(650, 350, 0, 0)
turtle.penup()
turtle.fd(-250)
turtle.pendown()
turtle.pensize(25)
turtle.pencolor("purple")
turtle.seth(-40)

for i in range(4):
    turtle.circle(40, 80)
    turtle.circle(-40, 80)

turtle.circle(40, 80 / 2)
turtle.fd(40)
turtle.circle(16, 180)
turtle.fd(40 * 2 / 3)
turtle.done()

2.设计一个进度条动画。

import time

scale = 50
print("执行开始".center(scale // 2, "-"))
# center()方法,将减号字符填充在执行开始或执行结束的两侧
start = time.perf_counter()  # 确定开始的时间
for i in range(scale + 1):
    a = '*' * i  # 已经经过的部分i
    b = '.' * (scale - i)  # 未经过的部分
    c = (i / scale) * 100  # 输出当时与进度条有关的百分比
    dur = time.perf_counter() - start  # 经过的时间i
    # \r是指在打印输出字符串之前,它能使光标退回到当前行的行首。
    print("\r{:^3.0f}%[{}->{}]{:.2f}s".format(c, a, b, dur), end = '')
    # ^3.0f指输出前三位的整数,“.”后面是指你要保留多少位的小数点。
    time.sleep(0.1)  # 刷新时间
print("\n" + "执行结束".center(scale // 2, '-'))

3.显示当前日期。

import turtle
import time
def drawGap():  # 增加七段数码管之间的线条间隔
    turtle.penup()
    turtle.fd(5)
def drawLine(draw):
    # penup() 抬起画笔
    # pendown() 放下画笔
    drawGap()
    turtle.pendown() if draw else turtle.penup()
    turtle.fd(40)
    drawGap()
    turtle.right(90)
def drawDigit(digit):
    # 根据数字绘制七段数码管
    drawLine(True) if digit in [2, 3, 4, 5, 6, 8, 9] else drawLine(False)
    drawLine(True) if digit in [0, 1, 3, 4, 5, 6, 7, 8, 9] else drawLine(False)
    drawLine(True) if digit in [0, 2, 3, 5, 6, 8, 9] else drawLine(False)
    drawLine(True) if digit in [0, 2, 6, 8] else drawLine(False)
    turtle.left(90)
    drawLine(True) if digit in [0, 4, 5, 6, 8, 9] else drawLine(False)
    drawLine(True) if digit in [0, 2, 3, 5, 6, 7, 8, 9] else drawLine(False)
    drawLine(True) if digit in [0, 1, 2, 3, 4, 7, 8, 9] else drawLine(False)
    turtle.left(180)
    turtle.penup()  # 为绘制后续数字确定位置
    turtle.fd(20)  # 为绘制后续数字确定位置
def drawDate(date):  # 获得要输出的数字
    turtle.pencolor("red")
    for i in date:
        if i == '-':
            turtle.write('年', font = ("Arial", 40, "normal"))
            turtle.pencolor("green")
            turtle.fd(40)
        elif i == '=':
            turtle.write('月', font = ("Arial", 40, "normal"))
        elif i == '+':
            turtle.write('日', font = ("Arial", 40, "normal"))
        else:
            drawDigit(eval(i))  # 通过eval()函数将数字变为整数
def main():
    turtle.setup(800, 350, 200, 200)
    turtle.penup()
    turtle.fd(-300)  # 向左侧 移动300 但是不画
    turtle.pensize(5)  # 设置线条的粗细
    drawDate(time.strftime('%Y-%m=%d+', time.gmtime()))
    # 函数接收以时间元组,
    # 并返回以可读字符串表示的当地时间,格式由参数 format 决定。
    turtle.hideturtle()  # 隐藏画笔的turtle形状
    turtle.done()  # 用来停止画笔绘制,但绘图窗体不会关闭
main()

4.用python对汉诺塔问题求解。

def move(n, a, b, c):
    # n为圆盘数,a代表初始位圆柱,b代表过渡位圆柱,c代表目标位圆柱
    if n == 1:  # 如果当前初始位只剩下一个盘子,则移动到目标位
        print(a, '---->', c)
    else:
        move(n - 1, a, c, b)
        # 将初始的n-1个圆盘通过c圆盘 过渡到b圆盘
        print(a, '---->', c)  # 把a上剩余的一个移到c
        move(n - 1, b, a, c)
        # 之后再把b上的n-1个圆盘通过a移动到c
move(3, 'A', 'B', 'C')

5.绘制5阶(或5阶以上某个值)科勒曲线,从一条直线开始。

import turtle
def koch(size, n):
    if n == 0:
        turtle.fd(size)
    else:
        for angle in [0, 60, -120, 60]:
            turtle.left(angle)
            koch(size / 3, n - 1)
def main():
    turtle.setup(800, 400)
    turtle.penup()
    turtle.goto(-600, 100)
    turtle.pendown()
    turtle.pensize(2)
    level = 5  # 阶数
    koch(500, level)
    turtle.right(120)
    
    turtle.hideturtle()
    turtle.done()
main()

6.绘制5阶(或5阶以上某个值)科勒曲线,从倒置的三角形开始。

import turtle
def koch(size, n):
    if n == 0:
        turtle.fd(size)
    else:
        for angle in [0, 60, -120, 60]:
            turtle.left(angle)
            koch(size / 3, n - 1)
def main():
    turtle.setup(800, 400)
    turtle.penup()
    turtle.goto(-600, 100)
    turtle.pendown()
    turtle.pensize(2)
    level = 5  # 阶数
    koch(500, level)
    turtle.right(120)
    koch(500, level)
    turtle.right(120)
    koch(500, level)
    turtle.hideturtle()
    turtle.done()
    main()

7.自定义栈,实现基本的入栈、出栈操作。

class Stack(object):
    # 初始化栈为空
    def __init__(self):
        self.items = []
    # 判断栈 是否为空,返回布尔值
    def is_empty(self):
        return self.items == []
    # 返回栈顶元素
    def get_top(self):
        return self.items[len(self.items) - 1]
    # 返回栈的大小
    def size(self):
        return len(self.items)
    # 把元素压入栈中
    def push(self, item):
        self.items.append(item)
    # 把栈顶元素弹出
    def pop(self):
        return self.items.pop()
def main():
    my_stack = Stack()
    my_stack.push('s')  # 把h压入栈中
    my_stack.push('j')
    my_stack.push('j')
    print("栈里现在的元素有:", end = ' ')
    for i in range(my_stack.size()):
        print(my_stack.items[i], end = ' ' if i != my_stack.size() - 1 else '\n')
    print("目前栈里的元素有{}个".format(my_stack.size()))  # 看目前栈里有多少元素
    # 下面看pop函数
    print("栈顶的元素为: " + my_stack.get_top())
    my_stack.pop()
    print("现在的栈顶元素为: " + my_stack.get_top())
    # 判断栈是否为空
    if my_stack.is_empty() == 0:
        print("栈不为空")
    print("将 s 弹出")
    my_stack.pop()
    if my_stack.is_empty() == 1:
        print("现在栈已空")
main()

8.自定义队列结构,实现入队、出队操作。

class Queue(object):
    # 初始化栈为空
    def __init__(self):
        self.items = []
    # 判断队列 是否为空,返回布尔值
    def is_empty(self):
        return self.items == []
    # 返回队列的大小
    def size(self):
        return len(self.items)
    # 把元素从队尾压入
    def enqueue(self, item):
        self.items.append(item)
    # 把队首元素弹出
    def dequeue(self):
        return self.items.pop(0)
def main():
    my_queue = Queue()
    my_queue.enqueue('h')  # 将h 从队尾压入队列
    my_queue.enqueue('a')
    print("队列里现在的元素有:", end = ' ')
    for i in range(my_queue.size()):
        print(my_queue.items[i], end = ' ' if i != my_queue.size() - 1 else '\n')
    print("目前队列里的元素有{}个".format(my_queue.size()))  # 看目前队列里有多少元素
    # 下面看pop函数
    print("弹出的元素为: " + my_queue.dequeue())
    print("队列现在有{}个元素".format(my_queue.size()))
    print("现在的队列顶元素为: {}".format(my_queue.items[0]))
    # 判断栈是否为空
    if my_queue.is_empty() == 0:
        print("队列不为空")
    print("将{}弹出".format(my_queue.items[0]))
    my_queue.dequeue()
    if my_queue.is_empty() == 1:
        print("现在队列已空")
main()
  1. 设计一个花朵。
import turtle
def draw_diamond(turt):
	for i in range(1,3):   
		turt.forward(100)
		turt.right(45)
		turt.forward(100)
		turt.right(135)
def  draw_art():
	window = turtle.Screen() #视窗
	window.bgcolor("black") #背景颜色
	brad = turtle.Turtle()  #创建一个“乌龟”对象
	brad.shape("turtle")    #设定画笔图像是乌龟
	brad.color("red")       #设定画笔颜色是红色
	brad.speed("fast")      #画画速度是快
	for i in range(1, 37):  #调用diamond函数36次,即画36个花瓣
		draw_diamond(brad)
		brad.right(10)
	brad.right(90)          #画出枝干
	brad.forward(1000)
	window.exitonclick()
draw_art()

本文地址:https://blog.csdn.net/qq_46143217/article/details/110492634

《Python图形设计.doc》

下载本文的Word格式文档,以方便收藏与打印。