AI

[K-digital] 프로젝트형 AI 서비스 개발 교육 Day 3

Supreme_YS 2021. 1. 6. 16:13

20210106 TIL

# python bool 타입의 특징
# bool
# True(T), False(F)
# not, and, or --> 논리연산
# &, |, ~ --> 비교연산

# False로 간주
# "", [], (), {}, 숫자(0 이외의 숫자는 True), None

xValue = 5 # 0101
yValue = 0 # 0000

print( xValue & yValue ) # 0101, 0000의 논리곱이 되므로 0000이 출력된다. 따라서 0이 출력
print( bool(xValue & yValue) ) # 0이라는 값에 casting연산이 되어서 False가 출력

print( xValue | yValue ) # 0101, 0000의 논리합이 되므로 0101의 10진수 값인 5가 출력
print( bool(xValue | yValue) ) # 5라는 값에 casting연산이 되어서 True가 출력

trueValue = True
falseValue = False
# 다른 언어에서는 bool 을 int로 캐스팅하는게 말도 안되는 행위이지만 python에서는 가능하다.
print( int(trueValue) ) # 1 출력
print( int(falseValue) ) # 0 출력

print(trueValue & falseValue) # 논리곱 False 출력
print(trueValue | falseValue) # 논리합 True 출력

print('and - ', trueValue and falseValue)
print('or  - ', trueValue or falseValue)
print('not - ', not trueValue)
print('not - ', not falseValue)

# control statement
# if (조건문), for (반복문), while (반복문)

# 사용자 입력 함수
# input()

name = input("Enter your Name : ")
grade = input("Enter your Grade : ")
company = input("Enter your Company : ")
print(name, grade, company)

# 짝수인지 홀수인지를 판별?
# if, if ~ else, if ~ elif ~ else, if ~ in
# bool True | False
'''
other)
if(조건식) {
    True
}
else {
    False
}

python)
if not False :
'''

inputNumber = int(input("Enter your digit(1 ~ 100) : "))
# print( inputNumber % 2 == 0)
# 즉, if는 참일 경우에만 수행한다.

if inputNumber % 2 == 0 :
    print('짝수입니다.')
else :
    print('홀수입니다.')

number = 15
# 위 값이 3의 배수인지 5의 배수인지를 판별하고 싶다면?
if (number % 3 == 0 or number % 5 == 0) :
    print('{}은 3과 5의 배수입니다.'.format(number))
else :
    print('{}은 3과 5의 배수가 아닙니다.'.format(number))

# if ~ elif
number = int(input('숫자를 입력하세요 : '))

if number % 3 == 0 :
    print('{}은 3의 배수입니다.'.format(number))

elif number % 5 == 0:
    print('{}은 5의 배수입니다.'.format(number))

else :
    print('{}은 3과 5의 배수가 아닙니다.'.format(number))

# if ~ in
area = ['서울', '부산', '제주', '광주']
region = '수원'

if region in area:
    pass
else :
    print('{} 지역은 포함되지 않습니다.'.format(region))


# dict 를 이용한 if ~ in

areaKeyDict = {'서울' : 100, '광주' : 200}
region = '부산'
if region in areaKeyDict:
    pass
else :
    print('{}값이 존재하지 않습니다.'.format(region))

city = "asd" # 빈값이 아니면 다 True
if city :
    print('true - ', city)
else :
    print('false - ', 'plz enter your city')

# 삼항 연산자
num = 9
result = 0

result = num * 2 if num > 5 else num + 2
print('삼항 연산자 - ', result)

if num > 5 :
    print(num * 2)
else :
    print(num + 2)

# & == and
'''
and (논리 연산자, True | False 연산)
-> x and y 있을 때 x가 False x값을 반환하고
-> x 가 True y 값을 반환합니다.

& (비교 연산자, bitwise 연산자)
'''

# 8 -> 1000, 10 -> 1010
# 1000
# 1010
# ---------
# 1000이 된다.
print( 8 & 10 )
print( 8 and 10 )

# python date type
from datetime import date, datetime

today = date.today()
print('date - ', type(today), today, today.year, today.month, today.day)
print('{} 년도, {} 월 , {} 일 '.format(today.year, today.month, today.day))


# 시간

todayDateTime = datetime.today()
print('datetime - ', todayDateTime)
print('{} 시, {} 분 , {} 초 '.format(todayDateTime.hour, todayDateTime.minute, todayDateTime.second))

# pip | conda install
# pip 와 conda의 차이점
# 라이브러리 간에 의존관계가 있다. 버전관리도 되는데.. conda install은 의존관계에 포함한 모든 package를 다 설치하는데 pip는 딱 지정한 것만 인스톨한다.

# dateutil # 날짜관련 연산을 지원해주는 모듈

from datetime import date, datetime, timedelta
# from 에서 .을 찍는 의미? --> 패키지의 하위 패키지, 패키지에 들어있는 함수의 모듈을 사용하겠다.
from dateutil.relativedelta import relativedelta

today = date.today()

# weeks, days, hours, minutes, seconds 만 timedelta에서 사용이 가능한데,
days = timedelta(days=-1)
print('오늘 이전 하루 - {}'.format(today + days))

# year, month 관련된 옵션을 필요로 한다면 # relativedelta 사용하면 된다.
days = relativedelta(months=-2)
print('두달 전 오늘 - {}'.format(today + days))

days = relativedelta(years=-2)
print('일년 전 오늘 - {}'.format(today + days))

from dateutil.parser import parse # 패키지(dateutil)의 모듈(parser)에서 함수(parse)만 가져다 쓰겠다.

userDate = parse("2021-06-04")
print('parse date - ', userDate, type(userDate))

userDate = datetime(2021, 12, 25)
print('datetime date - ', userDate, type(userDate))

# 날짜 객체의 출력형식을 원하는 것으로 변경

today = datetime.today()

# 날짜형식 -> 문자열형식의 포맷으로 지정
# strftime()
print("{}".format(today.strftime('%m-%d-%Y')), type(today.strftime('%m-%d-%Y')))

# 문자열형식 -> 날짜형식의 포맷으로 지정
# strptime()

strDate  = '2021,01,06-11:12:40'
userDate = datetime.strptime(strDate, '%Y,%m,%d-%H:%M:%S')
print( type(userDate), userDate)

# 입력값
year  = int(input('년도를 입력하세요 : '))
month = int(input('월을 입력하세요(1~12) : '))

# 예외처리
if month > 12 :
    print("{}월은 없습니다.".format(month))
    exit()

# 변수
febDate = 28
febLeapDate = 29
normalDate = 30
otherDate = 31

# 조건문
# 윤년일 때
if (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0) :
    print("{}년도는 윤년입니다.".format(year))

    if month == 2 :
        print('{}년도의 {}월의 마지막 일은 {}일 입니다.'.format(year, month, febLeapDate))

    elif month in [1, 3, 5, 7, 8, 10, 12] :
        print('{}년도의 {}월의 마지막 일은 {}일 입니다.'.format(year, month, otherDate))

    elif month in [4, 6, 9, 11] :
        print('{}년도의 {}월의 마지막 일은 {}일 입니다.'.format(year, month, normalDate))

    else :
        pass

# 윤년이 아닐 때
else :
    print("{}년도는 윤년이 아닙니다.".format(year))

    if month == 2:
        print('{}년도의 {}월의 마지막 일은 {}일 입니다.'.format(year, month, febDate))

    elif month in [1, 3, 5, 7, 8, 10, 12] :
        print('{}년도의 {}월의 마지막 일은 {}일 입니다.'.format(year, month, otherDate))

    elif month in [4, 6, 9, 11] :
        print('{}년도의 {}월의 마지막 일은 {}일 입니다.'.format(year, month, normalDate))

    else:
        pass

# python control statement for looping
# for ~ in range()
# for ~ in list, dict

userSum = 0

for tmp in range(1, 11, 2) :
    print(tmp)
    userSum += tmp

print('누적 값은 : {} 입니다.'.format(userSum))

userList = [1, 2, 3, 4, 5]
for tmp in userList :
    print(tmp, end = '\t')
    userSum += tmp
print('누적 값은 : {} 입니다.'.format(userSum))

userSum = 0
userList = [(1,2),(3,4),(5,6)]
for tmp01, tmp02 in userList : # 두 개의 값을 받으니까 그릇도 두 개가 필요하다.
    print(tmp01, tmp02, end = '\t')
    userSum += (tmp01 + tmp02)
print('누적 값은 : {} 입니다.'.format(userSum))

userDict = {'name' : 'Supreme-YS', 'gender' : 'm'}

for (key, value) in userDict.items() :
    print('{}, {}'.format(key, value))

userSum = 0
scores = [100, 50, 80, 90, 70, 60]
print(len(scores))
for idx in range(len(scores)):
    userSum += scores[idx]

# %d, %s, %f
print('scores 합 %d' % userSum)

# list comprehension
'''
[ for 구문을 통한 반복적인 표현식을 이용할 수 있다 if 조건도 사용 가능 ]
'''

userList = [1, 2, 3, 4, 5, 6, 7, 8, 9]
userList02 = [ tmp ** 2 for tmp in userList]
print('comprehension - ', userList02)

# userList에서 짝수만 가져와서 실행식을 시
userList03 = [tmp ** 2 for tmp in userList if tmp % 2 == 0]
print('comprehension - ', userList03)

# dict에서도 사용 가능
userDict = {'Test' + str(tmp) : tmp ** 2 for tmp in range(1, 10)}
print(userDict)
userDict = {'Test' + str(tmp) : tmp ** 2 for tmp in range(1, 10) if tmp % 2 == 0}
print(userDict)

# python set type - set(집합)
# 순서 X , 중복을 허용하지 않음
# {} 선언으로 생성가능
# set([])

temp = {'youngseok', 'student'}
print('set - ', temp, type(temp))

temp = set([1, 2, 3, 4, 5, 5, 5, 5])
print('set - ', temp, type(temp))

temp = set([1, 3.14, 'pen', False])
print('set - ', temp, type(temp))

casting = tuple(temp)
print('casting - ', casting , casting[1:3])

set01 = set([1, 2, 3, 4, 5])
set02 = set([3, 4, 5, 6, 7])

# 교집합 & == intersection() , 합집합 | == union(), 차집합 - == difference()
# 객체(변수, 함수)
# 객체.변수, 객체.함수() 접근

print('교집합 & - ', set01 & set02)
print('교집합 intersection - ', set01.intersection(set02))

print('합집합 | - ', set01 | set02)
print('교집합 union - ', set01.union(set02))

print('차집합 - - ', set01 - set02)
print('차집합 difference - ', set01.difference(set02))

# 요소 추가
set01.add(7)
print('set01 add - ', set01)

# 요소 삭제 remove(), discard()
set01.remove(9) # set01에 존재하지 않는 값인 9를 삭제해보기 --> 오류발생
set01.discard(9) # 존재하지 않는 값을 삭제해도 오류를 발생시키지 않는다. --> 오류발생X

set01.remove(4)
print('set01 remove - ', set01)

# 중복제거용으로 활용할 수 있음.
gender = ['홀', '짝', '짝', '짝', '짝', '홀', '짝', '홀', '짝']
setGender = set(gender)
print('do remove - ', setGender, type(setGender))
# 만일 슬라이싱, 인덱스를 부여해서 활용하고 싶으면 casting 하면 된다.
listGender = list(setGender)
print('list casting - ', listGender, type(listGender))
print('list casting - ', listGender[0], type(listGender))
print('list casting - ', listGender[1], type(listGender))