Computer >> Máy Tính >  >> Lập trình >> Python

Python ValueError:max () arg là một chuỗi rỗng Giải pháp

Phương thức max () chỉ hoạt động nếu bạn chuyển một chuỗi có ít nhất một giá trị vào phương thức.

Nếu bạn cố gắng tìm mục lớn nhất trong danh sách trống, bạn sẽ gặp phải lỗi “ValueError:max() arg là một dãy trống ”.

Trong hướng dẫn này, chúng tôi nói về lỗi này có nghĩa là gì và tại sao bạn có thể gặp phải nó. Chúng tôi xem qua một ví dụ để giúp bạn tìm ra cách giải quyết lỗi này.

ValueError:max () arg là một chuỗi rỗng

max() cho phép bạn tìm mục lớn nhất trong danh sách. Nó tương tự với min() phương thức tìm mục nhỏ nhất trong danh sách.

Để phương pháp này hoạt động, hãy max() cần một chuỗi có ít nhất một giá trị. Điều này là do bạn không thể tìm thấy mục lớn nhất trong danh sách nếu không có mục nào. Mục lớn nhất không tồn tại vì không có mục nào để tìm kiếm.

Một biến thể của “ValueError:max() arg là một chuỗi trống ”lỗi được tìm thấy khi bạn cố gắng chuyển một danh sách trống vào min() phương pháp. Lỗi này là “ValueError:min() arg là một dãy trống ”. min() này lỗi xảy ra vì lý do tương tự:bạn không thể tìm thấy giá trị nhỏ nhất trong danh sách không có giá trị nào.

Một tình huống mẫu

Chúng tôi sẽ xây dựng một chương trình nhằm tìm ra điểm cao nhất mà học sinh đạt được trong tất cả các bài kiểm tra hóa học của các em. Để bắt đầu, hãy xác định danh sách sinh viên:

students = [
	   { "name": "Ron", "grades": [75, 92, 84] },
	   { "name": "Katy", "grades": [92, 86, 81] },
	   { "name": "Rachel", "grades": [64, 72, 72] },
	   { "name": "Miranda", "grades": [] }
]

Danh sách sinh viên của chúng tôi có bốn từ điển. Những từ điển này chứa tên của từng học sinh cũng như danh sách các điểm mà họ đã đạt được. Miranda chưa có điểm nào vì cô ấy vừa mới tham gia lớp hóa học.

81% người tham gia cho biết họ cảm thấy tự tin hơn về triển vọng công việc công nghệ của mình sau khi tham gia một cuộc thi đào tạo. Kết hợp với bootcamp ngay hôm nay.

Sinh viên tốt nghiệp bootcamp trung bình đã dành ít hơn sáu tháng để chuyển đổi nghề nghiệp, từ khi bắt đầu bootcamp đến khi tìm được công việc đầu tiên của họ.

Tiếp theo, sử dụng vòng lặp for để xem qua từng học sinh trong danh sách học sinh của chúng tôi và tìm điểm cao nhất mà mỗi học sinh đạt được và điểm trung bình của mỗi học sinh:

for s in students:
	     highest_grade = max(s["grades"])
	     average_grade = round(sum(s["grades"]) / len(s["grades"]))
	     print("The highest grade {} has earned is {}. Their average grade is {}.".format(s["name"], highest_grade, average_grade))

Chúng tôi sử dụng max() hàm để tìm điểm cao nhất mà một học sinh đã đạt được. Để tính điểm trung bình của một học sinh, chúng tôi chia tổng tất cả các điểm của họ cho số điểm mà họ đã nhận được.

Chúng tôi làm tròn điểm trung bình của mỗi học sinh thành số nguyên gần nhất bằng cách sử dụng round() phương pháp.

Chạy mã của chúng tôi và xem điều gì sẽ xảy ra:

The highest grade Ron has earned is 92. Their average grade is 84.
The highest grade Katy has earned is 92. Their average grade is 86.
The highest grade Rachel has earned is 72. Their average grade is 69.
Traceback (most recent call last):
  File "main.py", line 10, in <module>
	     highest_grade = max(s["grades"])
ValueError: max() arg is an empty sequence

Mã của chúng tôi chạy thành công cho đến khi nó đến mục thứ tư trong danh sách của chúng tôi. Chúng ta có thể thấy điểm trung bình và cao nhất của Ron, Katy và Rachel. Chúng tôi không thể thấy bất kỳ giá trị nào của Miranda.

Giải pháp

Mã của chúng tôi hoạt động trên ba học sinh đầu tiên vì mỗi học sinh đó có một danh sách các điểm có ít nhất một điểm. Miranda chưa có điểm nào.

Vì Miranda không có bất kỳ điểm nào nên max() chức năng không thực thi. max() không thể tìm thấy giá trị lớn nhất trong danh sách trống.

Để giải quyết lỗi này, hãy xem mỗi danh sách điểm có chứa bất kỳ giá trị nào không trước khi chúng tôi cố gắng tính điểm cao nhất trong danh sách. Nếu một danh sách không có giá trị nào, chúng tôi sẽ hiển thị một thông báo khác cho người dùng.

Hãy sử dụng câu lệnh “if” để kiểm tra xem học sinh có điểm nào không trước khi chúng ta thực hiện bất kỳ phép tính nào:

for s in students:
	     if len(s["grades"]) > 0:
	               highest_grade = max(s["grades"])
	               average_grade = round(sum(s["grades"]) / len(s["grades"]))
	               print("The highest grade {} has earned is {}. Their                average grade is {}.".format(s["name"], highest_grade, average_grade))
	     else:
		           print("{} has not earned any grades.".format(s["name"]))

Mã của chúng tôi ở trên sẽ chỉ tính điểm cao nhất và điểm trung bình của học sinh nếu họ đã đạt được ít nhất một điểm. Nếu không, người dùng sẽ được thông báo rằng học sinh không đạt được bất kỳ điểm nào. Hãy chạy mã của chúng tôi:

The highest grade Ron has earned is 92. Their average grade is 84.
The highest grade Katy has earned is 92. Their average grade is 86.
The highest grade Rachel has earned is 72. Their average grade is 69.
Miranda has not earned any grades.

Mã của chúng tôi tính thành công điểm cao nhất và điểm trung bình cho ba học sinh đầu tiên của chúng tôi. Khi mã của chúng tôi đến Miranda, mã của chúng tôi không tính điểm cao nhất và trung bình của cô ấy. Thay vào đó, mã của chúng tôi thông báo cho chúng tôi rằng Miranda vẫn chưa đạt được điểm nào.

Kết luận

“ValueError:max() arg là một chuỗi trống ”xuất hiện khi bạn cố gắng tìm mục lớn nhất trong danh sách trống bằng cách sử dụng max() phương pháp.

Để giải quyết lỗi này, hãy đảm bảo rằng bạn chỉ chuyển danh sách có ít nhất một giá trị thông qua max() tuyên bố. Bây giờ bạn có kiến ​​thức cần thiết để khắc phục sự cố này như một lập trình viên chuyên nghiệp!