sjk332
307
2022-03-15 08:21:52 작성 2022-03-15 08:22:00 수정됨
5
269

파이썬에서 이 코드를 어떻게 예쁘게 바꿀 수 있을까요?



def number_valid_test(a_score, b_score, c_score): # 0~100사이의 값만 유효함

    if(a_score<0):
        a_score=0
    if(b_score<0):
        b_score=0
    if(c_score<0):
        c_score=0

    if(a_score>100):
        a_score=100
    if(b_score>100):
        b_score=100
    if(c_score>100):
        c_score=100

변수 여러개를 받아서 동일한 동일한 조건문을 수행한 후에 다시 원래 변수에 넣어주고싶은데

코드가 너무 안예쁜거같아서요ㅠㅠ

혹시 이걸 리팩토링한다면 어떻게 하면 좋을까요?ㅠ


0
  • 답변 5

  • allinux
    2k
    2022-03-15 09:09:23 작성 2022-03-15 09:16:36 수정됨

    참고하세요.

    '''
    min_num, max_num 사이의 score 는 그대로 score 를 반환하고 min_num값보다 작으면 min_num 반환
    max_num값보다 크면 max_num 을 반환합니다.
    ''' def valid_test(score, min_num=0, max_num=100): return min_num if score < min_num else max_num if score > max_num else score valid_test(-1) # 0 반환 valid_test(1) # 1반환 valid_test(101) # 100반환


  • 새싹보리차
    240
    2022-03-15 09:34:03


    def number_valid_test(score:list)->list:
        score = [min(100, n) for n in score]
        score = [max(0, n) for n in score]    
        return score
    
    
    test = [-1, 14, 105]
    
    print('before: ', test)
    test = number_valid_test(test)
    print('after: ', test)
    
    '''
    before:  [-1, 14, 105]
    after:  [0, 14, 100]
    '''


  • hgj
    65
    2022-03-15 10:05:19
    def number_valid_test(score):
      return max(min(score, 100), 0)
  • sjk332
    307
    2022-03-15 10:05:21

    답변 감사드립니다!!!  파이썬 아직도 멀었네요ㅠㅠ

  • allinux
    2k
    2022-03-15 10:59:23

    max min 으로 처리하는 것이 가장 간결해 보이는데 함수를 두번 호출해야 하니 느리긴 하네요.

    def valid_test(score, min_num=0, max_num=100):
        return min_num if score < min_num else max_num if score > max_num else score 
    
    def valid_test2(score):
        return max(min(score, 100), 0)
    
    %timeit valid_test(-1)
    104 ns ± 0.0356 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)
    
    %timeit valid_test2(-1)
    361 ns ± 0.633 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)


  • 로그인을 하시면 답변을 등록할 수 있습니다.