본문 바로가기

코딩/파이썬 혼공단

혼공파 파이썬 3주차 기본미션과 선택미션 수행하기

 

대박대박~~!!!!!!내가 우수 혼공족이라니~~!!! 정말 기대도 안했는데.....그래서 그런지 더 뿌듯하다!!!

사실...우수 혼공족되신 다른분들 블로그들을 봤는데 그분들에 비하면 난 아직 더 분발해야된다고 생각한다.

그렇기 때문에 이번 우수혼공족이 된것은 더 열심히 하라는의미로 주신것으로 생각하고 더 열심히 해야겠다!!!!!!

 

 

04-1 리스트와 반복문

 

리스트(list):

- 파이썬에서 리스트의 의미는 여러가지 자료를 저장할 수 있는 자료입니다. 

- 이러한 자료들을 모아서 사용할 수 있게 해주는 특별한 형태의 자료를 말합니다.

문자열,숫자, 불 등 어떠한 하나의 값을 나타낼 수 자료형과는 다른 여러개의 값을 나타낼 수 있게 해주는 자료형입니다.

- 리스트는 한 가지 자료형만으로 구성할 수도 있고 , 여러 종류의 자료형으로 구성할 수도 있습니다.

 

리스트 선언하고 요소에 접근하기

♣ 파이썬에서 리스트를 생성하는 방법은 다음과 같이 대괄호[ ] 에 자료를 쉼표로 구분해서 입력합니다.

♣ 요소(element) : 대괄호[ ] 내부에 넣는 자료

 

리스트는 한 가지 자료형 

>>> [1, 2, 3, 4]
[1, 2, 3, 4]

>>>["안", "녕", "하", "세", "요"]
['안', '녕', '하', '세', '요']

>>> [273, 32, 103, "문자열", True, False]
[273, 32, 103, '문자열', True, False]



# 숫자만으로 구성된 리스트


#문자열만으로 구성된 리스트


#여러 자료형으로 구성된 리스트





 

리스트 안에 있는 요소를 각각 사용하려면 리스트 이름 바로 뒤에 대괄호[ ]를 입력하고, 자료의 위치를 나타내는 숫자를 입력합니다.

 

* 각각의 요소는 다음과 같은 형태로 저장되는데, 일반적으로 현실에서는 숫자를 1부터 세지만, 문자 열 떄처럼 파이썬은 0부터 센다는걸 꼭 기억하자!!

예) list_a=[273, 32, 103, "문자열", True, False]

 

list_a 

273
[0]
32
[1]
103
[2]
"문자열"
[3]
True
[4]
False
[5]

 

* 이때 리스트 기호인 대괄호[ ] 안에 들어간 숫자를 인덱스(index)라고 부릅니다. 

★'요소'와 '인덱스' 자주 사용되니까 꼭 기억해주기!!!

 


>>> list_a = [273, 32, 103, "문자열", True, False]
>>> list_a[0]
273

>>> list_a[1]
32

>>> list_a[2]
103

>>> list_a[1:3]
[32, 103]

 

*list_a[1:3] 은 1번째 글자부터 3번쨰글자앞,즉 2번째 글자까지 선택합니다.

 

리스트의 특정 요소는 변경할 수도 있습니다.

>>> list_a = [273, 32, 103, "문자열", True, False]
>>> list_a[0] = "변경"
>>>list_a
["변경", 32, 103, "문자열", True, False]

 

 

리스트의 다양하게 사용할 수 있는 방법

첫째, 대괄호 안에 음수를 넣어 뒤에서부터 요소를 선택할 수 있습니다.

273
[-6]
32
[-5]
103
[-4]
문자열
[-3]
True
[-2]
False
[-1]

 

둘째, 리스트 접근 연산자를 다음과 같이 이중으로 사용할 수 있습니다.


>>> list_a = [273, 32, 103, "문자열", True, False]
>>> list_a[3]
'문자열'

>>> list_a[3][0]
'문'

위와 같은 리스트가 있다고 할 때 list_a[3]을 지정하면 "문자열"을 꺼내오고 list_a[3][0]을 지정하면 3번째에서 가져온 "문자열"에서 다시 0번째를 가져와 출력합니다.

 

 

셋째, 리스트 안에 리스트를 사용할 수도 있습니다.

아래와 같이 기술하면 list_a는 리스트 세 개를 가지는 리스트로 만들어집니다.

>>> list_a = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
>>> list_a[1]
[4, 5, 6]
>>> list_a[1][1]
5

* 여기서 [1]인데 [4, 5, 6]을 가져오는 이유는 파이썬에서는 0,1,2,3순으로 숫자를 세기때문이다.

 

리스트에서의 IndexError예외 (IndexError: list index out of range)

: 이 예외는 리스트의 길이를 넘는 인덱스로 요소에 접근하려고 할 때 발생하는 예외로서, 요소가 존재하지 않는 위치에서 요소를 꺼내려고 하니 예외가 발생하는 것입니다.

 

리스트 연산하기: 연결(+), 반복(*), len()

- 문자열에 적용할 수 있는 연산자는 리스트에서도 활용할 수 있습니다.

- 문자열과 리스트는 굉장히 비슷한 자료형으로, 사용할 수 있는 연산자와 함수도 비슷합니다.

 

직접해보는 손코딩

리스트 연산자


실행 결과






















 

-2행과 3행은 list_a와 list_b에 리스트를 선언합니다.

-7행과 8행은 선언된 리스트를 출력하고, 그런다음 13행에서는 연산자 +를 사용해 list_a와 list_b의 자료를 연결합니다.

-14행에서는 연산자*를 사용해 list_a의 자료를 3번 반복합니다.

-19행은 list_a에 들어있는 요소의 개수를 구합니다.

 

♣ len()함수 : 괄호 내부에 문자열을 넣으면 문자열의 글자 수(=길이)를 세어 주지만, 리스트 변수를 넣으면 요소의 개수를 세어 줍니다. 

 

리스트에 요소 추가하기: append(), insert()

리스트에 요소를 추가할 때는 2가지 방법이 있습니다.

1. append()함수를 활용하는 것으로 리스트 뒤에 요소를 추가합니다.

리스트명.append(요소)

 

2. inset()함수를 활용하는 것으로 리스트의 중간에 요소를 추가합니다.

리스트명.insert(위치, 요소)

 

직접해보는 손코딩

리스트에 요소 추가하기

 

실행결과

 

-13행의 insert()함수는 괄호 안에서 정해 준 위치에 요소를 삽입합니다. 이때 해당 위치의 요소는 뒤로 하나씩 밀려

list_a = [10 ,1, 2, 3, 4, 5]가 됩니다. 

(위의 예에서는 0번째 위치에 10을 추가해줍니다.)

 

* append()함수 insert()함수는 리스트에 요소 하나를 추가합니다.

* extend()함수 :

- 한 번에 여러 요소를 추가하고 싶을때 사용합니다.

- extend()함수는 매개변수로 리스트를 입력하는데, 원래 리스트 뒤에 새로운 리스트의 요소를 모두 추가해 줍니다.

- extend()함수는 마치 append()함수를 세 번 반복 실행한 효과를 가져옵니다.

 


>>> list_a = [1, 2, 3]
>>> list_a.extend([4, 5, 6])
>>>print(list_a)
[1, 2, 3, 4, 5, 6]

 

 

리스트 연결 연산자와 요소 추가의 차이

-리스트 연결 연산자와 extend()함수는 비슷한 형태로 동작합니다. 리스트와 리스트를 연셜한다는 기능은 동일한데,

한가지 큰 차이점이 있습니다.

 

차이점:

*리스트 연결 연산자(list_a + list_b)만으로는 list_a에 어떠한 영향도 주지 않습니다. 비파괴적 처리

-기본 자료형(숫자, 문자열, 불)과 관련된 모든 것들은 비파괴적으로 작동합니다.

 

*하지만 extend()함수를 사용하면 list_a에 직접적으로 영향을 줍니다. 파괴적 처리

 

리스트에 요소 제거하기

1. 인덱스로 제거하기 (del키워드, pop() )

: - 인덱스로 제거 한다는 것은 '리스트의 2번째 요소를 제거해 주세요'처럼 요소의 위치를 기반으로 요소를 제거하는 것 입니다.

 - del키워드 또는 pop()함수를 사용합니다. 

del 키워드
리스트의 특정인덱스에있는요소를 제거합니다.

del 리스트명[인덱스]
pop()함수
: 제거할 위치에 있는 요소를 제거하는데, 매개변수를 입력하지 않으면 -1이 들어가는 것으로 취급해서 마지막 요소를 제거합니다.

리스트명.pop(인덱스)

 

직접해보는 손코딩

리스트 요소 하나 제거하기

 

실행 결과

 

del 키워드를 사용할 경우 범위를 지정해 리스트의 요소를 한꺼번에 제거할 수도 있습니다. 

[3:6]을 지정하면 마지막 요소를 포함하지 않는다는것을 꼭 기억해 주기!!

>>>list_b = [0, 1, 2, 3, 4, 5, 6]

[3:6] 일때는 [0, 1, 2, 6]

범위의 한쪽을 입력하지 않으면 지정한 위치를 기준으로 한쪽을 전부 제거해 버릴 수도 있습니다.

[:3] 을 지정하면 3을 기준(3번째 불포함)으로 왼쪽을 모두 제거합니다.

>>>list_c = [0, 1, 2, 3, 4, 5, 6]

>>> del list_c[:3]

>>>list_c

[3, 4, 5, 6]

 

2. 값으로 제거하기: remove()

 

말 그대로 '리스트 내부에 있는 2를 제거해 주세요'처럼 값을 지정해서 제거하는 것입니다. 

이때는 remove()함수를 사용합니다.

리스트.remove()

 

- remove()함수로 지정한 값이 리스트 내부에 여러 개 있어도 가장 먼저 발견되는 하나만 제거합니다. 

>>> list_c = [1, 2, 1, 2]
>>> list_c.remove(2)
>>> list_c
[1,1, 2]

(만약 리스트에 중복된 여러 개의 값을 모두 제거하려면 반복문과 조합해서 사용해야 합니다.)

 

 

모두 제거하기: clear()

리스트 내부의 요소를 모두 제거할 때는 clear()함수를 사용합니다.

 

리스트.clear()

 

 

리스트 정렬하기: sort()

리스트 요소를 정렬하고 싶다면 sort()함수를 사용합니다. 기본 오름차순 정렬입니다.

 

리스트.sort()

 

내림차순 정렬을 하고 싶을때에는 sort(reverse=true)를 써준다.

 

 

리스트 내부에 있는지 확인하기: in/not in 연산자

: 파이썬은 특정 값이 리스트 내부에 있는지 확인하는 방법을 제공합니다. 바로 in연산자를 활용하는 방법입니다.

* in 연산자

in 리스트

 

- 리스트 내부에 값이 있으면 True, 없으면 False를 출력합니다.

 

*not 연산자

-리스트 내부에 해당 값이 없는지 확인하는 연산자로, in연산자와 정확하게 반대로 동작합니다.

 

for반복문

: 컴퓨터에서 반복을 지시하는 방법입니다.

- 반복할 작업 내용이 있는 코드를 '복사'하고, 원하는 만큼 '붙여넣기'하면 됩니다. 

하지만, 100번, 1000번 과 같이 많은수를 반복 작업 하고 싶을 때 반복문을 사용하면 매우 편리합니다.

for i in range(100)
     print("출력")

 

for 반복문: 리스트와 함께 사용하기

기본형태

for 반복자 in 반복할 수 있는것:
     코드

- 반복할 수 있는 것에는 문자열, 리스트, 딕셔너리, 범위 등이 있습니다. 

 

 

직접해보는 손코딩

for 반복문과 리스트

- for 반복문은 리스트에 있는 요소 하나하나가 element라는 변수에 들어가며, 차례차례 반복하게 됩니다.

print()함수로 element를 출력하므로 리스트의 요소를 차례차례 출력하게 되는 것입니다.

실행 결과:

 

 

중첩 리스트와 중첩 반복문

중첩 반복문: 반복문을 여러 겹 중첩해 사용하는 것을 말합니다.

- 일반적으로 n- 차원 처리를 할 때 사용합니다.

[1, 2, 3] : 1차원 리스트

[[1, 2, 3], [4, 5, 6]] : 두 겹으로 감싸진 2차원 리스트

이러한 n-차원 리스트 요소를 모두 확인 하려면 반복문을 n번 중첩해야 합니다.

 

list of list: 리스트 안에 리스트가 들어있는 중첩리스트 입니다.

 

 

 

선택미션

1. list_a =[0, 1, 2, 3, 4, 5, 6, 7]입니다. 다음 표의 함수들을 실행했을때 list_a의 결과가 어떻게 나오는지 적어 보세요.

 

함수 list_a의 값
list_a.extend(list_a)


list_a.append(10)
list_a.insert(3,0)
list_a.remove(3)
list_a.pop(3)
list_a.clear()

 

 

4-2 딕셔너리와 반복문

리스트가 '인덱스를 기반으로 값을 지정하는 것'이라면

딕셔너리(dictionary)는 '키(key)'를 기반으로 값(key)을 저장하는 것' 이라고 할 수 있습니다.

자료형 의미 가리키는 위치 선언 형식
리스트 인덱스를 기반으로 값을 저장 인덱스 변수 = [ ]
딕셔너리 키를 기반으로 값을 저장 변수 = [ ]

 

 

딕셔너리 선언하기

: 딕셔너리는 중괄호{ }로 선언하며, 키: 값 형태를 쉼표(,)로 연결해서 만듭니다. 

키는 문자열, 숫자, 불 등으로 선언할 수 있습니다. 하지만 일반적으로는 문자열로 사용하는 경우가 많습니다.

 

변수 = {
          키: 값,
          키: 값,
           ...
          키: 값,
}

 

코드를 적용해 보면 곰 더 쉽게 이해할 수 있습니다.

>>> dict_a = {
...           "name" : "어벤저스 엔드게임" ,
...           "type" : " 히어로 무비" 
...           }

 

 

딕셔너리 요소에 접근하기

위에서 선언한 딕셔너리 출력해보자!

실행 결과:
>>>dic_a

 

딕셔너리의 요소에 접근할 때는 리스트처럼 딕셔너리 뒤에 대괄호[ ]를 입력하고 내부에 인덱스처럼 키를 입력합니다.

* 딕셔너리를 선언할 때는 중괄호{ }를 사용하지만, 딕셔너리의 요소에 접근할 때는 리스트처럼 딕셔너리 뒤에 대괄호[ ]를 입력하고 내부에 인덱스처럼 키를 입력한다는 것을 주의 하자!!!

 

- 딕셔너리 내부의 값에 문자열, 숫자, 불 등의 다양한 자료를 넣을 수도 있습니다. 리스트와 딕셔너리도 하나의 자료이므로, 리스트와 딕셔너리를 값으로 넣을 수도 있습니다.

 

요소에 접근하는 방법은 리스트와 거의 비슷하므로 쉽게 이해할 수 있습니다.

 

구분 선언 형식 사용 예 틀린 예
리스트 list_a = [ ] list_a[1]  
딕셔너리 dict_a ={ } dict_a["name"] dic_a{"name"}

 

 

직접해보는 손코딩

 

실행 결과:

 

 

딕셔너리의 문자열 키와 관련된 실수

: 딕셔너리를 만들떄 다음과 같은 입력 실수를 하는 경우가 꽤 많습니다.

이러한 코드를 실행하면 NameError라는 오류가 발생합니다.

>>> dict_key = {
...          name: "7D 건조 망고",
...          type: "당절임"
...           }

NameError : name 'name' is not defind

name 이라는 이름이 정의되지 않았다는 오류입니다. 

type은 type() 함수라는 기본 식별자가 있기 때문에 이것이 키로 들어사 따로 오류를 발생하지는 않습니다.

 

* 따라서 이럴땐 키를 문자열로 사용 할때에는 반드시 따옴표를 붙여주기!!!

예) "name"

 

딕셔너리에 값 추가하기/제거하기

딕셔너리에 값을 추가할 때에는 키를 기반으로 값을 입력하면 됩니다.

딕셔너리[새로운 키] = 새로운 값

 

- 만약 다음과 같이 딕셔너리에 이미 존재하고 있는 키를 지정하고 값을 넣으면 기종의 값을 새로운 값으로 대치하기도 합니다.

- 딕셔너리 요소의 제거 또한 간단합니다.

리스트 때처럼 del 키워드를 사용하여 특정 키를 지정하면 해당 요소가 제거됩니다.

 

직접해보는 손코딩

딕셔너리에 요소 추가하기

 

실행 결과:


 

 

직접 해보는 손코딩

딕셔너리에 요소 제거하기

실행 결과:



 

 

KeyError 예외

딕셔너리도 존재하지 않는 키에 접근하면 마찬가지로 KeyError가 발생합니다.

>>> dictionary = { }
>>> dictionary["Key"]

KeyError : 'Key'

 

리스트는'인덱스'를 기반으로 값을 저장하므로 IndexError,

딕셔너리는 '키'를 기반으로 값을 저장하므로 KeyError가 발생하는 것입니다.

 

 

딕셔너리 내부에 키가 있는지 확인하기

방금 언급했던 것처럼 딕셔너리에 존재하지 않은 키에 접금하면 KeyError가 발생합니다. 그래서 존재하는 키인지, 존재하지 않는 키인지 확인할 수 있는 방법이 필요합니다.

 

in 키워드

: 리스트 내부에 값이 있는지 없는지 확인할 때 in키워드를 사용했던 것처럼 딕셔너리 내부에 키가 있는지 없는지 확인할 때도 in 키워드를 사용합니다.

 

직접해보는 손코딩

키가 존재하는지 확인하고 값에 접근하기

실행 결과:


 

 

get()함수

- 존재하지 않는 키에 접근하는 상황에 대한 두 번째 대처 방법으로는 딕셔너리의 get()함수를 사용하는 방법이 있습니다.

- get()함수는 딕셔너리의 키로 값을 추출하는 기능으로 딕셔너리[키]를 입력할 때와 같은 기능을 수행하지만, 존재하지 않는 키에 접근할 경우 KeyError를 발생시키지 않고 None을 출력합니다.

 

키가 존재하지 않을 때 None을 출력하는지 확인하기

실행 결과:

 

 

 

for 반복문: 딕셔너리와 함께 사용하기

for 키 변수 in 딕셔너리:
         코드

 

직접 해보는 손코딩

for 반복문과 딕셔너리

 

실행 결과:


 

 

04-3 범위 자료형과 while 반복문

- for 반복문과 함께 많이 사용되는 자료형을 중 하나는 범위(range)입니다.

- 특정한 횟수만큼 반복해서 돌리고 싶을 때는  for 반복문과 범위를 조합해서 사용합니다.

범위는 다음과 같은 3가지 방법으로 사용할 수 있습니다.

- 정수로 이루어진 범위를 만들 때는 range()함수를 사용합니다.

 

♣ 첫째, 매개변수에 숫자 한 개를 넣는 방법

0부터 A-1까지의 정수로 범위를 만듭니다.

range(A) ----> A는 숫자

 

>>> a =range(5)

>>>a
range(0, 5)

>>> list(range(5))
[0, 1, 2, 3, 4]

 

 

둘째, 매개변수에 숫자를 두 개 넣는 방법

A부터 B-1 까지의 정수로 범위를 만듭니다.

range(A, B------->  A와 B는 숫자

 

>>> list(range(0, 5))               -------> 0부터(5-1)까지의 정수로 범위를 만듭니다.
[0, 1, 2, 3, 4]

>>> list(range(5, 10))             -------> 5부터 (10-1)까지의 정수로 범위를 만듭니다.
[5, 6, 7, 8, 9]

 

 

♣ 셋째, 매개변수에 숫자를 세 개 넣는 방법

A부터 B-1까지의 정수로 범위를 만드는데, 앞뒤의 숫자가 C 만큼의 차이를 가집니다.

range(A, B, C) -------->A, B, C는 숫자

 

>>> list(range(0, 10, 2))              ------> 0부터 2씩 증가하면서(10-1)까지의 정수로 범위를 만듭니다.
[0, 2, 4, 6, 8]


>>>list(range(0, 10, 3))               -------> 0부터 3씩 증가하면서 (10-1)까지의 정수로 범위를 만듭니다.
[0, 3, 6, 9]

 

*range(0, 10)에서 10은 포함되지 않는다.

10을 반드시 포함해야 한다는 것을 강조 하고 싶을 때는 다음과 같이 작성하기도 합니다.

 

>>> a = range(0, 10+1)
>>> list(a)
[0, 1,2 3, 4, 5, 6, 7, 8, 9, 10]

 

TypeError가 발생하는 이유는 range()함수의 매개변수로는 반드시 '정수'를 입력해야 하기 때문입니다.

 

 

 

 

for 반복문: 범위와 함께 사용하기

for 숫자변수 in 범위:
      코드

 

 

직접 해보는 손코딩

for 반복문 범위

실행 결과:

 

첫번째 반복문은[0, 1, 2, 3, 4]로, 두번째 반복문은[5, 6, 7, 8, 9]로, 세번째 반복문은[0, 3, 6, 9] 로 반복이 일어납니다.

 

 

for 반복문: 리스트와 범위 조합하기

-반복을 적용하다 보면 '몇 번째 반복일까?를 알아야 하는 경우가 있습니다. 이럴때 가장 쉬운 방법으로 다음과 같이 범위를 조합해서 사용하는 것입니다.

 

직접해보는 손코딩

실행 결과:

*반복 변수가 작은숫자에서 큰숫자 순서로 올라갔다.

 

for 반복문: 반대로 반복하기(역 반복문)

: 반복 변수가 큰 숫자에서 작은 숫자로 반복문을 적용해야 하는 경우에 사용합니다.

2가지 방법이 있습니다.

 

1. range()함수의 매개변수를 세 개 사용하는 방법

 

직접해보는 손코딩

반대로 반복하기(1)

실행 결과:

 

range()함수의 매개변수에 0-1이라는 수식을 넣었는데, 이떄 그냥 -1로 입력해도 상관없습니다.

단순한 강조를 표현해준것입니다.

 

2. reversed()함수를 사용하는 방법

 

직접해보는 손코딩

반대로 반복하기(2)

실행 결과:



 

while 반복문: for 반복문처럼 사용하기

: while 반복문은 for 반복문에서 언급했던것 이외에는 모두 while 반복문을 사용합니다.

- 대표적으로 무한반복이 있습니다.

- while 반복문에서 가장 중요한 키워드는 조건입니다. (조건을 활용해서 반복을 사용해야 한다면 while 반복문을 사용하는 것이 좋습니다.)

 

직접해보는 손코딩

while 반복문을 for 반복문처럼 사용하기

 

실행 결과:

 

while 반복문: 상태를 기반으로 반복하기

직접해보는 손코딩

해당하는 값 모두 제거하기

 

실행 결과:



 

* 리스트 내부에 있는 보든 2가 제거될 때까지 반복하기 때문에 2가 모두 제거된 결과가 출력됩니다.

 

 

while 반복문: 시간을 기반으로 반복하기

-시간을 기반으로 반복하려면 유닉스 타임이라는 개념을 알아야 합니다.

*유닉스 타임:(Unix Time) 이란 세계 표준시로 1970년 1월 1일 0시 0초를 기준으로 몇 초가 지났는지를 정수로 나타낸 것을 말합니다. 

 

-파이썬에서 유닉스 타임을 구할때는 다음과 같은 코드를 사용합니다.

 

먼저 시간과 관련된 기능을 가져옵니다.

>>> import time

그런 다음 유닉스 타임을 구합니다.

>>> time.time()
1557241486.6654928

이러한 유닉스 타임과 while 반복문을 조합하면 특정 시간 동안 프로그램을 정지시킬 수 있습니다.

 

직접해보는 손코딩

5초 동안 반복하기

실행 결과:

 

출력하는데 계속 비슷한게 써지면서 올라가길래 렉걸린건가 하고 걱정했었는데....ㅎㅎ 알고보니 맞게 잘 한거였다!!

실행 결과가 책에 쓰여진 값이랑 달라서 여러번 해봤는데 다 다른값이 나와서 책에 있는 값이랑 꼭 같게 해야되는것이 아닌 이건 그냥 5초동안 몇번 반복한거를 나타내주는지 그 값을 구하면 되는거라는것을 알게되었다.

 

 

while 반복문: break 키워드/continue 키워드

- 반복문 내부에서만 사용할 수 있는 break와 continue라는 특수한 키워드가 있습니다.* break 키워드: 반복문을 벗어날 때 사용하는 키워드 입니다.-일반적으로 무한 반복문을 만들고, 내부의 반복을 벗어날 때 많이 사용합니다.

 

직접 해보는 손코딩

break 키워드

 

실행 결과:
처음에 실행했는데 계속 0번째 반복문입니다라고 나와서 
왜그런가 살펴봤더니 i=i+1로 적어야 되는데 i=i+i로 적어서 이렇게 나온거였다.

실행결과 :(정답)



 

 

 

count 키워드

: 현재 반복을 생략하고, 다음 반복으로 넘어갈 때 사용하는 키워드 입니다.

 

직접 해보는 손코딩

continue 키워드

실행 결과:

 

 

04-4 문자열, 리스트, 딕셔너리와 관련된 기본 함수

시작하기 전에

반복문과 관련된 파이썬만의 기능들이 있습니다.

이번 단원에서는 파이썬만의 고유한 기능들이라고 할 수 있을 정도로 다른 언어에서는 보기 힘든 형태의 기능들을 배웁니다. 이 내용이 없어도 개발하는 데는 큰 문제가 없지만, 알아 두면 코드를 '파이썬스럽게' 작성할 수 있다는 사실~!!!

 

요약: 
♣ 리스트에 적용할 수 있는 기본 함수: min(), max(), sum()

♣ 리스트 뒤집기: reversed()

♣ 현재 인덱스가 몇 번째인지 확인하기: enumerate()

딕셔너리로 쉽게 반복문 작성하기: items()

리스트 안에 for문 사용하기: 리스트 내포

 

1. 리스트에 적용할 수 있는 기본 함수:min(), max(), sum()

min(), max(), sum() 함수 :

- 리스트를 매개변수로 넣어 사용하는 매우 기본적인 함수입니다.

- 많이 사용되는 함수이므로 꼭 기억해 두자!!

 

함수 설명
min() 리스트 내부에서 최솟값을 찾습니다.  
max() 리스트 내부에서 최댓값을 찾습니다.
sum() 리스트 내부에서 값을 모두 더합니다.

 

>>> numbers = [103, 52, 273, 32, 77]

>>>min(numbers)
32

>>> max(numbers)
273

>>> sum(numbers)
537

 

 

리스트를 사용하지 않고 최솟값, 최댓값을 구하는 방법도 있다.

예)

>>> min(103, 52, 273)

52

>>> max(103, 52, 273)

273

 

reversed() 함수로 리스트 뒤집기

: - 리스트에서 요소의 순서를 뒤집고 싶을 때는 reversed() 함수를 사용합니다.

  - reversed() 함수의 매개변수에 리스트를 넣으면 리스트를 뒤집을 수 있습니다.

 

직접 해보는 손코딩

reversed()함수 

실행 결과:

 

 

* reversed() 함수와 반복문을 조합할 떄는 함수의 결과를 여러 번 활용하지 않고 다음과 같이 for 구문 내부에

reversed() 함수를 곧바로 넣어서 사용한다는 것을 기억하자!!

 

numbers = [1, 2, 3, 4, 5, 6]

for i in reversed(numbers):                                                       
      print(" 첫 번째 반복문: { }".format(i))

for i in reversed(numbers):                                                       
      print(" 두 번째 반복문: { }".format(i))
필요한 시점에 reversed( ) 함수를 사용합니다.

 

 

enumerate( )함수와 반복문 조합하기

: 리스트의 요소를 반복할 때 현재 인덱스가 몇 번째인지 확인해야 하는 경우가 많은데 이런 코드를 쉽게 작성할 수 있도록 

enumerate( )함수를 제공합니다.

 

다음과 같은 리스트가 있다고 가정해 봅시다.

example_list = ["요소A", "요소B", "요소C"]

 

0번째 요소는 요소A입니다.
1번째 요소는 요소B입니다.
2번째 요소는 요소C입니다.

 

다음과 같은 결과를 출력하고 싶을때는 2가지 방법이 있습니다.

방법 1)

example_list =  ["요소A", "요소B", "요소C"]
i = 0
for item in example_list:
             print("{ }번째 요소는 { }입니다.".format(i, item))
             i += 1
방법 2)

example_list =  ["요소A", "요소B", "요소C"]
for i in range(len(example_list)):
      print("{ }번째 요소는 { }입니다. ".format(i, example_list[ i ]))

 

직접 해보는 손코딩

enumerate( )함수와 리스트

실행 결과:

*enumerate () 함수를 사용하면 for와 in 사이에 반복변수를 두 개 넣을수 있습니다.

 

딕셔너리의 items( ) 함수와 반복문 조합하기

: 딕셔너리는 items( ) 함수와 함께 사용하면 키와 값을 조합해서 쉽게 반복문을 작성할 수 있습니다.

 

직접해보는 손코딩

딕셔너리의 items( )함수와 반복

실행 결과:

 

 

리스트 내포

: 프로그램을 만들 때는 반복문을 사용해 리스트를 재조합하는 경우가 많습니다. 다음 코드는 range(0, 20 ,2)로 0부터 20 사이의 짝수를 구한 뒤, 제곱해서 새로운 리스트를 만듭니다.

-  'range(0, 20, 2)의 요소를 i라고 할때 i * i로 리스트를 재조합해 주세요' 라는 코드입니다.

바로 이런 구문을 리스트 내포(list comprehensions)라고 부릅니다. 

 

다음과 같은 형태로 사용합니다.

리스트 이름 = [표현식 for 반복자 in 반복할 수 있는 것]

 

 

 

직접해보는 손코딩

반복문을 사용한 리스트 생성

실행 결과:

 

이런 형태의 코드는 많이 볼 수 있는데, 파이썬 프로그래밍 언어는 이를 한줄로 작성할 수 있는 방법을 제공합니다.

 

직접해보는 손코딩

리스트 안에 for문 사용하기

실행 결과:


 

 

if 구문을 넣어 조건을 조합

리스트 이름 = [표현식 for 반복자 in 반복할 수 있는 것 if 조건문]

 

직접 해보는 손코딩

조건을 활용한 리스트 내포

 

실행 결과:

 

: 'array의 요소를 fruit이라고 할 때 초콜릿이 아닌 fruit으로 리스트를 재조합해 주세요'라는 코드입니다.

 

퀴즈! 한줄로 입력했을 때 코드가 너무 길어서 코드를 줄로 나눠서 작성하는법

리스트 이름 = [표현식
           for 반복자 in 반복할 수 있는 것
           if 조건문]
output = [fruit
       for fruit in array
       if fruit != "초콜릿"]

 

 

문자열의 join( )함수

: join( )함수는 리스트의 요소를 문자열로 연결합니다.

 

형태

문자열.join(문자열로 구성된 리스트)
>>>print(" :: ".join(["1", "2", "3", "4", "5"]))
1::2::3::4::5 

 

 

 

역시 단원이 넘어갈수록 더 난이도가 높아지는것 같다.

사실 제일 첫단원부터 출력을 어떻게하고 프로그램에 어떻게 들어가서하고 이런부분들이 많이 헷갈려서 시간이 많이 걸리고 그래서 "파이썬" 말고 더 쉬운 "혼자공부하는 첫 프로그래밍 with 파이썬" 으로 할걸 그랬나.. 그때 당시에는 이왕하는거 제대로 해보자 하는 마음에 더 어려운걸 한거였는데...하나도 모르는내가 시작부터 너무 어려운걸 고른건가 하고... 생각했었는데... 오히려 지금은 그냥 파이썬을 한걸 너무 잘한 선택이라고 생각한다!! 나 자신 칭찬해!!!!

물론 여전히 어렵고 그러지만, 그래도 처음에는 많이 헷갈렸던 그런부분들이 많이 연습하다보니 이제 쉽게 바로바로 할 수 있게 되었고  어려운만큼 원하는 값이 출력되었을때 정말 재밌고 뿌듯하다!!!!

초반에는 어렵다는 생각을 많이 했는데 지금은 공부 하면서 재밌다는 생각이 더 많이 든다.

 

그리고 공부하면서 또하나 좋은점이 있는데 타자속도가 빨라졌다는 것이다~~ㅎㅎㅎㅎㅎ

파이썬 공부도 하고 타자도 늘고~~이것이야 말로 일석이조!!! 좋구만~~