(목적 추가! )질문코드를 좀 더 "파이썬 답게" 코딩할 수 있는 방법이 있을까요?

조회수 975회

아래와 같은 코드를 좀더 파이썬 답게 코딩할 수 있는 방법이 있을지요?

처음에 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)
  • 무엇을 하려는 건가요? 목적이 무엇이지 알아야 개선점을 짚어드리겠죠. 정영훈 2017.8.24 10:04
  • 구체적 목적을 빼먹었네요. 목적은 1~1000까지의 숫자를 입력받고 1~200일때의 출력은 0, 201~400 일때의 출력은 1, 401~1000까지의 출력은 2로 하려고 합니다. 먹는거야? 2017.8.24 12:05

2 답변

  • 좋아요

    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
    
    
    • 아 ~ 이 방법 좋네요. 제가 원하던 방법 같습니다. 마땅한 표현방법이 생각이 안나 "파이썬 답다"라는 표현방법을 썼네요~. 답변 고맙습니다. 먹는거야? 2017.8.25 13:14
  • 생각하다보니 아래와 같이 하는것이 간단할 듯 한데.. (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)
    
    

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)