-
Tuần 1 - Ngày 10 tháng 7 năm 2019
- Giới thiệu về khóa học
- Hướng dẫn viết chương trình Python trên web
- Hướng dẫn sử dụng PyCharm
- Tổng quan về Python
- Kỹ năng sử dụng Google search
- Viết tài liệu kỹ thuật dùng Markdown
- Hàm xây dựng sẵn trong Python – math và random
- Cài đặt các công thức toán cơ bản
- Xây dựng hàm trong python
- Điều kiện if-else
- Những lỗi thường gặp trong Python
- Reading assignment
-
Tuần 2 - Ngày 17 tháng 7 năm 2019
-
Tuần 3 - Ngày 24 tháng 7 năm 2019
-
Tuần 4 - Ngày 31 tháng 7 năm 2019
-
Tuần 5 - Ngày 7 tháng 8 năm 2019
-
Advanced Python
-
Tuần 6 - Ngày 14 tháng 8 năm 2019
-
Tuần 7 - Ngày 28 tháng 8 năm 2019
-
Tuần 8
-
Tuần 9
Vòng lặp for và while
Vòng lặp for
Vòng lặp for
trong Python cho phép chúng ta thực thi một khối code nhiều lần hay duyệt các phần tử một iterable
. Cú pháp của vòng lặp for
như sau
trong đó iterable có thể là list
, range
, hay file
.
Ví dụ, đoạn code sau thực thi khối code trong for
5 lần.
# dùng hàm range để tạo một iterable có giá trị 0,1,2,3,4 for i in range(5): print('Hello AI VIETNAM') # chúng ta có thể sử dụng giá trị i trong mỗi vòng lặp print('Giá trị hiện tại của i là:', i)
Kết quả
Hello AI VIETNAM Giá trị hiện tại của i là: 0 Hello AI VIETNAM Giá trị hiện tại của i là: 1 Hello AI VIETNAM Giá trị hiện tại của i là: 2 Hello AI VIETNAM Giá trị hiện tại của i là: 3 Hello AI VIETNAM Giá trị hiện tại của i là: 4
Nếu chúng ta không qua tâm đến giá trị của biến i
, chúng ta có thể dùng ký tự _
trong for
như sau
# dùng hàm range để tạo một iterable có giá trị 0,1,2,3,4 for _ in range(5): print('Hello AI VIETNAM') print('làm gì đó ...')
Kết quả
Hello AI VIETNAM làm gì đó ... Hello AI VIETNAM làm gì đó ... Hello AI VIETNAM làm gì đó ... Hello AI VIETNAM làm gì đó ... Hello AI VIETNAM làm gì đó ...
Chúng ta có thể sử dụng từ khóa break
để thoát khỏi vòng lặp for
. Từ khóa break
thường được dùng kết hợp với điều kiện if
. Ví dụ sau duyệt các phần tử của một iterable
, và khi gặp phần tử có giá trị là 5 thì chương trình sẽ thoát vòng lặp for
.
# duyệt phần tử trong range(10) for i in range(10): # hỏi phần tử i có bằng 5 không? if i == 5: # nếu bằng thì thoát vòng lặp for này break # làm gì đó với i print('Giá trị i là', i)
Kết quả
Giá trị i là 0 Giá trị i là 1 Giá trị i là 2 Giá trị i là 3 Giá trị i là 4
Một từ khóa khác cũng được dùng phổ biến trong các vòng lặp là từ khóa continue
. Khi đang thực thi khối code k
trong vòng lặp for
và gặp từ khóa này, chương trình sẽ không thực thi phần code còn lại (phần code chưa thực thi) của k
mà quay lại phần biểu thức for
. Vi dụ sau duyệt các phần tử trong một iterable
và khi phần tử có giá trị là 5, từ khóa continue
sẽ được gọi.
# duyệt phần tử trong range(10) for i in range(10): # hỏi phần tử i có bằng 5 không? if i == 5: # nếu bằng thì gọi continue # phần code sau continue sẽ không # được thực thì trong lần lặp này continue # làm gì đó với i print('Giá trị i là', i)
Kết quả
Giá trị i là 0 Giá trị i là 1 Giá trị i là 2 Giá trị i là 3 Giá trị i là 4 Giá trị i là 6 Giá trị i là 7 Giá trị i là 8 Giá trị i là 9
Chúng ta thấy rằng khi biến i
có giá trị là 5, từ khóa continue
được gọi và phần code print('Giá trị i là', i)
không được thực thi. Do đó, giá trị i = 5
không được in ra.
Mô phỏng búng đồng xu
Chúng ta sẽ mô phỏng việc búng đồng tiền xu để hiểu hơn về hàm random.random()
. Đồng tiền xu có 2 mặt, mặt trước và mặt sau. Chương trình được yêu cầu đếm số lần xuất hiện của mặt trước và mặt sau cho 1000 lần thử.
Chúng ta sẽ dùng vòng lặp for
, mỗi lần lặp, chương trình sẽ tạo ra 1 số ngẫu nhiên n
nằm trong khoảng 0 và 1 bằng hàm random.random()
. Mặt sau xuất hiện khi n < 0.5
, và ngược lại, mặt trước xuất hiện. Sau 1000 lần thử, in số lần xuất hiện mặt trước và mặt sau.
Thảo luận
1) Hàm random.random()
sinh ra số ngẫu n
có phân bố đều (uniform distribution) trong khoảng `[0,1)` (không bao gồm số 1).
2) Mặt sau xuất hiện khi n < 0.5
. Điều này đồng nghĩa với việc miền giá trị cho việc mặt sau xuất hiện
là một đoạn [0, 0.5)
. Lập luận tương tự, miền giá trị cho việc mặt trước xuất hiện
là [0.5, 1)
.
3) Theo xác suất, khi số lần thử đủ lớn thì số lần xuất hiện mặt trước và mặt sau sẽ xấp xỉ bằng nhau vì miền giá trị của 2 trường hợp bằng nhau.
Trước khi xem phần code mẫu bên dưới, các bạn nên tự cài trước bài toán này.
Phần code mẫu
# aivietnam.ai import random # Tổng số lần búng đồng xu total_flips = 0 # số lần mặt sau xuất hiện num_tails = 0 # số lần mặt trước xuất hiện num_heads = 0 for _ in range(1000): # sinh số ngẫu nhiên nằm trong khoảng [0,1) n = random.random() if n < 0.5: num_tails = num_tails + 1 else: num_heads = num_heads + 1 # code ở vị trí này không thuộc khối else total_flips = total_flips + 1 # code ở ví trị này không thuộc khối code cho for # vòng lặp for đã thực hiên xong print('total_flips: %d' % total_flips) print('num_tails: %d' % num_tails) print('num_heads: %d' % num_heads)
Kết quả
total_flips: 1000 num_tails: 525 num_heads: 475
Bài tập 1: Các bạn làm bài tương tự với con xúc xắc. Con xúc xắc có 6 mặt (mặt số 1 đến số 6). Viết chương trình mô phỏng ném con xúc xắc 10000 lần và đếm số lần xuất hiện của mỗi mặt.
Bài tập 2: Các bạn làm lại bài mô phỏng búng đồng xu với điều kiện cho trước là khả năng xuất hiện của mặt trước là khoảng 70% và khả năng xuất hiện của mặt sau là khoảng 30%.
Vòng lặp while
Vòng lặp while có cú pháp như sau
Ví dụ chúng ta muốn dùng while để thực thi một đoạn code 5 lần
# tạo biến i i = 0 # bắt đầu vòng lặp while while i<5: print('Làm gì đó ...') i = i + 1 print('Phần code này khi đã thoát while')
- Ban đầu biến i được khởi tạo bằng 0.
- Khi vào vòng lặp while, điều kiện i < 5 được kiểm tra. Lúc này, i = 0 nên biểu thức i < 5 (tức 0 < 5) trả về True, và phần code trong while được thực hiện. Cụ thể, string ‘làm gì đó …’ được in ra và i được gán giá trị mới là 1.
- Sau khi phần code trong while thực thi xong, điều kiện i < 5 được kiểm tra. Lúc này, i = 1 nên biểu thức i < 5 (tức 1 < 5) trả về True, và phần code trong while được thực hiện (string ‘làm gì đó …’ được in ra và i được gán giá trị mới là 2.)
- …
- …. string ‘làm gì đó …’ được in ra và i được gán giá trị mới là 5.
- Sau đó, điều kiện i < 5 được kiểm tra. Lúc này, i = 5 nên biểu thức i < 5 (tức 5 < 5) trả về False, và thoát vòng lặp while. Chương trình tiếp tục thực thi phần code bên ngoài, sau while.
Quá trình thực thi có thể biểu diễn bằng flowchart như sau
Kết quả
Làm gì đó ... Làm gì đó ... Làm gì đó ... Làm gì đó ... Làm gì đó ... Phần code này khi đã thoát while
Câu hỏi nhanh: Điều gì xảy ra khi bỏ dòng code i = i + 1
trong while?
Dùng while-True-break
Thỉnh thoảng chúng ta cần chạy lặp một đoạn code cho đến khi nào một sự kiện xảy ra thì dừng lại. Ví dụ, chương trình sau lặp lại việc sinh ra một số nguyên, ngẫu nhiên nằm trong đoạn [0, 10]. Vòng lặp dừng lại khi số ngẫu nhiên sinh ra là số 5.
import random # cho vòng lặp chạy vô tận while True: # sinh số ngẫu nhiêu num = random.randint(0,10) print('Số sinh ra có giá trị là', num) # kiểm tra num có bằng 5 hay không? if num == 5: # nếu có thì thoát khỏi while break; print('Đã thoát khỏi while')
Kết quả
Số sinh ra có giá trị là 4 Số sinh ra có giá trị là 3 Số sinh ra có giá trị là 8 Số sinh ra có giá trị là 1 Số sinh ra có giá trị là 0 Số sinh ra có giá trị là 5 Đã thoát khỏi while
Khi dùng vòng lặp while, các bạn cần để ý đến điều kiện thoát vòng lặp. Đây là lỗi khá phổ biến nên các bạn cần chú ý.
Bài tập: Viết chương trình sinh ra 1 số nguyên, ngẫu nhiên n nằm trong đoạn [0, 10] và n khác 5.