순위란?
- 수의 크고 작음을 이용해서 수의 순서를 정하는 것을 순위라고 한다.
50~100가지의 수 중 랜덤으로 20개뽑고 그 안에서 순위 정하는거
import random
nums = random.sample(range(50,101), 20)
ranks = [ 0 for i in range(20)] # 0, 20개 만들기
print(f'nums: {nums}')
print(f'ranks: {ranks}')
for idx, num1 in enumerate(nums): # nums 리스트의 각 요소(num1)와 그 인덱스(idx)를 순회
for num2 in nums: # nums 리스트의 모든 요소(num2)를 다시 순회
if num1 < num2: # 만약 현재 요소(num1)가 비교 대상(num2)보다 작으면
ranks[idx] += 1 # 현재 요소의 순위를 나타내는 ranks의 해당 인덱스 값을 1 증가
print(f'nums: {nums}')
print(f'ranks: {ranks}')
for idx, num in enumerate(nums):
print(f'num : {num} \t rank: {ranks[idx] + 1}')
결과
실습
학급 학생 (20명)들의 중간고사와 기말고사 성적을 이용해서 각각의 순위를 구하고, 중간고사 대비 기말고사 순위 변화(편차)를 출력하는 프로그램을 만들어보자. (시험 성적은 난수를 이용)
프로그램 구현
1. 클래스 정의: RankDeviation 클래스를 정의하여, 중간고사 점수(midStuScos), 기말고사 점수(endStuScos), 각 시험의 순위(midRanks, endRanks), 그리고 순위 편차(rankDeviation)를 관리
2. 순위 계산 메소드: setRank 메소드를 이용해 주어진 점수 리스트에 대한 순위를 계산하고, 이를 해당 순위 리스트에 저장
3. 순위 편차 출력: printRankDeviation 메소드에서는 중간고사 대비 기말고사의 순위 편차를 계산하고, 이를 '상승' 또는 '하향'으로 표현하여 출력
class RankDeviation:
def __init__(self, mss, ess):
self.midStuScos = mss
self.endStuScos = ess
self.midRanks = [0 for i in range(len(mss))]
self.endRanks = [0 for i in range(len(ess))]
self.rankDeviation = [0 for i in range(len(ess))] #편차
def setRank(self,ss,rs): #ss = 점수 rs = 순위
for idx, scol in enumerate(ss):
for sco2 in ss:
if scol < sco2:
rs[idx] += 1
def setMidRank(self):
self.setRank(self.midStuScos, self.midRanks)
def getMidRank(self):
return self.midRanks
def setEndRank(self):
self.setRank(self.endStuScos, self.endRanks)
def getEndRank(self):
return self.endRanks
def printRankDeviation(self): #편차출력
for idx, mRank in enumerate(self.midRanks):
deviation = mRank - self.endRanks[idx] # 중간고사에서 기말고사 성적뺀거
if deviation > 0:
deviation = '상승' + str(abs(deviation))
elif deviation < 0:
deviation = '하향' + str(abs(deviation))
print(f'mid_rank: {mRank}\t end_rank: {self.endRanks[idx]} \t Deviation : {deviation}')
실행파일
import rank as rm
import random
midStuScos = random.sample(range(50,101), 20)
endStuScos = random.sample(range(50,101), 20)
rd = rm.RankDeviation(midStuScos, endStuScos)
rd.setMidRank()
print(f'midStuScors: {midStuScos}')
print(f'mid_rank: {rd.getMidRank()}')
rd.setEndRank()
print(f'endStuScors: {endStuScos}')
print(f'end_rank: {rd.getEndRank()}')
rd.printRankDeviation()
결과
반응형
'IT > Python' 카테고리의 다른 글
Python - 알고리즘 (최댓값,최솟값,최빈값,근삿값,평균) (0) | 2024.02.27 |
---|---|
Python - 알고리즘 (버블정렬,삽입정렬,선택정렬) (1) | 2024.02.26 |
Python - 알고리즘 (선형검색,이진검색) (1) | 2024.02.26 |
Python - 자료구조 (0) | 2024.02.22 |
[Python] 동시성 프로그래밍과 병렬성 프로그래밍 (1) | 2024.02.19 |