Q. 숫자로 이루어진 리스트에서 사용자가 입력한 숫자를 검색하는 모듈 제작
-검색 모듈은 선형 알고리즘을 이용
-리스트는 1=20까지 정수 중에서 난수 10개 이용
-검색 과정을 로그로 출력
-검색에 성공하면 해당 정수의 인덱스 출력, 검색결과 없다면 -1 출력
<lineMod 모듈>
def searchNumberByLineAl(ns, sn):
searchResultIdx = -1
print(f'numbers: {ns}')
print(f'search numbers: {sn}')
n = 0
while True:
if n == len(ns):
print('search Fail')
break
elif ns[n] == sn:
searchResultIdx = n
print('search success')
print(f'search Result Idx: {searchResultIdx}')
break
n += 1
return searchResultIdx
__________________________________________________________
<실행문>
import lineMod
import random
if __name__ == '__main__':
searchNumber = int(input('찾으려는 숫자 입력: '))
numbers = random.sample(range(1, 21), 10)
resultIdx = lineMod.searchNumberByLineAl(numbers, searchNumber)
if resultIdx == -1:
print('No results found')
print(f'search result index: {resultIdx}')
else:
print('>>>search results<<<')
print(f'search result Index: {resultIdx}')
print(f'search result number: {numbers[resultIdx]}')
Q. 숫자로 이루어진 리스트에서 사용자가 입력한 숫자 검색하는 모듈
-검색모듈은 이진검색 알고리즘 이용
-리스트는 [1, 2, 4, 6, 7, 8, 10, 11, 13, 15, 16, 17, 20, 21, 23, 24, 27, 23] 이용
-검색과정 로그 출력
-검색에 성공하면 인덱스 출력, 검색 결과 없으면 -1 출력
<binaryMod 모듈>
def searchNumberByBinaryAl(ns, sn):
searchResultIdx = -1
startIdx = 0
endIdx = len(ns) -1
midIdx = (startIdx + endIdx) // 2
midVal = ns[midIdx]
print(f'startIdx: {startIdx}, endIdx: {endIdx}')
print(f'midIdx: {midIdx}, midVal: {midVal}')
while sn >= ns[0] and sn <= ns[len(ns) -1]:
if sn == ns[len(ns) -1]:
searchResultIdx = len(ns) -1
break
if startIdx + 1 == endIdx: #★
if ns[startIdx] != sn and ns[endIdx] != sn:
break
if startIdx + 1 == endIdx:
if ns[startIdx] != sn and ns[endIdx] != sn:
break
if sn > midVal:
startIdx = midIdx
midIdx = (startIdx + endIdx) // 2
midVal = ns[midIdx]
print(f'+startIdx: {startIdx}. endIdx: {endIdx}')
print(f'+midIdx: {midIdx}, midVal: {midVal}')
elif sn < midVal:
endIdx = midIdx
midIdx = (startIdx + endIdx) // 2
midVal = ns[midIdx]
print(f'-startIdx: {startIdx}, endIdx: {endIdx}')
print(f'-midIdx: {midIdx}, midVal: {midVal}')
elif sn == midVal:
searchResultIdx = midIdx
break
return searchResultIdx
_________________________________________________________
<실행문>
import binaryMod as ba
if __name__ == '__main__':
nums = [1, 2, 4, 6, 7, 8, 10, 11, 13, 15, 16, 17, 20, 21, 23, 24, 27, 23]
searchNum = int(input('input search num:'))
resultIdx = ba.searchNumberByBinaryAl(nums, searchNum)
print(f'nums: {nums}')
if resultIdx == -1:
print('no result Founded')
print(f'search result Idx: {resultIdx}')
else:
print('>>search result found<<')
print(f'search result Idx: {resultIdx}')
print(f'search result number: {nums[resultIdx]}')
Q. 숫자로 이루어진 리스트에서 아이템의 순위를 출력하고 순위에 따라 아이템을 정렬하는 모듈. 리스트는 50-100 난수 20개 이용
<rankMod 모듈>
def rank(ns):
ranks = [0 for i in range(len(ns))] #0으로 초기화된 len(ns)개의 아이템
for idx, n1 in enumerate(ns):
for n2 in ns: #나와 모든 아이템을 비교하기위해 중첩
if n1 < n2:
ranks[idx] += 1
print(f'nums: {ns}')
print(f'rank: {ranks}')
for i, n in enumerate(ns):
print(f'num: {n} \t rank: {ranks[i] + 1}')
sortedNums = [0 for n in range(len(ns))]
for idx, rank in enumerate(ranks):
sortedNums[rank] = ns[idx]
return sortedNums
________________________________________________________________________
<실행문>
import random
import rankMod as rm
if __name__ == '__main__':
nums = random.sample(range(50, 101), 20)
sNums = rm.rank(nums)
print(f'sNum: {sNums}')
Q. 알파벳 문자들과 정수들에 대한 순위를 정하는 순위 알고리즘을 이용.(단, 알파벳은 아스키코드 값을 이용)
datas = [32, 'a', 'z', 45, 'G', 39, 50, 'T', 't', 22, 31, 55, 's', 63, 59, 'E']
print(f'datas: {datas}')
ascIIdatas = []
for data in datas:
if str(data).isalpha():
ascIIdatas.append(ord(data))
continue
ascIIdatas.append(data)
print(f'ascIIdatas: {ascIIdatas}')
ranks = [0 for i in range(len(ascIIdatas))]
print(f'ranks before: {ranks}')
for idx, data1 in enumerate(ascIIdatas):
for data2 in ascIIdatas:
if data1 < data2:
ranks[idx] += 1
print(f'ranks after: {ranks}')
for i, d in enumerate(datas):
print(f'data: {d:>2} \t ranke: {ranks[i] + 1}')
Q. 숫자로 이루어진 리스트를 버블정렬 알고리즘을 이용해서 오름차순과 내림차순으로 정렬하는 모듈(단, 정렬하는 과정도 출력)
<bubbleMod 모듈>
import copy
def sortedBubbleAl(ns, asc=True):
c_ns = copy.copy(ns)
length = len(c_ns) -1
for i in range(length):
for j in range(length -1):
if asc:
if c_ns[j] > c_ns[j+1]:
c_ns[j], c_ns[j+1] = c_ns[j+1], c_ns[j]
else:
if c_ns[j] < c_ns[j+1]:
c_ns[j], c_ns[j+1] = c_ns[j+1], c_ns[j]
print(f'ns: {c_ns}')
print()
return c_ns
____________________________________________________________
<실행문>
import random
import bubbleMod
if __name__ == '__main__':
nums = random.sample(range(1, 21), 10)
print(f'not sorted nums: {nums}')
result = bubbleMod.sortedBubbleAl(nums)
print(f'sorted nums by ASC: {result}')
result = bubbleMod.sortedBubbleAl(nums, asc=False)
print(f'sorted nums by DESC: {result}')
Q. 숫자로 이루어진 리스트를 삽입정력 알고리즘을 이용해서 오름차순과 내림차순으로 정렬하는 모듈(단, 정렬하는 과정도 출력)
<insertMod 모듈>
import copy
def sortInsertAl(ns, asc=True):
c_ns = copy.copy(ns)
length = len(c_ns) -1
for i in range(length):
for j in range(length -1):
if asc:
if c_ns[j] > c_ns[j+1]:
c_ns[j], c_ns[j+1] = c_ns[j+1], c_ns[j]
else:
if c_ns[j] < c_ns[j+1]:
c_ns[j], c_ns[j+1] = c_ns[j+1], c_ns[j]
print(f'c_ns: {c_ns}')
print()
return c_ns
___________________________________________________________
<실행문>
import random
import insertMod as im
if __name__ == '__main__':
nums = random.sample(range(1, 21), 10)
print(f'not sorted nums: {nums}')
result = im.sortInsertAl(nums)
print(f'sorted nums by ASC: {result}')
result = im.sortInsertAl(nums,asc=False)
print(f'sorted nums by DESC: {result}')
Q. 숫자로 이루어진 리스트를 선택정렬 알고리즘을 이용해서 오름차순과 내림차순으로 정렬하는 모듈 (단, 정렬하는 과정도 출력)
<insertMod 모듈>
import copy
def sortInsertAl(ns, asc=True):
c_ns = copy.copy(ns)
for i1 in range(1,len(c_ns)):
i2 = i1 -1
c_Num = c_ns[i1]
if asc:
while c_ns[i2] > c_Num and i2 >= 0:
c_ns[i2+1] = c_ns[i2]
i2 -= 1
else:
while c_ns[i2] < c_Num and i2 >= 0:
c_ns[i2+1] = c_ns[i2]
i2 -= 1
c_ns[i2 + 1] = c_Num
print(f'c_ns: {c_ns}')
return
________________________________________________________
<실행문>
import random
import insertMod
if __name__ == '__main__':
nums = random.sample(range(1, 21), 10)
print(f'not sorted nums:\n {nums}')
result = insertMod.sortInsertAl(nums)
print(f'sorted nums by ASC: \n{result}')
print(f'not sorted nums:\n {nums}')
result = insertMod.sortInsertAl(nums, asc=False)
print(f'sorted nums by DESC:\n {result}')
Q. 숫자로 이루어진 리스트를 병합정렬 알고리즘을 이용해서 오름차순과 내림차순으로 정렬하는 모듈(단, 정렬하는 과정도 출력)
<insertMod 모듈>
import copy
def sortSelectAl(ns, asc=True):
c_ns = copy.copy(ns)
for i in range(len(c_ns)-1):
minIdx = 1
for j in range(i+1, len(c_ns)):
if asc:
if c_ns[minIdx] > c_ns[j]:
minIdx = j
else:
if c_ns[minIdx] < c_ns[j]:
minIdx = j
c_ns[i], c_ns[minIdx] = c_ns[minIdx], c_ns[i]
print(f'nums: {c_ns}')
return c_ns
_____________________________________________________
<실행문>
import random
import selectMod as sm
if __name__ == '__main__':
nums = random.sample(range(1, 21), 10)
print(f'not sorted nums: {nums}')
result = sm.sortSelectAl(nums)
print(f'sorted nums by ASC: {result}')
print(f'not sorted nums: {nums}')
result = sm.sortSelectAl(nums, asc=False)
print(f'sorted nums by DESC: {result}')