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

Chào các bạn,
Tiếp tục với phần tiếp theo của series ATBS2nd lược dịch, chúng ta sẽ chạy chương trình đầu tiên.
Chương trình python đầu tiên
Những đoạn code ngắn trước đây bạn có thể type trực tiếp bằng command line những lệnh của python.
Đến chương trình đầu tiên này bạn nên dùng một text editor nào đấy hoặc 1 IDE chúng tôi giới thiệu với các bạn VSCode.
Khác với command line chạy trực tiếp những dòng lệnh riêng rẽ, khi bạn viết code vào edior đấy là tập hợp những lệnh được thực thi khi bạn nhấn Run. Cách hiển thị khác nhau khi viết bằng command line và viết bằng editor.

  • Trong command line có dấu nhắc >>> khi đánh lệnh.

  • Trong editor khi biên soạn không có dấu nhắc lệnh >>>.

Nào bây giờ hãy tạo một file .py của bạn lấy tên là firstProgram.py và lưu vào đâu đó trong thư mục của bạn.

# This program says hello and asks for my name.
print('Hello, world!')
print('What is your name?') # ask for their name
myName = input()
print('It is good to meet you, ' + myName)
print('The length of your name is:')
print(len(myName))
print('What is your age?') # ask for their age
myAge = input()
print('You will be ' + str(int(myAge) + 1) + ' in a year.')

Sau khi Save file và nhấn dấu màu xanh hoặc F5 chương trình của bạn sẽ hiện ra như sau
Copyright © Microsoft Corporation. All rights reserved.

Try the new cross-platform PowerShell https://aka.ms/pscore6

PS D:\WORKS\PROJECTS\ATBS> & C:/Users/User/AppData/Local/Programs/Python/Python38/python.exe d:/WORKS/EDU/SOURCECODE/Python/firstProgram.py
Hello, world!
What is your name?
AI
It is good to meet you, AI
The length of your name is:
2
What is your age?
16
You will be 17 in a year.

Khi không có thêm lệnh nào được thực hiện, chương trình của bạn sẽ kết thúc.
Phân tích chương trình đầu tiên
Comments
Dòng dưới đây được gọi là comment của chương trình.
# This program says hello and asks for my name.
Python bỏ qua comments và bạn có thể sử dụng chúng để viết ghi chú hoặc nhắc nhở bản thân những gì mã đang cố gắng làm. Bất kỳ văn bản nào cho phần còn lại của dòng sau dấu thăng (#) là một phần của nhận xét.
Đôi khi, các lập trình viên sẽ đặt # trước một dòng mã để tạm thời xóa nó trong khi kiểm tra chương trình. Điều này được gọi là nhận xét mã, và nó có thể hữu ích khi tôi cố gắng tìm hiểu tại sao một chương trình không hoạt động. Bạn có thể xóa # sau khi bạn sẵn sàng đặt lại dòng.
Hàm print()
Hàm print () hiển thị giá trị chuỗi bên trong dấu ngoặc đơn trên màn hình.

print('Hello, world!')
print('What is your name?') # ask for their name

Dòng print (‘Hello, World!’) Có nghĩa là In ra văn bản trong chuỗi ‘Hello, World!’." Khi Python thực thi dòng này, bạn nói với trình thông dịch Python gọi hàm print () và giá trị chuỗi đang được truyền cho hàm.
Một giá trị được truyền cho một lệnh gọi hàm là một đối số. Lưu ý rằng các dấu trích dẫn (’) không được in ra màn hình. Chúng chỉ đánh dấu nơi chuỗi bắt đầu và kết thúc; chúng không phải là một phần của giá trị chuỗi.
Chú ý: Bạn cũng có thể sử dụng chức năng này để đặt một dòng trống trên màn hình; chỉ cần gọi print () không có gì ở giữa các dấu ngoặc đơn.
Khi bạn viết tên hàm, dấu ngoặc mở và đóng ở cuối xác định nó là tên của hàm. Đây là lý do tại sao trong cuốn sách này, bạn sẽ thấy print () chứ không phải print.
Hàm input()
Hàm input () chờ người dùng nhập một số văn bản trên bàn phím và nhấn Enter.
myName = input()
Cuộc gọi hàm này ước tính thành một chuỗi bằng văn bản của người dùng và dòng mã gán biến myName cho giá trị chuỗi này.
Bạn có thể nghĩ lệnh gọi hàm input () là một biểu thức ước lượng cho bất kỳ chuỗi nào mà người dùng đã nhập. Nếu người dùng nhập ‘Al’, thì biểu thức sẽ ước tính thành myName = ‘Al’.
Nếu bạn gọi input () và thấy thông báo lỗi, như NameError: name ‘Al’ is not defined, vấn đề là bạn có thể chạy mã bằng Python 2 thay vì Python 3.(Trong cuốn sách này chúng tôi sử dụng Python 3)
In ra user’s name
Dòng code dưới đây in ra user’s name bao gồm trong biểu thức It is good to meet you, ’ + myName giữa hai dấu ngoặc đơn.
print('It is good to meet you, ' + myName)
Nên nhớ rằng biểu thức luôn tiến về về một giá trị duy nhất vì vậy khi myName có giá trị là ‘AI’ thì biểu thức cuối cùng là It is good to meet you, Al.
Hàm len()
Bạn có thể truyền hàm len() một giá trị chuỗi (hoặc biến chứa chuỗi) và hàm sẽ tính giá trị số nguyên của số lượng ký tự trong chuỗi đó.

print('The length of your name is:')
print(len(myName))

Enter những dòng lệnh sau vào command line của bạn để hiểu rõ hơn về hàm len().

>>> len('hello')
5
>>> len('My very energetic monster just scarfed nachos.')
46
>>> len('')
0

Cũng giống như những ví dụ đó, len(myName) ước tính thành một số nguyên. Sau đó, nó được chuyển đến print() để hiển thị trên màn hình. Hàm print () cho phép bạn truyền vào nó các giá trị nguyên hoặc giá trị chuỗi, nhưng chú ý lỗi xuất hiện khi bạn nhập nội dung sau vào command line:

>>> print('I am ' + 29 + ' years old.')
Traceback (most recent call last):
File "<pyshell#6>", line 1, in <module>
print('I am ' + 29 + ' years old.')
TypeError: can only concatenate str (not "int") to str

Hàm print() không phải là nguyên nhân gây ra lỗi đó, nhưng thay vào đó, nó là biểu thức mà bạn đã cố gắng chuyển sang print (). Bạn nhận được thông báo lỗi tương tự nếu bạn tự nhập biểu thức vào command line trực tiếp không có hàm print().

>>> 'I am ' + 29 + ' years old.'
Traceback (most recent call last):
File "<pyshell#7>", line 1, in <module>
'I am ' + 29 + ' years old.'
TypeError: can only concatenate str (not "int") to str

Python báo lỗi vì toán tử + chỉ có thể được sử dụng để thêm hai số nguyên với nhau hoặc nối hai chuỗi. Bạn không thể thêm một số nguyên vào một chuỗi, bởi vì điều này là không theo quy tắc trong Python. Thay vào đó, bạn có thể khắc phục điều này bằng cách sử dụng phiên bản chuỗi của số nguyên, như được giải thích trong phần tiếp theo.
Các hàm ép kiểu str(), int() và float()
Nếu bạn muốn nối một số nguyên như 29 với một chuỗi cần truyền vào hàm print(), bạn sẽ cần lấy giá trị ‘29’, đó là dạng chuỗi của 29. Hàm str () có thể được truyền qua một số nguyên giá trị và sẽ ước tính thành phiên bản giá trị chuỗi của số nguyên, như sau:

>>> str(29)
'29'
>>> print('I am ' + str(29) + ' years old.')
I am 29 years old.

Vì str (29) được tính là ‘29’, biểu thức ‘I am ’ + str (29) + ’ years old.’ ước tính ‘I am ’ + ‘29’ + ’ years old.’, lần lượt ước tính ‘I am 29 years old.’. Đây là giá trị được truyền cho hàm print().
Các hàm str(), int() và float() sẽ đánh giá chuỗi, số nguyên và dạng thập phân của giá trị bạn chuyển tương ứng. Hãy thử chuyển đổi một số giá trị trong commmand line với các chức năng này và xem điều gì xảy ra.

>>> str(0)
'0'
>>> str(-3.14)
'-3.14'
>>> int('42')
42
>>> int('-99')
-99
>>> int(1.25)
1
>>> int(1.99)
1
>>> float('3.14')
3.14
>>> float(10)
10.0

Các ví dụ trên gọi các hàm str(), int() và float() và truyền cho chúng các giá trị của các loại dữ liệu khác để có được dạng chuỗi, số nguyên hoặc số thập phân của các giá trị đó.
Hàm str() tiện dụng khi bạn có một số nguyên hoặc số thập phân mà bạn muốn nối thành một chuỗi. Hàm int () cũng hữu ích nếu bạn có một số dưới dạng giá trị chuỗi mà bạn muốn sử dụng trong một số toán học.
Ví dụ, hàm input () luôn trả về một chuỗi, ngay cả khi người dùng nhập số. Nhập spam = input () vào comman line và nhập 101 khi nó chờ văn bản của bạn.

>>> spam = input()
101
>>> spam
'101'

Giá trị được lưu trữ bên trong spam không phải là số nguyên 101 mà là chuỗi ‘101’.
Nếu bạn muốn làm toán bằng cách sử dụng giá trị trong spam, hãy sử dụng hàm int () để lấy dạng số nguyên của spam và sau đó lưu trữ dưới dạng giá trị mới trong spam.

>>> spam = int(spam)
>>> spam
101

Bây giờ bạn sẽ có thể coi biến spam là số nguyên thay vì chuỗi.

>>> spam * 10 / 5
202.0

Lưu ý rằng nếu bạn chuyển một giá trị cho int() mà nó không thể đánh giá là số nguyên, Python sẽ hiển thị thông báo lỗi.

>>> int('99.99')
Traceback (most recent call last):
File "<pyshell#18>", line 1, in <module>
int('99.99')
ValueError: invalid literal for int() with base 10: '99.99'
>>> int('twelve')
Traceback (most recent call last):
File "<pyshell#19>", line 1, in <module>
int('twelve')
ValueError: invalid literal for int() with base 10: 'twelve'

Hàm int() cũng hữu ích khi bạn làm tròn số thập phân.

>>> int(7.7)
7
>>> int(7.7) + 1
8

Quay trở lại chương trình đầu tiên của chúng ta ban đã sử dụng int() và str() để lấy đúng giá trị dữ liệu cần thiết.

print('What is your age?') # ask for their age
myAge = input()
print('You will be ' + str(int(myAge) + 1) + ' in a year.')

Những câu lệnh này được giải thích từng bước trong hình dưới đây
b6
Chuỗi và số có bằng nhau?
Mặc dù giá trị chuỗi của một số nguyên được coi là một giá trị hoàn toàn khác với phiên bản số nguyên hoặc số thập phân, một số nguyên có thể bằng một số thập phân.

>>> 42 == '42'
False
>>> 42 == 42.0
True
>>> 42.0 == 0042.000
True

Python tạo ra sự khác biệt này bởi vì các chuỗi là văn bản, trong khi số nguyên và số thập phân đều là số.
Tóm lược những khái niệm cơ bản nhất
Bạn có thể tính toán biểu thức bằng máy tính hoặc nhập nối chuỗi bằng trình xử lý văn bản. Bạn thậm chí có thể thực hiện sao chép chuỗi dễ dàng bằng cách sao chép và dán văn bản. Nhưng các biểu thức và các giá trị thành phần của chúng Các toán tử, biến và hàm gọi của chúng là các khối xây dựng cơ bản tạo ra các chương trình. Khi bạn biết cách xử lý các yếu tố này, bạn sẽ có thể hướng dẫn Python vận hành trên một lượng lớn dữ liệu cho bạn. Bạn nên nhớ các loại toán tử khác nhau (+, -, *, /, //,% và ** cho các phép toán và + và * cho các phép toán chuỗi) và ba kiểu dữ liệu (số nguyên, số thập phân và chuỗi) được giới thiệu trong chương này.
Tôi đã giới thiệu một vài hàm khác nhau là cơ bản. print() và input() các chức năng xử lý đầu ra văn bản đơn giản (đến màn hình) và đầu vào (từ bàn phím). Hàm len() nhận một chuỗi và ước lượng cho một số lượng ký tự trong chuỗi. Các hàm str(), int() và float() sẽ đánh giá dạng chuỗi số, số nguyên hoặc số thập của giá trị mà chúng được truyền vào.
Trong chương tiếp theo, bạn sẽ học cách nói với Python để đưa ra quyết định thông minh về mã nào sẽ chạy, mã nào cần bỏ qua và mã nào sẽ lặp lại dựa trên các giá trị mà nó có. Điều này được gọi là flow control và nó cho phép bạn viết các chương trình đưa ra quyết định thông minh.
Câu hỏi thực hành

  1. Đoạn sau đây dòng nào là toán tử dòng nào là giá trị?
*
'hello'
-88.8
-
/
+
5
  1. Đoạn sau đây đoạn nào là biến, đoạn nào là chuỗi?
spam
'spam'
  1. Ba dạng dữ liệu bạn được biết trong bài này?

  2. Điều gì tạo thành các biểu thức? Tất cả mọi thứ mà biểu thức có thể làm?

  3. Trong chương này đã giới thiệu về gán giá trị, ví dụ như spam = 10, điều gì khác nhau giữa việc gán giá trị và biểu thức?

  4. Giá trị nào được biến bacon lưu trữ sau khi những dòng lệnh dưới đây được thực thi?

bacon = 20
bacon + 1
  1. Điều gì sẽ xảy ra khi các dòng lệnh này được thực hiện?
'spam' + 'spamspam'
'spam' * 3
  1. Tại sao tên biến là eggs thì được chấp nhận còn 100 thì không?

  2. Ba hàm nào có thể ép kiểu dữ liệu thành số nguyên, số thập phân và chuỗi?

  3. Tại sao biểu thức sau lại lỗi? Và cách để sửa chúng thực thi đúng?
    'I have eaten ' + 99 + ' burritos.'

Phần mở rộng: Tìm kiếm trực tuyến tài liệu Python cho len() chức năng. Nó sẽ có trên một trang web có tiêu đề “Built-in Functions.”. Lướt qua danh sách các hàm khác Python có, tìm kiếm chức năng của hàm round(), và thử nghiệm với nó trong command line.
Trên đây là phần 2 của series Python cơ bản lược dịch trong cuốn ATBS2nd. Các bạn có thắc mắc hay trả lời câu hỏi bài tập có thể reply trực tiếp chủ đề này.
Chúc các bạn có một ngày vui vẻ.
Người dịch: Hungdh

1 Like

Ad ơi, em chạy chương trình ra lỗi “Cannot fine runtime node on path” fix như nào ạ?

Mình nghĩ phần này là do bạn cài chung với node.js. Bạn có thể khởi động lại máy tính của mình.

Ad ơi, thế phải lưu file mới chạy được ạ?

Phần có file .py thì bạn lưu file. Phần có dấu >>> thì bạn đánh vào terminal.

1 Like