Hướng dẫn what is the correct order of operations in python? - thứ tự chính xác của các hoạt động trong python là gì?

Khi nhiều hơn một toán tử xuất hiện trong một biểu thức, thứ tự đánh giá phụ thuộc vào các quy tắc ưu tiên. Python tuân theo các quy tắc ưu tiên tương tự cho các nhà khai thác toán học mà toán học làm.rules of precedence. Python follows the same precedence rules for its mathematical operators that mathematics does.

  1. Dấu ngoặc đơn có mức độ ưu tiên cao nhất và có thể được sử dụng để buộc một biểu thức để đánh giá theo thứ tự bạn muốn. Vì các biểu thức trong ngoặc đơn được đánh giá trước tiên,

    # Multiplication has higher precedence
    # than subtraction
    >>> 10 - 4 * 2
    2
    2 là 4 và
    # Multiplication has higher precedence
    # than subtraction
    >>> 10 - 4 * 2
    2
    3 là 8. Bạn cũng có thể sử dụng dấu ngoặc đơn để làm cho biểu thức dễ đọc hơn, như trong
    # Multiplication has higher precedence
    # than subtraction
    >>> 10 - 4 * 2
    2
    4, mặc dù nó không thay đổi kết quả.

  2. Số mũ có quyền ưu tiên cao nhất tiếp theo, vì vậy

    # Multiplication has higher precedence
    # than subtraction
    >>> 10 - 4 * 2
    2
    5 là 3 và không phải 4, và
    # Multiplication has higher precedence
    # than subtraction
    >>> 10 - 4 * 2
    2
    6 là 3 và không 27. Bạn có thể giải thích tại sao không?

  3. Nhân hóa và cả hai toán tử phân chia có cùng mức độ ưu tiên, cao hơn so với cộng và trừ, cũng có cùng mức độ ưu tiên. Vì vậy,

    # Multiplication has higher precedence
    # than subtraction
    >>> 10 - 4 * 2
    2
    7 mang lại 5 thay vì 4 và
    # Multiplication has higher precedence
    # than subtraction
    >>> 10 - 4 * 2
    2
    8 là 1, không phải 6.

  4. Các nhà khai thác có cùng ưu tiên (ngoại trừ

    # Multiplication has higher precedence
    # than subtraction
    >>> 10 - 4 * 2
    2
    9) được đánh giá từ trái sang phải. Trong đại số, chúng tôi nói rằng họ là liên kết trái. Vì vậy, trong biểu thức
    # Parentheses () has higher precedence
    >>> (10 - 4) * 2
    12
    0, phép trừ xảy ra trước, mang lại 3. Sau đó, chúng tôi thêm 2 để nhận kết quả 5. Nếu các hoạt động được đánh giá từ phải sang trái, kết quả sẽ là
    # Parentheses () has higher precedence
    >>> (10 - 4) * 2
    12
    1, là 1.

Ghi chú

Một ngoại lệ đối với quy tắc liên kết trái từ trái sang phải là toán tử số liệu **. Một gợi ý hữu ích là luôn luôn sử dụng dấu ngoặc đơn để buộc chính xác thứ tự bạn muốn khi có liên quan:

Xem Bảng ưu tiên toán tử cho tất cả các nhà khai thác được giới thiệu trong cuốn sách này. Bạn cũng sẽ thấy nhiều nhà khai thác Python phi Mathematical sắp tới.Operator precedence table for all the operators introduced in this book. You will also see many upcoming non-mathematical Python operators.

Kiểm tra việc hiểu của bạn

    Giá trị của biểu thức sau:

  • 14
  • Sử dụng dấu ngoặc đơn, biểu thức được đánh giá là (2*5) trước tiên, sau đó (10 // 3), sau đó (16-3), và sau đó (13+1).
  • 24
  • Hãy nhớ rằng * đã được ưu tiên hơn -.
  • 3
  • Hãy nhớ rằng // đã được ưu tiên hơn -.
  • 13.667
  • Hãy nhớ rằng // không phân chia số nguyên.

    Giá trị của biểu thức sau:

  • 768
  • Sử dụng dấu ngoặc đơn, biểu thức được đánh giá là (2*5) trước tiên, sau đó (10 // 3), sau đó (16-3), và sau đó (13+1).
  • 128
  • Hãy nhớ rằng * đã được ưu tiên hơn -.
  • 12
  • Hãy nhớ rằng // đã được ưu tiên hơn -.
  • 256
  • Hãy nhớ rằng // không phân chia số nguyên.

Số mũ đã được ưu tiên hơn so với phép nhân, nhưng quyền ưu tiên của nó đi từ phải sang trái! Vì vậy, 2 ** 3 là 8, 2 ** 8 là 256 và 256 * 3 là 768.

Số mũ (**) được xử lý phải sang trái, vì vậy hãy lấy 2 ** 3 trước. of activities on this page

Ưu tiên của các nhà khai thác Python

Sự kết hợp của các giá trị, biến, toán tử và các cuộc gọi chức năng được gọi là một biểu thức. Trình thông dịch Python có thể đánh giá một biểu thức hợp lệ.

Ví dụ:

>>> 5 - 7
-2

Ở đây

# Parentheses () has higher precedence
>>> (10 - 4) * 2
12
2 là một biểu thức. Có thể có nhiều hơn một toán tử trong một biểu thức.

Để đánh giá các loại biểu thức này, có một quy tắc ưu tiên trong Python. Nó hướng dẫn thứ tự thực hiện các hoạt động này.

Ví dụ, phép nhân có ưu tiên cao hơn phép trừ.

# Multiplication has higher precedence
# than subtraction
>>> 10 - 4 * 2
2

Nhưng chúng ta có thể thay đổi thứ tự này bằng cách sử dụng dấu ngoặc đơn

# Parentheses () has higher precedence
>>> (10 - 4) * 2
12
3 vì nó có ưu tiên cao hơn so với phép nhân.

# Parentheses () has higher precedence
>>> (10 - 4) * 2
12

Các nhà điều hành được ưu tiên trong Python được liệt kê trong bảng sau. Đó là theo thứ tự giảm dần (nhóm trên có ưu tiên cao hơn so với nhóm thấp hơn).

Người vận hànhNghĩa
# Parentheses () has higher precedence
>>> (10 - 4) * 2
12
3
Dấu ngoặc đơn
# Parentheses () has higher precedence
>>> (10 - 4) * 2
12
5
Số mũ
# Parentheses () has higher precedence
>>> (10 - 4) * 2
12
6,
# Parentheses () has higher precedence
>>> (10 - 4) * 2
12
7,
# Parentheses () has higher precedence
>>> (10 - 4) * 2
12
8
Unary Plus, Unary Minus, bitwise không
# Parentheses () has higher precedence
>>> (10 - 4) * 2
12
9,
# Precedence of or & and
meal = "fruit"

money = 0

if meal == "fruit" or meal == "sandwich" and money >= 2:
    print("Lunch being delivered")
else:
    print("Can't deliver lunch")
0,
# Precedence of or & and
meal = "fruit"

money = 0

if meal == "fruit" or meal == "sandwich" and money >= 2:
    print("Lunch being delivered")
else:
    print("Can't deliver lunch")
1,
# Precedence of or & and
meal = "fruit"

money = 0

if meal == "fruit" or meal == "sandwich" and money >= 2:
    print("Lunch being delivered")
else:
    print("Can't deliver lunch")
2
Phép nhân, phân chia, phân chia sàn, mô đun
# Precedence of or & and
meal = "fruit"

money = 0

if meal == "fruit" or meal == "sandwich" and money >= 2:
    print("Lunch being delivered")
else:
    print("Can't deliver lunch")
3,
# Precedence of or & and
meal = "fruit"

money = 0

if meal == "fruit" or meal == "sandwich" and money >= 2:
    print("Lunch being delivered")
else:
    print("Can't deliver lunch")
4
Ngoài ra, trừ
# Precedence of or & and
meal = "fruit"

money = 0

if meal == "fruit" or meal == "sandwich" and money >= 2:
    print("Lunch being delivered")
else:
    print("Can't deliver lunch")
5,
# Precedence of or & and
meal = "fruit"

money = 0

if meal == "fruit" or meal == "sandwich" and money >= 2:
    print("Lunch being delivered")
else:
    print("Can't deliver lunch")
6
Các nhà khai thác thay đổi bitwise
# Precedence of or & and
meal = "fruit"

money = 0

if meal == "fruit" or meal == "sandwich" and money >= 2:
    print("Lunch being delivered")
else:
    print("Can't deliver lunch")
7
Bitwise và
# Precedence of or & and
meal = "fruit"

money = 0

if meal == "fruit" or meal == "sandwich" and money >= 2:
    print("Lunch being delivered")
else:
    print("Can't deliver lunch")
8
BitWise XOR
# Precedence of or & and
meal = "fruit"

money = 0

if meal == "fruit" or meal == "sandwich" and money >= 2:
    print("Lunch being delivered")
else:
    print("Can't deliver lunch")
9
Bitwise hoặc
Lunch being delivered
0,
Lunch being delivered
1,
Lunch being delivered
2,
Lunch being delivered
3,
Lunch being delivered
4,
Lunch being delivered
5,
Lunch being delivered
6,
Lunch being delivered
7,
Lunch being delivered
8,
Lunch being delivered
9
So sánh, danh tính, nhà khai thác thành viên
# Precedence of or & and
meal = "fruit"

money = 0

if (meal == "fruit" or meal == "sandwich") and money >= 2:
    print("Lunch being delivered")
else:
    print("Can't deliver lunch")
0
Logic không
# Precedence of or & and
meal = "fruit"

money = 0

if (meal == "fruit" or meal == "sandwich") and money >= 2:
    print("Lunch being delivered")
else:
    print("Can't deliver lunch")
1
Hợp lý và
# Precedence of or & and
meal = "fruit"

money = 0

if (meal == "fruit" or meal == "sandwich") and money >= 2:
    print("Lunch being delivered")
else:
    print("Can't deliver lunch")
2
Hợp lý hoặc

Hãy xem xét một số ví dụ:

Giả sử chúng ta đang xây dựng một khối

# Precedence of or & and
meal = "fruit"

money = 0

if (meal == "fruit" or meal == "sandwich") and money >= 2:
    print("Lunch being delivered")
else:
    print("Can't deliver lunch")
3 chạy
# Precedence of or & and
meal = "fruit"

money = 0

if (meal == "fruit" or meal == "sandwich") and money >= 2:
    print("Lunch being delivered")
else:
    print("Can't deliver lunch")
4 khi bữa trưa là trái cây hoặc bánh sandwich và chỉ khi tiền nhiều hơn hoặc bằng 2.

# Precedence of or & and
meal = "fruit"

money = 0

if meal == "fruit" or meal == "sandwich" and money >= 2:
    print("Lunch being delivered")
else:
    print("Can't deliver lunch")

Đầu ra

Lunch being delivered

Chương trình này chạy khối

# Precedence of or & and
meal = "fruit"

money = 0

if (meal == "fruit" or meal == "sandwich") and money >= 2:
    print("Lunch being delivered")
else:
    print("Can't deliver lunch")
4 ngay cả khi tiền là 0. Nó không cung cấp cho chúng tôi đầu ra mong muốn vì mức độ ưu tiên của
# Precedence of or & and
meal = "fruit"

money = 0

if (meal == "fruit" or meal == "sandwich") and money >= 2:
    print("Lunch being delivered")
else:
    print("Can't deliver lunch")
1 cao hơn
# Precedence of or & and
meal = "fruit"

money = 0

if (meal == "fruit" or meal == "sandwich") and money >= 2:
    print("Lunch being delivered")
else:
    print("Can't deliver lunch")
2.

Chúng ta có thể nhận được đầu ra mong muốn bằng cách sử dụng dấu ngoặc đơn

# Parentheses () has higher precedence
>>> (10 - 4) * 2
12
3 theo cách sau:

# Precedence of or & and
meal = "fruit"

money = 0

if (meal == "fruit" or meal == "sandwich") and money >= 2:
    print("Lunch being delivered")
else:
    print("Can't deliver lunch")

Đầu ra

Can't deliver lunch

Sự kết hợp của các nhà khai thác Python

Chúng ta có thể thấy trong bảng trên rằng nhiều hơn một toán tử tồn tại trong cùng một nhóm. Các nhà khai thác này có cùng mức độ ưu tiên.

Khi hai toán tử có cùng mức độ ưu tiên, sự kết hợp giúp xác định thứ tự hoạt động.

Sự kết hợp là thứ tự trong đó một biểu thức được đánh giá có nhiều toán tử có cùng mức độ ưu tiên. Hầu như tất cả các nhà khai thác đều có sự kết hợp từ trái sang phải.

Ví dụ, phép nhân và phân chia sàn có cùng ưu tiên. Do đó, nếu cả hai đều có mặt trong một biểu thức, cái bên trái được đánh giá trước.

# Left-right associativity
# Output: 3
print(5 * 2 // 3)

# Shows left-right associativity
# Output: 0
print(5 * (2 // 3))

Đầu ra

3
0

Lưu ý: Toán tử số mũ

# Parentheses () has higher precedence
>>> (10 - 4) * 2
12
5 có tính kết hợp từ phải sang trái trong Python.: Exponent operator
# Parentheses () has higher precedence
>>> (10 - 4) * 2
12
5 has right-to-left associativity in Python.

# Shows the right-left associativity of **
# Output: 512, Since 2**(3**2) = 2**9
print(2 ** 3 ** 2)

# If 2 needs to be exponated fisrt, need to use ()
# Output: 64
print((2 ** 3) ** 2)

Chúng ta có thể thấy rằng

Can't deliver lunch
0 tương đương với
Can't deliver lunch
1.


Các nhà khai thác không liên kết

Một số nhà khai thác như toán tử chuyển nhượng và toán tử so sánh không có tính kết hợp trong Python. Có các quy tắc riêng cho các chuỗi của loại toán tử này và không thể được thể hiện là sự kết hợp.

Ví dụ,

Can't deliver lunch
2 không có nghĩa là
Can't deliver lunch
3 cũng như
Can't deliver lunch
4.
Can't deliver lunch
2 tương đương với
Can't deliver lunch
6 và được đánh giá từ trái sang phải.

Hơn nữa, trong khi chuỗi các bài tập như

Can't deliver lunch
7 hoàn toàn hợp lệ,
Can't deliver lunch
8 sẽ dẫn đến lỗi.

# Multiplication has higher precedence
# than subtraction
>>> 10 - 4 * 2
2
0

Đầu ra

# Multiplication has higher precedence
# than subtraction
>>> 10 - 4 * 2
2
1

Thứ tự chính xác của toán tử được ưu tiên trong Python là gì?

Hầu như tất cả các nhà khai thác đều có sự kết hợp từ trái sang phải. Ví dụ, phép nhân và phân chia sàn có cùng ưu tiên. Do đó, nếu cả hai đều có mặt trong một biểu thức, cái bên trái được đánh giá trước. Lưu ý: Toán tử số mũ ** có tính kết hợp từ phải sang trái trong Python.left-to-right associativity. For example, multiplication and floor division have the same precedence. Hence, if both of them are present in an expression, the left one is evaluated first. Note: Exponent operator ** has right-to-left associativity in Python.

Thứ tự chính xác của các hoạt động là gì?

Thứ tự hoạt động là một quy tắc cho biết chuỗi các bước chính xác để đánh giá biểu thức toán học.Chúng ta có thể nhớ thứ tự bằng cách sử dụng PEMDAs: dấu ngoặc đơn, số mũ, phép nhân và chia (từ trái sang phải), cộng và trừ (từ trái sang phải).Được tạo bởi Sal Khan.Parentheses, Exponents, Multiplication and Division (from left to right), Addition and Subtraction (from left to right). Created by Sal Khan.

4 toán tử trong Python là gì?

Các nhà khai thác Python..
Toán tử số học ..
Người vận hành chuyển nhượng ..
Toán tử so sánh..
Toán tử logic ..
Người vận hành danh tính ..
Các nhà khai thác thành viên ..
Các nhà khai thác bitwise ..

3 thứ tự hoạt động là gì?

Thứ tự hoạt động là một bộ quy tắc cho cách đánh giá các biểu thức.Họ đảm bảo mọi người đều có cùng câu trả lời.Nhiều người ghi nhớ thứ tự hoạt động như PEMDAs (ngoặc đơn, số mũ, nhân/chia và cộng/trừ).parentheses, exponents, multiplication/division, and addition/subtraction).