Cách vẽ mặt trời cho trăn rùa

Bạn có thể nghĩ rằng mô-đun Python

>>> sky_colour = [
..     [0, 0, 0],
..     [0, 191, 255]
.. ]

>>> type[sky_colour]


>>> sky_colour[0]  # Start colour
[0, 0, 0]
>>> sky_colour[1][2]  # Blue value of end colour
255
8 không hữu ích cho bất cứ điều gì. “Nó chỉ dành cho trẻ em”, là điều mà nhiều người nghĩ về nó. Tuy nhiên, mô-đun này cho phép bạn khám phá và thử nghiệm nhiều lĩnh vực của Python. Trong bài viết này, bạn sẽ viết một hoạt ảnh Python
>>> sky_colour = [
..     [0, 0, 0],
..     [0, 191, 255]
.. ]

>>> type[sky_colour]


>>> sky_colour[0]  # Start colour
[0, 0, 0]
>>> sky_colour[1][2]  # Blue value of end colour
255
8 về cảnh mặt trời mọc bằng cách sử dụng các bộ dữ liệu được đặt tên

Khi bạn hoàn thành bài viết này, bạn sẽ khám phá

  • Cách sử dụng bộ dữ liệu có tên Python
  • Cách thực hiện các thay đổi dần dần về màu sắc và vị trí trong hoạt ảnh

Đừng lo lắng nếu bạn chưa bao giờ sử dụng mô-đun

>>> sky_colour = [
..     [0, 0, 0],
..     [0, 191, 255]
.. ]

>>> type[sky_colour]


>>> sky_colour[0]  # Start colour
[0, 0, 0]
>>> sky_colour[1][2]  # Blue value of end colour
255
8 của Python. Tôi sẽ giải thích những gì bạn cần để viết hoạt hình Python
>>> sky_colour = [
..     [0, 0, 0],
..     [0, 191, 255]
.. ]

>>> type[sky_colour]


>>> sky_colour[0]  # Start colour
[0, 0, 0]
>>> sky_colour[1][2]  # Blue value of end colour
255
8 này

Tôi cho rằng bạn đã quen với việc xác định hàm và cấu trúc dữ liệu tích hợp sẵn của Python. Nếu bạn cần tìm hiểu thêm về những chủ đề này hoặc chỉ cần làm mới bộ nhớ của mình, bạn có thể đọc Power-up Your Coding. Tạo các hàm và dữ liệu, kiểu dữ liệu và cấu trúc dữ liệu của riêng bạn trong cuốn sách viết mã Python

Lập kế hoạch Hoạt hình rùa Python mặt trời mọc

Hãy xem các bước cần thiết để viết hoạt ảnh Python

>>> sky_colour = [
..     [0, 0, 0],
..     [0, 191, 255]
.. ]

>>> type[sky_colour]


>>> sky_colour[0]  # Start colour
[0, 0, 0]
>>> sky_colour[1][2]  # Blue value of end colour
255
8 này

  • Bạn sẽ cần viết các hàm để vẽ các ngôi sao, bông hoa và mặt trời. Màu sắc sẽ cần phải thay đổi. Và trong trường hợp của mặt trời, vị trí của nó cũng sẽ cần phải thay đổi
  • Bạn sẽ cần tính xem cần thay đổi bao nhiêu màu sắc của các mục trong mỗi khung. Bạn cũng sẽ cần tính xem mặt trời sẽ di chuyển bao nhiêu trong mỗi khung hình
  • Cuối cùng, bạn sẽ cần viết vòng lặp để chạy hoạt ảnh

Bạn sẽ xử lý rất nhiều màu sắc trong suốt hoạt hình. Bạn cần xác định màu bắt đầu và màu kết thúc cho từng mục trong bản vẽ của mình. Mỗi màu được tạo thành từ ba thành phần. đỏ, xanh lá cây và xanh dương

Điều này có nghĩa là bạn sẽ bắt đầu với sáu giá trị cho mỗi mục trong bản vẽ của mình. ba để thể hiện màu bắt đầu và ba để thể hiện màu cuối cùng. Bạn cũng cần thay đổi các thành phần màu đỏ, xanh lá cây và xanh lam của từng mục trong mỗi khung của hoạt ảnh

Trong phần tiếp theo, bạn sẽ xem những cấu trúc dữ liệu nào bạn có thể sử dụng để giải quyết các yêu cầu này

Sử dụng các bộ dữ liệu được đặt tên Python

Hãy bắt đầu bằng cách nhìn vào màu sắc. Bạn thường thấy các màu được biểu thị bằng ba giá trị cho biết màu đó được tạo thành từ bao nhiêu màu đỏ, lục và lam. Đây là mô hình màu RGB. Bạn sẽ thường thấy đây là các số trong phạm vi từ

>>> from collections import namedtuple

>>> Colour = namedtuple["Colour", "red, green, blue"]

>>> issubclass[Colour, tuple]
True
>>> Colour._fields
['red', 'green', 'blue']
3 đến
>>> from collections import namedtuple

>>> Colour = namedtuple["Colour", "red, green, blue"]

>>> issubclass[Colour, tuple]
True
>>> Colour._fields
['red', 'green', 'blue']
4 vì số này đại diện cho màu
>>> from collections import namedtuple

>>> Colour = namedtuple["Colour", "red, green, blue"]

>>> issubclass[Colour, tuple]
True
>>> Colour._fields
['red', 'green', 'blue']
5-bit. Nếu mỗi thành phần được đại diện bởi
>>> from collections import namedtuple

>>> Colour = namedtuple["Colour", "red, green, blue"]

>>> issubclass[Colour, tuple]
True
>>> Colour._fields
['red', 'green', 'blue']
5 bit, thì sẽ có 2^8 giá trị, đó là
>>> from collections import namedtuple

>>> Colour = namedtuple["Colour", "red, green, blue"]

>>> issubclass[Colour, tuple]
True
>>> Colour._fields
['red', 'green', 'blue']
7.

Do đó, màu trắng được đại diện bởi

>>> from collections import namedtuple

>>> Colour = namedtuple["Colour", "red, green, blue"]

>>> issubclass[Colour, tuple]
True
>>> Colour._fields
['red', 'green', 'blue']
8 vì nó bao gồm lượng màu đỏ, lục và lam tối đa. Màu đen được đại diện bởi
>>> from collections import namedtuple

>>> Colour = namedtuple["Colour", "red, green, blue"]

>>> issubclass[Colour, tuple]
True
>>> Colour._fields
['red', 'green', 'blue']
9. Các kết hợp giá trị RGB khác đại diện cho các màu khác

Bạn có thể biểu thị một màu trong Python bằng cách lưu trữ ba giá trị RGB trong danh sách. Tuy nhiên, thay vào đó, bạn sẽ thường thấy các màu được định nghĩa là các bộ. Các bộ dữ liệu phù hợp hơn cho việc này vì chúng không thay đổi. Một màu sẽ luôn có ba giá trị và các giá trị RGB sẽ không thay đổi đối với màu đó

>>> sky_colour = [
..     [0, 0, 0],
..     [0, 191, 255]
.. ]

>>> type[sky_colour]


>>> sky_colour[0]  # Start colour
[0, 0, 0]
>>> sky_colour[1][2]  # Blue value of end colour
255
2

Biến

>>> sky_colour = [
..     [0, 0, 0],
..     [0, 191, 255]
.. ]

>>> type[sky_colour]


>>> sky_colour[0]  # Start colour
[0, 0, 0]
>>> sky_colour[1][2]  # Blue value of end colour
255
30 là một bộ chứa các giá trị RGB. Điều này thể hiện màu xanh nhạt mà bạn sẽ sử dụng làm màu bầu trời trong hoạt ảnh mặt trời mọc

Bạn sẽ cần lưu trữ hai màu cho mỗi phần của bản vẽ của mình

  • Màu đầu tiên tương ứng với phần bắt đầu của hoạt ảnh
  • Màu thứ hai tương ứng với phần cuối của hoạt ảnh

Bạn có thể tạo một bộ dữ liệu khác cho việc này

>>> sky_colour = [
..     [0, 0, 0],
..     [0, 191, 255]
.. ]

>>> type[sky_colour]


>>> sky_colour[0]  # Start colour
[0, 0, 0]
>>> sky_colour[1][2]  # Blue value of end colour
255

Biến

>>> sky_colour = [
..     [0, 0, 0],
..     [0, 191, 255]
.. ]

>>> type[sky_colour]


>>> sky_colour[0]  # Start colour
[0, 0, 0]
>>> sky_colour[1][2]  # Blue value of end colour
255
30 là một bộ
>>> sky_colour = [
..     [0, 0, 0],
..     [0, 191, 255]
.. ]

>>> type[sky_colour]


>>> sky_colour[0]  # Start colour
[0, 0, 0]
>>> sky_colour[1][2]  # Blue value of end colour
255
32. Đó là một tuple có hai mục. Mỗi một trong những mục đó là một bộ
>>> sky_colour = [
..     [0, 0, 0],
..     [0, 191, 255]
.. ]

>>> type[sky_colour]


>>> sky_colour[0]  # Start colour
[0, 0, 0]
>>> sky_colour[1][2]  # Blue value of end colour
255
33 với các giá trị RGB

Bạn có thể truy cập màu khi bắt đầu hoạt ảnh bằng cách lập chỉ mục.

>>> sky_colour = [
..     [0, 0, 0],
..     [0, 191, 255]
.. ]

>>> type[sky_colour]


>>> sky_colour[0]  # Start colour
[0, 0, 0]
>>> sky_colour[1][2]  # Blue value of end colour
255
34. Bạn cũng có thể đi sâu hơn vào phần lồng nhau, ví dụ
>>> sky_colour = [
..     [0, 0, 0],
..     [0, 191, 255]
.. ]

>>> type[sky_colour]


>>> sky_colour[0]  # Start colour
[0, 0, 0]
>>> sky_colour[1][2]  # Blue value of end colour
255
35 là giá trị màu xanh lam của màu ở cuối hoạt ảnh

Điều này là hoàn toàn tốt. Tuy nhiên, việc sử dụng các chỉ mục có thể gây nhầm lẫn và dẫn đến lỗi trong mã vì bạn sẽ cần theo dõi xem mỗi chỉ mục đại diện cho điều gì

Bộ dữ liệu được đặt tên

Thay vào đó, bạn có thể sử dụng các bộ dữ liệu được đặt tên. Bạn có thể tìm thấy các bộ dữ liệu được đặt tên của Python trong mô-đun

>>> sky_colour = [
..     [0, 0, 0],
..     [0, 191, 255]
.. ]

>>> type[sky_colour]


>>> sky_colour[0]  # Start colour
[0, 0, 0]
>>> sky_colour[1][2]  # Blue value of end colour
255
36. Hãy xem cách bạn có thể tạo một bộ được đặt tên để biểu thị màu

>>> from collections import namedtuple

>>> Colour = namedtuple["Colour", "red, green, blue"]

>>> issubclass[Colour, tuple]
True
>>> Colour._fields
['red', 'green', 'blue']

Bạn tạo một lớp có tên là

>>> sky_colour = [
..     [0, 0, 0],
..     [0, 191, 255]
.. ]

>>> type[sky_colour]


>>> sky_colour[0]  # Start colour
[0, 0, 0]
>>> sky_colour[1][2]  # Blue value of end colour
255
37, là lớp con của
>>> sky_colour = [
..     [0, 0, 0],
..     [0, 191, 255]
.. ]

>>> type[sky_colour]


>>> sky_colour[0]  # Start colour
[0, 0, 0]
>>> sky_colour[1][2]  # Blue value of end colour
255
38

>>> sky_colour = [
..     [0, 0, 0],
..     [0, 191, 255]
.. ]

>>> type[sky_colour]


>>> sky_colour[0]  # Start colour
[0, 0, 0]
>>> sky_colour[1][2]  # Blue value of end colour
255
37 có ba trường mà bạn đặt trong đối số thứ hai khi bạn gọi
>>> sky_colour = [
..     [0, 0, 0],
..     [0, 191, 255]
.. ]

>>> type[sky_colour]


>>> sky_colour[0]  # Start colour
[0, 0, 0]
>>> sky_colour[1][2]  # Blue value of end colour
255
50

Bây giờ bạn có thể xác định

>>> sky_colour = [
..     [0, 0, 0],
..     [0, 191, 255]
.. ]

>>> type[sky_colour]


>>> sky_colour[0]  # Start colour
[0, 0, 0]
>>> sky_colour[1][2]  # Blue value of end colour
255
30 như bạn đã làm trước đó. Bây giờ, bạn sẽ bắt đầu bằng cách chỉ xác định màu kết thúc. Tuy nhiên, lần này, bạn có thể sử dụng lớp tuple có tên là
>>> sky_colour = [
..     [0, 0, 0],
..     [0, 191, 255]
.. ]

>>> type[sky_colour]


>>> sky_colour[0]  # Start colour
[0, 0, 0]
>>> sky_colour[1][2]  # Blue value of end colour
255
37 thay vì một tuple tiêu chuẩn

>>> sky_colour = [
..     [0, 0, 0],
..     [0, 191, 255]
.. ]

>>> type[sky_colour]


>>> sky_colour[0]  # Start colour
[0, 0, 0]
>>> sky_colour[1][2]  # Blue value of end colour
255
3

>>> sky_colour = [
..     [0, 0, 0],
..     [0, 191, 255]
.. ]

>>> type[sky_colour]


>>> sky_colour[0]  # Start colour
[0, 0, 0]
>>> sky_colour[1][2]  # Blue value of end colour
255
30 vẫn có thể được truy cập bằng cách sử dụng các chỉ mục giống như một bộ dữ liệu tiêu chuẩn. Nhưng bạn cũng có thể truy cập các mục bằng cách sử dụng tên trường, chẳng hạn như
>>> sky_colour = [
..     [0, 0, 0],
..     [0, 191, 255]
.. ]

>>> type[sky_colour]


>>> sky_colour[0]  # Start colour
[0, 0, 0]
>>> sky_colour[1][2]  # Blue value of end colour
255
54. Điều này có thể làm cho mã của bạn dễ đọc hơn

Bạn có thể tạo một bộ có tên khác để xác định điểm bắt đầu và điểm kết thúc của một phạm vi

>>> sky_colour = [
..     [0, 0, 0],
..     [0, 191, 255]
.. ]

>>> type[sky_colour]


>>> sky_colour[0]  # Start colour
[0, 0, 0]
>>> sky_colour[1][2]  # Blue value of end colour
255
5

Lần này, bạn định nghĩa

>>> sky_colour = [
..     [0, 0, 0],
..     [0, 191, 255]
.. ]

>>> type[sky_colour]


>>> sky_colour[0]  # Start colour
[0, 0, 0]
>>> sky_colour[1][2]  # Blue value of end colour
255
30 là một bộ dữ liệu có tên là
>>> sky_colour = [
..     [0, 0, 0],
..     [0, 191, 255]
.. ]

>>> type[sky_colour]


>>> sky_colour[0]  # Start colour
[0, 0, 0]
>>> sky_colour[1][2]  # Blue value of end colour
255
56. Bộ dữ liệu được đặt tên này chứa hai bộ dữ liệu được đặt tên
>>> sky_colour = [
..     [0, 0, 0],
..     [0, 191, 255]
.. ]

>>> type[sky_colour]


>>> sky_colour[0]  # Start colour
[0, 0, 0]
>>> sky_colour[1][2]  # Blue value of end colour
255
37

Bây giờ, bạn có thể truy cập giá trị màu xanh lam của màu cuối bằng cách sử dụng

>>> sky_colour = [
..     [0, 0, 0],
..     [0, 191, 255]
.. ]

>>> type[sky_colour]


>>> sky_colour[0]  # Start colour
[0, 0, 0]
>>> sky_colour[1][2]  # Blue value of end colour
255
35 hoặc
>>> sky_colour = [
..     [0, 0, 0],
..     [0, 191, 255]
.. ]

>>> type[sky_colour]


>>> sky_colour[0]  # Start colour
[0, 0, 0]
>>> sky_colour[1][2]  # Blue value of end colour
255
59. Truy cập các giá trị bằng cách sử dụng tên trường trong trường hợp này dễ đọc hơn và ít có khả năng dẫn đến lỗi hơn

Bạn có thể nghĩ rằng một bộ dữ liệu được đặt tên tương tự như một từ điển. Tuy nhiên, một bộ dữ liệu được đặt tên là bất biến, giống như các bộ dữ liệu tiêu chuẩn. Tuy nhiên, từ điển có thể thay đổi

Bạn sẽ đọc thêm về sự khác biệt giữa các bộ dữ liệu được đặt tên và từ điển sau trong bài viết này

Để tìm hiểu thêm về các bộ dữ liệu được đặt tên, bạn có thể đọc bài viết Real Python Viết mã Pythonic và sạch với têntuple

Thiết lập hoạt hình Rùa Python mặt trời mọc

Bạn có thể bắt đầu thiết lập hoạt ảnh của

>>> sky_colour = [
..     [0, 0, 0],
..     [0, 191, 255]
.. ]

>>> type[sky_colour]


>>> sky_colour[0]  # Start colour
[0, 0, 0]
>>> sky_colour[1][2]  # Blue value of end colour
255
8 bằng cách tạo một cửa sổ. Bạn có thể tạo tập lệnh có tên là
>>> sky_colour = [
..     [0, 0, 0],
..     [0, 191, 255]
.. ]

>>> type[sky_colour]


>>> sky_colour[0]  # Start colour
[0, 0, 0]
>>> sky_colour[1][2]  # Blue value of end colour
255
81

>>> sky_colour = [
..     [0, 0, 0],
..     [0, 191, 255]
.. ]

>>> type[sky_colour]


>>> sky_colour[0]  # Start colour
[0, 0, 0]
>>> sky_colour[1][2]  # Blue value of end colour
255
8

Biến

>>> sky_colour = [
..     [0, 0, 0],
..     [0, 191, 255]
.. ]

>>> type[sky_colour]


>>> sky_colour[0]  # Start colour
[0, 0, 0]
>>> sky_colour[1][2]  # Blue value of end colour
255
82 đại diện cho đối tượng màn hình với chiều rộng và chiều cao do bạn chọn. Bạn cũng có thể thêm tiêu đề vào cửa sổ

Bạn cũng gọi

>>> sky_colour = [
..     [0, 0, 0],
..     [0, 191, 255]
.. ]

>>> type[sky_colour]


>>> sky_colour[0]  # Start colour
[0, 0, 0]
>>> sky_colour[1][2]  # Blue value of end colour
255
83, cho phép bạn kiểm soát thời điểm mọi thứ được hiển thị trong hoạt ảnh của bạn. Khi bạn đặt trình theo dõi thành
>>> from collections import namedtuple

>>> Colour = namedtuple["Colour", "red, green, blue"]

>>> issubclass[Colour, tuple]
True
>>> Colour._fields
['red', 'green', 'blue']
3, bạn sẽ cần gọi
>>> sky_colour = [
..     [0, 0, 0],
..     [0, 191, 255]
.. ]

>>> type[sky_colour]


>>> sky_colour[0]  # Start colour
[0, 0, 0]
>>> sky_colour[1][2]  # Blue value of end colour
255
85 để cập nhật bản vẽ trên cửa sổ. Hiện tại không có gì được rút ra, vì vậy chưa có cuộc gọi nào tới
>>> sky_colour = [
..     [0, 0, 0],
..     [0, 191, 255]
.. ]

>>> type[sky_colour]


>>> sky_colour[0]  # Start colour
[0, 0, 0]
>>> sky_colour[1][2]  # Blue value of end colour
255
85

Khi bạn chạy mã này, bạn sẽ thấy một cửa sổ trống được hiển thị. Cuộc gọi

>>> sky_colour = [
..     [0, 0, 0],
..     [0, 191, 255]
.. ]

>>> type[sky_colour]


>>> sky_colour[0]  # Start colour
[0, 0, 0]
>>> sky_colour[1][2]  # Blue value of end colour
255
87 ngăn chương trình kết thúc

Ghi chú. Nếu bạn đang sử dụng trình soạn thảo dựa trên web để viết mã bằng Python, bạn có thể thấy rằng lỗi

>>> sky_colour = [
..     [0, 0, 0],
..     [0, 191, 255]
.. ]

>>> type[sky_colour]


>>> sky_colour[0]  # Start colour
[0, 0, 0]
>>> sky_colour[1][2]  # Blue value of end colour
255
88 và
>>> sky_colour = [
..     [0, 0, 0],
..     [0, 191, 255]
.. ]

>>> type[sky_colour]


>>> sky_colour[0]  # Start colour
[0, 0, 0]
>>> sky_colour[1][2]  # Blue value of end colour
255
89 gây ra. Những phương pháp này không có trong phiên bản
>>> sky_colour = [
..     [0, 0, 0],
..     [0, 191, 255]
.. ]

>>> type[sky_colour]


>>> sky_colour[0]  # Start colour
[0, 0, 0]
>>> sky_colour[1][2]  # Blue value of end colour
255
8 được sử dụng bởi hầu hết các biên tập viên trực tuyến

Thêm các lớp Tuple được đặt tên

Trong phần trước giới thiệu các bộ dữ liệu được đặt tên, bạn đã tạo các lớp bộ dữ liệu được đặt tên là

>>> sky_colour = [
..     [0, 0, 0],
..     [0, 191, 255]
.. ]

>>> type[sky_colour]


>>> sky_colour[0]  # Start colour
[0, 0, 0]
>>> sky_colour[1][2]  # Blue value of end colour
255
37 và
>>> sky_colour = [
..     [0, 0, 0],
..     [0, 191, 255]
.. ]

>>> type[sky_colour]


>>> sky_colour[0]  # Start colour
[0, 0, 0]
>>> sky_colour[1][2]  # Blue value of end colour
255
56. Bạn có thể sử dụng chúng trong mã hoạt hình

>>> from collections import namedtuple

>>> Colour = namedtuple["Colour", "red, green, blue"]

>>> issubclass[Colour, tuple]
True
>>> Colour._fields
['red', 'green', 'blue']
1

Có một sự khác biệt trong kịch bản này. Các giá trị màu được chia cho

>>> from collections import namedtuple

>>> Colour = namedtuple["Colour", "red, green, blue"]

>>> issubclass[Colour, tuple]
True
>>> Colour._fields
['red', 'green', 'blue']
4. Chế độ màu mặc định trong mô-đun
>>> sky_colour = [
..     [0, 0, 0],
..     [0, 191, 255]
.. ]

>>> type[sky_colour]


>>> sky_colour[0]  # Start colour
[0, 0, 0]
>>> sky_colour[1][2]  # Blue value of end colour
255
8 biểu thị màu dưới dạng số float trong phạm vi từ
>>> from collections import namedtuple

>>> Colour = namedtuple["Colour", "red, green, blue"]

>>> issubclass[Colour, tuple]
True
>>> Colour._fields
['red', 'green', 'blue']
3 đến
>>> from collections import namedtuple

>>> Colour = namedtuple["Colour", "red, green, blue"]

>>> issubclass[Colour, tuple]
True
>>> Colour._fields
['red', 'green', 'blue']
16 thay vì số nguyên trong phạm vi
>>> from collections import namedtuple

>>> Colour = namedtuple["Colour", "red, green, blue"]

>>> issubclass[Colour, tuple]
True
>>> Colour._fields
['red', 'green', 'blue']
3 đến
>>> from collections import namedtuple

>>> Colour = namedtuple["Colour", "red, green, blue"]

>>> issubclass[Colour, tuple]
True
>>> Colour._fields
['red', 'green', 'blue']
4

Bạn cũng gọi

>>> from collections import namedtuple

>>> Colour = namedtuple["Colour", "red, green, blue"]

>>> issubclass[Colour, tuple]
True
>>> Colour._fields
['red', 'green', 'blue']
19 để thay đổi màu nền. Đầu ra bây giờ là một cửa sổ có nền đen vì
>>> from collections import namedtuple

>>> Colour = namedtuple["Colour", "red, green, blue"]

>>> issubclass[Colour, tuple]
True
>>> Colour._fields
['red', 'green', 'blue']
90 có màu đen. Đây là màu đầu tiên trong bộ dữ liệu có tên
>>> sky_colour = [
..     [0, 0, 0],
..     [0, 191, 255]
.. ]

>>> type[sky_colour]


>>> sky_colour[0]  # Start colour
[0, 0, 0]
>>> sky_colour[1][2]  # Blue value of end colour
255
30

Ghi chú. Nếu bạn đang sử dụng trình chỉnh sửa dựa trên web để viết mã bằng Python, bạn nên thêm

>>> from collections import namedtuple

>>> Colour = namedtuple["Colour", "red, green, blue"]

>>> issubclass[Colour, tuple]
True
>>> Colour._fields
['red', 'green', 'blue']
92 để đặt chế độ này làm chế độ mặc định

Tính toán sự thay đổi màu sắc cần thiết trong mỗi khung hình hoạt hình

Để tạo hoạt ảnh, bạn sẽ cần một vòng lặp. Mỗi lần lặp của vòng lặp đại diện cho một khung. Bạn có thể kiểm soát hoạt ảnh của mình dựa trên thời gian. Tuy nhiên, tôi sẽ chọn một lộ trình đơn giản hơn cho bài viết này và đặt thời lượng lặp lại dựa trên số lượng khung hình thay vì thời gian

Bạn có thể tạo một biến có tên là

>>> from collections import namedtuple

>>> Colour = namedtuple["Colour", "red, green, blue"]

>>> issubclass[Colour, tuple]
True
>>> Colour._fields
['red', 'green', 'blue']
93 để xác định số lượng khung hình mà bạn muốn hoạt ảnh của mình có. Bạn cũng có thể xác định một hàm để tính toán mức độ bạn sẽ cần thay đổi màu trong mỗi khung hình động

>>> from collections import namedtuple

>>> Colour = namedtuple["Colour", "red, green, blue"]

>>> issubclass[Colour, tuple]
True
>>> Colour._fields
['red', 'green', 'blue']
9

Hàm

>>> from collections import namedtuple

>>> Colour = namedtuple["Colour", "red, green, blue"]

>>> issubclass[Colour, tuple]
True
>>> Colour._fields
['red', 'green', 'blue']
94 có ba tham số

  • >>> from collections import namedtuple
    
    >>> Colour = namedtuple["Colour", "red, green, blue"]
    
    >>> issubclass[Colour, tuple]
    True
    >>> Colour._fields
    ['red', 'green', 'blue']
    95 là màu khi bắt đầu hoạt ảnh
  • >>> from collections import namedtuple
    
    >>> Colour = namedtuple["Colour", "red, green, blue"]
    
    >>> issubclass[Colour, tuple]
    True
    >>> Colour._fields
    ['red', 'green', 'blue']
    96 là màu ở cuối hoạt ảnh
  • >>> from collections import namedtuple
    
    >>> Colour = namedtuple["Colour", "red, green, blue"]
    
    >>> issubclass[Colour, tuple]
    True
    >>> Colour._fields
    ['red', 'green', 'blue']
    97 là số bước trong hoạt hình

Bạn sử dụng gợi ý kiểu để làm cho mã dễ đọc hơn và làm rõ rằng

>>> from collections import namedtuple

>>> Colour = namedtuple["Colour", "red, green, blue"]

>>> issubclass[Colour, tuple]
True
>>> Colour._fields
['red', 'green', 'blue']
95 và
>>> from collections import namedtuple

>>> Colour = namedtuple["Colour", "red, green, blue"]

>>> issubclass[Colour, tuple]
True
>>> Colour._fields
['red', 'green', 'blue']
99 là các đối tượng của lớp
>>> sky_colour = [
..     [0, 0, 0],
..     [0, 191, 255]
.. ]

>>> type[sky_colour]


>>> sky_colour[0]  # Start colour
[0, 0, 0]
>>> sky_colour[1][2]  # Blue value of end colour
255
37. Đây là lớp tuple được đặt tên mà bạn đã tạo

Bạn cần tính toán riêng kích thước bước cần thiết cho các thành phần màu đỏ, xanh lá cây và xanh dương để xác định cách thay đổi màu của từng khung hình một.

Hàm

>>> from collections import namedtuple

>>> Colour = namedtuple["Colour", "red, green, blue"]

>>> issubclass[Colour, tuple]
True
>>> Colour._fields
['red', 'green', 'blue']
94 trả về một đối tượng kiểu
>>> sky_colour = [
..     [0, 0, 0],
..     [0, 191, 255]
.. ]

>>> type[sky_colour]


>>> sky_colour[0]  # Start colour
[0, 0, 0]
>>> sky_colour[1][2]  # Blue value of end colour
255
37. Về mặt kỹ thuật, giá trị trả về không phải là màu mà là các bước cần thiết để các thành phần màu đỏ, lục và lam thực hiện thay đổi về màu. Tuy nhiên, lớp
>>> sky_colour = [
..     [0, 0, 0],
..     [0, 191, 255]
.. ]

>>> type[sky_colour]


>>> sky_colour[0]  # Start colour
[0, 0, 0]
>>> sky_colour[1][2]  # Blue value of end colour
255
37 cũng hoạt động hoàn hảo cho việc này

Bạn gọi hàm này để tìm ra các bước cần thiết để thay đổi màu bầu trời từ đen sang xanh da trời trong khung hình

>>> from collections import namedtuple

>>> Colour = namedtuple["Colour", "red, green, blue"]

>>> issubclass[Colour, tuple]
True
>>> Colour._fields
['red', 'green', 'blue']
44

Thêm Vòng lặp Hoạt hình

Bây giờ, bạn có thể thêm vòng lặp hoạt ảnh. Vì bạn đang xác định độ dài của hoạt ảnh bằng cách chọn số lượng khung hình, nên bạn có thể sử dụng vòng lặp

>>> from collections import namedtuple

>>> Colour = namedtuple["Colour", "red, green, blue"]

>>> issubclass[Colour, tuple]
True
>>> Colour._fields
['red', 'green', 'blue']
45 làm vòng lặp chính

>>> from collections import namedtuple

>>> Colour = namedtuple["Colour", "red, green, blue"]

>>> issubclass[Colour, tuple]
True
>>> Colour._fields
['red', 'green', 'blue']
4

Bạn tạo một biến có tên là

>>> from collections import namedtuple

>>> Colour = namedtuple["Colour", "red, green, blue"]

>>> issubclass[Colour, tuple]
True
>>> Colour._fields
['red', 'green', 'blue']
46, ban đầu bằng màu bắt đầu. Trong vòng lặp
>>> from collections import namedtuple

>>> Colour = namedtuple["Colour", "red, green, blue"]

>>> issubclass[Colour, tuple]
True
>>> Colour._fields
['red', 'green', 'blue']
45, bạn sửa đổi các thành phần màu đỏ, lục và lam của màu này bằng cách thêm các bước bạn đã tính toán. Cuối cùng, bạn cập nhật màu nền của màn hình

Bạn cũng gọi

>>> sky_colour = [
..     [0, 0, 0],
..     [0, 191, 255]
.. ]

>>> type[sky_colour]


>>> sky_colour[0]  # Start colour
[0, 0, 0]
>>> sky_colour[1][2]  # Blue value of end colour
255
85 vì bạn muốn cập nhật hiển thị một lần cho mỗi khung hình

Mã này tạo hoạt ảnh sau

Màu bầu trời chuyển dần từ đen sang xanh da trời. Bạn có thể kiểm soát tốc độ của hoạt ảnh bằng cách thay đổi giá trị của

>>> from collections import namedtuple

>>> Colour = namedtuple["Colour", "red, green, blue"]

>>> issubclass[Colour, tuple]
True
>>> Colour._fields
['red', 'green', 'blue']
93. Bạn càng sử dụng nhiều bước, sự thay đổi màu sắc của bầu trời sẽ càng chậm

Cập nhật một tuple được đặt tên?

Bạn có thể nhớ rằng bạn đã sử dụng một bộ được đặt tên để thể hiện màu bắt đầu và kết thúc vì những màu này không thay đổi. Thật hợp lý khi sử dụng một kiểu dữ liệu không thay đổi

Tuy nhiên,

>>> from collections import namedtuple

>>> Colour = namedtuple["Colour", "red, green, blue"]

>>> issubclass[Colour, tuple]
True
>>> Colour._fields
['red', 'green', 'blue']
46 cần được cập nhật mọi khung hình. Vì một đối tượng
>>> sky_colour = [
..     [0, 0, 0],
..     [0, 191, 255]
.. ]

>>> type[sky_colour]


>>> sky_colour[0]  # Start colour
[0, 0, 0]
>>> sky_colour[1][2]  # Blue value of end colour
255
37 là một bộ dữ liệu được đặt tên và do đó không thể thay đổi, bạn phải ghi đè lên bộ dữ liệu được đặt tên mỗi lần

Hiện tại, tôi sẽ tiếp tục sử dụng lớp tuple có tên là

>>> sky_colour = [
..     [0, 0, 0],
..     [0, 191, 255]
.. ]

>>> type[sky_colour]


>>> sky_colour[0]  # Start colour
[0, 0, 0]
>>> sky_colour[1][2]  # Blue value of end colour
255
37 cho
>>> from collections import namedtuple

>>> Colour = namedtuple["Colour", "red, green, blue"]

>>> issubclass[Colour, tuple]
True
>>> Colour._fields
['red', 'green', 'blue']
46 và cho các biến tương tự được liên kết với các phần khác của bản vẽ mà bạn sẽ sớm bổ sung

Bạn sẽ xem lại điểm này ở cuối bài viết này. Chúng ta sẽ thảo luận xem đây có phải là cách tiếp cận tốt nhất đối với màu sắc đang thay đổi trong mọi khung hình hay không

Thêm một bông hoa vào cảnh

công việc khó khăn được thực hiện. Bây giờ, nếu bạn muốn thêm nhiều mục hơn vào cảnh, bạn có thể làm theo mẫu tương tự như bạn đã thực hiện với màu nền

Bạn có thể bắt đầu bằng cách thêm một bông hoa có cuống. Có ba thành phần của hoa có màu sắc khác nhau

  • những cánh hoa
  • Trung tâm của hoa. Đây được gọi là nhụy hoa, nhưng tôi sẽ chỉ gọi nó là trung tâm của bông hoa
  • thân cây

Bạn có thể thêm màu cho tất cả những thứ này và tìm ra các bước cần thiết trong mỗi khung. Tiếp theo, bạn tạo các đối tượng

>>> from collections import namedtuple

>>> Colour = namedtuple["Colour", "red, green, blue"]

>>> issubclass[Colour, tuple]
True
>>> Colour._fields
['red', 'green', 'blue']
54 cho bông hoa và thân cây và sử dụng các phương thức của
>>> from collections import namedtuple

>>> Colour = namedtuple["Colour", "red, green, blue"]

>>> issubclass[Colour, tuple]
True
>>> Colour._fields
['red', 'green', 'blue']
54 để ẩn “bút” đang thực hiện vẽ, xoay nó và thay đổi kích thước của các đường mà nó vẽ

>>> from collections import namedtuple

>>> Colour = namedtuple["Colour", "red, green, blue"]

>>> issubclass[Colour, tuple]
True
>>> Colour._fields
['red', 'green', 'blue']
5

Bạn xác định

>>> from collections import namedtuple

>>> Colour = namedtuple["Colour", "red, green, blue"]

>>> issubclass[Colour, tuple]
True
>>> Colour._fields
['red', 'green', 'blue']
56 vẽ thân và hoa bằng cách xoay và di chuyển những con rùa và thay đổi màu sắc của chúng. Hàm này cũng xóa bản vẽ khỏi khung trước đó khi bạn gọi
>>> from collections import namedtuple

>>> Colour = namedtuple["Colour", "red, green, blue"]

>>> issubclass[Colour, tuple]
True
>>> Colour._fields
['red', 'green', 'blue']
57 và
>>> from collections import namedtuple

>>> Colour = namedtuple["Colour", "red, green, blue"]

>>> issubclass[Colour, tuple]
True
>>> Colour._fields
['red', 'green', 'blue']
58

Bạn tính toán các bước cần thiết để thay đổi màu sắc trong mọi khung hình và đặt màu ban đầu giống như bạn đã làm cho bầu trời. Bạn thay đổi màu sắc hiện tại trong vòng lặp hoạt hình và vẽ lại bông hoa trong mọi khung hình

Hoạt hình bây giờ trông như thế này

Thêm các ngôi sao vào cảnh

Tiếp theo, bạn có thể thêm các ngôi sao ở các vị trí ngẫu nhiên trên màn hình. Vì bạn sẽ cần vẽ lại các ngôi sao trong mọi khung hình nên bạn có thể tạo các vị trí và kích thước ngôi sao ngẫu nhiên và lưu trữ chúng để bạn có thể sử dụng các giá trị giống nhau mỗi khi cần vẽ các ngôi sao. Điều này tốt hơn là tạo một con rùa mới cho mỗi ngôi sao có thể làm chậm hoạt ảnh

Xử lý sự thay đổi màu sắc của các ngôi sao theo cùng một khuôn mẫu như với bầu trời và bông hoa

>>> sky_colour = [
..     [0, 0, 0],
..     [0, 191, 255]
.. ]

>>> type[sky_colour]


>>> sky_colour[0]  # Start colour
[0, 0, 0]
>>> sky_colour[1][2]  # Blue value of end colour
255
0

Màu khởi đầu của các ngôi sao là màu trắng. Tuy nhiên, bạn cần khớp màu cuối của các vì sao với màu cuối của bầu trời để các ngôi sao 'hòa' vào nền trời khi mặt trời mọc hoàn tất

Bạn sử dụng các biểu thức trình tạo để tạo các cặp tọa độ sao và kích thước sao, sau đó chuyển đổi chúng thành các bộ dữ liệu. Nếu bạn đã quen với việc hiểu danh sách, bạn có thể thắc mắc tại sao bạn không thể sử dụng cú pháp tương tự mà thay thế dấu ngoặc vuông

>>> from collections import namedtuple

>>> Colour = namedtuple["Colour", "red, green, blue"]

>>> issubclass[Colour, tuple]
True
>>> Colour._fields
['red', 'green', 'blue']
59 bằng dấu ngoặc đơn
>>> sky_colour = [
..     [0, 0, 0],
..     [0, 191, 255]
.. ]

>>> type[sky_colour]


>>> sky_colour[0]  # Start colour
[0, 0, 0]
>>> sky_colour[1][2]  # Blue value of end colour
255
00?

>>> sky_colour = [
..     [0, 0, 0],
..     [0, 191, 255]
.. ]

>>> type[sky_colour]


>>> sky_colour[0]  # Start colour
[0, 0, 0]
>>> sky_colour[1][2]  # Blue value of end colour
255
1

Trong

>>> sky_colour = [
..     [0, 0, 0],
..     [0, 191, 255]
.. ]

>>> type[sky_colour]


>>> sky_colour[0]  # Start colour
[0, 0, 0]
>>> sky_colour[1][2]  # Blue value of end colour
255
01, bạn cần lặp qua cả
>>> sky_colour = [
..     [0, 0, 0],
..     [0, 191, 255]
.. ]

>>> type[sky_colour]


>>> sky_colour[0]  # Start colour
[0, 0, 0]
>>> sky_colour[1][2]  # Blue value of end colour
255
02 và
>>> sky_colour = [
..     [0, 0, 0],
..     [0, 191, 255]
.. ]

>>> type[sky_colour]


>>> sky_colour[0]  # Start colour
[0, 0, 0]
>>> sky_colour[1][2]  # Blue value of end colour
255
03. Do đó, bạn sử dụng hàm
>>> sky_colour = [
..     [0, 0, 0],
..     [0, 191, 255]
.. ]

>>> type[sky_colour]


>>> sky_colour[0]  # Start colour
[0, 0, 0]
>>> sky_colour[1][2]  # Blue value of end colour
255
04 của Python để 'zip' hai bộ dữ liệu này lại với nhau và lặp qua chúng đồng thời

Trong vòng lặp hoạt hình, bạn vẽ các ngôi sao trước khi vẽ bông hoa để đảm bảo rằng các ngôi sao ở 'phía sau' bông hoa trong bức vẽ

Hoạt hình hiện có các ngôi sao, bông hoa và bầu trời, tất cả đều thay đổi màu sắc ban đêm thành ban ngày

Thêm mặt trời vào cảnh

Khi bạn thêm mặt trời, sẽ có một thử thách mới. Việc thiết lập chuyển đổi màu sắc của mặt trời không quá khó vì điều này tuân theo cùng một khuôn mẫu với mọi thứ khác. Tuy nhiên, bạn cũng sẽ cần mặt trời mọc trên bầu trời

Tọa độ x của mặt trời không đổi trong suốt hoạt ảnh. Tuy nhiên, tọa độ y thay đổi. Cũng như màu sắc, bạn cũng có giá trị bắt đầu và kết thúc cho tọa độ y. Do đó, bạn có thể sử dụng lớp tuple có tên

>>> sky_colour = [
..     [0, 0, 0],
..     [0, 191, 255]
.. ]

>>> type[sky_colour]


>>> sky_colour[0]  # Start colour
[0, 0, 0]
>>> sky_colour[1][2]  # Blue value of end colour
255
56 cho phạm vi tọa độ y. Các giá trị bên trong nó là các float thay vì các đối tượng
>>> sky_colour = [
..     [0, 0, 0],
..     [0, 191, 255]
.. ]

>>> type[sky_colour]


>>> sky_colour[0]  # Start colour
[0, 0, 0]
>>> sky_colour[1][2]  # Blue value of end colour
255
37

Bạn cũng cần xác định

>>> sky_colour = [
..     [0, 0, 0],
..     [0, 191, 255]
.. ]

>>> type[sky_colour]


>>> sky_colour[0]  # Start colour
[0, 0, 0]
>>> sky_colour[1][2]  # Blue value of end colour
255
07 thực hiện nhiệm vụ tương tự như
>>> from collections import namedtuple

>>> Colour = namedtuple["Colour", "red, green, blue"]

>>> issubclass[Colour, tuple]
True
>>> Colour._fields
['red', 'green', 'blue']
94. Các đối số đầu vào của nó là tọa độ y bắt đầu và kết thúc cũng như số bước trong hoạt ảnh

>>> sky_colour = [
..     [0, 0, 0],
..     [0, 191, 255]
.. ]

>>> type[sky_colour]


>>> sky_colour[0]  # Start colour
[0, 0, 0]
>>> sky_colour[1][2]  # Blue value of end colour
255
2

Hàm

>>> sky_colour = [
..     [0, 0, 0],
..     [0, 191, 255]
.. ]

>>> type[sky_colour]


>>> sky_colour[0]  # Start colour
[0, 0, 0]
>>> sky_colour[1][2]  # Blue value of end colour
255
09 cần màu của mặt trời và vị trí y. Ban đầu, bạn sử dụng
>>> sky_colour = [
..     [0, 0, 0],
..     [0, 191, 255]
.. ]

>>> type[sky_colour]


>>> sky_colour[0]  # Start colour
[0, 0, 0]
>>> sky_colour[1][2]  # Blue value of end colour
255
11 của
>>> from collections import namedtuple

>>> Colour = namedtuple["Colour", "red, green, blue"]

>>> issubclass[Colour, tuple]
True
>>> Colour._fields
['red', 'green', 'blue']
54 để đặt cả vị trí x và y của mặt trời. Tuy nhiên, trong
>>> sky_colour = [
..     [0, 0, 0],
..     [0, 191, 255]
.. ]

>>> type[sky_colour]


>>> sky_colour[0]  # Start colour
[0, 0, 0]
>>> sky_colour[1][2]  # Blue value of end colour
255
09, bạn có thể sử dụng
>>> sky_colour = [
..     [0, 0, 0],
..     [0, 191, 255]
.. ]

>>> type[sky_colour]


>>> sky_colour[0]  # Start colour
[0, 0, 0]
>>> sky_colour[1][2]  # Blue value of end colour
255
13 vì tọa độ x không còn thay đổi nữa

Tăng

>>> sky_colour = [
..     [0, 0, 0],
..     [0, 191, 255]
.. ]

>>> type[sky_colour]


>>> sky_colour[0]  # Start colour
[0, 0, 0]
>>> sky_colour[1][2]  # Blue value of end colour
255
14 trong vòng lặp hoạt ảnh đơn giản hơn so với màu sắc vì giá trị là một dấu phẩy đơn lẻ chứ không phải là một bộ có tên

Hoạt hình hiện đã hoàn tất

Bạn có nên sử dụng các bộ dữ liệu được đặt tên trong vòng lặp hoạt hình không?

Trước đó trong bài viết, chúng ta đã thảo luận về cách bộ dữ liệu lý tưởng cho màu sắc và các giá trị khác không thay đổi. Tuy nhiên, trong phiên bản mã hiện tại, bạn cũng đang sử dụng các bộ dữ liệu có tên để lưu trữ màu sắc trong vòng lặp hoạt hình. Đây là những màu có tên là

>>> sky_colour = [
..     [0, 0, 0],
..     [0, 191, 255]
.. ]

>>> type[sky_colour]


>>> sky_colour[0]  # Start colour
[0, 0, 0]
>>> sky_colour[1][2]  # Blue value of end colour
255
15

Vì các bộ dữ liệu là các đối tượng không thể thay đổi, nên bạn phải tạo các bộ dữ liệu có tên

>>> sky_colour = [
..     [0, 0, 0],
..     [0, 191, 255]
.. ]

>>> type[sky_colour]


>>> sky_colour[0]  # Start colour
[0, 0, 0]
>>> sky_colour[1][2]  # Blue value of end colour
255
37 mới trong vòng lặp
>>> from collections import namedtuple

>>> Colour = namedtuple["Colour", "red, green, blue"]

>>> issubclass[Colour, tuple]
True
>>> Colour._fields
['red', 'green', 'blue']
45 và gán lại chúng cho các tên biến giống nhau. Tuples không lý tưởng cho việc này

Thay vào đó, bạn có thể chuyển đổi các bộ dữ liệu đã đặt tên thành từ điển trước vòng lặp

>>> from collections import namedtuple

>>> Colour = namedtuple["Colour", "red, green, blue"]

>>> issubclass[Colour, tuple]
True
>>> Colour._fields
['red', 'green', 'blue']
45. Từ điển là loại có thể thay đổi và phù hợp hơn với các giá trị cần thay đổi thường xuyên

Bạn có thể cấu trúc lại mã bằng cách sử dụng phương thức

>>> sky_colour = [
..     [0, 0, 0],
..     [0, 191, 255]
.. ]

>>> type[sky_colour]


>>> sky_colour[0]  # Start colour
[0, 0, 0]
>>> sky_colour[1][2]  # Blue value of end colour
255
19 của tuple có tên để chuyển đổi tuple có tên thành từ điển

>>> sky_colour = [
..     [0, 0, 0],
..     [0, 191, 255]
.. ]

>>> type[sky_colour]


>>> sky_colour[0]  # Start colour
[0, 0, 0]
>>> sky_colour[1][2]  # Blue value of end colour
255
3

Cũng có những thay đổi trong vòng lặp

>>> from collections import namedtuple

>>> Colour = namedtuple["Colour", "red, green, blue"]

>>> issubclass[Colour, tuple]
True
>>> Colour._fields
['red', 'green', 'blue']
45. Bạn không còn tạo các bộ dữ liệu có tên
>>> sky_colour = [
..     [0, 0, 0],
..     [0, 191, 255]
.. ]

>>> type[sky_colour]


>>> sky_colour[0]  # Start colour
[0, 0, 0]
>>> sky_colour[1][2]  # Blue value of end colour
255
37 mới nữa. Thay vào đó, bạn đang thay đổi các giá trị màu trong từ điển bằng cách sử dụng toán tử gia số
>>> sky_colour = [
..     [0, 0, 0],
..     [0, 191, 255]
.. ]

>>> type[sky_colour]


>>> sky_colour[0]  # Start colour
[0, 0, 0]
>>> sky_colour[1][2]  # Blue value of end colour
255
22

Sau đó, bạn chuyển các giá trị của từ điển làm đối số cho

>>> from collections import namedtuple

>>> Colour = namedtuple["Colour", "red, green, blue"]

>>> issubclass[Colour, tuple]
True
>>> Colour._fields
['red', 'green', 'blue']
19,
>>> sky_colour = [
..     [0, 0, 0],
..     [0, 191, 255]
.. ]

>>> type[sky_colour]


>>> sky_colour[0]  # Start colour
[0, 0, 0]
>>> sky_colour[1][2]  # Blue value of end colour
255
01,
>>> from collections import namedtuple

>>> Colour = namedtuple["Colour", "red, green, blue"]

>>> issubclass[Colour, tuple]
True
>>> Colour._fields
['red', 'green', 'blue']
56 và
>>> sky_colour = [
..     [0, 0, 0],
..     [0, 191, 255]
.. ]

>>> type[sky_colour]


>>> sky_colour[0]  # Start colour
[0, 0, 0]
>>> sky_colour[1][2]  # Blue value of end colour
255
09. Bạn có thể sử dụng phương pháp
>>> sky_colour = [
..     [0, 0, 0],
..     [0, 191, 255]
.. ]

>>> type[sky_colour]


>>> sky_colour[0]  # Start colour
[0, 0, 0]
>>> sky_colour[1][2]  # Blue value of end colour
255
27 của từ điển để tạo một lần lặp có thể được sử dụng trong tất cả các chức năng đó

Bạn sẽ không thể nhận thấy bất kỳ thay đổi nào giữa hoạt ảnh từ phiên bản này và hoạt ảnh bạn đã hoàn thành trước đó không sử dụng từ điển

Vì vậy, tại sao bận tâm?

Nếu hoạt hình trông giống nhau, tại sao phải thực hiện thay đổi này?

Trong dự án này, nó không quan trọng. Tuy nhiên, đây là một ví dụ tốt để chúng ta suy nghĩ về việc sử dụng kiểu dữ liệu nào. Khi sử dụng các bộ dữ liệu được đặt tên trong vòng lặp

>>> from collections import namedtuple

>>> Colour = namedtuple["Colour", "red, green, blue"]

>>> issubclass[Colour, tuple]
True
>>> Colour._fields
['red', 'green', 'blue']
45, chương trình phải tạo một số bộ dữ liệu được đặt tên mới trong mỗi khung. Tạo các đối tượng mới cần có thời gian

Nhưng cập nhật một từ điển là hiệu quả. Trong phiên bản tái cấu trúc, bạn không tạo các đối tượng mới trong vòng lặp

>>> from collections import namedtuple

>>> Colour = namedtuple["Colour", "red, green, blue"]

>>> issubclass[Colour, tuple]
True
>>> Colour._fields
['red', 'green', 'blue']
45 mà cập nhật các đối tượng hiện có

Bạn có thể so sánh hai phiên bản bằng cách định thời gian cho chúng. Tuy nhiên, hầu hết thời gian được dành để hiển thị đồ họa trên màn hình trong hoạt ảnh chẳng hạn như hoạt ảnh này

Bạn có thể so sánh hiệu quả của hai phiên bản bằng cách lược bỏ phần vẽ trong hoạt ảnh và chỉ so sánh đoạn mã cập nhật màu sắc

Hãy sử dụng mô-đun

>>> sky_colour = [
..     [0, 0, 0],
..     [0, 191, 255]
.. ]

>>> type[sky_colour]


>>> sky_colour[0]  # Start colour
[0, 0, 0]
>>> sky_colour[1][2]  # Blue value of end colour
255
30 để tính thời gian cho các vòng lặp
>>> from collections import namedtuple

>>> Colour = namedtuple["Colour", "red, green, blue"]

>>> issubclass[Colour, tuple]
True
>>> Colour._fields
['red', 'green', 'blue']
45 trong cả hai phiên bản mã. Bắt đầu với việc định thời gian cho phiên bản gốc sử dụng các bộ dữ liệu được đặt tên xuyên suốt, kể cả trong vòng lặp
>>> from collections import namedtuple

>>> Colour = namedtuple["Colour", "red, green, blue"]

>>> issubclass[Colour, tuple]
True
>>> Colour._fields
['red', 'green', 'blue']
45 hoạt hình

>>> sky_colour = [
..     [0, 0, 0],
..     [0, 191, 255]
.. ]

>>> type[sky_colour]


>>> sky_colour[0]  # Start colour
[0, 0, 0]
>>> sky_colour[1][2]  # Blue value of end colour
255
4

Bắt đầu từ dưới cùng của kịch bản này. Bạn đang chạy

>>> sky_colour = [
..     [0, 0, 0],
..     [0, 191, 255]
.. ]

>>> type[sky_colour]


>>> sky_colour[0]  # Start colour
[0, 0, 0]
>>> sky_colour[1][2]  # Blue value of end colour
255
33 với ba đối số

  • >>> sky_colour = [
    ..     [0, 0, 0],
    ..     [0, 191, 255]
    .. ]
    
    >>> type[sky_colour]
    
    
    >>> sky_colour[0]  # Start colour
    [0, 0, 0]
    >>> sky_colour[1][2]  # Blue value of end colour
    255
    34 là mã bạn muốn bấm giờ. Mã được chuyển vào
    >>> sky_colour = [
    ..     [0, 0, 0],
    ..     [0, 191, 255]
    .. ]
    
    >>> type[sky_colour]
    
    
    >>> sky_colour[0]  # Start colour
    [0, 0, 0]
    >>> sky_colour[1][2]  # Blue value of end colour
    255
    35 dưới dạng chuỗi. Bạn xác định biến này là một chuỗi có ba dấu ngoặc kép ngay phía trên lệnh gọi
    >>> sky_colour = [
    ..     [0, 0, 0],
    ..     [0, 191, 255]
    .. ]
    
    >>> type[sky_colour]
    
    
    >>> sky_colour[0]  # Start colour
    [0, 0, 0]
    >>> sky_colour[1][2]  # Blue value of end colour
    255
    35. Điều này bao gồm mã trong vòng lặp
    >>> from collections import namedtuple
    
    >>> Colour = namedtuple["Colour", "red, green, blue"]
    
    >>> issubclass[Colour, tuple]
    True
    >>> Colour._fields
    ['red', 'green', 'blue']
    45 hoạt hình, ngoại trừ những dòng chịu trách nhiệm vẽ trên màn hình
  • >>> sky_colour = [
    ..     [0, 0, 0],
    ..     [0, 191, 255]
    .. ]
    
    >>> type[sky_colour]
    
    
    >>> sky_colour[0]  # Start colour
    [0, 0, 0]
    >>> sky_colour[1][2]  # Blue value of end colour
    255
    38 bao gồm mã bạn muốn chạy trước khi bắt đầu tính thời gian cho mã chính. Đây là một chuỗi trích dẫn ba lần khác bao gồm mã trước vòng lặp
    >>> from collections import namedtuple
    
    >>> Colour = namedtuple["Colour", "red, green, blue"]
    
    >>> issubclass[Colour, tuple]
    True
    >>> Colour._fields
    ['red', 'green', 'blue']
    45 hoạt hình, loại trừ những dòng chịu trách nhiệm vẽ trên màn hình
  • >>> sky_colour = [
    ..     [0, 0, 0],
    ..     [0, 191, 255]
    .. ]
    
    >>> type[sky_colour]
    
    
    >>> sky_colour[0]  # Start colour
    [0, 0, 0]
    >>> sky_colour[1][2]  # Blue value of end colour
    255
    40 là đối số đặt số lần
    >>> sky_colour = [
    ..     [0, 0, 0],
    ..     [0, 191, 255]
    .. ]
    
    >>> type[sky_colour]
    
    
    >>> sky_colour[0]  # Start colour
    [0, 0, 0]
    >>> sky_colour[1][2]  # Blue value of end colour
    255
    35 sẽ chạy mã bạn muốn tính thời gian. Do đó, bạn đang định thời gian cho ____042 hoạt hình mà không hiển thị nó

Khi bạn chạy tập lệnh này, bạn sẽ nhận được kết quả sau

>>> sky_colour = [
..     [0, 0, 0],
..     [0, 191, 255]
.. ]

>>> type[sky_colour]


>>> sky_colour[0]  # Start colour
[0, 0, 0]
>>> sky_colour[1][2]  # Blue value of end colour
255
5

Mã mất khoảng

>>> sky_colour = [
..     [0, 0, 0],
..     [0, 191, 255]
.. ]

>>> type[sky_colour]


>>> sky_colour[0]  # Start colour
[0, 0, 0]
>>> sky_colour[1][2]  # Blue value of end colour
255
43 giây để chạy
>>> sky_colour = [
..     [0, 0, 0],
..     [0, 191, 255]
.. ]

>>> type[sky_colour]


>>> sky_colour[0]  # Start colour
[0, 0, 0]
>>> sky_colour[1][2]  # Blue value of end colour
255
42 lần trên thiết lập của tôi

Bạn có thể tạo tập lệnh tương tự cho phiên bản thứ hai trong đó từ điển thay thế các bộ dữ liệu có tên trong vòng lặp for

>>> sky_colour = [
..     [0, 0, 0],
..     [0, 191, 255]
.. ]

>>> type[sky_colour]


>>> sky_colour[0]  # Start colour
[0, 0, 0]
>>> sky_colour[1][2]  # Blue value of end colour
255
6

Đầu ra của tập lệnh này là

>>> sky_colour = [
..     [0, 0, 0],
..     [0, 191, 255]
.. ]

>>> type[sky_colour]


>>> sky_colour[0]  # Start colour
[0, 0, 0]
>>> sky_colour[1][2]  # Blue value of end colour
255
7

Phiên bản thứ hai mất khoảng một nửa thời gian để chạy so với phiên bản đầu tiên. Tạo các bộ dữ liệu được đặt tên mới trong mỗi khung tốn nhiều thời gian

Lưu ý rằng phần mã thực hiện các thay đổi về màu sắc và vị trí mặt trời không chiếm quá nhiều thời gian trong cả hai phiên bản. Thời gian bạn nhận được từ các tập lệnh này dành cho

>>> sky_colour = [
..     [0, 0, 0],
..     [0, 191, 255]
.. ]

>>> type[sky_colour]


>>> sky_colour[0]  # Start colour
[0, 0, 0]
>>> sky_colour[1][2]  # Blue value of end colour
255
42 lần chạy hoạt ảnh mà không hiển thị trên màn hình

Tuy nhiên, khi bạn chạy mã hoạt ảnh đầy đủ một lần, hoạt ảnh sẽ mất vài giây để chạy. Đó là bởi vì hiển thị đồ họa trên màn hình là phần tốn nhiều thời gian nhất của mã

Tuy nhiên, trong các chương trình khác mà bạn có thể viết, hiệu suất có thể là một vấn đề. Vì vậy, luôn hữu ích khi nghĩ về thời điểm bạn nên sử dụng một loại dữ liệu này thay vì một loại dữ liệu khác. Có nhiều yếu tố cần xem xét khi chọn cấu trúc dữ liệu cho chương trình của bạn. Hiệu quả là một trong số đó

Từ cuối cùng

Trong bài viết này, bạn đã khám phá cách sử dụng các bộ dữ liệu có tên Python để viết hoạt ảnh Python

>>> sky_colour = [
..     [0, 0, 0],
..     [0, 191, 255]
.. ]

>>> type[sky_colour]


>>> sky_colour[0]  # Start colour
[0, 0, 0]
>>> sky_colour[1][2]  # Blue value of end colour
255
8 về cảnh mặt trời mọc

Bạn đã tìm ra những thay đổi về màu sắc và vị trí cần thiết trong từng khung hình động cho từng mục trong bản vẽ của mình. Kết quả là màu sắc và vị trí thay đổi mượt mà khi hoạt ảnh chạy

Các bộ dữ liệu được đặt tên là lý tưởng để xác định màu ở đầu và cuối hoạt ảnh. Tuy nhiên, chúng không phải là lựa chọn tốt nhất để lưu trữ các màu thay đổi trong vòng lặp hoạt ảnh. Các kiểu dữ liệu có thể thay đổi sẽ phù hợp hơn khi bạn cần cập nhật dữ liệu thường xuyên

Bạn có thể vẽ những hình gì trong con rùa Python?

Thay đổi hình dạng con rùa .
Quảng trường
mũi tên
Vòng tròn
Rùa
Tam giác
Cổ điển

Làm cách nào để vẽ một ngôi sao bằng Python?

Nhận bảng màn hình mà rùa sẽ vẽ trên đó. .
Xác định một phiên bản cho rùa
Đối với một bản vẽ, Ngôi sao thực hiện một vòng lặp 5 lần
Trong mỗi lần lặp, hãy di chuyển con rùa về phía trước 100 đơn vị và di chuyển nó sang phải 144 độ
Điều này sẽ tạo thành một góc 36 độ bên trong một ngôi sao
5 lần lặp lại sẽ tạo nên một Ngôi sao hoàn hảo

Chủ Đề