########################################################################
# 오전세션_이론
########################################################################
# day1: 변수, ㅔ이터 타입, 간단한 함수, 문자열 다루기
# day2: 자료구조 (list, tuple, dictionary)
# 테이터 형식
a = 10
b = "abc"
b[0]
c = 3.14
d = True
e = None
# LIST
# [] 대괄호로 표현을 할 수 있음
# 순서가 있는 자료 구조.
l = [1, 2, 3, 4, 5]
ages = [10, 23, 40, 32]
age1 = ages[0] # 인덱싱
age2 = ages[1] # 인덱싱
age4 = ages[-1] # 인덱싱
age1_age2 = ages[0:2] # 슬라이싱 시작숫자:끝숫자의 인덱스번호+1
age3_age4 = ages[2:4]
# 리스트에서 자주 사용하는 함수들
# 1) append: 마지막에 하나의 요소를 추가 (마지막이라고 위치가 정해져 있음.)
ages.append(60)
print(ages)
# 2) insert: 순서를 지정해서 넣어줄 수 있음 (특정 인덱스 위치에 하나의 요소를 추가)
ages.insert(1, 15) # 1: 인덱스 번호. 즉, 2번 째 자리에 15(요소)를 추가.
print(ages)
# 3) remove: 특정 값을 지우는 함수
# 인덱스 위치로 필요한(제거하고자 하는) 요소를 찾는게 아니라 값으로 찾는것.
ages.remove(60)
print(ages)
ages2 = [10, 15, 23, 60, 40, 32, 60]
ages2.remove(60) # 함수는 앞에서 먼저 만나는거에 대해서 작동함.
print(ages2) # [10, 15, 23, 40, 32, 60]
# 특정값을 지울 떄, 값이 여러 개일 경우, 제일 처음 만나는 값을 지움
# 4) pop: 마지막 요소 하나를 꺼내기
last_age = ages.pop() # 위치가 정해져있는 값을 꺼내기 때문에 괄호 안에 아무것도 적지 않아도 됨
print(ages)
print(last_age)
# pop 사용 예시
# 3명의 나이가 적힌 종이 [20, 10, 30]
# 나이가 많은 순서대로 10살씩 더해서 출력
# 풀이
# 1. 순서대로 정렬함 [10, 20, 30]
# 2. pop 30 + 10, pop 20 + 10, pop 10 + 10
# 5) sort: 오름차순 정렬
# 어떤 값을 함수에 줄 필요 없음. 위치나 값이 필요 없음.
ages.sort()
print(ages)
# 문자열 리스트 => 알파벳 순서
list1 = ['a', 'd', 'b', 'g', 'e', 'i']
list1.sort()
print(list1)
# Tuple 튜플
# 튜플은 변경이 불가능한 리스트.
# 소괄호로 선언하고 주로 데이터 보호 목적에서 사용됨.
# 그래서 정렬도 안 됨. but 리스트 안에 튜플이 요소로 있으면 정렬 가능.
seoul = (37.5665, 126.9789) # 좌표값 같은거 쓸 때 튜플 사용함
# Dictionary 딕셔너리
# {} 중괄호로 선언
# key(키) - value(값)
# list, tuple은 값에 접근하기 위해 인덱스(위치)가 중요했는데
# 얘는 값에 접근하기 위해 key가 중요하기 때문에 key가 중요함.
student = {
"name":"Hannah",
"age":25,
"major":"Data Science"
}
b = student["name"] # key가 위치가 됨. 인덱스 안됨. 그래서 위치보다 key값들이 중요해짐.
print(b)
# keys: 키값을 다 가져오기
student.keys()
# valuses: 값들을 다 가져오기
student.values()
# items: 키, 값 모두 가져오기
student.items()
# # 없는 키 접근할 때
# cls = student["class"]
# print(cls)
#Traceback (most recent call last):
# File "C:\Users\puppk\Desktop\내배캠\python_study\day2.py", line 91, in <module>
# cls = student["class"]
# ~~~~~~~^^^^^^^^^
#KeyError: 'class'
# 이런 오류 나면 코드 멈춰지니까 get으로 확인할 수 있음. ↓↓↓
# class라는 키 찾고 싶을 때
cls_get = student.get("class")
print(cls_get) # None (없는 키 접근할 때 None; class에 대한 값이 없음)
# Dictionary에서 pop하는 경우 즉, 특정 키에 대한 값을 가져올 경우,
# pop(키)
# 리스트 안에 딕셔너리
# 리스트로 순서를 주고, 딕셔너리로 정체로 알려준다.
students = [
{"name": "Hannah", "age": 25, "score": 90},
{"name": "Minji", "age": 21, "score": 85},
{"name": "Yumi", "age": 23, "score": 95}
]
# 미니퀴즈
# Q1. 리스트
########################################################################
# 오후세션_실습
########################################################################
# 변수를 쓰는 이유: 재사용하기 위해, 중간중간 결과를 저장하고 가능.
# 문법은 이걸 왜 사용하는지를 알고 있으면 금방 외울 수 있음.
# 리스트는 같은 성질을 묶어줄 때 사용.
# 값을 []에 넣어주는데 순서가 정해져있음 => 인덱싱하는 방법은 문자열과 같음
# List 활용
# 점수 평균 구하기
scores = [90, 85, 77, 95, 88]
sum_scores = scores[0] + scores[1] + scores[2] + scores[3] + scores[4]
length_scores = 5
m = sum_scores / length_scores
# 내장함수 사용하기
sum_scores2 = sum(scores)
length_scores2 = len(scores)
m2 = sum_scores2 / length_scores2
# max(), min(): 리스트 안에 최대값, 최소값을 출력해주는 함수
max_score = max(scores)
min_score = min(scores)
# 리스트의 구조를 보고 값에 접근하는 방법을 배웠지만, 함수를 사용해서 접근하는 방법도 중요함.
# Tuple 활용
coord = {37.5665, 126.9789}
coord_1 = coord[0]
coord_2 = coord[1] # 이런식으로 튜플 값에 접근 가능
# 첫 번쨰 학생의 성적 수정하는 경우,
first_stu = scores[0]
print(first_stu)
scores[0] = 91
print(scores)
# Dictionary 활용
# key가 중요. 순서가 중요하지 않음.
# 값 변경 가능
student = {
"name": "Hannah",
"age": 25,
"major": "Data Science"
}
name = student["name"]
# 정리
# list, tuple, dictionary는 많은 데이터를 다루기 위해 사용
# list를 가장 많이 사용하는데 그 이유는 인덱싱, 슬라이싱 가능하고, 수정 가능하기 때문
# list에서 자주 사용하는 함수: append, insert, sort, remove, pop, get, sum, len, max, min 등
# list와 tuple의 차이점: 수정가능 유무, tuple이 속도가 좀 더 빠름, tuple으니 위도경도같은 고정된(불변의)값을 보호하고 싶을 때 사용
# dictionary는 값에 정체성을 부여(태그)하기 위해 사용 (=> 키)
# list와 dict를 같이 사용하기도 함. 이때, 리스트로 순서를 줄 수 있고, 딕셔너리로 값에 정체성을 부여할 수 있다는 장점이 있음
# 뭐 실습이라고 하기 보다는 그냥 정리 시간이네 좋아 이것도.
# list: [] / tuple: () / dictionary: {}
########################################################################
# 오전세션_이론
########################################################################
# 흐름과 제어: 프로그램은 위에서부터 내려옴
# 조건문, 반복문, 둘의 결합
#=======================================================================
# 조건문: IF문
#=======================================================================
'''
if: 만약에~
if 조건식:
(true) 실행문1("짝수입니다")
elif 다른 조건식:
(1 -> false)
(true) 실행문2("홀수입니다")
else: # else에는 아무 조건을 적어주지 않음. 위에서 조건 주고 남은 나머지에 해당하는 내용이기 때문.
0이나 문자열 ("짝수도 홀수도 아닙니다.")
'''
'''
# if와 else는 이 구문에서 한 번만 사용가능
# 그러나 elif는 여러번 사용해서 조건을 여러개 줄 수 있음
if 오늘이 월요일:
(true) 월요일입니다
elif 오늘 화요일:
(true) 화요일입니다
elif 오늘 수요일:
(true) 수요일입니다
elif 오늘 목요일:
(true) 목요일입니다
elif 오늘 금요일:
(true) 금요일입니다
elif 오늘 토요일:
(true) 토요일입니다
else:
일요일입니다
'''
## 실습1)
# 홀수 짝수 판별 -> 조건 줄 때 짝수를 먼저 주는게 좋긴함
# if 홀수:
# true "홀수입니다"
# elif 짝수:
# true "짝수입니다"
# else:
# "홀수도 짝수도 아닙니다"
# 조건에서 먼저 걸리는게 많은걸 위에 적어주는게 좋음
# 0을 거르고 싶으면 중간에 조건을 넣기보단 아래에 넣어주는게 더 효율적임
# 짝수 - 홀수 - 0 이런식으로 필터링 해주는게 좋음
num = int(input())
if num % 2 == 0:
print("짝수입니다.")
elif num % 2 != 0:
print("홀수입니다.")
else:
print("짝수도 홀수도 아닙니다.")
#=======================================================================
# 반복문: FOR문, WHILE문
#=======================================================================
# 같은 동작을 여러번 해야할 때 사용하는 구문
# python에서 반복문을 나타내는 구문: FOR, WHiLE
# -> 따라서 자료구조와 연결시켜서 생각해볼 수 있어야 함
# 문법 구조
'''
for 변수 in 반복할 대상:
반복할 내용
'''
# 1) 리스트 순회
# for ... in
fruits = ["사과", "바나나", "딸기"]
for fruit in fruits:
print(fruit) # 반복문에서 리스트의 값들을 fruit이라는 변수에 담아줬으니까, 리스트명을 print 안에 적어줄 필요 없음
# 1st 순회: fruit = fruits[0] = 사과
# 2nd 순회: fruit = fruits[1] = 바나나
# 3rd 순회: fruit = fruits[2] = 딸기
# for ... in range(1, n+1):
# range는 범위를 나타냄 -> 따라서 이때부터는 위치값(인덱스값)이 필요해짐
# 횟수까지 고려 -> 몇 번할지, 몇 번 순회를 돌지까지
for i in range(2,6):
print(i)
n = int(input("N을 입력해주세요."))
total = 0
for i in range(1, 6):
total = total + i # total += i (같은 의미) # total+1=total 이렇게 순서 바뀌면 의미 달라짐;
print(total)
print(total)
# i = 1 -> total + 1 = 1
# i = 2 -> total + 2 = 3
# i = 3 -> total + 3 = 6
# 들여쓰기 잘못하면 선언 자체가 안 될 수도 있어서 들여쓰기 잘 해줘야함
# for -> 순회할 공간, 횟수를 지정해주는 반복문
# while -> 순회할 공간은 있는데 횟수를 지정해줄 수 없을 때 즉, 어떤 특정 조건에서 동작하게해주는 반복문
# while은 조건이 만족할 때까지 순회를 함
# while은 false가 되었을 때 반복 종료
'''
[1,3,5,7,8] # 7까지 돌고 8앞에서 멈춤
while 조건식:
실행문
특정 조건에서만 동작하게 하는 반복문
조건을 잘못 작성하면 영원히 끝나지 않는 반복문이 되어 버림. 조건 잘 써줘야 함.
'''
n = 5
while n > 0: # n이 0보다 클 때(까지)
print(n)
n -= 1
print("발사!")
# 반복문 순회 과정 손으로 작성해보기
# if문, for문(for in, for in range), while문
# 손으로 적기
########################################################################
# 오후세션_실습
########################################################################
# if, for, while은 손코딩만큼 효과 좋은거 없음
# for
# for 변수 in 반복할 대상: -> 변수(반복할 때마다 새로운 값이 들어가는 것) / 반복할 횟수가 정해져 있음. 대상이 가진 크기만큼 반복 가능. / 개체를 정해서 반복하는 것.
# 실행문
fruits = ["사과", "바나나", "딸기"]
for fruit in fruits:
print(fruit)
# 반복할 대상 -> 순환 가능한 객체(iterable)
# str "pythohn" 이런 문자열도 인덱싱 가능하기 때문에, 반복할 대상에 들어갈 수 있음
# tuple (10, 20) : 얘도,
# dic {"a":"b"} : 얘도 반복할 대상 가능
# set {1, 2, 3} : set은 중복을 허용..? 쨌든 이런것도 있는데 얘도 반복할 대상 가능
# 반복할 대상에 들어갈 수 없는 것 -> int, float, bool (여러개가 있어야 함 이렇게 한 개 덜렁 있는 건 안됨)
# for 변수 in range(시작값, 끝값+1): -> 변수 시작값 ~ 끝값까지 범위를 만들어 주는 것 / 횟수 중심으로 반복을 정해주는 구문임
# 실행문
for i in range(1, 6): # 5까지 반복하고 싶으면 5+1해서 6 적어줘야 됨
print(i)
total = 0
for i in range(1, 6):
total += i # i는 for문 안에서만 사용하는 변수. 블럭 단위로 작성 필수. 반복시키고 싶은거면 for문 안에, 고정된 값을 지정해주고 싶으면 for문 위에, 바깥에 작성하는 것이 좋음.
# while
# while 조건식: # 횟수를 정하고 싶지 않을 때 -> 조건에 따라 반복문을 실행하고 싶을 때 사용하는 반복문
# 실행문
n = 5
while n > 0: # while은 조건이 만족할 때까지 -> 종료될 때까지 돌아감
print(n)
n -= 1 # n = n-1 (같은 의미)
scores = [88, 95, 67, 70, 100]
for s in scores:
if s >= 80:
print(f"{s}점 → 합격")
else:
print(f"{s}점 → 불합격")
# ⅰ) s = 88 -> 88>=100: true -> 합격
# ⅱ) s = 95 -> 95>=100: true -> 합격
# ⅲ) s = 67 -> 67>=100: false -> 합격
# ⅳ) s = 70 -> 70>=100: false -> 합격
# ⅴ) s = 100 -> 100>=100: true -> 합격
#=======================================================================
# 반복문 흐름 제어 구문: break, continue
#=======================================================================
# break: 즉시 멈춘다; 조건 만나면 for문 끝내라
# continue: 일단 넘어간다; 조건을 만나면 넘기고 다시 for문으로 올라가라
for i in range(1, 10): # i 1 ~ 9
if i == 5: # 5 나오면
break # 그냥 끝내주세요
print(i)
# ⅰ) i=1 -> print: 1
# ⅱ) i=2 -> print: 2
# ⅲ) i=3 -> print: 3
# ⅳ) i=4 -> print: 4
# ⅴ) i=5 -> 반복문 종료
# 참고로 break는 while문에서 자주 쓰임
### break
# 1, 2, 3, 4, 5, ...
# 5를 만나면 반복문을 종료하고 싶을 때
count = 1
while True: # 간편해서 많이 쓰이나 잘못쓰면 무한루프 에러에 빠질 수 있다.
if count == 5:
print("5에 도달했습니다.")
break
count += 1
# if 문 안에 print가 있으면 ..? print가 break 안에 있는지 밖에 있는지 구분할 줄 알아야 함.
### continue
# 이번만 건너뛰기
for i in range(1, 6):
if i % 2 == 0:
continue # continue는 for랑 짝꿍. continue: 조건을 만나면 무시하고 다시 for로 올라가라.
print(i)
# print 결과
# 1
# 3
# 5
# 반복 횟수: 5 (range(1, 6))
# i 만큼 '*'
for i in range(1, 6):
print('*' * 1)
# *
# **
# ***
# ****
# *****
# 반대 별찍기 과제
# *
# **
# ***
# ****
# *****