Python Turtle 3维柱形图冒泡排序

在这里插入图片描述

from turtle import *
from random import *
import time


def bubble_sort(rectangle_list):
    for passnum in range(0, 10 - 1):
        for i in range(0, 10 - passnum - 1, 1):
            if rectangle_list[i].num > rectangle_list[i + 1].num:
                rectangle_list[i].replace(rectangle_list[i + 1])
                time.sleep(0.5)  # 休眠1秒



class Cube():
    def __init__(self, x, y, num, leng=10):
        self.x = x
        self.y = y
        self.num = num
        self.side_len = leng
        self.create_cube()

    def create_side(self):
        fillcolor("#639CD3")
        begin_fill()
        left(170)
        forward(self.side_len)

        right(80)
        forward(20 * self.num)

        right(100)
        forward(self.side_len)

        right(80)
        forward(20 * self.num)
        end_fill()

        setheading(0)  # 恢复向右默认

    def create_top(self):
        fillcolor("#95CEFF")

        penup()
        goto(self.x, self.y + 20 * self.num)
        pendown()

        begin_fill()

        forward(20)

        left(170)
        forward(self.side_len)

        left(10)
        forward(20)

        left(170)
        forward(self.side_len)
        end_fill()
        setheading(0)  # 恢复向右默认

    def create_rectangle(self):
        color("#639CD3")

        penup()
        goto(self.x, self.y)
        pendown()

        fillcolor("#7CB5E6")
        begin_fill()
        for x in range(1, 5):
            if x % 2 == 1:
                n = 20
            else:
                n = 20 * self.num
            forward(n)
            left(90)
        end_fill()

    def create_cube(self):
        tracer(False)
        self.create_rectangle()
        self.create_side()
        self.create_top()
        tracer(True)

    def erase_rectangle(self):
        setheading(0)
        color("white")

        penup()
        goto(self.x, self.y)
        pendown()

        fillcolor("white")
        begin_fill()
        for x in range(1, 5):
            if x % 2 == 1:
                n = 20
            else:
                n = 20 * self.num
            forward(n)
            left(90)
        end_fill()

    def erase_side(self):
        fillcolor("white")
        begin_fill()
        left(170)
        forward(self.side_len)

        right(80)
        forward(20 * self.num)

        right(100)
        forward(self.side_len)

        right(80)
        forward(20 * self.num)
        end_fill()

        setheading(0)  # 恢复向右默认

    def erase_top(self):
        fillcolor("white")

        penup()
        goto(self.x, self.y + 20 * self.num)
        pendown()

        begin_fill()
        forward(20)

        left(170)
        forward(self.side_len)

        left(10)
        forward(20)

        left(170)
        forward(self.side_len)
        end_fill()
        setheading(0)  # 恢复向右默认

    def erase_cube(self):
        tracer(False)
        self.erase_rectangle()
        self.erase_side()
        self.erase_top()
        tracer(True)

    def replace(self, n):
        self.erase_cube()
        n.erase_cube()
        self.num, n.num = n.num, self.num
        self.create_cube()
        n.create_cube()


if __name__ == '__main__':

    hideturtle()

    # Cube(35 * 1, 0, randint(1, 10))

    var = list()
    for i in range(0, 10):
        var.append(Cube(35 * i, 0, randint(1, 10)))

    bubble_sort(var)

    done()

猜你喜欢

转载自blog.csdn.net/magicdoubi/article/details/88843825