#함수의 기본
변수 : 값을 저장하는 역할 (소문자로 쓴다)
상수: 고정된 값 ( 대문자로 쓴다)
파라미터 : 함수에 넘겨주는 값
return : 정보를 받고 계산 값을 돌려준다 (반환 값)
ex)
def solution(x):
return x*x
print(solution(4) + solution(3))
print(solution(4) + solution(3)) 에서 solution(4) 부분을 함수로 넘겨서 return x*x 실행 → return 4 * 4 = 16
print(solution(4) + solution(3)) 에서 solution(3) 부분을 함수로 넘겨서 return x*x 실행 → return 3 * 3 = 9
결과 값 : print(solution(4) + solution(3)) → 16 + 9 = 25
전역변수 global 키워드를 이용해서 함수 바깥에 선언된 변수를 참조할 수 있다!
a = 10
def func():
a += 1
print(a)
func()
#결과 :
Traceback (most recent call last):
File "main.py", line 7, in <module>
func()
File "main.py", line 4, in func
a += 1
UnboundLocalError: local variable 'a' referenced before assignment
#이렇게 a라는 변수가 지정되지 않았다고 오류가 뜬다.
#global키워드를 이용해서 오류를 수정해보자!
a = 10
def func():
global a
a += 1
print(a)
func()
#결과 :
11
#람다 표현식
formating 유형
wage = 5 # 시급 (1시간에 5달러)
exchange_rate = 1142.16 # 환율 (1달러에 1142.16원)
# "1시간에 5달러 벌었습니다." 출력
print("{}시간에 {}{} 벌었습니다.".format(1, wage * 1, "달러"))
# "5시간에 25달러 벌었습니다." 출력
print("{}시간에 {}{} 벌었습니다.".format(5, wage * 5, "달러"))
# "1시간에 5710.8원 벌었습니다." 출력
print("{}시간에 {}{} 벌었습니다.".format(1, wage * 1 * exchange_rate, "원"))
# "5시간에 28554.0원 벌었습니다." 출력
print("{}시간에 {:.1f}{} 벌었습니다.".format(5, wage * 5 * exchange_rate, "원"))
{:.1f} 는 소수점 첫째 짜리 까지 나타내는 문법이다.
syntactic sugar ( 암기하기!)
# 다음 두 줄은 같습니다
x = x + 1
x += 1
# 다음 두 줄은 같습니다
x = x + 2
x += 2
# 다음 두 줄은 같습니다
x = x * 2
x *= 2
# 다음 두 줄은 같습니다
x = x - 3
x -= 3
# 다음 두 줄은 같습니다
x = x / 2
x /= 2
# 다음 두 줄은 같습니다
x = x % 7
x %= 7
거스름돈 계산기
def calculate_change(payment, cost):
total_change = payment - cost # 거스름든 총액
fifty_count = total_change // 50000 # 5만원 지폐 개수 (// 버림 나눗셈 연산)
ten_count = (total_change % 50000) // 10000 # 50,000원 지폐로 거슬러 주고 남은 금액 (% 나머지 연산)
five_count = (total_change % 10000) // 5000
one_count = (total_change % 5000) // 1000
print("50000원 지폐 : {}장".format(fifty_count))
print("10000원 지폐 : {}장".format(ten_count))
print("5000원 지폐 : {}장".format(five_count))
print("1000원 지폐 : {}장".format(one_count))
# 테스트 코드
calculate_change(100000, 33000)
print() #띄어 쓰기
calculate_change(500000, 378000)
#실행결과
50000원 지폐 : 1장
10000원 지폐 : 1장
5000원 지폐 : 1장
1000원 지폐 : 2장
50000원 지폐 : 2장
10000원 지폐 : 2장
5000원 지폐 : 0장
1000원 지폐 : 2장
→ calculate_change 라는 함수를 작성 후 payment와 cost를 파라미터로 받는다. 그 후 거스름 돈 총액을 변수로 만든다. 버림 나눗셈 (//)을 사용하여 지폐개수를 계산한다.
if문 연습
in 연산자, not in 연산자가 제공된다.
x in 리스트 : 리스트 안에 x가 있으면 true
x not in 리스트 : 리스트 안에 x가 없으면 true
pass라는 키워드를 통해 코드실행을 건너뛸 수 있다.
score = 70
if score >=60:
pass # if 조건문을 건너뛰고 실
else:
print('성적이 60점 미만입니다.')
print('프로그램을 종료합니다.')
#결과 :
프로그램을 종료합니다.
def print_grade(midterm_score, final_score):
total = midterm_score + final_score
if total >= 90:
print("A")
elif 80 <= total:
print("B")
elif 70 <= total:
print("C")
elif 60 <= total:
print("D")
else:
print("F")
# 테스트 코드
print_grade(40, 45)
print_grade(20, 35)
print_grade(30, 32)
print_grade(50, 45)
#실행결과
B
F
D
A
→B를 받기 위해서는 총점수가 '80점 이상이면서 90점 미만'이어야 하는데 위에 작성된 조건을 보면 80 <= total < 90이 아니라 그냥 total >= 80이다. elif문으로 넘어왔다는 것은 앞선 if문의 조건 부분을 통과하지 않았다는 뜻이기 때문. 그러니까 점수가 90점 미만이다라는 뜻. 굳이 80 <= total < 90으로 작성 불필요.
조건문을 간소화하여 간단히 쓸 수 있다.
score = 85
if score >= 80: result = "success"
else: result = "fail"
#결과 :
success
score = 85
result = "success" if score >= 80 else "fail"
print(result)
#결과 :
success
# 위아래 둘다 같은 값을 반환한다.
while문과 if문을 활용하여, 1,000보다 작은 자연수 중 2 또는 3의 배수의 합을 출력
i = 1
total = 0 #누적된 합을 보관하는 변수
while i < 1000:
if i % 2 == 0 or i % 3 == 0: #조건 : **2 또는 3의 배수 출력**
total += i # total = total + i와 동일
i += 1 # i = i + 1과 동일
print(total)
#실행결과
333167
i % 2 == 0 or i % 3 == 0 코드는 2 또는 3의 배수 즉 나누었을 때 0으로 나누어 떨어지는 값
정수 120의 약수를 모두 출력하고, 총 몇 개의 약수가 있는지 출력
i = 1
N = 120 #정수 변수
count = 0 #개수를 세어주는 변수
while i <= N:
if N % i == 0: # 정수의 약수는 정수를 i로 나누었을때 0이 되야한다.
print(i)
count += 1 # 120의 약수를 받을때마다 1씩 증가
i += 1
print("{}의 약수는 총 {}개입니다.".format(N,count))
#실행결과
1
2
3
4
5
6
8
10
12
15
20
24
30
40
60
120
120의 약수는 총 16개입니다.
피보나치수열의 첫 50개 항을 차례대로 출력
i = 1
pervious = 0
current = 1
while i <= 50:
print(current)
temp = pervious # temp값으로 0 저장
pervious = current # pervious 값이 1로 저장
current = current + temp # 1로 저장
i += 1
피보나치 수열의 항은 앞선 두 항의 합으로 계산. 따라서 피보나치 수열의 항들을 순서대로 출력하기 위해서는 늘 마지막 두 항을 변수에 보관해야 한다. ex) 1,1,2,3,5,8,13,21,34,55,… '현재 항'은 변수 current에, 그리고 '직전 항'은 변수 previous에 저장한다. 여기서 temp 변수 역할이 중요하다. 만약 temp 가 없다면 기존의 pervious 값을 잃어버리게 되어 계산 오류가 일어난다. 꼭 기존값도 저장할 수 있는 새로운 변수 설정을 해줘야 한다.
구구단 코드
i = 1
while i <= 9:
j = 1
while j <= 9:
print("{} * {} = {}".format(i, j, i * j))
j += 1
i += 1
#실행결과
1 * 1 = 1
1 * 2 = 2
1 * 3 = 3
.
.
.
9 * 7 = 63
9 * 8 = 72
9 * 9 = 81
#for문을 이용해서 간단히 가능하다.
for i in range(2,10):
for j in range(1,10):
print(f"{i} x {j} = {i * j}")
#결과 :
2 x 1 = 2
2 x 2 = 4
2 x 3 = 6
2 x 4 = 8
2 x 5 = 10
2 x 6 = 12
2 x 7 = 14
2 x 8 = 16
2 x 9 = 18
3 x 1 = 3
3 x 2 = 6
3 x 3 = 9
3 x 4 = 12
3 x 5 = 15
...
j = 1 while j <= 9: print("{} * {} = {}".format(i, j, i * j)) j += 1 i가 1로 시작하여 위의 코드가 끝나고 다음 i 값의 while문 실행
#반복문으로 for문을 이용할 수 있다.
for 변수 in 리스트:
실행할 코드~~
array = [1, 2, 3, 4, 5]
for x in array:
print(x)
#결과 :
1
2
3
4
5
for문에서 연속적인 값을 불러올 때는 range()를 사용한다
range(시작 값, 끝 값 + 1)
result = 0
for i in range(1,10):
result += i
print(result)
#결과 :
45
#1부터 9까지의 홀수의 합을 구하는 코드
result = 0
for i in range(1,10):
if i % 2 == 0:
continue #남은코드의 실행을 건너뛰고 다음 반복 수행
result += i
print(result)
#결과 :
25
#80점 넘으면 합격 프로그
scores = [90, 80, 25, 83,79]
for i in range(5):
if scores[i] >= 80:
print(i + 1, "번 학생은 합격입니다.")
#결과 :
1 번 학생은 합격입니다.
2 번 학생은 합격입니다.
4 번 학생은 합격입니다.
scores = [90, 80, 95, 83,69]
cheating_student = {2,4}
for i in range(5):
if i + 1 in cheating_student:
continue #continue를 이용해서 특정 부정행학생 걸러내기
if scores[i] >= 80:
print(i + 1, "번 학생은 합격입니다.")
#결과 :
1 번 학생은 합격입니다.
3 번 학생은 합격입니다.
#표준 라이브러리
itertools : 파이썬에서 반복되는 형태의 데이터를 처리하기 위한 기능 제공
heapq : 힙(Heap) 자료구조를 제공
bisect : 이진탐색 (Binary Search) 기능 제공
collections : 덱(deque), 카운터(Counter) 등의 자료구조 포함
math: 필수적인 수학기능 제공