๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Study_note(zb_data)/Python

์Šคํ„ฐ๋”” ๋…ธํŠธ (์•Œ๊ณ ๋ฆฌ์ฆ˜ 19-30)_0725

๐Ÿ“Œ ๊ทผ์‚ฟ๊ฐ’

  • ํŠน์ • ๊ฐ’(์ฐธ๊ฐ’)์— ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ๊ฐ’์„ ๊ทผ์‚ฟ๊ฐ’์ด๋ผ๊ณ  ํ•œ๋‹ค.
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]