Buổi 2: Biến và nhập dữ liệu

Hôm nay em sẽ học

  1. Biến – chiếc hộp để cất giá trị
  2. Ba kiểu dữ liệu: số nguyên, số thực, chữ
  3. Nhập dữ liệu từ bàn phím bằng input()
  4. "Câu thần chú" nhập nhiều số trên một dòng
  5. In số thực làm tròn đẹp

Bấm vào slide rồi dùng phím ← → để chuyển, phím F để xem toàn màn hình.

Mở toàn màn hình

1. Kiến thức chính

Biến – chiếc hộp có nhãn tên

ScratchPython
đặt diem thành 0diem = 0
thay đổi diem một lượng 5diem += 5 (viết đầy đủ: diem = diem + 5)
hiện giá trị diemprint(diem)

Dấu = là gán: tính vế phải trước, rồi cất kết quả vào biến bên trái. Tương tự += còn có -=, *=, //=, %=.

Ba kiểu dữ liệu cơ bản

KiểuÝ nghĩaVí dụ
intsố nguyên13, -7, 0
floatsố thực1.55, 3.0
strxâu ký tự (chữ)"An", "123"
"123" có dấu nháy nên là chữ, không phải số. Dùng type(x) để xem kiểu của x.

Đặt tên biến

Không dấu tiếng Việt, không khoảng trắng, không bắt đầu bằng chữ số, không trùng tên lệnh (print, input…). Nên đặt tên có nghĩa: tong, dem, chieu_dai.

Hoán đổi giá trị hai biến chỉ cần một dòng: a, b = b, a.

Nhập dữ liệu

input() đọc một dòng em gõ và luôn trả về chữ. Muốn tính toán phải đổi kiểu:

n = int(input())                     # một số nguyên
x = float(input())                   # một số thực
ten = input()                        # một dòng chữ
a, b = map(int, input().split())     # nhiều số trên MỘT dòng
LệnhÝ nghĩa
int("5")đổi chữ "5" thành số 5
float("2.5")đổi thành số thực 2.5
str(2026)đổi số thành chữ "2026"

Câu thần chú a, b = map(int, input().split()): input() đọc cả dòng "5 3" → .split() tách thành ["5", "3"] → map(int, ...) đổi từng phần thành số.

In số thực làm tròn

x = 10 / 3
print(f"{x:.2f}")     # luôn in đủ 2 chữ số thập phân
print(f"{5:.2f}")
print(f"{x:.4f}")
Kết quả
3.33
5.00
3.3333

2. Ghi nhớ và lỗi thường gặp

Quy tắc vàng khi đi thi: không viết input("Nhap n: "), không in thêm lời dẫn như "Ket qua la:". Máy chấm so sánh từng ký tự!
Em viếtVấn đề
a = input() rồi a + bquên int() → nối chữ: "5" + "3" thành "53"
n = int(input()) khi dòng có 2 sốlỗi ValueError – phải dùng map(int, input().split())
a, b, c = map(int, input().split()) khi dòng chỉ có 2 sốlỗi ValueError – số biến phải bằng số lượng số
print(round(5.0, 2))in ra 5.0, không phải 5.00 – dùng f"{x:.2f}"

3. Câu hỏi tự kiểm tra

  1. Chạy a = input() rồi gõ 7. Biến a có kiểu gì?
  2. Sau ba lệnh x = 5, x += 3, x *= 2 thì x bằng bao nhiêu?
  3. Vì sao viết n = int(input("Nhap n: ")) trong bài thi lại bị chấm sai?

4. Bài tập về nhà

Bài 1 ★ – HINHTRON

Nhập bán kính r, in chu vi và diện tích hình tròn (lấy π = 3.14), làm tròn 2 chữ số thập phân.

Input: một số thực r (0 < r ≤ 1000).

Output: chu vi và diện tích, cách nhau một dấu cách.

InputOutput
16.28 3.14
1062.80 314.00

Bài 2 ★★ – DOITIEN

Đổi số tiền n đồng ra nhiều tờ 500 000 nhất, phần còn lại đổi ra nhiều tờ 200 000 nhất, phần còn lại đổi ra tờ 100 000.

Input: số nguyên n (n chia hết cho 100 000, n ≤ 10⁹).

Output: số tờ 500 000, 200 000, 100 000.

InputOutput
20000004 0 0
18000003 1 1

Bài 3 ★★ – DOINHIET

Đổi nhiệt độ từ độ C sang độ F theo công thức F = C × 9 / 5 + 32.

Input: số nguyên C (−100 ≤ C ≤ 100). Output: độ F làm tròn 1 chữ số thập phân.

InputOutput
100212.0
3798.6

Bài 4 ★★★ (thử thách) – KHOANGCACH

Tính khoảng cách giữa hai điểm A(x₁, y₁) và B(x₂, y₂) trên mặt phẳng tọa độ.

Input: bốn số nguyên x₁ y₁ x₂ y₂ trên một dòng (|giá trị| ≤ 1000).

Output: khoảng cách AB, làm tròn 2 chữ số thập phân.

InputOutput
0 0 3 45.00
1 1 2 21.41
Gợi ý: AB = √((x₂ − x₁)² + (y₂ − y₁)²). Căn bậc hai của d viết là d ** 0.5.
Cách nộp bài: mỗi bài một file .py đặt tên theo tên bài. Chạy thử với tất cả ví dụ trước khi nộp!

Đáp án câu hỏi tự kiểm tra

  1. Kiểu str (chữ "7"), vì input() luôn trả về chữ.
  2. x = 5 → x += 3 thành 8 → x *= 2 thành 16.
  3. Câu Nhap n: cũng bị in ra màn hình. Máy chấm thấy kết quả khác đáp án nên chấm sai.

Bài 1 – HINHTRON

Ý tưởng

Chu vi = 2 × π × r, diện tích = π × r × r. Bán kính là số thực nên đọc bằng float(input()). In hai số với :.2f.

Lời giải

Lời giải
r = float(input())
chu_vi = 2 * 3.14 * r
dien_tich = 3.14 * r * r
print(f"{chu_vi:.2f} {dien_tich:.2f}")
Bộ test thử
#InputOutput
1
1
6.28 3.14
2
10
62.80 314.00
3
2.2
13.82 15.20
Dùng round(dien_tich, 2) thì với r = 10 sẽ in 314.0 thay vì 314.00 → sai. Luôn dùng f"{x:.2f}".

Bài 2 – DOITIEN

Ý tưởng

  • Số tờ 500 000 = n // 500000; tiền còn lại = n % 500000.
  • Với tiền còn lại: số tờ 200 000 = con_lai // 200000; tiền còn lại = con_lai % 200000.
  • Phần còn lại cuối cùng chia cho 100 000.

Lời giải

Lời giải
n = int(input())
to500 = n // 500000
n = n % 500000
to200 = n // 200000
n = n % 200000
to100 = n // 100000
print(to500, to200, to100)
Bộ test thử
#InputOutput
1
2000000
4 0 0
2
1800000
3 1 1
3
100000
0 0 1
4
400000
0 2 0
Biến n được dùng lại để lưu số tiền còn lại – một kỹ thuật rất hay gặp.

Bài 3 – DOINHIET

Ý tưởng

Áp dụng đúng công thức, in với 1 chữ số thập phân :.1f.

Lời giải

Lời giải
c = int(input())
f = c * 9 / 5 + 32
print(f"{f:.1f}")
Bộ test thử
#InputOutput
1
100
212.0
2
37
98.6
3
-40
-40.0
4
0
32.0

Bài 4 – KHOANGCACH

Ý tưởng

Tính hiệu hoành độ dx = x₂ − x₁ và hiệu tung độ dy = y₂ − y₁, rồi AB = (dx² + dy²) mũ 0.5.

Lời giải

Lời giải
x1, y1, x2, y2 = map(int, input().split())
dx = x2 - x1
dy = y2 - y1
ab = (dx * dx + dy * dy) ** 0.5
print(f"{ab:.2f}")
Bộ test thử
#InputOutput
1
0 0 3 4
5.00
2
1 1 2 2
1.41
3
-1 -1 -1 -1
0.00
4
0 0 -6 8
10.00
Thử cả điểm có tọa độ âm và hai điểm trùng nhau – đó là những test máy chấm hay có.

Lỗi hay gặp khi làm bài

  • Đọc bốn số trên một dòng bằng bốn lệnh int(input()) → lỗi. Phải dùng map(int, input().split()).
  • Quên ngoặc: dx * dx + dy * dy ** 0.5 chỉ lấy căn của dy * dy, kết quả sai.

Mục tiêu

  • Hiểu biến, ba kiểu dữ liệu cơ bản int, float, str.
  • Nhập dữ liệu bằng input(), đổi kiểu bằng int(), float().
  • Thuộc "câu thần chú" nhập nhiều số trên một dòng – dùng trong mọi đề thi.
  • In số thực làm tròn k chữ số thập phân.

1. Khởi động (10')

Chữa BTVN buổi 1. Hỏi: "Trong Scratch, biến điểm dùng để làm gì?" → lưu một giá trị để dùng lại.

2. Kiến thức mới (25')

2.1. Biến

ScratchPython
đặt [diem] thành 0diem = 0
thay đổi [diem] một lượng 5diem += 5 (viết đầy đủ: diem = diem + 5)
ten = "An"         # str  – xâu
tuoi = 13          # int  – số nguyên
chieu_cao = 1.55   # float – số thực
print(ten, tuoi, chieu_cao)
print(type(tuoi))  # <class 'int'>

Quy tắc đặt tên: không dấu tiếng Việt, không khoảng trắng, không bắt đầu bằng chữ số. Nên dùng tên có nghĩa: tong, dem, chieu_dai.

Hoán đổi hai biến (Scratch phải dùng biến tạm, Python thì không):

a, b = b, a

2.2. Nhập dữ liệu – input() luôn trả về XÂU

ScratchPython
hỏi [Tên em là gì?] và đợi → trả lờiten = input()

Thí nghiệm cho HS tự phát hiện lỗi:

a = input()
b = input()
print(a + b)      # nhập 5 và 3 → in ra 53 ?!

→ Vì "5" + "3" là nối xâu. Sửa:

a = int(input())
b = int(input())
print(a + b)      # 8
Trong đề thi KHÔNG in câu hỏi kiểu input("Nhập a: ") – máy chấm sẽ coi đó là kết quả sai. Chỉ in đúng những gì đề yêu cầu.

2.3. "Câu thần chú" – nhiều số trên một dòng

Đề thi thường cho: "Một dòng chứa hai số nguyên a, b cách nhau bởi dấu cách".

a, b = map(int, input().split())

Giải thích cho HS: input() đọc cả dòng "5 3" → .split() tách thành ["5", "3"] → map(int, …) đổi từng phần thành số.

2.4. In số thực làm tròn

x = 10 / 3
print(round(x, 2))     # 3.33
print(f"{x:.2f}")      # 3.33  ← nên dùng cách này: luôn in đủ 2 chữ số (5.0 → 5.00)
print(f"{5:.2f}")      # 5.00

3. Luyện tập (45')

Từ buổi này, mọi bài đều viết theo đúng định dạng đề thi.

Bài 1 ★ – CHAO. Input: một dòng chứa tên (không dấu). Output: Xin chao <ten>!

InputOutput
AnXin chao An!

Bài 2 ★ – TONG2. Input: hai số nguyên a, b trên một dòng (|a|, |b| ≤ 10¹⁸). Output: a + b.

InputOutput
3 -10-7

Bài 3 ★ – HCN. Input: chiều dài, chiều rộng (số nguyên dương ≤ 10⁹) trên một dòng. Output: chu vi và diện tích, cách nhau một dấu cách.

InputOutput
5 316 15

Bài 4 ★★ – TBC. Input: ba số nguyên trên một dòng. Output: trung bình cộng, làm tròn 2 chữ số thập phân.

InputOutput
1 2 42.33

Bài 5 ★★ – DOIGIAY. Input: số nguyên n (0 ≤ n ≤ 86399) là số giây. Output: giờ, phút, giây cách nhau dấu cách.

InputOutput
37251 2 5

Bài 6 ★★★ – DONGHO. Đồng hồ đang chỉ h giờ m phút (0 ≤ h ≤ 23, 0 ≤ m ≤ 59). Sau t phút (0 ≤ t ≤ 10⁹) đồng hồ chỉ mấy giờ mấy phút?

Input: h m t trên một dòng. Output: giờ và phút.

InputOutput
23 50 200 10

4. Tổng kết & bài về nhà (10')

  • Nhắc lại: input() trả về gì? Câu thần chú nhập 2 số? In 2 chữ số thập phân?
  • BTVN:
    1. Nhập bán kính r (số thực), in chu vi và diện tích hình tròn (π = 3.14), làm tròn 2 chữ số.
    2. Nhập số tiền n (chia hết cho 1000), cho biết đổi được bao nhiêu tờ 500000, phần còn lại bao nhiêu tờ 200000, còn lại bao nhiêu tờ 100000 (in 3 số).

Lỗi thường gặp

  • Quên int() → nối xâu thay vì cộng; hoặc lỗi TypeError: can only concatenate str.
  • input("Nhap a: ") → bị chấm sai.
  • Nhập 2 số trên một dòng nhưng lại dùng int(input()) → ValueError.

Đáp án (dành cho giáo viên)

# Bài 1
ten = input()
print("Xin chao " + ten + "!")      # hoặc print(f"Xin chao {ten}!")

# Bài 2
a, b = map(int, input().split())
print(a + b)

# Bài 3
d, r = map(int, input().split())
print(2 * (d + r), d * r)

# Bài 4
a, b, c = map(int, input().split())
print(f"{(a + b + c) / 3:.2f}")

# Bài 5
n = int(input())
print(n // 3600, n % 3600 // 60, n % 60)

# Bài 6 – đổi hết ra phút rồi đổi ngược lại
h, m, t = map(int, input().split())
tong = h * 60 + m + t
print(tong // 60 % 24, tong % 60)

# BTVN 1
r = float(input())
print(f"{2 * 3.14 * r:.2f}", f"{3.14 * r * r:.2f}")

# BTVN 2
n = int(input())
print(n // 500000, n % 500000 // 200000, n % 500000 % 200000 // 100000)
Zalo