Học Python - Bài 3 - Tính toán cơ bản

Như đã nói trong bài trước thì từ bài này chúng ta sẽ chỉ học cách tính toán với Python thôi. Tuy nhiên mọi người đừng nghĩ tính toán là những thứ bạn học trong môn toán từ lớp 1 đến lớp 12 nha. Tính toán ở đây tức là xử lí ấy. Xử lí thì có xử lí số học, xử lí kí tự, xử lí bla blo... Cơ mà nói thôi, đầu tiên bạn vẫn phải học toán *scream with fear*

Nhân tiện, học lập trình thì tốt nhất nên học tiếng Anh nha mọi người :v :v Cái nào là thuật ngữ tui sẽ viết kèm tiếng Anh cho mọi người biết thuật ngữ.

1. Toán tử (operator) thường gặp trong toán

Bài 1 chúng ta đã gặp một vài tính toán nho nhỏ rồi, cơ mà giờ chúng ta sẽ học chi tiết hơn nhé :v :v Bạn nhớ cách in kết quả tính toán ra không :v :v Không nhớ thì giờ ôn lại :v :v Tạo một file tên là calculation.py đi nào:

print(f'This is addition {2 + 3}')

print(f'This is subtraction {2 - 3}') 

print(f'This is multiplication {2 * 3}')

print(f'This is division {6 / 3}')

print(f'This is modulus {5 % 3}')

print(f'{5 + 3 * 9 - 6 / (4 - 2 / 2)}')

print(f'This is greater than {5 > 3}')

print(f'This is greater than or equal to {5 >= 3}')

print(f'This is less than {5 < 3}')

print(f'This is less than or equal to {5 <= 3}')

print(f'This is equal to {5 == 3}')

print(f'This is not equal to {5 != 3}')

print(f'Something strange {0.1 + 0.2 == 0.3}')

Chạy thử chương trình, tui hi vọng là bạn sẽ ra kết quả như này:


Trước khi đọc đoạn giải thích bên dưới thì tui mong mọi người thử đoán trước xem sao :3 :3 Đoán là một thứ rất hay trong khi học bất cứ một bộ môn nào bởi nó luyện cho mọi người cách nhìn nhận logic đó :3 :3 Lời giải thì đây ạ:

  • Dòng 1 đến dòng 4 là cộng trừ nhân chia giống hệt với toán học thôi ha.
  • Dòng 5 bắt đầu khang khác, tuy là dấu phần trăm nhưng trong Python (và rất nhiều ngôn ngữ lập trình khác) đây là phép chia lấy dư. Nghĩa là lấy vế trái, chia cho vế phải và lấy số dư từ phép chia đó (5 chia 3 bằng 1 dư 2 -> Kết quả in ra là 2)
  • Dòng tiếp theo ta học thứ tự tính toán. Thứ tự tính toán trong Python và rất nhiều ngôn ngữ lập trình khác là "ngoặc trước, nhân chia sau, cộng trừ cuối, nếu có phép toán cùng cấp thì thực hiện từ trái sang phải, nếu có nhiều ngoặc lồng nhau thì ngoặc trong tính trước", chỉ có vậy thôi :3 :3 Giống tiểu học ấy mà :v :v
    Với phép toán 5 + 3 * 9 - 6 / (4 - 2 / 2) thì phải tính trong ngoặc trước, bên trong ngoặc có chia nên tính trước (2 chia 2 được 1) rồi mới tính phép trừ trong ngoặc (4 trừ 1 được 3). Sau đó hết ngoặc, ta thấy có cả nhân và chia, làm phép nhân bên trái trước (3 nhân 9 được 27) rồi thực hiện chia (6 chia 3 được 2), tiếp theo là phép cộng và trừ, vẫn phải làm từ trái sang phải (5 cộng 27 là 32) cuối cùng trừ là xong (32 trừ 2 còn 30). Đó là kết quả ạ.
  • 4 dòng tiếp theo lần lượt là phép lớn hơn, lớn hơn hoặc bằng, bé hơn và bé hơn hoặc bằng. Bạn sẽ thấy kết quả in ra chỉ có 2 giá trị: "True" nếu đúng và "False" nếu sai. Kiểu giá trị "Đúng" / "Sai" này trong lập trình thường gọi là kiểu "boolean".
  • Dòng 11 là phép "bằng", trả lại "True" nếu 2 giá trị bằng nhau. Nhớ là có HAI dấu bằng ("==") nha mọi người.
  • Dòng 12 trái lại của dòng 11 là phép "khác", trả lại "True" nếu 2 giá trị khác nhau.
  • Dòng 13 cực kì thú vị: 0.1 + 0.2 == 0.3, về mặt toán học là đúng nhưng nhìn kết quả kìa: "False" mới buồn cười. Đây là về mặt lập trình nha, hầu hết các ngôn ngữ lập trình đều sử dụng một vài lí thuyết tính toán với số nhị phân (mọi người tự tra nha) nên khi biểu diễn số thực thì thường không biểu diễn được chính xác tuyệt đối, người ta gọi là sai số đó ạ. Chính vì sai số này mà 0.1 + 0.2 trong lập trình sẽ cho kết quả là 0.30000000000000004 và khác 0.3 (nếu không tin thì mọi người thử viết 1 câu lệnh cộng luôn trên Python luôn đi ạ)
    Điều này cực kì quan trọng nha mọi người, khi lập trình với số thực thì luôn nhớ làm tròn đến mức độ phù hợp và hạn chế tối đa việc so sánh với "==" bởi nó có thể gây lỗi một cách đầy bất ngờ ạ.
  • Mọi người nhìn tất cả các dòng đi :3 :3 Nếu để ý thì mọi người sẽ thấy trước và sau các toán tử đều có dấu cách. Điều này KHÔNG bắt buộc trong Python nhưng NÊN làm vì dễ đọc code hơn.

2. Biến (variable)

Không, tui không định đuổi mọi người đi đâu TT,TT Check Wikipedia nếu bạn muốn 1 cái định nghĩa đầy hàn lâm và vô dụng, còn với tui biến là 1 cái tên đại diện cho một giá trị nào đó (cũng chẳng dễ hiểu hơn là mấy nhỉ). Thôi kệ, tạo file variable.py và thử nhập đoạn code dưới đây rồi chạy xem nào:

variable = 5

print(f"Print variable's value {variable}")

print(f"Variable's value plus 5 {variable + 5}")

variable = variable + 5

print(f'Now it is {variable}') 

variable = "can be assigned to a string as well"

print(f'Variable {variable}')

Kết quả sẽ thế này nè:

Rồi giờ tui sẽ giải thích nốt và hết bài nhé:

  • Dòng đầu tiên, trước hết bạn chỉ quan tâm đến chữ variable cho mình. Cái này người ta gọi là tên biến. Tên biến là do bạn đặt, bạn thích đặt là gì cũng được miễn là:
    • Chỉ gồm chữ latin (a → z và A → Z), chữ số (0 → 9) và dấu gạch dưới (_).
    • Không bắt đầu bằng chữ số
    • Không trùng với tên biến khác (có phân biệt chữ hoa chữ thường)
    • Không trùng với tên hàm hay các từ khóa của Python.
  • Dấu bằng cạnh tên biến gọi là toán tử "gán" (assign), mục đích là đặt "giá trị" vào cho tên biến. Trong ví dụ này, tên biến variable đang đại diện cho giá trị là 5. Thế nên mình mới nói là biến là 1 cái tên đại diện cho một giá trị nào đó mà!
  • Bây giờ, bạn có thể dùng tên biến trong các bước tính toán, ví dụ như ở dòng thứ 2 và dòng thứ 3.
  • Dòng thứ tư khá là quan trọng! Bạn hãy nhớ là toán tử "gán" có ưu tiên cực kì thấp, thế nên thực hiện tính toán sẽ như sau:
    • Do có phép gán, thực hiện vế phải của phép gán trước
    • Vế phải của phép gán chỉ có dấu cộng, thế nên thực hiện từ trái sang phải
    • Tính giá trị vế trái của dấu cộng (tính giá trị của variable và cho kết quả là 5)
    • Lấy giá trị vế trái (hiện là 5) cộng với 5 (kết quả là 10)
    • Gán 10 vào biến variable
  • Điều cuối cùng, dòng thứ sáu đề cập đến string, là một trong các kiểu dữ liệu của Python. Python có khá nhiều kiểu dữ liệu nhưng ở mức cơ bản thì chúng ta đã đi qua 3 kiểu chính rồi đấy:
    • Kiểu số (ví dụ: 5; 5.2; 55;...)
    • Kiểu boolean (ví dụ: True; False)
    • Kiểu string (ví dụ: 'abc'; "abc";...)

3. Bài tập

Một vài bài tập mọi người nên làm để quen dần với các kiểu tính toán nè:

  1. Mọi người thử chia cho 0 đi xem ra cái gì :v :v
  2. Mọi người cũng có thể thử xem phép chia có dư mà chia số thực thì ra cái gì nhé!
  3. Thứ tự phép toán tui đã nói ở trên rồi nhưng mà bản thân tui chưa thử đặt phép chia có dư vào đâu ạ, mọi người thử tự viết phép chia có dư xem thử ưu tiên của nó như thế nào so với các phép tính khác đi ạ!
  4. Tương tự vậy, thử với các phép so sánh xem ưu tiên của các phép so sánh sẽ như thế nào so với các phép tính toán. 
  5. Bài tập tìm hiểu: Mọi người thấy khi chia 6 cho 3, rõ ràng kết quả chúng ta mong là 2, nhưng khi in lại là 2.0. Mọi người tìm cách để nó in ra 2 đi nhé! Gợi ý từ khóa tiếng Việt là "ép kiểu" nhé. Từ khóa tiếng Anh là "cast" hoặc "casting" ạ! Cái này cũng là cách để giải quyết vấn đề mình nói trong bài trước không cộng được string với số đó ạ.
  6. Bài tập thực tế: Cho phép người dùng nhập vô số tiền gửi ngân hàng và lãi suất, tính số tiền nhận được khi đáo hạn sau 12 tháng. Gợi ý là dùng kiến thức của bài trước về nhập dữ liệu và gán nó vào biến để tính toán!
  7. Bài tập toán học: Cho phép người dùng nhập vào bán kính và tính chu vi diện tích của hình tròn.

Không có nhận xét nào:

Đăng nhận xét