딕셔너리 사용하여 매치 또는,
약 5천개의 영문이름이 있는데, 각 이름의 알파벳을 A=1,B=2,,, 의 숫자로 치환해서 합산한 다음, 그 이름의 index와 곱해서 전체를 누적하는 것이 문제입니다. 예를 들어, 리스트의 첫번째이름은 MARY 이고, 이를 숫자로 변환하면, M=13,A=1,R=18 ,Y=25 이고, 합은 13+1+18+25=57이고, 인덱스는 5000개중에 1번이기 때문에, 57*1=57입니다. (인덱스는 알파벳순으로 정렬을 다시해야해서, 인덱스값이 달라집니다.) with open('q022_data.txt') as data: contents = data.read() print(contents) "MARY","PATRICIA","LINDA","BARBARA","ELIZABETH","JENNIFER","MARIA","SUSAN","MARGARET","DOROTHY","LISA","NANCY","KAREN","BETTY","HELEN","SANDRA","DONNA","CAROL","RUTH","SHARON","MICHELLE","LAURA","SARAH","KIMBERLY","DEBORAH","JESSICA","SHIRLEY","CYNTHIA","ANGELA","MELISSA","BRENDA","AMY","ANNA","REBECCA","VIRGINIA","KATHLEEN","PAMELA","MARTHA","DEBRA","AMANDA","STEPHANIE",,,,,,,,,,,,,, 텍스트 안에는 따옴표(")와 콤마(,)가 혼합된 상태입니다. with open('q022_data.txt') as data: names = data.read().replace('"','').split(',') ['MARY', 'PATRICIA', 'LINDA', 'BARBARA', 'ELIZABETH', 'JENNIFER', 'MARIA', 'SUSAN', 'MARGARET', 'DOROTHY', 'LISA', 'NANCY', 'KAREN', 'BETTY', 'HELEN', 'SANDRA', 'DONNA', 'CAROL', 'RUTH', 'SHARON', 'MICHELLE', 'LAURA', 'SARAH', 'KIMBERLY', 'DEBORAH', 'JESSICA', 'SHIRLEY', 'CYNTHIA', 'ANGELA', 'MELISSA', 'BRENDA', 'AMY', 'ANNA', 'REBECCA', 'VIRGINIA', 'KATHLEEN', 'PAMELA', 'MARTHA',,,,,,,,,, 다시 불러오면서, 따옴표는 치환명령으로 삭제를 해주었고, 컴마를 기준으로 split을 했습니다. split을 하고 나면, 데이터형은 List형으로 전환됩니다. names.sort() ['AARON', 'ABBEY', 'ABBIE', 'ABBY', 'ABDUL', 'ABE', 'ABEL', 'ABIGAIL', 'ABRAHAM', 'ABRAM', 'ADA', 'ADAH', 'ADALBERTO', 'ADALINE', 'ADAM', 'ADAN', 'ADDIE', 'ADELA', 'ADELAIDA', 'ADELAIDE', 'ADELE', 정렬을 해주고, print(contents.isupper()) True 아스키코드를 사용해서 숫자로 바꿀건데, 이름에 소문자가 섞여 있는지를 확인하기 위해서, contents.isupper() 명령을 실행해서 True가 나오는지 확인해주었습니다. 루프문 작성for idx,val in enumerate(names[:20]): print(idx+1,val,end=' ') for i in val: print(ord(i)-64,end=',') print() 1 AARON 1,1,18,15,14, 2 ABBEY 1,2,2,5,25, 3 ABBIE 1,2,2,9,5, 4 ABBY 1,2,2,25, 5 ABDUL 1,2,4,21,12, 6 ABE 1,2,5, 7 ABEL 1,2,5,12, 8 ABIGAIL 1,2,9,7,1,9,12, 9 ABRAHAM 1,2,18,1,8,1,13, 10 ABRAM 1,2,18,1,13, 11 ADA 1,4,1, ord()는 문자의 아스키코드값을 얻어내는 명령입니다. 대문자A가 65이기 때문에, 64를 빼면, 1부터 시작하는 일련번호를 얻을수 있습니다. 합계 계산with open('q022_data.txt') as data: names = data.read().replace('"','').split(',') names.sort() grand_total =0 for idx,val in enumerate(names): total=0 for i in val: total=total+ord(i)-64 grand_total+=total*(idx+1) print(grand_total) 제대로 출력이 되는걸 확인했으면 전체 합산을 해주면 됩니다. |