복습

단항 연산자

OperatorDescriptionExample
=왼쪽 값을 오른쪽에 할당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

에러보는 법

  1. 에러 종류 확인
    • 맨 아랫줄 에러 메세지 확인
      • Type(자료형이 부적절), Syntax(문법 오류), Index(없는 접근)
      • Name(객체가 없음), Attribute(속성이 없음)
      • Value(자료형이 부적절), Import(모듈 설치 필요)
  2. Trackback & most recent call last
    • 뒤에서부터 가장 최근 셀까지 오류를 모아옴
    • 화살표를 통해 에러 위치 확인
  3. 간접적으로 영향을 주는 코드 확인
  4. 위아래 괄호와 따옴표 확인
  5. stack overflow에게, 상세한 내용은 질문법으로

오류를 고치는 방법

  1. 코드 리뷰
  2. 오류 메시지
  3. 로그
  4. 테스트
  5. 선례 찾기

실습

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 다루기

# L를 a로 바꿔라
temp = text.replace('L', 'a')
# 개행문자를 삭제해라
temp = temp.replace(' ', '')
# 앞뒤 Lorem.를 지워라
temp = temp.strip('Lorem.')

# 앞뒤에 M이나 m이 존재하는 단어를 찾아라
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 반복문과 조건문

# 3에 배수일 때, 숫자를 나머지는 False를 출력함
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

profile
DA DE DS

0개의 댓글