Python 기초
학습 목표
센서 기록에는 누락과 경계값이 섞입니다. 정상 자료와 예외 자료를 같은 함수로 처리해 봅니다.
센서 기록을 자료구조로 표현
시작 조건
기록은 [(0,21.0),(1,21.5),(2,None),(3,22.0),(4,20.5)]이며, 각 쌍은 시간[s]·온도[°C]입니다.
진행 방법
- List의 각 항목을 time·temperature가 있는 Dictionary로 바꾸세요.
- None을 제외한 표본의 개수·평균·최솟값·최댓값을 구하세요.
- 입력 원본을 변경하지 않는 summarize 함수를 작성하세요.
남길 결과
5행 기록 표, 요약 통계 4개, 함수 코드.
summarize(rows)입력:time·temperature를 가진 Dictionary의 List.통계 대상:
temperature.반환 필드: 유효 표본 수·평균·최솟값·최댓값. 같은 필드 유지.
records=[(0,21.),(1,21.5),(2,None),(3,22.),(4,20.5)]
valid=[value for _,value in records if value is not None]
print('valid count',len(valid),'mean',sum(valid)/len(valid))
# TODO: dict 변환과 summarize 함수를 추가하세요.
결과 기록·자가 점검
t [s]:
온도 [°C]:
유효 여부:
확인할 점
- None을 0°C로 해석하지 않았는가?
- 원본 List가 함수 호출 전후 동일한가?
경계값과 빈 입력
시작 조건
코드의 cases에 있는 세 입력을 각각 활동 1과 같은 Dictionary List로 변환한 뒤 summarize에 넣습니다. 빈 List는 그대로 두고, 각 쌍의 첫 값은 time, 둘째 값은 temperature에 대응시킵니다.
진행 방법
- 유효 표본이 0개일 때 평균을 None으로 돌려주도록 정하세요.
- 한 표본과 여러 표본에서 같은 반환 필드를 사용하는지 확인하세요.
- assert로 빈 입력·결측 입력·한 표본 입력을 각각 검사하세요.
남길 결과
- 경계값 3행 표와 통과한 assert 3개.
cases=[[],[(0,None)],[(0,25.)]]
# TODO: summarize 결과와 assert를 작성하세요.
결과 기록·자가 점검
입력 종류:
유효 수:
평균:
처리 이유:
확인할 점
- 0개 표본에서 0으로 나누지 않는가?
- 반환 필드가 입력 크기에 따라 바뀌지 않는가?
반복 측정을 함수로 정리
시작 조건
두 장치 , B=[19,None,20,21]을 비교합니다. 원본과 같은 온도 단위입니다.
진행 방법
- 장치별 온도 List를
time·temperature가 있는 Dictionary List로 바꾸어 같은summarize함수에 넣으세요. 이 자료에는 시각이 없으므로time=None으로 두고 온도만 요약합니다. - 장치별 유효 표본 수·평균·범위를 한 표에 적으세요.
- 표본 수와 결측 유무가 다른 자료를 비교할 때 확인할 점을 간단히 정리하세요.
남길 결과
- 장치 비교 표와 짧은 해석.
devices={'A':[21,22,23],'B':[19,None,20,21]}
# TODO: 같은 함수로 장치별 요약을 작성하세요.
결과 기록·자가 점검
장치:
유효 수:
평균 [°C]:
최소·최대 [°C]:
결측 수:
확인할 점
- 같은 계산 코드를 복사해 따로 고치지 않고 함수를 재사용했는가?
- 장치 차이와 표본 구성 차이를 구분했는가?