Python

Python(3) 문자열 , 자료구조

사회적가치누리 2024. 11. 1. 17:05
목차
4-1. 문자열
4-2. 슬라이싱
4-3. 문자열 처리 함수
4-4. 문자열 포맷
4-5. 탈출문자
4-6. 퀴즈#3
5-1. 리스트
5-2. 사전
5-3. 튜플
5-4. 세트
5-5. 자료구조의 변경
5-6. 퀴즈#4

 

 

4-1. 문자열

 

문자열을 사용하는 방법은 작은따옴표 나 큰따옴표로 묶어서 사용합니다.

그리고 큰따음표를 3개를 앞 뒤로 사용하면 그 내용을 모두 포함한다는 뜻입니다. 

예) """

안녕하세요

안녕히가세요

"""

출력하면 

 

안녕하세요

안녕히가세요

 

줄바꿈 까지 포함해서 출력합니다.

sentence = '나는 소년입니다.'
print(sentence)
sentence2 = "파이썬은 쉬워요"
print(sentence2)
sentence3 = """
나는 소년이고,
파이썬은 쉬워요
"""
print(sentence3)

 

 

4-2. 슬라이싱

 

슬라이싱은 문자열에서 원하는 곳에 문자열을 출력할때 쓰는 것 입니다.

주민등록번호에서 문자열을 가져와서 성별을 확인할 수 있죠

컴퓨터에서는 자료를 0부터 셉니다.

띄어쓰기나 기호 모두 포함해서 셉니다.

슬라이싱을 사용할때는 이렇게 사용합니다.

리스트명[ 시작인덱스(숫자) : 끝인덱스(숫자) : 오프셋(숫자) ]

오프셋은 생략 가능합니다.

 

jumin = "100101-1234567"

print("성별 : "+jumin[7])
print("연 : "+jumin[0:2]) # 0부터 2직전까지 출력
print("월 : "+jumin[2:4])
print("일 : "+jumin[4:6])

print("생년월일 : "+jumin[:6]) # 처음부터 6직전까지 출력
print("뒤 7자리 : "+jumin[7:]) # 7부터 끝까지 출력
print("뒤 7자리 (뒤에서부터) : "+jumin[-7:]) # 맨 뒤에서 7번째부터 끝까지

even_number = "홀짝홀짝홀짝"
print(even_number[::2]) # 홀홀홀
print(even_number[::-2]) # 짝짝짝
print(even_number[::-1]) # 문자열 뒤집기

 

 

4-3. 문자열 처리 함수

 

lower() > 소문자로 바꿔준다. 예) print(python.lower())
upeer() > 대문자로 바꿔준다. 예) print(python.upeer())
isupper() > 대문자인지 확인한다 예) print(python.isupeer())
len() > 문자열의 길이를 반환해준다.예) print(len(python))
replace() > 문자열의 특정 부분을 바꿔준다.

예) print(python.replace("Python","Java")) / print(python.replace(python[0:6],"Java"))

replace()로 특정 문자열을 삭제하는 것도 가능합니다.

index() > 특정 문자열의 위치가 몇번째인지 알려준다 예) python.index("n") -> n이 몇번째에 있어?

find() > index와 마찬가지로 특정 문자열의 위치가 몇번째인지 알려준다

 

find 와 index의 차이점은
만약 찾고자 하는 문자열이 없을 경우
find는 -1을 반환하고
index는 에러를 내보냅니다.

 

count() -> 해당하는 문자열이 몇번 출력됐는지 알려준다. 예) python.count("n") -> n이 해당 문자열에서 몇번 나왔어?

 

python = "Python is Amazing"
print(python.lower())
print(python.upper())
print(python[0].isupper()) # 문자열 첫번째 문자가 대문자인지 확인
print(len(python))
print(python.replace("Python", "Java"))

index = python.index("n")
print(index)
index = python.index("n", index + 1)
print(index)

print(python.find("Java")) # 찾고자 하는 문자열이 없어서 -1

print(python.count("n"))

 

4-4.문자열 포맷

 

문자열 포맷을 지정하는 방법은 여러가지가 있습니다

 

방법 1

 

print("나는 %d살입니다" % 20)  -> %d는 정수값만 넣을 수 있다.
print("나는 %s을 좋아해요." %"python") -> %s는 str 문자열을 스트링값을 넣겠다는 뜻.
print("Apple 은 %c로 시작해요." % "A") -> %c는 문자

print("나는 %s살입니다" % 20) 
print("나는 %s색과 %s색을 좋아해요." % ("파란", "빨간")) -> 이것도 가능


방법 2

fomat을 사용하는 방법도 있습니다.

print("나는 {}살입니다.".format(20))
print("나는 {}색과 {}색을 좋아해요.".format("파란", "빨간"))
print("나는 {0}색과 {1}색을 좋아해요.".format("파란", "빨간"))


방법 3

fomat 응용

print("나는 {age}살이며, {color}색을 좋아해요.".format(age = 20, color ="빨간"))
print("나는 {age}살이며, {color}색을 좋아해요.".format(color ="빨간", age = 20))

방법 4

파이썬 버전 3.6이상에서만 가능합니다.

age = 20
color = "빨간"
print(f"나는 {age}살이며, {color}색을 좋아해요.")

print("나는 %d살입니다" % 20)  
print("나는 %s을 좋아해요." %"python") 
print("Apple 은 %c로 시작해요." % "A") 


print("나는 %s살입니다" % 20) 
print("나는 %s색과 %s색을 좋아해요." % ("파란", "빨간")) 

print("나는 {}살입니다.".format(20))
print("나는 {}색과 {}색을 좋아해요.".format("파란", "빨간"))
print("나는 {0}색과 {1}색을 좋아해요.".format("파란", "빨간"))

print("나는 {age}살이며, {color}색을 좋아해요.".format(age = 20, color ="빨간"))
print("나는 {age}살이며, {color}색을 좋아해요.".format(color ="빨간", age = 20))


age = 20
color = "빨간"
print(f"나는 {age}살이며, {color}색을 좋아해요.")

 

 

4-5. 탈출문자

\n : 줄바꿈

 

말 그대로 줄바꿈입니다.  print("나는 사람입니다.\n그래서 저는")을 출력하면

 

나는 사람입니다.
그래서 저는

 

이렇게 출력됩니다.

 

\" \' : 문장 내에서 따옴표

 

문장을 출력하다 보면 따옴표를 붙혀서 출력해야 할때가 있습니다.

그럴때 이렇게 사용할 수 있습니다.

 

print('저는 "나도코딩"입니다.')  > 작은따옴표로 감싸고 큰따옴표를 사용함

print("저는 '나도코딩'입니다.")  > 큰따옴표로 감싸고 작은따옴표를 사용함
print("저는 \"나도코딩\"입니다.") > \(역슬러시)를 하게되면 그대로 출력해주라는 뜻

\\ : 문장 내에서 \를 나타낸다

경로를 출력할때 그냥 출력하게되면 오류가 발생해서

print("C:\config") -> print("C:\\config") 이런식으로 바꿔줘야합니다.

\r : 커서를 맨 앞으로 이동

print("Red Apple\rPine") -> Red Apple 이 아닌 Pine Apple이 나옵니다.

\b : 백스페이스 (한 글자 삭제)

print("Redd\bApple") -> ReddApple 이 아닌 RedApple가 출력

\t : 탭

 

키보드에서 탭을 치는것과 똑같습니다.

print("나는 사람입니다.\n그래서 저는")

print('저는 "나도코딩"입니다.')  
print("저는 '나도코딩'입니다.")  
print("저는 \"나도코딩\"입니다.") 

print("C:\\config")

print("Red Apple\rPine")

print("Redd\bApple") 

print("Good\tJob")

 

4-6. 퀴즈#3

 

Quiz) 사이트별로 비밀번호를 만들어 주는 프로그램을 작성하시오

예) http://naver.com
규칙1 : http:// 부분은 제외 => naver.com
규칙2 : 처음 만나는 점(.) 이후 부분은 제외 => naver
규칙3 : 남은 글자 중 처음 세자리 + 글자 갯수 + 글자 내 'e' 갯수 + "!"로 구성

예) 생성된 비밀번호 : nav51!

 

우선 http:// 부분을 제외하라고 했으니까

슬라이싱을 사용해야겠군요.

site = "http://naver.com"
site = site[7:]

 

그리고 처음 만나는 점(.) 이후 부분은 제외하라고 했는데,

저는 replace() 함수를 사용했습니다.

site = site.replace(".com","")
index = len(site)

 

그리고 마지막으로 규칙3에 나와있던 대로 만들어줍시다.

indexe = site.count("e")
site = site[:3]
password = site+str(index)+str(indexe)+"!"

print("생성된 비밀번호 : "+password)

 

http://google.com으로 실행했을때 결과

 

5-1. 리스트

 

리스트는 여러 값들을 다룰때 편하게 사용할 수 있는 자료형입니다.

그외 자료형은 사전,튜플,세트 정도가 있겠군요.

 

리스트를 만드는 방법은 [ ] 로 감싸주면 됩니다.

리스트 안에는 mix_list = ["나는", 2, True] 이렇게 (문자열,정수,볼값)을 다 넣는게 가능합니다.

 

예) subway = [10, 20, 30] / subway = ["조충범", "백진상", "이미나"]

 

만약 print(subway.index("백진상") 을 사용하면 1번째에 있다고 알려줍니다. (조충범 => 0 , 백진상 => 1)

 

리스트에 값을 추가 할 수도 있습니다

 

subway.append("정필돈") > "정필돈"이라는 사람을 뒤에 추가합니다.

 

subway.insert(1,"이예영") > 1번째 자리에 "이예영"을 추가합니다. 

 

이예영을 추가하게 되면 백진상부터 뒤로 밀립니다.

 

subway.pop() > 맨뒤에서부터 하나씩 삭제합니다.

 

del subway[0] > 0번째(맨 첫번째)값을 삭제합니다. (조충범)

 

그리고 삭제할때 중요한 것이 있습니다.
만약에

subway = ["1","2","3","4"]  에서 "3"과 "4"를 삭제할려고 할때

del subway[2]
del subway[3]
이렇게 차례대로 삭제 할려고 할때


del subway[2] 를 하게되면

subway = ["1","2","삭제","4"] > subway = ["1","2","4"]


그래서 del subway[3]는 에러가 발생하기 때문에

del subway[2]
del subway[3] 가 아니라

del subway[2]
del subway[2] 

이렇게 삭제해줘야 "3"과 "4"가 지워집니다.

 

subway.append("조충범") > 조충범 1명 더 추가

print(subway.count("조충범")) > "조충범"이라는 동명이인이 몇명 있나 확인

 

이제 숫자 리스트가 있다고 가정해봅시다.

num_list = [2,3,6,1]

 

num_list.sort() > 숫자를 정리해준다. 1,2,3,6으로


num_list.reverse() > 숫자를 뒤집는다 6,3,2,1으로


num_list.clear() > 싹다 지웁니다.

 

num_list.extend(합칠리스트)  > 하나의 리스트로 합치기도 가능합니다. 

 

subway = ["조충범","백진상","이미나"]
print(subway)
subway.append("정필돈") 
print(subway)
subway.insert(1,"이예영")
print(subway)
subway.pop() 
print(subway)
del subway[0]
print(subway)

num_list = [2,3,6,1]
num_list.sort()
print(num_list)
num_list.reverse()
print(num_list)
num_list.clear()
print(num_list)

list = [5,3,2]
list.extend(subway) # 리스트 확장 subway 리스트가 뒤로옴.
print(list)


5-2. 사전

 

사전은 선언시 { } 로 감싸주면 됩니다.

key :  value 형식으로 되어있습니다.

 

cabinet = {3:"고길동", 100:"둘리"}

3번이라는 키를 "고길동"이 가지고 있다.

100번이라는 키를 "둘리"가 가지고 있다.

 

print(cabinet[3]) > 고길동 출력

print(cabinet[100]) > 둘리 출력

만약 [ ]에 사전에는 없는 번호를 쓰면 오류를 발생시키고 프로그램 즉시 종료합니다.

 

print(cabinet.get(3)) > 고길동 출력

print(cabinet.get(100)) > 둘리 출력

get()로 없는 번호를 쓰면 None출력 후 계속 프로그램 실행합니다.

 

3 in cabinet > 3이 사전 안에 있어? = true

5 in cabinet > 5가 사전 안에 있어? = false

 

사전 key값을 정수형 말고 문자열로 설정도 가능합니다.

cabinet = {"A-3":"고길동", "B-100":"둘리"}

 

print(cabinet["A-3"]) > 고길동 출력

 

cabinet["A-3"] = "마이클" > "고길동"에서 "마이클"로 바꿀 수 있습니다.

cabinet["C-20"] = "도우너" > "C-20"이라는 새로운 key에 "도우너"를 추가합니다.

 

del cabinet["A-3"] -> A-3을 삭제

cabinet.keys() -> key 값만 출력 

cabinet.values() -> value 값만 출력

cabinet.items() -> key,value 값 둘다 출력

cabinet.clear() -> 사전에 있던 값을 다 삭제합니다.

cabinet = {3:"고길동", 100:"둘리"} 

print(cabinet[3])
print(cabinet[100])

print(cabinet.get(3))
print(cabinet.get(100))

print(3 in cabinet)
print(5 in cabinet)

cabinet = {"A-3":"고길동", "B-100":"둘리"}

print(cabinet["A-3"])
print(cabinet["B-100"])

cabinet["A-3"] = "마이클"
print(cabinet)
cabinet["C-20"] = "도우너"
print(cabinet)

del cabinet["A-3"]
print(cabinet)
print(cabinet.keys())
print(cabinet.values())
print(cabinet.items())
cabinet.clear()
print(cabinet)

 

5-3. 튜플

 

튜플은 리스트와 다르게 변경이 변경할 수 없는 대신에 속도가 빠릅니다.
보통 고정되어 있는 목록을 쓸 때 사용합니다.

 

튜플은 선언시 ( ) 로 감싸주면 됩니다.

menu = ("돈까스", "치즈까스") 이렇게 사용 가능하고

(name, age, hobby) = ("가브리엘",25,"게임") 이렇게도 사용 가능합니다.

menu = ("돈까스", "치즈까스")
print(menu[0])
print(menu[1])

(name, age, hobby) = ("가브리엘",25,"게임")
print(name,age,hobby)

 

 

 

5-4. 세트

 

세트는 중복을 허용하지 않고 순서가 없습니다.

선언할때 { } 로 감싸줍니다.

 

my_set = {1,2,3,3,3}
print(my_set) > 1,2,3 만 출력

 

그리고 교집합,합집합,차집합으로 세트에서 값을 찾을 수 있습니다.

 

예를 들어 java 와 python 을 할 수 있는 개발자를 찾거나

둘중에 한개만 할 수 있는 개발자나,java만 할 수 있는 개발자를 찾을때 사용 할 수 있겠군요,

 

교집합 

java & python
java.intersection(python)

합집합 
java | python
java.union(python)
차집합
java - python
java.difference(python)

my_set = {1,2,3,3,3}
print(my_set) 

java = {"유재석","김태호","양세형"} # java 개발자
python = set(["유재석","박명수"]) # python 개발자

# 교집합 (java 와 python을 모두 할 수 있는 개발자)
print(java & python)
print(java.intersection(python))
# 합집합 (java를 할 수 있거나 python을 할 수 있는 개발자)
print(java | python)
print(java.union(python))
# 차집합 (java는 할 수 있지만 python은 모르는 개발자)
print(java - python)
print(java.difference(python))

 

5-5. 자료구조의 변경

 

앞에서 배운 자료구조를 서로 바꿔볼 수도 있습니다.

뭐 세트를 리스트로 혹은 세트를 튜플로 등등...

 

menu = {"아메리카노", "카페라떼", "카푸치노"}
print(menu, type(menu)) -> set형 { }로 감싸져있음

menu = list(menu)
print(menu, type(menu)) -> list형 [ ]로 감싸져있음

menu = tuple(menu)
print(menu, type(menu)) -> tuple형 ( )로 감싸져있음

다시 자료구조를 set형으로 되돌리기는


menu = set(menu)
print(menu, type(menu)) -> 이러면 처음 set형으로 돌아갑니다.

 

menu = {"커피","우유","주스"}
print(menu, type(menu))

menu = list(menu)
print(menu, type(menu))

menu = tuple(menu)
print(menu, type(menu))

menu = set(menu)
print(menu, type(menu))

 

5-6. 퀴즈#4

 

Quiz) 당신의 학교에서는 파이썬 코딩 대회를 주최합니다.
참석률을 높이기 위해 댓글 이벤트를 진행하기로 하였습니다.
댓글 작성자들 중에 추첨을 통해 1명은 치킨, 3명은 커피 쿠폰을 받게 됩니다.
추첨 프로그램을 작성하시오.

조건 1 : 편의상 댓글은 20명이 작성하였고 아이디는 1~20 이라고 가정
조건 2 : 댓글 내용과 상관 없이 무작위로 추첨하되 중복 불가
조건 3 : random 모듈의 shuffle과 sample을 활용

출력 예재

 -- 당첨자 발표 --
치킨 당첨자 : 1
커피 당첨자 : [2, 3, 4]
 -- 축하합니다 --

 

우선,  random 모듈을 사용해야 하니까 random 모듈을 호출합시다.

from random import *

 

그리고 1 ~ 20 의 랜덤한 값을 넣어줘야합니다.

또, 추첨된 아이디는 중복불가와 shuffle과 sample 을 무조건 사용해야합니다.

저는 이렇게 코드를 작성했습니다.

list = list(range(1,21))
shuffle(list)
list = sample(list, 4)

chicken_coupon = list[0]
coffee_coupon = list[1:]

 

마지막으로 출력 문 작성

저는 줄바꿈을 사용했습니다. 덕분에 좀 길어졌네요.

print(" -- 당첨자 발표 --\n치킨 당첨자 : {0}\n커피 당첨자 : {1}\n -- 축하합니다 --".format(chicken_coupon,coffee_coupon))

 

 

'Python' 카테고리의 다른 글

Python(6) 활용1  (0) 2024.11.04
Python(5) 기초 마무리  (0) 2024.11.03
Python(4) 반복문과 함수  (0) 2024.11.02
Python(2) 파이썬 숫자  (0) 2024.10.31
Python(1) 첫 시작.  (0) 2024.10.30