Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Python ValueError:max() arg는 빈 시퀀스입니다.

max() 메서드는 하나 이상의 값이 있는 시퀀스를 메서드에 전달하는 경우에만 작동합니다.

빈 목록에서 가장 큰 항목을 찾으려고 하면 "ValueError:max() 오류가 발생합니다. arg는 빈 시퀀스입니다."

이 가이드에서는 이 오류의 의미와 오류가 발생할 수 있는 이유에 대해 설명합니다. 이 오류를 해결하는 방법을 알아내는 데 도움이 되는 예를 살펴보겠습니다.

ValueError:max() arg는 빈 시퀀스입니다.

max() 메소드를 사용하면 목록에서 가장 큰 항목을 찾을 수 있습니다. min()과 유사합니다. 목록에서 가장 작은 항목을 찾는 방법입니다.

이 메서드가 작동하려면 max() 하나 이상의 값이 있는 시퀀스가 ​​필요합니다. 항목이 없으면 목록에서 가장 큰 항목을 찾을 수 없기 때문입니다. 검색할 항목이 없기 때문에 가장 큰 항목이 존재하지 않습니다.

"ValueError:max()의 변형 arg is empty sequence' 오류는 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": [] }
]

학생 목록에는 4개의 사전이 있습니다. 이 사전에는 각 학생의 이름과 그들이 얻은 성적 목록이 포함되어 있습니다. Miranda는 화학 수업에 막 합류했기 때문에 아직 성적이 없습니다.

참가자의 81%는 부트캠프에 참석한 후 기술 직업 전망에 대해 더 자신감을 느꼈다고 말했습니다. 지금 부트캠프에 참여하십시오.

부트캠프 졸업생은 부트캠프 시작부터 첫 직장을 찾는 데까지 6개월도 채 걸리지 않았습니다.

다음으로, for 루프를 사용하여 학생 목록의 각 학생을 살펴보고 각 학생이 얻은 최고 성적과 각 학생의 평균 성적을 찾습니다.

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의 최고 및 평균 등급을 볼 수 있습니다. Miranda에 대한 값을 볼 수 없습니다.

해결책

우리의 코드는 처음 3명의 학생에게 작동합니다. 왜냐하면 각 학생은 최소한 하나의 학년이 있는 성적 목록을 가지고 있기 때문입니다. 미란다는 아직 성적이 없습니다.

Miranda에는 등급이 없기 때문에 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.

우리 코드는 처음 세 학생의 최고 및 평균 성적을 성공적으로 계산합니다. 코드가 Miranda에 도달하면 코드는 그녀의 최고 및 평균 등급을 계산하지 않습니다. 대신 코드는 Miranda가 아직 점수를 얻지 못했다고 알려줍니다.

결론

"값 오류:max() max()를 사용하여 빈 목록에서 가장 큰 항목을 찾으려고 하면 arg is empty sequence' 오류가 발생합니다. 방법.

이 오류를 해결하려면 max() 성명. 이제 전문 코더처럼 이 문제를 해결하는 데 필요한 지식을 얻었습니다!