Buổi 2: Biến và nhập dữ liệu
Hôm nay em sẽ học
- Biến – chiếc hộp để cất giá trị
- Ba kiểu dữ liệu: số nguyên, số thực, chữ
- Nhập dữ liệu từ bàn phím bằng
input() - "Câu thần chú" nhập nhiều số trên một dòng
- 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ình1. Kiến thức chính
Biến – chiếc hộp có nhãn tên
| Scratch | Python |
|---|---|
| đặt diem thành 0 | diem = 0 |
| thay đổi diem một lượng 5 | diem += 5 (viết đầy đủ: diem = diem + 5) |
| hiện giá trị diem | print(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ĩa | Ví dụ |
|---|---|---|
int | số nguyên | 13, -7, 0 |
float | số thực | 1.55, 3.0 |
str | xâ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}")
3.33 5.00 3.3333
2. Ghi nhớ và lỗi thường gặp
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ết | Vấn đề |
|---|---|
a = input() rồi a + b | quê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
- Chạy
a = input()rồi gõ7. Biếnacó kiểu gì? - Sau ba lệnh
x = 5,x += 3,x *= 2thìxbằng bao nhiêu? - 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.
| Input | Output |
|---|---|
1 | 6.28 3.14 |
10 | 62.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.
| Input | Output |
|---|---|
2000000 | 4 0 0 |
1800000 | 3 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.
| Input | Output |
|---|---|
100 | 212.0 |
37 | 98.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.
| Input | Output |
|---|---|
0 0 3 4 | 5.00 |
1 1 2 2 | 1.41 |
d ** 0.5..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
- Kiểu
str(chữ"7"), vìinput()luôn trả về chữ. x = 5→x += 3thành 8 →x *= 2thành 16.- 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
r = float(input()) chu_vi = 2 * 3.14 * r dien_tich = 3.14 * r * r print(f"{chu_vi:.2f} {dien_tich:.2f}")
| # | Input | Output |
|---|---|---|
| 1 | 1 | 6.28 3.14 |
| 2 | 10 | 62.80 314.00 |
| 3 | 2.2 | 13.82 15.20 |
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
n = int(input()) to500 = n // 500000 n = n % 500000 to200 = n // 200000 n = n % 200000 to100 = n // 100000 print(to500, to200, to100)
| # | Input | Output |
|---|---|---|
| 1 | 2000000 | 4 0 0 |
| 2 | 1800000 | 3 1 1 |
| 3 | 100000 | 0 0 1 |
| 4 | 400000 | 0 2 0 |
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
c = int(input()) f = c * 9 / 5 + 32 print(f"{f:.1f}")
| # | Input | Output |
|---|---|---|
| 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
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}")
| # | Input | Output |
|---|---|---|
| 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 |
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ùngmap(int, input().split()). - Quên ngoặc:
dx * dx + dy * dy ** 0.5chỉ lấy căn củady * 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ằngint(),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
| Scratch | Python |
|---|---|
đặt [diem] thành 0 | diem = 0 |
thay đổi [diem] một lượng 5 | diem += 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
| Scratch | Python |
|---|---|
hỏi [Tên em là gì?] và đợi → trả lời | ten = 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
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>!
| Input | Output |
|---|---|
An | Xin 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.
| Input | Output |
|---|---|
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.
| Input | Output |
|---|---|
5 3 | 16 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.
| Input | Output |
|---|---|
1 2 4 | 2.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.
| Input | Output |
|---|---|
3725 | 1 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.
| Input | Output |
|---|---|
23 50 20 | 0 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:
- 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ố.
- 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ỗiTypeError: 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)