본문 바로가기
개발일지/Python

파이썬 순위알고리즘2 숫자,아스키코드를 숫자 전환하여 순위비교

by 다니엘의 개발 이야기 2022. 5. 22.
320x100
# 순위 알고리즘 2
# 알파벳 문자들과 정수들에 대한 순위를 정하는 프로그램을 순위 알고리즘을 이용해서 만들자
# 단, 알파벳은 아스키코드 값을 이용한다.

datas = [32,'a','z',45,'G',39,50,'T','t',22,31,55,'s',63,59,'E']
print(f'datas: {datas}')

# 반복문 돌리면서 문자가 발견되면 ascIIDatas에 넣어주기
ascIIDatas = []
for data in datas:
    # 알파벳이냐 아니냐
    # 그리고 이 if는 datas에 있는 모든 숫자를 ascIIDatas에 넣어주는게 목적이다.
    # 만약 문자라면 숫자로 전환해서 ascIIDatas에 넣어주는게 목적이다.
    # 하지만 data.isalpha()라고 했을때 문자 외의 숫자는 확인 에러가 생기니깐
    # 그것을 방지하기 위해서 data값에 대해서 str처리를 해준다.
    if str(data).isalpha():
        # 알파벳이라면 아스키코드로 전환해서 넣어줘라
        ascIIDatas.append(ord(data))
        # 여기 if문에 해당되었을때 밑으로 빠져서 그냥 숫자가 바로 추가되면안되니깐
        # 이걸 해줘야한다. 그러므로 다시 for문으로 올라간다.
        continue
    # 숫자라면 그냥 추가해줘라
    ascIIDatas.append(data)

print(f'ascIIDatas: {ascIIDatas}')
print()

ranks = [0 for i in range(len(ascIIDatas))]
print(f'ranks before: {ranks}')
print()

for idx, data1 in enumerate(ascIIDatas):
    for data2 in ascIIDatas:
        if data1 < data2:
            ranks[idx] += 1

print(f'ranks after: {ranks}')

for i, d in enumerate(datas):
    # {d:>2}는 오른쪽정렬기준으로 2자리 라는 뜻
    print(f'data: [{d:>2}] \t rank: {ranks[i]+1}')
300x250