파이썬 질문!!
조회수 630회
아래와 같은 코드를 작성중입니다.
처음 실행했을때 결과는
ㄱ입니다
ㅏ입니다
ㅁ입니다
이렇습니다.
스위치를 누를시 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'?')
댓글 입력