복습
단항 연산자
Operator | Description | Example |
---|
= | 왼쪽 값을 오른쪽에 할당 | a = a → a = a |
+= | 왼쪽 값에 오른쪽 값을 더하고 왼쪽에 할당 | a += b → a = a + b |
-= | 왼쪽 값에 오른쪽 값을 빼고 왼쪽에 할당 | a -= b → a = a - b |
*= | 왼쪽 값에 오른쪽 값을 곱하고 왼쪽에 할당 | a *= b → a = a * b |
/= | 왼쪽 값에 오른쪽 값을 나누고 왼쪽에 할당 | a /= b → a = a / b |
//= | 왼쪽 값에 오른쪽 값을 나눈 몫을 왼쪽에 할당 | a //= b → a = a // b |
%= | 왼쪽 값에 오른쪽 값을 나눈 나머지를 왼쪽에 할당 | a %= b → a = a % b |
**= | 왼쪽 값에 오른쪽 값을 제곱하고 왼쪽에 할당 | a **= b → a = a ** b |
- 에러 종류 확인
- 맨 아랫줄 에러 메세지 확인
- Type(자료형이 부적절), Syntax(문법 오류), Index(없는 접근)
- Name(객체가 없음), Attribute(속성이 없음)
- Value(자료형이 부적절), Import(모듈 설치 필요)
- Trackback & most recent call last
- 뒤에서부터 가장 최근 셀까지 오류를 모아옴
- 화살표를 통해 에러 위치 확인
- 간접적으로 영향을 주는 코드 확인
- 위아래 괄호와 따옴표 확인
- stack overflow에게, 상세한 내용은 질문법으로
- 코드 리뷰
- 오류 메시지
- 로그
- 테스트
- 선례 찾기
실습
01 나눗셈 연산 프로그램
nums = []
for i in 'AB':
nums += [int(input(f'숫자 {i}를 입력하세요: '))]
div, mod = nums[0].__divmod__(nums[1])
print(f'{nums[0]} 나누기 {nums[1]}는 몫이 {div}이고, 나머지가 {mod}입니다.')
02 text 다루기
temp = text.replace('L', 'a')
temp = temp.replace(' ', '')
temp = temp.strip('Lorem.')
new_text = []
for i in text.split():
if i[0] not in 'Mm' and i[-1] not in 'Mm':
new_text += [i]
else:
print(i)
' '.join(new_text)
03 반복문과 조건문
for i in range(1, 101):
if i % 3 == 0:
print(i, end = '\t')
else:
print(False, end = '\t')
if i % 10 == 0:
print()
04 팩토리얼과 이중 반복문
factorial = 1
for i in range(1, 100):
factorial *= i
if i % 2 == 1:
print(factorial)
continue
print('짝수')
While
조건에 맞춰 종료
ind = 0
while True:
print('반복문이 실행되고 있습니다')
ind += 1
if ind == 3:
break
for 처럼 while 사용
ind = 0
while ind < 3:
print('반복문이 실행되고 있습니다')
ind += 1
다중 반복문
list1 = [[1,2,3],[4,5,6],[7,8,9]]
for i in list1:
for j in i:
print(j)
실습
While
01 요소 안에 요소 접근
list1 = [(4,5),(8,9)]
ind = 0
while ind < 2:
print(list1[ind][0], list1[ind][1])
ind += 1
02 데이터 한줄 쓰기
text = '''반복문을 이용하면
여러 줄의 출력도
하나의 프린트문으로 출력할 수
있습니다.'''
texts = text.split('\n')
data = [[] for i in range(len(max(texts)))]
i = 0
while i < len(texts):
j = 0
while j < len(max(texts)):
if j < len(texts[i]):
data[j] += [texts[i][j] + '\t']
else:
data[j] += ['\t']
j += 1
i += 1
i = len(data) - 1
while i > 0:
j = 0
while j < len(data[0]):
print(data[i][j], end = '')
j += 1
print()
i -= 1
다중 반복문
list1 = [[1,2,3],[4,5,6],[7,8,9],[0,9,8],[7,6,5],[4,3,2]]
01 위 리스트에서 짝수번째 자리에 있는 리스트에서 홀수번째 자리의 값을 출력하기
for i in range(0, len(list1), 2):
for j in range(1, len(list1[i]), 2):
print(list1[i][j])
과제
01 1 ~ 입력 숫자 범위에서 짝수만 골라 출력, 홀수는 합을 구함
num = int(input())
clear_output(wait=True)
sum = 0
for i in range(1, num + 1):
sum += i
if i % 2 == 0:
print(i , end = ' ')
else:
print(sum, end = ' ')
02 sin 파 그리기
import math
row, col = 70, 30
data = [[' ' for j in range(row)] for i in range(col)]
for i in range(row):
data[int(math.sin(math.pi * (i * 12) / 180) * (col / 2) + (col / 2))][i] = '*'
for i in data:
print(''.join(i))
03 swiss roll dataset 만들기
vects = [13, 14]
r = 0.1
d = 45
d2r = lambda x : math.pi / 180 * x
points = []
for i in range(20):
point = []
funcs = [math.cos, math.sin]
for j in range(2):
point.append(int(vects[j] + r * i * funcs[j](d2r(d * i)) * 10))
points.append(tuple(point))
print(points)
row, col = 30, 33
data = [[' ' for j in range(row)] for i in range(col)]
for x, y in points:
data[y][x] = '*'
for i in data:
print(' '.join(i))
회고
- 에러를 읽는 방법을 통해 앞으로 생길 다양한 에러를 어떻게 해결할 것인지 생각하게 됨
- 복습을 통해 앞선 내용을 상기하게 됨
- while문을 사용하여, 다양한 경우 유동적인 코드를 짤 수 있게 됨
- 다중 반복문에 성능 하락과 다양한 알고리즘의 성능표를 알게 됨
- sin파와 스위스롤을 그리면서, 2차원 좌표에 데이터를 찍는 연습을 하게 됨
Ref