Programming 언어/Python

[Python] 파이썬 정리 3 - 변수, 연산자, 집합형 자료, 정규 표현식, 조건 판단문 if문, 반복문 while, 반복문 for

circle kim 2021. 2. 8. 17:44

1. 변수

2. 연산자

3. 집합형 자료

4. 정규 표현식

5. 조건 판단문 if문

6. 반복문 while

7. 반복문 for

 


1. 변수 : 기본형 X, 참조형 O

id(a) : 주소확인 함수

is : 주소 비교, == : 값 비교

a=1
b=1.2
c=b
print(a,b,c)
print(id(a), id(1), id(b), id(c)) # id(a) : 주소확인 함수,
# 140710866855712 140710866855712 2553731934640 2553731934640

print(a is b, a==b) # is : 주소 비교, == : 값 비교  
#False False

print(b is c, b==c) 
#True True

 - 주석

#한줄 주석
"""
여러줄 주석
"""
'''
여러줄 주석
'''

 - 출력

print('hello')
var1 = 'hi'
var1 = 10
print(var1)

대소문자 구분

A = 1;
a = 2;
print(A, a, A==a) # 1 2 False

변수명으로 키워드 사용 불가

for = 5 # error

import : 외부모듈 읽기 - 설치된 모듈 로딩

import keyword
# keyword.kwlist : 키워드 리스트 출력
print(keyword.kwlist)
# ['False', 'None', 'True', 'and', 'as', 'assert', 'async', 'await', 'break', 'class', 'continue',
#'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 
#'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']

oct(a) : 8진수,  hex(a) : 16진수, bin(a) : 2진수

print(10, oct(10), hex(10), bin(10)) # 10 0o12 0xa 0b1010
print(10,0o12, 0xa, 0b1010) # 10 10 10 10

type(a) : type 확인

print(3, type(3))         # int
print(3.4, type(3.4))     # float
print(3+4j, type(3+4j))   # complex
print(True, type(True))   # bool
print('aa', type('aa'))   # str
print("abc", type("abc")) # str

isinstance(a, b) : 객체 type 확인 함수

print(isinstance(1, int))   # True
print(isinstance(1.2, int)) # False

집합형 자료형

print((1), type((1)))          # int. 집합형 자료형X
print((1,), type((1,)))        # tuple
print([1], type([1]))          # list
print({1}, type({1}))          # set
print({'k':1}, type({'k':1}))  # dict

2. 연산자

print(a, end=' ')

v1 = 123
v3 = v2 = v1      # 치환
print(v1, v2, v3) # 123 123 123
print('입니다') # 자동 줄바꿈
print(v1, v2, v3, end='---')  # 자동 줄바꿈X
print('입니다') # 123 123 123---입니다
v4 = 1,2,3
print(v4, type(v4)) # (1, 2, 3) <class 'tuple'>
print(v4, \
      type(v4)) # \ : 명령이 이어짐.

swap

v1, v2 = 100, 200
print(v1, v2) # 100 200
v2, v1 = v1, v2
print(v1, v2) # 200 100

packing - 값할당 연산

v1, v2 = [1, 2, 3, 4, 5] # 불가
v1, *v2 = [1, 2, 3, 4, 5]
print(v1, v2)

*v1, v2 = [1, 2, 3, 4, 5]
print(v1, v2)

*v1, v2, v3 = [1, 2, 3, 4, 5]
*v1, *v2, v3 = [1, 2, 3, 4, 5] # 불가
print(v1, v2, v3)

산술, 관계, 논리

print(5 + 3, 5 - 3, 5 * 3, 5 / 3)

// : 몫 , % : 나머지, divmod() : 몫/나머지

print(5 / 3, 5 // 3, 5 % 3, divmod(5, 3)) # 1.6666666666666667 1 2 (1, 2)

 ( ) > 산술(*,/ > +,-) > 관계 > 논리> 치환

print(3 + 4 * 5, (3 + 4) * 5) # 23 35.

관계 연산자

print(5 > 3, 5 == 3, 5 != 3, 5 <= 5)

논리 연산자 and, or, not(a)

print(5 > 3 and 4 <=3, 5 > 3 or 4 < 3 , not(5 >= 3))
print('강남' + '거리' + 2021) # TypeError

str(a) : 문자로 형변환, int(a) : 숫자로 현변환

print('강남' + '거리' + str(2021) + ' ' + '2000' + '21' + str(int('2000') + int('21')))

문자열 연산

print('답' * 10)
print('----------' * 10)
a = 5
a = a + 1
a += 1 # a++, ++a, a--, --a 증감연산자 사용 불가.
print('a : ' + str(a))

부호 변경

print(a, a * -1, -a, --a, +a, ++a) # 7 -7 -7 7 7 7

False

print('boolean : ', bool(False), bool(0), bool(0.0), bool(''), bool(None), bool([]), bool({}), bool(set()))

True

print('boolean : ', bool(True), bool(1), bool(-12), bool(1.5), bool('aa')) #  True True True True True

이스케이프 문자 : \n, \b, \t ...

print('aa\tbb')
print('aa\nbb')
print('c:\aa\nbc\cc.txt')
print(r'c:\aa\nbc\cc.txt') # r'' : 이스케이프 문자로 해석하지않음. 

format()

print(format(1.5678, '10.3f'))
print('나는 나이가 %d 이다.'%23)
print('나는 나이가 %s 이다.'%'스물셋')
print('나는 나이가 %d 이고 이름은 %s이다.'%(23, '홍길동'))
print('나는 나이가 %s 이고 이름은 %s이다.'%(23, '홍길동'))
print('나는 키가 %f이고, 에너지가 %d%%.'%(177.7, 100))
print('이름은 {0}, 나이는 {1}'.format('한국인', 33))
print('이름은 {}, 나이는 {}'.format('신선해', 33))
print('이름은 {1}, 나이는 {0}'.format(34, '강나루'))

3. 집합형 자료

 - 문자열 자료형 - 순서 존재, 수정 불가X

 len(a) : a의 길이

 s1.count('a') : s1에서 a 개수

s = 'sequence' # "sequence" 동일. """sequence""""
print(s)
print(len(s), s.count('e')) # 8 3

 

 - 문자열 관련 함수

 s1.find('a') : s1에서 앞에서 부터 가장 앞의 a의 index

 s1.find('a', 3) : s1에서 앞에서 부터 3번째 a의 index

 s1.rfind('a') : s1에서 뒤에서 부터 a의 index

print(s.find('e'), s.find('e', 3), s.rfind('e')) # 1 4 7
ss = 'kbs'
print(ss, id(ss)) # 1847323654896
ss = 'sbs' # 변수의 값이 변경되는 것이 아닌, 새로운 객체 생성.
print(ss, id(ss)) # 1847326686384

 

 - 슬라이싱 : 집합형 자료의 일부 요소만 참조

s[1:6:2] : 1번부터 5번까지 2간격 문자

print(s, s[0], s[2:4], s[3:]) # sequence s qu uence
print(s[-1], s[-4:-1], s[1:6:2]) # e enc eun
s[0] = 'k' # TypeError: 'str' object does not support item assignment

 

s.split(sep=' ') : 구분자를 기준으로 나눠 리스트로 리턴

ss2 = 'kbs mbc'
ss3 = ss2.split(sep=' ')  # ['kbs', 'mbc']

 

s1.join(s2) : s2의 리스트 사이에 s1을 넣어 결합하여 리턴

print(":".join(ss3)) # kbs:mbc

 

s1.replace(s2, s3) : s1에서 s2를 s3로 변경하여 리턴

a = 'life is too short'
b = a.replace("life", "java") # java is too short

 

 - list 타입 : 순서 O, 변경O, 여러종류의 값을 기억, [요소1, 요소2, ...], 배열과 유사

family = ['mother', 'father', 'me', 123, 12.345]
print(type(family)) # list

str1.append(str2) : str1에 str2 추가

str1.insert(a, str2) : str1의 a번째에 str2 삽입

str1.remove(str2) : str1에서 str2 제거

str1.index(str2) : str1에 str2 index

str1[0] = str2 : str1의 0번째 index값 str2로 변경

 

family.append(['삼촌', '고모']) # ['mother', 'father', 'me', 123, 12.345, ['삼촌', '고모']]
family.append('이모')          # ['mother', 'father', 'me', 123, 12.345, ['삼촌', '고모'], '이모']
family.insert(0, '할머니')     # ['할머니', 'mother', 'father', 'me', 123, 12.345, ['삼촌', '고모'], '이모'] 
family += ['아저씨']           
# ['할머니', 'mother', 'father', 'me', 123, 12.345, ['삼촌', '고모'], '이모', '아저씨']
family.remove('이모')
print(family, len(family), family.index('father'))
# ['할머니', 'mother', 'father', 'me', 123, 12.345, ['삼촌', '고모'], '아저씨'] 8 2
print(family[0], family[1:4])  # 할머니 ['mother', 'father', 'me']
print(family[6], family[6][1]) # ['삼촌', '고모'] 고모
family[0] = '할아버지' # ['할아버지', 'mother', 'father', 'me', 123, 12.345, ['삼촌', '고모'], '아저씨']

 

 - Tuple 타입 : 순서 O, 변경X, 읽기 전용, (요소1, 요소2, ...), 속도가 빠름, 리스트와 유사

t =('a', 'b', 'c', 'd', 'a')
t ='a', 'b', 'c', 'd', 'a'
print(t, type(t), len(t), t.count('a'))
# ('a', 'b', 'c', 'd', 'a') <class 'tuple'> 5 2
print(t[1], t[2:5])
# b ('c', 'd', 'a')
t[1] = 'k' # TypeError: 'tuple' object does not support item assignment

list(a) : list타입으로 변경

tuple(a) : tuple타입으로 변경

temp = list(t) # 형변환 후 값 변경 가능.
print(temp) 
temp[1] = 'k'
t = tuple(temp)
print(t, type(t))
# ('a', 'k', 'c', 'd', 'a') <class 'tuple'>

swap

t1 = (10,)
t1 = (10,20)
a, b = t1
b, a = a, b
t2 = a, b
print(t2)
# (20, 10)

 - Set 타입 : 순서X, 변경 X, 중복X, {요소1, 요소2, ...}

a.union(b) : 합집합( | )

a.intersection(b) : 교집합( & )

a.update({6, 7}) : a에 합집합하여 a에 반영

a.discard(b) : a에서 b 제거(없어도 정상진행)
a.remove(b) : a에서 b 제거(a에서 b 없으면 error)

a.clear() : a 집합 비움

a = {1, 2, 3, 1}
print(a, type(a), len(a))
#print(a[0]) # TypeError: 'set' object is not subscriptable
b = {3, 4}
print(a.union(b), a.intersection(b)) # {1, 2, 3, 4} {3}
print(a | b, a & b, a - b)           # {1, 2, 3, 4} {3} {1, 2}

b.update({6, 7})
# {3, 4, 6, 7}
b.update([8, 9])
# {3, 4, 6, 7, 8, 9}

b.discard(b)
b.remove(7) # 없으면 Error

b.clear() # set()

중복제거

set(a) : set타입으로 변경

li =[1,2,3,3,4,5,5,5,3,2,1]
print(li)
temp = set(li)
li = list(temp) # [1, 2, 3, 4, 5]

 

 - Dict 타입 : 순서X, {key1 : value1, key2 : value2, ... }

dic['key'] = 'value'

del dic['key']

dic.keys()

dic.get('key)

mydic = dict(k1=1, k2='kbs', k3=1.23)
print(mydic, type(mydic)) # {'k1': 1, 'k2': 'kbs', 'k3': 1.23} <class 'dict'>

dic = {'파이썬':'뱀', '자바':'커피', '스프링':'봄'}
print(dic, type(dic)) # {'k1': 1, 'k2': 'kbs', 'k3': 1.23} <class 'dict'>
print(dic['자바']) # 키로 값을 참조
print(dic['커피']) # 값으로 참조 불가

dic['겨울'] = '눈' # 값 추가
# {'파이썬': '뱀', '자바': '커피', '스프링': '봄', '겨울': '눈'}

del dic['겨울'] # 값 제거
# {'파이썬': '뱀', '자바': '커피', '스프링': '봄'}

dic.clear()
# {}
dic = {'파이썬':'뱀', '자바':'커피', '스프링':'봄'}
print(dic.keys())     # dict_keys(['파이썬', '자바', '스프링'])
print(dic['자바'])     # 커피
print(dic.get('자바')) # 커피

4. 정규 표현식

: 특정한 규칙을 가진 문자열의 집합을 표현하는 데 사용하는 형식 언어

* test4

import re
from re import IGNORECASE

ss = '1234 abc가나다ABC_555_6_789_555kbs가나 다라 가나 정규 표현식 특정한 규칙'
print(ss)
print(re.findall(r'123', ss))      # ['123']
print(re.findall(r'가나', ss))      # ['가나', '가나', '가나']
print(re.findall(r'[0,1,3]', ss))  # ['1', '3']
print(re.findall(r'[0,1,5]', ss))  # ['1', '5', '5', '5', '5', '5', '5']
print(re.findall(r'[0-9]', ss))    # ['1', '2', '3', '4', '5', '5', '5', '6', '7', '8', '9', '5', '5', '5']
print(re.findall(r'[0-9]+', ss))   # ['1234', '555', '6', '789', '555']
print(re.findall(r'[0-9]?', ss))   # ['1', '2', '3', '4', '', '', '', '', '', '', '', '', '', '', '', '5', '5', '5', '', '6', '', '7', '8', '9', '', '5', '5', '5', '', '', '', '', '', '', '', '', '', '', '', '']
print(re.findall(r'[a-z, A-Z]+', ss)) # [' abc', 'ABC', 'kbs', ' ', ' ', ' ', ' ']
print(re.findall(r'[가-힣]+', ss)) # ['가나다', '가나', '다라', '가나', '정규', '표현식']
print(re.findall(r'[가-힣]{2}', ss)) # ['가나', '가나', '다라', '가나', '정규', '표현']
print(re.findall(r'[가-힣]{2,3}', ss)) # ['가나다', '가나', '다라', '가나', '정규', '표현식', '특정한', '규칙']

print(re.findall(r'[^0-9]+', ss))
print(re.findall(r'^1', ss)) # 첫글자가 1
print(re.findall(r'^2', ss))
print(re.findall(r'칙$', ss)) # 마지막 글자가 칙

print(re.findall(r'\d', ss)) # 숫자
print(re.findall(r'\d{2}', ss))
print(re.findall(r'\d{2,3}', ss))

5. 조건 판단문 if문

* test5_if

 - if

var = 4
if var >=3:
    print('큼')

 

 - if else

if var >=3:
    print('큼')
else:
    print('거짓')

 

 - 다중 if

money = 1000
age = 22
if money >= 500:
    item = '사과'
    if age <= 30:
        msg = 'yong'
    else:
        msg = 'old'
else:
    item = '한라봉'
    if age <= 20:
        msg = 'YB 한라봉'
    else:
        msg = 'OB 한라봉'
print(item, msg)

 

 - elif

score = 85
if score >= 90:
    print('우수')
else:
    if score >= 70:
        print('일반')
    else:
        print('노력')
if score >= 90:
    print('우수')
elif score >= 70:
    print('일반')
else:
    print('노력')

 

 - input

score = int(input('점수입력:'))

if 90 <= score <= 100:
    print('우수')
elif 70 <= score <90:
    print('일반')
else:
    print('노력')

 

- if in

if a in str:
   str에 a가 있을경우 실행

name = ['홍길동', '김길동', '이길동']
if '홍길동2' in name:
    print('freind')
else:
    print('dont know')

 

 - 한줄 if else

(참일때 출력문) if (조건) else (거짓일때 출력문)

a = 'kbs'
b = 9 if a == 'kbs' else 11
print(b)

a = 11
b = 'mbc' if a == 9 else 'kbs'
print(b)

(참일때 출력문, 거짓일때 출력문) [조건]

a = 3
result = 0
if a > 5:
    result = a * 2
else :
    result = a + 2
print(result) # 5


result = a * 2 if a > 5 else a + 2
print(result) # 5


print((a + 2, a* 2)[a > 5]) # 5

 

print(int(True), int(False)) # 1 0

6. 반복문 while

* test5_while

a = 1

while a <= 5:
    print(a, end = ' ')
    a += 1
# 1 2 3 4 5 

print('\na: ', a) # a:  6

 

i = 1
while i <= 3:
    j = 1
    while j <= 4:
        print('i:'+str(i)+'/j:'+ str(j))
        
        j = j + 1
    print('-----')
    i += 1
# i:1/j:1
# i:1/j:2
# i:1/j:3
# i:1/j:4
# -----
# i:2/j:1
# i:2/j:2
# i:2/j:3
# i:2/j:4
# -----
# i:3/j:1
# i:3/j:2
# i:3/j:3
# i:3/j:4

 

 - 1 ~100 사이의 3의 배수의 합

i = 1; sum = 0;
while i <= 100:
    if i % 3 == 0:
        sum += i
    i += 1
print('합은 '+str(sum)) # 합은 1683

str1.pop() : str1에서 가장 마지막 값 방출

colors = ['r', 'g', 'b']
print(colors)
print(colors[1])
a = 0
while a < len(colors):
    print(colors[a], end = ' ') # r g b
    a += 1
    
while colors:
    print(colors.pop(), end = ' ') # b g r. LIFO

 

- 별찍기

i = 0
while i <= 10:
    j = 1
    re = ' '
    while j <= i:
        re = re + '*'
        j = j + 1
    print(re)
    i = i + 1
#  *
#  **
#  ***
#  ****
#  *****
#  ******
#  *******
#  ********
#  *********
#  **********
i = 0
while i <= 10:
    j = 1
    re = ' '
    while j <= i:
        re = re + ' '
        j = j + 1
    k = 1
    while k <= 11 - j:
        re = re + '*'
        k = k + 1
    print(re)
    i = i + 1
#  **********
#   *********
#    ********
#     *******
#      ******
#       *****
#        ****
#         ***
#          **
#           *

 

 - if 블럭 내에 while 블럭 사용

import time

time.sleep(1) : sleep

import time
sw = input('폭탄 스위치를 누를까요?[y/n]')
if sw == 'Y' or sw == 'y':
    count = 5
    while 1 <= count:
        print('%d 초 남음'%count)
        time.sleep(1)
        count -= 1
    print('boom!')
elif sw == 'N' or sw == 'n':
    print('작업취소')
else:
    print('y 또는  n을 누르시오')

 

* test5_while2

 - continue, break

a = 0

while a < 10:
    a += 1
    if a == 5:continue
    if a == 7:break
    print(a, end=' ')
else: # phython만 존재
    print('while 정상 수행') # while문 정상 완료 후 1회 수행. break 실행시 출력되지않음
# 1 2 3 4 6 
print('while 수행 후 %d'%a) # while 수행 후 7

 

 - 홀수, 짝수 확인

while True:
    a = int(input('숫자입력:'))
    if a == 0:
        print('while문을 빠져나갑니다.')
        break
    elif a % 2 == 0: # 짝수
        print('%d는 짝수'%a)
    elif a % 2 == 1: # 홀수
        print('%d는 홀수'%a)

7. 반복문 for

* test6_for

for i in [1, 2, 3, 4, 5]: # list : 
    print(i, end = ' ')
# 1 2 3 4 5
print()

for i in (1, 2, 3, 4, 5): # tuple
    print(i, end = ' ')
# 1 2 3 4 5
print()

for i in {1, 2, 3, 4, 5, 5, 5}: # set
    print(i, end = ' ')
# 1 2 3 4 5

 

str.items() : tuple로 key, value 리턴

sort = {'java':'웹용', 'python':'만능언어','java script':'컨텐츠 제작용'}
for i in sort.items(): # str.items() : tuple로 리턴
    print(i)
    print(i[0] + '- '+i[1])
# ('java', '웹용')
# java- 웹용
# ...
for k, v in sort.items():
    print(k)
    print(v)
# java
# 웹용
# python
# 만능언어
# java script
# 컨텐츠 제작용

 

 - str.values() : value값 리턴

for k in sort.values():
    print(k, end = ' ')
# 웹용 만능언어 컨텐츠 제작용

 

 - 2, 3단 출력

for n in [2 ,3]:
    print('--{}단--'.format(n))
    for su in [1,2,3,4,5,6,7,8,9]:
        print('{0} * {1} = {2}'.format(n, su, n*su), end = '\t')
    print()    

 

enumerate(a) : index와 요소값 리턴

li = ['a', 'b', 'c']
li = ('a', 'b', 'c')
li = {'a', 'b', 'c'} # 순서 없음. 무작위
for ind, data in enumerate(li):
    print(ind, data)
# 0 a
# 1 b
# 2 c

 - continue, break

datas = [1,2,3,4,5]
for i in datas:
    if i == 3:
        continue
    if i == 5:
        break
    print(i, end = ' ')
else:
    print('정상 처리') # break 실행시 출력되지않음 

 

 - for문 내부에 if문 사용

score = [95,70,60,50,100]
num = 0

for j in score:
    num += 1
    if j < 70: continue
    print('%d번째  점수는 합격'%num)
# 1번째  점수는 합격
# 2번째  점수는 합격
# 5번째  점수는 합격

 

 - 이중 for문

li1 = [3,4,5]
li2 = [0.5,1,2]
for a in li1:
    for b in li2:
        print(a + b, end = ' ') # 3.5 4 5 4.5 5 6 5.5 6 7

 

[실행문 for 변수1 in list1 for 변수2 in list2]  : list1의 첫번째 요소와 list2의 첫번째 요소 실행문 실행 -> list1의 두번째 요소와 list2의 첫번째 요소 실행문 실행 -> ...

print([a + b for a in li1 for b in li2])
datas = [a + b for a in li1 for b in li2]
for d in datas:
    print(d, end = ' ') # 3.5 4 5 4.5 5 6 5.5 6 7 

 

 - 정규 표현식

re.sub(r"[^가-힣\s]", "", ss) : ss에서 패턴과 일치는 값을 ""로 대체

import re
ss = '''
이재명 경기도지사는 8일 일각에서 제기되는 탈당설에 대해 “민주당 지지자들이 압도적으로 응원하는데 왜 나가느냐”고 강력 부인했다.
이 지사는 이날 OBS 방송에 출연해 ‘일부에서 탈당설이 제기되고 있다’는 질문에 “2005년부터 16년간 민주당 당원인데 왜 탈당하느냐”면서 이같이 반문했다.
이 지사는 이날 OBS 방송에 출연해 ‘일부에서 탈당설이 제기되고 있다’는 질문에 “2005년부터 16년간 민주당 당원인데 왜 탈당하느냐”면서 이같이 반문했다.
이 지사는 이날 OBS 방송에 출연해 ‘일부에서 탈당설이 제기되고 있다’는 질문에 “2005년부터 16년간 민주당 당원인데 왜 탈당하느냐”면서 이같이 반문했다.
아울러 이 지사는 ‘정세균 총리 이외에도 당내 제3후보론이 나오는데 섭섭하지 않으냐’는 질문에는 “저는 안 섭섭하다. 섭섭할 사람은 (대선주자 선호도) 2등 하시는 분일 것”이라며
이 지사는 이날 OBS 방송에 출연해 ‘일부에서 탈당설이 제기되고 있다’는 질문에 “2005년부터 16년간 민주당 당원인데 왜 탈당하느냐”면서 이같이 반문했다.
이 지사는 이날 OBS 방송에 출연해 ‘일부에서 탈당설이 제기되고 있다’는 질문에 “2005년부터 16년간 민주당 당원인데 왜 탈당하느냐”면서 이같이 반문했다. 
“저는 누군가는 상대해야 하는데, 저보다는 대체 당할 수 있는 분이 억울할 것”이라고 했다.
'''
ss2 = re.sub(r"[^가-힣\s]", "", ss) # 한글만 parsing
print(ss2)
ss3 = ss2.split(' ') # 공백 기준 단어를 나눔 
print(ss3)
cnt = {} # 단어의 발생횟수를 dict로 저장
for n in ss3:
    if n in cnt: # count있을 경우 ++
        cnt[n] += 1
    else:# 없을 경우 1
        cnt[n] = 1
print(cnt)
# {'\n이재명': 1, '경기도지사는': 1, '일': 1, '일각에서': 1, '제기되는': 1, '탈당설에': 1, '대해': 1, '민주당': 6, '지지자들이': 1, '압도적으로': 1, '응원하는데': 1, '왜': 6, '나가느냐고': 1, '강력': 1, '부인했다\n이': 1, '지사는': 6, '이날': 5, '': 5, '방송에': 5, '출연해': 5, '일부에서': 5, '탈당설이': 5, '제기되고': 5, '있다는': 5, '질문에': 5, '년부터': 5, '년간': 5, '당원인데': 5, '탈당하느냐면서': 5, '이같이': 5, '반문했다\n이': 3, '반문했다\n아울러': 1, '이': 1, '정세균': 1, '총리': 1, '이외에도': 1, '당내': 1, '제후보론이': 1, '나오는데': 1, '섭섭하지': 1, '않으냐는': 1, '질문에는': 1, '저는': 1, '안': 1, '섭섭하다': 1, '섭섭할': 1, '사람은': 1, '대선주자': 1, '선호도': 1, '등': 1, '하시는': 1, '분일': 1, '것이라며\n이': 1, '반문했다': 1, '\n저는': 1, '누군가는': 1, '상대해야': 1, '하는데': 1, '저보다는': 1, '대체': 1, '당할': 1, '수': 1, '있는': 1, '분이': 1, '억울할': 1, '것이라고': 1, '했다\n': 1}

re.match(r'^\d{3}-\d{4}$', str1) : str1에서 패턴과 일치하면 true

for ss in ['111-1234', '일이삼-사오육칠', '123-1234']:
    if re.match(r'^\d{3}-\d{4}$', ss):
        print(ss, '전화번호 일치')
    else:
        print(ss, '전화번호 불일치')

 

str1 = sorted(str2) : 정렬값 리턴

str1.sort() : 정렬하여 str1에 반영

from time import localtime
print(localtime())
# time.struct_time(tm_year=2021, tm_mon=2, tm_mday=9, tm_hour=11, tm_min=12, tm_sec=1, tm_wday=1, tm_yday=40, tm_isdst=0)
act = {6:'잠', 9:'준비', 18:'공부', 24:'휴식'}
print(act)
hour = localtime().tm_hour

for act_time in sorted(act.keys()):
    if hour < act_time:
        print(act[act_time])
        break
    #else:
        #print('알수없음')

 

 - 과일값 계산하기

price = {'사과':3000, '감':500, '한라봉':1000}
guest = {'사과':2, '감':3}
bill = sum(price[f]* guest[f] for f in guest)
print('손님이 구매한 과일의 총액은 {}원'.format(bill)) # 손님이 구매한 과일의 총액은 7500원
datas = [1, 2, 'kbs', True, 3]
li = [i * i for i in datas if type(i) == int]
print(li) # [1, 4, 9]
datas = {1,1,2,2,3}
se = {i * i for i in datas}
print(se) # {1, 4, 9}

 

 - key-value swap

id_name = {1:'tom', 2:'jonh'}
name_id = {val:key for key, val in id_name.items()}
print(name_id) # {'tom': 1, 'jonh': 2}

 

aa = [(1,2), (3,4), (5,6)]
for a, b in aa:
    print(a + b, end = ' ') # 3 7 11

 

temp = [1,2,3]
temp2 = [i + 10 for i in temp]
print(temp2) # [11, 12, 13]

 

-  range() : 수열 생성

print(list(range(1,6)))    # [1, 2, 3, 4, 5]
print(set(range(1,6)))     # {1, 2, 3, 4, 5}
print(tuple(range(1,6)))   # (1, 2, 3, 4, 5)
print(list(range(1,11,3))) # [1, 4, 7, 10]
print(list(range(-10,-200,-30))) # [-10, -40, -70, -100, -130, -160, -190]
for i in range(6):
    print(i, end = ' ') # 0 1 2 3 4 5 
print()
tot = 0
for i in range(1, 50, 2):
    print(i, end = ' ') # 1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41 43 45 47 49
    tot += i 
print()
print('결과는 ' + str(tot))
print('결과는 ' + str(sum(range(1, 50, 2))))

 

 - 구구단 2~5단

for i in range(2, 5):
    for j in range(1, 9):
        print('{0} * {1} = {2}'.format(i,j,i*j), end = '\t')
    print()

 

 - 1 ~ 100 사이의 숫자 중 3의 배수이면서 5의 배수인 수들의 합 출력

tot = 0
for i in range(1, 101):
    #print(i, end = ' ')
    if i % 3 == 0 and i % 5 == 0:
        tot = tot + i
print('합은', tot) # 합은 315

 

 - N - gram : 문자열에서 n개의 연속된 요소를 추출하는 방법
 - 글자별 n-gram : 2- gram

ss = 'hello'

for i in range(len(ss) -1):
    print(ss[i], ss[i+ 1], sep = ' ')
# h e
# e l
# l l
# l o

 

 - 단어별 n-gram : 2- gram

ss2 = 'this is python script'
words = ss2.split()

for i in range(len(words) -1):
    print(words[i], words[i+ 1], sep = ' ')
# this is
# is python
# python script