[Harman 세미콘 아카데미]Day_3(Python 기초)
3일차.
아침에 교육을 들으러 화곡역에서 내리며 지하철역에서 진동을 하는 옛날 토스트에 이끌려 소세지빵과 고로케를 친구와 나눠먹으며 함께 하루를 시작했다.
점심시간에는 조원들과 짬뽕도 먹으며 조금 더 친해질 수 있었다. (I인 나에겐 최대 수확이였다)
오늘은 반복문, 정렬, 딕셔너리에 대해 중점을 두고 공부했던 것 같다.
반복문: 프로그램 내에서 똑같은 명령을 일정 횟수만큼 반복하여 수행하도록 제어
for : 반복 횟수 명확할 때
while : 반복 횟수가 명확하지 X
먼저, while 문의 형태(?)는 두개로 나뉜다. 이상하게 써도 아시는 분들은 다 아실거라 믿는다...ㅎ
1) while True:
if(조건문):
print("")
break ---> 무한 루프를 빠져 나오기 위함
else:
무한 반복문 실행
2) while 조건식:
실행문
실행문
탈출문
-----> 개인적으로 1번의 형태를 사용하는게 더 편하다. (마음대로 if문을 추가하며 제어할 수 있어서)
while 문에 대한 실습으로
Random 함수를 활용하여 While문에 대한 실습도 진행하였다. (Python에서 사용하는 함수에 대해서도 많이 배운다)
반복문의 쌍두마차 for문. 코딩을 해본 사람들에겐 매우 친숙할 것이다.
for문: 반복 횟수가 명확함
ㄴ형태 : for (변수) in 문자열(리스트/튜플):
print(변수)
range() 함수 활용 -> 범위 연산자
range(start ,end ,step) --->C언어의 for문 형태
or range(start ,end) ---> step 기본값 1
or range(end) ---> start 기본값 0, step 기본값 1
****start = inclusive, end = exclusive이므로 end에 유의하자****
for문에 대한 실습 과정
1) 오랜만에 해본 별찍기... Hard 코딩부터해서 방법이 많다...
별찍기2 & 3 & 4 ...나름 재미있다 ㅎ
for문을 활용한 다양한 예제들... in 활용 & len 활용
2번째의 for문의 경우, i를 활용해 한번에 처리할 경우, tuple의 index는 0부터 시작하고 학생의 번호는 1 부터 시작하기
때문에, 학생의 번호의 경우에는 i+1로 수정하여 출력한다.
정렬 알고리즘 : 원소들을 일정한 순서대로 열거하는 알고리즘으로 치환을 기본으로 활용한다.
1) Bubble Sort : 인접한 수를 비교하며 정렬, 코드가 단순하다
형태: for i in range(0,len(list1)):
for j in range(i+1,len(list1)):
if(list1[j] < list1[i]):
list1[i], list1[j] = list1[j], list1[i]
print(list1)
2) Selection Sort : 가장 큰 원소 or 가장 작은 원소를 찾아 리스트(처음~ 끝)을 교체해 나가는 방법
1. 최솟값을 먼저 찾고, 맨 앞의 인덱스와 자리 바꿈
2. 다시한번 최솟값을 찾고, 2번째 인덱스랑 바꿈
3. 쭉쭉쭉하면서 작은값들을 왼쪽에서부터 정렬
4. 결과: 오름차순 정렬이 됨
--->아랫 분의 블로그를 참고하시면 이해하기 훨씬 쉬우실겁니다...
(참고) https://gmlwjd9405.github.io/2018/05/06/algorithm-selection-sort.html
탐색: 원하는 값이나 인덱스를 찾기 위한 알고리즘
1) Sequential search : 하나를 찾기 위해 처음부터 끝까지 차례대로 찾아 나감 (가장 단순한 방법)
2) Binary Search: 리스트의 중간값을 이용해 비교하여 정렬
*****조건: 리스트가 정렬이 되어 있어야 사용 가능 *********
1. 리스트의 중간 인덱스를 기준으로 삼음
2. 찾고자 하는 값이 mid_index의 값보다 크면 왼쪽 값들 다 버림(작으니깐)
3. low_index를 mid_index+1로 설정하고 mid_index를 다시 조정
4. 찾고자 하는 값이 mid_index의 값보다 작으면
high_index를 mid_index-1로 설정하고 mid_index를 다시 조정
5. 찾을때까지 mid_index에 대한 값을 바꾸는 과정
----> 2진 탐색에 대해 실습을 하며 이런식으로도 정렬을 하는구나... 하면서 실습을 진행했던 것 같다.
Dictionary : key - value 쌍을 가지고 있는 자료형, 단어 그대로 사전과 같다... oxford English Dictionary
형태: 딕셔너리명 = {}
딕셔너리명 = { "key" : "value" }
***** key에는 변하지 않는 값을, value에는 변해도 되는 값을 넣는다 *****
또한, list와 같이 key 와 value를 추가, 삭제도 가능하다
딕셔너리에서 값을 가져오는 2가지 방법도 배웠다.
list에서 index의 값을 불러오는 것과 유사한 방법과 .get()을 활용하는 방법
in 을 활용하여 특정 값이 존재하는지 확인 & clear 를 활용하여 모든 데이터도 지울 수 있다. (매우 간편해서 좋다...)
key와 value의 값을 따로 또는 다 같이 불러 올 수 있는 방법도 실습하였다.
하나의 딕셔너리를 활용할 수 있는 여러 방법들이 많은 것 같다. 딕셔너리의 형태는 낯익진 않지만 재미있는 것 같다..ㅋ
예제들도 풀어보았다.
먼저, 오늘의 수업이 모두 끝나가는 시점에 팀원들의 피로도를 딕셔너리 형태로 구성하여 평균 피로도를 구하는 문제를 풀었다. 위에서 배운, value를 뽑아 사용하는 방법을 사용하여 평균을 구한다. 평균 86.25% 다들 피곤한가보다...
또한, 교수님께서 박스오피스에서 제공하는 자료를 보여주셨다. 자료는 딕셔너리 형태로 어제 영화관에서 발표한 영화명, 수익, 일일 관객 등에 대한 여러 정보를 포함하고 있었다.
이를 for문을 활용하여 1~10위의 영화들을 정렬하며 딕셔너리에 대해 더 재미있게 배울 수 있었다.
느낀점: 학부시절 분명 딕셔너리에 대해 배운 것 같은데... 잘 기억이 안난다. 구면인듯 초면인 느낌... 익숙하지 않아서 실습을 하며 이해하는데 조금 서툴렀지만, 배운 내용을 잘 복습하여 내일하게 될 딕셔너리 관련 예제 실습을 잘 해내어 나만의 지식으로 남기고 싶다.