생활코딩 Python

Python3 (4)flow control : boolean, if, for, list, dict, and, or

finepiz 2021. 11. 22. 03:47

https://youtube.com/playlist?list=PLuHgQVnccGMA4ZgmqgKZhY9X39Ew8O9k5

 

Python 제어문

 

www.youtube.com

---

이 수업은 조건에 따라서 다른 로직이 실행되게 하고 싶은 때 쓰는 조건문

조건이 만족하는 동안에 반복적으로 로직이 실행되게 하고 싶을 때 쓰는 반복문을 담고 있습니다.

 

-------------------------

1.시작

Program의 의미 = 시간에 순서에 따라 기능이 실행된다 = 자동화의 본질

실행돼야하는 순서에 따라 코드를 배치하는 것만으로도 프로그램은 혁명적

 

시간이 흘러서

 > 조건에 따라 실행되는 순서를 다르게 할 순 없을까?

 > 조건을 만족하는 동안에 반복적으로 같은 작업을 실행하게 할 순 없을까?

 

조건문과 반복문, 이 두개를 통틀어서 제어문. 실행 되는 흐름을 제어한다는 말

 : 프로그래밍 혁명 이후의 가장 웅장한 혁신

 

거대하고 복잡한 SW는 제어문으로 그려진 거대한 강줄기

 

제어문을 배우기 전에

(1)

무엇을 실행할지, 언제까지 반복할 지 선택해야함.

선택의 핵심은 비교다. 비교를 할 수 있다면 선택은 쉽다.

비교를 위한 연산자들을 비교연산자 라고함.

 

(2)

비교의 결과를 표현하는 데이터가 또 있어야함. : Boolean, True와 False로 이뤄진 데이터 타입.

 

수업 순서 : Boolean -> Compare Operator -> Flow Control

 

-------------------------

2.Boolean

제어문으로 가는 입구

 

숫자, 문자 데이터 타입은 무한히 많다.

Boolean도 데이터타입임 근데 단 두개의 데이터로 이뤄짐.

True

False

둘다 대문자로 시작함

이 두개를 만들어내는 방법이 있다.

 

-------------------------

3.Compare Operator

Boolean을 만들어내는 연산방법인 비교연산자

얘네들이야

여러가지 비교연산자들

파이썬도 ==가 같냐다

>=

!=

다 =가 뒤

 

-------------------------

4.1.Conditional Statement 1

조건문, 조건문의 기본형식

 

조건문은

조건에 따라 다른 코드가 실행되게

하나의 프로그램으로 여러가지 일을 할 수 있다.

 

기본적인 형태

 

if로 시작

> if뒤에 true 또는 false 에 준하는 값, 그리고 :

> true일때만 : 아래줄의 코드가 실행되도록 하는게 조건문

> 아랫줄의 코드는 들여쓰기를 해야한다. 보통 탭키를 쓰는데, 한번 탭키 썼으면 다른곳에 들여쓰기 할 때도 탭키로 해야함. 스페이스 두번으로 들여쓰기를 했다면 다른곳에서도 두번 스페이스.

 

#은 주석

▽if 쓰면 그 다음줄이(만) 묶인다고 생각하면 되네

 

이거재밌죠 안재밌으면 자기 손해예요

 

-------------------------

4.2. 조건문 - else (Conditional Statement 2)

저번 시간보다 더 업그레이드된 형태

 

if boolean:

  code

else:

  code

 

if뒤 있는 boolean이

true면 아래 코드가 실행

false면 else아래에 있는 코드가 실행

boolean값이 true냐 false냐에 따라 코드 둘 중에 하나만 선택적으로 실행되는것.

이렇게 if문이 독립적으로 존재하면 중간에 뭔가 잡스러운 것들이 끼어들 수가 있다. 응집력이 떨어져

else를 이용하면 훨씬 더 응집력이 있는 코드를 만들 수 있다. if와 else가 세트로 존재한다

 

-------------------------

4.3. 조건문 elif (Conditional Statement 3)

else if를 줄인것

▽if를 썼으면 어디까지 세트냐를 봐야하는군.

 

true면 바로 밑에,

false면 elif 안에 있는 조건(boolean)을 체크. 그게 true면 그 아래 코드가 실행. 또 false면 else 아래가 실행.

- else는 생략할 수 있다. (▽다 아니면 그냥 지나가겠네)

- elif 여러개가 존재할 수 있다.

 

else의 print(3)은 실행 안됨

사용자가 2명이고, 걔네일 때만 Welcome하는

 

-------------------------

4.4. 조건문 중첩 (Conditional Statement 4)

 

조건문 안에 또 다른 조건문이 들어갈 수 있다.

id, pwd 기능 구현

맞으면 저 안에서 pwd를 체크하고, 틀리면 id틀렸다고 미리 써놓는

 

-------------------------

5.1. 반복문 - for 기본형식

컴퓨터는 반복적인 일을 기가막히게 잘한다. 실수도 안하고 지루해하지도 않아

 

반복문과 함께 반드시 다뤄야 하는것 List

List안엔 여러값들이 존재하는데, 이 값을 하나하나 반복적으로 꺼내서 일을 처리함. 그래서 반복문과 List는 단짝

List때문에 반복문의 존재에 의의가 생기고, 반복문으로 인해 List는 쓸모있는 데이터타입이 됨.

 

반복문에는 여러가지 형식이 있는데 가장 유명한건 for문

value는 맘대로 지은 변수

우리가 처리하려고 하는 데이터는 리스트 에 있음. 그래서 in이 쓰임

for문은 반복이 실행될 때마다 List의 값들을 순차적으로 꺼내서 네모 자리에 변수값으로 할당함.

for문 안의 블럭에서 value는 1. 그리고 반복

저런 버튼을 클릭하면 실행도 쉽게 할 수 있어요

 

원소의 개수에 따라 실행 몇번하냐가 결정

 

-------------------------

5.2. 반복문 - 다차원배열의 처리 (Multi-dimensional lists)

▽List가 배열이야? 자바는 배열따로 리스트 따로 아니었나

 

정보가 복잡해지면 List안에 List가 담기기도 함. 다차원 리스트

1차원 리스트

1차원리스트에 각각에 사람에 대한 보다 자세한 정보를 담으면 리스트 안에 리스트를 담는다.

2차원 리스트

이렇게 차원을 높이다 보면 아무리 복잡한 정보도 담을 수 있다.

 

다차원 리스트는 어떻게 반복문으로 다룰 수 있을까?

대괄호 두개로

첫번째 [0]과 두번째 [0]이 뭘 가리키는지. 두번째건 첫번째것 안의 순서

그림 설명 두부분으로 나뉨

 

처음 for문은 저렇게 하면 모든 자료 뽑을 수 있다는 것.

2차원 배열로 들어있으면

첫번째 반복에서 0번째 값을 갖고 오고 그 0번째 값은 리스트 이므로 거기 안에서 [0], [1], [2]

두번째 반복에선 그 다음 값을 갖고 오고 그 다음 값은 리스트. 거기 안에서 [0], [1], [2]

▽배열이랑 다르네 배열은 [i][j] 하고 i를 ++ 했었는데, 한번에 하나의 리스트만 마주할 수 있네

 

for문 다음부턴 각각의 항목들이 어떤 의미인지 분명치 않아서 이름을 준것.

▽그냥 name에 저 값 넣고 그런거잖아 오른쪽에서 왼쪽으로 대입한것. List의 각각의 자리에 영구히 저런 이름을 넣은게 아니라

 

이름을 붙여서 분명하게 의미를 코드상에서 표현

근데 이게 귀찮아서 이걸 편하게 하는 방법이 있음.

이렇게 하면 됨.

 

---

응용해서 반복문 개선하기

(0, 1, 2를 색인, 또는 인덱스라고 함)인덱스에 따라서 데이터를 가져오니까 코드를 해석하는게 쉽지가 않다.

 

(내가 먼저 해보기)

persons 라는 2차원 배열이 있었고

for문은

선생님은 for in persons 먼저 적어놓고 시작함

for person in persons

name, address, interest = person

print(name, address, interest) 겠지?

 

(답)

일단 콜론 빼먹었고

그냥 for name, address, interest in persons: 라고 하면 반복문의 안에서 name, address, interest가 쓰임

해석하기 좋은 코드가 됨. 자주 사용되는 테크닉 (▽for문으로 List의 인덱스 개수만큼 이름을 짓는다)

 

-------------------------

5.3. 반복문 - Dictionary

 

이름은 필요없고 순서에 따라 데이터를 저장할 땐 List

순서는 상관없고 데이터에 이름을 주고싶으면 dictionary(이해하기 쉬운 데이터가 된다)

 

List만큼 유용한, List사촌정도 되는 타입이 Dictionary

여기까지 힘들게 오셨으니까 Dictionary데이터 타입을 선물로 드리겠습니다.

이렇게 돼 있으면 Web이 관심사인지 직업인지 알 수 없다. 원소에 이름을 붙일 수 있다면?

List는 대괄호로 묶여있었고, 이건 중괄호로 묶인다.  ▽json같네, json도 js의 객체 표현이고 이것도 파이썬의 어떤 자료형이고

값의 왼쪽에 값의 이름을 붙임.

데이터에 이름을 붙이니 보기좋다. 마치 사전과 비슷

사전형, dictionary타입

다른 언어에서는 연관배열해쉬 이렇게 부름.

 

dictionary에선

값의 이름을 값이 가져오는 열쇠라는 뜻에서 key

값은 value

 

dictionary데이터가 있을 때 가져올때는

저렇게 대괄호 안에 'name'(key값)이라고 하면 name이라는 key값의 value를 가져옴.

 

---

반복문이랑은 어떻게 어울릴까?

이렇게 뽑으면 key값(key변수는 아무렇게나 해도 됨)이 하나씩 꺼내짐. 신기하네 안신기한가 어차피 여러개 들어있으니 하나씩 꺼내지는게 맞나

 

dictionary는 일단 key값이 꺼내진다, 직관은 일단 키값들이 있다고 생각하면 되겠네 키값에서 한번 더 뒤져야 value가 나오고

 

각각의 원소의 데이터를 가져올 땐 리스트명[키값] 해줘야

▽아까 대괄호 안에 key값 넣으면 value갖고왔으니까 그대로 한거군, ' '는 안해도 되고 그걸 가져온거니까 코드안에서 쓰려면 ' ' 를 쳐줘야 다른 변수나 함수랑 구분하니까 쳐줬겠네  --오 그래?

 

dictionary를 List안에 담아서 복합적인 데이터

for문을 이용해서 여기에 있는 데이터를 출력해봅시다

▽dict안에선 키값들이 들어있으니까

for d in persons:

    for a in d:

        print(a, d[a])

가 아닐까?

 

바깥쪽에 있는것부터 처리해야해요

바깥쪽은 List, List의 원소 하나하나를 꺼낼 땐

좀 더 보기좋게

오 굿

안쪽 for문으로 key와 value

바깥쪽 for문으로 모든 데이터를 순회

사전형을 쓰니 데이터가 이해하기 쉬운 데이터가 됐어요~

 

-------------------------

6.수업을 마치며

boolean > 비교연산자 > 조건문, 반복문

기술진보 역사를 바꿔놓은 혁신적 도약 조건문, 반복문을 쓸 수 있게 됐다!

이 대단한 순간을 감상하지 않고 더 많은 것을 공부하려고 하는것은 어렵게 정상을 올라와놓고 경치도 돌아보지 않고 하산하는것. 알게된것을 곰곰히 음미해보기. 제어문을 배운것만으로도 오늘 하루는 완벽한 하루를 보낸것. 오늘 좋은 하루 보내셨네요

 

관심을 가져볼 주제

1.

조건문 안에 조건문 중첩

하나로 합칠 수 있다. and연산자를 이용

조건문 2개를 and를 이용해 합칠 수 있다.

or도 있다.

and, or를 논리연산자 라고 함. Logical Operator. 복잡한 로직을 간단하게 함축할 수 있다.

 

2.

데이터 산업의 본질은 표

저 표를 Python으로 표현하면 저렇게 됨(▽행 하나가 데이터니까)

표를 Python으로 가져올 수 있다면 Python이 갖고 있는 강력한 기능으로 다양한 일을 할 수 있다.

->List와 Dictionary와 같은 데이터 타입에 대해 깊게 공부할 필요가 있다.

이런 데이터를 처리하는데 인생을 바친 사람들이 만든 라이브러리도 있다. 엄청 많은데 일단 2개

갖고있는 데이터가 라면 Pandas를 쓰시면 굉장히 많은 일을 할 수 있다.

표는 표인데 그안이 숫자로 채워져 있고 수학적인 계산을 필요로 한다면 Numpy를 이용해 보세요

이거 다음 수업들인가봐. 다 제어문으로 할 수 있는 것들이래 이거말고도 무궁무진