본문 바로가기

클라우드(Cloud)

[스나이퍼팩토리] 카카오클라우드 AIaaS 마스터 클래스 9주차 - 파이썬 기초 3 (Python Basic 3)

 

 

 지난번 글에서 파이썬(Python) 기초 개념들 중 딕셔너리와 집합을 학습하였다. 기초가 내용이 많다고 할 수 있지만 뒤에 심화적인 내용이 더욱 많을테니 그것들을 이해하려면 지금 배우는 기초 개념들을 잘 이해해야한다. 오늘은 기초 개념들 중 연산자와 반복문 조건문 등을 학습할 예정이다. 마지막 부분에서는 예제 코드를 통해 점검을 해볼 것이다. 


✅ 파이썬 연산자 정리 

📌 연산자 종류 

분류 예시 설명
산술 연산자 +, -, *, /, //, %, ** 수학 계산
비교 연산자 ==, !=, >, <, >=, <= 참/거짓 판단
논리 연산자 and, or, not, ^ 조건 결합
할당 연산자 =, +=, -=, *=, /= 등 변수에 값 저장
멤버십 연산자 in, not in 포함 여부 판단
아이덴티티 연산자 is, is not 객체 자체 비교
비트 연산자 &, ` , ^, ~, <<, >>`
 

1️⃣ 산술 연산자

연산자 설명 예시 결과
+ 더하기 3 + 2 5
- 빼기 5 - 1 4
* 곱하기 4 * 2 8
/ 나누기 (실수) 7 / 2 3.5
// 7 // 2 3
% 나머지 7 % 2 1
** 거듭제곱 2 ** 3 8

 

2️⃣ 비교 연산자

연산자 설명 예시 결과
== 같다 3 == 3 True
!= 다르다 3 != 4 True
> 크다 5 > 2 True
< 작다 5 < 2 False
>= 크거나 같다 5 >= 5 True
<= 작거나 같다 4 <= 3 False

 

3️⃣ 논리 연산자

연산자 설명 예시 결과
and 둘 다 참이면 참 True and False False
or 둘 중 하나라도 참이면 참 False or True True
not 결과 반전 not True False

 

4️⃣ 비트 연산자

정수를 대상으로 비트를 직접 조작하는 연산자이다. 

연산자 설명 예시
& AND 5 & 3 → 101 & 011 = 001 → 1
| OR  
^ XOR 5 ^ 3 → 110 → 6
~ NOT ~5 → -6
<< 왼쪽 쉬프트 2 << 1 → 4
>> 오른쪽 쉬프트 4 >> 1 → 2
# XOR: 서로 다를 때만 True
x = True
y = False
print(x ^ y)  # True
print(x ^ x)  # False

 

 

5️⃣ 할당 연산자

연산자 예시 설명
= a = 3 값을 저장
+= a += 1 a = a + 1
-= a -= 1 a = a - 1
*= a *= 2 a = a * 2
/= a /= 2 a = a / 2
//= a //= 2 a = a // 2
%= a %= 2 a = a % 2
 

6️⃣ 멤버십 연산자

어떤 값이 컬렉션(리스트, 문자열 튜플 등)에 포함되는지 확인한다. 

print(3 in [1, 2, 3])        # True
print("a" not in "hello")    # True

 

 

⚙️ 연산자 우선순위 

우선 순위 설명
1순위 괄호 ()
2순위 지수 **
3순위 단항 연산자 +x, -x, ~x
4순위 곱셈, 나눗셈 * / // %
5순위 덧셈, 뺄셈 + -
6순위 비교 연산자 == != < > <= >=
7순위 논리 연산자 not > and > or
8순위 할당 연산자 = += -= 등
 

⚙️ 요약 정리

분류 대표 연산자 핵심 개념
산술 +, -, *, /, //, %, ** 수학 계산
비교 ==, !=, >, < 등 참/거짓 판단
논리 and, or, not, ^ 조건 결합
비트 &, ` , ^, <<, >>`
할당 =, +=, *= 등 변수에 값 저장
멤버십 in, not in 포함 여부 검사
우선순위 () > ** > * > + > == > and > or 계산 순서 주의

 


✅ 조건문 (if, elif, else)

1️⃣ 조건문의 역할

역할  예시
상황에 따라 분기 처리 로그인 여부에 따라 "환영합니다" 또는 "로그인 해주세요" 출력
유효성 검사 값이 없는 경우 오류 메시지 출력
자동화 제어 온도가 높으면 에어컨 켜기 등

 

2️⃣ 조건문의 기본 구조

if 조건식:
    실행문1
elif 조건식2:
    실행문2
else:
    실행문3

 

3️⃣ 조건식이란?

결과가 True 또는 False로 판별되는 표현식으로, 주로 비교 연산자, 논리 연산자, 멤버십 연산자 등을 사용해서 작성한다. 

age = 20
if age >= 18:
    print("성인입니다.")
else:
    print("미성년자입니다.")

 

4️⃣ if ~ elif ~ else 예시

score = 85

if score >= 90:
    print("A")
elif score >= 80:
    print("B")
elif score >= 70:
    print("C")
else:
    print("F")

 

맨 위부터 순차적으로 평가하게 되며, 가장 먼저 True인 블록만 실행하게 된다. 

 

5️⃣ 중첩 조건문

age = 25
if age >= 20:
    if age < 30:
        print("20대입니다.")
    else:
        print("30대 이상입니다.")
else:
    print("10대 이하입니다.")

 

6️⃣ 조건문에서 자주 쓰는 표현들

표현 설명 예시
if x: 값이 존재하면 참 if name: (빈 문자열이면 False)
if x is None: None 여부 확인 if data is None:
if a in list: 포함 여부 if "apple" in fruits:
 

7️⃣ 한 줄 조건문 (삼항 연산자)

message = "성인" if age >= 18 else "미성년자"

 

조건이 True라면 값1을, False라면 값2를 리턴한다. 이는 간단한 조건을 처리할 때 간단하고 가독성 좋게 작성하기 좋다는 장점을 갖는다. 

 

8️⃣ 조건문 들여쓰기

파이썬은 {} 대신 들여쓰기(공백 4칸)로 블록을 구분한다. 이때, 들여쓰기가 잘못되면 Error가 발생하게 된다. 

if True:
    print("참")   # O
#   print("이건 에러")  ❌

 

9️⃣ 논리 연산자와 조건문 활용

age = 25
is_student = False

if age >= 20 and not is_student:
    print("성인 비학생입니다.")

 

→ and, or, not으로 복합적인 조건문을 생성할 수 있다. 

 

🔟 조건문 관련 함수 및 테크닉

✅ 조기 종료 (return, break, continue 등)

def greet(name):
    if not name:
        return "이름이 없습니다."
    return f"안녕하세요, {name}님!"

 

✅ 조건문 내부를 함수로 분리

 

중첩 조건문이 복잡해지면 함수로 분리하여 가독성 향상시킬 수 있다. 

⚙️ 요약 정리

구성 요소 설명
if 조건이 True일 때 실행
elif 여러 조건 중 다음 조건
else 위 조건 모두 거짓일 때 실행
조건식 비교, 논리, 멤버십 연산 등을 포함한 식
중첩 조건문 조건문 안에 조건문
삼항 연산자 값1 if 조건 else 값2
들여쓰기 파이썬은 들여쓰기로 블록 구분
조기 반환 return, break 등을 이용한 흐름 제어

✅ 반복문

1️⃣ 반복문 종류

종류 설명
for 문 시퀀스(리스트, 문자열 등)를 반복
while 문 조건이 참인 동안 계속 반복

 

2️⃣ for 문

✅ 기본 구조

for 변수 in 반복가능한_객체:
    실행할_코드
fruits = ["사과", "바나나", "체리"]
for fruit in fruits:
    print(fruit)

 

리스트, 문자열, 튜플, 딕셔너리, range() 등 순회가 가능한(iterable) 객체에서 사용한다. 

 

✅ range() 함수와 함께 사용

for i in range(5):
    print(i)  # 0 ~ 4
range(시작, 끝, 간격)
range(1, 10, 2) → 1, 3, 5, 7, 9

 

✅ enumerate()로 인덱스 같이 출력

for idx, value in enumerate(["A", "B", "C"]):
    print(idx, value)

 

3️⃣ while 문

✅ 기본 구조

while 조건식: 실행할_코드
i = 0
while i < 5:
    print(i)
    i += 1

 

반복 횟수가 정해지지 않았을 때 사용한다. 

 

✅ 무한 루프와 break

while True:
    cmd = input("입력: ")
    if cmd == "exit":
        break

4️⃣ 반복 제어: break, continue

키워드 설명
break 반복문 즉시 종료
continue 현재 반복만 건너뛰고 다음 반복 진행
# break 예시
for i in range(10):
    if i == 5:
        break
    print(i)

# continue 예시
for i in range(5):
    if i == 2:
        continue
    print(i)

 

5️⃣ 중첩 반복문 (Nested Loops)

for i in range(2):
    for j in range(3):
        print(i, j)

 

2차원 배열이나 표 형태의 데이터 등에 자주 사용한다. 

6️⃣ 예시

✅ 합계 계산기

total = 0
for i in range(1, 11):
    total += i
print("합계:", total)

 

✅ 사용자 입력 반복

while True:
    data = input("값 입력 (q 종료): ")
    if data == "q":
        break
    print("입력값:", data)

 

⚙️ 요약 정리

문법 설명 주로 사용되는 경우
for 문 시퀀스 요소 반복 리스트, 문자열, range
while 문 조건 참 동안 반복 사용자 입력, 센서값
break 반복 즉시 종료 특정 조건 만족 시 중단
continue 다음 반복으로 건너뜀 조건에 따라 건너뛰기
enumerate() 인덱스 + 값 반복 위치 정보 필요할 때
range() 숫자 반복 생성기 횟수 기반 반복

 

 지금까지 파이썬(Python)을 다루기 위해 기본적이라고 할 수 있는 개념들을 글로 정리하며 학습해보았다. 예시 코드들이 있었다고는 하지만 정확히 어떻게 작동되고, 어떤 방식으로 동작하는지를 제대로 이해하기에는 쉽지 않기에 또 다른 예시 코드들을 통해 배운 개념들을 한번에 확인해볼 것이다. 


🧑‍💻 예제 코드 1

: 학생들의 이름과 점수 정보를 리스트로 관리하는 코드 

# 방법1: 함수 사용

# 학생들의 이름과 점수 정보를 리스트로 관리하는 코드 

# 기능 
# 학생 추가: 이름과 점수를 입력 받아 목록에 추가 
# 학생 삭제: 이름을 입력받아 해당 학생 정보 삭제 
# 성적 수정: 이름을 입력 받아 해당 학생의 점수 수정 
# 전체 목록 출력: 모든 학생의 이름과 점수 출력 
# 통계 출력: 최고 점수, 최저 점수, 평균 점수 계산 및 출력 


# 이름과 점수 정보 저장할 리스트 생성 
students = []

# 학생 추가 함수
def add_student(): 
    name = input("\n추가할 학생의 이름을 입력하세요: ") # 사용자가 추가할 학생의 이름 입력 
    score = float(input("\n점수를 입력하세요: ")) # 사용자가 추가할 학생의 점수 입력
    students.append({"name":name, "score":score}) # students 리스트에 이름과 점수가 추가됨 
    print(f"\n{name} 학생이 목록에 추가되었습니다.")

# 학생 삭제 함수
def delete_student(): 
    name = input("\n삭제할 학생의 이름을 입력하세요: ") # 사용자가 삭제할 학생의 이름 입력 
    
    for student in students: # students 리스트 안에 있는 값들을 대상으로 순회
        if student["name"] == name: # 만약 students 리스트 안에 사용자가 입력한 학생과 동일하다면,
            students.remove(student) # students 리스트에서 student 학생을 삭제 
            print(f"\n{name} 학생이 목록에서 삭제되었습니다. ") 
            return
    print(f"\n{name} 학생을 찾을 수 없습니다. ") # students 리스트 안에 학생이 없다면, 해당 내용 출력

# 점수 수정 함수 
def update_score():
    name = input("\n점수를 수정할 학생의 이름을 입력하세요: ") # 사용자가 점수를 수정하고 싶은 학생의 이름 입력

    for student in students: # 위와 동일 
        if student["name"] == name: # 위와 동일 
            new_score = float(input(f"\n수정할 점수를 입력하세요: ")) # 수정할 점수를 사용자에게 새로 입력 받음 / 점수는 실수일 수 있기에 float으로 설정
            student["score"] = new_score # 입력받은 점수를 score로 변경
            print(f"\n{name} 학생의 점수가 수정되었습니다. ")
            return
    print(f"\n{name} 학생을 찾을 수 없습니다. ")

# 학생 출력 함수 
def print_all():
    if not students: # 만약 students에 아직 학생이 없다면, 
        print("\n등록된 학생이 없습니다. ") # 해당 문구 출력 
    else: # 위의 경우가 아니라면 
        print("\n전체 학생 목록: \n") 
        for student in students: # 위와 동일 
            print(f"이름: {student['name']}, 성적: {student['score']}") # 해당 문구의 형식으로 값들을 출력 

# 점수 출력 함수 
def print_stat():
    if not students: # 위와 동일 
        print("\n등록된 학생이 없습니다. ")
        return # 등록된 학생이 없을 경우, 함수 실행을 해당 부분에서 중단 
    
    scores = [student['score'] for student in students] # students 리스트 안을 순회하며 student로 저장하고, 그 중 score에 해당하는 값을 scores라는 변수에 저장
    max_score = max(scores) # max 함수 사용
    min_score = min(scores) # min 함수 사용
    avg_score = sum(scores) / len(scores) # scores의 합을 scores의 개수로 나눠 평균값 계산 

    print(f"최고 점수: {max_score}")
    print(f"최저 점수: {min_score}")
    print(f"평균 점수: {avg_score}")

# 실행 함수 
def main():
    while True: # 특정 경우가 아니라면 계속해서 반복 
        print("\n==========메뉴==========")
        print("1. 학생 추가")
        print("2. 학생 삭제")
        print("3. 성적 수정")
        print("4. 전체 목록 출력")
        print("5. 통계 출력")
        print("6. 종료")

        choice = input("\n원하는 기능의 번호를 입력해주세요: ") # 사용자가 원하는 기능의 숫자 입력 

		# 입력받은 숫자에 해당하는 함수가 실행 
        if choice == "1": 
            add_student()
        elif choice == "2":
            delete_student()
        elif choice == "3":
            update_score()
        elif choice == "4":
            print_all()
        elif choice == "5":
            print_stat()
        elif choice == "6":
            print("프로그램을 종료합니다.")
            break # 6을 입력 받았을 경우 break로 반복문 종료 
        else: # 위에 해당하는 숫자가 아닐 경우 
            print("\n올바른 번호를 입력하세요.") # 해당 문구 출력 

if __name__ == "__main__": # main() 함수 실행 
    main()

 

해당 과제는 아직 함수를 배우지 않았다고 가정하고 풀었어야 하는데 파이썬(Python)을 이미 배운 적이 있다보니 자연스럽게 함수를 사용해서 과제를 해결했다. 하지만 함수를 알지 못한다고 가정된 상황에서 푼다고 하면 반복문과 조건문만을 이용해야 했을 것이라고 생각하여 함수를 사용하지 않도록 해서 코드를 작성하였다. 위 함수를 사용한 코드와 아래의 함수를 사용하지 않은 코드를 비교하며 학습하면 더 도움이 될 것이라고 생각한다. 

 

 각 코드의 주석들에 코드 설명을 적어두었다. 혹시 틀린 부분이 있다면 알려주시길 바랍니다. 

 

# 방법2: 반복문/조건문 사용

# 학생들의 이름과 점수 정보를 리스트로 관리하는 코드 

# 기능 
# 학생 추가: 이름과 점수를 입력 받아 목록에 추가 
# 학생 삭제: 이름을 입력받아 해당 학생 정보 삭제 
# 성적 수정: 이름을 입력 받아 해당 학생의 점수 수정 
# 전체 목록 출력: 모든 학생의 이름과 점수 출력 
# 통계 출력: 최고 점수, 최저 점수, 평균 점수 계산 및 출력 

# 이름과 점수 정보 저장할 리스트 생성 
students = []

# 메인 루프
while True: # 특정 경우에 해당하지 않으면 계속 반복 
    print("\n==========메뉴==========")
    print("1. 학생 추가")
    print("2. 학생 삭제")
    print("3. 성적 수정")
    print("4. 전체 목록 출력")
    print("5. 통계 출력")
    print("6. 종료")

    choice = input("\n원하는 기능의 번호를 입력해주세요: ") # 사용자가 원하는 기능의 숫자 입력 

    if choice == "1": # 만약 1이라면 아래 블록의 코드 실행 
        name = input("\n추가할 학생의 이름을 입력하세요: ") # 사용자가 추가할 학생의 이름 입력 
        score = float(input("\n점수를 입력하세요: ")) # 점수도 입력
        students.append({"name": name, "score": score}) # students 리스트에 이름과 점수 저장 
        print(f"\n{name} 학생이 목록에 추가되었습니다.")

    elif choice == "2": # 만약 2라면 아래 블록의 코드 실행 
        name = input("\n삭제할 학생의 이름을 입력하세요: ") # 사용자가 삭제하고 싶은 학생 이름 입력 
        found = False # 학생을 찾았는지를 저장할 변수 생성 
        for student in students: # students 리스트를 순회
            if student["name"] == name: # 입력받은 학생의 이름과 같은 이름이 존재한다면
                students.remove(student) # students에서 제거 
                print(f"\n{name} 학생이 목록에서 삭제되었습니다.")
                found = True # 학생을 찾았다고 표시 
                break # 삭제했다면 종료 
        # 학생을 찾지 못했다면, / 해당 부분을 위해 위에서 found를 False로 기본 설정을 해주었음 -> 학생을 못찾아서 계속 False라면 해당 조건문이 True가 되므로 아래 블록 코드가 실행됨
        if not found: 
            print(f"\n{name} 학생을 찾을 수 없습니다.")

    elif choice == "3": # 3일 경우 
        name = input("\n점수를 수정할 학생의 이름을 입력하세요: ") 
        found = False 
        for student in students: 
            if student["name"] == name:
                new_score = float(input("\n수정할 점수를 입력하세요: ")) # 수정할 점수를 입력받아 변수에 저장 
                student["score"] = new_score # 입력받은 점수로 score를 변경 
                print(f"\n{name} 학생의 점수가 수정되었습니다.")
                found = True
                break
        if not found:
            print(f"\n{name} 학생을 찾을 수 없습니다.")

    elif choice == "4": # 4일 경우 
        if not students: # students 리스트에 등록된 학생이 없다면, 
            print("\n등록된 학생이 없습니다.") # 해당 문구 출력 
        else: # 등록된 학생이 있다면, 
            print("\n전체 학생 목록:\n")
            for student in students:# students를 순회하며 아래 출력 형식에 맞게 결과 출력 
                print(f"이름: {student['name']}, 성적: {student['score']}")

    elif choice == "5": # 5일 경우 
        if not students:
            print("\n등록된 학생이 없습니다.")
        else:
            scores = [student["score"] for student in students] # 리스트 컴프리헨션이 적용된 코드 / students를 순회하며 score를 찾아 scores라는 변수에 저장
            max_score = max(scores) # max 함수로 최댓값 도출 
            min_score = min(scores)
            avg_score = sum(scores) / len(scores) # scores의 총 합을 scores의 개수로 나눠 평균값 계산 

            print(f"\n최고 점수: {max_score}")
            print(f"최저 점수: {min_score}")
            print(f"평균 점수: {avg_score:.2f}")

    elif choice == "6": # 6일 경우 
        print("프로그램을 종료합니다.") 
        break # 반복문 종료 

    else:
        print("\n올바른 번호를 입력하세요.")

 

 코드를 작성하면서 실수한 부분이 하나 있었다. 

 

 

 함수를 사용해서 해결했던 방법1에서 for문을 사용한 후에 그 블록 내에서 if문을 통해 사용자가 입력한 학생과 동일한 학생을 찾아냈어야 하는데, 이 부분을 student in students로 작성해서 students 리스트에 학생이 있다면 항상 True가 출력되도록 작성했었다. 이 부분은 for문을 보며 작성해 잠깐 헷갈린 내용이지만 다음에 또 헷갈리는 경우가 없도록 하기 위해 적어보았다. 

 

 예제 코드기에 오류들이 조금 존재할 수 있다. 예를 들면 중복되어 이름이 들어가는데 이를 구분할 수 없다던가, 점수를 수정하는 부분에서 동일한 이름을 가진 사람이 있을 수 있다는 점을 고려하지 않아서 문제가 발생할 수 있을 것인데 이는 고유한 값인 id 등을 함께 가질 수 있도록 해서 해결 할 수 있을 것이다. 

 

 만약 id를 가지도록 수정하면, 이름을 입력하지 않고 id로 구분하는 편이 나을 것 같다. 이번 예제 코드는 반복문과 조건문, 변수 설정 등을학습하기 위함이므로 이를 학습하는데는 문제가 없을 것이라고 생각한다. 다음에는 파이썬(Python)의 조금 심화적인 부분인 함수부터 다뤄볼 예정이다. 

 


본 후기는 [카카오엔터프라이즈x스나이퍼팩토리] 카카오클라우드로 배우는 AIaaS 마스터 클래스 (B-log) 리뷰로 작성 되었습니다.