[Python] 파이썬 초보 탈출하자 #2 문자열 자료형

bokyungkim·2021년 11월 12일
1
post-custom-banner

큰 따옴표까지 출력하기

  1. 작은따옴표로 감싸기
  2. 큰 따옴표로 감싸기
  3. 작은따옴표 세개로 감싸기
  4. 큰따옴표 세 개로 감싸기
str1 = 'He said "I love you"'
str2 = "It's so beautiful"
str3 = """My name is "goorm" """
str4 = '''It's an apple'''

print(str1) # He said "I love you"
print(str2) # It's so beautiful
print(str3) # My name is "goorm"
print(str4) # It's an apple

문자열의 곱셈

str = "Hello "
num = 5
result = str * num
print(result)
# Hello Hello Hello Hello Hello

문자열 인덱스를 뒤에서부터 접근

a = "Hello goorm!"
b = a[-1] + a[-2] + a[-3]
c = a[-0]
print(b) # !mr
print(c) # H

문자열 접근 주의

문자열의 각 문자를 인덱스 접근으로 바꿀 수는 없다. 문자열 자료형은 Immutable 타입으로 한 번 초기화하면 사용자 임의로 값을 바꿀 수 없다. 예를 들어, str = "Hello"일 때 str[2] = "u"라는 코드를 통해 str을 Heulo로 바꿀 수 없다.

슬라이싱

단어 그대로 지정 범위만큼 데이터 요소를 잘라내는 기능. var[0:5]라고 작성하면 인덱스값 0부터 4까지 잘라낸다.

a = "Hello goorm!"
b = a[0:5]
print(b) # Hello

b = a[:5]
c = a[5:]
print(b) # Hello
print(c) #  goorm!

b = a[0:-5]
c = a[6:-11]
print(b) # Hello g
print(c) # 빈칸 반환

문자열 포매팅

city = "seoul"
today = 12
day = "화요일"
temperature = 26
announcement = "%s의 %d일 %s 기온은 %d도 입니다." %(city, today, day, temperature)
	
print("%s의 %d일 %s 기온은 %d도 입니다." %(city, today, day, temperature)) #1번 방법
print(announcement) #2번 방법
name = "goorm"
age = 25
height = 181.523456

print("저의 이름은 %s입니다." %name)

print("저는 %d살입니다." %25)
print("제 나이는 %d살입니다." %age)
print("제 나이는 %s살입니다." %age)
print("제 나이는 %.2f살입니다." %age)

print("저의 키는 %fcm입니다." %height)
print("저의 키는 %.2fcm입니다." %height)
print("저의 키는 %dcm입니다." %height)

print("저의 성은 '%c'입니다." %"남")

print("저의 나이는 16진수로 표현하면 %x, 8진수로 표현하면 %o입니다." %(age, age))

print("%10d %010d" %(10, 10))
	
#'김구름'을 포함하여 8칸의 공간 발생 -> 공백 5칸 + 김구름 3칸
print("%8s %8d %8s" %("김구름", 6, "컴퓨터공학"))
print("%-8s %-8d %-8s" %("김구름", 6, "컴퓨터공학"))
  1. 숫자형은 문자열 포맷 코드를 사용하여 표현할 수 있지만, 문자열은 숫자형 포맷 코드를 사용하여 표현할 수 없다.
  2. 정수형은 실수형으로, 실수형을 정수형으로 포매팅 가능하다. 단, 정수형을 실수형으로 표현하면 소수점 첫째 자리 0이 붙고, 실수형을 정수형으로 표현하면 소수점 첫째 자리에서 내림 처리한다.
  3. 출력할 때 출력 폭을 지정할 수 있다. "%(폭)d" 형식으로 입력하면 자동으로 오른쪽 정렬되고 왼쪽에는 공백으로 채워진다. 이때 만약 포매팅 하고 싶은 요소가 숫자라면 (폭) 앞에 0을 입력하여 빈 곳을 0으로 채울 수 있다.
  4. 왼쪽으로 정렬하고 싶다면 "%-(폭)d" 형식으로 입력

% 키워드 포매팅의 단점: 포맷코드 뒤에 입력한 변수가 꼭 1대1 대응을 해야한다. 이 단점을 보완할 수 있는 포매팅법은 format() 함수를 사용해 인덱스값, 혹은 변수명으로 바로 대입하는 것

format 함수 사용 형식

"문자열.format(요소1, 요소2...)"

#인덱스로 받아오기
name1 = "김구름"
name2 = "박에듀"
age = 25
height = 181.123
print("저의 이름은 {2}입니다. 그리고 나이는 {1}살이고 키는 {0}cm입니다.".format(height, age, name1))
print("{1}의 나이:{0}, {2}의 나이: {0}".format(age, name1, name2))

#변수명과 혼용해 받아오기
print("저의 이름은 {1}입니다. 그리고 나이는 {age}살이고 키는 {0}cm입니다. 제 가장 친한 친구는 {name}입니다.".format(181.12, "김구름",height = 181.123, age = 25, name = "박에듀"))

format() 함수를 사용해 출력 형식을 지정할 수도 있다.

print("{length: >10d}".format(length = 30))
# 공백문자: (공백) ,정렬: 오른쪽 정렬, 폭: 10
# 순서대로 입력해야하고 생략 가능
# |        30|

print("{0:0^10}".format("goorm"))
# 공백문자: 0 ,정렬: 가운데 정렬, 폭: 10
# 순서대로 입력해야하고 생략 가능
# |00goorm000|

print("{height:!>13.2f}".format(height = 181.24363))
# 공백문자: ! ,정렬: 오른쪽 정렬, 폭: 13, 소수점 2자리 표시
# 순서대로 입력해야하고 생략 가능
# |!!!!!!!181.24|

f 문자열 포매팅 (f-string)

f 문자열 포매팅은 3.6버전에서 새로 사용할 수 있게 된 포매팅 방식이다. format과 사용 방법이 크게 다르지 않다. 문자열 앞에 f만 붙여주면 된다.

name = "김구름"
age = 25
height = 181.123
print(f"저의 이름은 {name}입니다. 그리고 나이는 {age+10}살이고 키는 {height:!^10.2f}cm입니다.")

# 저의 이름은 김구름입니다. 그리고 나이는 35살이고 키는 !!181.12!!cm입니다.

문자열 함수

  • count()
    전달 인자의 문자 개수를 반환

  • find()
    함수의 대상이 되는 문자열에 전달 인자와 같은 문자가 있는지 찾고, 그 문자가 처음 발견된 인덱스 값을 반환. 만약 전달 인자가 문자열 내에 없다면 -1 반환.

  • index()
    find()와 같은 역할을 수행하나, 전달 인자가 문자열 내에 없으면 오류 발생

  • join()
    전달 인자 사이에 함수의 대상이 되는 문자열을 삽입
    (ex. ",".join("goorm") -> "g, o, o, r, m")

  • upper() / lower()
    함수의 대상이 되는 문자열을 대문자로 / 소문자로 변환

  • lstrip() / rstrip()
    함수의 대상이 되는 문자열의 가장 왼쪽 / 오른쪽 공백을 모두 삭제

  • strip()
    함수의 대상이 되는 문자열의 양쪽에 있는 한 칸 이상의 공백 모두 삭제

  • replace()
    replace(전달 인자1, 전달 인자2) 형식으로 사용하며, 함수의 대상이 되는 문자열에서 전달 인자1과 동일한 부분을 찾아 전달 인자2로 교체

  • split()
    함수의 대상이 되는 문자열을 전달 인자 기준으로 쪼개 리스트로 반환
    (ex. "g!oo!rm".split("!") -> ['g', 'oo', 'rm'])

  • len()
    문자열뿐만 아니라 여러 값이 모여있는 자료형의 길이를 반환하는 함수


이 글은 goorm edu의 한 눈에 끝내는 파이썬3 기초 강좌를 참고하여 작성되었습니다.

post-custom-banner

0개의 댓글