Python | String, 문자열

Stellar·2021년 5월 14일
0

Python

목록 보기
6/36
post-thumbnail

문자열

✔️ 비교하기

알파벳 순서대로 크기가 정해짐. A가 크고 Z가 작음. 대문자가 크고 소문자가 작음.

a = input('문자열을 입력하세요 : ')
b = input('문자열을 입력하세요 : ')

if a < b :
    print( a, '가 앞에 있음')
else :
    print( b, '가 앞에 있음')

문자열 분리하기

✔️ .split(), 스플릿

괄호 안에 적은 글자 기준으로 나눈다.
기준 문자는 출력하지 않는다.

split 예제. 단어 나누기

>>> s = 'Mississippi'
>>> s.split('s')
['Mi', '', 'i', '', 'ippi']
>>> s.split('i')
['M', 'ss', 'ss', 'pp', '']

split 예제2. 축약어 만들기

앞글자만 따서 대문자로 축약어를 만들어보자.

#축약어 만들기
sentence = input('문자열을 입력하세요 : ')
sens = sentence.split(' ')

result = ''

for words in sens :
    result += words[0]

print(result.upper())

split 예제3. 이메일 구분하기

@를 기준으로 구분하여 출력하자.

address = input('이메일을 입력하세요 : ')

#대입연산으로 간단히 할 수 있다.
#id, domain = address.split('@')
list = address.split('@')

name = str(list[0])
mail = str(list[1])

print(address)
print('name : ' , name)
print('mail : ', mail)

split 예제4. 공백으로 나누기

s = '짜장 짬뽕 탕수육'
print(s.split(' '))

s2 = '서울->대전->대구->부산'
city = s2.split('->')
print(city)

for i in city :
    print(i, '찍고', end=',')

=============================== RESTART: C:\Users\GIEC\Desktop\기초문법\1031\test.py ==============================
['짜장', '짬뽕', '탕수육']
['서울', '대전', '대구', '부산']
서울 찍고,대전 찍고,대구 찍고,부산 찍고,

✔️ .splitlines(), 줄 단위로 분리 함.

\n 줄바꿈

#splitlines
traveler = '''가나다라 마바사
아자차카타파하\n 테\n스\n트\n'''

poet =traveler.splitlines()
for i in poet :
    print(i)

=============================== RESTART: C:\Users\GIEC\Desktop\기초문법\1031\test.py ==============================
가나다라 마바사
아자차카타파하
 테
스
트

✔️ 슬라이싱

슬라이싱 예문1.

#슬라이싱
file = '20171224-104830.jpg'
print('촬영 날짜 : ' + file[4:6] + '월' + file[6:8] + '일')
print('촬영 시간 : ' + file[9:11] + '시' + file[11:13] + '분')
print('확장자 : ', file[-3:])

슬라이싱 예문2.

#슬라이싱 2
yoil = '월화수목금토일'

print(yoil[ : : 2]) #첫 글자 출력 후 첫 글자 포함 2칸 씩 뒤 문자를 출력.
print(yoil[ : : -1])
print(yoil[ : : -2])

=============================== RESTART: C:\Users\GIEC\Desktop\기초문법\1031\test.py ==============================
월수금일
일토금목수화월
일금수월

문자열 합치기 join, ,, +, formating

✔️ .join(), 글자 끼리 사이사이에 합쳐 줌.

사이 사이에 끼울 문자에 .join()을 해준다.

#join
s = '._.'
print(s.join('대한민국'))

p = '1'
print(p.join('아야어여오요우유'))

=============================== RESTART: C:\Users\GIEC\Desktop\기초문법\1031\test.py ==============================._.._.._.국
아1111111

join을 다시 split 해보기

a = '._.'
print(a.join('대한민국').split('._.'))

=============================== RESTART: C:\Users\GIEC\Desktop\기초문법\1031\test.py ==============================
['대', '한', '민', '국']

split, join 통합 예제.

s2 = '서울->대전->대구->부산'
result = s2.split('->')
    
print(' 찍고 '.join(result))

=============================== RESTART: C:\Users\GIEC\Desktop\기초문법\1031\test.py ==============================
서울 찍고 대전 찍고 대구 찍고 부산

✔️ 문자열을 , +로 문자를 합칠 수 있다. 변수가 숫자인 경우 str()으로 감싸면 가능. 대신 ,는 양 옆에 공백이 생김.

✔️ % formating

문자열 뒤에 .을 붙이지 않고 %를 붙이는 것에 주의하자.

형상내용
%c한 글자
%f실수
%d정수
%s글자

formating 예제.

name = 'coffee'
age = 12
weight = 6.7

print('%s의 나이는 %d, 무게는 %f 입니다.' % (name, age, weight))

✔️ .format()

변수를 바로 집어 넣는법.

print('이름은 {name}, 나이는 {age}, 성별은 {sex}'.format(name ='커피', age = 12, sex = '남'))

다양한 .format() 활용법

name ='커피'
age = 12
height = 50.5

#0, 1, 2의 의미가 뭔지 모르겠음 그냥 순서 또는 인덱스를 의미하는 걸까?
print('이름은 {0:s}, 나이는 {1:d}, 성별은 {2:f}'.format(name, age, height))

#{0:10s} 변수의 글자 포함 10칸으로 둬라.
#{1:5d} 변수의 숫자 포함 5칸으로 둬라. 숫자는 자동으로 왼쪽 정렬인가봄.
#{2:8.2f} 소수점 아래까지 8칸으로 두고 소수점은 둘째자리까지만 표기하라.
print('이름은 {0:10s}, 나이는 {1:5d}, 성별은 {2:8.2f}'.format(name, age, height))

#^ 가운데 정렬, > 왼쪽 정렬, < 오른쪽 정렬
print('이름은 {0:^10s}, 나이는 {1:>5d}, 성별은 {2:<8.2f}'.format(name, age, height))

#기호를 넣어 빈 문자를 대체할 수 있다.
print('이름은 {0:$^10s}, 나이는 {1:!>5d}, 성별은 {2:@<8.2f}'.format(name, age, height))

align, 정렬하기

✔️ align, 사이 공백주기

문자열은 왼쪽 정렬, 숫자는 오른쪽 정렬로 배치하는 것이 좋다.

value = 123
print('#ㅈ#%d###' % value)
print('##ㅈ%5d###' % value) #총 5칸 띄워서 123넣기
print('ㅈ##%10d###' % value) #총 10칸 띄워서 123넣기
print('ㅈㅈㅈ%1d###' % value) #총 1칸을 띄우란 말인데 이미 1칸이 띄워져 있으니 적힌 글자 뒤로 바로 붙이기.

=============================== RESTART: C:\Users\GIEC\Desktop\기초문법\1031\test.py ==============================
#ㅈ#123###
##ㅈ  123#####       123###
ㅈㅈㅈ123###

align 예제

-는 왼쪽 정렬,
?? 끝이 맞아야 하는데 뭔가 난 안 맞음.. 왜지?

#align
price = [30, 13500, 2000]

for p in price :
    print(' 가격:%d원 ' % p)

for p in price :
    print(' 가격:%7d원' % p)

for p in price :
    print(' 가격:%-7d원' % p)

=============================== RESTART: C:\Users\GIEC\Desktop\기초문법\1031\test.py ==============================
 가격:30원 
 가격:13500원 
 가격:2000원 
 가격:     30원
 가격:  13500원
 가격:   2000원
 가격:30     원
 가격:13500  원
 가격:2000

align 예제2. 소수점 .2, .5는 소수점의 자릿수.

?? 끝이 맞아야 하는데 뭔가 난 안 맞음.. 왜지?

#precision
pie = 3.14159265
print('%10f' % pie)
print('%10.8f' % pie)
print('%10.5f' % pie)
print('%10.2f' % pie)

=============================== RESTART: C:\Users\GIEC\Desktop\기초문법\1031\test.py ==============================
  3.141593
3.14159265
   3.14159
      3.14

✔️ .just(), .center(), 공백을 만들어 줌.

#just
message = 'fjfjfjfjfjfj'
print(message.ljust(30))
print(message.rjust(30))
print(message.center(30))

=============================== RESTART: C:\Users\GIEC\Desktop\기초문법\1031\test.py ==============================
fjfjfjfjfjfj                  
                  fjfjfjfjfjfj
         fjfjfjfjfjfj    

✔️ .startswith(), 지정된 문자로 시작하는지 체크하기.

#중요함. 특정 문자로 시작하는지 체크하기
s = input('파이썬 소스 파일 이름을 입력하시오 : ')

if s.startswith('mypy') :
    print('내가 작성한 파이썬 파일입니다.')
else :
    print('내가 작성한 파이썬 파일이 아닙니다.')

✔️ .endswith(), 지정된 문자로 끝나는지 체크하기.

#중요함. 특정 문자로 끝나는지 체크하기
s = input('파이썬 소스 파일 이름을 입력하시오 : ')

if s.endswith('.jpg') :
    print('이미지 파일이 맞습니다.')
else :
    print('이미지 파일이 아닙니다.')

✔️ .strip(), 문자열 앞, 뒤 공백 제거(중간 공백은 지우기 X)

원본은 유지

  • 사용처 : 로그인할 때 아이디 치다가 스페이스바 눌러졌을 때 사용자가 아닌 컴터가 공백을 지워줄 때 사용된다.
>>> s = '      fkfjkfkdjkf kd kd kfkdk dkkd kd k   k  k kkk k  k        '

>>> s.lstrip() #왼쪽 공백 제거
'fkfjkfkdjkf kd kd kfkdk dkkd kd k   k  k kkk k  k        '

>>> s.rstrip()  #오른쪽 공백 제거
'      fkfjkfkdjkf kd kd kfkdk dkkd kd k   k  k kkk k  k'

>>> s.strip() #양쪽 공백 제거
'fkfjkfkdjkf kd kd kfkdk dkkd kd k   k  k kkk k  k'

>>> s
'      fkfjkfkdjkf kd kd kfkdk dkkd kd k   k  k kkk k  k        '

✔️ 문자열 대, 소문자 변환

>>> s = 'FHFHdhdhdhhfFHFHFH'

>>> s.upper() #대문자 변환
'FHFHDHDHDHHFFHFHFH'

>>> s.lower() #소문자 변환
'fhfhdhdhdhhffhfhfh'

>>> s.capitalize() #첫 글자만 대문자 변환
'Fhfhdhdhdhhffhfhfh'

✔️ .replace(), 메소드로 문자열 수정하기

원본은 유지된다.

문자열 수정이 가능한 함수

함수명설명
replace문자열 안의 문자열을 다른 문자열로 바꿔주는 함수이다.

다른 글자로 바꾸기

>>> s.replace('황', 'Lee')
'Lee 커 피'

중간 공백 지우기

>>> s = '황 커 피'
>>> s.replace(' ', '')
'황커피'

replace 예제. 회문(Palindrome)

회문이란. 앞으로 읽으나 뒤로 읽으나 똑같은 단어를 뜻.
대, 소문자 구분을 함.

def check_pal(a) :
    low = 0
    high = len(s) -1

    while True :
        if low > high :
            return True

        a = s[low]
        b = s[high]

        if a != b :
            return False
        low += 1
        high -= 1

s = input('문자열을 입력하시오 : ')
s = s.replace(' ', '').lower()

if check_pal(s) == True :
    print('회문입니다.')
else :
    print('회문이 아닙니다.')

기본 문법

# 문법
>>> replace('old', 'new')
>>> replace('old', 'new', count) #count는 변경할 횟수

#예시
>>> test = '123,456,789'
>>> test = test.replace(',', '-')
>>> print(test)
123-456-789

#예시2
>>> test = test.replace('-', '.', 1)
>>> print(test)
123.456-789 #count 숫자 만큼 왼쪽부터 차례로 변경됨

✔️ input값을 replace 하기

#코드 작성
insert = input()

change = """땡 문자열 땡땡
땡 작성하기 땡
"""

change = change.replace("땡", insert)

print(change)

#결과
============================================== RESTART: C:\project\practice_arithmetic.py =============================================
이렇게 change #input 값
이렇게 change 문자열 이렇게 change이렇게 change
이렇게 change 작성하기 이렇게 change

💬 input 값을 포맷팅하려 했으나 안됨.

#코드 작성
insert = input()

change = """땡 문자열 땡땡
땡 작성하기 땡
"""

change = change.replace("땡", insert)

print(change)

#결과
============================================== RESTART: C:\project\practice_arithmetic.py =============================================
dkshlskd
Traceback (most recent call last):
  File "C:\project\practice_arithmetic.py", line 7, in <module>
    change = change.replace("땡", {insert})
TypeError: replace() argument 2 must be str, not set
>>> 

문자열 찾기

✔️ .find() 메소드

찾고자하는 값의 첫 번째 인덱스를 반환한다.
찾는 값이 없는 경우 -1을 반환. (모든 코드는 값이 없는 경우 -1을 반환 한다.)

Q. .index() 메소드와 인덱스를 반환 하는 것은 같은데 왜 두 가지를 다 쓰는가?

A. .index() 메소드의 경우 -1을 반환하지 않고 에러가 발생한다.
에러 처리를 배우지 않았을 경우 .find() 메소드를 사용해야한다.

.find()

s = 'python programming'

print(s.find('o'))
print(s.find('k'))

=============================== RESTART: C:\Users\GIEC\Desktop\기초문법\1031\test.py ==============================
4
-1

.rfind(), 오른쪽부터 찾아 줌.

오른쪽은 1부터 시작 함.

s = 'python programming'

print(s.rfind('o'))

=============================== RESTART: C:\Users\GIEC\Desktop\기초문법\1031\test.py ==============================
9

✔️ .index(), 인덱스를 반환

s = 'python programming'

print(s.index('r'))

=============================== RESTART: C:\Users\GIEC\Desktop\기초문법\1031\test.py ==============================
8

✔️ .count(), 찾는 값이 몇 개나 있는지 반환.

s = 'python programming'

print(s.count('n'))

=============================== RESTART: C:\Users\GIEC\Desktop\기초문법\1031\test.py ==============================
2

.is~ ?

✔️ .isalpha(), 글자만 입력 가능.

✔️ .isdigit(), '숫자' 모양으로 생겼으면 무조건 True.

✔️ .isdecimal(), 숫자만 입력 가능.

#isdecimal
height = input('키를 입력하세요 : ')

if height.isdecimal() :
    print('키 = ', height)
else :
    print('숫자만 입력하세요.')

✔️ .isalnum(), 글자와 숫자만 입력 가능.

✔️ .isspace(), 스페이스만 가능


주석

✔️ 한 줄 주석 #

# 한 줄로 주석을 붙일 때.

✔️ 다 줄 주석 '''

프로그래밍 내용에 대한 설명을덪붙일 때 많이 사용 됨.

✔️ help() 함수로 주석 보기.

def calscsum(n) :
    ''' 1 ~ n까지의 합계를 구해 리턴한다.'''
    sum = 0
    for i in range( n+1 ) :
        sum += i
    return sum

help(calscsum)

=============================== RESTART: C:\Users\GIEC\Desktop\기초문법\1031\test.py ==============================
Help on function calscsum in module __main__:

calscsum(n)
    1 ~ n까지의 합계를 구해 리턴한다.

help()에 기능을 넣어 사용법도 알 수 있다.

help([1, 2, 3].append)
Help on built-in function append:

append(object, /) method of builtins.list instance
    Append object to the end of the list.

계속해서 작성하기

\ 역슬래시만 문자열에 사용한 경우 계속해서 작성한다는 의미다.

  • \ : 이어서 작성
  • \n : 줄바꿈
>>> print('동해물과 백두산이\n\
... 마르고 닳도록')
동해물과 백두산이
마르고 닳도록

0개의 댓글