[ATBS2nd]Chương 1 - Python cơ bản - Phần 1

Chào các bạn,
Như đã thông báo ngày hôm qua, chúng tôi sẽ tiến hành dịch cuốn sách Automate The Boring Stuff With Python của tác giả Al Sweigart(sau đây chúng tôi xin gọi tắt là ATBS2nd) một cách đều đặn nếu công việc riêng của chúng tôi không có gì biến đổi nhiều và tình hình dịch bệnh nCovid-19 không có những diễn biến quá phức tạp.
Các bạn có thể trả lời câu hỏi bài tập, hoặc hỏi những vấn đề liên quan đến từng chương bằng cách reply trực tiếp ở từng bài viết.
Chương đầu tiên này sẽ mô tả về những khái niệm cơ bản nhất các bạn có thể chạy những lời câu lệnh này trong command line sau khi set up môi trường như bài trước chúng tôi đã hướng dẫn. Bằng cách gõ cmd vào Start menu trong windows sau đấy gõ python để có thể chạy trực tiếp những dòng lệnh trong python.
Các bạn thử đánh dòng lệnh như trong hình.


Trong Python, 2+2 được gọi là biểu thức là khái khái niệm cơ bản nhất trong việc xây dựng ngôn ngữ lập trình nói chung. Biểu thức bao gồm những giá trị (là 2) và những toán tử (là +). Và sau đó chúng thường được lưu trữ dưới một giá trị duy nhất(là 4) một giá trị duy nhất không có toán tử nào.
Một giá trị duy nhất cũng được lưu thành chính nó trong biểu thức không có toán tử nào, ví dụ

>>> 2
2

Có lỗi là bình thường
Các chương trình sẽ bị crash nếu chúng chứa mã mà máy tính không thể hiểu được, điều này sẽ khiến Python hiển thị thông báo lỗi. Tuy nhiên, một thông báo lỗi không phá vỡ máy tính của bạn, vì vậy đừng sợ mắc lỗi. Một sự cố chỉ có nghĩa là chương trình ngừng chạy bất ngờ.
Nếu bạn muốn biết thêm về một lỗi, bạn có thể tìm kiếm văn bản thông báo lỗi chính xác trực tuyến để biết thêm thông tin.
Các bạn cũng có thể thấy các toán tử khác trong biểu thức Python, được giới thiệu với độ ưu tiên từ trên xuống dưới.


Độ ưu tiên của các toán tử trong python tương tự như trong môn toán học vậy, toán tử ** được ưu tiên nhất sau đấy đến các toán tử *,/, // và % được ưu tiên tiếp theo, sau đấy các toán tử +, - được ưu tiên từ trái sang phải trong biểu thức được ưu tiên cuối cùng. Các bạn có thể sử dụng dấu ngoặc đơn () để thay đổi sự ưu tiên của các toán tử. Khoảng trống không ảnh hưởng đến giá trị ưu tiên trong python(ngoại trừ phần khoảng trắng để đảm bảo chương trình dịch nhận ra đúng biểu thức trong chương trình). Đánh vào những biểu thức này trong command line của bạn.

>>> 2 + 3 * 6
20
>>> (2 + 3) * 6
30
>>> 48565878 * 578453
28093077826734
>>> 2 ** 8
256
>>> 23 / 7
3.2857142857142856
>>> 23 // 7
3
>>> 23 % 7
2
>>> 2 + 2
4
>>> (5 - 1) * ((7 + 1) / (3 - 1))
16.0

Trong mỗi trường hợp, bạn là lập trình viên phải nhập biểu thức, nhưng Python thực hiện phần khó để đưa nó xuống một giá trị duy nhất. Python sẽ tiếp tục đánh giá các phần của biểu thức cho đến khi nó trở thành một giá trị duy nhất, như được hiển thị ở đây:
b3
Các quy tắc này để đặt các toán tử và các giá trị lại với nhau để tạo thành các biểu thức là một phần cơ bản của Python như một ngôn ngữ lập trình, giống như các quy tắc ngữ pháp giúp chúng ta giao tiếp với nhau ở đây các biểu thức giao tiếp với trình biên dịch. Giống như câu ngữ pháp sau
Một tháng tới tôi sẽ không được ra ngoài đường.
Một tháng tới, tôi không sẽ được ngoài đường ra.
Lỗi ngữ pháp sẽ khiến cho người nghe không hiểu được. Tương tự như vậy lỗi ngữ pháp trong python được báo là Syntax Error các bạn thử đánh lệnh theo ví dụ sau.

>>> 5 +
File "<stdin>", line 1
5 +
^
SyntaxError: invalid syntax
>>> 42 + 5 + * 2
File "<stdin>", line 1
42 + 5 + * 2
^
SyntaxError: invalid syntax

Bạn luôn có thể kiểm tra xem liệu một lệnh có hoạt động hay không bằng cách nhập nó vào command line. Đừng lo lắng về việc phá vỡ máy tính: điều tồi tệ nhất có thể xảy ra là Python phản hồi với thông báo lỗi.
Các nhà phát triển phần mềm chuyên nghiệp nhận được thông báo lỗi trong khi viết mã mọi lúc. Nên bạn đừng lo lắng rằng chương trình của mình có lỗi.
Số nguyên, số thực và chuỗi trong python
Hãy nhớ rằng các biểu thức chỉ là các giá trị được kết hợp với các toán tử và chúng luôn đưa xuống một giá trị duy nhất. Kiểu dữ liệu(data types) là một danh mục cho các giá trị và mỗi giá trị thuộc về chính xác một loại dữ liệu. Các kiểu dữ liệu phổ biến nhất trong Python được liệt kê ở bảng dưới đây. Các giá trị -2 và 30, ví dụ, được gọi là các giá trị nguyên. Kiểu dữ liệu số nguyên (hoặc int) biểu thị các giá trị là số nguyên. Các số có dấu thập phân(float), chẳng hạn như 3.14. Lưu ý rằng mặc dù giá trị 42 là số nguyên, giá trị 42.0 sẽ là số thập phân.


Các chương trình Python cũng có thể có các giá trị văn bản được gọi là chuỗi(string). Luôn bao quanh chuỗi của bạn trong các ký tự trích dẫn (’’) hoặc ("") (như trong’ Xin chào ‘hoặc’ Tạm biệt thế giới tàn khốc! ') Để Python biết chuỗi bắt đầu và kết thúc ở đâu. Bạn thậm chí có thể có một chuỗi không có ký tự trong đó, ‘’, được gọi là chuỗi trống.
Nếu bạn nhìn thấy lỗi SyntaxError: EOL while scanning string literal có thể bạn đã quên dấu nháy để đóng chuỗi.
>>> 'Hello, world!
SyntaxError: EOL while scanning string literal

Nối chuỗi và lặp chuỗi
Ý nghĩa của toán tử có thể thay đổi dựa trên các kiểu dữ liệu của các giá trị bên cạnh nó. Ví dụ: + là toán tử cộng khi nó hoạt động trên hai số nguyên hoặc giá trị số thập phân. Tuy nhiên, khi + được sử dụng trên hai giá trị chuỗi, nó tham gia chuỗi dưới dạng toán tử nối chuỗi. Bạn có thể nhìn thấy vị dụ ở dưới

>>> 'Alice' + 'Bob'
'AliceBob' 

Biểu thức tính xuống một giá trị chuỗi đơn, mới kết hợp văn bản của hai chuỗi. Tuy nhiên, nếu bạn cố gắng sử dụng toán tử + trên một chuỗi và một giá trị số nguyên, Python sẽ không biết cách xử lý việc này và nó sẽ hiển thị thông báo lỗi.

>>> 'Alice' + 42
Traceback (most recent call last):
File "<pyshell#0>", line 1, in <module>
'Alice' + 42
TypeError: can only concatenate str (not "int") to str

Thông báo lỗi can only concatenate str (not “int”) to str có nghĩa là Python nghĩ rằng bạn đang cố nối một số nguyên với chuỗi ‘Alice’. Code của bạn sẽ phải chuyển đổi rõ ràng số nguyên thành một chuỗi vì Python không thể tự động làm điều này.
Toán tử * nhân hai giá trị số nguyên hoặc số thập phân. Nhưng khi toán tử * được sử dụng trên một giá trị chuỗi và một giá trị số nguyên, nó sẽ trở thành toán tử sao chép chuỗi. Nhập một chuỗi nhân với một số vào command line để thấy điều này trong hành động.

>>> 'Alice' * 5
'AliceAliceAliceAliceAlice'

Biểu thức đưa xuống một giá trị chuỗi đơn lặp lại chuỗi gốc một số lần bằng giá trị số nguyên. Sao chép chuỗi là một thủ thuật hữu ích, nhưng nó không được sử dụng thường xuyên như nối chuỗi. Toán tử * có thể được sử dụng chỉ với hai giá trị số (để nhân) hoặc một giá trị chuỗi và một giá trị số nguyên (để sao chép chuỗi). Nếu không, Python sẽ chỉ hiển thị một thông báo lỗi, như sau:

>>> 'Alice' * 'Bob'
Traceback (most recent call last):
File "<pyshell#32>", line 1, in <module>
'Alice' * 'Bob'
TypeError: can't multiply sequence by non-int of type 'str'
>>> 'Alice' * 5.0
Traceback (most recent call last):
File "<pyshell#33>", line 1, in <module>
'Alice' * 5.0
TypeError: can't multiply sequence by non-int of type 'float'

Thật ý nghĩa khi Python không hiểu các biểu thức này: bạn không thể nhân hai chuỗi và bạn khó có thể sao chép một chuỗi tùy ý một số lần.
Lưu trữ dữ liệu trong biến
Một biến giống như một hộp trong bộ nhớ máy tính, nơi bạn có thể lưu trữ một giá trị. Nếu bạn muốn sử dụng kết quả của một biểu thức được đánh giá sau này trong chương trình của mình, bạn có thể lưu nó trong một biến.
Bạn sẽ lưu trữ các giá trị trong các biến bằng một câu lệnh gán. Một câu lệnh gán bao gồm một tên biến, một dấu bằng (được gọi là toán tử gán) và giá trị sẽ được lưu trữ. Nếu bạn nhập câu lệnh gán spam = 42, thì một biến có tên là spam sẽ có giá trị nguyên 42 được lưu trong đó.
Hãy nghĩ về một biến như một hộp có nhãn mà một giá trị được đặt vào nó.

>>> spam = 40
>>> spam
40
>>> eggs = 2
>>> spam + eggs
42
>>> spam + eggs + spam
82
>>> spam = spam + 2
>>> spam
42

Các bạn cũng có thể lưu trữ string trong biến

>>> spam = 'Hello'
>>> spam
'Hello'
>>> spam = 'Goodbye'
>>> spam
'Goodbye'

Các cũng có thể thấy biến có thể thay thế bởi các giá trị khác nhau.
Tên biến
Một tên biến tốt mô tả dữ liệu nó chứa. Tưởng tượng rằng bạn chuyển đến một ngôi nhà mới và dán nhãn tất cả các hộp di chuyển của bạn là dễ vỡ. Bạn không bao giờ tìm thấy bất cứ điều gì! Hầu hết các ví dụ về cuốn sách này (và tài liệu Python) sử dụng các tên biến chung chung như spam, eggs và bacon, xuất phát từ bản phác thảo Monty Python. Nhưng trong các chương trình của bạn, một tên mô tả sẽ giúp làm cho code của bạn dễ đọc hơn.
Mặc dù bạn có thể đặt tên cho các biến của mình gần như mọi thứ, nhưng Python thì
có một số hạn chế đặt tên. Bảng dưới đây có các ví dụ về tên biến hợp pháp. Bạn có thể đặt tên cho một biến bất cứ thứ gì miễn là nó tuân theo ba quy tắc sau:
• Nó có thể chỉ là một từ không có khoảng trắng.
• Nó chỉ có thể sử dụng các chữ cái, số và ký tự gạch dưới (_).
• Nó không thể bắt đầu với một số.


Như vậy chúng ta đã tìm hiểu xong những khái niệm cơ bản nhất của python. Trong phần sau chúng ta sẽ viết một chương trình đầu tiên và phân tích nó.
Chúc các bạn có một ngày vui vẻ và đừng quên nêu câu hỏi nếu có bất kì thắc mắc bằng cách nhấp vào Trả lời bài viết.

Người dịch: Hungdh

3 Likes

Diễn đàn nên có song song cái bài học cơ bản và các project nâng cao để thu hút nhiều người tham gia hơn

1 Like

Cảm ơn bạn đã góp ý. Phần nâng cao bạn muốn nói là phần nào? Bạn có thể gửi yêu cầu ở mục yêu cầu cám ơn bạn.

1 Like

Thank bạn, bài hướng dẫn Python dễ hiểu nhất mình từng đọc.

1 Like

Cảm ơn tác giả và người dịch! mô tả rất chi tiết và dễ hiểu!