[순위]
- 수의 크고 작음을 이용해 수의 순서를 정하는 것을 순위라고 한다.
- for문을 두번 돌리면 된다.
- 하나의 숫자에 대해 나머지 숫자들과 전부 비교하여 순위를 구하고
- 이를 모든 숫자에 대해 마찬가지로 반복한다.
import random
numbers = random.sample(range(50,101),20)
rank = [0 for _ in range(20)]
for idx,num1 in enumerate(numbers):
for num2 in numbers:
if num1 < num2 :
rank[idx] += 1
print(f'numbers : {numbers}')
print(f'rank : {rank}')
for idx, num in enumerate(numbers):
print(f'num : {num}\t서열 {rank[idx]+1}위 입니다.')
'''
numbers : [69, 58, 86, 60, 73, 59, 75, 77, 70, 57, 96, 98, 62, 83, 71, 65, 89, 64, 51, 67]
rank : [10, 17, 3, 15, 7, 16, 6, 5, 9, 18, 1, 0, 14, 4, 8, 12, 2, 13, 19, 11]
num : 69 서열 11위 입니다.
num : 58 서열 18위 입니다.
num : 86 서열 4위 입니다.
num : 60 서열 16위 입니다.
num : 73 서열 8위 입니다.
num : 59 서열 17위 입니다.
num : 75 서열 7위 입니다.
num : 77 서열 6위 입니다.
num : 70 서열 10위 입니다.
num : 57 서열 19위 입니다.
num : 96 서열 2위 입니다.
num : 98 서열 1위 입니다.
num : 62 서열 15위 입니다.
num : 83 서열 5위 입니다.
num : 71 서열 9위 입니다.
num : 65 서열 13위 입니다.
num : 89 서열 3위 입니다.
num : 64 서열 14위 입니다.
num : 51 서열 20위 입니다.
num : 67 서열 12위 입니다.
'''
[실습] 학급 학생의 기말고사 성적을 이용해서 각각의 순위를 구하고, 중간고사 대비 기말고사 순위 편차를 출력하여보자. (시험 성적은 난수를 이용한다. )
import random
class RankDevi:
def __init__(self, mid_score, final_score):
self.mid_score = mid_score
self.final_score = final_score
self.mid_rank = [0 for _ in range(20)]
self.final_rank = [0 for _ in range(20)]
self.rank_deviation = [0 for _ in range(20)]
def set_rank(self, scorelist, rank):
for idx,num1 in enumerate(scorelist):
for num2 in scorelist:
if num1 > num2:
rank[idx] += 1
def set_mid_rank(self):
self.set_rank(self.mid_score,self.mid_rank)
def set_final_rank(self):
self.set_rank(self.final_score,self.final_rank)
def Rank_deviation(self):
for i in range(20):
if self.mid_rank[i] > self.final_rank[i] :
self.rank_deviation[i] = '↑'+str(self.mid_rank[i]-self.final_rank[i])
elif self.mid_rank[i] < self.final_rank[i] :
self.rank_deviation[i] = '↓'+str(self.final_rank[i]-self.mid_rank[i])
else:
self.rank_deviation[i] = '='
mid_score = random.sample(range(1,101),20)
final_score = random.sample(range(1,101),20)
rank_list = RankDevi(mid_score,final_score)
rank_list.set_mid_rank()
print(f'mid_score : {mid_score}\n rank : {rank_list.mid_rank}')
rank_list.set_final_rank()
print(f'final_score : {final_score}\n rank : {rank_list.final_rank}')
rank_list.Rank_deviation()
for i in range(20):
print(f'mid_rank:{rank_list.mid_rank[i]}\tfinal_rank:{rank_list.final_rank[i]}\tDeviation:{rank_list.rank_deviation[i]}')
'''
mid_score : [53, 36, 47, 38, 16, 43, 28, 6, 83, 60, 42, 4, 82, 59, 3, 61, 89, 98, 99, 2]
rank : [11, 6, 10, 7, 4, 9, 5, 3, 16, 13, 8, 2, 15, 12, 1, 14, 17, 18, 19, 0]
final_score : [39, 70, 29, 3, 61, 66, 46, 21, 76, 40, 72, 10, 22, 19, 87, 75, 44, 100, 53, 43]
rank : [6, 14, 5, 0, 12, 13, 10, 3, 17, 7, 15, 1, 4, 2, 18, 16, 9, 19, 11, 8]
mid_rank:11 final_rank:6 Deviation:↑5
mid_rank:6 final_rank:14 Deviation:↓8
mid_rank:10 final_rank:5 Deviation:↑5
mid_rank:7 final_rank:0 Deviation:↑7
mid_rank:4 final_rank:12 Deviation:↓8
mid_rank:9 final_rank:13 Deviation:↓4
mid_rank:5 final_rank:10 Deviation:↓5
mid_rank:3 final_rank:3 Deviation:=
mid_rank:16 final_rank:17 Deviation:↓1
mid_rank:13 final_rank:7 Deviation:↑6
mid_rank:8 final_rank:15 Deviation:↓7
mid_rank:2 final_rank:1 Deviation:↑1
mid_rank:15 final_rank:4 Deviation:↑11
mid_rank:12 final_rank:2 Deviation:↑10
mid_rank:1 final_rank:18 Deviation:↓17
mid_rank:14 final_rank:16 Deviation:↓2
mid_rank:17 final_rank:9 Deviation:↑8
mid_rank:18 final_rank:19 Deviation:↓1
mid_rank:19 final_rank:11 Deviation:↑8
mid_rank:0 final_rank:8 Deviation:↓8
'''
class 연습 겸 하게 되었는데
변수명이 좀 길다보니 오타가 계속 발생해 시간이 좀 많이 오래걸렸다.
'알고리즘' 카테고리의 다른 글
[알고리즘] 선택정렬 (0) | 2022.05.15 |
---|---|
[알고리즘] 삽입 정렬 (0) | 2022.05.15 |
[알고리즘] 버블정렬, 깊은 복사, 얕은 복사 (0) | 2022.05.14 |
[알고리즘] 이진탐색 (0) | 2022.05.14 |
[알고리즘] 선형 검색 (0) | 2022.05.12 |