Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

Python ValueError:max() arg เป็นลำดับว่าง Solution

max() วิธีการทำงานเฉพาะเมื่อคุณส่งลำดับที่มีค่าอย่างน้อยหนึ่งค่าในวิธีการ

หากคุณพยายามค้นหารายการที่ใหญ่ที่สุดในรายการว่าง คุณจะพบข้อผิดพลาด “ValueError:max() arg เป็นลำดับที่ว่างเปล่า”

ในคู่มือนี้ เราจะพูดถึงความหมายของข้อผิดพลาดนี้และสาเหตุที่คุณอาจพบข้อผิดพลาดนี้ เราอธิบายตัวอย่างเพื่อช่วยให้คุณทราบวิธีแก้ไขข้อผิดพลาดนี้

ValueError:max() arg เป็นลำดับที่ว่างเปล่า

max() วิธีช่วยให้คุณค้นหารายการที่ใหญ่ที่สุดในรายการ คล้ายกับ min() วิธีค้นหารายการที่เล็กที่สุดในรายการ

เพื่อให้วิธีนี้ใช้งานได้ max() ต้องการลำดับที่มีค่าอย่างน้อยหนึ่งค่า เนื่องจากคุณไม่สามารถค้นหารายการที่ใหญ่ที่สุดในรายการหากไม่มีรายการ รายการที่ใหญ่ที่สุดไม่มีอยู่จริงเนื่องจากไม่มีรายการให้ค้นหา

รูปแบบของ “ValueError:max() arg เป็นลำดับที่ว่างเปล่า” พบข้อผิดพลาดเมื่อคุณพยายามส่งรายการว่างไปยัง min() กระบวนการ. ข้อผิดพลาดนี้คือ “ValueError:min() arg เป็นลำดับที่ว่างเปล่า” min()นี้ นาที() ข้อผิดพลาดเกิดขึ้นด้วยเหตุผลเดียวกัน:คุณไม่สามารถหาค่าที่น้อยที่สุดในรายการที่ไม่มีค่าได้

ตัวอย่างสถานการณ์

เรากำลังจะสร้างโปรแกรมที่หาเกรดสูงสุดที่นักเรียนได้รับจากการทดสอบเคมีทั้งหมด ในการเริ่มต้น ให้กำหนดรายชื่อนักเรียน:

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

รายชื่อนักเรียนของเราประกอบด้วยพจนานุกรมสี่เล่ม พจนานุกรมเหล่านี้ประกอบด้วยชื่อของนักเรียนแต่ละคนตลอดจนรายการเกรดที่พวกเขาได้รับ มิแรนด้ายังไม่มีคะแนนเพราะเธอเพิ่งเข้าเรียนวิชาเคมี

81% ของผู้เข้าร่วมกล่าวว่าพวกเขารู้สึกมั่นใจมากขึ้นเกี่ยวกับโอกาสในการทำงานด้านเทคโนโลยีหลังจากเข้าร่วม bootcamp จับคู่กับ Bootcamp วันนี้

ผู้สำเร็จการศึกษาจากหลักสูตร bootcamp โดยเฉลี่ยใช้เวลาน้อยกว่าหกเดือนในการเปลี่ยนอาชีพ ตั้งแต่เริ่มต้น bootcamp ไปจนถึงหางานแรก

ต่อไป ใช้ for loop เพื่อดูนักเรียนแต่ละคนในรายชื่อนักเรียนของเราและค้นหาเกรดสูงสุดที่นักเรียนแต่ละคนได้รับและเกรดเฉลี่ยของนักเรียนแต่ละคน:

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))

เราใช้ max() ฟังก์ชั่นเพื่อค้นหาเกรดสูงสุดที่นักเรียนได้รับ ในการคำนวณเกรดเฉลี่ยของนักเรียน เราหารผลรวมของเกรดทั้งหมดด้วยจำนวนเกรดที่ได้รับ

เราปัดเศษเกรดเฉลี่ยของนักเรียนแต่ละคนเป็นจำนวนเต็มที่ใกล้ที่สุดโดยใช้ round() กระบวนการ.

เรียกใช้รหัสของเราและดูว่าเกิดอะไรขึ้น:

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

รหัสของเราทำงานสำเร็จจนกว่าจะถึงรายการที่สี่ในรายการของเรา เราสามารถเห็นคะแนนเฉลี่ยสูงสุดและเฉลี่ยของ Ron, Katy และ Rachel เราไม่เห็นคุณค่าของมิแรนดาเลย

การแก้ปัญหา

รหัสของเราใช้ได้กับนักเรียนสามคนแรกเนื่องจากนักเรียนแต่ละคนมีรายชื่อเกรดที่มีอย่างน้อยหนึ่งเกรด มิแรนด้ายังไม่มีคะแนนใดๆ

เนื่องจากมิแรนดาไม่มีเกรดเลย max() ฟังก์ชั่นล้มเหลวในการดำเนินการ max() ไม่พบค่าที่มากที่สุดในรายการว่าง

เพื่อแก้ไขข้อผิดพลาดนี้ ให้ดูว่าแต่ละเกรดมีค่าใด ๆ หรือไม่ ก่อนที่เราจะลองคำนวณเกรดสูงสุดในรายการ หากรายการไม่มีค่า เราควรแสดงข้อความอื่นให้ผู้ใช้เห็น

ลองใช้คำสั่ง "if" เพื่อตรวจสอบว่านักเรียนมีคะแนนก่อนที่เราจะทำการคำนวณใดๆ หรือไม่:

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"]))

รหัสของเราจะคำนวณเฉพาะเกรดสูงสุดและเฉลี่ยของนักเรียนหากพวกเขาได้รับคะแนนอย่างน้อยหนึ่งเกรด มิฉะนั้นจะแจ้งให้ผู้ใช้ทราบว่านักเรียนไม่ได้เกรดใด ๆ เรียกใช้รหัสของเรา:

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.

รหัสของเราประสบความสำเร็จในการคำนวณเกรดสูงสุดและเฉลี่ยสำหรับนักเรียนสามคนแรกของเรา เมื่อรหัสของเราไปถึงมิแรนดา รหัสของเราจะไม่คำนวณเกรดสูงสุดและเฉลี่ยของเธอ แต่รหัสของเราแจ้งให้เราทราบว่ามิแรนดายังไม่ได้รับคะแนนใดๆ

บทสรุป

“ValueError:max() arg เป็นลำดับที่ว่างเปล่า” เกิดข้อผิดพลาดเมื่อคุณพยายามค้นหารายการที่ใหญ่ที่สุดในรายการว่างโดยใช้ max() กระบวนการ.

เพื่อแก้ไขข้อผิดพลาดนี้ ตรวจสอบให้แน่ใจว่าคุณส่งเฉพาะรายการที่มีค่าอย่างน้อยหนึ่งค่าผ่าน max() คำแถลง. ตอนนี้คุณมีความรู้ที่จำเป็นในการแก้ไขปัญหานี้แล้วเหมือนนักเขียนโค้ดมืออาชีพ!