欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Python图形设计

程序员文章站 2022-06-23 11:32:40
Python图形设计1.设计一条蟒蛇。import turtleturtle.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.c...

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 经验分享