Trong bài tập này chúng ta sẽ thực hiện hành động kiểm tra dữ liệu mà người dùng nhập vào là số hay chuỗi, đây là cách giúp bạn kiểm soát dữ liệu nhập vào phù hợp với yêu cầu của bài toán
Bài viết này đã được đăng tại freetuts. mạng, không được sao chép dưới mọi hình thức
Giả sử bạn viết một chương trình tính toán tìm số lớn nhất trong 3 số, và yêu cầu chống lại việc nhập vào ba số đó. Lúc này nếu người dùng nhập vào một chuỗi thì sẽ sai, vì vậy ta cần kiểm tra định dạng của nó trước khi thực hiện chương trình
1. Kiểu dữ liệu mà Python nhận từ người dùng là gì?
Chúng ta hãy bàn về Python 3 thôi nhé, còn Python 2 thì mình không đề cập đến trong series này
Trong Python, để tiếp nhận dữ liệu từ người dùng, bạn sử dụng hàm input. Bạn có biết hàm này sẽ trả về dữ liệu ở định dạng không có gì không? . Hãy làm ví dụ sau để hiểu rõ hơn
Bài viết này đã được đăng tại [free tuts. net]
print ["Chương trình đăng tại freetuts.net"] number = input["Nhập số "] string = input["Nhập chuỗi "] print["\n"] print["Kiểu dữ liệu vừa nhập là: "] print["Number ", type[number]] print["String ", type[string]]
Kết quả như sau
Như bạn đã thấy, mặc dù biến số mình nhập vào là số 12 nhưng nó vẫn là kiểu chuỗi
Bây giờ ta sẽ học cách kiểm tra định dạng của nó nhé
2. Cách kiểm tra dữ liệu là chuỗi hay số trong Python
Trong Python, chúng ta có thể sử dụng nhiều cách khác nhau để kiểm tra dữ liệu đầu vào là chuỗi hay số
Cách 1. Chuyển đổi thành int hoặc float để kiểm tra đầu vào là số hay chuỗi
Với cách này, ta sử dụng hai hàm int[]
và float[
] để ép kiểu dữ liệu, dựa trên kết quả trả về ta sẽ biết chính xác người dùng nhập vào một chuỗi hay một số
Ta must set it in try. ngoại trừ, do hai hàm ép kiểu trên sẽ không thể ép một chuỗi thành một số trong trường hợp giá trị của chuỗi không phải là số. Ví dụ bạn chuyển chuỗi "freetuts. net" thành số là hoàn toàn sai
Quá trình kiểm tra như sau. Nếu ép kiểu thành công thì là số, ngược lại thì một ngoại lệ sẽ bị bung ra nên nó là một chuỗi
print ["Chương trình đăng tại freetuts.net"] user_input = input["Nhập tuổi của bạn "] print["\n"] try: val = int[user_input] print["Dữ liệu nhập vào là int = ", val] except ValueError: try: val = float[user_input] print["Dữ liệu nhâp vào là float = ", val] except ValueError: print["Dữ liệu nhập vào không phải là number"]
cách 2. Use isdigit function to check a number or string
Hàm này công dụng khá đơn giản như sau
print ["Chương trình đăng tại freetuts.net"] num = input["Nhập số của bạn "] print["\n"] if num.isdigit[]: print["Dữ liệu nhập vào là số "] else: print["Dữ liệu nhập vào là chuỗi "]
Tuy nhiên, this function master active with a positive integer. Nếu bạn nhập vào là một số thực hoặc một số âm thì nó sẽ trả về là một chuỗi. Vì vậy, giải pháp tốt nhất vẫn là chọn phương án 1 nhé cả nhà
3. Viết chương trình nhập vào một số bằng Python
Bây giờ ta sẽ viết chương trình ép người dùng nhập vào là một số, nếu họ nhập vào là một chuỗi thì yêu cầu nhập lại
while True: num = input["Vui lòng nhập vào một con số nhé! "] try: val = int[num] print["Dữ liệu bạn nhập vào là số."] print["Giá trị của nó là: ", val] break; # Thoát khỏi vòng lặp except ValueError: try: float[num] print["Dữ liệu nhập vào là float"] print["Giá trị của nó là: ", val] break; # Thoát khỏi vòng lặp except ValueError: print["Đây không phải là một số, vui lòng nhập lại!"]
Chạy chương trình này lên và thử nhập vào một chuỗi xem sao nhé, chắc chắn rằng nó sẽ yêu cầu nhập lại cho khi bạn nhập vào đó là một số
Sử dụng hàm isinstance[]
để kiểm tra xem một số là int hay float, e. g. if isinstance[my_num, int]:
. Hàm isinstance
sẽ trả về True
nếu đối tượng được truyền vào là một thể hiện của lớp được cung cấp [int
hoặc float
]
Chúng tôi đã sử dụng hàm isinstance[]
để kiểm tra xem một số là int
hay float
Hàm trả về True
nếu đối tượng được truyền vào là một thể hiện hoặc lớp con của lớp được truyền vào
Hàm isinstance[]
trả về chính xác xem đối tượng được truyền vào là một thể hiện hay một lớp con của lớp được cung cấp
Tuy nhiên, có một trường hợp cạnh - booleans cũng là một thể hiện của số nguyên
Điều này là do lớp isinstance[]
2 là lớp con của lớp int
Nếu bạn cần kiểm tra xem một số là int hay float, hãy chuyển một bộ chứa các lớp int
và float
trong lệnh gọi hàm isinstance[]
Đối số thứ hai mà hàm isinstance
nhận có thể là một lớp hoặc một bộ chứa nhiều lớp
Lệnh gọi hàm trên kiểm tra xem đối tượng được truyền vào là một int
hay một float
Sử dụng một if isinstance[my_num, int]:
0 trong lệnh gọi hàm tương đương với việc sử dụng hai lệnh gọi với toán tử if isinstance[my_num, int]:
1