Cách sử dụng Toán tử bậc ba trong Python

Spread the love

Hướng dẫn này sẽ hướng dẫn bạn cách sử dụng toán tử bậc ba trong Python. Bạn sẽ học cú pháp và viết mã một số ví dụ để hiểu cách thức hoạt động của nó.

Chúng ta sẽ bắt đầu bằng cách xem xét cách thức hoạt động của câu lệnh điều kiện if-else và sau đó tìm hiểu cách viết một biểu thức tương đương bằng cách sử dụng toán tử bậc ba.

Tiếp theo, chúng ta sẽ viết mã một số ví dụ và sau đó tìm hiểu cách mô phỏng hành vi của toán tử bậc ba của Python bằng cách sử dụng bộ từ điển và bộ dữ liệu Python. Cuối cùng, chúng tôi sẽ xem xét một vài trường hợp sử dụng khi bạn nên sử dụng toán tử bậc ba.

Hãy bắt đầu nào!

Câu lệnh If-Else trong Python: Đánh giá

Bạn có thể viết mã bằng cách bắt đầu REPL Python hoặc trong trình chỉnh sửa Python trực tuyến của techpoe.com.

Cú pháp chung của câu lệnh if-else trong Python như sau:

if condition:
    # do this
else:
    # do this

Trong đoạn mã trên, điều kiện biểu thị điều kiện được kiểm tra. Nếu điều kiện đánh giá là True, thì khối if được kích hoạt. Nếu điều kiện đánh giá là Sai, thì các câu lệnh bên trong khối khác sẽ được thực thi.

Đây là một ví dụ trong đó biến game_over được gán một giá trị Boolean tùy thuộc vào việc giá trị của năng lượng có nhỏ hơn hoặc bằng 0 hay không.

  • Nếu năng lượng <= 0, game_over là True.
  • Khác, game_over là Sai.

Đoạn mã sau đây cho thấy cách thực hiện việc này bằng cách sử dụng câu lệnh điều kiện if-else:

energy = -1

if energy <= 0:
    game_over = True
else:
    game_over = False

print(game_over)
# True

Trong ví dụ này, năng lượng là -1 nhỏ hơn 0. Vì vậy game_over là Đúng.

Toán tử bậc ba trong Python: Cú pháp và ví dụ

Python có toán tử bậc ba hoạt động rất giống toán tử điều kiện bậc ba trong các ngôn ngữ như C và C++. Cú pháp chung để sử dụng nó như sau:

expression1 if condition else expression2

Hãy phân tích cú pháp trên:

  • điều kiện: Điều kiện để kiểm tra.
  • biểu thức1: Biểu thức để đánh giá nếu điều kiện là Đúng.
  • biểu thức2: Biểu thức để đánh giá nếu điều kiện là Sai.

Bây giờ, chúng ta sẽ xác định biểu thức1, biểu thức2 và điều kiện nào sẽ là từ phiên bản mã if-else.

  Hình ảnh trên máy tính có nghĩa là gì?

Đặt tất cả lại với nhau, chúng ta có phần sau bằng cách sử dụng toán tử bậc ba của Python.

game_over = True if energy <= 0 else False
print(game_over)
# True

Hãy mã một ví dụ khác. Giả sử bạn điều hành một hiệu sách và bạn giảm giá cho độc giả khi mua hàng tùy thuộc vào tần suất họ ghé thăm cửa hàng của bạn trong một năm qua.

Đặt numVisits biểu thị số lượt truy cập.

  • Nếu numVisits > 7, phần trăm chiết khấu, discount_perc là 20.
  • Mặt khác, discount_perc là 5.

Chúng tôi sử dụng toán tử bậc ba để gán giá trị cho biến discount_perc.

numVisits = 10

discount_perc = 20 if numVisits > 7 else 5

print(discount_perc)
# 20 (as numVisits = 10 which is > 7)

Tiếp theo, chúng ta sẽ tìm hiểu cách mô phỏng toán tử bậc ba bằng cách sử dụng bộ Python và từ điển.

Mô phỏng toán tử ternary với Python Tuple

Giống như tất cả các lần lặp trong Python, các bộ dữ liệu tuân theo chỉ mục bằng không. Vì vậy, nếu bạn có hai phần tử trong một tuple, tuple_name[0] biểu thị phần tử đầu tiên trong tuple và tuple_name[1] đưa ra phần tử thứ hai trong tuple.

Các kiểu dữ liệu cơ bản trong Python là số nguyên, float, chuỗi và Boolean. Python hỗ trợ truyền kiểu cho phép bạn biểu diễn một kiểu dữ liệu cụ thể bằng cách biểu diễn tương đương của nó trong một kiểu dữ liệu khác.

Bắt đầu REPL Python và chạy các ví dụ sau. Nếu bạn thử chuyển đổi số nguyên thành Booleans, bạn sẽ nhận thấy những điều sau:

  • bool(0) là Sai.
  • bool() trả về True.
>>> bool(0)
False
>>> bool(1)
True
>>> bool(-1)
True
>>> bool(10)
True

Tương tự, khi ép kiểu Boolean thành số nguyên, ta có:

>>> int(True)
1
>>> int(False)
0

Kết hợp việc truyền kiểu và lập chỉ mục, chúng ta có thể thực hiện như sau:

  • Phần tử ở chỉ mục 0 trong bộ: Giá trị được sử dụng khi điều kiện là Sai.
  • Phần tử tại chỉ mục 1 trong bộ dữ liệu: Giá trị được sử dụng khi điều kiện là True.

Uisng ở trên, chúng tôi có những điều sau đây:

>>> numVisits = 10
>>> discount_perc = (5,20)[numVisits > 7]
>>> discount_perc
# 20

Ở đây, điều kiện numVisits > 7 là True vì numVisits là 10. Vì int(True) là 1 nên giá trị của discount_perc là 20, phần tử ở chỉ mục 1.

Mô phỏng toán tử ternary với từ điển Python

Bạn có thể đặt Đúng và Sai làm khóa của từ điển. Và bạn có thể đặt biểu thức1 và biểu thức2 làm giá trị tương ứng với các khóa Đúng và Sai.

some_dict = {True: expression1,
             False: expression2
            }

Bạn sẽ làm gì tiếp theo? Bây giờ nếu bạn sử dụng some_dict[condition], biểu thức 1 tương ứng với khóa True được đánh giá nếu điều kiện là True. Và biểu thức 2 được đánh giá khi điều kiện là Sai.

Hãy mã hóa ví dụ discount_perc (một lần nữa) nhưng lần này sử dụng từ điển Python.

>>> numVisits = 10
>>> discount_dict = {True: 20, False:5}
>>> discount_perc = discount_dict[numVisits > 7]
>>> discount_perc
# 20

Ở đây, numVisits = 10 lớn hơn 7. Do đó, điều kiện numVisits > 7 là Đúng. Vì vậy, giảm giá_dict[numVisits > 7] đánh giá thành discount_dict[True] đó là giá trị 20.

Bạn có nên luôn sử dụng Toán tử ternary Python không?

Cho đến giờ, chúng ta đã học cách sử dụng toán tử bậc ba. Nhưng chúng ta có nên luôn sử dụng toán tử bậc ba không? Chà, toán tử bậc ba có thể không phải là lựa chọn tốt nhất cho mọi trường hợp sử dụng. Phần này bị hỏng khi bạn nên sử dụng toán tử bậc ba hơn các câu lệnh if-else. Chúng ta cũng sẽ đề cập đến thời điểm nên cân nhắc sử dụng câu lệnh if-else thay vì toán tử bậc ba.

Ngắn gọn hơn các khối If-Else

Như đã đề cập, trong Python, biểu thức toán tử bậc ba ngắn gọn hơn câu lệnh if-else. Do đó, bạn có thể sử dụng nó để kiểm tra các điều kiện và đánh giá các biểu thức có điều kiện một cách nhanh chóng.

Trong ví dụ sau, nums là danh sách 100 số nguyên được tạo ngẫu nhiên. Đối với mỗi số trong số 100 số, chúng tôi kiểm tra xem nó là số lẻ hay số chẵn. Và đánh giá này xảy ra nội tuyến bên trong chuỗi f.

import random

nums = [random.choice(range(100)) for i in range(10)]

for num in nums:
    print(f"{num} is {'even' if num%2==0 else 'odd'}")
# sample output

0 is even
56 is even
6 is even
53 is odd
62 is even
7 is odd
8 is even
77 is odd
41 is odd
94 is even

Toán tử ternary yêu cầu khoản Else

Khi bạn đang sử dụng câu lệnh điều kiện if-else, mệnh đề khác là tùy chọn. Hãy lấy một ví dụ. Biến game_over được đặt thành True nếu năng lượng giảm xuống giá trị nhỏ hơn hoặc bằng 0.

Tuy nhiên, nếu năng lượng lớn hơn 0, biến game_over không bao giờ được khởi tạo. Vì vậy, bạn sẽ gặp lỗi nếu cố gắng truy cập biến game_over.

energy = 5
if energy <= 0:
    game_over = True

print(f"Is the game over? {game_over}")
Traceback (most recent call last):
  File "ternary_op.py", line 39, in <module>
    print(f"Is the game over? {game_over}")
NameError: name 'game_over' is not defined

Một cách để khắc phục điều này là ban đầu đặt game_over thành False và cập nhật thành True nếu mức năng lượng nhỏ hơn hoặc bằng 0.

energy = 5
game_over = False
if energy <= 0:
    game_over1 = True

print(f"Is the game over? {game_over}")

Tuy nhiên, khi sử dụng toán tử bậc ba Python tương đương ở trên, mệnh đề khác không phải là tùy chọn. Toán tử bậc ba yêu cầu biểu thức được đánh giá khi điều kiện là Sai.

game_over = True if energy <= 0 else False

Nếu bạn thay đổi phần trên thành game_over = True if energy <= 0 bằng cách xóa phần khác, bạn sẽ gặp phải lỗi cú pháp, như minh họa:

File "ternary_op.py", line 42
    game_over = True if energy <= 0
                                  ^
SyntaxError: invalid syntax

Để kiểm tra nhiều điều kiện, hãy sử dụng câu lệnh If-Else

Hãy xem xét ví dụ: Mỗi câu hỏi trong một bộ câu hỏi phỏng vấn lập trình đều có một mức độ khó tương ứng. Tùy thuộc vào số điểm này, chúng tôi chỉ định một trong ba mức độ khó: dễ, trung bình hoặc khó cho một câu hỏi cụ thể. Giả sử chúng ta có những điều sau đây:

Điểm Mức độ khó Dưới 10 dễ Từ 10 đến 20 trung bình Lớn hơn 20 khó

Với điểm số khó khăn, bạn có thể nhận được mức độ khó khăn của nó bằng cách sử dụng toán tử bậc ba Python như được hiển thị:

score = 12

difficulty_level = "easy" if score < 10 else "hard" if score > 20 else "medium"

print(difficulty_level)
# medium

Biểu thức toán tử bậc ba trong khối mã trên có dạng sau:

expression1 if condition1 else expression2 if condition2 else expression3

Mặc dù ngắn gọn nhưng hơi khó đọc và phân tích cú pháp. Hình ảnh sau đây cho thấy luồng điều khiển xảy ra như thế nào trong trường hợp này.

Đoạn mã sau hiển thị cách triển khai tương đương bằng cách sử dụng câu lệnh if-else. Như đã thấy, luồng điều khiển dễ hiểu hơn nhiều và mã dễ đọc hơn.

if score < 10:
    difficulty_level="easy"
elif score > 20:
    difficulty_level="hard"
else:
    difficulty_level="medium"

print(difficulty_level)

Do đó, khi bạn có nhiều điều kiện, bạn nên sử dụng khối lệnh if-else thay vì toán tử bậc ba. Điều này đảm bảo rằng mã dễ đọc và dễ hiểu.

Ngoài ra, khi bạn cần thực thi nhiều câu lệnh—tùy thuộc vào điều kiện là đúng hay sai—bạn nên cân nhắc sử dụng câu lệnh if-else.

Phần kết luận

Đây là bản tóm tắt những gì bạn đã học được trong hướng dẫn này.

  • Trong Python, toán tử bậc ba có thể được sử dụng với cú pháp sau: biểu thức 1 nếu điều kiện khác biểu thức 2.
  • Bạn có thể mô phỏng hành vi của toán tử bậc ba bằng cách sử dụng bộ từ điển và bộ dữ liệu Python.
  • Mặc dù toán tử bậc ba có thể là một giải pháp thay thế ngắn gọn hơn cho các khối if-else, nhưng bạn nên đảm bảo rằng mã có thể đọc được. Để cải thiện khả năng đọc mã, bạn có thể sử dụng câu lệnh if-else thay cho toán tử bậc ba, đặc biệt khi bạn cần xâu chuỗi nhiều điều kiện.

Tiếp theo, hãy tìm hiểu để xem hướng dẫn về toán tử bằng và không bằng trong Python.

x