Reportar esta app

Description

Các cấu trúc lặp trong Python bao gồm hai loại: lặp với số bước xác định (while). Nhìn chung hai cấu trúc lặp trong Python tương đối gần gũi với các cấu trúc lặp trong C hay C#.

Cấu trúc lặp while

Hãy xem ví dụ sau:


1
2
3
4
word = ''
while(word.lower() != 'close'):
    word = input('Enter a word: ')
    print(f'You have typed "{word}"')

Trong ví dụ này chúng ta liên tục yêu cầu người dùng nhập vào một từ. Nếu người dùng nhập từ ‘close’ thì sẽ kết thúc vòng lặp. Nếu người dùng nhập từ khác thì sẽ yêu cầu nhập lại.

Chúng ta không biết khi nào người dùng sẽ nhập ‘close’, và cũng có thể là không bao giờ. Vì vậy, vòng lặp while được gọi là vòng lặp với số bước không xác định trước.

Biến word đóng vai trò là biến điều khiển cho biểu thức điều kiện.

Hãy xem một ví dụ khác:


1
2
3
4
5
6
7
# tính tổng các số từ 1 đến 99
sum =
i = 1
while i < 100:
    sum += i
    i += 1
print(sum)

Trong ví dụ này chúng ta tính tổng các số từ 1 đến 99. Để thực hiện việc này chúng ta sử dụng một biến i với vai trò biến đếm. Biến i ban đầu nhận giá trị 1. Qua mỗi vòng lặp i sẽ tăng thêm 1 đơn vị, và biến sum sẽ cộng thêm giá trị bằng i. Quá trình này sẽ lặp đi lặp lại chừng nào i vẫn nhỏ hơn 100. Đến khi i đạt giá trị 100 thì vòng lặp kết thúc.

Cấu trúc while của Python là một lệnh phức hợp với một mệnh đề. Trong đó, header là while < biểu thức logic>. Biểu thức logic là một loại biểu thức mà kết quả trả về thuộc kiểu bool (giá trị True/ False). Trong các ví dụ trên, biểu thức logic là i<100 và char.lower()!= ‘close’.

Chừng nào biểu thức logic còn nhận giá trị True thì sẽ thực hiện danh sách lệnh ở phần suite.

Để tránh tạo thành vòng lặp vô tận, bên trong danh sách lệnh của vòng lặp while phải có lệnh có tác dụng làm thay đổi giá trị của biểu thức logic.

Trong ví dụ thứ nhất, chúng ta liên tục yêu cầu người dùng nhập vào giá trị mới cho biến char. Điều này đảm bỏa khả năng thoát khỏi vòng lặp.

Tham khảo thêm ngay  Kiểu chuỗi ký tự (String) trong Python

Trong ví dụ thứ hai, chúng ta làm biến đổi giá trị cảu i qua mỗi vòng lặp (tăng thêm 1 đơn vị). Điều này đảm bảo đến một lúc nào đó i sẽ có giá trị lớn hơn 100 và kết thúc vòng lặp.

Cấu trúc lặp for

Hãy xem ví dụ sau:


1
2
3
4
5
6
7
8
9
10
11
# in ra các số trong phạm vi từ 1 đến 100
for n in range(100):    
    print(n + 1, end = '\t')

# in ra các số trong phạm vi từ 100 đến 199
for n in range(100, 200):
    print(n, end = '\t')

# in ra các số lẻ trong phạm vi từ 1 đến 99
for n in range(1, 100, 2):
    print(n, end = '\t')

Cấu trúc for cho phép lặp lại việc thực hiện khối code theo số lần xác định sẵn từ đầu.

Cấu trúc for cũng là một lệnh phức hợp với một clause (khác với cấu trúc rẽ nhánh if có nhiều clause) trong đó header có dạng for <biến chạy> in range(): Suite trong các ví dụ trên chỉ chứa một hàm print().

Số lần lặp và cách thức lặp được tạo ra bởi hàm range().

Hàm range() trả về một biến chứa một dãy các giá trị nằm trong một khoảng xác định theo quy luật. Hàm này có 3 dạng:

  1. range(stop): nhận 1 tham số là giá trị cuối của dãy và trả về dãy số [0,stop-1]. Ví dụ range (5) sẽ trả lại dãy số 0,1,2,3,4. Bước nhảy giữa các giá trị kế tiếp là 1.
  2. range(start,stop): nhận 2 tham số là giá trị đầu và cuối của dãy, trả về dãy [start, top-1]. Ví dụ, range (1,5) sẽ trả lại dãy 1,2,3,4 (bước nhảy kế tiếp là 1).
  3. range (start,stop,step): tương tự như trường hợp 2 những bước nhảy được xác định bởi biến step. Ví dụ, range (1,10,2) sẽ trả lại dãy 1,3,5,7,9.

Trong hàm range, start, stop và step có thể nhận cả giá trị âm và dương:

  • Nếu step nhận giá trị âm (và start>stop) sẽ tạo ra dãy giảm dần (Ví dụ range (0,-5,-1) sẽ tạo ra dãy 0,-1,-2,-3,-4
  • Nếu stop < start và step dương, hoặc stop > start và step âm, sẽ tạo ra chuỗi trống. Ví dụ range (2,-3,1) và range (2,3,-1) đều không tạo ra phần tử nào.
Tham khảo thêm ngay  Hướng dẫn tự học lập trình Python

Với danh sách giá trị mà hàm range() tạo ra như trên, cấu trúc for sẽ lần lượt lấy từng giá trị gán cho biến chạy ( biến n trong các ví dụ trên) và thực hiện khối lệnh. Như vậy số lần lặp đã xác định sẵn từ lúc gọi hàm range().

Sử dụng vòng lặp for với các kiểu danh sách khác.

Ở trên chúng ta sử dụng for với các giá trị lấy từ danh sách tạo bởi hàm range(). Trong Python, nhiều loại dữ liệu tập hợp có thể sử dụng cùng vòng for.

Ví dụ:


1
2
for c in 'Hello world':
    print(c, end = '\t')

Trong ví dụ trên danh sách giá trị lại là xâu ký tự ‘Hello world’. Biến chạy sẽ lần lượt chạy từng ký tự từ xâu, bắt đầu từ ký tự đầu tiên ‘H’ đến ký tự cuối cùng ‘d’. Trong ví dụ trên chúng ta chỉ đơn giản là in ký tự tương ứng ra console.

Hãy xem một ví dụ khác:


1
2
3
companies = ['Apple', 'Google', 'Microsoft', 'Huawei', 'Yandex', 'Facebook']
for c in companies:
    print(c)

Trong ví dụ trên, companies là một biến kiểu danh sách list. Kiểu dữ liệu này chúng ta chưa học nhưng bạn có thể hình dung nó tương tự như kiểu mảng của C. Biến kiểu list cũng có thể trở thành danh sách dữ liệu cho vòng lặp for. Khi này biến chạy c sẽ lần lượt nhận các giá trị trong danh sách theo thứ tự.

Một ví dụ khác:


1
2
3
4
5
# tính tổng các số dương từ một tuple
total =
for num in (-22.0, 3.5, 8.1, -10, 0.5):
    if num > :
        total = total + num

Trong ví dụ này bạn tính tổng các số dương từ một tuple. Tuple cũng là một kiểu dữ liệu tập hợp mà chúng ta sẽ học chi tiết sau.

Không phải kiểu dữ liệu tập hợp nào cũng có thể làm danh sách lặp cho vòng for. Những kiểu dữ liệu sử dụng cho vòng for được gọi là các kiểu iterable.

Tham khảo thêm ngay  Funtion (hàm) trong Python

Điều khiển vòng lặp, break và continue.

Khi làm việc với vòng lặp có thể xuất hiện 2 tình huống:

  1. Bạn muốn kết thúc vòng lặp sớm hơn dự định hoặc theo điều kiện. Lấy ví dụ, bạn cầm một danh sách khách hàng và muốn tìm tên một khách trong đó. Bạn xem lần lượt từng tên từ đầu danh sách. Nếu gặp tên khách hàng cần tìm, bạn sẽ dừng lại chứ không tiếp tục xem đến hết danh sách nữ. Ở đây bạn phá vỡ hoàn toàn vòng lặp.
  2. Bạn muốn bỏ qua một chu kỳ trong vòng lặp để bắt đầu chu kỳ tiếp theo. Lấy ví dụ, bạn dự định chơi 10 ván bài. Ở ván thứ 3 bài xấu quá, bạn quyết định bỏ cuộc để chơi ván tiếp theo. Ở đây bạn không dừng hoàn toàn vòng lặp mà chỉ bỏ không làm những việc nhẽ ra phải làm trong chu kỳ đó và khỏi động một chu kỳ mới.

Hai tình huống này được Python giải quyết bằng hai lệnh tương ứng: break ( phá vỡ vòng lặp, kết thúc sớm) và continue ( bỏ qua chu kỳ hiện tại, bắt đầu một chu kỳ lặp mới). Cả hai loại vòng lặp (for, while) đều có thể sử dụng break và continue.

Ví dụ với breadk:


1
2
3
4
5
6
# breaking out of a loop early
for item in [1, 2, 3, 4, 5]:
    if item == 3:
        print(item, " ...break!")
        break
    print(item, " ...next iteration")

Ví dụ này cho ra kết quả như sau:

1…next iteration

2…next iteration

3…break!


1
2
3
4
5
6
7
8
9
10
# demonstrating a `continue` statement in a loop
x = 1
while x &lt; 4:
    print("x = ", x, ">> enter loop-body &lt;&lt;")
    if x == 2:
        print("x = ", x, " continue...back to the top of the loop!")
        x += 1
        continue
    x += 1
    print("--reached end of loop-body--")

Ví dụ này cho ra kết quả như sau:

x = 1 >> enter loop-body << –reached end of loop-body–

x = 2 >> enter loop-body << x = 2 continue…back to the top of the loop!

x = 3 >> enter loop-body <<
–reached end of loop-body–

Leave a Reply

Your email address will not be published. Required fields are marked *