Python - 저항값 구하는 프로그램 코드
"""
작성일자
2023-09-18
작성인 : Mojangcam
"""
class Resistor(object):
def \_\_init\_\_(self) -> None:
self.resistor\_value \= 0
self.resistor\_percent \= 0
self.resistor\_color\_value\_list \= \[\]
self.color\_value \= "검갈빨주노초파보회흰금은없"
\# 저항의 값을 계산하는 함수
def resistor\_value\_calculate(self, color\_num:int) -> dict:
#문자열로 합치고 정수로 변환하여 계산하는 방식 선택
\# 컬러 개수가 4개인 경우
if color\_num \== 4:
string \= str(self.resistor\_color\_value\_list\[0\]) + str(self.resistor\_color\_value\_list\[1\])
power \= self.resistor\_color\_value\_list\[2\]
#컬러 개수가 5개인 경우
if color\_num \== 5:
string \= str(self.resistor\_color\_value\_list\[0\]) + str(self.resistor\_color\_value\_list\[1\]) + str(self.resistor\_color\_value\_list\[2\])
power \= self.resistor\_color\_value\_list\[3\]
if power \> 11 or self.resistor\_percent \== 0:
raise Exception("Resistor color value Error")
value \= int(string) \* (10 \*\* power)
plma \= value / 100 \* self.resistor\_percent
resistor\_min \= int(value \- plma)
resistor\_max \= int(value + plma)
\# 값을 전달할때 dictionary로 전달
context \= {
"resistor\_min" : resistor\_min,
"resistor\_max" : resistor\_max,
"resistor\_value" : value,
"resistor\_percent" : self.resistor\_percent
}
return context
\# 저항의 값을 구하는 함수
def resistor\_value\_get(self, colors:str) -> None:
if len(colors) < 4 and len(colors) \> 5 and colors\[0\] \== "검":
raise Exception(f"Resistor color Error : {colors}")
for i in range(len(colors)):
if colors\[i\] in self.color\_value:
find\_color\_index \= self.color\_value.find(colors\[i\])
self.resistor\_color\_value\_list.append(find\_color\_index)
\# 마지막 컬러가 오차범위를 나타내는 컬러일 경우
if i \== len(colors) \- 1:
if find\_color\_index \== 1:
self.resistor\_percent \= 1
elif find\_color\_index \== 2:
self.resistor\_percent \= 2
elif find\_color\_index \== 5:
self.resistor\_percent \= 0.5
elif find\_color\_index \== 6:
self.resistor\_percent \= 0.25
elif find\_color\_index \== 7:
self.resistor\_percent \= 0.1
elif find\_color\_index \== 8:
self.resistor\_percent \= 0.05
elif find\_color\_index \== 10:
self.resistor\_percent \= 5
elif find\_color\_index \== 11:
self.resistor\_percent \= 10
elif find\_color\_index \== 12:
self.resistor\_percent \= 20
for i in range(len(self.resistor\_color\_value\_list)):
if i \== 0:
#첫번째 색깔은 검은색,금색,은색,없음이 올수 없기 때문에 에러 발생
if self.color\_value\[self.resistor\_color\_value\_list\[i\]\] in "검금은없":
raise Exception(f"Resistor color Error : {colors}")
\# 금은없 은 숫자가 아닌 오차범위 (%)를 나타내기 때문에 올수 없어서 에러 발생
if i < len(self.resistor\_color\_value\_list) \- 1:
if self.color\_value\[self.resistor\_color\_value\_list\[i\]\] in "금은없":
raise Exception(f"Resistor color Error : {colors}")
return self.resistor\_value\_calculate(len(colors))
\# 저항의 값을 Giga, Mega, kilo 옴으로 변환해주는 함수
def resistor\_unit\_convert(self, context:dict):
res\_min \= context\['resistor\_min'\]
res\_max \= context\['resistor\_max'\]
res\_value \= context\['resistor\_value'\]
res\_percent \= context\['resistor\_percent'\]
if res\_value \> 1000000000:
return "GΩ", res\_min/1000000000, res\_max/1000000000, res\_value/1000000000, res\_percent
elif res\_value \> 1000000:
return "MΩ", res\_min/1000000, res\_max/1000000, res\_value/1000000, res\_percent
elif res\_value \> 1000:
return "kΩ", res\_min/1000, res\_max/1000, res\_value/1000, res\_percent
return "Ω", res\_min, res\_max, res\_value, res\_percentfrom resistor import Resistor
if __name__ == '__main__':
resistor\_color \= input("저항값을 입력하세요 (4 ~ 5개의 색깔만 허용합니다.) : ")
resistor1 \= Resistor()
resistor\_value \= resistor1.resistor\_value\_get(resistor\_color)
unit, res\_min, res\_max, res\_value, res\_percent \= resistor1.resistor\_unit\_convert(resistor\_value)
print(f"저항값의 최솟값 : {res\_min}{unit}")
print(f"저항값의 최댓값 : {res\_max}{unit}")
print(f"저항값 : {res\_value}{unit}")
print(f"저항 오차 : {res\_percent}%")첫 번째 코드를 resistor.py로 저장하시고 아래의 코드를 main.py로 저장하신 뒤 main.py를 실행시키시면 됩니다.
