스터디/파이썬 스터디 강의자료

[3팀/김규리] 6차시 파이썬 스터디 - 문자열

kyuree 2023. 4. 30. 22:03

*모든 출처는 도서 "데이터 과학을 위한 파이썬 프로그래밍"입니다*

6차시_문자열_강의안.pdf
1.79MB
6차시_문자열_과제.docx
4.95MB

 

#1. 문자열의 이해

문자열(string)의 개념


  • 중요하게 다뤄지는 자료형 중 하나
  • 문자열 특징
    • 시퀀스 자료형
      • 데이터를 순차적으로 메모리에 저장

문자열의 인덱싱과 슬라이싱


  • 인덱싱
    • 또 다른 시퀀스 자료형인 리스트와 비슷한 특징 갖고 있음
    • 상대적 주소인 인덱스 활용

  • 인덱싱 사용 방법
    • 형식
      • 문자열 저장된 변수명[인덱스 주소]
    a = 'apple'
    print(a[0], a[3]) #a l
    
    print(a[-1], a[-5]). #e a
    
  • 슬라이싱
    • 주소값 활용하여 문자열의 부분 추출
    • 리스트의 슬라이싱과 동일
    a = 'Do it yourself!'
    print(a[3:6], 'and', a[-9:])
    #it  and yourself!
    
    print(a[:]
    #Do it yourself!
    
    print(a[-30:30])
    #Do it yourself!
    
    print(a[::2])
    #D tyusl!
    
    print(a[::-1])
    #!flesuoy ti oD
    
    • 입력
      • 변수명[시작번호 : 끝번호]
    • 출력
      • 시작번호 문자열 ~ 끝번호 -1 문자열
    • 처음부터 끝까지 출력하기
      • 변수명[:]
    • 건너뛸 칸수 지정하기
      • 변수명[시작번호 : 끝번호 : 칸수]
      • -1 → 역순으로
      • 2 → 2칸씩 건너뛰기

문자열의 연산


  • 변수처럼 연산 가능, 리스트 연산과 동일
    • ex. 문자열과 정수형은 더하기 연산 불가.. , 곱하기 연산은 가능
  • 더하기 연산→ 모든 변수가 문자열일 경우 텍스트 붙이기
    • 자주 발생하는 실수
    num1 = 2
    print("결과는" + num1)
    #오류 발생
    
  • #문자열 간덧셈으로 a = "Apple" b = "Pie" print(a + " " +b) #Apple Pie
  • 곱하기 연산
print(a*2 +" " + b*2)
#AppleApple PiePie
  • 특정 문자열 포함 여부 확인
if 'p' in a:
	print(a)
else:
	print(b)

#Apple

문자열 함수


  • 문자열 다룰 때 사용하기 유용

  • 함수 사용방법
    • 문자열변수.함수명
  • 주요 문자열 함수
    • upper() ; 대문자 변환
    • drama = "The Glory" drama.upper() #THE GLORY
    • lower() ; 소문자 변환
    • drama.lower() #the glory
    • title() ; 각 단어 앞글자만 대문자로 변경
    • drama.title() #The Glory
    • capitalize(); 첫 번째 글자만 대문자로 변경
    • drama.capitalize() #The glory
    • count() ; 특정 문자 포함된 개수
    • drama = 'The Glory' drama.count('l') #1 drama.upper().count('l') #0
    • isdigit() ; 문자열이 숫자인지 확인
    • drama.isdigit() #False
    • startswith() ; 해당 문자열로 시작하는지 확인
      • True or False 값으로 반환
      drama.startswith('e')
      #False
      

문자열의 분리: split() 함수


  • 특정 값 기준으로 문자열 분리 → 리스트로 변환
  • 공백 기준으로 분리
    • 매개변수 지정 X
      • 공백을 기준으로 문자열 분리
  • items = 'zero one two'.split() print(items) #['zero','one','two']
  • 매개변수 지정 O
  • test1 = 'window,mac,linux' test1.split(',') #['window','mac','linux'] #각 값을 a,b,c 변수로 언패킹 a,b,c = test1.split(',') print(a,b,c) #window mac linux #'.'을 기준으로 나누고 언패킹 test2 = 'red.blue.green' d,e,f = test2.split('.') print(d,e,f) #red blue green

문자열의 결합: join() 함수


  • 문자열로 구성된 리스트 합쳐 → 하나의 문자열로 만들 때
  • 사용 형태
    • 구분자.join(리스트명)
  • 사용 예시(1) - 구분자 사용 X
  • color = ['red','blue','green'] result = ''.join(color) result #'redbluegreen'
  • 리스트의 각 값이 하나의 문자열 값으로 반환됨
  • 사용 예시(2) - 구분자 사용 O
  • result = ' '.join(color) result #'red blue green' result = ','.join(color) result #'red,blue,green' result = '-'.join(color) result #'red-blue-green'

#2. 문자열 서식 지정

  • 문자열 형식 지정 → 출력
  • print() 사용하여 형식 통일 → 문자열 출력 시 유용

서식 지정의 개념


  • print() 함수
    • 변수 혹은 값 구분
      • 콤마(,) 띄어쓰기 사용
  • 하지만 특정 형식에 맞춰 결과 출력해야 할 경우
    • ex. 세 자리 숫자 단위로 띄어쓰기, %출력…

% 서식과 format()함수


  • 기본 출력 형식 외에 %서식 & format()함수 구문 사용하여 형식 지정
print(1,2,3)
#1 2 3

print('a'+''+'b'+''+'c')
#a b c 

print('%d %d %d' % (1,2,3))
#1 2 3
 
print('{} {} {}'.format('a','b','c'))
#a b c 
  • '%d %d %d' % (1,2,3)
    • 숫자 1,2,3이 각각 첫 %d부터 차례대로 대응되어 할당됨
  • '{} {} {}'.format('a','b','c')
    • 아무것도 없는 {} 공간에 ‘a’, ‘b’, ‘c’가 각각 대응되어 출력됨
  • 서식 지정 출력하기의 장점
    • 데이터와 출력 형식 분류 가능
      • 스페이스 및 ‘+’기호 활용하는 것보다 시각적 이해 쉬움
    • 데이터를 형식에 따라 다르게 표현 가능
      • 문자열 → %s
        • print(’%s %s’ % (’one’, ‘two’))
      • 정수형 → %d
  • % 서식
    • 출력 양식
      • ‘%자료형 % (값)’
    print('I eat %d apples.' % 3)
    #I eat 3 apples.
    
    print('I eat %s apples.' %'five')
    #I eat five apples.
    

변수 자료형에 따른 서식

  • 자료형 마다 서식문자가 다름

  • 1 개 이상의 값 할당 가능, 소괄호 사용
  • 사용 예시 - 값 직접 넣을 때
print('Fruit : %s, Weight(g) : %f' % ('Apple', 0.53))
#Fruit : Apple, Weight(g) : 0.53
  • 사용 예시 - 변수로 값 넣을 때
number = 3
day = 'three'
print('I ate %d apples. I was sick for %s days." %(number, day))
#I ate 3 apples. I was sick for three days.
  • format() 함수
    • %서식과 활용법 거의 동일
    • 차이점
      • 문자열 형태의 인수 사용
    • 사용 방법
      • ‘{자료형}’.format(인수)
    • 기본 표현 형태
    • print("I'm {0} years old.".format(20)) #I'm 20 years old.
    • 변수 이름 활용 및 변수 자료형 지정
    • age = 22; name = 'kyuree' print("I'm {0} years old.".format(age)) #I'm 22 years old. print("My name is {0} and {1} years old.".format(name, age)) #My name is kyuree and 22 years old. print('Fruit : {0}, Weight(g) : {1:.2f}'.format('Apple', 0.53))

패딩


  • 여유 공간 지정 → 글자 배열 맞춤 or 소수점 자릿수 맞춤
  • % 서식 & format함수 모두 패딩 기능 제공
  • % 서식 패딩
    • 사용 방법(1) - 글자 배열
    #우측 정렬
    print("%10d" % 12)
    #         12
    
    #좌측 정렬
    print("%-10d" % 12)
    #12
    
    • "%10d" % 12
      • 10자리 공간 확보
      • 우측 정렬로 12 출력
      • 9번째 칸부터 출력시작
    • "%-10d" % 12
      • 좌측 정렬로 12출력
      • ‘-’ 부호 붙여줌
    • 사용 방법(2) - 소수점 자릿수
    #우측 정렬
    print("%10.3f" % 5.9234)
    #     5.923
    
    print("%10.2f" % 5.9234)
    #      5.92
    
    #좌측 정렬
    print("-10.2f" % 5.9234)
    #5.92
    
    • "%10.3f" % 5.9234
      • 10자리 공간 확보
      • 소수점 셋째 자리까지 출력
      • 10자리 안에 소수점도 포함됨
  • format() 함수 패딩
    • % 서식과 비슷
    • 사용 방법(1) - 글자 배열
    #우측 정렬
    print("{0:>10s}".format("apple"))
    #     apple
    
    #좌측 정렬
    print("{0:<10s}".format("apple"))
    #apple
    
    • "{0:>10s}".format("apple")
      • 10자리 공간 확보
      • 우측 정렬 출력
      • 좌측 정렬?
        • ‘<’ 부호 사용
    • 사용 방법(2) - 소수점 자릿수
    #우측 정렬
    "{1:>10.5f}".format("apple" , 5.743)
    #'   5.74300'
    
    #좌측 정렬
    "{1:<10.5f}".format("apple" , 5.743)
    #'5.74300   '
    
    • "{1:>10.5f}".format("apple" , 5.743)
      • 10자리 공간 확보
      • 소수점 다섯 번째 자리까지 실수 출력
      • 소수점도 포함
      • 우측 정렬

#3. 문자열 사용 예제

1. 문자열 개수 세기 ; len()함수

3. 학번, 소속학과, 이름(성 제외) 입력받아 고유 아이디 만들기

  • 문제
  • 디솝 학회원들의 이이디 리스트 만들기 위해 학번, 소속학과, 이름을 하나의 문자열로 입력받고 합친다. 그다음에 각 정보가 ‘-’로 연결된 고유 아이디를 출력한다.
  • 입력
  • 첫째 줄에 이름, 소속학과, 학번이 담긴 문자열을 입력받는다.(*각 정보는 공백으로 나눠져있다)
  • 예제 입력
  • kyuree datascience 21
  • 예제 출력
  • kyuree-datascience-21

→ split, join 함수 활용

  • 예시 코드 
word = input()
print(len(word))
  • word=input()
    num = int(input())
    print(word[num-1])
    
    informations = input()
    information = informations.split()
    dsob_id ='-'.join(information)
    print(dsob_id)