Chúng ta sẽ dành phần còn lại của cuốn sách này để đào sâu và hoàn thiện hiểu biết của mình về chính xác những loại công việc mà máy tính có thể làm. Khả năng lập trình máy tính hiệu quả của bạn sẽ phụ thuộc phần lớn vào khả năng hiểu rõ những điều này của bạn, để bạn có thể diễn đạt những gì bạn muốn đạt được bằng ngôn ngữ mà máy tính có thể thực hiện
Tuy nhiên, trước khi chúng ta hiểu điều đó, chúng ta cần nói về những thứ mà máy tính hoạt động
Chương trình máy tính hoạt động trên dữ liệu. Một phần dữ liệu đơn lẻ có thể được gọi là mốc thời gian, nhưng chúng tôi sẽ sử dụng thuật ngữ liên quan, giá trị
Giá trị là một trong những điều cơ bản — như một chữ cái hoặc một con số — mà một chương trình thao tác. Các giá trị mà chúng tôi đã thấy cho đến nay là
>>> 42000 42000 >>> 42,000 [42, 0]8 [kết quả khi chúng tôi thêm
>>> 42000 42000 >>> 42,000 [42, 0]9] và
>>> type['This is a string.'] >>> type["And so is this."] >>> type["""and this."""] >>> type['''and even this...''']0
Các giá trị được nhóm thành các loại hoặc lớp dữ liệu khác nhau
Ghi chú
Ở cấp độ phần cứng của máy, tất cả các giá trị được lưu trữ dưới dạng một chuỗi bit, thường được biểu thị bằng các chữ số
>>> type['This is a string.'] >>> type["And so is this."] >>> type["""and this."""] >>> type['''and even this...''']1 và
>>> type['This is a string.'] >>> type["And so is this."] >>> type["""and this."""] >>> type['''and even this...''']2. Tất cả các loại dữ liệu máy tính, cho dù chúng là số, văn bản, hình ảnh, âm thanh hay bất kỳ thứ gì khác, cuối cùng đều được máy tính giải thích các mẫu bit này.
Rất may, các ngôn ngữ cấp cao như Python cung cấp cho chúng ta các kiểu dữ liệu cấp cao, linh hoạt giúp trừu tượng hóa các chi tiết tẻ nhạt của tất cả các bit này và phù hợp hơn với bộ não con người của chúng ta
>>> 42000 42000 >>> 42,000 [42, 0]8 là một số nguyên và
>>> type['This is a string.'] >>> type["And so is this."] >>> type["""and this."""] >>> type['''and even this...''']0 là một chuỗi, được gọi như vậy vì nó chứa một chuỗi các chữ cái. Bạn [và trình thông dịch] có thể xác định các chuỗi vì chúng được đặt trong dấu ngoặc kép
Nếu bạn không chắc một giá trị thuộc lớp nào, Python có một hàm gọi là type có thể cho bạn biết
>>> type["Hello, World!"] >>> type[17]
Không có gì đáng ngạc nhiên, các chuỗi thuộc về lớp str và các số nguyên thuộc về lớp int. Ít rõ ràng hơn, các số có một điểm nằm giữa số nguyên và phần phân số của chúng thuộc về một lớp gọi là số float, bởi vì những số này được biểu diễn theo định dạng gọi là dấu phẩy động. Ở giai đoạn này, bạn có thể coi lớp từ và loại thay thế cho nhau. Chúng ta sẽ quay lại hiểu sâu hơn về class là gì trong các chương sau
________số 8_______
Còn các giá trị như
>>> type['This is a string.'] >>> type["And so is this."] >>> type["""and this."""] >>> type['''and even this...''']5 và
>>> type['This is a string.'] >>> type["And so is this."] >>> type["""and this."""] >>> type['''and even this...''']6 thì sao?
>>> type["17"] >>> type["3.2"]
Chúng là những sợi dây
Không sử dụng dấu phẩy trong
>>> type['This is a string.'] >>> type["And so is this."] >>> type["""and this."""] >>> type['''and even this...''']7s
Khi bạn nhập một số nguyên lớn, bạn có thể muốn sử dụng dấu phẩy giữa các nhóm ba chữ số, như trong
>>> type['This is a string.'] >>> type["And so is this."] >>> type["""and this."""] >>> type['''and even this...''']8. Đây không phải là một số nguyên hợp pháp trong Python, nhưng nó có nghĩa là một số khác, đó là một số hợp pháp
>>> 42000 42000 >>> 42,000 [42, 0]
Chà, đó không phải là điều chúng tôi mong đợi chút nào. Do dấu phẩy, Python coi đây là một cặp giá trị trong một bộ. Vì vậy, hãy nhớ không đặt dấu phẩy hoặc dấu cách trong số nguyên của bạn. Cũng xem lại những gì chúng ta đã nói trong chương trước. ngôn ngữ chính thức rất nghiêm ngặt, ký hiệu ngắn gọn và ngay cả một thay đổi nhỏ nhất cũng có thể có ý nghĩa hoàn toàn khác với những gì bạn dự định
2. 2. Ba cách viết chuỗi
Các chuỗi trong Python có thể được đặt trong dấu nháy đơn [_______2_______9] hoặc dấu nháy kép [
>>> print['''"Oh no," she exclaimed, "Ben's bike is broken!"'''] "Oh no," she exclaimed, "Ben's bike is broken!" >>>0] hoặc ba dấu nháy trong mỗi dấu nháy đơn [
>>> print['''"Oh no," she exclaimed, "Ben's bike is broken!"'''] "Oh no," she exclaimed, "Ben's bike is broken!" >>>1 hoặc
>>> print['''"Oh no," she exclaimed, "Ben's bike is broken!"'''] "Oh no," she exclaimed, "Ben's bike is broken!" >>>2]
>>> type['This is a string.'] >>> type["And so is this."] >>> type["""and this."""] >>> type['''and even this...''']
Chuỗi trích dẫn kép có thể chứa dấu nháy đơn bên trong, như trong
>>> print['''"Oh no," she exclaimed, "Ben's bike is broken!"'''] "Oh no," she exclaimed, "Ben's bike is broken!" >>>3 và chuỗi trích dẫn đơn có thể chứa dấu ngoặc kép bên trong, như trong
>>> print['''"Oh no," she exclaimed, "Ben's bike is broken!"'''] "Oh no," she exclaimed, "Ben's bike is broken!" >>>4
Các chuỗi kèm theo ba lần xuất hiện của một trong hai ký hiệu trích dẫn được gọi là chuỗi trích dẫn ba. Chúng có thể chứa dấu nháy đơn hoặc kép
>>> print['''"Oh no," she exclaimed, "Ben's bike is broken!"'''] "Oh no," she exclaimed, "Ben's bike is broken!" >>>
Ba chuỗi được trích dẫn thậm chí có thể trải rộng trên nhiều dòng
>>> message = """This message will .. span several .. lines.""" >>> print[message] This message will span several lines. >>>
Python không quan tâm bạn sử dụng dấu ngoặc đơn hay dấu ngoặc kép hay dấu ngoặc kép ba loại để bao quanh chuỗi của bạn. một khi nó đã phân tích cú pháp văn bản của chương trình hoặc lệnh của bạn, cách nó lưu trữ giá trị giống hệt nhau trong mọi trường hợp và các dấu ngoặc kép xung quanh không phải là một phần của giá trị. Nhưng khi trình thông dịch muốn hiển thị một chuỗi, nó phải quyết định sử dụng dấu ngoặc kép nào để làm cho nó trông giống như một chuỗi
>>> 'This is a string.' 'This is a string.' >>> """And so is this.""" 'And so is this.'
Vì vậy, các nhà thiết kế ngôn ngữ Python đã chọn thường bao quanh các chuỗi của họ bằng các dấu nháy đơn. Bạn nghĩ điều gì sẽ xảy ra nếu chuỗi đã chứa dấu nháy đơn?
2. 3. Chuỗi ký tự và chuỗi thoát
Một chữ là một ký hiệu để biểu thị một giá trị không đổi của một kiểu dữ liệu dựng sẵn
Trong chuỗi ký tự, hầu hết các ký tự đại diện cho chính họ, vì vậy nếu chúng tôi muốn ký tự có chữ cái
>>> print['''"Oh no," she exclaimed, "Ben's bike is broken!"'''] "Oh no," she exclaimed, "Ben's bike is broken!" >>>5, chúng tôi chỉ cần viết
>>> print['''"Oh no," she exclaimed, "Ben's bike is broken!"'''] "Oh no," she exclaimed, "Ben's bike is broken!" >>>6
But what if we want to represent the literal for a linefeed [what you get when you press the key on the keyboard], or a tab? These string literals are not printable the way an
>>> print['''"Oh no," she exclaimed, "Ben's bike is broken!"'''] "Oh no," she exclaimed, "Ben's bike is broken!" >>>7 or a
>>> print['''"Oh no," she exclaimed, "Ben's bike is broken!"'''] "Oh no," she exclaimed, "Ben's bike is broken!" >>>8 is. To solve this problem Python uses an escape sequence to represent these string literals.
Có một số trình tự thoát này rất hữu ích để biết
Trình tự thoát
Nghĩa
>>> print['''"Oh no," she exclaimed, "Ben's bike is broken!"'''] "Oh no," she exclaimed, "Ben's bike is broken!" >>>9
Dấu gạch chéo ngược [
>>> message = """This message will .. span several .. lines.""" >>> print[message] This message will span several lines. >>>0]
>>> message = """This message will .. span several .. lines.""" >>> print[message] This message will span several lines. >>>1
Trích dẫn đơn [
>>> type['This is a string.'] >>> type["And so is this."] >>> type["""and this."""] >>> type['''and even this...''']9]
>>> message = """This message will .. span several .. lines.""" >>> print[message] This message will span several lines. >>>3
Trích dẫn kép [
>>> print['''"Oh no," she exclaimed, "Ben's bike is broken!"'''] "Oh no," she exclaimed, "Ben's bike is broken!" >>>0]
>>> message = """This message will .. span several .. lines.""" >>> print[message] This message will span several lines. >>>5
xóa lùi
>>> message = """This message will .. span several .. lines.""" >>> print[message] This message will span several lines. >>>6
nguồn cấp dữ liệu
>>> message = """This message will .. span several .. lines.""" >>> print[message] This message will span several lines. >>>7
Chuyển hướng
>>> message = """This message will .. span several .. lines.""" >>> print[message] This message will span several lines. >>>6 được sử dụng thường xuyên nhất trong số này. Ví dụ sau đây hy vọng sẽ làm cho những gì nó làm rõ ràng
>>> print["Line 1\n\n\nLine 5"] Line 1 Line 5 >>>
2. 4. Tên và câu lệnh gán
Để viết các chương trình thực hiện mọi thứ với những thứ mà chúng ta gọi là giá trị, chúng ta cần một cách để lưu trữ các giá trị của mình trong bộ nhớ của máy tính và đặt tên cho chúng để truy xuất sau này.
Chúng tôi sử dụng câu lệnh gán của Python cho mục đích này
>>> message = "What's up, Doc?" >>> n = 17 >>> pi = 3.14159
Ví dụ trên thực hiện ba phép gán. Cái đầu tiên gán giá trị chuỗi
>>> message = """This message will .. span several .. lines.""" >>> print[message] This message will span several lines. >>>9 cho tên
>>> 'This is a string.' 'This is a string.' >>> """And so is this.""" 'And so is this.'0. Số thứ hai gán cho số nguyên
>>> 'This is a string.' 'This is a string.' >>> """And so is this.""" 'And so is this.'1 tên
>>> 'This is a string.' 'This is a string.' >>> """And so is this.""" 'And so is this.'2 và số thứ ba gán số dấu phẩy động
>>> 'This is a string.' 'This is a string.' >>> """And so is this.""" 'And so is this.'3 tên
>>> 'This is a string.' 'This is a string.' >>> """And so is this.""" 'And so is this.'4
Câu lệnh gán tạo tên và liên kết những tên này với giá trị. Sau đó, các giá trị có thể được truy xuất từ bộ nhớ của máy tính bằng cách tham khảo tên được liên kết với chúng
>>> type[3.2]0
Tên còn được gọi là biến, vì các giá trị mà chúng tham chiếu có thể thay đổi trong quá trình thực thi chương trình. Biến cũng có loại. Một lần nữa, chúng ta có thể hỏi người phiên dịch xem chúng là gì.
>>> type[3.2]1
Loại biến là loại giá trị mà nó hiện đang đề cập đến
Một cách phổ biến để biểu diễn các biến trên giấy là viết tên của biến đó bằng một đường nối nó với giá trị hiện tại của nó. Loại hình này được gọi là sơ đồ đối tượng. Nó cho thấy trạng thái của các biến tại một thời điểm cụ thể trong thời gian
Sơ đồ này cho thấy kết quả của việc thực hiện các câu lệnh gán trước đó
2. 5. Biến là biến
Chúng tôi sử dụng các biến trong một chương trình để "ghi nhớ" mọi thứ, chẳng hạn như tỷ số hiện tại của trận bóng đá. Nhưng biến là biến. Điều này có nghĩa là chúng có thể thay đổi theo thời gian, giống như bảng điểm trong một trận bóng đá. Bạn có thể gán một giá trị cho một biến và sau đó gán một giá trị khác cho cùng một biến
Ghi chú
Điều này khác với toán học. Trong toán học, nếu bạn cho x giá trị 3, thì nó không thể thay đổi để liên kết với một giá trị khác trong nửa chừng tính toán của bạn
>>> type[3.2]2
Bạn sẽ nhận thấy rằng chúng tôi đã thay đổi giá trị của
>>> 'This is a string.' 'This is a string.' >>> """And so is this.""" 'And so is this.'5 ba lần và ở lần gán thứ ba, chúng tôi thậm chí còn cho nó một giá trị thuộc loại khác
Ghi chú
Phần lớn lập trình là để máy tính ghi nhớ mọi thứ, chẳng hạn như gán một biến cho số cuộc gọi nhỡ trên điện thoại của bạn, sau đó sắp xếp để cập nhật biến đó khi bạn bỏ lỡ một cuộc gọi khác
Trong trình bao Python, việc nhập tên tại dấu nhắc khiến trình thông dịch tra cứu giá trị được liên kết với tên [hoặc trả về thông báo lỗi nếu tên không được xác định] và hiển thị tên đó. Trong tập lệnh, tên được xác định không có trong lệnh gọi hàm
>>> 'This is a string.' 'This is a string.' >>> """And so is this.""" 'And so is this.'6 hoàn toàn không hiển thị
2. 6. Toán tử gán không phải là dấu bằng.
Ngữ nghĩa của câu lệnh gán có thể gây nhầm lẫn cho những người mới bắt đầu lập trình, đặc biệt là vì mã thông báo gán,
>>> 'This is a string.' 'This is a string.' >>> """And so is this.""" 'And so is this.'7 có thể dễ bị nhầm lẫn với bằng [Python sử dụng mã thông báo
>>> 'This is a string.' 'This is a string.' >>> """And so is this.""" 'And so is this.'8 cho bằng, như chúng ta sẽ sớm thấy]. Không phải vậy
>>> type[3.2]3
Câu lệnh ở giữa ở trên sẽ không thể xảy ra nếu
>>> 'This is a string.' 'This is a string.' >>> """And so is this.""" 'And so is this.'7 có nghĩa là bằng, vì
>>> 'This is a string.' 'This is a string.' >>> """And so is this.""" 'And so is this.'2 không bao giờ có thể bằng với
>>> print["Line 1\n\n\nLine 5"] Line 1 Line 5 >>>1. Tuyên bố này là Python hoàn toàn hợp pháp, tuy nhiên. Câu lệnh gán liên kết một tên, ở phía bên trái của toán tử, với một giá trị, ở phía bên phải
Hai
>>> 'This is a string.' 'This is a string.' >>> """And so is this.""" 'And so is this.'2 trong
>>> print["Line 1\n\n\nLine 5"] Line 1 Line 5 >>>3 có ý nghĩa khác nhau.
>>> 'This is a string.' 'This is a string.' >>> """And so is this.""" 'And so is this.'2 ở bên phải là tra cứu bộ nhớ được thay thế bằng một giá trị khi phía bên tay phải được đánh giá bởi trình thông dịch Python. Nó phải tồn tại nếu không sẽ xảy ra lỗi tên. Phía bên tay phải của câu lệnh gán được đánh giá trước
>>> 'This is a string.' 'This is a string.' >>> """And so is this.""" 'And so is this.'2 ở bên trái là tên được đặt cho giá trị mới được tính ở phía bên tay phải vì nó được lưu trong bộ nhớ của máy tính. Nó không nhất thiết phải tồn tại trước đó, vì nó sẽ được thêm vào tên có sẵn của chương trình đang chạy nếu nó chưa có
Ghi chú
Các tên trong Python tồn tại trong một ngữ cảnh, được gọi là không gian tên, mà chúng ta sẽ thảo luận ở phần sau của cuốn sách
Phía bên trái của câu lệnh gán phải là một tên biến Python hợp lệ. Đây là lý do tại sao bạn sẽ gặp lỗi nếu bạn nhập
>>> type[3.2]4
Mẹo
Khi đọc hoặc viết mã, hãy tự nhủ “n được gán 17” hoặc “n nhận giá trị 17”. Đừng nói “n bằng 17”
Ghi chú
Trong trường hợp bạn đang thắc mắc, a là một ký tự hoặc chuỗi ký tự có ý nghĩa cú pháp trong một ngôn ngữ. Trong các toán tử Python, từ khóa, chữ và khoảng trắng đều tạo thành mã thông báo trong ngôn ngữ
2. 7. Tên biến và từ khóa
Tên biến hợp lệ trong Python phải tuân theo ba quy tắc đơn giản sau
Chúng là một chuỗi các chữ cái và chữ số dài tùy ý
Trình tự phải bắt đầu bằng một chữ cái
Ngoài một. z và A. Z, dấu gạch dưới [
>>> print["Line 1\n\n\nLine 5"] Line 1 Line 5 >>>
6] là một chữ cái
Mặc dù việc sử dụng chữ in hoa là hợp pháp, nhưng theo quy ước, chúng tôi không. Nếu bạn làm như vậy, hãy nhớ trường hợp đó quan trọng.
>>> 'This is a string.' 'This is a string.' >>> """And so is this.""" 'And so is this.'5 và
>>> print["Line 1\n\n\nLine 5"] Line 1 Line 5 >>>8 sẽ là các biến khác nhau
Ký tự gạch dưới [
>>> print["Line 1\n\n\nLine 5"] Line 1 Line 5 >>>6] có thể xuất hiện trong tên. Nó thường được sử dụng trong các tên có nhiều từ, chẳng hạn như
>>> message = "What's up, Doc?" >>> n = 17 >>> pi = 3.141590 hoặc
>>> message = "What's up, Doc?" >>> n = 17 >>> pi = 3.141591
Có một số trường hợp tên bắt đầu bằng dấu gạch dưới có ý nghĩa đặc biệt, vì vậy quy tắc an toàn cho người mới bắt đầu là bắt đầu tất cả các tên bằng một chữ cái khác với dấu gạch dưới
Nếu bạn đặt tên biến không hợp lệ, bạn sẽ gặp lỗi cú pháp
>>> type[3.2]5
>>> message = "What's up, Doc?" >>> n = 17 >>> pi = 3.141592 là bất hợp pháp vì nó không bắt đầu bằng một chữ cái.
>>> message = "What's up, Doc?" >>> n = 17 >>> pi = 3.141593 là bất hợp pháp vì nó chứa ký tự không hợp lệ, ký hiệu đô la. Nhưng có gì sai với
>>> message = "What's up, Doc?" >>> n = 17 >>> pi = 3.141594?
Hóa ra
>>> message = "What's up, Doc?" >>> n = 17 >>> pi = 3.141594 là một trong những từ khóa Python. Các từ khóa xác định các quy tắc và cấu trúc cú pháp của ngôn ngữ và chúng không thể được sử dụng làm tên biến
Python 3 có 33 từ khóa [và thỉnh thoảng những cải tiến đối với Python lại giới thiệu hoặc loại bỏ một hoặc hai từ khóa]
và
như
khẳng định
nghỉ
tầng lớp
tiếp tục
chắc chắn
xóa
yêu tinh
khác
ngoại trừ
cuối cùng
vì
từ
toàn cầu
nếu
nhập khẩu
Trong
Là
lamda
phi cục bộ
không phải
hoặc là
đi qua
nâng lên
trở lại
cố gắng
trong khi
với
sản lượng
Thật
Sai
Không có
Bạn có thể muốn giữ danh sách này tiện dụng. Trên thực tế, như thường xảy ra khi học lập trình với Python, khi bạn không chắc chắn về điều gì đó, bạn có thể hỏi Python
>>> type[3.2]6
Danh sách các từ khóa,
>>> message = "What's up, Doc?" >>> n = 17 >>> pi = 3.141596, đến với chúng tôi, một cách thích hợp, trong danh sách Python
Nếu trình thông dịch phàn nàn về một trong các tên biến của bạn và bạn không biết tại sao, hãy xem nó có trong danh sách này không
Các lập trình viên thường chọn tên cho các biến của họ có ý nghĩa đối với người đọc chương trình là con người - chúng giúp lập trình viên ghi lại hoặc ghi nhớ biến đó được sử dụng để làm gì
thận trọng
Những người mới bắt đầu đôi khi nhầm lẫn giữa ý nghĩa với người đọc với ý nghĩa với máy tính. Vì vậy, họ sẽ nghĩ sai rằng vì họ đã gọi một biến nào đó là
>>> message = "What's up, Doc?" >>> n = 17 >>> pi = 3.141597 hoặc
>>> 'This is a string.' 'This is a string.' >>> """And so is this.""" 'And so is this.'4, nên bằng cách nào đó, nó sẽ tự động tính trung bình hoặc tự động liên kết biến
>>> 'This is a string.' 'This is a string.' >>> """And so is this.""" 'And so is this.'4 với giá trị 3. 14159. Không. Máy tính không gắn ý nghĩa ngữ nghĩa với tên biến của bạn. Tùy thuộc vào bạn để làm điều đó
2. 8. Câu lệnh và biểu thức
Một câu lệnh là một lệnh mà trình thông dịch Python có thể thực thi. Cho đến nay chúng ta đã thấy hai câu lệnh gán và câu lệnh nhập. Một số loại câu lệnh khác mà chúng ta sẽ thấy ngay sau đây là câu lệnh
>>> type[3.2]00, câu lệnh
>>> type[3.2]01 và câu lệnh
>>> type[3.2]02. [Còn nhiều loại khác nữa. ]
Khi bạn gõ một câu lệnh trên dòng lệnh, Python sẽ thực thi nó. Trình thông dịch không hiển thị bất kỳ kết quả nào
Một biểu thức là sự kết hợp của các giá trị, biến, toán tử và lệnh gọi hàm. Nếu bạn nhập một biểu thức tại dấu nhắc Python, trình thông dịch sẽ đánh giá nó và hiển thị kết quả, luôn là một giá trị
>>> type[3.2]7
Trong ví dụ này,
>>> type[3.2]03 là một hàm Python tích hợp trả về số lượng ký tự trong một chuỗi. Trước đây chúng ta đã thấy các hàm
>>> 'This is a string.' 'This is a string.' >>> """And so is this.""" 'And so is this.'6 và
>>> type[3.2]05, vì vậy đây là ví dụ thứ ba của chúng ta về hàm
Việc đánh giá một biểu thức tạo ra một giá trị, đó là lý do tại sao các biểu thức có thể xuất hiện ở phía bên tay phải của các câu lệnh gán. Bản thân một giá trị là một biểu thức đơn giản và một biến cũng vậy
>>> type[3.2]8
2. 9. Toán tử và toán hạng
Toán tử là mã thông báo đặc biệt đại diện cho các phép tính như cộng, nhân và chia. Các giá trị mà toán tử sử dụng được gọi là toán hạng
Sau đây là tất cả các biểu thức Python hợp pháp có ý nghĩa ít nhiều rõ ràng
>>> type[3.2]9
Các mã thông báo
>>> type[3.2]06 và
>>> type[3.2]07, và việc sử dụng dấu ngoặc đơn để nhóm, có nghĩa là trong Python ý nghĩa của chúng trong toán học. Dấu hoa thị [
>>> type[3.2]08] là mã thông báo cho phép nhân và
>>> type[3.2]09 là mã thông báo cho lũy thừa [nâng một số lên lũy thừa]
>>> type["17"] >>> type["3.2"]0
Khi một tên biến xuất hiện ở vị trí của một toán hạng, nó sẽ được thay thế bằng giá trị của nó trước khi thao tác được thực hiện
Cộng, trừ, nhân và lũy thừa đều làm những gì bạn mong đợi
Thí dụ. vậy chúng ta hãy chuyển đổi 645 phút thành giờ
>>> type["17"] >>> type["3.2"]1
Ối. Trong Python 3, toán tử chia
>>> type[3.2]10 luôn cho kết quả dấu chấm động. Những gì chúng ta có thể muốn biết là có bao nhiêu giờ và còn lại bao nhiêu phút. Python cung cấp cho chúng ta hai hương vị khác nhau của toán tử chia. Phép chia thứ hai, được gọi là phép chia số nguyên, sử dụng mã thông báo
>>> type[3.2]11. Nó luôn cắt bớt kết quả của nó xuống số nguyên nhỏ nhất tiếp theo [ở bên trái trên trục số]
>>> type["17"] >>> type["3.2"]2
Hãy cẩn thận rằng bạn chọn toán tử chia chính xác. Nếu bạn đang làm việc với các biểu thức mà bạn cần các giá trị dấu phẩy động, hãy sử dụng toán tử chia để thực hiện phép chia một cách thích hợp
2. 10. Toán tử mô đun
Toán tử mô đun hoạt động trên số nguyên [và biểu thức số nguyên] và cho số dư khi chia số thứ nhất cho số thứ hai. Trong Python, toán tử mô đun là dấu phần trăm [
>>> type[3.2]12]. Cú pháp giống như đối với các toán tử khác
>>> type["17"] >>> type["3.2"]3
Vậy 7 chia 3 được 2 dư 1
Toán tử mô-đun hóa ra hữu ích một cách đáng ngạc nhiên. Ví dụ: bạn có thể kiểm tra xem một số có chia hết cho số khác hay không – nếu
>>> type[3.2]13 bằng 0 thì
>>> type[3.2]14 có chia hết cho
>>> type[3.2]15
Ngoài ra, bạn có thể trích xuất chữ số hoặc chữ số ngoài cùng bên phải từ một số. Ví dụ:
>>> type[3.2]16 mang lại chữ số ngoài cùng bên phải của
>>> type[3.2]14 [ở cơ số 10]. Tương tự
>>> type[3.2]18 mang lại hai chữ số cuối cùng
Nó cũng cực kỳ hữu ích để thực hiện chuyển đổi, chẳng hạn như từ giây, sang giờ, phút và giây. Vì vậy, hãy viết một chương trình để yêu cầu người dùng nhập một số giây và chúng tôi sẽ chuyển đổi chúng thành giờ, phút và giây còn lại
>>> type["17"] >>> type["3.2"]4
2. 11. Thứ tự thực hiện
Khi có 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 quy tắc ưu tiên. Python tuân theo các quy tắc ưu tiên tương tự cho các toán tử toán học của nó mà toán học thực hiện. Từ viết tắt PEMDAS là một cách hữu ích để ghi nhớ thứ tự các hoạt động
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, nên
>>> type[3.2]
19 là 4 và>>> type[3.2]
20 là 8. Bạn cũng có thể sử dụng dấu ngoặc đơn để làm cho một biểu thức dễ đọc hơn, chẳng hạn như trong>>> type[3.2]
21, mặc dù nó không thay đổi kết quảLuỹ thừa có mức ưu tiên cao nhất tiếp theo, vì vậy
>>> type[3.2]
22 là 3 chứ không phải 4 và>>> type[3.2]
23 là 3 chứ không phải 27Cả hai toán tử Phép nhân và Phép chia đều có cùng mức độ ưu tiên, cao hơn Phép cộng và Phép trừ, vốn cũng có cùng mức độ ưu tiên. Vì vậy,
>>> type[3.2]
24 mang lại 5 thay vì 4 và>>> type[3.2]
25 là 1, không phải 6. #. Các toán tử có cùng mức độ ưu tiên được đánh giá từ trái sang phải. Trong đại số chúng ta nói chúng là liên kết trái. Vì vậy, trong biểu thức>>> type[3.2]
26, phép trừ xảy ra trước, cho kết quả là 3. Sau đó chúng tôi thêm 2 để có được 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à>>> type[3.2]
27, tức là 1. [Từ viết tắt PEDMAS có thể khiến bạn lầm tưởng rằng phép chia có quyền ưu tiên cao hơn phép nhân và phép cộng được thực hiện trước phép trừ - đừng hiểu lầm. Phép trừ và phép cộng có cùng ưu tiên và áp dụng quy tắc từ trái sang phải. ]
Ghi chú
Do một số vấn đề lịch sử, một ngoại lệ đối với quy tắc kết hợp từ trái sang phải là toán tử lũy thừa **, do đó, một gợi ý hữu ích là 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 đến lũy thừa
>>> type["17"] >>> type["3.2"]5
Dấu nhắc lệnh chế độ ngay lập tức của Python rất phù hợp để khám phá và thử nghiệm các biểu thức như thế này
2. 12. Thao tác trên chuỗi
Nói chung, bạn không thể thực hiện các phép toán trên chuỗi, ngay cả khi chuỗi trông giống số. Những điều sau đây là bất hợp pháp [giả sử rằng
>>> 'This is a string.' 'This is a string.' >>> """And so is this.""" 'And so is this.'0 có kiểu chuỗi]
>>> type["17"] >>> type["3.2"]6
Thật thú vị, toán tử
>>> type[3.2]06 hoạt động với chuỗi, nhưng đối với chuỗi, toán tử
>>> type[3.2]06 đại diện cho phép nối, không phải phép cộng. Nối có nghĩa là nối hai toán hạng bằng cách liên kết chúng từ đầu đến cuối. Ví dụ
>>> type["17"] >>> type["3.2"]7
Đầu ra của chương trình này là
>>> type[3.2]31. Khoảng cách trước từ
>>> type[3.2]32 là một phần của chuỗi và cần thiết để tạo khoảng cách giữa các chuỗi được nối
Toán tử
>>> type[3.2]08 cũng hoạt động trên các chuỗi; . Ví dụ:
>>> type[3.2]34 là
>>> type[3.2]35. Một trong các toán hạng phải là một chuỗi;
Một mặt, cách giải thích này của
>>> type[3.2]06 và
>>> type[3.2]08 có ý nghĩa bằng phép loại suy với phép cộng và phép nhân. Cũng giống như
>>> type[3.2]38 tương đương với
>>> type[3.2]39, chúng tôi mong đợi
>>> type[3.2]40 tương đương với
>>> type[3.2]41, và nó là. Mặt khác, có một cách quan trọng trong đó phép nối và phép lặp chuỗi khác với phép cộng và phép nhân số nguyên. Bạn có thể nghĩ ra một thuộc tính mà phép cộng và phép nhân có mà phép nối chuỗi và phép lặp lại không?
2. 13. Chức năng chuyển đổi kiểu
Ở đây chúng ta sẽ xem xét thêm ba hàm Python,
>>> type['This is a string.'] >>> type["And so is this."] >>> type["""and this."""] >>> type['''and even this...''']7,
>>> type[3.2]43 và
>>> type[3.2]44, sẽ [cố gắng] chuyển đổi các đối số của chúng thành các loại
>>> type['This is a string.'] >>> type["And so is this."] >>> type["""and this."""] >>> type['''and even this...''']7,
>>> type[3.2]43 và
>>> type[3.2]44 tương ứng. Chúng tôi gọi những chức năng chuyển đổi loại này
Hàm
>>> type['This is a string.'] >>> type["And so is this."] >>> type["""and this."""] >>> type['''and even this...''']7 có thể lấy một số dấu phẩy động hoặc một chuỗi và biến nó thành một số nguyên. Đối với các số dấu phẩy động, nó loại bỏ phần phân số của số - một quá trình mà chúng tôi gọi là cắt bớt về 0 trên trục số. Hãy để chúng tôi thấy điều này trong hành động
>>> type["17"] >>> type["3.2"]8
Trường hợp cuối cùng cho thấy rằng một chuỗi phải là một số hợp pháp về mặt cú pháp, nếu không, bạn sẽ gặp phải một trong những lỗi thời gian chạy phiền phức đó
Bộ chuyển đổi kiểu
>>> type[3.2]43 có thể biến một số nguyên, một số float hoặc một chuỗi hợp lệ về mặt cú pháp thành một số float
>>> type["17"] >>> type["3.2"]9
Bộ chuyển đổi kiểu
>>> type[3.2]44 biến đối số của nó thành một chuỗi
>>> 42000 42000 >>> 42,000 [42, 0]0
2. 14. Đầu vào
Có một chức năng tích hợp sẵn trong Python để nhận đầu vào từ người dùng
>>> 42000 42000 >>> 42,000 [42, 0]1
Người sử dụng chương trình có thể nhập tên và nhấn
>>> type[3.2]51. Khi điều này xảy ra, văn bản đã nhập được trả về từ hàm
>>> type[3.2]52 và trong trường hợp này được gán cho biến
>>> type[3.2]53
Giá trị chuỗi bên trong dấu ngoặc đơn được gọi là dấu nhắc và chứa thông báo sẽ được hiển thị cho người dùng khi câu lệnh được thực thi để nhắc phản hồi của họ
Khi một phím được nhấn trên bàn phím, một ký tự sẽ được gửi đến bộ đệm bàn phím bên trong máy tính. Khi nhấn phím enter, chuỗi ký tự bên trong bộ đệm bàn phím theo thứ tự nhận được sẽ được hàm
>>> type[3.2]52 trả về dưới dạng một giá trị chuỗi đơn
Ngay cả khi bạn yêu cầu người dùng nhập tuổi của họ, bạn sẽ nhận được một chuỗi như
>>> type['This is a string.'] >>> type["And so is this."] >>> type["""and this."""] >>> type['''and even this...''']5. Công việc của bạn, với tư cách là lập trình viên, là chuyển đổi chuỗi đó thành int hoặc float, sử dụng các hàm chuyển đổi
>>> type['This is a string.'] >>> type["And so is this."] >>> type["""and this."""] >>> type['''and even this...''']7 hoặc
>>> type[3.2]43 mà chúng ta đã thấy trong phần trước, điều này dẫn chúng ta đến…
2. 15. Thành phần
Cho đến giờ, chúng ta đã xem xét các thành phần của một chương trình — biến, biểu thức, câu lệnh và lệnh gọi hàm — một cách riêng biệt, mà không nói về cách kết hợp chúng
Một trong những tính năng hữu ích nhất của ngôn ngữ lập trình là khả năng lấy các khối xây dựng nhỏ và kết hợp chúng thành các khối lớn hơn.
Ví dụ: chúng tôi biết cách yêu cầu người dùng nhập một số dữ liệu đầu vào, chúng tôi biết cách chuyển đổi chuỗi mà chúng tôi nhận được thành số thực, chúng tôi biết cách viết một biểu thức phức tạp và chúng tôi biết cách in các giá trị. Hãy kết hợp những thứ này lại với nhau trong một chương trình bốn bước nhỏ yêu cầu người dùng nhập một giá trị cho bán kính của hình tròn, sau đó tính diện tích hình tròn từ công thức
Đầu tiên, chúng ta sẽ thực hiện từng bước một
>>> 42000 42000 >>> 42,000 [42, 0]2
Bây giờ, hãy soạn hai dòng đầu tiên thành một dòng mã và soạn hai dòng thứ hai thành một dòng mã khác
>>> 42000 42000 >>> 42,000 [42, 0]3
Nếu chúng tôi thực sự muốn trở nên khó khăn, chúng tôi có thể viết tất cả trong một câu lệnh
>>> 42000 42000 >>> 42,000 [42, 0]4
Mã nhỏ gọn như vậy có thể không dễ hiểu nhất đối với con người, nhưng nó minh họa cách chúng ta có thể tạo các khối lớn hơn từ các khối xây dựng của mình
Nếu bạn từng băn khoăn về việc có nên soạn mã hay phân đoạn mã thành các bước nhỏ hơn hay không, hãy cố gắng làm cho mã đơn giản nhất có thể để người đọc dễ theo dõi.
2. 16. Tìm hiểu thêm về hàm >>> 'This is a string.'
'This is a string.'
>>> """And so is this."""
'And so is this.'
6
Ở cuối chương trước, bạn đã biết rằng hàm in có thể nhận một loạt đối số, được phân tách bằng dấu phẩy và nó in ra một chuỗi với mỗi đối số theo thứ tự được phân tách bằng dấu cách
Trong ví dụ ở phần trước của chương này, bạn có thể nhận thấy rằng các đối số không nhất thiết phải là các chuỗi.
>>> 42000 42000 >>> 42,000 [42, 0]5
Theo mặc định, print sử dụng một khoảng trắng làm dấu phân cách và
>>> message = """This message will .. span several .. lines.""" >>> print[message] This message will span several lines. >>>6 làm dấu kết thúc [ở cuối chuỗi]. Cả hai giá trị mặc định này đều có thể bị ghi đè
>>> 42000 42000 >>> 42,000 [42, 0]6
Bạn sẽ khám phá những tính năng mới này của hàm
>>> 'This is a string.' 'This is a string.' >>> """And so is this.""" 'And so is this.'6 trong các bài tập
2. 17. Bảng thuật ngữ
tuyên bố chuyển nhượngCâu lệnh gán giá trị cho tên [biến]. Ở bên trái toán tử gán,
>>> 'This is a string.' 'This is a string.' >>> """And so is this.""" 'And so is this.'7, là một tên. Ở bên phải của mã thông báo gán là một biểu thức được trình thông dịch Python đánh giá và sau đó được gán cho tên. Sự khác biệt giữa vế trái và vế phải của câu lệnh gán thường gây nhầm lẫn cho các lập trình viên mới. Trong bài tập sau
>>> 42000 42000 >>> 42,000 [42, 0]7
>>> 'This is a string.' 'This is a string.' >>> """And so is this.""" 'And so is this.'2 đóng một vai trò rất khác nhau ở mỗi bên của
>>> 'This is a string.' 'This is a string.' >>> """And so is this.""" 'And so is this.'7. Ở bên phải, nó là một giá trị và tạo thành một phần của biểu thức sẽ được trình thông dịch Python đánh giá trước khi gán nó cho tên ở bên tráimã thông báo chuyển nhượng
>>> 'This is a string.' 'This is a string.' >>> """And so is this.""" 'And so is this.'7 là mã thông báo gán của Python, không nên nhầm lẫn với toán tử so sánh toán học sử dụng cùng ký hiệuthành phần
Khả năng kết hợp các biểu thức và câu lệnh đơn giản thành các câu lệnh và biểu thức phức hợp để biểu diễn các phép tính phức tạp một cách chính xác
nối liềnĐể nối hai chuỗi end-to-end
loại dữ liệuMột tập hợp các giá trị. Loại giá trị xác định cách nó có thể được sử dụng trong các biểu thức. Cho đến nay, các loại bạn đã thấy là số nguyên [
>>> type['This is a string.'] >>> type["And so is this."] >>> type["""and this."""] >>> type['''and even this...''']7], số dấu phẩy động [
>>> type[3.2]43] và chuỗi [
>>> type[3.2]44]trình tự thoát
Một chuỗi các ký tự bắt đầu bằng ký tự thoát [
>>> message = """This message will .. span several .. lines.""" >>> print[message] This message will span several lines. >>>0] được sử dụng để biểu thị các chuỗi ký tự như nguồn cấp dữ liệu xuống dòng và tabđánh giá
Để đơn giản hóa một biểu thức bằng cách thực hiện các thao tác để mang lại một giá trị duy nhất
sự diễn đạtTổ hợp các biến, toán tử và giá trị đại diện cho một giá trị kết quả duy nhất
trôi nổiMột kiểu dữ liệu Python lưu trữ các số dấu phẩy động. Số dấu phẩy động được lưu trữ nội bộ trong hai phần. một cơ sở và một số mũ. Khi được in ở định dạng tiêu chuẩn, chúng trông giống như số thập phân. Cẩn thận với các lỗi làm tròn khi bạn sử dụng
>>> type[3.2]43 và hãy nhớ rằng chúng chỉ là các giá trị gần đúngint
Một kiểu dữ liệu Python chứa các số nguyên dương và âm
phép chia số nguyênMột phép toán chia một số nguyên cho một số nguyên khác và mang lại một số nguyên. Phép chia số nguyên chỉ mang lại toàn bộ số lần mà tử số chia hết cho mẫu số và loại bỏ mọi phần còn lại
từ khóaMột từ dành riêng được trình biên dịch sử dụng để phân tích chương trình;
nghĩa đenMột ký hiệu để đại diện cho việc đại diện cho một giá trị không đổi của một trong các loại tích hợp sẵn của Python. Ví dụ,
>>> message = """This message will .. span several .. lines.""" >>> print[message] This message will span several lines. >>>6 là một ký tự đại diện cho ký tự xuống dòngtoán tử mô đun
Một toán tử, được biểu thị bằng dấu phần trăm [
>>> type[3.2]12], hoạt động trên các số nguyên và mang lại phần còn lại khi một số được chia cho một số khácsơ đồ đối tượng
Biểu diễn đồ họa của một tập hợp các biến [đối tượng] và các giá trị mà chúng tham chiếu, được lấy tại một thời điểm cụ thể trong quá trình thực thi chương trình
toán hạngMột trong những giá trị mà toán tử vận hành
nhà điều hànhMột ký hiệu đặc biệt đại diện cho một phép tính đơn giản như cộng, nhân hoặc nối chuỗi
quy tắc ưu tiênTập hợp các quy tắc chi phối thứ tự đánh giá các biểu thức liên quan đến nhiều toán tử và toán hạng
tuyên bốMột hướng dẫn mà trình thông dịch Python có thể thực thi. Cho đến nay chúng ta mới chỉ thấy câu lệnh gán, nhưng chúng ta sẽ sớm gặp câu lệnh
>>> type[3.2]75 và câu lệnh
>>> type[3.2]02str
Một kiểu dữ liệu Python chứa một chuỗi ký tự
ba chuỗi trích dẫnMột chuỗi được bao bởi một trong hai
>>> print['''"Oh no," she exclaimed, "Ben's bike is broken!"'''] "Oh no," she exclaimed, "Ben's bike is broken!" >>>2 hoặc
>>> print['''"Oh no," she exclaimed, "Ben's bike is broken!"'''] "Oh no," she exclaimed, "Ben's bike is broken!" >>>1. Ba chuỗi được trích dẫn có thể kéo dài nhiều dònggiá trị
Một số, chuỗi hoặc bất kỳ thứ gì khác có thể được lưu trữ trong một biến hoặc được tính toán trong một biểu thức
Biến đổiMột cái tên đề cập đến một giá trị
tên biếnMột tên được đặt cho một biến. Tên biến trong Python bao gồm một dãy các chữ cái [a. z, A. Z, và _] và chữ số [0. 9] bắt đầu bằng một chữ cái. Trong thực tiễn lập trình tốt nhất, các tên biến nên được chọn sao cho chúng mô tả việc sử dụng chúng trong chương trình, giúp chương trình tự ghi lại tài liệu