KyungHwan's etc.

파이썬 기본문법 정리(PyThon) - 정리중 본문

Python

파이썬 기본문법 정리(PyThon) - 정리중

KyungHwan_0 2018. 9. 20. 23:50

파이썬 기본문법 정리(PyThon)

주석처리
#한줄 

"""
여러줄
여러줄
여러줄
"""


숫자와 문자열
number = 25
String = '25'
#name 과 String 은 숫자와 문자이기 때문에 다름

#더하기 +
plus = my_age + 1

#곱하기 *
multiply = 9 * 9

#나누기 /
divide = 30 / 5

#거듭제곱 ** (예. 2의 20승)
powerful = 2 ** 20

#나머지 %
remainder = 15 % 4


문자열 더하기
String1 = '1234'
String2 = '5678'
String3 = String1 + String2   #결과값12345678


조건문

a = 10
b = 20
if a < b:
    print('a<b')  #if 다음줄이 들여쓰기가 되야 된다!!

#크다
0 < 10
10 > 11
#크거나 같다, 작거나 같다
3 <= 10
15 >= 10
#같다
5 == 5
#같지 않다
5 != 10    

#and연산
#두 조건이 모두 참인지를 체크 예)예. a는 20대이다.
20 <= a and a < 30

#or
#두 조건 중 하나라도 참이다 예시)예시. a는 18세 미만 또는 60세 이상이다.
a < 18 or 60 <= a

#not true/false를 뒤집기 위해 사용


파이썬의 블럭

파이썬은 함께 실행되는 하나의 코드 덩어리로 같은 들여쓰기를 하나의 블럭으로 취급

if True:
   print('1블럭진입')
   
   if True:
       print('1블럭 안에 블럭')
       if True:
           print('1블럭안 2블럭안 진입')
   print('1블럭 끝코드')
   
print('1블럭 끝')

if False:
   print('3블럭 진입')
   
   if True:
       print('3블럭안 에 블럭 진입') #3블럭이 진입안되기 때문에 실행안됨
 


If-else & elif
a = 10
b = 20
c = 30
if a > b:
   print('a가 b보다 크다')
else:
   print('a가 b보다 작다')

if a > b:
   print('a가 b보다 크다')
elif a < b:                        #그냥 else의 조건을 넣는것이 아닌 elif 을 써야한다
   print('a가 b보다 작다')
   


함수 정의

'''
함수정의방법
def 함수이름:
  함수덩어리
'''
   

def print_a():
   r1 = 10
   r2 = 50
   r3 = r1 + r2
   print(r3)
   
print_a() #60



Format
number = 20
welcome = '환영합니다'
base = '{} 번 손님 {}'

#아래 3개의 print는 같은 값을 출력
print(number,'번 손님',welcome)
print(base.format(number,welcome))
print('{} 번 손님 {}'.format(number,welcome))
#=>20 번 손님 환영합니다


문자열
string1 = '따옴표로 싼 문자열 안에는 큰따옴표(")를 사용할 수 있다.'
string2 = "큰따옴표로 싼 문자열 안에는 따옴표(')를 사용할 수 있다."

a1 = '"큰따옴표 두개 쓰기"'
a2 = "'작은따옴표 두개 쓰기"

string3="""줄도 바꾸고
큰따옴표"와 따옴표'를 마음대로 쓸 수 있음"""


정수와 실수
a = 5
b = 5.0 #그냥 쓰면 정수와 실수로 나옴
div = 6 / 5 #정수끼리 나누면 실수가 나올수 있음
div = 6 // 5 # 몫만을 구하려면 // 연산자이용

print(int(5.0)) #정수로
print(float(5)) #부동소수점으로
print(5 * 1.0) # 부동소수점으로


입력값 받기(input)
a = input('입력할 값을 넣으세요') #입력한 값을 넣은 값이 a 변수로 지정됨
print('입력한값은:' , a , '입니다')


리스트(List)
list1 = ['가위','바위','보']

print(list1)
print(list1[0])
print(list1[1])

list1[0] = "안녕"

print(list1[0]) #안녕
print(list1[-1]) #보 뒤에서 첫번째
print(list1[-2]) #바위 뒤에서 두번째


리스트(List)수정

list1 = [37 , 23 , 10, 33, 29, 40]
print(list1)

list1.append(100)
print(list1)

list2 = list1 + [101]
print(list2)

list3 = list1 + list2
print(list3)


n = 12
ownership = n in list3 #리스트에 그값이 있는지 확인해주는 in 연산자
print(ownership)

n = 10
if n in list3:
    print('{}은 있어!'.format(n))

       

del list1[10] #리스트의 10번째 값을 지워라

list1.remove(40)
#리스트에 40이라는 값이 있는경우 삭제
#여러개의 값이 있는 경우 가장 앞에 있는 하나만 지워짐


List의 다양한 기능
  • list.index( value ) : 값을 이용하여 위치를 찾는 기능

  • list.extend( [value1, value2] ) : 리스트 뒤에 값을 추가

  • list.insert( index, value ) : 원하는 위치에 값을 추가

  • list.sort( ) : 값을 순서대로 정렬

  • list.reverse( ) : 값을 역순으로 정렬


List와 String
'''
리스트와 문자열은 유사하다.
서로 변환이 가능하다.
list = str.split( ) : 문자열에서 리스트로
" ".join( list ) : 리스트에서 문자열으로
'''

list1 = [1,2,3]
list1.index(1) # 0

str1 = "hello"
str1[0] #'h'

time_str = "10:35:27"
time_list = time_str.split(":")
print(time_list)

str = ":".join(time_list)
print(str)


For in 반복문

patterns = [1,2,3,4]
for pattern in patterns:
    print(pattern)
   
'''
1. 리스트 patterns의 값을 하나씩 꺼내 pattern으로 전달
2. 리스트의 길이만큼 print (pattern) 실행
'''


For range,enumerate

for i in range(5): #[0,1,2,3,4]
    print(i)

names = ['영희', '철수', '민수', '혜연']
for i in range(4): #필요한 만큼의 숫자를 만들어내는 유용한 기능
    name = names[i]
    print('{}번: {}'.format(i + 1 ,name))

for i, name in enumerate(names): #리스트가 있는 경우 순서와 리스트의 값을 전달하는 기능
    print('{}번: {}'.format(i + 1, name))


모듈 사용하기

def get_web(url):
    """URL을 넣으면 페이지 내용을 돌려주는 함수"""
    import urllib.request #import 모듈이름
    response = urllib.request.urlopen(url) #사용 방법: 모듈이름.모듈안의 구성요소
    data = response.read()
    decoded = data.decode('utf-8')
    return decoded

url = input('웹 페이지 주소?')
content = get_web(url)
print(content)


모듈 만들기

def random_rsp():
    """무작위 가위바위보"""
    import random
    return random.choice(['가위','바위','보'])

PAPER = '보'
SCISSOR = '가위'
ROCK = '바위'

#------------ my_module

import my_module

selected = my_module.random_rsp()
print(selected)

print('가위?' , my_module.SCISSOR == selected)

#같은 폴더에 있어야한다.


딕셔너리
  • 여러 값을 저장해 두고 필요한 값을 꺼내 쓰는 기능

  • 이름표를 이용하여 값을 꺼내 사용

  • 사용할 때는 리스트와 비슷한 방식

wintable = {
   '가위' : '보',
   '바위' : '가위',
   '보' : '바위',
}

print(wintable['가위']) #보

dict = {     "이름표"   :   [1,2,3] }
#                           ↑ 값은 리스트를 포함해서 무엇이든 올 수 있습니다.

print( dict["이름표"] ) #[1,2,3]


딕셔너리 수정하기
dict = ['one':1,'two':2]

#추가
dict['three'] = 3
# list = [1,2,3] 에서 list[3]=4 하면 인덱스에러가 뜨지만,딕셔너리는 그렇지않음

#수정
dict['one'] = 11 # one:11, two:2 three:3

#삭제
del(dict['one'])
dict.pop('two') #pop은 삭제할값을 리턴하면서 삭제


딕셔너리와 반복문
  • 딕셔너리는 값의 순서를 지키지 않는다.

ages={'Tod':35,'Jane':23, 'Paul':62}

'''for key in ages.keys: #keys 생략가능
    print(key)''' #TOd,Jane,Paul ->딕셔너리기 때문에 순서가 상관없이나옴

'''for value in ages.values():
    print(value)''' #35,23,62

'''for key in ages.keys():
    print('{}의 나이는 {}입니다.'.format(key, ages[key]))'''

for key, value in ages.items(): #key와 그 벨류값을 동시에 가져온다.
    print('{}의 나이는 {}입니다'.format(key,value))


딕셔너리와 리스트 비교

ListDictionary
생성list = [ 1, 2 ,3 ]dict = { 'one':1, 'two':2 }
호출list[ 0 ]dict[ 'one' ]
삭제del( list[ 0 ] )del( dict[ 'one' ] )
개수 확인len( list )len( dict )
값 확인2 in list'two' in dict.keys( )
전부 삭제list.clear( )dict.clear( )

차이점

ListDictionary
순서삭제 시 순서가 바뀌기 때문에 인덱스에 대한 값이 바뀐다key로 값을 가져오기 때문에 삭제 여부와 상관없다
결합list1 + list2dict1.update( dict2 )
list1 = [1,2,3]
list2 = [4,5,6]
list3 = list1 + list2 #[1,2,3,4,5,6]

dict1 = {'one':1 , 'two':2}
dict2 = {1:100,2:200}
dict1.update(dict2) #{'one':1 , 'two':2, 1:100,2:200}


튜플 만들기
  • 한번 정해진 순서를 바꿀 수 없다.

    • 튜플은 값의 변경과 삭제가 불가능

tuple1 = (1, 2, 3, 4)
tuple2 = 1, 2, 3, 4 # 괄호가 없어도 만들어지지만 괄호를 쓰는것을 추천한다.
#한번 정해진 순서을 바꿀 수 없다.

tuple2[0] #1
tuple2[1] #2
tuple2[3] = 5 # 에러발생 , 한번 만들면 변경할수없다.
del tuple2 #삭제불가
tuple.pop  #삭제불가.


팩킹(packing) 과 언팩킹(unpacking)

packing

  • 하나의 변수에 여러개의 값을 넣는 것

unpacking

  • 패킹된 변수에서 여러개의 값을 꺼내오는 것

c = (3, 4)
d, e = c    # c의 값을 언패킹하여 d, e에 값을 넣었다 d = 3 , c = 4
f = d, e    # 변수 d와 e를 f에 패킹 f = (3, 4)

x = 5
y = 10
x, y = y , x #두 변수의 값을 바꿀 때 임시변수가 필요 없다. ex 임시변수 temp 와같은것

def tuple_func():
   return 1,2

q,w = tuple_func() #함수의 리턴 값으로 여러 값을 전달할 수 있다.


튜플을 이용한 함수의 리턴값
#튜플 리스트 활용

for a in enumerate(list):
   print('{}번째 값: {}'.format(a[0], a[1]))

for a in enumerate(list):
   print('{}번째 값: {}'.format(*a))

#튜플 딕셔너리 활용
for a in dict.items():
   print('{}의 나이는:{}'.format(a[0], a[1]))

for a in dict.items():
   print('{}의 나이는:{}'.format(*a))  


while문
  • 조건이 참인 경우 계속 실행하는 반복문

  • for 반복문으로 작성한 코드는 while 반복문으로 작성 할 수 있다.

patterns = ['가위','바위','보']
length = len(patterns)
i = 0

while i < length:
    print(patterns[i]))
    i = i + 1
    
for a in range(patterns):
    print(pattern)
   
#For 문과 while문은 서로 바꿀수 있다. 그러나, 상황에 맞는 반복문을 사용하는 것이 좋다.ex 무한루프 같은 경우를 사용하거나, 변수조건을 주었을때

break
반복문을 종료시키는 기능
#continue
반복문의 나머지 부분을 보지 않고, 반복문의 처음으로 돌아가는 기능


break

  • 반복문을 종료시키는 기능

list = [1,2,3,4,5,6,7,3,43,445]
for val in list:
    if val % 3 == 0:
        print(val)
        break


continue

  • 반복문의 나머지 부분을 보지 않고, 반복문의 처음으로 돌아가는 기능

list = [1,2,3,4,5,6,7,3,43,445]
for i in range(10):
if i%2 == 0: #list 중에서 2의 배수를 찾을때까지 되돌아가서 조건문 검색
       continue
   print(i)


예외처리(Try , Except)

try:
   # 에러가 발생할 가능성이 있는 코드
except Exception: # 에러 종류
   #에러가 발생 했을 경우 처리할 코드
   
try:
    import my_module
except ImportError:
    prunt("모듈이 없습니다)
         
#에외처리 대신 if else을 사용할수 있다.


예외를 처리할 이름을 모를경우

try:
    list = []
    print(list[0])
except: #그냥 아무것도 적지 않아두 된다.
   print('에러가 발생했습니다')
   
try:
    list = []
    print(list[0])
except Exception as ex: # ex변수에 발생한 에러의 정보가 들어간다.
   print('에러가 발생했습니다',ex)


사용자가 직접 에러를 일으키기(raise)

# raise Exception # 에러 종류

def rsp(mine,yours):
    allowed = ['가위','바위','보']
    if mine not in allowed:
        raise ValueError #ValueError 에러를 발생시킨다.
    if yours not in allowed:
        raise ValueError
#가위바위보 승패를 판단하는 코드

try:
    rsp('가위' , '바')
except ValueError:
    print('잘못된 값을 입력했습니다')


논리연산(단락평가)

단락평가

  • 논리연산에서 코드의 앞만 보고 값을 정할 수 있는 경우 뒤는 보지 않고 값을 결정

  • 복잡한 코드를 단순하게 하는 방식

def return_false():
    print('함수 return_false')
    return False

def return_true():
    print('함수 return_true')
    return True

print("테스트1")
a = return_false()
b = return_true()

if a and b:
    print(True)
else:
    print(False)

print('테스트2')
if return_false() and return_true():
                #처음이 False기 때문에 if문을 실행하지않고   else문 을 바로실행한다
    print("True")
else:
    print(False)
   
   
'''
테스트1
함수 return_false
함수 return_true
False
테스트2
함수 return_false
False
'''


bool 값과 논리연산

true, false

  • 숫자 0을 제외한 모든 수 - true

  • 빈 딕셔너리, 빈 리스트를 제외한 모든 딕셔너리, 리스트 - true

  • 아무 값도 없다는 의미인 None - false

  • 빈문자열을 제외한 모든 문자열 - true

valui = input('입력해주세요>') or '아무것도 못받앗다'
print('입력받은값>',value)

#값을 입력하면 일력한 값이나오고
#입력하지 않으면 뒤에 '아무것도 못받았다' 라는 문구가나옴
a = True or 1      #True   앞의 값이 True입니다.
b = False or 0     #0     앞의 값이 False이므로 뒤의 값을 따릅니다.
c = 0 or False     #False 앞의 값이 0이므로 False입니다. 따라서 뒤의 값인 False를 따릅니다.
d = 1 or False     #1     앞의 값이 1이므로 True입니다.

Slice
  • 리스트나 문자열에서 값을 여러개 가져오는 기능

list = [0,1,2,3,4,5]
list[1] # 3
text = "hello world"

text[1] # 'e'
text[5] # 'o'

text[1:5] # 'ello'
'''
list[ 2: ] : 2번째부터 끝까지 반환
list[ : 2 ] : 처음부터 2번째 까지 반환
list[ : ] : 처음부터 끝까지 전부 반환
'''
list[1:3] # 1,2
list[0:2] # 0,2
list[2,len(list)] # 2,3,4,5
list[:] # 0,1,2,3,4,5
list #0,1,2,3,4,5

Reference

https://programmers.co.kr/

'Python' 카테고리의 다른 글

전화번호부 Python 예제  (0) 2018.09.21
Comments