Python thật tuyệt. sau rất nhiều năm sử dụng nó, có những điều kỳ lạ nho nhỏ khiến tôi ngạc nhiên. Gần đây, tôi tình cờ phát hiện ra một dòng mã rất đơn giản mà hầu hết các lập trình viên python có kinh nghiệm mà tôi biết đều không thể giải thích nếu không tìm kiếm nó trên Google. Show
Cú pháp của câu lệnh if như sau. >>> 5 == (3 + 2) # Is five equal 5 to the result of 3 + 2? True >>> 5 == 6 False >>> j = "hel" >>> j + "lo" == "hello" True0>>> 5 == (3 + 2) # Is five equal 5 to the result of 3 + 2? True >>> 5 == 6 False >>> j = "hel" >>> j + "lo" == "hello" True1 Giống như định nghĩa hàm trong chương trước và các câu lệnh ghép khác như for , if . Dòng tiêu đề bắt đầu bằng từ khóa statement consists of a header line and a body. The header line begins with the keyword if theo sau là biểu thức Boolean và kết thúc bằng dấu hai chấm (. ). Các câu lệnh thụt lề theo sau được gọi là một khối. Câu lệnh không thụt lề đầu tiên đánh dấu sự kết thúc của khối Mỗi câu lệnh bên trong khối câu lệnh đầu tiên được thực thi theo thứ tự nếu biểu thức Boolean đánh giá là True . Toàn bộ khối câu lệnh đầu tiên bị bỏ qua nếu biểu thức Boolean đánh giá là Sai và thay vào đó, tất cả các câu lệnh được thụt vào trong else clause are executed. Không có giới hạn về số lượng câu lệnh có thể xuất hiện dưới hai mệnh đề của câu lệnh if , nhưng phải có ít nhất . Đôi khi, sẽ rất hữu ích nếu có một phần không có câu lệnh nào (thường là để giữ chỗ, hoặc tạo khung cho mã mà chúng ta chưa viết). Trong trường hợp đó, chúng ta có thể sử dụng câu lệnh pass , câu lệnh này không làm gì khác ngoài việc đóng vai trò giữ chỗ. >>> 5 == (3 + 2) # Is five equal 5 to the result of 3 + 2? True >>> 5 == 6 False >>> j = "hel" >>> j + "lo" == "hello" True0>>> 5 == (3 + 2) # Is five equal 5 to the result of 3 + 2? True >>> 5 == 6 False >>> j = "hel" >>> j + "lo" == "hello" True3 5. 6. Bỏ qua mệnh đề else ¶Lưu đồ của câu lệnh if không có mệnh đề nào khác Một dạng khác của câu lệnh if là dạng trong đó else clause is omitted entirely. In this case, when the condition evaluates to True , các câu lệnh sẽ được thực thi, nếu không thì luồng thực thi sẽ tiếp tục đến câu lệnh sau if. >>> 5 == (3 + 2) # Is five equal 5 to the result of 3 + 2? True >>> 5 == 6 False >>> j = "hel" >>> j + "lo" == "hello" True4>>> 5 == (3 + 2) # Is five equal 5 to the result of 3 + 2? True >>> 5 == 6 False >>> j = "hel" >>> j + "lo" == "hello" True5 Trong trường hợp này, hàm in xuất ra căn bậc hai là hàm sau if — không phải vì chúng ta để trống một dòng, . Cũng lưu ý rằng hàm gọi math. sqrt(x) sẽ báo lỗi trừ khi chúng tôi có nhập toán học . Thuật ngữ Python Tài liệu Python đôi khi sử dụng thuật ngữ bộ câu lệnh để chỉ cái mà chúng ta gọi là khối ở đây. Chúng có nghĩa giống nhau và vì hầu hết các ngôn ngữ khác và các nhà khoa học máy tính đều sử dụng khối từ, chúng tôi sẽ gắn bó với điều đó Cũng lưu ý rằng else không phải là một câu lệnh. Câu lệnh if có hai mệnh đề, một trong số đó là (tùy chọn) else clause. 5. 7. Chuỗi điều kiện¶Đôi khi có nhiều hơn hai khả năng và chúng ta cần nhiều hơn hai nhánh. Một cách để thể hiện một tính toán như vậy là một chuỗi điều kiện >>> 5 == (3 + 2) # Is five equal 5 to the result of 3 + 2? True >>> 5 == 6 False >>> j = "hel" >>> j + "lo" == "hello" True4>>> 5 == (3 + 2) # Is five equal 5 to the result of 3 + 2? True >>> 5 == 6 False >>> j = "hel" >>> j + "lo" == "hello" True7 Lưu đồ của chuỗi điều kiện này elif là viết tắt của else if . Một lần nữa, chính xác một nhánh sẽ được thực thi. Không có giới hạn về số lượng câu lệnh elif mà chỉ có một câu lệnh cuối cùng (và không bắt buộc) else statement is allowed and it must be the last branch in the statement: >>> 5 == (3 + 2) # Is five equal 5 to the result of 3 + 2? True >>> 5 == 6 False >>> j = "hel" >>> j + "lo" == "hello" True8>>> 5 == (3 + 2) # Is five equal 5 to the result of 3 + 2? True >>> 5 == 6 False >>> j = "hel" >>> j + "lo" == "hello" True9 Mỗi điều kiện được kiểm tra theo thứ tự. Nếu cái đầu tiên là sai, cái tiếp theo sẽ được chọn, v.v. Nếu một trong số chúng là đúng, thì nhánh tương ứng sẽ thực thi và câu lệnh kết thúc. Ngay cả khi có nhiều hơn một điều kiện là đúng, thì chỉ có nhánh đúng đầu tiên được thực thi 5. 8. Điều kiện lồng nhau¶Một điều kiện cũng có thể được lồng trong một điều kiện khác. (Đó là cùng một chủ đề về khả năng kết hợp, một lần nữa. ) Chúng ta có thể viết ví dụ trước như sau Lưu đồ của điều kiện lồng nhau này
Câu điều kiện ngoài gồm 2 nhánh. Nhánh thứ hai chứa một câu lệnh if khác, có hai nhánh riêng. Hai nhánh đó cũng có thể chứa các câu điều kiện. Mặc dù việc thụt lề của các câu lệnh làm cho cấu trúc trở nên rõ ràng, nhưng các điều kiện lồng nhau rất nhanh trở nên khó đọc. Nói chung, nên tránh chúng khi chúng ta có thể Các toán tử logic thường cung cấp một cách để đơn giản hóa các câu lệnh điều kiện lồng nhau. Ví dụ: chúng ta có thể viết lại đoạn mã sau bằng cách sử dụng một điều kiện duy nhất x == y # Produce True if .. x is equal to y x != y # .. x is not equal to y x > y # .. x is greater than y x < y # .. x is less than y x >= y # .. x is greater than or equal to y x <= y # .. x is less than or equal to y2x == y # Produce True if .. x is equal to y x != y # .. x is not equal to y x > y # .. x is greater than y x < y # .. x is less than y x >= y # .. x is greater than or equal to y x <= y # .. x is less than or equal to y3 Hàm print chỉ được gọi nếu chúng ta bỏ qua cả hai điều kiện, do đó, thay vì sử dụng hai if statements each with a simple condition, we could make a more complex condition using the and operator. Now we only need a single if . x == y # Produce True if .. x is equal to y x != y # .. x is not equal to y x > y # .. x is greater than y x < y # .. x is less than y x >= y # .. x is greater than or equal to y x <= y # .. x is less than or equal to y4x == y # Produce True if .. x is equal to y x != y # .. x is not equal to y x > y # .. x is greater than y x < y # .. x is less than y x >= y # .. x is greater than or equal to y x <= y # .. x is less than or equal to y5 5. 9. Câu lệnh return ¶Câu lệnh return , có hoặc không có giá trị, tùy thuộc vào chức năng có kết quả hay vô hiệu, cho phép chúng ta kết thúc việc thực thi của . Một lý do để sử dụng trả lại sớm là nếu chúng tôi phát hiện ra tình trạng lỗi.
Hàm print_square_root có tham số tên là x . Điều đầu tiên nó làm là kiểm tra xem x có nhỏ hơn hoặc bằng 0 hay không, trong trường hợp đó, nó sẽ hiển thị thông báo lỗi và sau đó sử dụng return to exit the function. The flow of execution immediately returns to the caller, and the remaining lines of the function are not executed. 5. 10. Đối lập logic¶Mỗi toán tử trong số sáu toán tử quan hệ có một phép đối logic. ví dụ: giả sử chúng ta có thể lấy bằng lái xe khi tuổi của chúng ta lớn hơn hoặc bằng 17, chúng ta không thể lấy bằng lái xe khi chúng ta dưới 17 tuổi Lưu ý rằng ngược lại của >= là < .
Hiểu được những đối lập logic này đôi khi cho phép chúng ta loại bỏ các toán tử not . Các toán tử not thường khá khó đọc trong mã máy tính và ý định của chúng ta thường sẽ rõ ràng hơn nếu chúng ta có thể loại bỏ chúng. Ví dụ: nếu chúng tôi đã viết Python này x == y # Produce True if .. x is equal to y x != y # .. x is not equal to y x > y # .. x is greater than y x < y # .. x is less than y x >= y # .. x is greater than or equal to y x <= y # .. x is less than or equal to y4x == y # Produce True if .. x is equal to y x != y # .. x is not equal to y x > y # .. x is greater than y x < y # .. x is less than y x >= y # .. x is greater than or equal to y x <= y # .. x is less than or equal to y9 có lẽ sẽ rõ ràng hơn nếu sử dụng các luật đơn giản hóa và thay vào đó viết x == y # Produce True if .. x is equal to y x != y # .. x is not equal to y x > y # .. x is greater than y x < y # .. x is less than y x >= y # .. x is greater than or equal to y x <= y # .. x is less than or equal to y4>>> age = 18 >>> old_enough_to_get_driving_licence = age >= 17 >>> print(old_enough_to_get_driving_licence) True >>> type(old_enough_to_get_driving_licence) <class 'bool'>1 Hai luật đơn giản hóa mạnh mẽ (được gọi là luật de Morgan) thường hữu ích khi xử lý các biểu thức Boolean phức tạp là >>> age = 18 >>> old_enough_to_get_driving_licence = age >= 17 >>> print(old_enough_to_get_driving_licence) True >>> type(old_enough_to_get_driving_licence) <class 'bool'>2 Ví dụ: giả sử chúng ta chỉ có thể giết rồng nếu thanh kiếm ánh sáng ma thuật của chúng ta được sạc từ 90% trở lên và chúng ta có 100 đơn vị năng lượng trở lên trong lá chắn bảo vệ của mình. Chúng tôi tìm thấy đoạn mã Python này trong trò chơi >>> 5 == (3 + 2) # Is five equal 5 to the result of 3 + 2? True >>> 5 == 6 False >>> j = "hel" >>> j + "lo" == "hello" True0>>> age = 18 >>> old_enough_to_get_driving_licence = age >= 17 >>> print(old_enough_to_get_driving_licence) True >>> type(old_enough_to_get_driving_licence) <class 'bool'>4 Các định luật de Morgan cùng với các đối lập logic sẽ cho phép chúng ta giải quyết lại điều kiện theo cách (có lẽ) dễ hiểu hơn như thế này >>> 5 == (3 + 2) # Is five equal 5 to the result of 3 + 2? True >>> 5 == 6 False >>> j = "hel" >>> j + "lo" == "hello" True0>>> age = 18 >>> old_enough_to_get_driving_licence = age >= 17 >>> print(old_enough_to_get_driving_licence) True >>> type(old_enough_to_get_driving_licence) <class 'bool'>6 Chúng ta cũng có thể loại bỏ not bằng cách đổi chỗ then and else parts of the conditional. So here is a third version, also equivalent: >>> 5 == (3 + 2) # Is five equal 5 to the result of 3 + 2? True >>> 5 == 6 False >>> j = "hel" >>> j + "lo" == "hello" True0>>> age = 18 >>> old_enough_to_get_driving_licence = age >= 17 >>> print(old_enough_to_get_driving_licence) True >>> type(old_enough_to_get_driving_licence) <class 'bool'>8 Phiên bản này có lẽ là phiên bản hay nhất trong ba phiên bản, bởi vì nó rất khớp với câu nói đầu tiên bằng tiếng Anh. Tính rõ ràng của mã của chúng tôi (đối với những người khác) và giúp dễ dàng nhận thấy rằng mã thực hiện những gì được mong đợi phải luôn là ưu tiên hàng đầu Khi kỹ năng lập trình của chúng ta phát triển, chúng ta sẽ thấy mình có nhiều hơn một cách để giải quyết mọi vấn đề. Vì vậy, các chương trình tốt được thiết kế. Chúng tôi đưa ra các lựa chọn thiên về sự rõ ràng, đơn giản và sang trọng. Chức danh công việc kiến trúc sư phần mềm nói lên rất nhiều điều về công việc của chúng tôi — chúng tôi là những kiến trúc sư thiết kế các sản phẩm của mình để cân bằng giữa vẻ đẹp, chức năng, sự đơn giản và rõ ràng trong các sáng tạo của chúng tôi Mẹo Sau khi chương trình của chúng tôi hoạt động, chúng tôi nên chơi xung quanh một chút để cố gắng đánh bóng nó. Viết bình luận tốt. Hãy suy nghĩ xem liệu mã có rõ ràng hơn với các tên biến khác nhau không. Chúng ta có thể đã làm nó thanh lịch hơn? Chúng tôi coi mã của chúng tôi là sáng tạo của chúng tôi, tác phẩm nghệ thuật của chúng tôi. Chúng tôi làm cho nó tuyệt vời 5. 11. Loại chuyển đổi¶Chúng tôi đã có một cái nhìn đầu tiên về điều này trong một chương trước. Nhìn thấy nó một lần nữa sẽ không đau Nhiều loại Python đi kèm với chức năng tích hợp cố gắng chuyển đổi giá trị của loại khác thành loại của chính nó. Ví dụ: hàm int lấy bất kỳ giá trị nào và chuyển đổi thành số nguyên, nếu có thể hoặc khiếu nại nếu không. >>> age = 18 >>> old_enough_to_get_driving_licence = age >= 17 >>> print(old_enough_to_get_driving_licence) True >>> type(old_enough_to_get_driving_licence) <class 'bool'>9 int cũng có thể chuyển đổi giá trị dấu phẩy động thành số nguyên, nhưng hãy nhớ rằng nó cắt bớt phần phân số. n * 0 == 00 Hàm float chuyển đổi số nguyên và chuỗi thành số dấu phẩy động. n * 0 == 01 Có vẻ lạ khi Python phân biệt giá trị số nguyên 1 với giá trị dấu phẩy động 1. 0 . Chúng có thể đại diện cho cùng một số, nhưng chúng thuộc các loại khác nhau. Lý do là chúng được thể hiện khác nhau bên trong máy tính. Hàm str chuyển đổi bất kỳ đối số nào được cung cấp cho nó thành loại chuỗi: n * 0 == 02 str sẽ hoạt động với bất kỳ giá trị nào và chuyển đổi nó thành một chuỗi. Như đã đề cập trước đó, True là giá trị Boolean; . true is just an ordinary variable name, and is not defined here, so we get an error. 5. 12. Biểu đồ thanh con rùa¶Con rùa có nhiều sức mạnh hơn chúng ta đã thấy cho đến nay. Tài liệu đầy đủ có thể được tìm thấy tại http. // tài liệu. con trăn. org/py3k/library/rùa. html hoặc trong PyScripter, sử dụng Trợ giúp và tìm kiếm mô-đun rùa Dưới đây là một vài thủ thuật mới cho rùa của chúng tôi
Ok, vậy chúng ta có thể nhờ Tess vẽ biểu đồ thanh không? xs = [48, 117, 200, 240, 160, 260, 220] Tương ứng với mỗi lần đo dữ liệu, ta sẽ vẽ một hình chữ nhật đơn giản có chiều cao bằng đó, với chiều rộng cố định n * 0 == 03n * 0 == 04 Ok, không ấn tượng lắm, nhưng đó là một khởi đầu tốt đẹp. Điều quan trọng ở đây là sự phân chia tinh thần, hoặc cách chúng tôi chia vấn đề thành những phần nhỏ hơn. Phần của chúng tôi là vẽ một thanh và chúng tôi đã viết một hàm để làm điều đó. Sau đó, đối với toàn bộ biểu đồ, chúng tôi liên tục gọi chức năng của mình Tiếp theo, ở đầu mỗi thanh, chúng tôi sẽ in giá trị của dữ liệu. Chúng ta sẽ làm điều này trong phần thân của draw_bar , bằng cách thêm t. write(' ' + str(chiều cao)) as the new third line of the body. We’ve put a little space in front of the number, and turned the number into a string. Without this extra space we tend to cramp our text awkwardly against the bar to the left. The result looks a lot better now: Và bây giờ chúng ta sẽ thêm hai dòng để lấp đầy mỗi thanh. Chương trình cuối cùng của chúng tôi bây giờ trông như thế này n * 0 == 05n * 0 == 06 Nó tạo ra những điều sau đây, thỏa mãn hơn ừm. Có lẽ các thanh không nên được nối với nhau ở phía dưới. Chúng ta sẽ cần nhặt bút trong khi tạo khoảng cách giữa các thanh. Chúng tôi sẽ để nó như một bài tập cho bạn 5. 13. Bảng chú giải¶blockMột nhóm các câu lệnh liên tiếp có cùng cách thụt đầu dòng. bodyKhối các câu lệnh trong một câu lệnh ghép theo sau tiêu đề. Đại số BooleanMột số quy tắc sắp xếp lại và lập luận về biểu thức Boolean. Biểu thức Boolean Một biểu thức đúng hoặc sai. Giá trị BooleanCó chính xác hai giá trị Boolean. Đúng và Sai . Giá trị Boolean là kết quả khi một biểu thức Boolean được đánh giá bởi trình thông dịch Python. Chúng có loại bool . nhánhMột trong những đường dẫn có thể có của luồng thực thi được xác định bởi thực thi có điều kiện. chuỗi điều kiện Một nhánh có điều kiện với nhiều hơn hai luồng thực thi có thể. Trong Python, chuỗi điều kiện được viết bằng if . elif . else câu lệnh. toán tử so sánhMột trong sáu toán tử so sánh hai giá trị. == , . = , > , < . điều kiệnBiểu thức Boolean trong câu lệnh điều kiện xác định nhánh nào được thực thi. câu lệnh điều kiện Một câu lệnh kiểm soát luồng thực thi tùy thuộc vào một số điều kiện. Trong Python các từ khóa >=, and <=.conditionThe Boolean expression in a conditional statement that determines which branch is executed.conditional statementA statement that controls the flow of execution depending on some condition. In Python the keywords if , elif và else are used for conditional statements.logical operatorOne of the operators that combines Boolean expressions: và , hoặc và . lồng một cấu trúc chương trình vào trong một cấu trúc chương trình khác, chẳng hạn như một câu lệnh điều kiện bên trong một nhánh của một câu lệnh điều kiện khác. dấu nhắc Một gợi ý trực quan cho người dùng biết rằng hệ thống đã sẵn sàng chấp nhận dữ liệu đầu vào. bảng chân lý Một bảng ngắn gọn gồm các giá trị Boolean có thể mô tả ngữ nghĩa của một toán tử. chuyển đổi kiểu Một lệnh gọi hàm rõ ràng nhận giá trị của một kiểu và tính toán giá trị tương ứng của kiểu khác. gói mã trong một hàm Quá trình thêm tiêu đề hàm và các tham số vào một chuỗi các câu lệnh chương trình thường được gọi là “gói mã trong một hàm”. Quá trình này rất hữu ích bất cứ khi nào các câu lệnh chương trình được đề cập sẽ được sử dụng nhiều lần. Nó thậm chí còn hữu ích hơn khi nó cho phép lập trình viên thể hiện khối óc của họ và cách họ chia nhỏ một vấn đề phức tạp thành nhiều phần. .nestingOne program structure within another, such as a conditional statement inside a branch of another conditional statement.promptA visual cue that tells the user that the system is ready to accept input data.truth tableA concise table of Boolean values that can describe the semantics of an operator.type conversionAn explicit function call that takes a value of one type and computes a corresponding value of another type.wrapping code in a functionThe process of adding a function header and parameters to a sequence of program statements is often refered to as “wrapping the code in a function”. This process is very useful whenever the program statements in question are going to be used multiple times. It is even more useful when it allows the programmer to express their mental chunking, and how they’ve broken a complex problem into pieces.5. 14. Bài tập¶
|