Python

Python 문법 기초

J520 2024. 7. 12. 01:44

강의 참고:https://www.youtube.com/watch?v=T6z-0dpXPvU (나도코딩님 파이썬 무료강의 100분 완성 영상)

 

--------------------

[폴더 구조]

|--practice.py

|--goodjob.py

ㄴbye

    |--goodbye.py

    ㄴgoodnight.py

--------------------

 

practice.py

#자료형
print('hello')
print(1234)
print(3.14)
print(True)

#변수
my_name = 'a'
Name = 'b'
NAME = 'c'

print(my_name)
print(Name)
print(NAME)

#형 변환
int_num = int('2')
flaot_num = float('4.321')
str_num = str(2)
float_to_int = int(flaot_num)

print(int_num)
print(flaot_num)
print(str_num)
print(float_to_int)

#연산자
num = 1
num += 2
num **= 2

print('num ::',num)
print('num > 5 and num < 10 ::', num > 5 and num < 10)
print('not num > 5 ::',not num > 5)

print('\'c\' in \'cat\' ::','c' in 'cat')
print('\'c\' not in \'cat\' ::','c' not in 'cat')

#불리안
print('bool(\'a\') ::', bool('a'))
print('bool(\'\') ::', bool(''))
print('bool(-1) ::', bool(-1))
print('bool(0) ::',bool(0))
print('bool(None) ::', bool(None))

'''여러 줄
주석'''

#인덱스
python = 'python'

print('python[0] ::', python[0])
print('python[-1] ::', python[-1])

#슬라이싱
print('python[1:6] ::', python[1:6])
print('python[1:] ::', python[1:])
print('python[:-1] ::', python[:-1])
print('python[:] ::', python[:])

#문자열처리
snack = '꿀꽈배기'
two = '2개'

juseyo = snack + two
juseyo += '주세요'

print('juseyo :: ', juseyo)
print('len(juseyo) :: ', len(juseyo))

#메소드
letter = 'how are YOU?'

print('letter.lower()) ::', letter.lower())
print('letter.upper()) ::', letter.upper())
#문장의 첫글자만 대문자 나머지 소문자
print('letter.capitalize() ::', letter.capitalize())
#단어들의 첫글자만 대문자
print('letter.title() ::', letter.title())
#대소문자 변환
print('letter.swapcase() ::', letter.swapcase())
#띄어쓰기 기준으로 리스트 리턴
print('letter.split()', letter.split())
print('letter.count(\'how\') ::', letter.count('how'))

s = '나도...고등학교...'

#시작/끝 단어 확인 boolean 리턴
print('s.startswith(\'나도\') ::', s.startswith('나도'))
print('s.endswith(\'나도\') ::', s.endswith('나도'))
#앞 뒤로 불필요 문자열(또는 공백) 제거
print('s.strip(\'.\') ::', s.strip('.'))
print('s.replace(\'고등학교\', \'고교\') ::', s.replace('고등학교', '고교'))
print('s.find(\'학교\') ::',s.find('학교'))
#문자를 사이에 두고 감쌈
print('s.center(15,\'-\') ::',s.center(15,'-'))

#문자열 포맷
python = '파이썬'
java = '자바'

print('개발 언어에는 {}, {} 등이 있어요'.format(python, java))
print('개발 언어에는 {1}, {0} 등이 있어요'.format(python, java))
# f-string 파이썬 3.6 이상 (문자열 앞에 f를 붙이면 {}안에 바로 변수 삽입 가능)
print(f'개발 언어에는 {python}, {java} 등이 있어요')

#줄바꿈
snack = '꿀꽈배기는\n너무\n맛있어요.'
print(snack)

#리스트(중복허용, 순서있음)
my_list = ['초코파이', '초코파이', 3.14, 0 , '', '기타', None]
my_list2 = [0,1,5,44,8]
print(my_list)

print(len(my_list))

my_list[1] ='몽쉘카카오'
print(my_list)

my_list.append('빅파이')
print(my_list)

my_list.remove('기타')
print(my_list)

your_list = ['사탕', '초콜릿']

my_list.extend(your_list)
print(my_list)

#원하는 위치에 값 추가
my_list.insert(0, '오뜨')
print('my_list.insert(0, \'오뜨\') ::',my_list)

#원하는 위치(또는 마지막)의 값 삭제
my_list.pop()
print('my_list.pop() ::', my_list)

my_list2.sort()
print('my_list2.sort() :: ', my_list2)

#순서 뒤집기
my_list.reverse()
print('my_list.reverse() :: ',my_list)

#리스트 복사
a_list = my_list.copy()
print('a_list = my_list.copy() ::', a_list)

print('my_list.count(\'오뜨\') ::',my_list.count('오뜨'))

#어떤 값이 어디에 있는지
print('my_list.index(\'오뜨\') ::',my_list.index('오뜨'))

#모든 값 삭제
my_list.clear()
print('my_list.clear() ::',my_list)

#튜플(수정이 불가능한 읽기 전용 리스트, 순서 보장, 중복 허용)
my_tuple = ('오예스', 0 , 3.14) #패킹
(tu1,tu2,tu3) = my_tuple #언패킹

print('my_tuple[0] ::',my_tuple[0])
print('my_tuple[1:] ::', my_tuple[1:])
print('len(my_tuple ::)',len(my_tuple))
print('tu1, tu2, tu3 ::',tu1, tu2, tu3)

numbers = (1,2,3,4,5,6,7,8,9,10)
(one, *others, ten) = numbers

print('others ::',others) #언패킹된 ohters는 리스트

#세트(순서 X->인덱스 접근 X, 중복 X)
A = {'돈가스','보쌈','제육덮밥'}
B = {'초밥','짬뽕','제육덮밥'}

print('A.intersection(B) ::',A.intersection(B))
print('A.union(B) ::',A.union(B))
print('A.difference(B) ::',A.difference(B))

A.add('닭갈비')
print('A.add(\'닭갈비\') ::', A)

#값 삭제(해당 값이 없으면 에러 발생)
A.remove('닭갈비')
print('A.remove(\'닭갈비\') ::', A)

#값 삭제(해당 값이 없어도 에러 발생 X)
A.discard('돈가스')
print('A.discard(\'돈가스\') ::',A)

#다른 세트의 값들을 더함
A.update(B)
print('A.update(B) ::',A)

#세트 A 초기화
A.clear()
print('A.clear() ::', A)

#세트 A 삭제
del A
#print('del A ::', A #NameError: name 'A' is not defined

#딕셔너리({key:value, key:value})
person = {
    '이름' : '내이름',
    '나이' : 7,
    '' : 120.55,
    '몸무게' : 23
}

print('person ::', person)
print('person[\'이름\'] ::',person['이름'])
# get으로 없는 키에 접근 시 None
print('person.get(\'별명\') ::', person.get('별명'))

person['최종학력'] = '유치원'
print('person ::', person)

person[''] = 125.55
print('person ::', person)

person.update({'':133.5, '몸무게':33})
print('person update ::', person)

person.pop('최종학력')
print('person pop ::', person)

print('person.keys() ::', person.keys())
print('person.values() ::', person.values())
print('person.items() ::', person.items())

#자료형 비교
'''
               리스트     튜플      세트      딕셔너리
선언           []             ()           {}             {k:v}
순서보장    0             0           X             0(3.7이상)
중복허용    0             0           X             X(key)
접근       list[idx]      t[idx]        X            d[key] / d.get(key)
수정           0             X           X            0(val)
추가      append()      X         add()       d[key]=val / update()
              insert()                update()  
             extend()
삭제      remove()      X      remove()      pop()
               pop()                   discard()     popitem()
              clear()                   pop()           clear()
                                           clear()                          
'''

#튜플 <-> 리스트
a_tuple = ('오예스', '몽쉘')
print('a_tuple ::',a_tuple)

a_list = list(a_tuple)
a_list.append('오예스')
a_tuple = tuple(a_list)

print('a_tuple ::',a_tuple)

#리스트 <-> 세트 (순서 변경됨)
a_set = set(a_list)
print('a_set ::', a_set)
a_list = list(a_set)
print('a_list ::', a_list)

#리스트 <-> 딕셔너리 (순서 보장)
a_list = list(a_tuple)
print('a_list ::', a_list)

a_dic = dict.fromkeys(a_list)
print('a_dic :: ',a_dic)
a_list = list(a_dic)
print('a_list ::', a_list)

#if 조건문
today = 'sat'
if today == 'sun':
    print('play')
elif today == 'sat':
    print('run')
else:
    print('study')

#for 반복문
for i in range(5):
    print(f'반복 {i}회')

for i in range(2,6,2):
    print(f'2에서 6까지 2만큼 뛰어서 반복, i={i}')

for k,v in person.items():
    print(k,v)

#while 반복문
max = 25
weight = 0
item = 3
count = 0

while weight + item <= max:
    weight+=item
    count += 1
print(f'물건은 {count}개, 총 무게는 {weight} 입니다.')

#break, continue 문
drama = ['시즌1', '시즌2', '시즌3', '시즌4']
for x in drama:
    if x =='시즌2':
        continue
    if x == '시즌4':
        break
    print(f'{x} 시청')

#리스트 Comprehension(기존 리스트를 가지고 새로운 리스트를 생성)
products = ['JOA-2020','JOA-2021','SIRO-2020', 'SIRO-2021']
#products에서 SIRO로 시작하는 값으로 recall 리스트 초기화
recall = [p for p in products if p.startswith('SIRO')]
print('recall ::',recall)

#모델명 뒤에 SE(special edition)를 붙여줘
prod_se = [p+'SE' for p in products]
print('prod_se ::', prod_se)

#함수
def show_price(name='Sam',price=10000):
    print(f'안녕, {name}. 가격은 {price}원 입니다.')

show_price(name='Mike')

#가변인자
def visit(today, *customers):
    print(f'{today} 방문자 : {customers}')

visit('2022-02-02', 'Mike','Sam','Jhon')

#입력 함수
#num = input('총 몇 분이세요? 숫자만 입력하세요. :')
#print(f'{num}명 입니다.')

#파일 입출력
#쓰기모드로 파일 열기
f=open('list.txt','w',encoding='utf8')
f.write('가나다\n라마바\n')
f.close()

#읽기모드로 파일 열기
f=open('list.txt','r',encoding='utf8')
contents = f.read()
print('contents ::',contents)

#한 줄씩 읽기
for line in contents:
    #end는 불필요한 띄어쓰기를 방지하기 위해 사용
    print(line, end='')

f.close()

#with 구문으로 close 대체
with open('list.txt','r',encoding='utf8') as f:
    print(f.read())

#클래스
class BlackBox:
    #pass는 구현하기 위한 부분(뼈대), 에러 X
    pass

#인스턴스 생성
b = BlackBox()
b.name = '까망이'
print('b.name ::', b.name)
#b가 BlackBox의 인스턴스가 맞는지 확인(return boolean)
print('isinstance(b,BlackBox) ::',isinstance(b,BlackBox))

#__init__ (객체가 생성될때 자동으로 실행)
class BlackBox1:
    #self(객체 자기 자신, 처음 전달값은 반드시 self, 메소드 내에서는 self.name과 같이 멤버변수로 사용)
    def __init__(self,name,price):
        self.name = name
        self.price = price

    def set_travel_mode(self,min):
        print(f'{self.name}는(은) {min}분 동안 여행 모드 on')

b1= BlackBox1('하양이', 100)
b2= BlackBox1('노랑이', 200)
print('b1.name ::',b1.name,', b2.name ::',b2.name)

#멤버변수
#b1 객체에만 멤버변수 추가
b1.nickname = '1호'
print('b1.nickname ::',b1.nickname)

b1.set_travel_mode(20)

#상속
class BlackBox2:
    def __init__(self,name,price):
        self.name = name
        self.price = price

class TravelBlackBox(BlackBox2):
    def __init__(self, name, price,sd):
        #부모클래스의 __init__을 가져옴
        super().__init__(name, price)
        self.sd=sd

    def set_travel_mode(self,min):
        print(f'{self.name}는(은) {min}분 동안 여행 모드 on')

b3 = BlackBox2('파랑이', 300)
b4 = TravelBlackBox('주황이',400,64)
b4.set_travel_mode(40)

#다중상속
class VideoMaker:
    def make(self):
        print('추억용 여행 영상 제작')

class MailSender:
    def send(self):
        print('메일발송')

class TravelBlackBox2(BlackBox2,VideoMaker,MailSender):
    def __init__(self, name, price,sd):
        #부모클래스의 __init__을 가져옴
        super().__init__(name, price)
        self.sd=sd

    def set_travel_mode(self,min):
        print(f'{self.name}는(은) {min}분 동안 여행 모드 on')

b5=TravelBlackBox2('초록이',500,128)
b5.make()
b5.send()

#메소드 오버라이딩
class AdvancedTravelBlackBox(TravelBlackBox2):
    def set_travel_mode(self, min):
        print(f'{self.name}는(은) {min}분 동안 여행 모드 on')
        #자식클래스에서 부모클래스의 메소드를 재정의시 오버라이딩됨
        self.make()
        self.send()

b6=AdvancedTravelBlackBox('남색이',600,126)
b6.set_travel_mode(20)

#예외처리
try:
    result = 1 / '0'
    print(f'연산 결과 :: {result}')
except ZeroDivisionError:
    print('0으로 나눌 수 없음')
except TypeError:
    print('값이 이상함')
except Exception as err:
    print('에러 :', err)
else:
    print('정상동작')
finally:
    print('수행종료')

#모듈(.py 파일)
#모듈 전체를 가져옴
import goodjob
goodjob.say()

#모듈 중 필요한 부분만 가져옴
from goodjob import say
say()

import random
my_list =['가위','바위','']
print('random.choice(my_list) :: ',random.choice(my_list))

#패키지(폴더)
import bye.goodbye
bye.goodbye.bye()

from bye import goodbye, goodnight
goodbye.bye()
goodnight.night()

 

goodjob.py

def say():
    print('참 잘했어요.')

 

goodbye.py

def bye():
    print('또 만나요.')

 

goodnight.py

def night():
    print('잘자요.')

'Python' 카테고리의 다른 글

[Django] Django란?  (0) 2024.08.12