Rùa Python nhanh như thế nào?
Có nhiều mô-đun trong Python cung cấp các tính năng rất mạnh mẽ mà chúng ta có thể sử dụng trong các chương trình của riêng mình. Một số trong số này có thể gửi email hoặc tìm nạp các trang web. Cái mà chúng ta sẽ xem xét trong chương này cho phép chúng ta tạo ra những con rùa và để chúng vẽ các hình dạng và hoa văn Show
Những chú rùa rất thú vị, nhưng mục đích thực sự của chương này là để dạy cho chúng ta thêm một chút về Python và phát triển chủ đề về tư duy máy tính hoặc tư duy như một nhà khoa học máy tính. Hầu hết Python được đề cập ở đây sẽ được khám phá sâu hơn sau 3. 1. Chương trình rùa đầu tiên của chúng tôiHãy thử một vài dòng trong Python shell để tạo một con rùa mới và bắt đầu vẽ một hình chữ nhật. (Chúng ta sẽ gọi biến tham chiếu đến con rùa đầu tiên của chúng ta là alex , nhưng bạn có thể chọn một tên khác nếu tuân theo các quy tắc đặt tên từ chương trước). 1 2 3 4 5 6 7 >>> import turtle >>> turtle.setup(800, 600) >>> alex = turtle.Turtle() >>> alex.forward(300) >>> alex.left(90) >>> alex.forward(200) >>> exit() Sau lệnh thứ hai, một cửa sổ mới hiện lên. Lệnh thứ ba đặt một con trỏ – được gọi trìu mến là con rùa trong mô-đun này – mà chúng tôi đặt tên là alex. Ba dòng tiếp theo di chuyển alex về phía trước, xoay anh ta sang trái và di chuyển anh ta về phía trước một lần nữa, hoàn thành hai cạnh của hình chữ nhật. Sau khi các lệnh này đã được nhập, bạn sẽ thấy một cửa sổ giống như thế này Dưới đây là một số điều bạn cần hiểu về chương trình này
Hãy tiếp tục và nhấp vào cửa sổ sau khi nhập lệnh cuối cùng Một đối tượng có thể có nhiều phương thức khác nhau — những việc nó có thể làm — và nó cũng có thể có các thuộc tính — (đôi khi được gọi là thuộc tính). Ví dụ: mỗi con rùa có một thuộc tính màu. Lời gọi phương thức alex. color("red") sẽ làm cho alex có màu đỏ và bản vẽ cũng sẽ có màu đỏ. Màu sắc của con rùa, chiều rộng của chiếc bút của nó, vị trí của con rùa trong cửa sổ, hướng nó quay mặt, v.v. đều là một phần của trạng thái hiện tại của nó. Tương tự, đối tượng cửa sổ có màu nền và một số văn bản trong thanh tiêu đề, kích thước và vị trí trên màn hình. Đây là tất cả các phần của trạng thái của đối tượng cửa sổ Có khá nhiều phương thức cho phép chúng ta sửa đổi các đối tượng con rùa và cửa sổ. Chúng tôi sẽ chỉ hiển thị một vài. Chúng tôi chỉ nhận xét những dòng khác với ví dụ trước (và chúng tôi đã sử dụng một tên biến khác cho con rùa này). Ngoài ra, chúng tôi sẽ đưa ví dụ này vào tập lệnh có tên tess. py , vì sẽ hơi lâu để gõ đi gõ lại vào trình bao Python. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 import turtle turtle.setup(800, 600) # set the window size to 800 by 600 pixels wn = turtle.Screen() # set wn to the window object wn.bgcolor("lightgreen") # set the window background color wn.title("Hello, Tess!") # set the window title tess = turtle.Turtle() tess.color("blue") # make tess blue tess.pensize(3) # set the width of her pen tess.forward(300) tess.left(120) tess.forward(300) wn.exitonclick() Chạy chương trình này sẽ tạo ra một cửa sổ đồ họa trông như thế này Khi chúng tôi chạy chương trình này, cửa sổ mới này sẽ bật lên và sẽ duy trì trên màn hình cho đến khi chúng tôi nhấp vào nó Mở rộng chương trình này
3. 2. Ví dụ — một đàn rùaGiống như chúng ta có thể có nhiều số nguyên khác nhau trong một chương trình, chúng ta có thể có nhiều con rùa. Mỗi người trong số họ được gọi là một ví dụ. Mỗi trường hợp có các thuộc tính và phương thức riêng — vì vậy alex có thể vẽ bằng bút đen mỏng và ở một vị trí nào đó, trong khi tess có thể đi theo hướng của riêng mình bằng bút màu hồng to. Vì vậy, đây là điều xảy ra khi alex hoàn thành hình chữ nhật của anh ấy và tess hoàn thành hình tam giác của cô ấy, trong chương trình có tên tess_n_alex. p . 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 import turtle # setup the window and its attributes turtle.setup(800, 600) wn = turtle.Screen() wn.bgcolor("lightgreen") wn.title("Tess & Alex") # instantiate (create) tess and set her attributes tess = turtle.Turtle() tess.color("hotpink") tess.pensize(5) # instantiate alex alex = turtle.Turtle() # draw an equilateral triangle with tess tess.forward(320) tess.left(120) tess.forward(320) tess.left(120) tess.forward(320) tess.left(120) # turn tess around and move her away from the origin tess.right(180) tess.forward(320) # make alex draw a square alex.forward(200) alex.left(90) alex.forward(200) alex.left(90) alex.forward(200) alex.left(90) alex.forward(200) wn.exitonclick() cái tạo ra cái này khi chạy Dưới đây là một số quan sát về Cách suy nghĩ như một nhà khoa học máy tính
3. 3. vòng lặp forKhi chúng tôi vẽ hình vuông, nó khá tẻ nhạt. Chúng tôi phải di chuyển rồi rẽ, di chuyển rồi rẽ, v.v. vân vân. , bốn lần. Nếu chúng ta đang vẽ một hình lục giác, hoặc hình bát giác hoặc hình đa giác có 42 cạnh, đó sẽ là một cơn ác mộng Vì vậy, một khối xây dựng cơ bản của tất cả các chương trình là có thể lặp đi lặp lại một số mã Python cho vòng lặp giải quyết điều này cho chúng tôi Giả sử chúng ta có một số bạn bè và chúng ta muốn gửi cho từng người một email mời họ tham gia bữa tiệc của chúng ta. Vì chúng tôi chưa biết cách gửi email nên hiện tại chúng tôi sẽ chỉ in một tin nhắn cho từng bạn 1 2 3 for f in ["Joe", "Amy", "Brad", "Angelina", "Zuki", "Thandi", "Paris"]: invitation = "Hi " + f + ". Please come to my party on Saturday!" print(invitation) Khi chúng tôi chạy cái này, đầu ra trông như thế này ________số 8 Nghiên cứu kỹ ví dụ này và lưu ý những điều sau đây
3. 4. Luồng thực thi của vòng lặp forSơ đồ vòng lặp for Khi một chương trình thực thi, trình thông dịch luôn theo dõi câu lệnh nào sắp được thực thi. Ta gọi đây là luồng điều khiển, luồng thực hiện chương trình. Khi con người thực hiện các chương trình, họ thường dùng ngón tay lần lượt chỉ vào từng câu lệnh. Vì vậy, bạn có thể coi luồng điều khiển là “ngón tay di chuyển của Python” Luồng điều khiển cho đến bây giờ hoàn toàn từ trên xuống dưới, mỗi lần một câu lệnh. Vòng lặp for thay đổi điều này. Luồng điều khiển thường dễ hình dung và dễ hiểu nếu chúng ta vẽ sơ đồ. Phần này cho biết các bước chính xác và logic về cách câu lệnh for thực thi. 3. 5. Vòng lặp đơn giản hóa chương trình rùa của chúng tôiĐể vẽ một hình vuông, chúng tôi muốn làm điều tương tự bốn lần - di chuyển con rùa và xoay. Trước đây chúng ta đã sử dụng 8 dòng để alex vẽ bốn cạnh của một hình vuông. Điều này thực hiện chính xác như vậy, nhưng chỉ sử dụng ba dòng for i in [0, 1, 2, 3]: alex.forward(250) alex.left(90) Mặc dù lưu một số dòng mã có thể thuận tiện, nhưng đó không phải là vấn đề lớn ở đây. Điều quan trọng hơn nhiều là chúng tôi đã tìm thấy một mẫu câu lệnh lặp lại và tổ chức lại chương trình của chúng tôi để lặp lại mẫu đó. Tìm các phần và bằng cách nào đó sắp xếp các chương trình của chúng ta xung quanh các phần đó là một kỹ năng quan trọng trong Cách tư duy như một nhà khoa học máy tính Các giá trị trong danh sách, [0, 1, 2, 3], were provided to make the loop body execute 4 times. We could have used any four values, but these are the conventional ones to use. In fact, they are so popular that Python gives us a special built-in range tích hợp đặc biệt cho mục đích này. >>> import turtle >>> turtle.setup(800, 600) >>> alex = turtle.Turtle() >>> alex.forward(300) >>> alex.left(90) >>> alex.forward(200) >>> exit()0 Lưu ý rằng
Chúng ta cũng có thể tạo danh sách các số bằng cách chuyển đầu ra của lệnh gọi đến hàm dãy cho hàm the list type function: >>> import turtle >>> turtle.setup(800, 600) >>> alex = turtle.Turtle() >>> alex.forward(300) >>> alex.left(90) >>> alex.forward(200) >>> exit()1 Thử cái này Cái gì list(range(0)) trả về? list(range(1))? Mẹo nhỏ của chúng tôi trước đó để đảm bảo rằng alex thực hiện lượt cuối cùng để hoàn thành 360 độ đã được đền đáp. nếu chúng tôi không làm điều đó, thì chúng tôi đã không thể sử dụng một vòng lặp cho cạnh thứ tư của hình vuông. Nó sẽ trở thành một “trường hợp đặc biệt”, khác với các mặt khác. Khi có thể, chúng tôi muốn làm cho mã của mình phù hợp với một mẫu chung hơn là phải tạo một trường hợp đặc biệt. Vì vậy, để lặp lại điều gì đó bốn lần, một lập trình viên Python giỏi sẽ làm điều này >>> import turtle >>> turtle.setup(800, 600) >>> alex = turtle.Turtle() >>> alex.forward(300) >>> alex.left(90) >>> alex.forward(200) >>> exit()2 Bây giờ, bạn đã có thể biết cách thay đổi chương trình trước đó của chúng tôi để tess cũng có thể sử dụng for loop to draw her equilateral triangle. Điều gì sẽ xảy ra nếu chúng tôi thực hiện thay đổi này >>> import turtle >>> turtle.setup(800, 600) >>> alex = turtle.Turtle() >>> alex.forward(300) >>> alex.left(90) >>> alex.forward(200) >>> exit()3 Một biến cũng có thể được gán giá trị là một danh sách. Vì vậy, danh sách cũng có thể được sử dụng trong các tình huống khác ngoài vòng lặp for . Đoạn mã trên có thể được viết lại như thế này. >>> import turtle >>> turtle.setup(800, 600) >>> alex = turtle.Turtle() >>> alex.forward(300) >>> alex.left(90) >>> alex.forward(200) >>> exit()4 3. 6. Một vài phương pháp và thủ thuật rùa khácPhương thức rùa có thể sử dụng góc hoặc khoảng cách âm. Vì vậy, tess. forward(-100) sẽ di chuyển tess về phía sau và tess. left(-30) xoay cô ấy sang phải. Ngoài ra, vì có 360 độ trong một vòng tròn, quay 30 độ sang trái sẽ khiến bạn quay về cùng hướng với quay 330 độ sang phải. (Tuy nhiên, hoạt ảnh trên màn hình sẽ khác — bạn sẽ có thể biết liệu tess đang quay theo chiều kim đồng hồ hay ngược chiều kim đồng hồ. ) Điều này cho thấy rằng chúng ta không cần cả phương pháp rẽ trái và rẽ phải — chúng ta có thể là những người theo chủ nghĩa tối giản và chỉ cần có một phương pháp. Ngoài ra còn có một phương pháp lạc hậu. (Nếu bạn rất mọt sách, bạn có thể thích nói alex. lùi (-100) để di chuyển alex về phía trước. ) Một phần của suy nghĩ như một nhà khoa học là hiểu thêm về cấu trúc và các mối quan hệ phong phú trong lĩnh vực của bạn. Vì vậy, sửa đổi một số kiến thức cơ bản về hình học và trục số, giống như chúng ta đã hoàn thành ở đây, là một khởi đầu tốt nếu chúng ta định chơi với rùa Chuồng rùa có thể nhặt lên hoặc đặt xuống. Điều này cho phép chúng tôi di chuyển một con rùa đến một nơi khác mà không cần vẽ một đường. Các phương pháp là >>> import turtle >>> turtle.setup(800, 600) >>> alex = turtle.Turtle() >>> alex.forward(300) >>> alex.left(90) >>> alex.forward(200) >>> exit()5 Mỗi con rùa có thể có hình dạng riêng. Những cái có sẵn "có sẵn" là mũi tên , trống , . circle, classic, square, triangle, turtle. >>> import turtle >>> turtle.setup(800, 600) >>> alex = turtle.Turtle() >>> alex.forward(300) >>> alex.left(90) >>> alex.forward(200) >>> exit()6 Bạn có thể tăng tốc hoặc giảm tốc độ hoạt hình của chú rùa. (Hoạt ảnh kiểm soát tốc độ rùa quay và di chuyển về phía trước). Cài đặt tốc độ có thể được đặt trong khoảng từ 1 (chậm nhất) đến 10 (nhanh nhất). Nhưng nếu bạn đặt tốc độ thành 0, nó có một ý nghĩa đặc biệt - tắt hoạt ảnh và đi nhanh nhất có thể >>> import turtle >>> turtle.setup(800, 600) >>> alex = turtle.Turtle() >>> alex.forward(300) >>> alex.left(90) >>> alex.forward(200) >>> exit()7 Một con rùa có thể “đóng dấu” dấu chân của nó lên khung vẽ và dấu chân này sẽ vẫn còn sau khi con rùa chuyển đi nơi khác. Dập hoạt động, ngay cả khi bút lên Hãy làm một ví dụ thể hiện một số tính năng mới này trong xoắn ốc. p . >>> import turtle >>> turtle.setup(800, 600) >>> alex = turtle.Turtle() >>> alex.forward(300) >>> alex.left(90) >>> alex.forward(200) >>> exit()8 cái tạo ra cái này khi chạy Cẩn thận ngay. tất cả ngoại trừ một trong những hình bạn nhìn thấy trên màn hình ở đây là dấu chân được tạo bởi tem . Nhưng chương trình vẫn chỉ có một phiên bản rùa — bạn có thể tìm ra cái nào là tess thật không? . nếu bạn không chắc, hãy viết một dòng mã mới sau vòng lặp for để thay đổi màu sắc của tess hoặc đặt bút của cô ấy xuống và vẽ một . ) 3. 7. Bảng chú giảithuộc tínhMột số trạng thái hoặc giá trị thuộc về một đối tượng cụ thể. Ví dụ, tess có màu. bề mặt canvas trong cửa sổ nơi diễn ra quá trình vẽ. luồng điều khiểnXem luồng thực hiện trong chương tiếp theo. câu lệnh vòng lặp for trong Python để thuận tiện lặp lại các câu lệnh trong phần thân của vòng lặp. listMột kiểu dữ liệu Python chứa một tập hợp các giá trị. Danh sách trong Python được đặt trong dấu ngoặc vuông ( [ , ] ) và . thân vòng lặp Bất kỳ số lượng câu lệnh nào được lồng trong một vòng lặp. Việc lồng nhau được chỉ ra bởi thực tế là các câu lệnh được thụt vào bên dưới câu lệnh vòng lặp for. biến vòng lặp Một biến được sử dụng như một phần của vòng lặp for. Nó được gán một giá trị khác nhau trên mỗi lần lặp của vòng lặp và được sử dụng như một phần của điều kiện kết thúc vòng lặp, thể hiệnMột đối tượng thuộc về một lớp. tess và alex là các thể hiện khác nhau của hàm lớp TurtlemethodA được gắn vào một đối tượng. Gọi hoặc kích hoạt phương thức khiến đối tượng phản hồi theo một cách nào đó, e. g. ,).loop bodyAny number of statements nested inside a loop. The nesting is indicated by the fact that the statements are indented under the for loop statement.loop variableA variable used as part of a for loop. It is assigned a different value on each iteration of the loop, and is used as part of the terminating condition of the loop,instanceAn object that belongs to a class. tess and alex are different instances of the class TurtlemethodA function that is attached to an object. Invoking or activating the method causes the object to respond in some way, e.g. chuyển tiếp là phương thức khi chúng ta nói tess. chuyển tiếp(100) . InvovMột đối tượng có các phương thức. Chúng tôi sử dụng động từ gọi có nghĩa là kích hoạt phương thức. Gọi một phương thức được thực hiện bằng cách đặt dấu ngoặc đơn sau tên phương thức, với một số đối số có thể. Vậy nên wn. exitonclick() là lời gọi của phương thức exitonclick . moduleMột tệp chứa các định nghĩa và câu lệnh Python dành cho việc sử dụng trong các chương trình Python khác. Nội dung của một mô-đun được cung cấp cho chương trình khác bằng cách sử dụng câu lệnh nhập. objectMột “thứ” mà một biến có thể tham chiếu tới. Đây có thể là một cửa sổ màn hình hoặc một trong những con rùa bạn đã tạo. rangeA hàm tích hợp trong Python để tạo chuỗi số nguyên. Nó đặc biệt hữu ích khi chúng ta cần viết một vòng lặp for thực thi một số lần cố định. điều kiện kết thúc Một điều kiện xảy ra khiến một vòng lặp ngừng lặp lại phần thân của nó. Trong vòng lặp for mà chúng ta đã thấy trong chương này, điều kiện kết thúc là khi không còn phần tử nào để gán cho biến vòng lặp.3. 8. bài tập
|