1 | 11 KHÓA PYTHON CƠ BẢN HOWKTEAM.COM Bài 27: VÒNG LẶP FOR TRONG PYTHON – PHẦN Xem học website để ủng hộ Kteam: Vòng lặp For Python – Phần Mọi vấn đề lỗi website làm ảnh hưởng đến bạn thắc mắc, mong muốn khóa học mới, nhằm hỗ trợ cải thiện Website Các bạn vui lòng phản hồi đến Fanpage How Kteam nhé! Dẫn nhập Trong trước, Kteam giới thiệu đến bạn VÒNG LẶP FOR TRONG PYTHON Và Kteam tiếp tục tìm hiểu với bạn Vòng lặp For Python Nội dung Để đọc hiểu tốt bạn cần: Cài đặt sẵn MÔI TRƯỜNG PHÁT TRIỂN CỦA PYTHON Xem qua CÁCH CHẠY CHƯƠNG TRÌNH PYTHON Nắm CÁCH GHI CHÚ BIẾN TRONG PYTHON CÁC KIỂU DỮ LIỆU ĐƯỢC GIỚI THIỆU TRONG PYTHON CÂU ĐIỀU KIỆN IF TRONG PYTHON VÒNG LẶP WHILE VÒNG LẶP FOR TRONG PYTHON Copyright © Howkteam.com KHĨA PYTHON CƠ BẢN HOWKTEAM.COM | 11 Bạn Kteam tìm hiểu nội dung sau Kiểu liệu range (dãy số) Sự khác sequence scan indexing scan Comprehension Giới thiệu hàm enumerate Kiểu liệu range (dãy số) Bạn gặp kiểu liệu suốt phần liên quan đến comprehension liên quan đến iterator object Đây kiểu liệu đặc biệt ta lấy nhiều giá trị từ chất khơng lưu giữ giá trị mà lấy Trước đến với điều thú vị này, ngó tổng quát kiểu liệu Chúng ta có hai cách khởi tạo Cách khởi tạo thứ Cú pháp: range(stop) Với cách này, ta tạo dãy số bắt đầu số kết thúc stop – Dãy số cấp số cộng với công sai >>> k = range(3) >>> type(k) >>> k[0] # range có hỗ trợ indexing >>> k[1] >>> k[-1] Copyright © Howkteam.com KHÓA PYTHON CƠ BẢN HOWKTEAM.COM | 11 >>> k[3] Traceback (most recent call last): File "", line 1, in IndexError: range object index out of range >>> list(k) [0, 1, 2] >>> k[0] = 10 # range object hasable object Traceback (most recent call last): File "", line 1, in TypeError: 'range' object does not support item assignment Cách khởi tạo thứ hai Cú pháp: range(start, stop[, step]) Với cú pháp này, ta tạo dãy số bắt đầu start kết thúc stop – Dãy số cấp số cộng với công sai Trong trường hợp step (buộc phải khác 0) đưa vào công sai step >>> list(range(2, 5)) [2, 3, 4] >>> list(range(4, 1, -1)) [4, 3, 2] >>> list(range(2, -3, -1)) [2, 1, 0, -1, -2] Và điều thú vị hàm range Hãy tạo List chứa dãy số cộng từ tới số lớn Đương nhiên có Range có dãy số tương tự Copyright © Howkteam.com | 11 KHÓA PYTHON CƠ BẢN HOWKTEAM.COM >>> k = range(9999999) # máy bạn có khỏe cho số lớn tí để thấy rõ khác biệt >>> lst = list(k) Tiếp đến, dùng toán tử in >>> 9999999999 in k False >>> 9999999999 in lst False Nếu bạn chưa thấy thử số to chút Còn thấy rồi, tốc độ Chệnh vài mili giây Đối với máy tính đại, vài mili giây đủ để làm nhiều thứ Vậy điều làm nên khác biệt đó? Range lớp thiết kế riêng để lưu giữ dãy số Vậy nên kĩ sư Python sử dụng thuật tốn để có linh hoạt Mỗi lần bạn lấy giá trị đối tượng thuộc hàm range đối tượng lấy giá trị start, stop, step vài thứ khác để tính tốn sinh số Để hiểu rõ bạn tham khảo câu hỏi Stack Overflow Why is “1000000000000000 in range(1000000000000001)” so fast in Python 3? Sử dụng range để duyệt List, Tuple, Chuỗi Chúng ta sử dụng dãy số để dùng indexing lấy giá trị List, Tuple Chuỗi Chúng ta có hàm range sinh dãy số Copyright © Howkteam.com | 11 KHÓA PYTHON CƠ BẢN HOWKTEAM.COM Kết hợp chúng lại, ta duyệt List, Tuple Chuỗi: >>> lst = [s, (1, 2, 3), {'abc', 'xyz'}] >>> for i in range(len(lst)): print(lst[i]) How Kteam (1, 2, 3) {'abc', 'xyz'} Sự khác sequence scan indexing scan Trong trước, bạn thấy ta khơng cần dùng tới hàm range duyệt hết phần tử List Vậy điều khiến đôi lúc phải dùng tới hàm range để xử lí List? Đó ta cần update (cập nhật) List Hãy xem hai ví dụ sau đây: Đầu tiên sequence scan >>> lst = [1, 2, 3] >>> for value in lst: value += >>> lst [1, 2, 3] Biến variable biến riêng lẻ, nên cập nhật List ban đầu Còn indexing scan >>> lst = [1, 2, 3] >>> for i in range(len(lst)): lst[i] += Copyright © Howkteam.com | 11 KHĨA PYTHON CƠ BẢN HOWKTEAM.COM >>> lst [2, 3, 4] Hãy lựa chọn cách sử dụng vòng lặp cách thơng minh phù hợp với mục đích Comprehension Có lẽ comprehension khơng cịn phức tạp với bạn Comprehension công cụ hiệu Python để xử lí nhiều việc mà cần dịng Bên cạnh Người ta so sánh comprehension đoạn code với chức tương tự comprehension có tốc độ nhanh Lời tác giả: Mọi người phải Ồ lên thấy bạn có comprehension tốn dòng thời gian thực thi nhanh Thế nên bạn nên luyện tập sử dụng comprehension thường xuyên Sau kết hợp với anonymous function lambda bạn tạo thứ mang đậm thương hiệu one-liner Python khơng khó Quan trọng bạn phải nằm lòng API Python (các chức mà ngôn ngữ hỗ trợ) thứ Ta tổng quát đơn giản cú pháp comprehension sau Cú pháp: [ output-expression for-statement optional-predicate ] Copyright © Howkteam.com | 11 KHĨA PYTHON CƠ BẢN HOWKTEAM.COM Ở Kteam sử dụng [ cho List, bạn sử dụng cặp ngoặc khác phải để output-expression phù hợp với kiểu liệu Như dict bạn phải để output-expression cặp key-value Một số ví dụ >>> [' '.join((a.capitalize(), b.upper() + c.lower())) for a, b, c in [('how', 'kteam', 'EDUCATION'), ('chia', 'sẻ', 'FREE')]] # bỏ trống optional-predicate ['How KTEAMeducation', 'Chia SẺfree'] Nếu khơng sử dụng comprehension sau: >>> lst = [] >>> for a, b, c in [('how', 'kteam', 'EDUCATION'), ('chia', 'sẻ', 'FREE')]: a = a.capitalize() b = b.upper() c = c.lower() lst.append(' '.join((a, b + c))) >>> lst ['How KTEAMeducation', 'Chia SẺfree'] >>> {key:value + for key, value in (('Kteam', 69), ('Tèo', 50), ('Tũn', 14), ('Free Education', 93)) if value % != 0} {'Kteam': 70, 'Free Education': 94} Khi không sử dụng comprehension >>> dic = {} >>> for key, value in (('Kteam', 69), ('Tèo', 50), ('Tũn', 14), ('Free Education', 93)): if value % != 0: dic[key] = value + >>> dic {'Kteam': 70, 'Free Education': 94} Copyright © Howkteam.com | 11 KHĨA PYTHON CƠ BẢN HOWKTEAM.COM Giới thiệu hàm enumerate Giả sử bạn có danh sách học sinh >>> student_list = ['Long', 'Trung', 'Giàu', 'Thành'] Việc in danh sách đơn giản >>> for student in student_list: print(student) Long Trung Giàu Thành Nhưng khơng rõ ràng cho danh sách khơng có số thứ tự Bạn nghĩ đến việc sử dụng hàm range Đó cách, Python có hỗ trợ cho bạn hàm hay enumerate Hàm có cú pháp sau: Cú pháp: enumerate(iterable[, start]) Nếu start khơng gửi vào mặc định Hàm generator nhờ câu lệnh yield hàm Nó tạo giá trị cặp gồm số thứ tự giá trị có cấu trúc sau (start + 0, seq[0]), (start + 1, seq[1]), (start + 2, seq[2]), Ví dụ: Copyright © Howkteam.com | 11 KHĨA PYTHON CƠ BẢN HOWKTEAM.COM >>> gen = enumerate(student_list) >>> gen >>> list(gen) [(0, 'Long'), (1, 'Trung'), (2, 'Giàu'), (3, 'Thành')] Và đó, ta sử dụng vòng for sau >>> for idx, student in enumerate(student_list): print(idx, '=>', student) => Long => Trung => Giàu => Thành Nếu bạn khơng thích số ta thay đổi >>> for idx, student in enumerate(student_list, 1): print(idx, '=>', student) => Long => Trung => Giàu => Thành Củng cố học Đáp án trước Bạn tìm thấy câu hỏi phần CÂU HỎI CỦNG CỐ VỊNG LẶP FOR TRONG PYTHON Copyright © Howkteam.com 10 | 11 KHÓA PYTHON CƠ BẢN HOWKTEAM.COM Kết Chính xác giá trị thứ hai biến iter_ >>> next(iter_) Python ngôn ngữ thơng dịch Vậy nên đọc câu lệnh Và đề cập cách làm việc vịng lặp Nó lấy giá trị từ sequence gán cho biến vào for-block Vậy nên sau có giá trị, vịng for-block có lỗi phát sinh Khi đó, vừa lấy giá trị biến iter_ Vậy nên dùng hàm next kết kết thứ hai >>> set_ = {5, 8, 1, 9, 4} >>> sum_of_set = >>> for value in set_: sum_of_set += value >>> sum_of_set 27 Câu hỏi củng cố Sử dụng sequence scan để thay đổi phần tử phần tử List thành None >>> lst = [[1, 2, 3], [4, 5, 6]] Sau thay đổi >>> lst [[None, 2, 3], [None, 5, 6]] Một spiral matrix ma trận vuông nxn (n cột, n hàng) gồm N2 số tự nhiên Trong số tăng xung quanh mép mảng xoắn bên Ví dụ với spiral matrix 5x5 sau: Copyright © Howkteam.com 11 | 11 KHÓA PYTHON CƠ BẢN HOWKTEAM.COM 15 14 13 12 16 17 18 23 24 19 22 21 20 11 10 Viết đoạn script yêu cầu nhập số n (chính số cột - hàng) spiral matrix Sau dùng vịng lặp tạo spiral matrix in shell (Nếu in số có chữ số 0, 1, 2, thêm trước chữ số -> 00, 01, 02,…) Với spiral matrix in sau: 00 15 14 13 12 01 16 23 22 11 02 17 24 21 10 03 18 19 20 09 04 05 06 07 08 Đáp án phần trình bày Tuy nhiên, Kteam khuyến khích bạn tự trả lời câu hỏi để củng cố kiến thức thực hành cách tốt nhất! Kết luận Qua viết này, Bạn biết nhiều VÒNG LẶP FOR TRONG PYTHON Ở viết sau Kteam giới thiệu với bạn HÀM TRONG PYTHON Cảm ơn bạn theo dõi viết Hãy để lại bình luận góp ý để phát triển viết tốt Đừng quên “Luyện tập – Thử thách – Khơng ngại khó” Copyright © Howkteam.com ... thực hành cách tốt nhất! Kết luận Qua viết này, Bạn biết nhiều VÒNG LẶP FOR TRONG PYTHON Ở viết sau Kteam giới thiệu với bạn HÀM TRONG PYTHON Cảm ơn bạn theo dõi viết Hãy để lại bình luận góp ý... Trung => Giàu => Thành Củng cố học Đáp án trước Bạn tìm thấy câu hỏi phần CÂU HỎI CỦNG CỐ VÒNG LẶP FOR TRONG PYTHON Copyright © Howkteam.com 10 | 11 KHÓA PYTHON CƠ BẢN HOWKTEAM.COM Kết Chính xác... dịch Vậy nên đọc câu lệnh Và đề cập cách làm việc vòng lặp Nó lấy giá trị từ sequence gán cho biến vào for- block Vậy nên sau có giá trị, vịng for- block có lỗi phát sinh Khi đó, vừa lấy giá trị biến