Python 강좌 / 조건과 반복 종합 실습: 점수 집계 프로그램
점수 집계는 입력 데이터 검증, 조건에 따른 분류, 합계·평균 계산을 하나의 흐름으로 연결하는 실습입니다. 잘못된 점수는 집계에서 제외하되 제외 개수도 함께 출력해 조용한 데이터 누락을 피합니다.
집계 규칙부터 정하기
점수는 0~100의 정수이고 60점 이상을 합격으로 정합니다. 여기서는 이미 숫자로 준비된 예제 데이터를 사용합니다. CSV나 사용자 입력의 문자열을 숫자로 변환하는 단계는 별도입니다. 음수와 100 초과 값은 오류 기록으로 분리합니다.
관련 동작과 지원 조건은 조건과 반복 종합 실습: 점수 집계 프로그램 관련 공식 문서에서 확인할 수 있습니다.
| 상황 | 처리 |
|---|---|
| 60점 | 합격에 포함 |
| 0점 | 유효 점수에 포함 |
| -1 또는 101 | 제외 개수 증가 |
| 유효 점수가 없음 | 평균을 계산하지 않음 |
전체 예제와 실행 결과
별도의 실습 폴더에서 아래 파일을 UTF-8로 저장합니다. 가상환경을 선택한 터미널에서 python scores.py 명령으로 실행합니다. macOS·Ubuntu에서 가상환경을 사용하지 않는 경우 명령 이름을 python3으로 바꿉니다.
scores.py 파일의 전체 내용입니다.
scores = [80, 60, 0, 100, -1, 101]
valid = []
invalid = 0
passed = 0
for score in scores:
if not 0 <= score <= 100:
invalid += 1
continue
valid.append(score)
if score >= 60:
passed += 1
print("valid:", len(valid), "invalid:", invalid)
if valid:
print(f"average: {sum(valid) / len(valid):.1f}")
print("passed:", passed)
else:
print("no valid scores")
예상 결과는 다음과 같습니다.
valid: 4 invalid: 2 average: 60.0 passed: 3
변수의 역할과 계산 순서
invalid는 검증에 실패한 수, passed는 유효 점수 중 합격한 수입니다. continue로 제외한 값은 valid에 들어가지 않으므로 평균의 분모에도 포함되지 않습니다. 0점은 거짓으로 평가될 수 있지만 유효한 점수이므로 if score처럼 필터링하지 않습니다.
평균은 유효 점수를 모두 모은 뒤 계산합니다. 반복마다 평균을 갱신할 필요는 없으며, 마지막에 값이 없을 때를 한 번 검사하면 0으로 나누는 문제를 피할 수 있습니다.
경계값과 잘못된 변경 시험하기
- scores를 빈 리스트로 바꾸어 no valid scores가 출력되는지 확인합니다.
- [59, 60, 61]로 바꾸어 합격 수가 2인지 확인합니다.
- 모두 잘못된 [-1, 101]을 넣어 평균을 출력하지 않는지 확인합니다.
- 원래 목록으로 되돌리고 유효·제외 수의 합이 입력 개수와 같은지 확인합니다.
타입까지 검증하려면 bool이 int의 하위 타입이라는 점과 float를 허용할지 등 입력 정책을 정해야 합니다. 이 예제는 정수 목록이라는 전제 안에서 값 범위를 검증합니다. 전제가 바뀌면 처리 규칙도 함께 확장해야 합니다.










