1.
user = input("이름을 입력하시오 : ")
lst = user.split(" ")
print("중간 이름은 :",lst[1])
2.
user = input("문자열을 입력하시오 : ")
newUser = ""
for x in user:
if x.islower():
newUser += x
for x in user:
if x.isupper():
newUser += x
print("수정된 문자열 :", newUser)
3.
import re
user = input("문자열을 입력하시오 : ")
print("대문자, 소문자, 숫자, 특수문자의 개수")
print("대문자 =", len(re.findall('[A-Z]', user)))
print("소문자 =", len(re.findall('[a-z]', user)))
print("숫자 =", len(re.findall('[0-9]', user)))
print("특수문자 =", len(re.findall('[&*^()%#@!+={}\[\]]', user)))
4.
a = "ABCD"
b = "1234"
new_str1 = ""
new_str2 = ""
def new_str_maker(a, b):
c = ""
for i in range(len(a)):
c += a[i]
c += b[i]
return c
new_str1 = new_str_maker(a, b)
new_str2 = new_str_maker(a, b[::-1])
print(new_str1)
print(new_str2)
5.
import re
s = "Korea is awesome! I REALLY LOVE KOREA."
print("Korea의 출현 힛수 :",len(re.findall("[Kk]orea|KOREA", s))
6.
import re
s = "English = 89, Science = 90, Math = 92, History = 80."
lst = re.findall("\d+", s)
for i in range(len(lst)):
lst[i] = int(lst[i])
print("총점 :",sum(lst))
print(f"평균점수: {sum(lst)/len(lst):.2f}")
7.
import re
import string
user = input("문장을 입력하시오 : ")
num = int(input("이동시킬 칸 수를 입력하시오 : "))
def uppermover(a):
a = a.group()
index = string.ascii_uppercase.index(a)
crypto = string.ascii_uppercase[num:] + string.ascii_uppercase[:num]
return crypto[index]
def lowermover(a):
a = a.group()
index = string.ascii_lowercase.index(a)
crypto = string.ascii_lowercase[num:] + string.ascii_lowercase[:num]
return crypto[index]
result = re.sub('[A-Z]', uppermover, user)
result = re.sub('[a-z]', lowermover, result)
print(result)
uppercase, lowercase는 전부 str형이라서 슬라이싱이 가능함 그리고 그냥 가장 위에 변수를 선언하는 것만으로 전역변수가 가능 근데 뭐 이건 생각해보면 당연한거긴 하다 그리고 보니까 sub()함수도 새로운 배열을 만들어서 반환하는듯
8.
import re
user = input("문장을 입력하시오 : ")
lst = user.split(" ")
eng, num, eng_num = [], [], []
for x in lst:
x = x.strip(",").strip(".").strip("?").strip("!").strip(".")
if x.isalpha() or x.isdigit():
if x.isalpha():
eng.append(x)
else:
num.append(x)
else:
eng_num.append(x)
print("영문 단어 :", " ".join(eng))
print("숫자 : ", " ".join(num))
print("영문자 + 숫자 :", " ".join(eng_num))
나는 지식이 딸려서 그냥 strip()를 지저분하게 쓰고 is..어쩌고로 검사했는데 그냥 정규식으로 x = re.sub(r"[^A-Za-z0-9]", "", x) 이렇게 해서 특수문자 다 지우고 re.fullmatch()로 문자열과 정규식이 완전히 일치하는지 검사로 숫자랑 영어가 섞여있는지 검사가능 진짜 정규식이 줫사기이긴 하다
9.
import wikipedia
import matplotlib.pyplot as plt
import wordcloud
wiki = wikipedia.page("South Korea") # 컨텐츠 제목을 명시
text = wiki.content # 명시된 제목에서 내용을 추출
stopwords = wordcloud.STOPWORDS.union(["south", "north", "korean", "word", "country"]) #wordcloud의 STOPWORDS는 타입이 set임 그러므로 union을 해줘야 함
wordc = wordcloud.WordCloud(width = 1500, height = 1500, stopwords=stopwords).generate(text) # WordCloud 객체를 만들어 준 다음 generate()로 만들 재료를 인자로 넘겨줌
plt.figure(figsize=(40, 30)) # 캔버스를 그리는 함수 그림 객체 생성
plt.imshow(wordc) # 2d 배열을 화면에 그리는 함수 픽셀 단위로 색상을 표현
plt.show() # 모든 figure 출력
10.
import matplotlib.pyplot as plt
import wordcloud
import wikipedia
wiki1 = wikipedia.page("South Korea")
wiki2 = wikipedia.page("Japan")
text = wiki1.content + wiki2.content
stwords = wordcloud.STOPWORDS.union({"North Korea", "United States", "Sea", "country", "world", "million", "South Korean", "Japanese", "China", "countries", "Korean", "national", "known", "time", "Chinese", "time", "two", "Korea", "international", "early", "relation", "well", "people", "period", "political", "largest", "many", "Day"})
wordcloud = wordcloud.WordCloud(width = 1500, height = 1500, stopwords=stwords).generate(text)
plt.figure(figsize=(30, 30))
plt.imshow(wordcloud)
plt.show()
요약
1. string 모듈의 ascii_uppercase 이런 애들은 str형이다 사실 그냥 type으로 무슨 타입인지 보면 됨
2. 당연하지만 맨 위에 써서 전역변수로 만들면 함수 안에서도 쓸 수 있음
3. 왠만한 애들은 다 새로운 리스트를 반환하는 듯하다 sort()는 그냥 진짜 원소를 바꿔버리는데
4. re.sub(r"^[0-9a-zA-Z] ...)를 사용하면 특수문자를 다 지울 수 있음 re.fullmatch로 문자열 전체랑 정규식이랑 맞는지도 검사가능 r은 원시문자를 나타내는 것으로 \ 이 놈이 그냥 문자로 취급받게 해줌
5. 일단 위키에서 받을 페이지(제목) 객체를 만들어주고 이걸 content에 있는 본문을 복사한 뒤 WordCloud 객체를 만든 다음 가로세로길이를 정한다음 generaate()의 인자로 텍스트를 보내주고 맷플롯립의 pyplot을 통해 figure()로 캔버스를 만들어줌 이때 figsize 로 50픽셀 기준이 1인듯하게 크기를 정해주고 이걸 imshow()에 워드클라우드 객체를 전달해줘서 색상을 그린다음 show()로 figure를 출력하자
6. STOPWORDS는 참고로 wordcloud 모듈의 집합이며 집합은 union으로 집합끼리 합집합연산 가능
'코딩의 기록' 카테고리의 다른 글
따라하며 배우는 파이썬과 데이터과학 10장 심화문제 (0) | 2025.02.18 |
---|---|
따라하며 배우는 파이썬과 데이터과학 -10.넘파이로 수치 데이터를 처리해보자 (0) | 2025.02.17 |
따라하며 배우는 파이썬과 데이터과학 -9. 텍스트를 처리해보자- (0) | 2025.02.13 |
따라하며 배우는 파이썬과 데이터과학 8장 심화문제 (1) | 2025.02.02 |
따라하며 배우는 파이썬과 데이터과학 -8. 연관된 데이터를 딕셔너리로 짝을 짓자 (1) | 2025.01.31 |