(목적 추가! )질문코드를 좀 더 "파이썬 답게" 코딩할 수 있는 방법이 있을까요?
조회수 977회
아래와 같은 코드를 좀더 파이썬 답게 코딩할 수 있는 방법이 있을지요?
처음에 find_levelid() 를 만들었다가 단순한 것을 너무 길게 만든 거 같아서... find_levelid2()로 만들어 보았는데.. 이번에는 무슨 코드인지 한 눈에 알아보기도 어렵고 처음것보다 그리 짧지 않아 보입니다.
파이썬이라면 뭔가 더 간단한 방법으로 동일한 일을 수행하는 방법이 있을것 같은데 혹시 아는 분 계실까요?
** 구체적 목적은 1~1000까지의 숫자를 입력받고 1~200일때의 출력은 0, 201~400 일때의 출력은 1, 401~1000까지의 출력은 2로 하려고 합니다.
** 이 출력은 다른 tuple항목을 선택하는 인덱스로 사용할 예정입니다. 예) tuplea = (23.2, 187.3, 500.2) , tupleb= (333, 555, 999) 가 있을때 위에서 1이 출력될 경우 tuplea에서 187.3을 tupleb 에서 555를 선택하고자 함.
# usekw 는 1~1000으로 가정
import math
limit = (200, 400)
tuplea = (23.2, 187.3, 500.2)
tupleb = (333, 555, 999)
def find_levelid(usekw):
if usekw <= limit[0]:
level_id = 0
elif usekw <= limit[1]:
level_id = 1
else:
level_id = 2
return level_id
def find_levelid2(usekw):
if usekw <= limit[1]:
level_id = math.floor((usekw-1)/200)
else:
level_id = 2
return level_id
def test_print(usekw):
print(usekw,find_levelid(usekw),find_levelid2(usekw), tuplea[find_levelid(usekw)],tupleb[find_levelid(usekw)])
test_print(1)
test_print(199)
test_print(200)
test_print(201)
test_print(399)
test_print(400)
test_print(401)
test_print(599)
test_print(600)
test_print(601)
test_print(999)
test_print(1000)
2 답변
-
파이썬답게 라는 것이 정해져 있지는 않죠
간결하게 가독성이 좋은게 좋습니다.
numberRange = (range(1, 201), range(201, 401), range(401, 1001)) tuplea = (23.2, 187.3, 500.2) tupleb = (333, 555, 999) userInput = 500 for numbers, ntuplea, ntupleb in zip(numberRange, tuplea, tupleb): if userInput in numbers: print(ntuplea, ntupleb) break => 500.2 999
-
생각하다보니 아래와 같이 하는것이 간단할 듯 한데.. (tuplea, tupleb를 입력범위에 맞춰 늘리고 find_levelidx()를 날림..)
제가 생각하기에 그다지 "파이썬 답지 않은" 해결책인 것 같네요.
숫자 범위가 1~1000 정도라서 괜찮았지만 입력 범위가 늘어나면 별로 보기 좋지않은 코드가 될 것 같습니다.
혹시 다른 방법이 있다면 알려주시면 고맙겠습니다.
import math tuplea = (23.2, 187.3, 500.2, 500.2, 500.2) tupleb = (333, 555, 999, 999, 999) def test_print(usekw): level_id = int(math.floor((usekw-1)/200)) print(usekw, tuplea[level_id], tupleb[level_id]) test_print(1) test_print(199) test_print(200) test_print(201) test_print(399) test_print(400) test_print(401) test_print(599) test_print(600) test_print(601) test_print(999) test_print(1000)
댓글 입력