Python 문법 정리_updating
업데이트:
Python 기본 문법
Python의 기본 문법을 정리해 보겠습니다.
슬라이싱
jumin = "990120-1234567"
print("성별 : " + jumin[7]) # 1
print("연 : " + jumin[0:2]) # 99
print("월 : " + jumin[2:4]) # 01
print("일 : " + jumin[4:6])
print("생년월일 : " + jumin[:6]) # 990120
print("뒤 7자리 : " + jumin[7:]) # 1234567
print("뒤 7자리 (뒤에서부터): " + jumin[-8:]) #-1234567
문자열 처리 함수
python = "Python is Amazing"
print(python.lower()) # python is amazing
print(python.upper()) # PYTHON IS AMAZING
print(python[0].isupper()) # True
print(len(python)) # 17
print(python.replace("Python", "Java")) # Java is Amazing
index = python.index("n")
print(index) # 5
# 두번째 n 나오는 index
index = python.index("n", index + 1)
print(index) # 15
# -1 , index는 값 없으면 에러 발생.
print(python.find("Java"))
# 문자열에 n이 몇개 있는지 count.
print(python.count("n")) # 2
문자열 포멧
# 정수형 처리
print("나는 %d살입니다." %20)
# 문자열 처리
print("나는 %s을 좋아해요" %"파이썬")
# char 처리
print("Apple은 %c로 시작해요" % "A")
# 괄호로 2개 이상의 문자열 처리
print("나는 %s색과 %s색을 좋아해요" %("파란", "빨간"))
print("나는 {}살 입니다." .format(20))
print("나는 {}색과 {}색을 좋아해요" .format("파란", "빨간")) # 나는 파란색과 빨간색을 좋아해요
print("나는 {1}색과 {0}색을 좋아해요" .format("파란", "빨간")) # 나는 빨간색과 파란색을 좋아해요
print("나는 {age}살이며, {color}색을 좋아해요" .format(age = 20, color="빨간")) # 나는 20살이며, 빨간색을 좋아해요
#문자열 앞에 f를 넣으면, 변수로 선언한 문자열을 중간에 넣을 수 있다.
age = 20
color = "빨간"
print(f"나는 {age}살이며, {color}색을 좋아해요.")
탈출 문자
print("백문이 불여일견\n백견이 불여일타") # 백문이 불여일견
# 백견이 불여일타
# 문자열 중간에 \로 "" 문자열 넣기.
print("저는 \"나도코딩\"입니다.") # 저는 "나도코딩"입니다.
# \\ 는 문자열 내에서 \로 변환 된다.
print("C:\\Library\\Frameworks") # C:\Library\Frameworks
# \r은 커서를 맨 앞으로 이동 시킨다.
print("Red Apple\rPine") # PineApple
# \b은 백스프페이스와 동일한 동작을 한다.
print("Redd\bApple") # RedApple
# \t 탭
print("Red\tApple")
리스트 (list)
subway = ["유재석", "조세호", "박명수"]
print(subway)
# 리스트 마지막에 item 추가
subway.append("하하") # ['유재석', '조세호', '박명수', '하하']
print(subway)
# 리스트 중간에 item 추가
subway.insert(1, "정형돈") # ['유재석', '정형돈', '조세호', '박명수', '하하']
print(subway)
# 리스트의 마자막 item 값 얻기.
print(subway.pop()) # 하하
# 정렬
num_list = [5,2,4,3,1]
num_list.sort()
print(num_list) # [1, 2, 3, 4, 5]
# 정렬(반대)
num_list.reverse()
print(num_list) # [5, 4, 3, 2, 1]
# 삭제
num_list.clear()
print(num_list) # []
# 리스트 확장 (다른 형이 한 리스트에 담김)
mix_list = ["조세호", 20, True]
num_list.extend(mix_list)
print(num_list)
사전 (dictionary)
cabinet = {3:"유재석", 100:"김태호"}
print(cabinet[3]) # 유재석
print(cabinet[100]) # 김태호
# Dictionary에서 []이용 하여, 없는 key 값으로 가져오면 프로그램 종료 됨.
# get을 이용 하면, 종료 되지 않고, None 반환 받음.
print(cabinet.get(5)) # None
print(cabinet.get(5), "대체 문자") # 대체 문자
print(3 in cabinet) # True
print(5 in cabinet) # False
# 사전에 item 추가
cabinet[10] = "조세호"
print(cabinet) # {3: '유재석', 100: '김태호', 10: '조세호'}
# 사전에 값은 key로 item 추가하면, 값 변경 된다.
cabinet[3] = "김종국"
print(cabinet) # {3: '김종국', 100: '김태호', 10: '조세호'}
# 사전에서 item 제거
del cabinet[3]
print(cabinet) # {100: '김태호', 10: '조세호'}
# 사전에서 key 값들만 출력
print(cabinet.keys()) # dict_keys([100, 10])
# 사전에서 value 값들만 출력
print(cabinet.values())
# 사전에서 key, value 쌍으로 출력
print(cabinet.items()) # dict_items([(100, '김태호'), (10, '조세호')])
# 사전 item 삭제
cabinet.clear()
print(cabinet) # {}
튜플 (tuple)
- 리스트와 다르게 내용을 변경 및 추가 할 수 없다.
- 속도가 리스트 보다 빠르다.
- 변경 되지 않는 목록에 사용 한다.
menu = ("돈까스", "치즈까스")
print(menu[0]) # 돈까스
print(menu[1]) # 치즈까스
(name, age, hobby) = ("김종국", 20, "코딩")
print(name, age, hobby)
세트 (set)
- 중복이 되지 않음.
- 순서가 없음.
my_set = {1,2,3,3,3}
print(my_set) # {1, 2, 3}
java = {"유재석", "김태호", "양세형"}
python = set(["유재석", "박명수"])
# java 와 python의 교집합
print(java & python) # {'유재석'}
print(java.intersection(python)) # {'유재석'}
# java 와 python의 합집합
print(java | python) # {'유재석', '김태호', '박명수', '양세형'}
print(java.union(python)) # {'유재석', '김태호', '박명수', '양세형'}
# java 와 python의 차집합
print(java - python) # {'양세형', '김태호'}
print(java.difference(python)) # {'양세형', '김태호'}
# 세트에 item 추가
python.add("김태호")
print(python) # {'김태호', '박명수', '유재석'}
# 세트에 item 제거
java.remove("김태호")
print(java) # {'유재석', '양세형'}
자료구조의 변경
# set 생성
menu = {"커피", "우유", "주스"}
print(menu, type(menu)) # {'커피', '주스', '우유'} <class 'set'>
# list로 변경
menu = list(menu)
print(menu, type(menu)) # ['커피', '우유', '주스'] <class 'list'>
# tuple로 변경
menu = tuple(menu)
print(menu, type(menu)) # ('주스', '우유', '커피') <class 'tuple'>
if
# input 메서드로 문자열 입력 받을 수 있음.
temp = int(input("기온은 어때요?"))
if 30 <= temp:
print("너무 더워요. 나가지 마세요.")
elif 10 <= temp and temp < 30:
print("괜찮은 날씨에요.")
elif 0 <= temp and temp <10:
print("외투를 챙기세요.")
else:
print("너무 추워요. 나가지 마세요.")
for
# range를 이용한 for문 출력
for waiting_no in range(1, 3):
print("대기번호 : {0}" .format(waiting_no)) # 대기번호 : 1
# 대기번호 : 2
# list 를 이용한 for 문 출력
startbucks = ["아이언맨", "토르"]
for custom in startbucks:
print("{0}, 커피가 준비 됨." .format(custom)) # 아이언맨, 커피가 준비 됨.
# 토르, 커피가 준비 됨.
while
customer = "토르"
index = 2
while index >= 1:
print("{0}, 커피 준비 까지, {1} 분 남음" .format(customer, index))
index -= 1
if index == 0:
print("커피 나옴.")
continue & break
조건에 해당 되면, 아래 행을 실행 시키지 않는다.
absent = [2, 3]
no_book = [4]
for student in range(1, 5):
if student in absent:
continue
elif student in no_book:
print("수업 끝! {}는 교무실로 따라와" .format(student)) # 수업 끝! 4는 교무실로 따라와
break
print("{}, 책을 읽어봐" .format(student)) # 1, 책을 읽어봐
한줄 for 문
students = [1,2,3,4,5]
print(students) # [1, 2, 3, 4, 5]
students = [i+100 for i in students]
print(students) # [101, 102, 103, 104, 105]
함수
def keyword로 함수 생성 한다.
def open_account():
print("새로운 계좌가 생성 되었습니다.")
open_account()
전달값과 반환값
def deposit(balance, money):
print("입금이 완료. 잔액은 {} 원입니다." .format(balance + money))
return balance + money
def withdraw(blance, money):
if balance > money: # 잔액이 출금보다 많으면
print("출금이 완료. 잔액은 {} 원입니다.". format(balance - money))
return balance - money
else:
print(print("출금이 완료 되지 않음. 잔액은 {} 원입니다.". format(balance)))
return balance
def withdraw_night(balance, money):
commission = 100 # 수수료 100원
return commission, balance - money - commission # 튜플 형식 return 값
balance = 0 # 잔액
balance = deposit(balance, 1000) # 입금이 완료. 잔액은 1000 원입니다.
balance = withdraw(balance, 500) # 출금이 완료. 잔액은 500 원입니다.
commission, balance = withdraw_night(balance, 300)
print("수수료 {0} 원이며, 잔액은 {1} 원입니다." .format(commission, balance)) # 수수료 100 원이며, 잔액은 100 원입니다.
기본값
파라미터(parameter) 값에 =로 값을 정의하면, 기본값이 되며, 오버로딩 처리가 자동으로 된다.
def profile(name, age=17, main_lang="파이썬"):
print("이름: {0} 나이: {1} 주 언어: {2}" .format(name, age, main_lang))
profile("유재석", 20, "파이썬") # 이름: 유재석 나이: 20 주 언어: 파이썬이름: 유재석 나이: 20 주 언어: 파이썬
profile("김태호") # 이름: 김태호 나이: 17 주 언어: 파이썬
키워드값
아규먼트(argument) 값에 =로 값을 정의하면, 오버로딩 규칙에 맞지 않아도, key 값으로 매칭 가능하다.
def profile(name, age, main_lang):
print(name, age, main_lang)
profile(name="유재석", main_lang="파이썬", age=20) # 유재석 20 파이썬
profile(main_lang="자바", age=25, name="김태호") # 김태호 25 자바
가변인자
파라미터 특정 값에 *을 앞에 붙이면, 가변적으로 오버로딩 된다.
def profile(name, age, *language):
print("이름:{0} 나이:{1}" .format(name, age), end=" ")
for lang in language:
print(lang, end=" ")
print()
profile("유재석", 20, "python", "java", "C") # 유재석 20 파이썬
profile("김태호", 25, "android")
지역변수와 전역변수
gun = 10
def checkpoint(soldiers): # 경계근무
global gun # 전역 공간에 있는 gun 사용
gun = gun - soldiers
print("[함수 내 남은 총] : {0}" .format(gun)) # 8
# 전역 변수를 지역 변수화 하여 사용하는 것이 변수 관리 측면에서 더 좋다.
def checkpoint_ret(gun, soldiers):
gun = gun - soldiers
return gun
print("전체 총 : {0}" .format(gun)) # 10
checkpoint(2) # 2명 경계 근무 나감
print("남은 총 : {0}" .format(gun)) # 8
표준 입출력
#sep keyword 사용하면 ,를 대체하여 값을 변환 한다.
#end keyword 사용하면, 개행(개행을 해당 값으로 변경)하지 않는다.
print("Python", "Java", sep=",", end="?") # Python,Java?무엇이 더 재밌나요?
print("무엇이 더 재밌나요?")
# 문자열 정렬
scores = {"수학":0, "영어":50, "코딩":100}
for subject, score in scores.items():
# rjust 키워드는, 우측정렬 및 확보 공간(4)을 의미한다.
print(subject, str(score).rjust(4), sep=":")
# 수학: 0
# 영어: 50
# 코딩: 100
# zfill keyword 사용하면, 빈 공간을 0으로 체운다.
for num in range(1, 2):
print("대기번호 : " + str(num).zfill(3)) # 대기번호 : 001
# input은 숫자를 입력 받아도 type은 str이 된다.
answer = input("입력 하세요 : ") # 숫자 입력
print("입력 값은 " + answer + "입니다.") # <class 'str'>
다양한 출력 포멧
예시
source
https://www.youtube.com/watch?v=kWiCuklohdY&t=153s