Class 복습
class CookieFrame(): # CookieFrame이라는 이름의 class 선언
def set_cookie_name(self, name):
self.name = name
cookie1 = CookieFrame()
cookie2 = CookieFrame()
cookie1.set_cookie_name("cookie1") # 메소드의 첫 번째 인자 self는 무시된다.
cookie2.set_cookie_name("cookie2")
print(cookie1.name) # cookie1
print(cookie2.name) # cookie2
class Profile():
def set_profile(self, set_profile):
self.name = set_profile['name']
self.gender = set_profile['gender']
self.birthday = set_profile['birthday']
self.age = set_profile['age']
self.phone = set_profile['phone']
self.email = set_profile['email']
def get_name(self):
return f"{self.name}"
def get_gender(self):
return f"{self.gender}"
def get_birthday(self):
return f"{self.birthday}"
def get_age(self):
return f"{self.age}"
def get_phone(self):
return f"{self.phone}"
def get_email(self):
return f"{self.email}"
profile = Profile()
profile.set_profile({
"name": "lee",
"gender": "man",
"birthday": "01/01",
"age": 32,
"phone": "01012341234",
"email": "python@sparta.com",
}
)
print(profile.get_name())
print(profile.get_gender())
print(profile.get_birthday())
print(profile.get_age())
print(profile.get_email())
mutable 자료형과 immutable 자료형
immutable = "String is immutable!!"
mutable = ["list is mutable!!"]
string = immutable
list_ = mutable
string += " immutable string!!"
list_.append("mutable list!!")
print(immutable)
print(mutable)
print(string)
print(list_)
# result print
"""
String is immutable!!
['list is mutable!!', 'mutable list!!']
String is immutable!! immutable string!!
['list is mutable!!', 'mutable list!!']
"""
Git 복습
Git은
1) 프로젝트의 버전 관리를 위한 도구: 버전 - 'commit' 할 때마다 변경되는 모습, 상태 등. history 등을 통해 변경 사항 확인
2) 작업 단위 나누기 가능
3) 협업해서 하나의 프로젝트를 만드는데 유용
Github는
Git 원격 저장소 + Git으로 할 수 있는 커뮤니티 기능 서비스
=> Git으로 된 프로젝트 저장 공간을 제공하고, Git을 편하게 사용하기 위한 부가기능
순서
1) 폴더 생성 - 파일 생성
2) 소스트리 - 로컬 저장소 추가하기
프로젝트 없애기: 소스트리에서 '로컬' - 프로젝트 선택 후 우클릭 -'삭제'
휴지통 이동: 컴퓨터에서도 파일 삭제
👉 add(staging) 를 사용하면, 컴퓨터에서 여러 파일을 수정했어도 '기능 A 수정' 에 관련된 파일만 골라서 commit 할 수 있다
Git으로 관리되는 프로젝트' 를 Git 에서는 repo(리포, repository 리포지토리의 약자) 라고 부름
정리
1. 원격 repo 와 로컬 repo 의 상태를 똑같이 맞춰주기, 즉 로컬 repo 에 원격 repo 작업내역 가져오기 (pull)
2. 로컬 repo 의 작업 내용을 저장하고 (commit)
3. 원격 repo 에 로컬 repo 내용을 반영 (push)
clone
:원격 repo를 내 컴퓨터에 가져오기
1) 복제할 repo의 url 복사
2) 소스트리 - 새로 만들기 - url에서 복제
3) 목적지 경로: 연결 원하는 내 컴퓨터 폴더 선택
4) '클론'
1) 누가 이 작업을 할 것인지 - Issue
2) 각자 맡은 것을 작업한다 - Branch
3) 각자의 작업을 프로젝트에 합친다 - Merge
🔥 협업할 때는 pull 먼저 받고 push하기
오늘 수업에서 배운 것
number = "num"
try: # try 구문 안에서 에러가 발생할 경우 except로 넘어감
number = int(number) # "num"을 숫자로 바꾸는 과정에서 에러 발생
except: # 에러가 발생했을 때 처리
print(f"{number}은(는) 숫자가 아닙니다.")
number = input()
try:
int(number)
10 / number
except ValueError: # int로 변환하는 과정에서 에러가 발생했을 떄
print(f"{number}은(는) 숫자가 아닙니다.")
except ZeroDivisionError: # 0으로 나누면서 에러가 발생했을 때
print("0으로는 나눌수 없습니다.")
except Exception as e: # 위에서 정의하지 않은 에러가 발생했을 때(권장하지 않음)
print(f"예상하지 못한 에러가 발생했습니다. error : {e}")
def 집까지_걸어가기():
print(error) # 선언되지 않은 변수를 호출했기 때문에 에러 발생
def 버스_탑승():
집까지_걸어가기()
def 환승():
버스_탑승()
def 지하철_탑승():
환승()
def 퇴근하기():
지하철_탑승()
퇴근하기()
"""
Traceback (most recent call last):
File "sample.py", line 17, in <module>
퇴근하기()
File "sample.py", line 15, in 퇴근하기
지하철_탑승()
File "sample.py", line 12, in 지하철_탑승
환승()
File "sample.py", line 9, in 환승
버스_탑승()
File "sample.py", line 5, in 버스_탑승
집까지_걸어가기()
File "sample.py", line 2, in 집까지_걸어가기
print(error)
NameError: name 'error' is not defined. Did you mean: 'OSError'?
"""
# 기본적인 활용 방법
# [list에 담길 값 for 요소 in 리스트]
numbers = [x for x in range(5)] # [0, 1, 2, 3, 4]
# 조건문은 축약식 뒷부분에 작성하며, 축약식이 True인 경우 list에 값이 담긴다.
even_numbers = [x for x in range(10) if x % 2 == 0] # [0, 2, 4, 6, 8]
# 아래와 같이 활용할 수도 있다.
people = [
("lee", 32),
("kim", 23),
("park", 27),
("hong", 29),
("kang", 26)
]
average_age = sum([x[1] for x in people]) / len(people)
print(average_age) # 27.4
#list 축약식의 []를 ()혹은 {}로 바꿔주면 tuple, set 축약식을 사용하실수 있습니다.
# dictionary 축약식의 구조는 list와 동일하지만, key / value 형태로 지정해야 합니다.
people = [
("lee", 32, "man"),
("kim", 23, "man"),
("park", 27, "woman"),
("hong", 29, "man"),
("kang", 26, "woman")
]
people = {name: {"age": age, "gender": gender} for name, age, gender in people}
print(people)
# result print
"""
{
'lee': {'age': 32,
'gender': 'man'},
'kim': {'age': 23,
'gender': 'man'},
'park': {'age': 27,
'gender': 'woman'},
'hong': {'age': 29,
'gender': 'man'},
'kang': {'age': 26,
'gender': 'woman'}
}
"""
# map은 함수와 리스트를 인자로 받아 리스트의 요소들로 함수를 호출해줍니다.
string_numbers = ["1", "2", "3"]
integer_numbers = list(map(int, string_numbers))
print(integer_numbers) # [1, 2, 3]
# map 함수를 사용하지 않는 경우 아래와 같이 구현할 수 있습니다.
string_numbers = ["1", "2", "3"]
integer_numbers = []
for i in string_numbers:
integer_numbers.append(int(i))
print(integer_numbers) # [1, 2, 3]
# list 축약식으로도 동일한 기능을 구현할 수 있습니다.
# map과 list 축약식 중 어떤걸 써야 할지 고민된다면 이 글을 읽어보시는것을 추천합니다.
string_numbers = ["1", "2", "3"]
integer_numbers = [int(x) for x in string_numbers]
print(integer_numbers) # [1, 2, 3]
# map 함수와 lambda 함수를 함께 사용하면 더 다채로운 기능을 구현할 수 있습니다.
numbers = [1, 2, 3, 4]
double_numbers = list(map(lambda x: x*2, numbers))
print(double_numbers) # [2, 4, 6, 8]
# filter 함수는 map과 유사한 구조를 가지고 있으며, 조건이 참인 경우 저장합니다.
numbers = [1, 2, 3, 4, 5, 6, 7, 8]
even_numbers = list(filter(lambda x: x%2 == 0, numbers))
print(even_numbers) # [2, 4, 6, 8]
# filter 함수 또한 list 축약식으로 동일한 기능을 구현할 수 있습니다.
numbers = [1, 2, 3, 4, 5, 6, 7, 8]
even_numbers = [x for x in numbers if x%2 == 0]
print(even_numbers) # [2, 4, 6, 8]
# sort 함수를 사용하면 list를 순서대로 정렬할 수 있습니다.
numbers = [5, 3, 2, 4, 6, 1]
numbers.sort()
print(numbers) # [1, 2, 3, 4, 5, 6]
# sort와 lambda 함수를 같이 사용하면 복잡한 구조의 list도 정렬할 수 있습니다.
people = [
("lee", 32),
("kim", 23),
("park", 27),
("hong", 29),
("kang", 26)
]
# 나이 순으로 정렬하기
people.sort(key=lambda x: x[1])
print(people)
# result print
"""
[
("kim", 23),
("kang", 26),
("park", 27),
("hong", 29),
("lee", 32)
]
"""