Study/Python
[Python] 단위 변환
BVM
2023. 5. 21. 15:56
우리는 임페리얼 단위를 영구히 퇴출시키기 위해 노력할 필요가 있다.
1. 클래스
from Utils.Log import Logger as lg
class unit():
# Convert Imperial to Metric
def imperial_to_metric(value, unit):
if unit == "in":
return value * 2.54, "cm"
elif unit == "ft":
return value * 0.3048, "m"
elif unit == "yd":
return value * 0.9144, "m"
elif unit == "mi":
return value * 1.60934, "Km"
elif unit == "gal":
return value * 3.78541, "L"
elif unit == "oz":
return value * 28.3495, "g"
elif unit == "lb":
return value * 0.453592, "Kg"
else:
lg.error(f'[imperial_to_metric]: {value}, {unit} is an invalid input.')
return 0, 'ERROR'
어려울 게 있겠는가?
가장 필요하겠다 싶은 것들만 담았다.
2. 명령어
봇에 올려야 하기 때문에 명령어를 구현한다.
@client.tree.command()
@app_commands.describe(value='값', imp='입력 가능 단위: in, ft, yd, mi, gal, oz, lb.' )
async def convertimp(interaction: discord.Interaction, value: int, imp: str):
"""기열 임페리얼을 기합 메트릭으로 변환."""
lg.info(f"{interaction.user.display_name} request convertImp().")
resVal, resMet = unit.imperial_to_metric(value, imp)
if (resMet is 'ERROR'):
lg.error("An error occured while processing convertImp()")
await interaction.response.send_message("처리 중 문제가 생겼어요. 단위와 값을 확인해 주세요.", ephemeral=True)
result = f"{value} {imp} = {resVal:.2f} {resMet}"
lg.info(f"{value} {imp} to Metric is {resVal:.2f} {resMet}")
await interaction.response.send_message(result, ephemeral=True)
원래는 드롭다운 메뉴를 활용하고 싶었는데,
명령어 입력을 위해 드롭다운 메뉴를 쓸 수 있는 방법이 없는 듯했다.
그래서 그냥 클래식한 방법으로 해결하기로 했다.
3. 결과
Done.
임페리얼이 완전 퇴출되는 그날까지.