๐ ๊ทผ์ฟ๊ฐ
- ํน์ ๊ฐ(์ฐธ๊ฐ)์ ๊ฐ์ฅ ๊ฐ๊น์ด ๊ฐ์ ๊ทผ์ฟ๊ฐ์ด๋ผ๊ณ ํ๋ค.
import random
nums = random.sample(range(0, 50), 20) # 0~50๊น์ง์ ์ซ์ 20๊ฐ๋ฅผ nums์ ํ ๋นํ๋ค.
print(f'nums : {nums}')
inputNum = int(input('input Number : '))
print(f'inputNum : {inputNum}')
nearNum = 0
minNum = 50 #๋ฐ์ดํฐ๊ฐ ๋ง์ผ๋ฉด ์ต๋๊ฐ ์๊ณ ๋ฆฌ์ฆ์ ํตํด์ ๊ตฌํ๋ค.
#์ต๋๊ฐ ์ค์ ์ ํด์ for๋ฌธ์ผ๋ก ๊ทผ์ฌ๊ฐ์ ์ฐพ๋ ๊ฒ์ ์ฉ์ดํ๊ฒ ํด์ค๋ค
nearIdx = 0
for idx, n in enumerate(nums):
absNum = abs(n - inputNum) #์ ๋๊ฐ์ผ๋ก ๋ฎ์ด์ค๋ค
# print(f'absNum : {absNum}')
if absNum < minNum: #์ ๋๊ฐ์ด ์ต์๊ฐ๋ณด๋ค ์์ ๋
nearIdx = idx #idx๋ฅผ ์ต์๊ฐ idx๋ก ์ด๊ธฐํ
minNum = absNum #์ต์๊ฐ์ ์ ๋๊ฐ์ ์ด๊ธฐํ
nearNum = n #๊ทธ๋ ๊ทผ์ฟ๊ฐ์ n์ด๋ค
print(f'nearNum : {nearNum}')
print(f'nearNumIdx : {nearIdx}')
>>>>
input Number : 45
inputNum : 45
nearNum : 43
nearNumIdx : 13
๐ ๊ทผ์ฟ๊ฐ (์ค์ต)
#๋ชจ๋์ฝ๋
def getNearNum(an):
baseScores = [95, 85, 75, 65, 55]
nearNum = 0
minNum = 100
for n in baseScores:
absNum = abs(n - an)
if absNum < minNum:
minNum = absNum
nearNum = n
if nearNum == 95:
return 'A'
elif nearNum == 85:
return 'B'
elif nearNum == 75:
return 'C'
elif nearNum == 65:
return 'D'
elif nearNum <= 55:
return 'F'
#์คํ์ฝ๋
import near
scores = []
kor = int(input('input kor score : '))
scores.append(kor)
eng = int(input('input eng score : '))
scores.append(eng)
mat = int(input('input mat score : '))
scores.append(mat)
sci = int(input('input sci score : '))
scores.append(sci)
his = int(input('input his score : '))
scores.append(his)
totalScore = sum(scores)
print(f'totalScore = {totalScore}')
avgScore = totalScore / len(scores)
print(f'avgScore = {avgScore}')
grade = near.getNearNum(avgScore)
print(grade)
>>>>
input kor score : 80
input eng score : 70
input mat score : 60
input sci score : 90
input his score : 45
totalScore = 345
avgScore = 69.0
D
๐ ๊ทผ์ฟ๊ฐ (์ค์ต 2)
#๋ชจ๋
class Top5Players:
def __init__(self, cs, ns):
self.currentScores = cs
self.newScore = ns
def setAlignScore(self): #๊ทผ์ฌ๊ฐ์ ์ด์ฉํ์ฌ ์์๋ฅผ ์ ๋ ฌ
nearIdx = 0
nearScore = 0
minNum = 10.0
for i, s in enumerate (self.currentScores):
absNum = abs(self.newScore - s) #์ฐจ์ด๋ฅผ ๊ณ์ฐ
#์ฐจ์ด๊ฐ ์ต์๊ฐ์ผ๋ ๊ทผ์ฟ๊ฐ์ด๋ค.
if absNum < minNum:
minNum = absNum
nearScore = s
nearIdx = i
if self.newScore >= self.currentScores[nearIdx]:
#์๋ก์ด ์ค์ฝ์ด๊ฐ ๊ทผ์ฟ๊ฐ๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ์๋
for i in range (len(self.currentScores) - 1, nearIdx, -1):
#5์๋ถํฐ ๊ทผ์ฟ๊ฐ๊น์ง์ ์ ์๋ค์
self.currentScores[i] = self.currentScores[i-1]
#ํ์นธ์ฉ ๋ฐ๋ ค๋จ
self.currentScores[nearIdx] = self.newScore
#์๋ก์ด ์ ์๊ฐ ๊ทผ์ฟ๊ฐ ์๋ฆฌ์ ๋ผ์๋ฃ์ด์ง
else: #์๋ก์ด ์ค์ฝ์ด๊ฐ ๊ทผ์ฟ๊ฐ๋ณด๋ค ์์๋
for i in range (len(self.currentScores) - 1, nearIdx + 1, -1):
#5์๋ถํฐ ๊ทผ์ฟ๊ฐ ๋ฐ๋ก ์๋ ์์๊น์ง
self.currentScores[i] = self.currentScores[i-1]
#ํ์นธ์ฉ ๋ฐ๋ ค๋จ
self.currentScores[nearIdx+1] = self.newScore
#๊ทธ๋ฆฌ๊ณ ๊ทธ ์๋ฆฌ๋ฅผ ์๋ก์ด ์ค์ฝ์ด๊ฐ ๋ฉ๊ฟ
def getFinalTop5Scores(self):
return self.currentScores
#์คํ์ฝ๋
import near
scores = [8.9, 7.6, 8.2, 9.1, 8.8, 8.1, 7.9, 9.4, 7.2, 8.7]
top5PlayerScores = [9.12, 8.95, 8.12, 7.90, 7.88]
print(f'top5PlayerScores : {top5PlayerScores}')
total = 0; average = 0
for n in scores:
total += n
average = round(total / len(scores), 2)
print(f'total : {total}')
print(f'average : {average}')
tp = near.Top5Players (top5PlayerScores, average)
tp.setAlignScore()
top5Scores = tp.getFinalTop5Scores()
print(f'{top5Scores}')
>>>>
top5PlayerScores : [9.12, 8.95, 8.12, 7.9, 7.88]
total : 83.9
average : 8.39
[9.12, 8.95, 8.39, 8.12, 7.9]
๐ ์ฌ๊ท ์๊ณ ๋ฆฌ์ฆ
- ๋ ์์ ์ ๋ค์ ํธ์ถํ๋ ๊ฒ
def recusion(num):
if num > 0:
print('*' * num)
return recusion(num - 1)
else:
return 1
recusion(10)
>>>>
**********
*********
********
*******
******
*****
****
***
**
*
๐ ์ฌ๊ท ์๊ณ ๋ฆฌ์ฆ (์ค์ต)
def greatestCommonDevide(n1, n2):
maxNum = 0
for i in range(1, (n1+1)):
if n1 % i == 0 and n2 % i == 0: #๊ณต์ฝ์๋ฅผ ๊ตฌํ๋ค
maxNum = i #i๋ฅผ ๊ณ์ ์๋กญ๊ฒ ๊ฐฑ์ , ์ต๋๊ณต์ฝ์๊ฐ ๊ตฌํด์ง
return maxNum
print(f'greatestCommonDevide(82, 32) : {greatestCommonDevide(82, 32)}')
print(f'greatestCommonDevide(96, 40) : {greatestCommonDevide(96, 40)}')
def gcd(n1, n2):
if n1 % n2 == 0: #n1์ n2๋ก ๋๋ ๋๋จธ์ง๊ฐ 0์ด ๋๋ฉด
return n2 #n2๋ฅผ ๋ฐํํ๋ค
else:
return gcd(n2, n1 % n2) #n2๋ฅผ n1์ n2๋ก ๋๋ ๋๋จธ์ง์ ๋๋๋ค (๋ฐ๋ณต)
print(f'greatestCommonDevide(82, 32) : {gcd(82, 32)}')
print(f'greatestCommonDevide(96, 40) : {gcd(96, 40)}')
๐ ํ๋ ธ์ด์ ํ
def moveDisc(discCnt, fromBar, toBar, viaBar): #3, 1, 3, 2
if discCnt == 1:
print(f'{discCnt}disc๋ฅผ {fromBar}์์ {toBar}๋ก ์ด๋')
else:
moveDisc(discCnt-1, fromBar, viaBar, toBar)
print(f'{discCnt}disc๋ฅผ {fromBar}์์ {toBar}๋ก ์ด๋')
moveDisc(discCnt-1, viaBar, toBar, fromBar)
moveDisc(3, 1, 3, 2)
#์ดํดํ์
๐ ๋ณํฉ์ ๋ ฌ
- ์๋ฃ๊ตฌ์กฐ๋ฅผ ๋ถํ ํ๊ณ , ๊ฐ๊ฐ์ ๋ถํ ๋ ์๋ฃ๊ตฌ์กฐ๋ฅผ ๋ค์ ์ ๋ ฌํ ํ ๋ณํฉํ๋ค.
def mSort(ns):
if len(ns) < 2:
return ns
midIdx = len(ns) // 2
leftNums = mSort(ns[0:midIdx])
rightNums = mSort(ns[midIdx:len(ns)])
mergeNums = []
leftIdx = 0; rightIdx = 0
while leftIdx < len(leftNums) and rightIdx < len(rightNums):
# ๊ฐNums์ ๊ธธ์ด๊ฐ Idx๋ณด๋ค ํด๋๊น์ง
if leftNums[leftIdx] < rightNums[rightIdx]:
mergeNums.append(leftNums[leftIdx])
leftIdx += 1
else:
mergeNums.append(rightNums[rightIdx])
rightIdx += 1
mergeNums = mergeNums + leftNums[leftIdx:]
mergeNums = mergeNums + rightNums[rightIdx:]
return mergeNums
nums = [8, 1, 4, 3, 2, 5, 10, 6]
print(f'nums : {nums}')
print(f'sorted nums : {mSort(nums)}')
>>>>
nums : [8, 1, 4, 3, 2, 5, 10, 6]
sorted nums : [1, 2, 3, 4, 5, 6, 8, 10]
๐ ๋ณํฉ์ ๋ ฌ (์ค์ต)
#๋ชจ๋์ฝ๋
def mSort(ns, asc=True):
if len(ns) < 2:
return ns
midIdx = len(ns) // 2
leftNums = mSort(ns[0:midIdx], asc=asc)
rightNums = mSort(ns[midIdx:len(ns)], asc=asc) #๊ณ์ ๋ถํ ํ๋ค
mergeNums = [] #๋ถํ ๋ nums๋ฅผ ๋ค์ ํฉ์น๋ค
leftIdx = 0; rightIdx = 0
while leftIdx < len(leftNums) and rightIdx < len(rightNums): # ๊ฐNums์ ๊ธธ์ด๊ฐ Idx๋ณด๋ค ํด๋๊น์ง
if asc:
if leftNums[leftIdx] < rightNums[rightIdx]:
mergeNums.append(leftNums[leftIdx])
leftIdx+=1
else:
mergeNums.append(rightNums[rightIdx])
rightIdx+=1
else:
if leftNums[leftIdx] > rightNums[rightIdx]:
mergeNums.append(leftNums[leftIdx])
leftIdx += 1
else:
mergeNums.append(rightNums[rightIdx])
rightIdx += 1
mergeNums = mergeNums + leftNums[leftIdx:]
mergeNums = mergeNums + rightNums[rightIdx:]
return mergeNums
#์คํ์ฝ๋
import random as rd
import sortMod as sm
rNums = rd.sample(range(1, 101), 10)
print(f'not sorted rNums : {rNums}')
print(f'sorted rNums ASC : {sm.mSort(rNums)}')
print(f'sorted rNums DESC : {sm.mSort(rNums, asc=False)}')
>>>>
not sorted rNums : [32, 43, 30, 99, 55, 4, 49, 69, 16, 61]
sorted rNums ASC : [4, 16, 30, 32, 43, 49, 55, 61, 69, 99]
sorted rNums DESC : [99, 69, 61, 55, 49, 43, 32, 30, 16, 4]
๐ ํต์ ๋ ฌ
- ๊ธฐ์ค๋ณด๋ค ์์ ๊ฐ๊ณผ ํฐ ๊ฐ์ ๋ถ๋ฆฌํ ํ, ๋ค์ ํฉ์น๋ค
def qSort(ns, asc=True):
if len(ns) < 2:
return ns
midIdx = len(ns) // 2
midval = ns[midIdx]
smallNums = [] ; sameNums = []
bigNums = []
for n in ns:
if n < midval:
smallNums.append(n)
elif n == midval:
sameNums.append(n)
else:
bigNums.append(n)
if asc:
return qSort(smallNums, asc=asc) + sameNums + qSort(bigNums, asc=asc)
else:
return qSort(bigNums, asc=asc) + sameNums + qSort(smallNums, asc=asc)
import quickMod
import random
nums = random.sample(range(1, 100), 10)
print(f'notSorted rNums : {nums}')
qSort=quickMod.qSort(nums)
print(f'merge sorted rNums ASC : {qSort}')
qSortdsce=quickMod.qSort(nums, False)
print(f'merge sorted rNums DSCE : {qSortdsce}')
>>>>
notSorted rNums : [74, 18, 42, 54, 24, 69, 34, 77, 71, 47]
merge sorted rNums ASC : [18, 24, 34, 42, 47, 54, 69, 71, 74, 77]
merge sorted rNums DSCE : [77, 74, 71, 69, 54, 47, 42, 34, 24, 18]
'Study_note(zb_data) > Python' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Box plot์ ๋ํด์ (0) | 2023.09.28 |
---|---|
์คํฐ๋ ๋ ธํธ (์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ํ์ด)_0726 (0) | 2023.08.03 |
์คํฐ๋ ๋ ธํธ (์๊ณ ๋ฆฌ์ฆ 1-18)_0724 (0) | 2023.07.31 |
์คํฐ๋ ๋ ธํธ (์๋ฃ๊ตฌ์กฐ ๋ฌธ์ ํ์ด)_0721 (0) | 2023.07.24 |
์คํฐ๋ ๋ ธํธ (์๋ฃ๊ตฌ์กฐ 27~38)_0720 (0) | 2023.07.24 |