Nhập ba số rồi mới cộng
Nhiệm vụ thứ nhất: tạo `tong-ba-so.py`, nhập ba số nguyên **không âm** rồi in tổng. Bản mẫu dưới đây dùng `int` ở từng dòng vì `input` trả xâu:
```python
a = int(input("Số thứ nhất: "))
b = int(input("Số thứ hai: "))
c = int(input("Số thứ ba: "))
print("Tổng là:", a + b + c)
```
Thử lần lượt `2`, `3`, `4`: màn hình in `Tổng là: 9`. Thử `0`, `0`, `0`: in `Tổng là: 0`. Nếu gõ `abc`, chương trình báo `ValueError` ở bước đổi kiểu; bài này chỉ nhận đầu vào đúng dạng số nguyên, chưa xử lí nhập sai để chạy tiếp.
Bài luyện
Với ba lần nhập `2`, `3`, `4`, chương trình trong bài in dòng nào?
Đó là nối xâu nếu không chuyển kiểu.
Mỗi đầu vào được đổi thành int rồi cộng 2 + 3 + 4.
Chương trình in tổng, không in từng số.
input nhận chữ và có thể đổi xâu số hợp lệ.
Lời giải
`int` đổi ba xâu nhập thành 2, 3, 4. Biểu thức `a + b + c` bằng 9, nên lệnh print in `Tổng là: 9`.
Tách đơn vị từ lớn xuống nhỏ
Nhiệm vụ thứ hai: đổi một số giây nguyên không âm thành ngày, giờ, phút, giây. Một ngày có 86 400 giây, một giờ 3 600 giây, một phút 60 giây. Lấy **thương nguyên** để biết số đơn vị đủ, rồi lấy **số dư** cho đơn vị nhỏ hơn. Tạo `doi-giay.py`:
```python
ss = int(input("Số giây không âm: "))
ngay, du = ss // 86400, ss % 86400
gio, du = du // 3600, du % 3600
phut, giay = du // 60, du % 60
print(ngay, "ngày", gio, "giờ", phut, "phút", giay, "giây")
```
Với `ss = 90061`, kết quả là `1 ngày 1 giờ 1 phút 1 giây`: sau khi lấy một ngày còn 3 661 giây; lấy một giờ còn 61 giây; lấy một phút còn 1 giây. Kiểm thêm `ss = 0` cho bốn số 0 và `ss = 60` cho 0 ngày, 0 giờ, 1 phút, 0 giây. Nếu kết quả sai ở mốc 60 hay 3 600, kiểm số chia và biến `du` sau mỗi bước. Đầu vào âm hoặc chữ nằm ngoài phạm vi mẫu này.
Bài luyện
Với 90061 giây, sau khi lấy 1 ngày (86400 giây), còn bao nhiêu giây để tách giờ?
90061 − 86400 = 3661.
3600 là độ dài một giờ, chưa tính số dư.
61 là số dư sau khi lấy tiếp một giờ.
1 là số dư sau khi lấy cả phút.
Lời giải
Một ngày đủ 86400 giây. Lấy `90061 % 86400` được 3661 giây, rồi mới tách giờ.
Bài luyện
Trong chương trình đổi giây, giá trị `ss = 60` cho kết quả nào?
60 giây đủ một phút và không dư giây.
Một giờ cần 3600 giây.
Một ngày cần 86400 giây.
Chương trình tiếp tục tách phút nên không giữ 60 ở ô giây.
Lời giải
`60 // 86400 = 0`, `60 // 3600 = 0`, `60 // 60 = 1`, `60 % 60 = 0`.
Bài luyện
Người dùng gõ `abc` ở chương trình nhập ba số. Mô tả nào đúng với đúng mã trong bài?
Mã không có quy tắc đổi chữ thành 0.
Mã không có vòng lặp nhập lại.
int không chuyển xâu abc thành số nguyên.
Phép cộng chưa chạy sau khi đổi kiểu lỗi.
Lời giải
`input` nhận xâu `"abc"`, nhưng `int("abc")` không chuyển được thành số nguyên nên báo `ValueError`; bản mẫu chưa có phần xử lí lỗi nhập.
Đang học