2024.01.09 (화) 조건문, 반복문
오늘은 조건문과 반복에 대해서 공부하였다. 오늘의 내용을 정리해보자면 조건문의 if, 반복문의 for 이 중심이었다.
if문의 기본 구조
여기서 ‘조건’은 평가되어 참 또는 거짓으로 나뉩니다. ‘조건’이 참인 경우 들여쓰기된 코드 블록이 실행됩니다.
-1은 어떻게 될까요? 0이 아닌 모든 정수형은 True로 인식
공백은 기본적으로 ‘False’를 의미합니다. 공백을 제외한 나머지(하나 이상의 문자)는 모두 True로 작동을 하게됩니다.
None의 경우는 거짓으로 평가됩니다. 공백과 동일하죠? 참을 표현하고 싶으면 None의 반대 개념인 not None을 사용하면 됩니다.
if문에 사용할 수 있는 표현식
if문의 조건에는 불리언(boolean) 표현식이 사용됩니다. 이 표현식은 True 또는 False 값을 결과로 반환해야 합니다. 여기 몇 가지 예시가 있습니다:
- 비교 연산자: ==, !=, <, <=, >, >=
- 논리 연산자: and, or, not
- 멤버십(in) 연산자: in, not in
- 식별 연산자: is, is not
- 다른 함수의 반환 값이나 변수의 값 (이 값들이 결국 불리언으로 평가됨)
삼항 연산자
삼항 연산자는 if-else 구문을 한 줄로 간단하게 표현할 수 있는 방법을 제공합니다. 이 연산자는 X if 조건 else Y와 같은 형태로 사용됩니다. 여기서 ‘조건’이 참이면 X가 평가되고, 거짓이면 Y가 평가됩니다.
삼항 연산자는 코드를 간결하게 만들어주며, 가독성을 향상시킬 수 있습니다. 하지만 복잡한 조건에서는 코드가 복잡해질 수 있으므로 적절히 사용해야 합니다.
조건문과 람다 함수
람다 함수 내에서 조건문을 사용하여 간단한 조건 로직을 구현할 수 있습니다.
조건문과 딕셔너리
딕셔너리 컴프리헨션을 사용하여 조건문을 기반으로 딕셔너리를 생성할 수 있습니다. 리스트컴프리헨션과 마찬가지로 해당 내용은 아직 배우지 않은 내용이며 추후 컴프리헨션 챕터에서 정리합니다.
if, elif, else와 중첩 조건문
if - else
if문을 사용하면 조건을 기반으로 서로 다른 코드 블록을 실행할 수 있습니다. 그러나 조건이 많아질수록 if문만으로는 코드를 효율적으로 관리하기 어렵습니다. 이러한 문제를 해결하기 위해, else문을 사용하여 if문의 조건이 거짓이거나 충족되지 않는 경우를 처리할 수 있습니다.
if-elif-else
두개의 조건만 있을 경우에는 if -else를 주로 활용하지만 세개 이상의 여러개의 조건을 한꺼번에 검사해야 할 경우에는 elif를 사용합니다. elif는 필요한 만큼 사용할 수 있습니다. 그리고 마지막에 else를 사용함으로써 조건에 대해서 마무리하게 됩니다.
if-elif-else 실습
성적을 입력받아 학점을 매기는 프로그램
score에 따라 용돈을 받는 코드
중첩 if - elif문 사용하기
중첩 조건문은 조건문 안에 또 다른 조건문을 포함하는 것으로, 코드의 흐름을 다양한 경로로 분기시킬 수 있게 합니다.
왼쪽에 있는 것은 비효율적 가시성과 효율성을 위해 오른쪽 처럼 작성하자.
for문
for문은 특정 범위나 순서열(ex 리스트, 문자열 등)을 순회하며 순서열의 끝에 도달하면 반복을 멈추게 됩니다. 또한 객체를 처음부터 끝까지 하나씩 추출하며 순회하기 때문에 다양한 방식으로 활용될 수 있습니다.
for문의 기본구조
시퀀스 자료형 자료 또는 반복 가능한 자료형을 아래와 같이 순회 돌 수 있습니다.
문자열 하나씩을 x라는 변수에 할당하여 반복
튜플, 리스트, range 를 x 변수에 하나씩 할당
문자열(str) 자료형을 범위로 지정한 예시
문자열 s를 순회하면서 각 문자를 i 변수에 할당하여 문자를 출력합니다.
리스트(list) 자료형을 범위로 지정한 예시
리스트의 각 요소를 순회하면서 출력합니다.
사전(dict) 자료형을 범위로 지정한 예시
for 문을 이용하여 dict 자료형을 순회하면 key(키)만을 가져오게 됩니다.
key(키)에 해당하는 value(값) 또한 가져오고 싶다면 아래와 같이 튜플 언패킹을 사용할 수 있습니다.
range를 범위로 지정한 예시
for문에서 가장 많이 사용되는 range에 대해 알아봅시다. range는 앞 챕터 built-in function에서 다뤄봤습니다. range(시작_값, 종료_값, 연속하는_두_수의_차)형식입니다.
가장 많이 사용되는 형태는 range(n)의 형태입니다.
짝수만 가져오는 코드
중첩 for문
다중 리스트 예제를 다시 한 번 보도록 하겠습니다. 이번에는 언패킹을 하지 않고 하나의 변수에서 확인을 하였습니다.
활용한 실습
구구단 만들기
컴프리헨션(comprehension)
리스트 컴프리헨션(list comprehension)
리스트 컴프리헨션 기본 사용법
리스트 컴프리헨션(list comprehension)은 파이썬에서 간결하게 리스트를 생성하는 기능으로, 반복문과 조건문을 결합하여 리스트를 생성합니다.
왼쪽을 컴프리헨션을 통해 오른쪽처럼 간결하게 만든다.
기본적인 형태는 아래와 같습니다.
컴프리헨션 내 조건문 사용법
컴프리헨션 내 아래와 같이 if문을 넣을 수도 있습니다.
결과는 같지만 아래의 컴프리헨션을 통한 효율적인 코드와 비교를 해보았다.
컴프리헨션 내 함수 사용하기
기존 리스트를 순회하며 요소들을 함수의 인수에 넣어 함수의 return 값을 새로운 리스트에 저장하실 수 있습니다.
딕셔너리 컴프리헨션
컴프리헨션은 리스트 컴프리헨션, 딕셔너리 컴프리헨션, 세트 컴프리헨션, 그리고 제너레이터 컴프리헨션이 있습니다. 여기서 딕셔너리 컴프리헨션은 그 형태가 조금 다르므로 여기서 다뤄보고 가도록 하겠습니다.
딕셔너리 컴프리헨션의 기본 구조는 중괄호({}) 내부에 for문과 필요한 조건문을 넣어주며, 그 앞에는 딕셔너리의키와 값이 콜론(:)으로 구분되어 위치합니다.
복합 자료형 순회
앞에서 다뤘던 것처럼 반복되는 값이 같은 구조를 가지고 있다면 언패킹하여 한꺼번에 받아 순회할 수 있습니다. 순회 할 수 있는 객체를 변수에 하나씩 할당하는 것을 언패킹이라 하였습니다. 이번에는 리스트 안에 리스트가 아니라 리스트 안에 문자열, 리스트 안에 튜플 등 다양한 복합 자료형이 중첩되어 있을 때 어떻게 언패킹하여 순회를 하는지 다뤄보도록 하겠습니다.
리스트 안에 문자열이 들어가 있으면 해당 자료형도 언패킹이 가능합니다. 문자열은 순회 할 수 있는 객체이기 때문입니다. 따라서 처음 순회가 될 ‘abc’가 준비되었을 때 전체를 받을 변수 하나가 있다면 하나의 변수에 할당이 되며, ‘a’, ‘b’, ‘c’ 각각의 값을 받을 변수가 모두 준비되어 있다면 이를 각각의 변수에 할당합니다.
skill 이라는 리스트에 튜플 형태의 값들이 들어간 것을 볼 수 있습니다. 각 튜플은 두개의 요소로 구성되어 있으며, 첫번째 요소는 skill의 이름을 나타내고 두번째 요소는 스킬의 레벨을 나타냅니다.
skill 을 순회하면서 각 튜플을 하나씩 가져와서 i, j에 저장한 후 출력합니다.
enumerate를 사용한 순회
enumerate는 순서를 매길 때 사용합니다. enumerate는 별도의 변수를 선언하지 않고 이것이 가능하게 해줍니다.
프로그래밍 실습
스무고개 숫자맞추기
Step 1: 숫자 입력 받기
Step 2: 숫자 맞추기 기능 구현
Step 3: 20번 반복하는 기능 구현
Step 4: 중간에 맞추거나 틀릴 경우 규칙
Step 5: 기타 기능 구현
가위 바위 보 프로그램 만들기
Step 1: 가위바위보 출력
Step 2: 가위바위보 함수
Step 3: 가위바위보 조건 - 승리조건, 패배조건 등
Step 4: 기타 조건
https://colab.research.google.com/drive/1JoKJhqD_A7bRG35-Fp50JlBNNj-fwYL_?usp=sharing
https://colab.research.google.com/drive/15Fx6qrG9rTjpQ7lpxTHpSjOAjX0MndGq?usp=sharing