Python: Đầu vào chuẩn – Cơ bản và ứng dụng cho người mới

1. Giới thiệu

Khi tạo chương trình bằng Python, “nhập chuẩn” — việc nhận và xử lý dữ liệu do người dùng nhập — là vô cùng quan trọng. Đặc biệt, bằng cách sử dụng hàm input() để lấy dữ liệu từ bàn phím, bạn có thể tương tác với người dùng. Trong bài viết này, dành cho người mới bắt đầu với Python, chúng tôi sẽ giải thích về nhập chuẩn từ cách sử dụng cơ bản đến các phương pháp áp dụng nâng cao, kèm theo ví dụ cụ thể. Nội dung được sắp xếp theo trình tự để bạn có thể học từ các chương trình đơn giản đến các cách xử lý nâng cao.

2. Cách sử dụng cơ bản của đầu vào tiêu chuẩn trong Python

2.1 input() là gì?

input() là một hàm nhận dữ liệu nhập từ người dùng và trả về dưới dạng chuỗi. Ví dụ, đoạn mã sau sẽ lấy tên của người dùng và in ra。
name = input("Vui lòng nhập tên: ")
print(f"Xin chào, {name}!")
Trong đoạn mã này, tên được nhập bằng input() được lưu vào name và in ra lời chào。

2.2 Nhập dữ liệu số và chuyển đổi kiểu

Vì dữ liệu nhận được từ input() là chuỗi, nên khi muốn xử lý như số, hãy chuyển đổi kiểu bằng các hàm int() hoặc float()
age = int(input("Vui lòng nhập tuổi: "))
print(f"Bạn {age} tuổi.")
Trong ví dụ này, chúng ta chuyển từ chuỗi sang số nguyên và in tuổi dưới dạng số。
RUNTEQ(ランテック)|超実戦型エンジニア育成スクール

3. Xử lý đầu vào chuẩn nhiều dòng

3.1 Nhập chuỗi nhiều dòng

Trong trường hợp bạn muốn nhận đầu vào nhiều dòng, sử dụng vòng lặp for hoặc list comprehension sẽ hiệu quả. Ví dụ, mã sau đây yêu cầu người dùng nhập 3 từ khác nhau.
words = [input(f"Vui lòng nhập từ thứ {i+1}: ") for i in range(3)]
print(f"Các từ đã nhập: {words}")
Đoạn mã này lưu ba dòng đầu vào vào một danh sách và in ra.

3.2 Nhập nhiều giá trị phân tách bằng khoảng trắng

Khi nhập nhiều dữ liệu trên một dòng, bạn có thể dùng hàm split() để tách theo khoảng trắng. Ở ví dụ sau, người dùng nhập các số, phân tách bằng khoảng trắng, và chúng được chuyển thành số nguyên.
numbers = list(map(int, input("Vui lòng nhập các số cách nhau bằng khoảng trắng: ").split()))
print(f"Các số đã nhập: {numbers}")
Ở đây chúng ta dùng hàm map() để chuyển các số đã nhập sang kiểu số nguyên. Đầu vào được tách bằng split() được lưu hiệu quả vào một danh sách.</final

4. Ứng dụng của đầu vào chuẩn: Xử lý tệp và dữ liệu nhị phân

4.1 Xử lý đầu vào chuẩn bằng sys.stdin

sys.stdin cho phép bạn đọc trực tiếp dữ liệu từ đầu vào chuẩn. Điều này hữu ích khi xử lý lượng lớn dữ liệu văn bản hoặc khi cần coi nội dung tệp được truyền qua đối số dòng lệnh như đầu vào chuẩn.
import sys

data = sys.stdin.read()
print(f"Dữ liệu nhận được: {data}")
Trong đoạn mã này, toàn bộ dữ liệu được đọc từ đầu vào chuẩn và được xuất ra.

4.2 Xử lý đơn giản dữ liệu nhị phân

sys.stdin.buffer cho phép bạn xử lý trực tiếp dữ liệu nhị phân. Cách này hữu ích khi làm việc với dữ liệu hình ảnh hoặc các tệp ở định dạng nhị phân。
import sys

binary_data = sys.stdin.buffer.read()
print(binary_data)
Trong đoạn mã này, dữ liệu nhị phân được đọc từ đầu vào chuẩn và được xuất ra nguyên trạng。
年収訴求

5. Trường hợp sử dụng thực tiễn: giải quyết vấn đề bằng đầu vào tiêu chuẩn

5.1 Chương trình tính giá trị trung bình sử dụng đầu vào tiêu chuẩn

Trong chương trình dưới đây, ta nhận các số nguyên từ đầu vào tiêu chuẩn, tính giá trị trung bình của chúng và in ra kết quả. Kiểu xử lý như vậy thường được dùng trong lập trình thi đấu và xử lý dữ liệu。
N = int(input("Vui lòng chỉ định số lượng số sẽ nhập: "))
numbers = list(map(int, input("Vui lòng nhập các số, phân tách bằng khoảng trắng: ").split()))
average = sum(numbers) / N
print(f"Giá trị trung bình là {average}.")
Chương trình này trước tiên nhận số lượng số, sau đó xử lý các số được nhập (phân tách bằng khoảng trắng) dưới dạng một danh sách và tính giá trị trung bình。

5.2 Chương trình nhận dữ liệu cho đến khi kết thúc nhập

Đây là một chương trình tiếp tục nhận dữ liệu cho đến khi người dùng nhập một dòng trống. Bằng cách đặt một điều kiện kết thúc cụ thể, có thể xử lý dữ liệu nhập trong thời gian dài。
data = []
while True:
    line = input()
    if line == "":
        break
    data.append(line)
print("Dữ liệu đã được nhập: ", data)
Trong ví dụ này, chương trình tiếp tục nhận dữ liệu cho đến khi một dòng trống được nhập và cuối cùng in ra toàn bộ dữ liệu。

6. Các lỗi thường gặp và cách xử lý

6.1 Cách xử lý ValueError

Khi nhập số, nếu người dùng vô tình nhập chuỗi thì sẽ xảy ra ValueError. Để tránh lỗi này, cần thêm mã để xác thực giá trị nhập vào.
try:
    age = int(input("Vui lòng nhập tuổi: "))
except ValueError:
    print("Dữ liệu nhập không hợp lệ. Vui lòng nhập số.")

6.2 Cách xử lý EOFError

Khi nhận đầu vào nhiều dòng, có thể xảy ra lỗi EOF (End of File) cho biết kết thúc đầu vào chuẩn. Để tránh điều này, điều quan trọng là thiết lập điều kiện kết thúc một cách phù hợp.
import sys

for line in sys.stdin:
    if line.strip() == "":
        break
    print(line.strip())

7. Tổng kết

Khi sử dụng đầu vào chuẩn trong Python, việc tương tác với người dùng trở nên dễ dàng và có thể tạo ra các chương trình nâng cao hơn. Từ hàm input() cơ bản đến xử lý tệp và dữ liệu nhị phân, chúng ta đã học nhiều phương pháp khác nhau. Hiểu và vận dụng cách khai thác đầu vào chuẩn sẽ giúp nâng cao tính linh hoạt và hiệu quả của chương trình.
RUNTEQ(ランテック)|超実戦型エンジニア育成スクール