위키독스
온라인 책을 제작 공유하는 플랫폼 서비스
wikidocs.net
021 문자열 인덱싱
letters가 바인딩하는 문자열에서 첫번째와 세번째 문자를 출력하세요.
>> letters = 'python'
실행 예 p t
print(letters[0],letters[2],end=' ')
022 문자열 슬라이싱
자동차 번호가 다음과 같을 때 뒤에 4자리만 출력하세요.
>> license_plate = "24가 2210"
실행 예: 2210
>>> print(license_plate[range(:4:-1)])
SyntaxError: invalid syntax
>>> print(license_plate[range(0:3:-1)])
SyntaxError: invalid syntax
정답확인
문자열에서 여러 글자를 가져오는 것을 슬라이싱이라고 부릅니다.
음수 값은 문자열의 뒤에서부터 인덱싱 또는 슬라이싱함을 의미합니다.
슬라이싱은 range 함수로 하는게 아니라 인덱싱을 활용해서 하는 것!
슬라이싱에서 시작 인덱스를 생락혀면 0으로 간주하고 끝 인덱스를 생략하면 문자열의 끝을 의미합니다.
license_plate = "24가 2210"
print(license_plate[-4:])
023 문자열 인덱싱
아래의 문자열에서 '홀' 만 출력하세요.
>> string = "홀짝홀짝홀짝"
실행 예: 홀홀홀
print(string[0::2]) : 제일 뒤에 오는 것이 step!
024 문자열 슬라이싱
문자열을 거꾸로 뒤집어 출력하세요.
>> string = "PYTHON"
실행 예: NOHTYP
print(string[::-1])
025 문자열 치환
아래의 전화번호에서 하이푼 ('-')을 제거하고 출력하세요.
>> phone_number = "010-1111-2222"
실행 예 010 1111 2222
파이썬 문자열에서 replace 메서드를 사용하면 문자열을 일부를 치환할 수 있습니다.
문자열은 수정할 수 없는 자료형이므로 기존 문자열은 그대로 두고 치환된 새로운 문자열이 리턴됩니다.
phone_number = "010-1111-2222"
phone_number1 = phone_number.replace("-", " ")
print(phone_number1)
026 문자열 다루기
25번 문제의 전화번호를 아래와 같이 모두 붙여 출력하세요.
실행 예 01011112222
>>>phone_number = "010-1111-2222"
>>>phone_number=phone_number.replace('-','')
>>> print(phone_number)
027 문자열 다루기
url 에 저장된 웹 페이지 주소에서 도메인을 출력하세요.
>> url = "http://sharebook.kr" 실행 예: kr
print(url[:-1:])
결과 : http://sharebook.k
print(url[:1:-1])
결과 : rk.kooberahs//:pt
print(url[len(url)-2::])
결과 : kr
세번째 시도만에 성공~~!1 하지만 이렇게 하면 다른 .com 과 같은 도메인을 출력할 수 없음.
이 문제에서 바라는 거는 .을 기준으로 문자열을 자르는 것.
028 문자열은 immutable
아래 코드의 실행 결과를 예상해보세요.
>> lang = 'python'
>> lang[0] = 'P'
>> print(lang)
예상결과 : python
정답 : 문자열은 수정 불가능이라는 것은 알았는데, lang[0] = 'P' 가 수정을 하는 시도였음을 알아차리지 못함. (Assignment = 수정문장)
문자열은 수정할 수 없습니다. 실행 결과를 확인해보면 문자열이 할당(assignment) 메서드를 지원하지 않음을 알 수 있습니다.
TypeError Traceback (most recent call last)
<ipython-input-22-a0f3d05b669c> in <module>
1 lang = "python"
----> 2 lang[0]= "P"
3 print(lang)
TypeError: 'str' object does not support item assignment
lang의 0번이 원래는 소문자 p를 가리켰었는데,
새로 생긴 대문자 P를 가리키도록 바인딩을 해준 문장 : lang[0]='P'
이런 표현자체가 파이썬에서는 불가능. 인덱스 값이 각각의 문자열의 글자를 바인딩하는 것. 다른 값이 바인딩되도록 변경될 수 없다. 그래서 오류가 난다.
그런데 replace method를 쓰면 가능하다..?
029 replace 메서드
아래 문자열에서 소문자 'a'를 대문자 'A'로 변경하세요.
>> string = 'abcdfe2a354a32a'
실행 예: Abcdfe2A354A32A
>>>string = 'abcdfe2a354a32a'
>>> string=string.replace('a','A')
>>> print(string)
Abcdfe2A354A32A
문자열은 immutable 하지만 replace method를 통해서는 가능하다?
030 replace 메서드
아래 코드의 실행 결과를 예상해보세요.
>> string = 'abcd'
>> string.replace('b', 'B')
>> print(string)
aBcd
땡!!!
abcd가 그대로 출력됩니다. 왜냐하면 문자열은 변경할 수 없는 자료형이기 때문입니다.
replace 메서드를 사용하면 원본은 그대로 둔채로 변경된 새로운 문자열 객체를 리턴해줍니다.
그니까 메서드를 사용해서 새로운 문자열 객체를 만든 다음에 그거를 assign 해주는 건데
그게 가능한건가?
강의에서 말씀하신 것
phone_number='010-1111-1111'
=이 있으면 오른쪽에 먼저 메모리에 할당이 되겠죠?
문자열 타입의 값이 메모리에 할당이 되있고,
그걸 가리키는(바인딩) 것이 phone_number
문자열은 한번 메모리에 생성이 되면 변경이 불가능
변경할 순 없는데, .replace라는 메소드를 쓰면,
변경하고 싶은 .replace('-','') 하시면
메소드의 리턴값이 생김. 그래서 이 값을 다른 변수에 바인딩할 수 있음.
a=phone_number.replact('-','')
원본 문자열은 가만히 있고, = 기준으로 오른쪽에 보면 변경된 새로운 문자열의 값이 메모리에 생성됨.
왼쪽의 a라는 변수는 새로 생성된 문자의 값을 바인딩하는 것.