Published on

Các toán tử trong python

Authors

I. Toán tử toán học +, -, *, /, %, //, **

1.Một vài toán tử cơ bản trong python:

+, -, *, /, %, //, **

+=, -=, /=, %=, **=

test.py
a = 3
b = a + 1 # b = 4
c = a - 1 # c = 2
d = a * 2 # d = 6
e = a / 2 # e = 1.5
f = a % 2 # f = 1
g = a ** 2 # g = 9
h = a // 2 # h = 1

Cần để ý một vài phép toán đặc biệt: % (chia lấy phần dư), // (chia lấy phần nguyên), ** (phép mũ)
Tham khảo thêm tại: link

2. Quy ước Pemdas

Pemdas là một thuật ngữ đại số được sử dụng để nhớ thứ tự ưu tiên của các phép toán trong một biểu thức. Pemdas là một từ viết tắt, mỗi chữ cái đều biểu thị một loại phép toán:

  • P: Parentheses (Dấu ngoặc)
  • E: Exponents (Luỹ thừa)
  • M: Multiplication (Nhân)
  • D: Division (Chia)
  • A: Addition (Cộng)
  • S: Subtraction (Trừ)

Theo quy tắc PEMDAS, các phép toán được thực hiện theo thứ tự ưu tiên từ trái sang phải: dấu ngoặc, luỹ thừa, nhân/chia (cùng mức độ ưu tiên), cộng/trừ (cùng mức độ ưu tiên).

II. Toán tử so sánh ==, !=, >, <, >=, <=

test.py
x = 4
y = 5
print(x == y)   # False
print(x != y)   # True
print(x > y)    # False
print(x < y)    # True
print(x >= y)   # False
print(x <= y)   # True

Tham khảo thêm tại: link

III. Toán tử đồng nhất is, is not

Trong python, isis not là các toán tử kiểm tra xem hai biến có tham chiếu đến cùng một đối tượng trong bộ nhớ hay không. is: dùng để so sánh identity của hai đối tượng vì kiểu dữ liệu trong python đều là object và có địa chỉ bộ nhớ, còn is not thì ngược lại.

Cùng phân tích một ví dụ. Mặc dù datatest_data có cùng giá trị nhưng bởi vì địa chỉ của chúng khác nhau nên data is test_data sẽ trả về False

test.py
data = [1,2,3]
test_data = [1,2,3]

print(data == test_data)    # True

print(id(data))             # 2591976329600
print(id(test_data))        # 2591976331456

print(data is test_data)    # False
print(data is not test_data)# True

Tất cả các kiểu dữ liệu complex mutable(list, dict, set) có cùng giá trị thì id cũng khác nhau. Chỉ có complex immutable(tuple) là 2 giá trị bằng nhau thì id cũng giống nhau. Lí do là bởi vì tuple thuộc kiểu immutable. Ví dụ sau sẽ chứng minh điều đó:

test.py
list1 = [1, 2, 3, 4, 5]
list2 = [1, 2, 3, 4, 5]
print(list1 == list2) # True
print(id(list1)) # 2826753806720
print(id(list2)) # 2826753808576


tuple1 = (1, "hello", 3.14)
tuple2 = (1, "hello", 3.14)
print(tuple1 == tuple2) # True
print(id(tuple1)) # 2592518774848
print(id(tuple2)) # 2592518774848

dict1 = {"a1": "one", "a2": "two", "a3": "three"}
dict2 = {"a1": "one", "a2": "two", "a3": "three"}
print(dict1 == dict2) # True
print(id(dict1)) # 2115201509248
print(id(dict2)) # 2309244023360

set1 = {1, 2, 3, 4, 5}
set2 = {1, 2, 3, 4, 5}
print(set1 == set2) # True
print(id(set1)) # 2309244023360
print(id(set2)) # 3011340914688

Nhưng nếu data và test_data là kiểu dữ liêu nguyên thuỷ (primitive data) thì sao nhỉ. Bởi vì kiểu dữ liệu nguyên thuỷ thì 2 biến cùng giá trị sẽ cùng trỏ về một vùng nhớ nên kết quả sẽ như bên dưới:

test.py
data = 3
test_data = 3

print(data == test_data)    # True

print(id(data))             # 140736207391224
print(id(test_data))        # 140736207391224

print(data is test_data)    # True
print(data is not test_data)# False

Tham khảo thêm tại: link

IV. Toán tử logic and, or, not

Không giống như các ngôn ngữ khác sử dụng toán tử logic bằng ký hiệu (&&, ||, !) thì python dùng keyword and, or, not để biểu diễn chúng.

test.py
# and
print(True and True)    # True
print(True and False)   # False
print(False and True)   # False
print(False and False)  # False

# or
print(True or True)    # True
print(True or False)   # True
print(False or True)   # True
print(False or False)  # False

# not
print(not True)  # False
print(not False) # True

Một ví dụ khác và đối chiếu cách sử dụng với javascript

test.py
x = 1; y = 2

# and
print(x and y)   # 2
print(y and x)   # 1

# or
print(x or y)    # 1
print(y or x)    # 2

# not
print(not x)     # False
print(not y)     # False
test.js
const x = 1; y = 2

// &&
console.log(x && y)   // 2
console.log(y && x)   // 1

// ||
console.log(x || y)   // 1
console.log(y || x)   // 2

// !
console.log(!x)       // false
console.log(!y)       // false

Một ví dụ khác về sự ngắn gọn và tiện lợi của python. 2 cách dưới đây tương đồng nhưng cách 2 ngắn gọn hơn.

test.py
my_age = 25
if my_age > 18 and my_age < 27:
    print("You are in the right age to be in the task force!")
if 18 < my_age < 27:
    print("You are in the right age to be in the task force!")

Tham khảo thêm tại: link

V. Toán tử thành viên in, not in

toán tử in được sử dụng để kiểm tra xem một giá trị có tồn tại trong một string, list, tuple, dictionary, set. Ngược lại thì là not in

test.py
my_string = "Hello, World!"
print("Hello" in my_string) # True

my_list = [1, 2, 3, 4, 5]
print(3 in my_list) # True

my_dict = {"name": "John", "age": 30}
print("age" in my_dict) # True

my_set = {1, 2, 3, 4, 5}
print(3 in my_set) # True

my_tuple = (1, 2, 3, 4, 5)
print(3 in my_tuple) # True
print(6 not in my_tuple) # True

Tham khảo thêm tại: link

VI. Phép toán với bit (Bitwise Operators)

1. AND Operator (&)

test.py
x = 5 # 0101
y = 3 # 0011
print(x&y) # 1(0001)

2. OR Operator (|)

test.py
x = 5 # 0101
y = 3 # 0011
print(x|y) # 7(0111)

3. XOR Operator (^)

Dấu ^ nhưng không phải toán tử mũ đâu nhé, toán tử mũ là **
Phép xor: 2 bit khác nhau mà so với nhau thì thành 1

test.py
x = 5 # 0101
y = 3 # 0011
print(x^y) # 6(0110)

4. Left Shift Operator (<<)

test.py
x = 5 # 0000 0101
print(x<<2) # 20(0001 0100)

5. Right Shift Operator (>>)

test.py
x = 5 # 0000 0101
print(x>>2) # (1)0000 0001

Tham khảo thêm tại: link