Trả lời nhanh
Phép chia lấy phần nguyên trong Python được kí hiệu là // (hai dấu gạch chéo liền nhau). Ví dụ 17 // 5 cho kết quả 3, vì 17 chia 5 được 3 lần và dư 2. Dấu / là phép chia thông thường cho kết quả số thực, còn dấu % là phép chia lấy phần dư.
Ba phép chia cơ bản của Python
| Kí hiệu | Tên gọi | Ví dụ | Kết quả |
|---|---|---|---|
| / | Chia (cho số thực) | 17 / 5 |
3.4 |
| // | Chia lấy phần nguyên | 17 // 5 |
3 |
| % | Chia lấy phần dư | 17 % 5 |
2 |
Ba phép này gắn bó với nhau. Với hai số nguyên a và b (b khác 0), luôn có a = (a // b) × b + (a % b). Kiểm tra: 17 = 3 × 5 + 2.
Vì sao Python tách thành // và /?
Trong Python 3, dấu / luôn trả về số thực, kể cả khi chia hết: 10 / 5 cho 2.0. Nếu em cần số nguyên, chẳng hạn đếm số nhóm, số trang, số hàng, thì phải dùng //. Đây là nguồn gây nhầm lẫn lớn khi học sinh chuyển từ ngôn ngữ khác sang Python.
Ví dụ ứng dụng
- Đổi giây ra phút:
giay = 200,phut = giay // 60cho 3 phút,con_lai = giay % 60cho 20 giây. - Tách chữ số hàng chục: với
n = 47,n // 10cho 4 (hàng chục),n % 10cho 7 (hàng đơn vị). - Chia nhóm: 25 học sinh, mỗi nhóm 4 bạn thì
25 // 4cho 6 nhóm đủ, dư25 % 4bằng 1 bạn.
Trường hợp số âm và số thực
Phép // làm tròn kết quả xuống về số nguyên nhỏ hơn hoặc bằng thương thực, chứ không phải cắt bỏ phần thập phân.
17 // 5bằng 3.-17 // 5bằng -4 (vì -3,4 làm tròn xuống thành -4, không phải -3).7.5 // 2bằng3.0(nếu có số thực tham gia, kết quả cũng là số thực nhưng phần thập phân bằng 0).
Phần dư tương ứng cũng nhất quán theo quy tắc trên: -17 % 5 bằng 3, vì -17 = (-4) × 5 + 3.
Hàm divmod
Hàm divmod(a, b) trả về cả thương nguyên và phần dư trong một lần gọi. Ví dụ divmod(17, 5) cho (3, 2). Rất tiện khi đổi đơn vị thời gian.
Lỗi sai thường gặp
- Viết
17 / 5rồi tưởng kết quả là 3. Thực tế là 3.4. - Dùng một dấu gạch chéo ngược
\thay cho//. Dấu gạch chéo ngược không phải toán tử chia. - Chia cho 0: cả
/,//và%đều gây lỗiZeroDivisionError. - Nhầm
//với kí hiệu chú thích của ngôn ngữ khác. Trong Python, chú thích bắt đầu bằng dấu#.
Mẹo nhớ
Hai gạch chéo giống hai vạch "chặt" phần lẻ đi, chỉ giữ lại phần nguyên. Một gạch chéo cho kết quả có lẻ. Dấu phần trăm cho phần còn lại.
Luyện tập
- Kết quả của
45 // 7và45 % 7là gì? Đáp án: 6 và 3 (vì 45 = 6 × 7 + 3). - Viết biểu thức lấy chữ số hàng trăm của
n = 358. Đáp án:n // 100cho 3. - Một cuộc họp dài 135 phút. Viết lệnh tính số giờ và số phút lẻ. Đáp án:
gio = 135 // 60cho 2 vàphut = 135 % 60cho 15.
Câu hỏi thường gặp
Phép // trong Python luôn trả về số nguyên phải không?
Chỉ khi cả hai toán hạng là số nguyên. Nếu một trong hai là số thực thì kết quả là số thực nhưng đã được làm tròn xuống, ví dụ 7.5 // 2 cho 3.0.
Khác nhau giữa // và int(a / b) là gì?
Với số dương thì giống nhau, nhưng với số âm thì khác. -17 // 5 cho -4 (làm tròn xuống), còn int(-17 / 5) cho -3 (cắt bỏ phần thập phân).
Phép chia lấy phần dư trong Python kí hiệu là gì?
Kí hiệu là %, ví dụ 17 % 5 cho kết quả 2.