파이썬 알파벳 숫자 변환 - paisseon alpabes susja byeonhwan

n = str(input())

dic = {'A':1,'B':2,'C':3,'D':4,'E':5,'F':6,'G':7,'H':8,'I':9,'J':10,'K':11,'L':12,'M':13,'N':14,'O':15,'P':16,'Q':17,'R':18,'S':19,'T':20,'U':21,'V':22,'W':23,'X':24,'Y':25,'Z':26}
for i in n:
  print(dic[i],end=' ')

딕셔너리 사용하여 매치 또는,

data = input()

for i in range(len(data)) :
  print(ord(data[i])-64, end=' ')
  ```
ord() 아스키 코드 값을 사용하여 문제해결코드

약 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)

제대로 출력이 되는걸 확인했으면 전체 합산을 해주면 됩니다.