Published on

Điều kiện và vòng lặp

Authors

I. Cấu trúc điều kiện

1. Cú pháp if else

Cú pháp:

test.py
if condition:
    do this
else:
    do that

Ví dụ:

test.py
x = 5
y = 10

if x > y:
    print("x is greater than y")
else:
    print("y is greater than x")

2. Cú pháp if elif else

Lưu ý: khác với một vài ngôn ngữ khác (vd trong javascript là else if) thì cú pháp python chỉ viết ngắn gọn elif

Cú pháp:

test.py
if condition1:
    do A
elif condition2:
    do B
else:
    do C

Ví dụ:

test.py
x = 5
y = 10

if x > y:
  print("x is greater than y")
elif x == y:
  print("x and y are equal")
else:
  print("y is greater than x")

3. Cú pháp nested if

Ví dụ:

test.py
mark = 5

if mark < 5:
    print('Hoc sinh kem')
else:
    if mark < 7:
        print("Hoc sinh trung binh")
    elif 7 < mark < 9:
        print("Hoc sinh gioi")
    else:
        print("Hoc sinh xuat sac")

Giống các ngôn ngữ khác if, else có thể lồng trong if else.

4. Match case

Python không có switch case nhưng từ version 3.10 nó đã được bổ sung match case tương tự như switch case

Cú pháp:

test.py
match variable_name:
   case 'pattern 1' : statement 1
   case 'pattern 2' : statement 2
   ...
   case 'pattern n' : statement n
   case _: default

Ví dụ:

test.py
def weekday(n):
   match n:
      case 0: return "Monday"
      case 1: return "Tuesday"
      case 2: return "Wednesday"
      case 3: return "Thursday"
      case 4: return "Friday"
      case 5: return "Saturday"
      case 6: return "Sunday"
      case _: return "Invalid day number"

print(weekday(0)) # Monday
print(weekday(9)) # Invalid day number

Khi nào nên dùng match case:

  • Khi cần xử lý nhiều trường hợp cố định mang tính lựa chọn. Ta đã xác định trước được case a, case b, case c... Ví dụ: xử lý các trạng thái của một thiết bị
  • Cần tối ưu hóa code: match case hoàn toàn có thể bị thay thế bởi if else nhưng cú pháp match case sẽ dễ đọc hơn
  • Match case tối ưu hơn vì thông dịch nhanh hơn (cần kiểm chứng lại)

II. Cấu trúc lặp

Trong python, ta có 2 cấu trúc lặp là forwhile (không có do while)

2.1 for

Cú pháp: for var in iterable:. Trong đó iterable bao gồm string, list, tuple, dictionary, set

test.py
# string
new_str = 'python'
for i in new_str:
    print(i)

# list
new_list = [1, 2, 3, 4, 5]
for i in new_list:
    print(i)

# tuple
new_tuple = (1, 2, 3, 4, 5)
for i in new_tuple:
    print(i)

# set
new_set = {1, 2, 3, 4, 5}
for i in new_set:
    print(i)

# dictionary
new_dict = {1: 'a', 2: 'b', 3: 'c'}
for i in new_dict:
    print(new_dict[i])

2.2 while

Một ví dụ với while

test.py
n = 1
while n <= 10:
    print(n)
    n += 1

2.3 break và continue

break và continue được sử dụng trong cấu trúc lặp áp dụng cho cả for và while với mục đích

break: thoát khỏi vòng lặp hiện tại và không lặp nữa
continue: thoát khỏi vòng lặp hiện tại và lặp vòng tiếp theo

test.py
for i in range(5):
    if i == 2:
        continue
    if i == 4:
        break
    print(i)

Ví dụ trên sẽ in ra 0 1 3. Phân tích ví dụ trên ta thấy:

  • i = 0 được in ra
  • i = 1 được in ra
  • i = 2 sử dụng continue sẽ thoát khỏi, và nhảy sang vòng lặp tiếp theo, vì vậy i = 2 không được in ra
  • i = 3 được in ra
  • khi i = 4 sử dụng break, thoát khỏi vòng lặp hiện tại và không lặp nữa. Vòng lặp dừng luôn.

2.4 else in loops

Khác với các ngôn ngữ khác, trong Python có else trong for và while. Khi được sử dụng với vòng lặp, mệnh đề else xảy ra khi trong vòng lặp không có câu lệnh break nào được chạy khi chạy hết các vòng lặp, và ngược lại nếu có lệnh break trong vòng lặp thì sẽ không chạy vào else. Ví dụ:

test.py
n = 1
while n <= 10:
    print(n)
    n += 1
else:
    print("Loop is over")

for x in range(5):
    print(x)
else:
    print('else')

2.5 range

Hàm range(start, stop, step) có 3 tham số:

  • start: số nguyên bắt đầu, range sẽ bắt đầu với tham số này. Giá trị mặc định là 0.
  • stop: số nguyên kết thúc, range sẽ kết thúc với tham số này.
  • step: số nguyên xác định khoảng cách giữa các số bên trong range. Giá trị mặc định là 1.

Vd1:

test.py
for x in range(5):         # trong PHP hoac js: for (i = 0; i < 5; i++)
    print(x)
else:
    print('else')

#1
#2
#3
#4
#else

Vd2:

test.py
for x in range(0, 15, 2):         # trong PHP hoac js: for (i = 0; i < 15; i+=2)
    print(x)
else:
    print('else')

# 0
# 2
# 4
# 6
# 8
# 10
# 12
# 14
# else

Vd3:

test.py
for x in range(5, 10):           # trong PHP hoac js: for (i = 5; i < 10; i+=1)
    print(x)
else:
    print('else')

# 5
# 6
# 7
# 8
# 9
# else