Biến, kiểu dữ liệu và lệnh input()
Biến
Giống như trong Toán học, trong lập trình, ta cần sử dụng biến để lưu trữ và xử lý dữ liệu trong suốt quá trình thực thi chương trình.
Ví dụ
Cho một hình vuông có cạnh độ dài 10
đơn vị, in ra chu vi và diện tích của hình vuông đó.
Mã nguồn
a = 10
print("Chu vi:", a * 4)
print("Diện tích:", a * a)
Đầu ra
Chu vi: 40
Diện tích: 100
Khi cần tính chu vi và diện tích cho hình vuông có cạnh dài khác, ta chỉ cần thay đổi giá trị gán cho biến a
.
Định nghĩa
Biến là tên đại diện cho một vùng nhớ dùng để lưu trữ dữ liệu. Giá trị của biến có thể thay đổi trong quá trình chương trình thực thi.
Sử dụng biến đúng cách giúp chương trình trở nên linh hoạt, dễ đọc và dễ kiểm soát.
Toán tử gán
Trong Python
, việc khai báo và khởi tạo biến được thực hiện thông qua toán tử gán =
. Toán tử này cho phép gán một giá trị hoặc kết quả của một biểu thức vào một biến.
Cú pháp khai báo một biến trong Python
có dạng:
<tên_biến> = <giá_trị>
Ví dụ 1
Khởi tạo một biến số nguyên n
với giá trị là \(10\).
Mã nguồn
n = 10
print(n)
Đầu ra
10
Ví dụ 2
Khởi tạo biến b
với giá trị bằng \(5 + 7 \times 2\), sau đó in ra kết quả.
Mã nguồn
b = 5 + 7 * 2
print(b)
Đầu ra
19
Giải thích
Biến b
không được gán trực tiếp một con số, mà được gán bằng kết quả của biểu thức tính toán.
Ngoài ra, ta có thể khai báo và khởi tạo nhiều biến đồng thời bằng cách sử dụng dấu phẩy ,
theo cú pháp:
<biến_1>, <biến_2>,... = <giá_trị_1>, <giá_trị_2>,...
Ví dụ 3
Khởi tạo đồng thời các biến a
, b
, c
với các giá trị tương ứng là 1, 2, 3.
Mã nguồn
a, b, c = 1, 2, 3
print(a, b, c)
Đầu ra
1 2 3
Toán tử gán phức hợp
Toán tử gán phức hợp được dùng để viết ngắn gọn các phép toán kèm gán lặp lại trên cùng một biến.
Phép toán | Kí hiệu | Ví dụ | Tương đương |
---|---|---|---|
Gán | = |
x = 10 |
|
Cộng rồi gán | += |
x += 5 |
x = x + 5 |
Trừ rồi gán | -= |
x -= 3 |
x = x - 3 |
Nhân rồi gán | *= |
x *= 2 |
x = x * 2 |
Lũy thừa rồi gán | **= |
x **= 3 |
x = x ** 3 |
Chia rồi gán | /= |
x /= 2 |
x = x / 2 |
Chia nguyên rồi gán | //= |
x //= 2 |
x = x // 2 |
Chia dư rồi gán | %= |
x %= 3 |
x = x % 3 |
Ví dụ 1
Mã nguồn
x = 10
print(x)
x += 5
print(x)
x *= 2
print(x)
x **= 2
print(x)
Đầu ra
10
15
30
900
Ví dụ 2
Mã nguồn
x, y = 10, 3
x //= y # tương đương x = x // y
print(x)
y *= x
print(y)
Đầu ra
3
9
Quy tắc đặt tên biến
Tên biến trong Python
cần tuân thủ các quy tắc sau:
- Tên biến chỉ chứa các chữ cái, số và dấu gạch dưới (
_
). - Tên biến không được bắt đầu bằng chữ số.
- Tên biến không được trùng với các từ khóa của
Python
. Python
phân biệt chữ hoa và chữ thường, vì vậyVariable
vàvariable
là hai biến khác nhau.
Ví dụ
Mã nguồn đúng
var1 = 1
_var = 2
Var_1 = 3
Mã nguồn sai
1var = 1 # Bắt đầu bằng số
var-1 = 2 # Chứa dấu gạch ngang
while = 3 # Là từ khóa của Python
Kiểu dữ liệu
Lệnh type()
Trong Python
, lệnh type()
được dùng để kiểm tra kiểu dữ liệu của một biến hay một giá trị.
Cú pháp:
type(<biến/giá_trị>)
Ví dụ
Kiểm tra kiểu dữ liệu của biến x
và y
.
Mã nguồn
x = 15
print(type(x)) # Số nguyên x thuộc kiểu 'int' trong Python
print(type(3.14)) # Số thực 3.14 thuộc kiểu 'float' trong Python
Đầu ra
<class 'int'>
<class 'float'>
Nhờ type()
, ta có thể biết chính xác kiểu dữ liệu mà Python
đang gán cho biến, từ đó tránh được lỗi khi lập trình.
Kiểu số nguyên - int
Trong Python
, kiểu số nguyên (int
) được sử dụng để lưu trữ các số nguyên không có phần thập phân. Kiểu số nguyên có thể chứa giá trị vô cùng lớn và Python
tự động điều chỉnh kích thước bộ nhớ khi cần.
Ví dụ
Mã nguồn
a = 4
print(a)
print(type(a))
Đầu ra
4
<class 'int'>
Kiểu số thực - float
Kiểu số thực (float
) được dùng để lưu trữ các số có phần thập phân.
Ví dụ
Mã nguồn
a = 1.0
print(a)
print(type(a)) # Số thực a thuộc kiểu 'float' trong Python
Đầu ra
1.0
<class 'float'>
Lưu ý
Trong Python
, dấu chấm .
được dùng để phân tách phần nguyên và phần thập phân của số thực.
Kiểu xâu kí tự - str
Kiểu xâu kí tự (str
) trong Python
được dùng để lưu trữ một thông điệp. Thông điệp trong xâu kí tự được đặt bên trong cặp dấu nháy đơn hoặc nháy kép.
Ví dụ 1
Mã nguồn
s = "Xin chào"
print(s)
print(type(s)) # Biến s thuộc kiểu 'str' trong Python
Ví dụ 2
Mã nguồn
s = "18"
print(s + 4) # TypeError
Giải thích
Ta không thể cộng trực tiếp một xâu với một số. Python
sẽ báo lỗi TypeError
khi chương trình được thông dịch.
Lưu ý
Kiểu dữ liệu xâu không phải là số, các thao tác giữa xâu và số sẽ không giống với giữa số và số. Xâu kí tự sẽ được giới thiệu rõ hơn ở Chương VIII - Kí tự và xâu kí tự.
Kiểu logic - bool
Kiểu dữ liệu logic (bool
) chỉ chứa hai giá trị: True
(thể hiện giá trị đúng) và False
(thể hiện giá trị sai).
Ví dụ
Mã nguồn
ok = True
print(ok)
print(type(ok)) # Boolean ok thuộc kiểu 'bool' trong Python
Đầu ra
True
<class 'bool'>
Ép kiểu
Đôi khi, kiểu dữ liệu của một biến không phù hợp với việc bạn đang làm. Khi đó, ta cần sử dụng đến ép kiểu. Việc ép kiểu trong Python
cho phép chuyển đổi giá trị từ kiểu dữ liệu này sang kiểu dữ liệu khác.
<kiểu_dữ_liệu>(<biểu_thức>)
Ví dụ 1
Chuyển kiểu từ số thực sang số nguyên:
Mã nguồn
a = 3.6
b = int(a) # b sẽ là 3
print(b)
print(type(b)) # Kiểu của b là 'int'
Đầu ra
3
<class 'int'>
Giải thích
Do kiểu số nguyên int
không chứa phần thập phân, khi ép kiểu số \(3.6\) sang int
, phần thập phân \(.6\) bị loại bỏ.
Ví dụ 2
Chuyển kiểu dữ liệu từ xâu kí tự sang số nguyên:
Mã nguồn
a = "18"
b = int(a) # b = 18
print(b)
print(type(b)) # Kiểu của b là 'int'
Đầu ra
18
<class 'int'>
Lưu ý
Khi ép kiểu str
sang int
hay float
, cần đảm bảo trong xâu chỉ chứa các kí tự số. Nếu không, trình thông dịch Python
sẽ báo lỗi ValueError
.
Lệnh input()
Nhập dữ liệu với lệnh input()
Giống như trong Toán học, trong lập trình, chúng ta không chỉ làm việc với những con số cố định mà còn cần xử lý các giá trị được lấy vào từ bối cảnh bên ngoài.
Ví dụ
Thay vì viết sẵn giá trị a = 1509
và b = 1312
, ta muốn cho người dùng đưa ra hai con số bất kỳ, rồi tính tổng của chúng.
Việc cho phép người dùng nhập dữ liệu giúp chương trình linh hoạt hơn, có thể áp dụng cho nhiều tình huống khác nhau thay vì chỉ xử lý các giá trị được gán sẵn.
Lệnh input()
nhận đầu vào từ người dùng qua bàn phím và luôn trả về dữ liệu dưới dạng xâu kí tự (str}
). Với mỗi lệnh input()
, chương trình sẽ dừng lại chờ người dùng nhập dữ liệu trên một dòng duy nhất, kết thúc khi người dùng nhấn phím Enter
.
Dữ liệu nhập vào thường được lưu trong một biến để dùng sau theo cú pháp:
<tên_biến> = input()
Ví dụ
Mã nguồn
name1 = input()
name2 = input()
print("Xin chào", name1, "và", name2)
Đầu vào
Thu
Huyền
Đầu ra
Xin chào Thu và Huyền
Ép kiểu kiểu dữ liệu sau khi nhập
Như đã đề cập ở trước, lệnh input()
chỉ nhận đầu vào của người dùng dưới dạng xâu kí tự. Để xử lý dữ liệu đầu vào là số, ta phải ép kiểu sau khi dùng lệnh input()
.
Ví dụ
Mã nguồn
age = int(input())
height = float(input())
print("Hiện tại tuổi của em là", age)
print("Em cao", height, "cm")
Đầu vào
8
123.4
Đầu ra
Hiện tại tuổi của em là 8
Em cao 123.4 cm
Nhập nhiều dữ liệu số trên cùng một dòng
Khi nhập nhiều giá trị số nguyên hoặc số thực cùng lúc, ta có thể sử dụng lệnh input()
để nhận đầu vào trên một dòng từ người dùng, sau đó dùng phương pháp tách xâu bằng lệnh input().split()
.
Ví dụ 1
Nhập vào họ, tên đệm và tên của của một người, sau đó in riêng từng phần.
Mã nguồn
ho, ten_dem, ten = input().split()
print(ho)
print(ten_dem)
print(ten)
Đầu vào
Nguyễn Thị Huyền
Đầu ra
Nguyễn
Thị
Huyền
Giải thích
Khi ta nhập vào "Nguyễn Thị Huyền"
:
input()
nhận vào một xâu từ bàn phím là"Nguyễn Thị Huyền"
..split()
tách xâu kí tự thành danh sách các xâu con theo khoảng trắng:["Nguyễn", "Thị", "Huyền"]
.- Các phần tử của danh sách trên được gán lần lượt vào các biến:
ho = "Nguyễn"
,ten_dem = "Thị"
,ten = "Huyền"
.
Nếu các giá trị nhập vào là số, ta có thể dùng lệnh map()
để đổi kiểu.
Cú pháp:
map(<kiểu_dữ_liệu>, input().split())
Ví dụ 2
Nhập vào một dòng duy nhất chứa ba số nguyên dương \(a\), \(b\) và \(c\). In ra danh sách ba số cách nhau bởi dấu phẩy.
Mã nguồn
a, b, c = map(int, input().split())
print(a, b, c, sep=', ')
print(type(a), type(b), type(c), sep=', ')
Đầu vào
1 2 3
Đầu ra
1, 2, 3
<class 'int'>, <class 'int'>, <class 'int'>
Giải thích
Khi người dùng nhập vào "1 2 3"
:
input()
nhận vào một xâu kí tự từ người dùng"1 2 3"
..split()
tách chuỗi kí tự thành danh sách các chuỗi con theo khoảng trắng:["1", "2", "3"]
.map(int, ... )
chuyển từng phần tử trong danh sách sang số nguyên:[1, 2, 3]
.- Các phần tử trong danh sách trên được gán lần lượt vào các biến:
a = 1
,b = 2
,c = 3
.
Lưu ý
Số phần tử trong dữ liệu đầu vào cần phải khớp với số biến mà ta đang gán. Nếu nhập quá ít hoặc quá nhiều giá trị, Python
sẽ báo lỗi.
-
Nếu nhập ít giá trị hơn số biến cần gán,
Python
sẽ báo lỗiValueError
. -
Nếu nhập nhiều giá trị hơn số biến cần gán,
Python
sẽ chỉ gán giá trị đến biến cuối cùng, và các giá trị dư sẽ bị bỏ qua.
Các khái niệm Toán học cần biết
- Giá trị tuyệt đối của số \(x\) là khoảng cách từ điểm \(x\) đến điểm gốc 0 trên trục số. Kí hiệu là \(|x|\).
Ví dụ
- \(|6| = 6\)
- \(|-3.1| = 3.1\)
- \(|0| = 0\)
- Lũy thừa bậc \(n\) của \(a\) là tích của \(n\) thừa số \(a\). Kí hiệu là \(a^n\), trong đó \(n\) được gọi là số mũ, \(a\) được gọi là cơ số.
Ví dụ
- \(2^3 = 2 \times 2 \times 2 = 8\)
- \(2^4 = 2 \times 2 \times 2 \times 2 = 16\)
- \(5^1 = 5\)
- Căn bậc hai bậc \(x\) là số \(a\) không âm sao cho \(a \times a = x\). Kí hiệu là \(\sqrt x\).
Ví dụ
- \(\sqrt {16} = 4\)
- \(\sqrt {0.25} = 0.5\)
- \(\sqrt {2} = 1.41421\ldots\)
- Số hữu tỉ là số có thể biểu diễn dưới dạng phân số.
- Số vô tỉ là số không thể biểu diễn dưới dạng phân số.
- Số thực là tên gọi chung cho số hữu tỉ và số vô tỉ.
Ví dụ
- \(0.25; \frac 1 3; -1\) là các số hữu tỉ.
- \(\sqrt{2}\); số \(\pi\), số \(e\) là các số vô tỉ.
- Tất cả các số trên được gọi chung là số thực.
- Cho hai số nguyên \(a\), \(b\), biết \(a\) chia hết cho \(b\). Khi đó \(a\) được gọi là bội số của \(b\), và \(b\) được gọi là ước số của \(a\) (gọi tắt là bội và ước).
Ví dụ
- 6 có các ước là \(-6, -3, -2, -1, 1, 2, 3, 6\).
- 4 có các bội là \(4, 8, 12, 16, \ldots\) và \(-4, -8, -12, -16, \ldots\)
Bài tập lý thuyết
- Hãy viết câu lệnh khởi tạo và in ra màn hình giá trị các biến:
a. Biếna
có giá trị bằng 10.
b. Biếnb
có giá trị bằng \(4 \times 2 ^ 7 - 6.5\).
c. Biếnc
có giá trị bằngTrue
. - Hãy viết câu lệnh khởi tạo biến
x
có giá trị bằng 5,y
có giá trị bằng 2. In ra giá trị củax + y
,x - y
vàx * y
. - Lệnh nào được sử dụng để kiểm tra kiểu dữ liệu của một biến? Hãy viết câu lệnh để đưa ra kiểu dữ liệu cho các giá trị sau: 25, 3.14,
"Hello"
,True
. - Bạn Tiến viết chương trình như sau:
Mã nguồn
s = "18"
print(s + 2)
Chương trình trên có đúng không? Nếu không, hãy giúp bạn Tiến sửa chương trình để kết quả in ra là số \(20\).
- Hãy viết chương trình yêu cầu nhập vào tên của bạn và in ra câu sau:
Xin chào, <tên_của_bạn>!
- Hãy viết chương trình nhập vào một số nguyên dương \(n\) và in ra giá trị của \(\sqrt n\). Biết rằng căn bậc hai của một số nguyên dương \(n\) có thể được tính như sau: \(\sqrt n = n^{0.5}\).
- Hãy viết một chương trình nhập hai số trên một dòng, tương ứng với chiều dài và chiều rộng của một hình chữ nhật. Sau đó in ra chu vi và diện tích của hình chữ nhật đó.