Python图形设计
程序员文章站
2022-03-27 12:45:38
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()
- 设计一个花朵。
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