[Python] '변수 리스트의 값'을 이름으로 갖는 변수 사용

조회수 436회

어제 저녁에 파이썬을 시작한 초보입니다. 이전에 C를 조금 해서 기본적인 것은 알고 있지만 생각보다 살짝 어렵네요. 일단 질문 제목이 모호한 점 죄송합니다. 어떻게 달리 표현할 방법이 없었어요. 저는 세 자리 숫자를 입력받아 그림으로 나타내는 코드를 짜고 있었습니다. 연습삼아 처음 짜 보는 거라 살짝 난잡합니다만 올릴게요.

zero = ["***",
        "* *",
        "* *",
        "* *",
        "***"]

one = [" * ",
       "** ",
       " * ",
       " * ",
       "***"]

two = ["***",
       "  *",
       "***",
       "*  ",
       "***"]

three = ["***",
         "  *",
         "***",
         "  *",
         "***"]

four = ["  *",
        " **",
        "* *",
        "***",
        "  *"]

five = ["***",
        "*  ",
        "***",
        "  *",
        "***"]

six = ["***",
       "*  ",
       "***",
       "* *",
       "***"]

seven = ["***",
         "  *",
         " * ",
         " * ",
         " * "]

eight = ["***",
         "* *",
         "***",
         "* *",
         "***"]

nine = ["***",
        "* *",
        "***",
        "  *",
        "***"]

listup = ["zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"]
N = 0


def Display(n):
    i = 0
    ycdn = 0
    bufferch = ["","",""]
    ln = ["", "", ""]
    while i <= 2:
        ln[i] = listup[int(n[i])]
        i += 1


N = input('Type 3-digit number: ')
str(N)
print(N[0], N[1], N[2])
print('\n\n')
Display(N)

Display() 함수에서 막혔습니다. 제가 구상한 방법은,

  1. 'N' 입력받고 스트링으로 바꿈
  2. def 함수에서, N 배열의 각 숫자를 대응시켜 ln[]에 one, two, three 등으로 저장.
  3. ln에 들어 있는 one, two, three 등을, 위에 정의한 변수들과 반복문을 사용하여 한 줄씩 그림으로 출력.

3번에서 ln의 값들을 어떻게 변수로 치환할 수 있는지 궁금합니다. 아니면 더 괜찮은 방법이 있을까요? 설명을 잘 못해서 죄송합니다.

3 답변

  • zero = ["***",
            "* *",
            "* *",
            "* *",
            "***"]
    
    one = [" * ",
           "** ",
           " * ",
           " * ",
           "***"]
    
    two = ["***",
           "  *",
           "***",
           "*  ",
           "***"]
    
    three = ["***",
             "  *",
             "***",
             "  *",
             "***"]
    
    four = ["  *",
            " **",
            "* *",
            "***",
            "  *"]
    
    five = ["***",
            "*  ",
            "***",
            "  *",
            "***"]
    
    six = ["***",
           "*  ",
           "***",
           "* *",
           "***"]
    
    seven = ["***",
             "  *",
             " * ",
             " * ",
             " * "]
    
    eight = ["***",
             "* *",
             "***",
             "* *",
             "***"]
    
    nine = ["***",
            "* *",
            "***",
            "  *",
            "***"]
    
    listup = ["zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"]
    N = 0
    
    def Display(n):
        buf = ''
        buf2 = ['']*5
        for i in n:
            tmp = 'listup[%d]'%int(i)
            buf = eval(tmp)
            for idx, j in enumerate(eval(buf)):
                buf2[idx] += j
                buf2[idx] += ' '
        for i in range(0,5):
            print(buf2[i])
    
    
    N = input('Type 3-digit number: ')
    str(N)
    print(N[0], N[1], N[2])
    print('\n')
    Display(N)
    
    #result
    #Type 3-digit number: 456
    #4 5 6
    
    #  * *** *** 
    # ** *   *   
    #* * *** *** 
    #***   * * * 
    #  * *** *** 
    
    
    • 제가 구상한 방법대로 답변해 주셔서 정말 감사합니다.. 잘 모르겠는 명령어들 하나씩 찾아가며 공부해 보겠습니다. 알 수 없는 사용자 2020.3.16 09:25
  • listup을 "변수명"의 배열로 만들 필요가 없어요.

    
    zero = ["***",
            "* *",
            "* *",
            "* *",
            "***"]
    
    one = [" * ",
           "** ",
           " * ",
           " * ",
           "***"]
    
    two = ["***",
           "  *",
           "***",
           "*  ",
           "***"]
    
    three = ["***",
             "  *",
             "***",
             "  *",
             "***"]
    
    four = ["  *",
            " **",
            "* *",
            "***",
            "  *"]
    
    five = ["***",
            "*  ",
            "***",
            "  *",
            "***"]
    
    six = ["***",
           "*  ",
           "***",
           "* *",
           "***"]
    
    seven = ["***",
             "  *",
             " * ",
             " * ",
             " * "]
    
    eight = ["***",
             "* *",
             "***",
             "* *",
             "***"]
    
    nine = ["***",
            "* *",
            "***",
            "  *",
            "***"]
    
    listup = [zero, one, two, three, four, five, six, seven, eight, nine]
    N = 0
    
    
    def Display(n):
        screen = ['', '', '', '', '']
        for d in n:
            d = int(d)
            for i, l in enumerate(listup[d]):
                screen[i] += l
                screen[i] += '  '
        for l in screen:
            print(l)
    
    
    
    N = input('Type 3-digit number: ')
    N = str(N)
    print(N)
    print('\n\n')
    Display(N)
    
  • 결국 풀어헤치면 같은 내용이긴 한데,

    위 코드에 숟가락 하나 얹어 봅니다.

    def Display(n):
        for line in zip(*(listup[int(d)] for d in n)):
            print(" ".join(line))
    

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

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

(ಠ_ಠ)
(ಠ‿ಠ)