Ai Tech Pre-course Lec.1

Lilmeow·2023년 8월 30일
0

Boostcamp Step.1

목록 보기
1/10
post-thumbnail

Lec1: Conditionals and Loops

01_Condition

1) 학점 프로그램을 개발해보자

  • 점수에 따른 학점의 기준을 만든다
    ex) 95점 이상 A+, 60점 미만 F
  • 기준을 바탕으로 첫번쨰 줄의 점수를 판단한다
    ex) 38점은 60점 미만이므로 F
  • 다음 줄로 계속 이동하면서 두번째 조건을 반복한다
    ex) 37점은 60점 미만이므로 F
  • 더 이상 점수가 없을 때 프로그램을 종료한다

2) 조건문이란?

  • 조건에 따라 특정한 동작을 하게하는 명령어
  • 조건문은 조건을 나타내는 기준과 실행해야 할 명령으로 구성됨
    조건의 참, 거짓에 따라 실행해야 할 명령이 수행되거나 되지 않음
  • 파이썬은 조건문으로 if, else, elif 등의 예약어를 사용함

3) if-else 문법

if <조건>: # if를 쓰고 조건 삽입 후 " : " 입력
    <수행 명령 1-1> # 들여쓰기(indentation) 후 수행명령 입력
    <수행 명령 1-2> # 같은 조건하에 실행일 경우 들여쓰기 유지
else: # 조건이 불일치할 경우 수행할 명령 block
    <수행 명령 2-1> # 조건 불일치 시 수행할 명령 입력
    <수행 명령 2-2> # 조건 불일치 시 수행할 명령 들여쓰기 유지
  • 조건 판단 방법
  • 조건 일치 시 수행 명령 blcok ":"와 들여쓰기
  • 조건 불일치 시 수행 명령 block
print("Tell me your age?")
myage = int(input())
if myage < 30:
    print("Welcome to the Club")
else:
    print("Oh! No. You are not accepted")

Tell me your age?
32
Oh! No. You are not accepted

조건 판단 방법

  • if 다음에 조건을 표기하여 참 또는 거짓을 판단함
  • 참/거짓의 구분을 위해서는 비교 연산자를 활용
x < y    x > y
x <= y   x >= y
x == y   x is y
x != y   x is not y

is 연산은 메모리의 주소를 비교한다.

a = 1
b = 1
print(a == b)
print(a is b)

True
True

a = [1, 2, 3, 4, 5]
b = a[:]
print(a == b)
print(a is b)

True
False

b = a
print(a is b)

True

  • Python에서 -5 ~ 256끼지의 숫자는 정적 메모리에 주소가 할당되지만 이 범위 외의 숫자부터는 새로운 주소를 할당한다.
a = -5
b = -5
print(a is b)

True

a = -6
b = -6
print(a is b)

False

4) 조건 참/거짓의 구분

  • 숫자형의 경우는 수학에서의 참/거짓과 동일
  • 컴퓨터는 존재하면 참 없으면 거짓이라고 판단함
if 1:
    print("True")
else:
    print("False")

True

  • 마찬가지로 if "abc": True / if "": False

논리 키워드 사용 : and, or, not

  • 조건문을 표현할 때 집합의 논리 키워드를 함께 사용하여 참과 거짓을 판단하기도 함
a = 8, b = 5
if a == 8 and b == 4 # False
if a > 7 or b > 7 # True
if not (a > 7) # False]
boolean_list = [True, False, True, False, True]
all(boolean_list) # False
any(boolean_list) # True

5) 삼항 연산자(Ternary Operators)

  • 조건문을 사용하여 참일 경우와 거짓일 경우의 결과를 한줄에 표현
value = 12
is_even = True if value % 2 == 0 else False
print(is_even) # True
  • 마지막 조건문에 따라 Grade 값에 D가 할당됨
if score >= 90: grade = 'A'
if score >= 60: grade = 'B'
else: grade = 'F'
  • 첫 if문을 만족하면 그 밑의 elif문은 실행하지 않는다
if score >= 90: grade = 'A'
elif score >= 60: grade = 'B'
else: grade = 'F'
  • 예제
birth_year = int(input("당신이 태어난 년도를 입력해 주세요 : "))
age = 2023 - birth_year + 1
message = ""
if 20 <= age and age <= 26:
    message = "대학생"
elif 17 <= age and age < 20:
    message = "고등학생"
elif 14 <= age and age < 17:
    message = "중학생"
elif 8 <= age and age < 14:
    message = "초등학생"
else:
    print("학생이 아닙니다.")
print(message)

당신이 태어난 년도를 입력해 주세요 : 2000
대학생

02_Loop

1) 반복문이란?

  • 정해진 동작을 반복적으로 수행하게 하는 명령문
  • 반복문은 반복 시작 조건, 종료 조건, 수행 명령으로 구성됨
  • 반복문 역시 반복 구문은 들여쓰기와 block으로 구분됨
  • 파이썬은 반복문으로 for, while 등의 명령 키워드를 사용함

기본적인 반복문 : 반복 범위를 지정하여 반복문 수정

  • looper 변수에 1 할당
  • 'Hello' 출력
  • 리스트(대괄호 속 숫자들)에 있는 값 차례로 looper 할당
  • 5까지 할당한 후 반복 block 수행 후 종료
for looper in [1, 2, 3, 4, 5]:
    print(f"{looper} : Hello")

1 : Hello
2 : Hello
3 : Hello
4 : Hello
5 : Hello

2) Range() 사용하기

for looper in range(0, 5):
    print(f"{looper} : Hello")
  • range()는 마지막 숫자 바로 앞까지 리스트를 만들어준다.
range(1, 5) = [1, 2, 3, 4]
range(5) = range(0, 5) = [0, 1, 2, 3, 4]

3) 반복문 변수명

  • 임시적인 반복 변수는 대부분 i, j, k로 정한다
  • 이것은 수학에서 변수를 x, y, z로 정하는 것과 유사한 관례

4) 0부터 시작하는 반복문

  • 반복문은 대부분 0부터 반복을 시작
  • 이것도 일종의 관례로 1부터 시작하는 언어도 존재
  • 이진수가 0부터 시작하기 때문에 0부터 시작하는 걸 권장

5) 무한 Loop

  • 반복 명령이 끝나지 않는 프로그램 오류
  • CPU와 메모리 등 컴퓨터의 리소스를 과다하게 점유

6) For문의 다양한 반복문 조건 표현

  • 문자열을 하나씩 리스트로 처리 : 시퀀스형 자료형
for i in "abcdefg":
    print(i)
  • 각각의 문자열 리스트로 처리
for i in ['a', 'b', 'c']:
    print(i)
  • 간격을 두고 새기
for i in range(1, 10, 2): # 1부터 10까지 2씩 증가시키면서 반복문 수행
    print(i)
  • 역순으로 반복문 수행
for i in range(10, 1, -1): # 10부터 1까지 -1씩 감소시키면서 반복문 수행
    print(i)

7) While문

조건이 만족하는 동안 반복 명령문을 수행

  • i 변수에 1할당
  • i가 10미만인지 판단
  • 조건에 만족할 때 i 출력, i에 1을 더함
  • i가 10이 되면 반복 종료
i = 1
while i < 10:
    print(i)
    i += 1

for문은 while문으로 변환 가능

  • 반복 실행횟수를 명확히 알 때
for i in range(0, 5):
    print(i)
  • 반복 실행횟수가 명확하지 않을 때
i = 0
while i < 5:
    print(i)
    i = i + 1

8) 반복의 제어 : Break, Continue

  • Break : 특정 조건에서 반복 종료, else block이 수행되지 않는다.
for i in range(10):
    if i == 5:
        break
    print(i)
print("EOP")
  • Continue : 특정 조건에서 남은 반복 명령 Skip
for i in range(10):
    if i == 5:
        continue
    print(i)
print("EOP")
  • else : 반복 조건이 만족하지 않을 경우 반복 종료 시 1회 수행
for i in range(10):
    print(i,)
else:
    print("EOP")
    
i = 0
while i < 10:
    print(i,)
    i += 1
else:
    print("EOP")
  • 문장 거꾸로 출력하기
sentence = input()
reverse_sentence = ''
for char in sentence:
    reverse_sentence = char + reverse_sentence
print(reverse_sentence)

I love you
uoy evol I

  • 구구단 출력
print("구구단 몇단을 계산할까요? ")
dan = int(input())
print(f"구구단 {dan}단을 계산합니다.")
for i in range(1, 10):
    print(f"{dan} X {i} = {dan*i}")

구구단 몇단을 계산할까요?
5
구구단 5단을 계산합니다.
5 X 1 = 5
5 X 2 = 10
5 X 3 = 15
5 X 4 = 20
5 X 5 = 25
5 X 6 = 30
5 X 7 = 35
5 X 8 = 40
5 X 9 = 45

  • Decimal to Binary
decimal = int(input())
binary = ''
while (decimal > 0):
    remainder = decimal % 2
    decimal = decimal // 2
    binary = str(remainder) + binary
print(binary)

100
1100100

  • Debugging Loop : Loop 내에 변수들의 값을 Print문으로 확인
print("input decimal number : ",)
decimal = int(input())
binary = ''
loop_counter = 0
while (decimal > 0):
    temp_decimal_input = decimal
    temp_binary_input = binary
    remainder = decimal % 2
    decimal = decimal // 2
    binary = str(remainder) + binary
    print("-----", loop_counter, "loop value check -----")
    print("Initial decimal :", temp_decimal_input, ", Remainder :", remainder, ", Initial binary :", temp_binary_input)
    print("Output decimal :", decimal, ", Output binary :", binary)
    print("------------------------------")
    print("")
    loop_counter += 1
print("Binary number is", binary)

9) Loop and Control Lab

  • 가변적인 중첩 반복문(variable nested loops) :
    실제 프로그램에서는 반복문은 사용자의 입력에 따라 가변적으로 반복되고 하나의 반복이 아닌 중복되어 반복이 일어남
import random

true_value = random.randint(1, 100)
input_value = 9999999

print("숫자를 맞춰보세요(1~100)")
while true_value != input_value:
    input_value = int(input())
    
    if input_value > true_value: # 사용자의 입력값이 true_value보다 클 때
        print("숫자가 너무 큽니다")
    elif input_value < true_value: # 사용자의 입력값이 true_value보다 작을 때
        print("숫자가 너무 작습니다")
    else:
        break
        
print(f"정답입니다, 입력한 숫자는 {true_value}")

숫자를 맞춰보세요(1~100)
50
숫자가 너무 큽니다
25
숫자가 너무 큽니다
12
숫자가 너무 큽니다
6
숫자가 너무 작습니다
8
숫자가 너무 큽니다
7
정답입니다, 입력한 숫자는 7

  • 0을 입력하면 종료하는 구구단
print("구구단 몇 단을 계산할까요? ")
while True:
    dan = int(input())
    if 1 <= dan and dan <= 9:
        print(f"구구단 {dan}단을 계산합니다.")
        for i in range(1, 10):
            print(f"{dan} X {i} = {dan * i}")
    elif dan == 0:
        print("구구단을 종료합니다.")
        break
    else:
        print("잘못 입력하셨습니다.")

구구단 몇단을 계산할까요?
10
잘못 입력하셨습니다.
3
구구단 3단을 계산합니다.
3 X 1 = 3
3 X 2 = 6
3 X 3 = 9
3 X 4 = 12
3 X 5 = 15
3 X 6 = 18
3 X 7 = 21
3 X 8 = 24
3 X 9 = 27
0
구구단을 종료합니다.

  • 0을 입력하면 종료하는 구구단 : 안좋은 예시
print("구구단 몇 단을 계산할까요? ")
x = 1
while (x != 0):
    x = int(input())
    if x == 0:
        break
    if not (1 <= x <= 9):
        print("잘못 입력하셨습니다, 1부터 9사이의 숫자를 입력해주세요.")
        continue
    else:
        print("구구단" + str(x) + "단을 계산합니다.")
        for i in range(1, 10):
            print(str(x) + " X " + str(i) + " = " + str(x * i))
        print("구구단 몇 단을 계산할까요(1 ~ 9)?")
print("구구단을 종료합니다.")

구구단 몇 단을 계산할까요?
100
잘못 입력하셨습니다, 1부터 9사이의 숫자를 입력해주세요.
3
구구단3단을 계산합니다.
3 X 1 = 3
3 X 2 = 6
3 X 3 = 9
3 X 4 = 12
3 X 5 = 15
3 X 6 = 18
3 X 7 = 21
3 X 8 = 24
3 X 9 = 27
구구단 몇 단을 계산할까요(1 ~ 9)?
0
구구단을 종료합니다.

10) 2차원 리스트 처리하기

kor_score = [49, 79, 20, 100, 80]
math_score = [43, 59, 85, 30, 90]
eng_score = [49, 79, 48, 60, 100]
midterm_score = [kor_score, math_score, eng_score]

student_score = [0, 0, 0, 0, 0]
i = 0
for subject in midterm_score:
    for score in subject:
        student_score[i] += score
        i += 1
    i = 0
else:
    a, b, c, d, e = student_score
    student_average = [a / 3, b / 3, c / 3, d / 3, e / 3]
    print(student_average)

[47.0, 72.33333333333333, 51.0, 63.333333333333336, 90.0]

11) Debugging

  • 코드의 오류를 발견하여 수정하는 과정
  • 오류의 '원인'을 알고 '해결책'을 찾아야 함
  • 문법적 에러를 찾기 위한 에러 메시지 분석
  • 논리적 에러를 찾기 위한 테스트도 중요

0개의 댓글