Q. 1부터 사용자가 입력한 숫자까지의 약수와 소수를 리스트에 각각 저장하고, 이것을 출력하는 프로그램을 만들어보자.
inputNumber = int(input('1보다 큰 정수 입력: '))
listA, listB = [], [] # 소수, 약수
for n in range(1, inputNumber+1):
if n == 1 or inputNumber % n == 0:
listB.append(n)
if n >= 2:
flag = True
for i in range(2, n):
if n % i == 0:
flag = False
break
if flag:
listA.append(n)
print(f'{inputNumber}의 소수: {listA}')
print(f'{inputNumber}의 약수: {listB}')
Q. 1부터 100사이에 난수 10개를 생성한 후 짝수와 홀수를 구분해서 리스트에 저장하고 각각의 개수를 출력하는 프로그램을 만들어보자
import random
randomList = random.sample(range(1, 101), 10) # 1부터 100까지 10개 난수 생성
evens, odds = [], []
for i in randomList:
if i % 2 == 0:
evens.append(i)
else:
odds.append(i)
print(f'짝수: {evens}, 개수: {len(evens)}개')
print(f'홀수: {odds}, 개수: {len(odds)}개')
1부터 100까지의 범위에서 10개 난수 생성
randomList = random.sample(range(1, 101), 10)
Q.다음은 공원 입장료를 나타낸 표이다. 1일 총 입장객이 100명이라고 할 때, 1일 전체 입장 요금을 구하는 프로그램을 만들어보자.
단, 입장 고객의 나이는 난수를 이용한다.
import random
randomList = [random.randint(1, 100) for i in range(100)] # 100개 난수 생성
guestsDic ={'영유아':0, '어린이':0, '청소년':0, '성인':0, '어르신':0}
for guest in randomList:
if guest <= 7:
guestsDic['영유아'] += 1
elif guest <= 13:
guestsDic['어린이'] += 1
elif guest <= 19:
guestsDic['청소년'] += 1
elif guest <= 64:
guestsDic['성인'] += 1
elif guest >= 65:
guestsDic['어르신'] += 1
print('-'*25)
print(f'영유아\t: {guestsDic["영유아"]}명\t: {0}원')
print(f'어린이\t: {guestsDic["어린이"]}명\t: {200 * guestsDic["어린이"]}원')
print(f'청소년\t: {guestsDic["청소년"]}명\t: {300 * guestsDic["청소년"]}원')
print(f'성인\t\t: {guestsDic["성인"]}명\t: {500 * guestsDic["성인"]}원')
print(f'어르신\t: {guestsDic["어르신"]}명\t: {0}원')
print('-'*25)
print(f'1일 요금 총합계: {(200 * guestsDic["어린이"]) + (300 * guestsDic["청소년"]) + (500 * guestsDic["성인"])}원')
print('-'*25)
Q. 4개의 숫자 중 서로 다른 숫자 2개를 선택해서 만들 수 있는 모든 경우의 수를 출력하는 프로 그램을 만들어보자.
numbers = [4, 6, 7, 9]
result = []
for n1 in numbers:
for n2 in numbers:
if n1 != n2:
result.append([n1, n2])
print(f'result: {result}')
print(f'result len: {len(result)}')
from itertools import permutations
resultPM = list(permutations(numbers, 2))
print(f'resultPM: {resultPM}')
print(f'resultPM len: {len(result)}')
순열 공식: n! / (n-r)!
# 수학 순열
import math
permutation = math.factorial(len(numbers)) / math.factorial(len(numbers) - 2)
print(f'permutation: {int(permutation)}')
Q.다음 2개의 튜플에 대해서 합집합과 교집합을 출력해보자.
tuple1 = 1, 3, 2, 6, 12, 5, 7, 8
tuple2 = 0, 5, 2, 9, 8, 6, 17, 3
tempHap, tempGyo = list(tuple1), []
for n in tuple2:
if n not in tempHap:
tempHap.append(n)
else:
tempGyo.append(n)
tempHap = tuple(tempHap)
tempGyo = tuple(tempGyo)
print(f'합집합(중복x)\t: {tempHap}')
print(f'교집합\t\t: {tempGyo}')
Q. 다음 튜플의 과일 개수에 대해서 오름차순 및 내림차순으로 정렬해보자.
fruits = ({'수박':8}, {'포도':13}, {'참외':12}, {'사과':17}, {'자두':19}, {'자몽':15})
fruits = list(fruits)
cIdx, nIdx, eIdx = 0, 1, len(fruits)-1
flag = True
while flag:
curDic = fruits[cIdx]
nextDic = fruits[nIdx]
curDicCnt = list(curDic.values())[0]
nextDicCnt = list(nextDic.values())[0]
if nextDicCnt < curDicCnt: # 오름차순 -> 내림차순은 '>'로 바꾸면 됨
fruits.insert(cIdx, fruits.pop(nIdx))
nIdx = cIdx + 1
continue
nIdx += 1
if nIdx > eIdx:
cIdx += 1
nIdx = cIdx + 1
if cIdx == 5:
flag = False
fruits = tuple(fruits)
print(fruits)
- 출력결과
Q. 학급별 학생 수를 나타낸 튜플을 이용해서, 요구 사항에 맞는 데이터를 출력하는 프로그램을 만들어보자。
studentCnt = ({'cls01':18},
{'cls02':21},
{'cls03':20},
{'cls04':19},
{'cls05':22},
{'cls06':20},
{'cls07':23},
{'cls08':17},)
totalCnt, minClsCnt, maxClsCnt = 0, 0, 0
minCls, maxCls = '', ''
deviation = []
for idx, dic in enumerate(studentCnt):
for k, v in dic.items():
totalCnt += v
if maxClsCnt < v:
maxClsCnt = v
maxCls = k
if minClsCnt == 0 or minClsCnt > v:
minClsCnt = v
minCls = k
avgCnt = totalCnt / len(studentCnt)
print(f'전체 학생 수: {totalCnt}명')
print(f'평균 학생 수: {avgCnt}명')
print(f'학생 수가 가장 적은 학급: {minCls}({minClsCnt}명)')
print(f'학생 수가 가장 많은 학급: {maxCls}({maxClsCnt}명)')
for idx, dic in enumerate(studentCnt):
for k, v in dic.items():
deviation.append({k: v - avgCnt})
print(f'학급별 학생 편자: {deviation})')
"이 글은 제로베이스 데이터 취업 스쿨 강의 자료 일부를 발췌한 내용이 포함되어 있습니다."