[패스트캠퍼스python] 데이터 타입 관련 퀴즈 풀기

파이썬 인강 : 데이터 타입 관련 퀴즈 풀기

내 돈 내고 듣고 있는 패스트캠퍼스의 파이썬 인강!

이때까지 배운 데이터 타입과 관련하여 16문제정도를 풀어보았다.
다양한 방법으로 풀어보고 출력값이 일치하는 거 보니 참 뿌듯했다.
이런 간단한 사항들을 자유자재로 다룰 수 있어야 나중에 프로젝트를 호율적으로 진행할 수 있을 것임에 틀림없다.
간단하다고 약보지말자.
16가지 문제 중 기억해야할 것들을 위주로 블로깅을 해보려고 한다

1. 문자열 “30” 을 각각 정수형, 실수형, 복소수형, 문자형으로 변환해보세요.

이건 형변환문제이고 아주 쉽지만 중요하다
참고로 문자형은 이미 “30” 문자이기때문에 그대로 적어도 되고
str()을 사용해서 만들어도 된다.

1
2
3
4
5
6
7
8
9
10
print(type(int("30")), int("30"))
print(type(float("30")), float("30"))
print(type(complex("30")), complex("30"))
print(type("30"), "30", type(str(30)), str(30))

# 출력값은 아래와 같다
<class 'int'> 30
<class 'float'> 30.0
<class 'complex'> (30+0j)
<class 'str'> 30 <class 'str'> 30

2. 다음 문자열 “Niceman” 에서 “man” 문자열만 추출해보세요.

다양한 방법으로 풀 수 있고 강의에서는 슬라이싱방식과 인덱싱을 이용한 방법으로 풀이해주었다

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 첫번째 방법: 슬라이스 활용
q5 = "Niceman"
print(q5[4:]) # 슬라이싱으로 간단하게 처리
print(q5[4:7]) # 슬라이싱으로 간단하게 처리

# 두번째 방법: index활용
q5Idx = q5.index("m")
print(q5Idx)
print(q5[q5Idx:])

# 출력값은 순서대로
man
man
4
man

만약 Nice를 빼고 문자열을 추출해보세요라고 한다면 어떻게 하면 될까?
나는 len()를 이용해서 풀어보았다.
위와 동일한 값이 출력되는 것을 볼 수 있다.
간단하게 응용도 해보니 파이썬을 향한 재미가 쑥쑥 올라간다.

1
2
3
4
5
q5len = len("Nice")
print(q5[q5len:])

# 출력값은
man

3. 다음 문자열을 거꾸로 출력해보세요. : “Strawberry”

간단한 문제라서 reverse()로 접근했다.

1
2
3
4
5
6
q6 = "Strawberry"
q6.reverse()
print(q6)

# 출력값은
에러

에러가 발생해서 깜짝 놀랬는데 알고보니 reverse()는 리스트일때 사용하는거였다.
이제 절대 안 잊어버릴것같다 ㅋㅋㅋㅋ
문자형은 reversed()를 사용하면 된다
심지어 내 에디터가 알려줬는데도 무시해버렸다ㅋㅋㅋㅋ
에디터말 잘 들어야지!

1
2
3
4
print(reversed(q6))

# 출력값은
<reversed object at 0x0000017E087888E0>

이건 우리가 원하는 데이터가 아니므로 list로 형변환시키면된다

1
2
3
4
print(list(reversed(q6))) 

# 출력값은
['y', 'r', 'r', 'e', 'b', 'w', 'a', 'r', 't', 'S']

자 이제 원하는 값이 리스트형태로 나왔으니 슬라이싱 이용하면 된다

1
2
3
4
print(q6[::-1])

# 출력값은
yrrebwartS

손 쉽게 해결!

4. 다음 문자열에서 ‘-‘를 제거 후 출력하세요. : “010-7777-9999”

이번 문제는 실무에서 활용도가 높은 문제였다.
물론 해결방법은 여러가지가 있지만 제일 쉽게 접근 할 수 있는 방법은 역시 슬라이싱이다.
강의에서 슬라이싱뿐만 아니라 아래 이미지처럼 정규표현식을 사용하여 풀이해주었는데 굉장히 재미있었다

4-1 첫번째 방법: 슬라이싱 이용.

1
2
3
4
5
q7 = "010-7777-9999"
print(q7[0:3]+q7[4:8]+q7[9:])

# 출력값은
01077779999

4-2 두번째 방법: 정규표현식 이용.

이번 문제를 통해 정규표현식을 처음 접했는데 굉장히 재미있었다
정규표현식은 언어와 상관없이 표준화가 거의 되어있다.
따라서 정규표현식을 공부하면 언어를 초월해서 해당 언어(java,c,c++,js,python등)에 금방 적응할수있다

  • ^ 의미는 ‘아니다’ 이다.
  • 0-9 는 0부터 9까지라는 의미이다.
  • 즉 [^0-9] 뜻은 숫자제외이다.
  • replace기능 가능 : 예를 들어 010또는 011이면 070으로 바꾸고싶을때 사용가능하다
1
2
3
4
5
6
7
import re
print(re.sub('[^0-9]','', q7))
print(re.sub('010|011','070', q7)) #010또는 011이면 070으로 바꾸고싶다면

# 출력값은
01077779999
070-7777-9999

5. 다음 문자열(URL)에서 “http://“ 부분을 제거 후 출력하세요. : "http://daum.net"

이 문제는 위에서 배운 내용들을 토대로 혼자서 네가지 방식으로 풀어보았다
다 제대로 값이 출력되니 여간 뿌듯한 게 아니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 첫번째 방식: 슬라이싱
q8 = "http://daum.net"
print(q8[7:])

# 두번째 방식: 인덱싱
q8index = q8.index("/")
print(q8index)
print(q8[q8index+2:])

# 세번째 방식: len()길이
q8len = len("http://")
print(q8[q8len:])

# 네번째 방식: 정규표현식
print(re.sub('http://','', q8))

# 출력값은
daum.net
5
daum.net
daum.net
daum.net

6. 다음 문자열을 슬라이싱을 이용해서 “cde”만 출력하세요. : “abcdefghijklmn”

해당 문제는 슬라이싱을 이용해서 풀어라고 했기때문에 아래 이미지처럼 풀면 된다

하지만 이렇게 문자열 길이가 긴 문제의 경우 슬라이싱으로 몇 번째 인덱스인지 직접 세는 것보다 인덱싱을 활용하는 게 더 편하다고 생각해서 인덱싱으로 풀어보았다

1
2
3
4
5
6
q10 = "abcdefghijklmn"
q10Index = q10.index("cde")
print(q10[q10Index:q10Index+3])

# 출력값은
cde

7. 다음 리스트에서 “Apple” 항목만 삭제하세요. : [“Banana”, “Apple”, “Orange”]

리스트의 remove()를 이용해서 간단하게 풀었다

1
2
3
4
5
q11 = ["Banana", "Apple", "Orange"]
print(q11.remove("Apple"))

# 출력값은
None

그런데 출력값이 None이 떠서 당황했다.
remove()한 내용은 출력할 필요가 없고 삭제완료한 리스트를 print하면 되었던 문제였다

1
2
3
4
5
6
q11 = ["Banana", "Apple", "Orange"]
q11.remove("Apple")
print(q11)

# 출력값은
['Banana', 'Orange']