실습 · 연습문제 1개
단위 접미사를 SI 단위로 바꾸기 units-to-si
계측 장비마다 단위가 다르다. 한 장비는 전압을 mV로, 다른 장비는 V로 저장하고, 시간은 ms·min·h가 섞여 들어온다. 변수 이름에 단위 접미사를 붙이는 규칙을 지켰다면, 이름만 보고 단위를 통일할 수 있다.
함수 to_si(record, passthrough=())를 완성한다. record는 이름 → 값 dict이고, 값은 숫자 또는 NumPy 배열이다. 이름의 마지막 밑줄 뒤가 단위 접미사다(voltage_mv의 접미사는 mv).
| 접미사 | 바꾼 접미사 | 변환 |
|---|---|---|
mv · kv · v |
v |
×1e-3 · ×1e3 · 그대로 |
ma · a |
a |
×1e-3 · 그대로 |
ms · min · h · s |
s |
×1e-3 · ×60 · ×3600 · 그대로 |
mah · ah |
ah |
×1e-3 · 그대로 |
c · k |
k |
+273.15 · 그대로 |
- 반환값은 새 dict다. 이름의 접미사를 바꾸고(
voltage_mv→voltage_v), 값을 변환한다. 입력record는 바꾸지 않는다. - 섭씨 → 켈빈은 곱셈이 아니라 더하기다. 온도 차이가 아니라 온도 자체를 바꾸는 변환이다.
passthrough에 있는 이름(예:"cell_id","cycle_index")은 단위가 없는 값으로 보고 그대로 둔다.- 밑줄이 없거나 표에 없는 접미사를 가진 이름은
ValueError를 낸다. 단위를 알 수 없는 값을 조용히 통과시키지 않는다. - 변환 결과 이름이 겹치면(예:
voltage_mv와voltage_v가 함께 있음)ValueError를 낸다. 어느 값을 쓸지 함수가 대신 정하지 않는다.
to_si({"voltage_mv": 3700.0, "time_min": 30.0, "temp_c": 25.0})
# {'voltage_v': 3.7, 'time_s': 1800.0, 'temp_k': 298.15}