Vòng lặp while
Ở bài học về vòng lặp for với hàm range() , chúng ta đã biết được cách tạo ra vòng lặp để duyệt qua một dãy số (tạo ra bởi vòng lặp for). Vòng lặp for còn được sử dụng để duyệt qua các phần tử trong các tập hợp như List, Set, Tuple hoặc duyệt qua các ký tự trong một chuỗi (string). (Các kiến thức này chúng ta sẽ học ở các bài sau).
Như vậy, với vòng lặp for chúng ta cần biết trước dãy số, danh sách, chuỗi ký tự... Nghĩa là vòng for chỉ có thể dùng để tạo ra vòng lặp trên những dữ liệu có độ dài hữu hạn, hay nói cách khác, chương trình biết được trước là sẽ lặp bao nhiêu lần.
Tuy nhiên, có những trường hợp mà chương trình không thể biết trước được số lần lặp cần thực hiện, lấy một số ví dụ như sau:
- Chương trình yêu cầu người dùng nhập PIN để đăng nhập, người dùng có thể nhập 1 lần hoặc nhiều lần mới đúng, chương trình không biết trước được nên sẽ lặp lại yêu cầu cho đến khi PIN đúng.
- Chương trình yêu cầu người dùng nhập vào số điểm hợp lệ (từ 0 đến 10), chương trình sẽ không biết trước được người dùng sẽ nhập bao nhiêu lần, nên chỉ kiểm tra cho đến khi điểm hợp lệ thì sẽ thực hiện lưu điểm và tính toán.
Trong những tình huống như vậy thì chúng ta không thể dùng vòng lặp for mà sẽ dùng vòng lặp while . Xem xét các ví dụ ở trên thì chúng ta sẽ quyết định dùng vòng lặp while khi 2 điều kiện xảy ra:
- Vòng lặp không biết được trước số lần lặp
- Chương trình biết được điều kiện dừng vòng lặp (PIN đúng, điểm hợp lệ...)
1. Cú pháp
while condition:
# code that will be repeatedwhilelà từ khóa để bắt đầu vòng lặpconditionlà điều kiện để vòng lặp tiếp tục, điều kiện này là một biểu thức logic, sẽ trả về một trong hai giá trị True hoặc False. Nếu trả về True, tiếp tục vòng lặp, nếu trả False, kết thúc vòng lặp.
2. Ví dụ
Nhập PIN
# Giả sử PIN đúng là 123456
pin = ""
while pin != "123456":
pin = input("Nhập PIN: ")
print("Đăng nhập thành công")Trong ví dụ này, chương trình thực hiện vòng lặp while khi nào PIN còn khác "123456" (mã PIN đúng). Vòng lặp chỉ kết thúc khi PIN được nhập đúng, khi đó chương trình ra khỏi vòng lặp và in ra "Đăng nhập thành công".
Nhập điểm hợp lệ (0 đến 10)
score = -1
while score < 0 or score > 10:
score = float(input("Nhập điểm: "))
if (score < 5):
print("Không đạt")
else:
print("Đạt")Trong ví dụ này, chương trình sẽ lặp lại việc yêu cầu người dùng nhập điểm khi nào điểm còn không hợp lệ (nhỏ hơn 0 hoặc lớn hơn 10). Khi một điểm hợp lệ được nhập thì vòng lặp sẽ kết thúc và chạy tiếp các dòng code ngoài vòng lặp.