AD JB Toolbox 01

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으로 나누는 문제를 피할 수 있습니다.

경계값과 잘못된 변경 시험하기

  1. scores를 빈 리스트로 바꾸어 no valid scores가 출력되는지 확인합니다.
  2. [59, 60, 61]로 바꾸어 합격 수가 2인지 확인합니다.
  3. 모두 잘못된 [-1, 101]을 넣어 평균을 출력하지 않는지 확인합니다.
  4. 원래 목록으로 되돌리고 유효·제외 수의 합이 입력 개수와 같은지 확인합니다.

타입까지 검증하려면 bool이 int의 하위 타입이라는 점과 float를 허용할지 등 입력 정책을 정해야 합니다. 이 예제는 정수 목록이라는 전제 안에서 값 범위를 검증합니다. 전제가 바뀌면 처리 규칙도 함께 확장해야 합니다.

같은 카테고리의 다른 글
Python 강좌 / macOS·Ubuntu에서 Python 실행 환경 준비하기

Python 강좌 / macOS·Ubuntu에서 Python 실행 환경 준비하기

macOS와 Ubuntu의 Python 설치 경로를 확인하고 개발용 가상환경을 만듭니다. 시스템 Python 보호, 배포판 버전 차이와 설치 오류의 확인 기준을 함께 다룹니다.

Python 강좌 / 숫자 자료형과 연산: 정수·실수·형 변환

Python 강좌 / 숫자 자료형과 연산: 정수·실수·형 변환

int·float·Decimal의 차이와 나눗셈·형 변환을 설명합니다. 음수와 십진 소수 예제로 금액 계산에서 정확도를 선택하는 방법을 확인합니다.

Python 강좌 / 문자열 다루기: 인덱싱·슬라이싱·메서드·f-string

Python 강좌 / 문자열 다루기: 인덱싱·슬라이싱·메서드·f-string

문자열의 인덱싱·슬라이싱과 strip·split·join·f-string을 익힙니다. 원본이 변경되지 않는 특성과 CSV·SQL 처리에서 구분할 점을 설명합니다.

Python 강좌 / VS Code에서 Python 코드 작성하고 실행하기

Python 강좌 / VS Code에서 Python 코드 작성하고 실행하기

VS Code에서 프로젝트 폴더와 가상환경 인터프리터를 연결합니다. 실행 경로 확인, 간단한 디버깅과 패키지 환경 불일치 해결 방법을 설명합니다.

Python 강좌 / Windows에 Python 설치하고 실행 확인하기

Python 강좌 / Windows에 Python 설치하고 실행 확인하기

공식 Python Install Manager로 Windows 실행 환경을 준비합니다. 기존 설치 확인, 프로젝트용 가상환경 생성, 명령 충돌과 실행 경로 점검까지 설명합니다.

Python 강좌 / 튜플과 시퀀스 언패킹 이해하기

Python 강좌 / 튜플과 시퀀스 언패킹 이해하기

튜플 생성과 언패킹, 별표 수집과 값 교환을 익힙니다. 불변성의 범위와 항목 수 오류, 리스트·딕셔너리와의 선택 기준을 설명합니다.

Python 강좌 / 집합으로 중복 제거하고 자료형 선택하기

Python 강좌 / 집합으로 중복 제거하고 자료형 선택하기

집합의 중복 제거와 합집합·교집합·차집합을 익힙니다. 허용 분류 검증 예제로 순서·횟수 정보와 remove·discard의 차이를 확인합니다.

Python 강좌 / while·break·continue로 반복 제어하기

Python 강좌 / while·break·continue로 반복 제어하기

while의 종료 조건과 break·continue의 실행 범위를 설명합니다. 지출 입력 반복 예제로 빈 입력·음수·종료 문자를 처리하고 무한 반복 원인을 확인합니다.

Python 강좌 / 딕셔너리로 키와 값 관리하기

Python 강좌 / 딕셔너리로 키와 값 관리하기

딕셔너리의 키·값 접근과 항목 갱신을 설명합니다. 분류별 지출 집계 예제로 get·items·정렬과 필수 키 누락 처리의 차이를 확인합니다.

Python 강좌 / 함수 정의하고 값 반환하기

Python 강좌 / 함수 정의하고 값 반환하기

def·매개변수·return으로 계산 함수를 작성합니다. 출력과 반환의 차이, 함수 책임과 입력 전제, 호출 오류의 확인 방법을 설명합니다.