Bài 5.4. Python - Sử dụng câu lệnh if với List

Bạn có thể thực hiện một số công việc thú vị khi kết hợp danh sách và câu lệnh if. Bạn có thể theo dõi các giá trị đặc biệt cần được xử lý khác với các giá trị khác trong danh sách. Bạn có thể quản lý hiệu quả các điều kiện thay đổi, chẳng hạn như sự sẵn có của các mặt hàng nhất định trong một nhà hàng trong suốt ca làm việc. Bạn cũng có thể bắt đầu chứng minh rằng mã của bạn hoạt động như mong đợi trong tất cả các tình huống có thể.

Kiểm tra các mục đặc biệt

Chương này bắt đầu với một ví dụ đơn giản cho thấy cách xử lý một giá trị đặc biệt như 'bmw', cần được in ở định dạng khác với các giá trị khác trong danh sách. Bây giờ bạn đã hiểu cơ bản về các kiểm tra điều kiện và câu lệnh if, hãy xem xét kỹ hơn cách bạn có thể theo dõi các giá trị đặc biệt trong danh sách và xử lý các giá trị đó một cách phù hợp.

Hãy tiếp tục với ví dụ về tiệm pizza. Tiệm pizza hiển thị một thông báo bất cứ khi nào một lớp phủ được thêm vào chiếc pizza của bạn, khi nó đang được làm. Mã cho hành động này có thể được viết rất hiệu quả bằng cách tạo một danh sách các lớp phủ mà khách hàng đã yêu cầu và sử dụng một vòng lặp để thông báo từng lớp phủ khi nó được thêm vào chiếc pizza:

requested_toppings = ['mushrooms', 'green peppers', 'extra cheese']
for requested_topping in requested_toppings:
    print(f"Adding {requested_topping}.")
print("\nFinished making your pizza!")

Đầu ra rất đơn giản vì mã này chỉ là một vòng lặp for đơn giản:

Adding mushrooms.
Adding green peppers.
Adding extra cheese.
Finished making your pizza!

Nhưng điều gì sẽ xảy ra nếu tiệm pizza hết ớt xanh? Một câu lệnh if bên trong vòng lặp for có thể xử lý tình huống này một cách phù hợp:

requested_toppings = ['mushrooms', 'green peppers', 'extra cheese']
for requested_topping in requested_toppings:
    if requested_topping == 'green peppers':
        print("Sorry, we are out of green peppers right now.")
    else:
        print(f"Adding {requested_topping}.")
print("\nFinished making your pizza!")

Lần này, chúng ta kiểm tra từng mục được yêu cầu trước khi thêm nó vào chiếc pizza. Câu lệnh if kiểm tra xem người đó có yêu cầu ớt xanh hay không. Nếu có, chúng ta hiển thị một thông báo thông báo cho họ biết lý do tại sao họ không thể có ớt xanh. Khối else đảm bảo rằng tất cả các lớp phủ khác sẽ được thêm vào chiếc pizza.

Đầu ra cho thấy rằng mỗi lớp phủ được yêu cầu được xử lý một cách phù hợp:

Adding mushrooms.
Sorry, we are out of green peppers right now.
Adding extra cheese.
Finished making your pizza!

Kiểm tra rằng danh sách không trống

Chúng ta đã đưa ra một giả định đơn giản về mọi danh sách mà chúng ta đã làm việc cho đến nay: chúng ta đã giả định rằng mỗi danh sách có ít nhất một mục trong đó. Sớm thôi, chúng ta sẽ để người dùng cung cấp thông tin được lưu trữ trong một danh sách, vì vậy chúng ta sẽ không thể giả định rằng một danh sách có bất kỳ mục nào trong đó mỗi khi một vòng lặp được chạy. Trong tình huống này, rất hữu ích để kiểm tra xem một danh sách có trống hay không trước khi chạy một vòng lặp for.

Làm ví dụ, hãy kiểm tra xem danh sách các lớp phủ được yêu cầu có trống hay không trước khi xây dựng chiếc pizza. Nếu danh sách trống, chúng ta sẽ nhắc người dùng và đảm bảo rằng họ muốn một chiếc pizza trơn. Nếu danh sách không trống, chúng ta sẽ xây dựng chiếc pizza giống như chúng ta đã làm trong các ví dụ trước:

requested_toppings = []
if requested_toppings:
    for requested_topping in requested_toppings:
        print(f"Adding {requested_topping}.")
    print("\nFinished making your pizza!")
else:
    print("Are you sure you want a plain pizza?")

Lần này chúng ta bắt đầu với một danh sách trống các lớp phủ được yêu cầu. Thay vì nhảy ngay vào một vòng lặp for, chúng ta thực hiện một kiểm tra nhanh trước. Khi tên của một danh sách được sử dụng trong một câu lệnh if, Python trả về True nếu danh sách chứa ít nhất một mục; một danh sách trống đánh giá là False. Nếu requested_toppings vượt qua kiểm tra điều kiện, chúng ta chạy cùng một vòng lặp for mà chúng ta đã sử dụng trong ví dụ trước. Nếu kiểm tra điều kiện thất bại, chúng ta in ra một thông báo hỏi khách hàng xem họ có thực sự muốn một chiếc pizza trơn không có lớp phủ hay không.

Danh sách trống trong trường hợp này, vì vậy đầu ra hỏi xem người dùng có thực sự muốn một chiếc pizza trơn không:

Are you sure you want a plain pizza?

Nếu danh sách không trống, đầu ra sẽ hiển thị từng lớp phủ được yêu cầu được thêm vào chiếc pizza.

Sử dụng nhiều danh sách

Mọi người sẽ yêu cầu hầu như bất cứ thứ gì, đặc biệt là khi nói đến lớp phủ pizza. Điều gì sẽ xảy ra nếu một khách hàng thực sự muốn khoai tây chiên trên chiếc pizza của họ? Bạn có thể sử dụng danh sách và câu lệnh if để đảm bảo rằng đầu vào của bạn có ý nghĩa trước khi bạn hành động theo nó.

Hãy theo dõi các yêu cầu lớp phủ bất thường trước khi chúng ta xây dựng một chiếc pizza. Ví dụ sau định nghĩa hai danh sách. Đầu tiên là một danh sách các lớp phủ có sẵn tại tiệm pizza, và thứ hai là danh sách các lớp phủ mà người dùng đã yêu cầu. Lần này, mỗi mục trong requested_toppings được kiểm tra so với danh sách các lớp phủ có sẵn trước khi nó được thêm vào chiếc pizza:

available_toppings = ['mushrooms', 'olives', 'green peppers', 'pepperoni', 'pineapple', 'extra cheese']
requested_toppings = ['mushrooms', 'french fries', 'extra cheese']
for requested_topping in requested_toppings:
    if requested_topping in available_toppings:
        print(f"Adding {requested_topping}.")
    else:
        print(f"Sorry, we don't have {requested_topping}.")
print("\nFinished making your pizza!")

Đầu tiên, chúng ta định nghĩa một danh sách các lớp phủ có sẵn tại tiệm pizza này. Lưu ý rằng điều này có thể là một tuple nếu tiệm pizza có một lựa chọn lớp phủ ổn định. Sau đó, chúng ta tạo một danh sách các lớp phủ mà một khách hàng đã yêu cầu. Có một yêu cầu bất thường cho một lớp phủ trong ví dụ này: 'french fries'. Tiếp theo, chúng ta lặp qua danh sách các lớp phủ được yêu cầu. Bên trong vòng lặp, chúng ta kiểm tra xem mỗi lớp phủ được yêu cầu có thực sự nằm trong danh sách các lớp phủ có sẵn hay không. Nếu có, chúng ta thêm lớp phủ đó vào chiếc pizza. Nếu lớp phủ được yêu cầu không nằm trong danh sách các lớp phủ có sẵn, khối else sẽ chạy. Khối else in ra một thông báo cho người dùng biết lớp phủ nào không có sẵn.

Cú pháp mã này tạo ra đầu ra sạch sẽ và thông tin:

Adding mushrooms.
Sorry, we don't have french fries.
Adding extra cheese.
Finished making your pizza!

Chỉ trong vài dòng mã, chúng ta đã quản lý một tình huống thực tế khá hiệu quả!

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

Comments

There are no comments at the moment.