import random
nums = random.sample(range(50,101),20)
ranks = [0]*20 # nums의 순위를 담을 리스트 초기화
for idx, num1 in enumerate(nums):# 기준이 될 num
for num2 in nums: # 비교할 num
if num1 < num2: # 기준이 되는 num이 작다면
ranks[idx] += 1 # 순서의 위치를 한칸씩 뒤로 미룬다.
print(f'nums: {nums}')
print(f'rank: {ranks}')
# 보기 좋게 nums와 순위를 한꺼번에 출력하기
for i, num in enumerate(nums):
print(f'num : {num}\t rank: {ranks[i]+1}') # 0순위보다 1순위가 보기 좋으니까
Python
복사
# 학생 20명의 중간고사와 기말고사 성적을 이용해서 각각의 순위를 구하고 중간고사 대비 기말고사 순위 변화(편차)를 출력하는 프로그램
import random
midStuScores = random.sample(range(50,101),k=20)
endStuScores = random.sample(range(50,101),k=20)
print(midStuScores)
print(endStuScores)
mid_rank = [0]*20
end_rank = [0]*20
# 1. 중간고사 순위
for idx, mid in enumerate(midStuScores):
for temp in midStuScores:
if mid < temp:
mid_rank[idx] += 1
# 2. 기말고사 순위
for idx, end in enumerate(endStuScores):
for temp in endStuScores:
if end < temp:
end_rank[idx] += 1
print(mid_rank)
print(end_rank)
deviation = [0] * 20
# 기말고사와 중간고사 순위 편차 구하기
for i in range(20): # 0 ~ 19순위의 index 를 돌면서
deviation[i] = end_rank[i] - mid_rank[i]
if deviation[i] < 0:
deviation[i] = str(deviation[i]).replace('-','↓')
elif deviation[i] > 0:
deviation[i] = '↑' + str(deviation[i])
else:
deviation[i] = '=' + str(deviation[i])
Python
복사
# 학생 20명의 중간고사와 기말고사 성적을 이용해서 각각의 순위를 구하고 중간고사 대비 기말고사 순위 변화(편차)를 출력하는 프로그램
# rank.py
class RankDeviation:
def __init__(self, mss, ess):
self.midStuScores = mss
self.endStuScores = ess
self.midRank = [0] * len(mss)
self.endRank = [0] * len(mss)
self.rankDeviation = [0] * len(mss)
def setRank(self, ss, rs): # 점수가 담긴 리스트와 순위가 담긴 리스트를 가져온다.
for idx, sco1 in enumerate(ss):
for sco2 in ss:
if sco1 < sco2:
rs[idx] += 1
def setMidRank(self):
self.setRank(self.midStuScores, self.midRank)
def getMidRank(self):
return self.midRank
def setEndRank(self):
self.setRank(self.endStuScores, self.endRank)
def getEndRank(self):
return self.endRank
def printRankDeviation(self):
for idx, mRank in enumerate(self.midRank):
deviation = mRank - self.endRank[idx]
if deviation > 0: # 기말고사 순위가 더 높다면
deviation = '↑' + str(abs(deviation))
elif deviation < 0: # 기말고사 순위가 더 낮다면
deviation = '↓' + str(abs(deviation))
else:
deviation = '=' + str(abs(deviation))
print(f'mid_rank: {mRank}\t end_rank : {self.endRank[idx]}\t Deviation : {deviation} ')
Python
복사
import rank as rk
import random
midStuScores = random.sample(range(50,101), 20)
endStuScores = random.sample(range(50,101), 20)
rd = rk.RankDeviation(midStuScores, endStuScores)
rd.setMidRank() # 중간고사 순위 설정
print(f'midStuScores : {midStuScores}')
print(f'midStuRank : {rd.getMidRank()}')
rd.setEndRank() # 기말고사 순위 설정
print(f'endStuScores : {endStuScores}')
print(f'endStuRank : {rd.getEndRank()}')
rd.printRankDeviation()
Python
복사
# rank.py
def RankAlgo(ns):
ranks = [0] * len(ns)
# 순위 구하기
for idx, sco1 in enumerate(ns):
for sco2 in ns:
if sco1 < sco2:
ranks[idx] += 1
print(f'nums : {ns}')
print(f'ranks : {ranks}')
# 순위에따라서 정렬
for i, n in enumerate(ns):
print(f'num : {n} \t rank: {ranks[i] + 1}')
sortedNums = [0] * len(ns)
for idx , rank in enumerate(ranks):
sortedNums[rank] = ns[idx]
return sortedNums
Python
복사
# 숫자로 이루어진 리스트에서 사용자가 입력한 숫자를 검색하는 모듈을 만들자
# 검색 모듈을 이진 검색을 이용한다
# 검색 과정을 로그로 출력하자
# 검색에 성공하면 해당 정수의 인덱스를 출력하고 검색 결과가 없다면 -1을 출력하자.
import rank
import random
nums = random.sample(range(50,101),20)
sNums = rank.RankAlgo(nums)
print(f'sorted Nums : {sNums}')
Python
복사
# rank.py
def RankAsci(datas):
ranks = [0] * len(datas)
ascIIdatas = []
for data in datas:
if str(data).isalpha(): # 문자로 바꿔주지 않으면 .isalpha는 오류 발생
ascIIdatas.append(ord(data))
else:
ascIIdatas.append(data)
print(f'ascIIdatas :{ascIIdatas}')
# 중첩 for 문 이용해서 순위 구하기
for idx, data in enumerate(ascIIdatas):
for data2 in ascIIdatas:
if data < data2: # 작을수록 순위가 더해짐(밀려나는것)
ranks[idx] += 1
print(f'ranks : {ranks}')
for i, d in enumerate(datas):
print(f'num : {d:>2} \t rank: {ranks[i] + 1}순위') # 오른쪽 2자리수만큼 정렬
Python
복사
# 알파벳과 숫자로 이루어진 리스트를 순위 알고리즘을 이용해서 정렬하자.
# 알파벳은 아스키 코드를 이용한다.
import rank
datas = [32,'a','z',45,'G',39,50,'T','t',22,31,55,'s',63,59,'E']
rank_datas = rank.RankAsci(datas)
Python
복사
•
.isalpha() : 입력값으로 들어온 문자가 알파벳으로만 이루어져 있으면 True, 아닐 경우 False
format 함수에서 오른쪽 정렬을 표현 하고 싶을 경우 :> 라는 기호를 뒤에 붙여주면 된다.
이때 전체 자리수까지 표현할 수 있다.