Tin tức và phân tích của tất cả các thiết bị di động

Cách sử dụng toán tử bậc ba của Python

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ẽ tìm hiểu cú pháp và mã của 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 cách hoạt động của câu lệnh if-else, sau đó tìm hiểu cách viết một biểu thức tương đương bằng toán tử bậc ba.

Sau đó, chúng ta sẽ viết mã một số ví dụ và học 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ộ dữ liệu và từ điển Python. Cuối cùng, chúng tôi sẽ xem xét một số trường hợp sử dụng mà bạn nên sử dụng toán tử ba ngôi hơn.

Hãy bắt đầu!

Câu lệnh if-else của Python: tổng quan

Bạn có thể viết mã cùng nhau bằng cách chạy Python REPL hoặc trong trình soạn thảo Python trực tuyến newsblog.pl.

Cú pháp chung cho 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 có nghĩa là điều kiện cần kiểm tra. Nếu điều kiện là True thì khối if sẽ được chạy. Nếu điều kiện là Sai, các câu lệnh bên trong khối else sẽ được thực thi.

Dưới đây là ví dụ trong đó biến game_over được gán giá trị boolean tùy thuộc vào việc giá trị năng lượng nhỏ hơn hay bằng 0.

  • Nếu năng lượng <= 0game_over là Đúng.
  • Ngược lại, game_over là sai.

Đoạn mã bên dưới cho biết cách thực hiện việc này bằng cách sử dụng câu lệnh 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đó là ít hơn 0. 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ử ba ngôi hoạt động rất giống với toán tử điều kiện ba ngôi 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:

  • condition: Điều kiện để kiểm tra.
  • expr1: biểu thức để đánh giá xem điều kiện có đúng hay không.
  • expr2: biểu thức để đánh giá xem điều kiện có sai hay không.

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

Kết hợp tất cả lại với nhau, chúng ta có cách sử dụng toán tử bậc ba của Python như sau.

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

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

Đặt numVisits là số lượt truy cập.

  • Nếu numVisits > 7phần trăm chiết khấu, chiết khấu_perc là 20.
  • Ngược lại, chiết khấu_perc là 5.

Chúng tôi sử dụng toán tử ternary để gán giá trị cho biến giảm giá_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ẽ học cách mô phỏng toán tử bậc ba bằng cách sử dụng bộ dữ liệu Python và từ điển.

Mô phỏng toán tử bậc ba bằng bộ dữ liệu Python

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

Các kiểu dữ liệu cơ bản trong Python là số nguyên, số 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 nhất định bằng cách biểu diễn tương đương của nó trong một kiểu dữ liệu khác.

Chạy REPL Python và chạy các ví dụ sau. Nếu bạn cố gắng 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ề Đúng.
>>> bool(0)
False
>>> bool(1)
True
>>> bool(-1)
True
>>> bool(10)
True

Tương tự, khi truyền giá trị Boolean thành số nguyên, ta nhận được:

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

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

  • Mục có chỉ mục 0 trong bộ dữ liệu: giá trị sử dụng khi điều kiện đánh giá là Sai.
  • Mục có chỉ mục 1 trong bộ dữ liệu: giá trị sử dụng khi điều kiện được đánh giá là Đúng.

Sử dụng điều trên ta có:

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

Ở đây điều kiện numVisits > 7 là Đúng vì numVisits là 10. Vì int(True) là 1Giảm_perc là 20, mục tại chỉ mục 1.

Mô phỏng toán tử bậc ba bằng từ điển python

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

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 đánh giá là True. Và biểu thức 2 được đánh giá khi điều kiện sai.

Hãy viết mã ví dụ Giảm giá_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à thật. Vì vậy, giảm giá_dict[numVisits > 7] giảm giá_dict[True] đó là giá trị của 20.

Bạn có nên luôn sử dụng toán tử bậc ba của Python không?

Cho đến nay chúng ta đã học đượ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 giải thích khi nào bạn nên sử dụng toán tử bậc ba thay vì câu lệnh if-else. Chúng ta cũng sẽ thảo luận về thời điểm nên cân nhắc sử dụng câu lệnh if-else thay vì toán tử ba ngôi.

Ngắn gọn hơn 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 đó, nó có thể được sử dụng để kiểm tra các điều kiện và đánh giá các biểu thức một cách nhanh chóng.

Trong ví dụ bên dưới, 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 ta kiểm tra xem nó là số chẵn hay số lẻ. Và việc đánh giá này được thực hiện trên một dòng 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ử bậc ba yêu cầu mệnh đề else

Khi sử dụng câu lệnh if-else, mệnh đề else 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 nhỏ hơn hoặc bằng 0.

Tuy nhiên, nếu năng lượng lớn hơn 0, game_over sẽ 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 Sai 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 Python tương đương với toán tử ternary ở trên, mệnh đề else không phải là tùy chọn. Toán tử bậc ba yêu cầu đánh giá biểu thức khi điều kiện được đánh giá là Sai.

game_over = True if energy <= 0 else False

Nếu bạn thay đổi thông tin trên thành game_over = True if energy <= 0bỏ phần else đi bạn sẽ gặp lỗi cú pháp như sau:

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 một ví dụ: Mỗi câu hỏi trong bộ phỏng vấn đều có điểm khó liên quan. Tùy thuộc vào kết quả này, chúng tôi chỉ định một trong ba mức độ khó cho một câu hỏi nhất định: dễ, trung bình hoặc khó. Giả sử chúng ta có những điều sau đây:

Điểm Độ khóDưới 10 dễ10 đến 20trung bìnhTrên 20khó

Với điểm độ khó, bạn có thể gặp độ khó bằng cách sử dụng toán tử bậc ba của Python như sau:

score = 12

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

print(difficulty_level)
# medium

Biểu thức của toán tử bậc ba trong khối mã ở trên trông như thế này:

expression1 if condition1 else expression2 if condition2 else expression3

Tuy ngắn gọn nhưng hơi khó đọc và phân tích. Hình ảnh bên dưới cho thấy luồng điều khiển hoạt động như thế nào trong trường hợp này.

Đoạn mã sau đây 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ư bạn có thể 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 if-else thay vì toán tử ba ngôi. Điều này làm cho 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 đúng hay sai, hãy cân nhắc sử dụng câu lệnh if-else.

Ứng dụng

Dưới đâ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 theo cú pháp sau: biểu thức 1 nếu điều kiện biểu thức khác 2.
  • Bạn có thể mô phỏng hành vi của toán tử bậc ba bằng các bộ dữ liệu và từ điển 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 phải đảm bảo rằng mã của mình 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 vì toán tử ba ngôi, đặc biệt khi bạn cần kết hợp nhiều điều kiện.

Sau đó hãy xem hướng dẫn về các toán tử bằng và bất bằng trong Python.

Mục lục