목차
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)
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 |