Bài 7.1. Python - Cách hàm input() hoạt động

Hàm input() tạm dừng chương trình của bạn và chờ người dùng nhập một số văn bản. Khi Python nhận được đầu vào của người dùng, nó gán đầu vào đó cho một biến để bạn có thể làm việc với nó một cách thuận tiện.

Ví dụ, chương trình sau yêu cầu người dùng nhập một số văn bản, sau đó hiển thị lại thông báo đó cho người dùng:

message = input("Tell me something, and I will repeat it back to you: ")
print(message)

Hàm input() nhận một đối số: lời nhắc mà chúng ta muốn hiển thị cho người dùng, để họ biết loại thông tin nào cần nhập. Trong ví dụ này, khi Python chạy dòng đầu tiên, người dùng sẽ thấy lời nhắc "Tell me something, and I will repeat it back to you:". Chương trình chờ trong khi người dùng nhập phản hồi của họ và tiếp tục sau khi người dùng nhấn ENTER. Phản hồi được gán cho biến message, sau đó print(message) hiển thị đầu vào lại cho người dùng:

Tell me something, and I will repeat it back to you: Hello everyone!
Hello everyone!

Viết lời nhắc rõ ràng

Mỗi khi bạn sử dụng hàm input(), bạn nên bao gồm một lời nhắc rõ ràng, dễ hiểu để cho người dùng biết chính xác loại thông tin bạn đang tìm kiếm. Bất kỳ câu lệnh nào cho người dùng biết cần nhập gì đều có thể hoạt động. Ví dụ:

name = input("Please enter your name: ")
print(f"\nHello, {name}!")

Thêm một khoảng trắng ở cuối lời nhắc của bạn (sau dấu hai chấm trong ví dụ trước) để tách lời nhắc khỏi phản hồi của người dùng và làm cho rõ ràng nơi người dùng cần nhập văn bản của họ. Ví dụ:

Please enter your name: Eric
Hello, Eric!

Đôi khi bạn sẽ muốn viết một lời nhắc dài hơn một dòng. Ví dụ, bạn có thể muốn cho người dùng biết lý do tại sao bạn yêu cầu một số đầu vào nhất định. Bạn có thể gán lời nhắc của mình cho một biến và truyền biến đó cho hàm input(). Điều này cho phép bạn xây dựng lời nhắc của mình qua nhiều dòng, sau đó viết một câu lệnh input() sạch sẽ.

prompt = "If you share your name, we can personalize the messages you see."
prompt += "\nWhat is your first name? "
name = input(prompt)
print(f"\nHello, {name}!")

Ví dụ này cho thấy một cách để xây dựng một chuỗi nhiều dòng. Dòng đầu tiên gán phần đầu tiên của thông báo cho biến prompt. Trong dòng thứ hai, toán tử += lấy chuỗi đã được gán cho prompt và thêm chuỗi mới vào cuối.

Lời nhắc bây giờ trải dài hai dòng, với khoảng trắng sau dấu chấm hỏi để rõ ràng:

If you share your name, we can personalize the messages you see.
What is your first name? Eric
Hello, Eric!

Sử dụng int() để chấp nhận đầu vào số

Khi bạn sử dụng hàm input(), Python diễn giải mọi thứ người dùng nhập là một chuỗi. Hãy xem xét phiên làm việc sau của trình thông dịch, yêu cầu người dùng nhập tuổi của họ:

>>> age = input("How old are you? ")
How old are you? 21
>>> age
'21'

Người dùng nhập số 21, nhưng khi chúng ta yêu cầu Python giá trị của age, nó trả về '21', biểu diễn chuỗi của giá trị số đã nhập. Chúng ta biết Python đã diễn giải đầu vào là một chuỗi vì số này bây giờ được bao quanh bởi dấu ngoặc kép. Nếu tất cả những gì bạn muốn làm là in đầu vào, điều này hoạt động tốt. Nhưng nếu bạn cố gắng sử dụng đầu vào như một số, bạn sẽ gặp lỗi:

>>> age = input("How old are you? ")
How old are you? 21
>>> age >= 18
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: '>=' not supported between instances of 'str' and 'int'

Khi bạn cố gắng sử dụng đầu vào để thực hiện một so sánh số, Python tạo ra một lỗi vì nó không thể so sánh một chuỗi với một số nguyên: chuỗi '21' được gán cho age không thể so sánh với giá trị số 18.

Chúng ta có thể giải quyết vấn đề này bằng cách sử dụng hàm int(), chuyển đổi chuỗi đầu vào thành một giá trị số. Điều này cho phép so sánh chạy thành công:

>>> age = input("How old are you? ")
How old are you? 21
>>> age = int(age)
>>> age >= 18
True

Trong ví dụ này, khi chúng ta nhập 21 tại lời nhắc, Python diễn giải số này là một chuỗi, nhưng giá trị sau đó được chuyển đổi thành biểu diễn số bằng hàm int(). Bây giờ Python có thể chạy kiểm tra điều kiện: nó so sánh age (bây giờ đại diện cho giá trị số 21) và 18 để xem liệu age có lớn hơn hoặc bằng 18 hay không. Kiểm tra này đánh giá là True.

Làm thế nào để bạn sử dụng hàm int() trong một chương trình thực tế? Hãy xem xét một chương trình xác định xem mọi người có đủ chiều cao để đi tàu lượn siêu tốc hay không:

height = input("How tall are you, in inches? ")
height = int(height)
if height >= 48:
    print("\nYou're tall enough to ride!")
else:
    print("\nYou'll be able to ride when you're a little older.")

Chương trình có thể so sánh height với 48 vì height = int(height) chuyển đổi giá trị đầu vào thành biểu diễn số trước khi so sánh được thực hiện. Nếu số đã nhập lớn hơn hoặc bằng 48, chúng ta nói với người dùng rằng họ đủ chiều cao:

How tall are you, in inches? 71
You're tall enough to ride!

Khi bạn sử dụng đầu vào số để thực hiện các phép tính và so sánh, hãy chắc chắn chuyển đổi giá trị đầu vào thành biểu diễn số trước.

Toán tử Modulo

Một công cụ hữu ích để làm việc với thông tin số là toán tử modulo (%), chia một số cho một số khác và trả về phần dư:

>>> 4 % 3
1
>>> 5 % 3
2
>>> 6 % 3
0
>>> 7 % 3
1

Toán tử modulo không cho bạn biết một số vừa với một số khác bao nhiêu lần; nó chỉ cho bạn biết phần dư là gì.

Khi một số chia hết cho một số khác, phần dư là 0, vì vậy toán tử modulo luôn trả về 0. Bạn có thể sử dụng thực tế này để xác định xem một số là chẵn hay lẻ:

number = input("Enter a number, and I'll tell you if it's even or odd: ")
number = int(number)
if number % 2 == 0:
    print(f"\nThe number {number} is even.")
else:
    print(f"\nThe number {number} is odd.")

Các số chẵn luôn chia hết cho hai, vì vậy nếu modulo của một số và hai là không (ở đây, nếu number % 2 == 0), số đó là chẵn. Nếu không, nó là lẻ.

Enter a number, and I'll tell you if it's even or odd: 42
The number 42 is even.

Làm thêm nhiều bài tập miễn phí tại đây

Comments

There are no comments at the moment.