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

Python
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

Python
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

Python
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

Python
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

Python
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

Python
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ậy Variablevariable là hai biến khác nhau.

Ví dụ

Mã nguồn đúng

Python
var1 = 1
_var = 2
Var_1 = 3

Mã nguồn sai

Python
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 xy.

Mã nguồn

Python
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

Python
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

Python
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

Python
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

Python
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

Python
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

Python
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

Python
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 = 1509b = 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

Python
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

Python
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

Python
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\)\(c\). In ra danh sách ba số cách nhau bởi dấu phẩy.

Mã nguồn

Python
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ỗi ValueError.

  • 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\)\(-4, -8, -12, -16, \ldots\)

Bài tập lý thuyết

  1. 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ến a có giá trị bằng 10.
    b. Biến b có giá trị bằng \(4 \times 2 ^ 7 - 6.5\).
    c. Biến c có giá trị bằng True.
  2. 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ủa x + y, x - yx * y.
  3. 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.
  4. Bạn Tiến viết chương trình như sau:

Mã nguồn

Python
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\).

  1. 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>!

  1. 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}\).
  2. 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 đó.

Bài tập

  1. Tạo số 1
  2. Câu lạc bộ tin học
  3. In số thập phân