파이썬 질문!!

조회수 209회

아래와 같은 코드를 작성중입니다.

처음 실행했을때 결과는

ㄱ입니다

ㅏ입니다

ㅁ입니다

이렇습니다.

스위치를 누를시 abcd[3]으로 넘어가 그다음 3개를 표현하는 루프를 만들고싶습니다.


abcd=['ㄱ','ㅏ','ㅁ','ㅅ','ㅏ','ㅎ','ㅏ','ㅂ','ㄴ','ㅣ','ㄷ','ㅏ','11',' ']

#초성

for i in range(0,3):

    if abcd[i]=='ㄱ':
        print("ㄱ입니다")

    elif abcd[i]=='ㄲ':
        print("ㄲ입니다")

    elif abcd[i]=='ㄴ':
        print("ㄴ입니다")

    elif abcd[i]=='ㄷ':
        print("ㄷ입니다")

    elif abcd[i]=='ㄸ':
        print("ㄸ입니다")

    elif abcd[i]=='ㄹ':
        print("ㄹ입니다")

    elif abcd[i]=='ㅁ':
        print("ㅁ입니다")

    elif abcd[i]=='ㅂ':
        print("ㅂ입니다")

    elif abcd[i]=='ㅃ':
        print("ㅃ입니다")

    elif abcd[i]=='ㅅ':
        print("ㅅ입니다")

    elif abcd[i]=='ㅆ':
        print("ㅆ입니다")

    elif abcd[i]=='ㅇ':
        print("ㅇ입니다")

    elif abcd[i]=='ㅈ':
        print("ㅈ입니다")

    elif abcd[i]=='ㅉ':
        print("ㅉ입니다")

    elif abcd[i]=='ㅊ':
        print("ㅊ입니다")

    elif abcd[i]=='ㅋ':
        print("ㅋ입니다")

    elif abcd[i]=='ㅌ':
        print("ㅌ입니다")

    elif abcd[i]=='ㅍ':
        print("ㅍ입니다")

    elif abcd[i]=='ㅎ':
        print("ㅎ입니다")

        #중성

    elif abcd[i]=='ㅏ':
        print("ㅏ입니다")

    elif abcd[i]=='ㅐ':
        print("ㅐ입니다")

    elif abcd[i]=='ㅑ':
        print("ㅑ입니다")

    elif abcd[i]=='ㅒ':
        print("ㅒ입니다")

    elif abcd[i]=='ㅓ':
        print("ㅓ입니다")

    elif abcd[i]=='ㅔ':
        print("ㅔ입니다")

    elif abcd[i]=='ㅕ':
        print("ㅕ입니다")

    elif abcd[i]=='ㅖ':
        print("ㅖ입니다")

    elif abcd[i]=='ㅗ':
        print("ㅗ입니다")

    elif abcd[i]=='ㅘ':
        print("ㅘ입니다")

    elif abcd[i]=='ㅙ':
        print("ㅙ입니다")

    elif abcd[i]=='ㅚ':
        print("ㅚ입니다")

    elif abcd[i]=='ㅛ':
        print("ㅛ입니다")

    elif abcd[i]=='ㅜ':
        print("ㅜ입니다")

    elif abcd[i]=='ㅝ':
        print("ㅝ입니다")

    elif abcd[i]=='ㅞ':
        print("ㅞ입니다")

    elif abcd[i]=='ㅟ':
        print("ㅟ입니다")

    elif abcd[i]=='ㅠ':
        print("ㅠ입니다")

    elif abcd[i]=='ㅡ':
        print("ㅡ입니다")

    elif abcd[i]=='ㅢ':
        print("ㅢ입니다")

    elif abcd[i]=='ㅣ':
        print("ㅣ입니다")

        #종성
    elif abcd[i]=='ㄱ':
        print("ㄱ입니다")

    elif abcd[i]=='ㄲ':
        print("ㄲ입니다")

    elif abcd[i]=='ㄳ':
        print("ㄳ입니다")

    elif abcd[i]=='ㄴ':
        print("ㄴ입니다")

    elif abcd[i]=='ㄵ':
        print("ㄵ입니다")

    elif abcd[i]=='ㄶ':
        print("ㄵ입니다")

    elif abcd[i]=='ㄷ':
        print("ㄷ입니다")

    elif abcd[i]=='ㄹ':
        print("ㄹ입니다")

    elif abcd[i]=='ㄺ':
        print("ㄺ입니다")

    elif abcd[i]=='ㄻ':
        print("ㄻ입니다")

    elif abcd[i]=='ㄼ':
        print("ㄼ입니다")

    elif abcd[i]=='ㄽ':
        print("ㄽ입니다")

    elif abcd[i]=='ㄾ':
        print("ㄾ입니다")

    elif abcd[i]=='ㄿ':
        print("ㄿ입니다")

    elif abcd[i]=='ㅀ':
        print("ㅀ입니다")

    elif abcd[i]=='ㅁ':
        print("ㅁ입니다")

    elif abcd[i]=='ㅂ':
        print("ㅂ입니다")

    elif abcd[i]=='ㅄ':
        print("ㅄ입니다")

    elif abcd[i]=='ㅅ':
        print("ㅅ입니다")

    elif abcd[i]=='ㅆ':
        print("ㅆ입니다")

    elif abcd[i]=='ㅇ':
        print("ㅐ입니다")

    elif abcd[i]=='ㅈ':
        print("ㅈ입니다")

    elif abcd[i]=='ㅊ':
        print("ㅊ입니다")

    elif abcd[i]=='ㅋ':
        print("ㅋ입니다")

    elif abcd[i]=='ㅌ':
        print("ㅌ입니다")

    elif abcd[i]=='ㅍ':
        print("ㅍ입니다")

    elif abcd[i]=='ㅎ':
        print("ㅎ입니다")

    elif abcd[i]==' ':
        print("띄어쓰기")

    elif abcd[i]=='1':
        print("숫자1")

2 답변

  • 무엇을 묻고자 하는지 잘 모르겠습니다.

    일단, 근성(respect!)으로 짜신 코드는 다음과 같이 간단히 바꿀 수 있습니다.

    for i in range(0, 3):
        print(abcd[i]+'입니다.')
    

    만약 원하는 것이, 어떤 문자의 리스트와 인덱스가 주어졌을 때, 3문자씩 찍는거라면 다음과 같은 함수를 만들어 볼 수 있습니다.

    def 다음세글자는(문자리스트, 인덱스번호):
        다음세글자리스트 = 문자리스트[인덱스번호:인덱스번호+3]
        for 글자 in 다음세글자리스트:
            print(글자+'입니다.')
    
    abcd=['ㄱ','ㅏ','ㅁ','ㅅ','ㅏ','ㅎ','ㅏ','ㅂ','ㄴ','ㅣ','ㄷ','ㅏ','11',' ']
    i = 0
    while i < len(abcd):
        다음세글자는(abcd, i)
        input("다음 세글자를 확인합니다.")
        i += 3
    print('끝')
    
  • 한글 쪽만 힌트를 드릴게요. 세상에는 유니코드라는 것이 있기 때문에 한글은 생각보다 programmable합니다.

    # 파이썬3 기준입니다.
    import math
    
    # 유니코드 코드포인트를 이용해서, 1개 한글자소의 초/중/종성을 뽑습니다.
    def chojoongzong(geulza) :
    
        # 최소한의 예외처리 1
        if len(geulza) > 1 :
            print('>>>>>>>>>> 오류! 1글자만 입력하세요.')
            return None
    
        # 최소한의 예외처리 2
        cheotza = ord(u'가') # ord() 는 파이썬 내장함수입니다.
        kkeutza = ord(u'힣') # 문서를 한번 읽어보세요.
        yigeulza = ord(geulza)
        if yigeulza < cheotza or yigeulza > kkeutza :
            print('>>>>>>>>>> 오류! 가~힣 사이의 완전한 1문자를 입력하세요.')
            return None
    
        # 인자로 받은 글자가 전체 한글 목록에서 갖는 index를 찾습니다.
        # '각'이라는 글자를 받았다면 이 값은 1이 됩니다. '가' 바로 다음이 '각'이니까요.
        yigeulza = yigeulza - cheotza
    
        # 이 목록 역시 임의로 생성할 수 있습니다. 한번 연구해 보세요!
        choseongs = ['ㄱ', 'ㄲ', 'ㄴ', 'ㄷ', 'ㄸ', 'ㄹ', 'ㅁ', 'ㅂ', 'ㅃ', 'ㅅ', 'ㅆ', 'ㅇ', 'ㅈ', 'ㅉ', 'ㅊ', 'ㅋ', 'ㅌ', 'ㅍ', 'ㅎ']
        joongseongs = ['ㅏ', 'ㅐ', 'ㅑ', 'ㅒ', 'ㅓ', 'ㅔ', 'ㅕ', 'ㅖ', 'ㅗ', 'ㅘ', 'ㅙ', 'ㅚ', 'ㅛ', 'ㅜ', 'ㅝ', 'ㅞ', 'ㅟ', 'ㅠ', 'ㅡ', 'ㅢ', 'ㅣ']
        zongseongs = [None, 'ㄱ', 'ㄲ', 'ㄳ', 'ㄴ', 'ㄵ', 'ㄶ', 'ㄷ', 'ㄹ', 'ㄺ', 'ㄻ', 'ㄼ', 'ㄽ', 'ㄾ', 'ㄿ', 'ㅀ', 'ㅁ', 'ㅂ', 'ㅄ', 'ㅅ', 'ㅆ', 'ㅇ', 'ㅈ', 'ㅊ', 'ㅋ', 'ㅌ', 'ㅍ', 'ㅎ']
    
        # 중성은 21개, 종성은 28개 있군요.
        # 그렇다면 하나의 같은 초성을 공유하는 글자들은 몇 개씩 있을까요?
        # 답: 588개
        choseonggateungeulzas = len(joongseongs) * len(zongseongs)
    
        # 주어진 인덱스로부터 초성은 어떻게 구할까요?
        # 인덱스가 0~587인 놈은 초성이 ㄱ, 588~1177인 놈은 ㄲ, ... 입니다.
        cho = math.floor(yigeulza / choseonggateungeulzas)
        print(choseongs[cho] + '입니다.')
    
        # 주어진 인덱스로부터 중성은 어떻게 구할까요?
        # 일단 인덱스가 0, 0+588, 0+588+588, ... 인 놈들은 모두 중성이 'ㅏ'입니다. (가, 까, 나, ...)
        # 근데 인덱스가 1, 1+588, 1+588+588, ... 인 놈들도 모두 중성이 'ㅏ'고요. (각, 깍, 낙, ...)
        # 근데 인덱스가 28, 28+588, ... 인 놈들은 중성이 'ㅐ'일 겁니다. (개, 깨, 내, ...)
        # 짱구를 굴려 규칙성을 찾아 일반항을 구합니다.
        joong = math.floor((yigeulza % choseonggateungeulzas) / len(zongseongs))
        print(joongseongs[joong] + '입니다.')
    
        # 주어진 인덱스로부터 종성은 어떻게 구할까요?
        # 인덱스가 1, 1+28, 1+28+28, ... 인 놈들은 모두 종성이 'ㄱ'입니다.
        # 종성은 없을 수도 있으므로 별도 처리를 넣었습니다.
        zong = math.floor(yigeulza % len(zongseongs))
        if zongseongs[zong] != None :
            print(zongseongs[zong] + '입니다.')
    
    # 주석까지 합해서 대충 50줄 좀 넘는 코드인데 잘 작동합니다.
    # 못 믿으시겠다면 우측의 '코드 실행하기'를 해보세요.
    chojoongzong(u'ㅋㅋ')
    chojoongzong(u'싫')
    chojoongzong(u'은')
    chojoongzong(u'데')
    chojoongzong(u'?')
    

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

Hashcode는 개발자들을 위한 무료 QnA 사이트입니다. 계정을 생성하셔야만 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)

ᕕ( ᐛ )ᕗ
로그인이 필요합니다

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 계정을 생성하셔야만 글을 작성하실 수 있습니다.