다양한 비교 연산자들을 사용해 값을 비교하고, 결과가 True인지 False인지 판단할 수 있습니다. 비교 결과는 조건문에서 사용된다.
# '==' : 값이 일치하는지 비교 "a" == "a" # True "a" == "b" # False 1 == "1" # False, 값은 동일하지만 자료형이 다르기 때문 # # '!=' : 값이 일치하지 않는지 비교''' 0 != 1 # True 0 != 0 # False # # '>', '<','>=', '<=' : 값이 큰지 작은지 비교 5 > 2 # True 1 < 0 # False 1 > 1 # False 1 >= 1 # True # # in : 특정 값이 list / tuple / set에 포함되어 있는지 확인 4 in [1, 2, 3] # False 1 in (1, 2, 3) # True
and, or을 사용해 2개 이상의 조건을 복합적으로 사용할 수 있습니다.
if condition1 and condition2: # 두 조건을 모두 만족할 경우 # some code elif condition or condition: # 두 조건 중 하나라도 만족할 경우 # some code else: # some code
bool() 함수를 사용해 값이 True인지 False인지는 확인할 수 있다.
print(bool("")) # False print(bool(0)) # False print(bool([])) # False print(bool("sample")) #True print(bool([1, 2])) #True
any() 혹은 all() 함수를 사용해 여러 값들에 대한 조건을 판단할 수 있다.
# all() : 요소들이 모두 True일 경우 True 리턴 if all([True, True, True, False, True]): print("통과!") # False가 존재하기 때문에 분기문을 통과하지 못함 # any() : 요소들 중 하나라도 True일 경우 True 리턴 if any([False, False, False, True, False]): print("통과!") # True가 1개 이상 존재하기 때문에 분기문을 통과함
python에서 사용되는 함수들은 비슷해 보여도 사용 방법이나 리턴 타입들이 다를 수 있다.
해당 기능의 결과물이 어떤 데이터를 리턴해 주는지 알아야 한다.
# sort sample_list = [3, 2, 4, 1, 5] sample_list.sort() # return data 없이 list 자체를 정렬 print(sample_list) # [1, 2, 3, 4, 5] # # sorted sample_list = [3, 2, 4, 1, 5] sorted_list = sorted(sample_list) # 정렬 된 list를 return # print(sorted_list) # [1, 2, 3, 4, 5]
number = input() try: int(number) 10 / number # except ValueError: # int로 변환하는 과정에서 에러가 발생했을 떄 print(f"{number}은(는) 숫자가 아닙니다.") # except ZeroDivisionError: # 0으로 나누면서 에러가 발생했을 때 print("0으로는 나눌수 없습니다.") # except Exception as e: # 위에서 정의하지 않은 에러가 발생했을 때(권장 X) print(f"예상하지 못한 에러가 발생했습니다. error : {e}") # except 문법 또한 if / elif와 같이 연달아서 작성할 수 있다.
python
def add(*args):#unpacking
result = 0
for i in args:
result += i
return result
numbers = [1, 2, 3, 4]
print(add(*numbers))#packing
python
def set_profile(**kwargs):#unpacking
profile = {}
profile["name"] = kwargs.get("name", "-")
profile["gender"] = kwargs.get("gender", "-")
profile["birthday"] = kwargs.get("birthday", "-")
profile["age"] = kwargs.get("age", "-")
profile["phone"] = kwargs.get("phone", "-")
profile["email"] = kwargs.get("email", "-")
return profile
#
user_profile = {
"name": "lee",
"gender": "man",
"age": 32,
"birthday": "01/01",
"email": "python@sparta.com",
}
print(set_profile(**user_profile))#packing
인스턴스(객체) 생성 시 한 번 실행되는 함수
# class에 __init__메소드를 사용할 경우 인스턴스 생성 시 해당 메소드가 실행된다. class CookieFrame(): def __init__(self, name): print(f"생성 된 과자의 이름은 {name} 입니다!") self.name = name cookie1 = CookieFrame("cookie1") # 생성 된 과자의 이름은 cookie1 입니다! cookie2 = CookieFrame("cookie2") # 생성 된 과자의 이름은 cookie2 입니다!
class Monster(): def __init__(self, hp): self.hp = hp def attack(self, damage): self.hp -= damage def status_check(self): print(f"monster's hp : {self.hp}")
부모 클래스인 Monster() 클래스를 만들었다.
이를 상속받을 자식 클래스를 만들어보겠다.
class FireMonster(Monster): def __init__(self, hp): self.attribute = "fire" # super()를 사용하면 부모 클래스의 코드를 그대로 사용할 수 있습니다. # 해당 코드는 self.hp = hp 코드를 실행시키는 것과 동일합니다. super().__init__(hp) # 부모 클래스에 존재하는 status_check 메소드를 overriding 합니다. def status_check(self): print(f"fire monster's hp : {self.hp}")
불 속성을 가진 FireMonster()를 만들었다.
부모 클래스인 Monster()의 함수를 사용하기 위해서는 super()를 사용해주면 되겠다.
class IceMonster(Monster): def __init__(self, hp): self.attribute = "ice" super().__init__(hp) def status_check(self): print(f"ice monster's hp : {self.hp}") fire_monster = FireMonster(hp=100) # FireMonster 클래스에는 attack 메소드가 없지만 # 부모 클래스에서 상속받았기 때문에 별도의 선언 없이 사용 가능합니다. fire_monster.attack(20) fire_monster.status_check() ice_monster = IceMonster(hp=200) ice_monster.attack(50) ice_monster.status_check()