기초수학
38_[연습문제] 시그마
userA1 = int(input('첫 번째 항 입력: '))
userR = int(input('공비 입력: '))
userN = int(input('N 입력: '))
valueN = 1
sumN = 0
for i in range(1, userN+1):
valueN *= userR
sumN += valueN
valueN = format(valueN, ',')
sumN = format(sumN, ',')
print(valueN)
print(sumN)
39_[연습문제] 계차수열
inputA1 = int(input('a1 입력: '))
inputN = int(input('n 입력: '))
valueN = 0
inputB1 = int(input('b1 입력: '))
inputBd = int(input('공차 입력: '))
valueBN = 0
n = 1
flag = True
while flag:
if n == 1:
valueN = inputA1
valueBN = inputB1
n += 1
elif n <= inputN:
valueN += valueBN
valueBN += inputBd
n += 1
else:
flag = False
print(valueN)
- 일반항을 구하는 공식을 굳이 외우고 싶지 않아서, 우선 while문으로 풀었음
- 수학 공식 외우는 건 쉽지 않아요...
40_[연습문제] 피보나치수열
inputN = int(input('n 입력: '))
valueA = 0
valueB = 0
valueN = 0
sumN = 0
n = 1
while n <= inputN:
if n == 1:
valueN = 1
sumN += valueN
elif n == 2:
valueB = valueN
valueN = valueA + valueB
sumN += valueN
else:
valueA = valueB
valueB = valueN
valueN = valueA + valueB
sumN += valueN
n += 1
print(f'{inputN}항의 값: {valueN}')
print(f'{inputN}까지의 합: {sumN}')
41_[연습문제] 팩토리얼
def facFun(n):
num = 1
for i in range(1, n+1):
num *= i
return num
userNum = int(input('숫자를 입력하세요: '))
print(f'{userNum}! : {facFun(userNum)}')
def facFun2(n):
if n == 1:
return n
return n * facFun2(n-1)
userNum = int(input('숫자를 입력하세요: '))
print(f'{userNum}! : {facFun2(userNum)}')
import math
userNum = int(input('숫자를 입력하세요: '))
math.factorial(userNum)
print(f'{userNum}! : {math.factorial(userNum)}')
- 😉 재귀 함수 어렵지만 나중에 많이 써먹어야 할 듯 하니 친해지기!
42_[연습문제] 군 수열
valueChild = 0
valueMother = 0
valueN = 0
sumN = 0
k = 1
nCnt = 1
flag = True
while flag:
for i in range(1, k+1):
valueChild = i
valueMother = k - i + 1
print(f'{valueChild}/{valueMother} ', end='')
valueN = valueChild / valueMother
sumN += valueN
nCnt += 1
if sumN > 100:
flag = False
k += 1
print()
print(f'{nCnt}항')
print(f'합: {round(sumN, 2)}')
- 분모가 -1 되는걸 표현한다고 for문을 두개 썼더니 제대로 안돌아감... 마이너스 되는건 k와 i값을 빼고 1을 더해서 표현할 수 있음!!! 수학적인 머리 필요 ㅠㅠ
- while, for, if 문의 indent에 따라 결과값이 완전히 달라진다
43_[연습문제] 순열
- 순열 공식 한번 더 확인
nPr = n (n-1) (n-2) * ... (n-r+1)
userN = int(input('numN 입력: '))
userR = int(input('numR 입력: '))
result = 1
for i in range(userN, (userN-userR), -1):
print(f'n: {i}')
result *= i
print(f'result: {result}')
import math
userNum1 = int(input('userNum1: '))
userNum2 = int(input('userNum2: '))
result = math.factorial(userNum1) * math.factorial(userNum2)
print(f'경우의 수: {result}')
44_[연습문제] 조합
import math
userN = int(input('n 입력: '))
userR = int(input('r 입력: '))
resultP = 1
for i in range(userN, userN-userR, -1):
resultP *= i
resultC = resultP / math.factorial(userR)
print(f'result: {int(resultC)}')
45_[연습문제] 확률
def combiFun():
import math
userN = int(input('n 입력: '))
userR = int(input('r 입력: '))
resultP = 1
resultC = 1
for i in range(userN, userN-userR, -1):
resultP *= i
resultC = resultP / math.factorial(userR)
return resultC
resultM = combiFun()
resultK1 = combiFun()
resultK2 = combiFun()
final = (resultK1 * resultK2 / resultM) * 100
final = round(final, 2)
print(f'{final}%')
자료구조
13_리스트의 특정 아이템 삭제
remove() 함수를 이용해서 특정 아이템을 삭제
- 아이템의 내용을 직접 써서 삭제!
- 리스트의 앞에 있는 한 개의 아이템만 삭제 가능함. 중복값 여러개를 한번에 삭제하려면 while문을 이용하자.
sports = ['테니스', '농구', '마라톤', '수영', '사격', '수영', '농구']
print(sports)
sports.remove('수영')
print(sports)
while '농구' in sports:
sports.remove('농구')
print(sports)
toDoList = ['마케팅 회의', '회의록 정리', '점심 약속', '월간 업무 보고', '치과 방문', '마트 장보기']
print(toDoList)
removeItem = input('삭제 대상 입력: ')
toDoList.remove(removeItem)
print(toDoList)
toDoList = ['국어', '영어', '수학', '과학', '국사']
print(toDoList)
removeItem = input('삭제 대상: ')
while removeItem in toDoList:
toDoList.remove(removeItem)
print(toDoList)
14_리스트 연결
extend()는 리스트에 또다른 리스트를 연결하여 확장
- 덧셈 연산자를 이용해서 리스트 연결 가능
myList = [1 ,3 ,5, 6, 7]
friendList = [2, 3, 5, 8, 10]
addList = myList + friendList
result = []
for item in addList:
if item not in result:
result.append(item)
print(result)
15_리스트 아이템 정렬
sort() 함수: 오름차순으로 정렬
sort(reverse=True)함수: 내림차순으로 정렬
scoreList = [9.5, 8.9, 9.2, 9.8, 8.8, 9.0]
scoreList.sort()
scoreList.pop(0)
scoreList.pop(len(scoreList)-1)
print(scoreList)
sumN = 0
avg = 0
for score in scoreList:
sumN += score
avg = sumN / len(scoreList)
print('합계: %.2f' % sumN)
print('평균: %.2f' % avg)
- 소수점 두 번째 자리까지 표현하는 방법 외워두기!
16_리스트 아이템 순서 뒤집기
reverse() 함수를 이용하면 아이템 순서를 거꾸로 뒤집을 수 있음
secretNum = input('secret: ')
secretList = []
solvedAnswer = ''
for i in secretNum:
secretList.append(int(i))
secretList.reverse()
print(secretList)
val = secretList[0] * secretList[1]
secretList.insert(2, val)
val = secretList[3] * secretList[4]
secretList.insert(5, val)
val = secretList[6] * secretList[7]
secretList.insert(8, val)
val = secretList[9] * secretList[10]
secretList.insert(11, val)
print(secretList)
print(solvedAnswer)
17_리스트 슬라이싱
- [n:m]을 이용하면 리스트에서 원하는 아이템만 뽑아낼 수 있다
ex: [2:4] 인 경우, idx 2와 3의 값만 추출
- 값을 생략하는 경우, 맨 뒤 또는 맨 앞을 참조
- -1 값을 입력하는 경우, 뒤에서부터 카운트
- [n:m:x] 와 같이 마지막 x 값을 추가하면 x칸에 하나씩 건너뛰기가 가능
- 슬라이싱을 이용해서 아이템 변경이 가능
slide()함수도 이용 가능
students = ['봉석', '희수', '강훈', '기수', '별']
print(students[:3])
print(students[1:-2])
print(students[slice(3, 5)])
students[3:5] = ['양아치', '눈치빵']
print(students)