Category Archives: Python

Phụ lục: Lumpy

Trở về Mục lục cuốn sách

Xuyên suốt cuốn sách, tôi đã dùng những biểu đồ nhằm thể hiện trạng thái của các chương trình đang chạy.

Ở Mục 2.2, chúng ta dùng một biểu đồ trạng thái để cho thấy tên và giá trị của các biến. Trong Mục 3.10 tôi có giới thiệu một biểu đồ ngăn xếp, trong đó thể hiện mỗi khung cho một lần gọi hàm. Từng khung đều thể hiện các tham số và biến địa phương của hàm hoặc phương thức. Những biểu đồ ngăn xếp cho hàm đệ quy có ở các Mục 5.9 và 6.5.

Mục 10.2 cho thấy dáng vẻ của một danh sách trong biểu đồ trạng thái, Mục 11.4 cho thấy từ điển, và Mục 12.6 thể hiện hai cách biểu diễn một bộ. Tiếp tục đọc

Advertisements

3 phản hồi

Filed under Think Python

Tài liệu cần tìm đọc thêm về Python

Trở về Mục lục cuốn sách

Như vậy từ đây ta sẽ đi tiếp ra sao? Có nhiều hướng theo đuổi nhằm mở rộng vốn kiến thức của bạn về Python nói riêng và khoa học máy tính nói chung.

Những ví dụ trong sách này được cố ý viết một cách đơn giản, nhưng có lẽ chúng không thể hiện được những tính năng lý thú nhất của Python. Sau đây là một vài phần mở rộng của Python cùng những gợi ý về dự án lập trình dùng đến chúng. Tiếp tục đọc

%(count) bình luận

Filed under Think Python

Tạo ra kiểu dữ liệu mới

Trở về Mục lục cuốn sách

Các ngôn ngữ lập trình hướng đối tượng cho phép lập trình viên tạo nên những kiểu dữ liệu biểu hiện giống như những kiểu dữ liệu lập sẵn. Ta sẽ khám phá khả năng này bằng cách lập nên một lớp Fraction hoạt động rất giống với những kiểu dữ liệu số có sẵn như số nguyên, số nguyên dài và dạng dấu phẩy động.

Các phân số, còn gọi là số hữu tỉ, là những giá trị có thể được biểu diễn bằng tỉ số giữa hai số nguyên, như 5/6. Số ở trên được gọi là tử số còn số ở dưới là mẫu số.

Ta bắt đầu bằng việc định nghĩa một lớp Fraction với một phương thức khởi tạo để cung cấp các số nguyên là tử số và mẫu số: Tiếp tục đọc

2 phản hồi

Filed under Think Python

Cây

Trở về Mục lục cuốn sách

Cũng giống như danh sách liên kết, cây được tạo thành từ các nút. Một loại cây thông dụng là cây nhị phân, trong đó mỗi nút có chứa một tham chiếu đến hai nút khác (vốn có thể là nút rỗng). Những tham chiếu này gọi là các cây con trái và phải. Cũng như nút của danh sách, mỗi nút trên cây cũng chứa một khoang. Sơ đồ trạng thái cho một cái cây như sau:

Để tránh làm rối hình vẽ, chúng ta thường bỏ qua các cây rỗng (None).

Tiếp tục đọc

%(count) bình luận

Filed under Think Python

Hàng đợi

Trở về Mục lục cuốn sách

Chương này trình bày hai kiểu dữ liệu trừu tượng (ADT), đó là Hàng đợi và Hàng đợi Ưu tiên. Ngoài đời thực, hàng đợi là một dòng người chờ được phục vụ. Đa số các trường hợp thì đứng đầu hàng sẽ là người kế tiếp được phụ vụ. Tuy nhiên vẫn còn những ngoại lệ. Ở sân bày, những người lên chuyến bay sắp cất cánh đôi khi được làm thủ tục dù họ đứng ở giữa hàng. Ở siêu thị, một người mua hàng lịch sự có thể nhường người mua hàng có ít món đồ được thanh toán trước.

Quy tắc để phân định tiếp theo đến lượt ai được gọi là chính sách xếp hàng. Chính sách xếp hàng đơn giản nhất được gọi là FIFO, (“first-in-first-out”, vào trước ra trước). Chính sách xếp hàng tổng quát là xếp hàng ưu tiên, trong đó từng khách hàng được gán cho một quyền ưu tiên và người khác mang quyền ưu tiên cao nhất sẽ đi trước, bất kể họ đến xếp hàng lúc nào. Ta nói rằng đây là chính sách tổng quát nhất vì quyền ưu tiên có thể được dựa vào bất kì điều gì: chuyến bay khởi hành lúc nào; lượng hàng người đang mua; hoặc người khách quan trọng đến mức nào. Dĩ nhiên, không phải mọi chính sách xếp hàng đều “công bằng”, nhưng sự công bằng là dưới cái nhìn của người quan sát. Tiếp tục đọc

%(count) bình luận

Filed under Think Python

Ngăn xếp

Trở về Mục lục cuốn sách

Những kiểu dữ liệu trừu tượng

Đến giờ, các kiểu dữ liệu bạn đã từng gặp đều là cụ thể, theo nghĩa là chúng ta đã hoàn toàn chỉ định cách thiết lập chúng. Chẳng hạn, lớp Card để biểu diễn một lá bài bằng hai số nguyên. Như ta đã thảo luận lúc đó, đây không phải là cách duy nhất để biểu diễn một lá bài; còn nhiều cách thiết lập khác nữa.

Một kiểu dữ liệu trừu tượng, hay ADT (Abstract Data Type), quy định một tập hợp các phép tính (hoặc phương thức) và ngữ nghĩa của phép tính (cho biết chúng làm việc gì), nhưng không quy định cách thiết lập những phép tính đó. Đây chính là điều khiến cho chúng trở nên trừu tượng. Tiếp tục đọc

%(count) bình luận

Filed under Think Python

Danh sách liên kết

Trở về Mục lục cuốn sách

Tham chiếu nhúng

Ta đã từng thấy những ví dụ về các thuộc tính để chỉ đến những đối tượng; ta gọi chúng là các tham chiếu nhúng (xem thêm module copy trong Chương: Lớp và đối tượng). Một cấu trúc dữ liệu thông dụng, danh sách liên kết, đã tận dụng đặc điểm này.

Danh sách liên kết được hợp thành từ các nút, trong đó mỗi nút có chứa tham chiếu đến nút kế tiếp trong danh sách. Ngoài ra, mỗi nút cũng có một đơn vị dữ liệu trong một khoang (cargo).

Danh sách liên kết được gọi là cấu trúc dữ liệu đệ quy vì lời định nghĩa của nó mang tính đệ quy.

Một danh sách liên kết hoặc là:

  • một danh sách rỗng, biểu diễn bởi None, hay
  • một nút có chứa một đối tượng khoang và một tham chiếu đến một danh sách liên kết.

Cấu trúc dữ liệu đệ quy rất phù hợp với các phương pháp đệ quy. Tiếp tục đọc

2 phản hồi

Filed under Think Python

Bổ sung Think Python: trò chơi bài Old Maid

Trở về Mục lục cuốn sách

Nội dung trong bài này phục vụ Chương 18: Thừa kế của cuốn sách Think Python, nhưng thay vì trò chơi Poker là một trò chơi có tên Old Maid.

Trong chương này ta sẽ giới thiệu cách dùng thừa kế với vai trò là một phần của chương trình chơi bài Old Maid. Một trong những mục tiêu đặt ra là viết mã lệnh để có thể sử dụng lại khi xây dựng các chương trình chơi bài khác. Tiếp tục đọc

%(count) bình luận

Filed under Think Python

Bổ sung Think Python: Ma trận

Trở về Mục lục cuốn sách

Phần bổ sung này lấy từ các chương 8 và 10 của cuốn How to think like a computer scientist

Danh sách lồng ghép

Danh sách lồng ghép là một danh sách xuất hiện với vai trò một phần tử trong một danh sách khác. Trong danh sách sau đây, phần tử thứ ba của nó là danh sách lồng ghép:

>>> list = ["hello", 2.0, 5, [10, 20]]

Tiếp tục đọc

%(count) bình luận

Filed under Think Python

Bổ sung Think Python: bảng số, histogram

Bài này trình bày những nội dung rải rác trong các chương của cuốn sách How to think like a computer scientist mà không có trong cuốn Think Python. Dĩ nhiên, nội dung bản dịch này cũng được phát hành theo Giấy phép tài liệu tự do GNU.

Bài post này gồm hai phần. Trước hết, ta áp dụng phép lặp để lập bảng tính nhân. Phần thứ hai là phát sinh một loạt số ngẫu nhiên rồi phân chia vào các nhóm.

Trở về Mục lục cuốn sách

Bảng số liệu

Một trong những công việc thích hợp với dùng vòng lặp, đó là phát sinh ra bảng số liệu. Trước khi máy tính trở nên phổ biến, mọi người đã phải tính tay các phép logarit, sin, cosin, và những hàm toán học khác. Để đơn giản hóa việc này, sách toán thường in kèm những bảng dài liệt kê giá trị các hàm nói trên. Việc tạo ra các bảng như vậy rất chậm và nhàm chán, và dễ mắc phải nhiều lỗi. Tiếp tục đọc

%(count) bình luận

Filed under Think Python