whatisthis?
Phython. 파이썬 코딩 기초편-04 본문
리스트 / 사전 / 튜플 / 세트 / 자료구조 변경
<Day 3 Quiz>
사이트별로 비밀번호를 만들어주는 프로그램.
<규칙>
1. http:// 부분은 제외 -> naver.com
2. 처음만나는 점(.) 이후 부분은 제외 -> naver
3. 남은 글자중 처음 세자리 + 글자갯수 + 글자 내 'e'갯수 + "!"로 구성
(nav) (5) (1) (!)
예 > nav51!
(1:17:13)
site = "http://naver.com"
index = site.index("/")
index = site.index("/", index + 1)
print(index)
print(site[index + 1:])
index2 = site.index(".")
print(index2)
length = site[index + 1:index2]
print(length[:3] + str(len(length)) + str(length.count("e")) + "!")
문제가 뭔가 이상한듯.
굳이 앞 세글자만 할거면 http://제거만 하지 왜 .com 제거를 하라 했을까?
암튼 나는 site 변수가 달라졌을 경우를 생각하여 좀 복잡하게 (깔끔하지 않게) 작성했다.
_
1. http://가 아니고 https://인 경우도 있으므로
index = site.index("/")
index = site.index("/", index + 1) 를 하여 두번째 '/'를 찾고나서
print(site[index + 1:] 로 그 이후부터를 출력하였다.
2. daum.com인 경우에는 .의 위치가 다섯번째이고
naver.com인 경우는 여섯번째이다. 즉, 점의 위치를 찾기 위해서
index2를 설정 하고 print(site[index+1:index2]로 작성했다.
-> index2직전까지 이므로, '.'위치의 직전까지가 범위가 된다.
3. 위 과정을 중간의 확인차 적은 print를 제외하고 깔끔하게 적으면
index = site.index("/")
index = site.index("/", index + 1)
index2 = site.index(".")
length = site[index + 1:index2]
과 같다.
4. 여기까지 한 후에 비밀번호 조합을 하면 다음과 같다.
print(length[:3] + str(len(length)) + str(length.count("e")) + "!")
url = "http://naver.com"
my_str = url.replace("http://", "")
my_str = my_str[:my_str.index(".")]
password = my_str[:3] + str(len(my_str)) + str(my_str.count("e")) + "!"
print("{0}의 비밀번호는 {1}입니다.".format(url, password))
언급된 정답.
이는 url이 만약에 https://일때를 고려하지 않은 코드인 것 같다.
그러나 나같은 경우엔 index1과 index2 두개의 변수를 사용했는데,
굳이 그럴 필요 없고 my_str = my_str[:my_str.index(".")]와 같이 작성해도 좋을 것 같다.
site = "http://naver.com"
index = site.index("/")
index = site.index("/", index + 1)
length = site[index + 1:site.index(".")]
passwd = length[:3] + str(len(length)) + str(length.count("e")) + "!"
print("{0}의 비밀번호는 {1} 입니다.".format(site, passwd))
위에서 내가 작성한 코드를 수정해보았다.
변수의 개수도 줄어들었고, 훨씬 간편한 코드가 완성된 것 같다.
1. 리스트
# 리스트 []
# 지하철 칸별로 10명, 20명, 30명
# 원래대로라면 subway1 = 10
# subway2 = 20
# subway3 = 30
subway = [10, 20, 30]
print(subway)
subway = ["김씨", "이씨", "박씨"]
# 이씨가 몇번째 칸에 타고 있는지
print(subway.index("이씨"))
# 최씨가 다음 정류장에서 다음 칸에 탔을때
subway.append("최씨")
print(subway)
** 리스트의 맨 뒤에 요소 추가할때 = uppend() 함수
** 만약 김씨와 이씨 사이에 정씨를 추가하고 싶다면? = insert(인덱스,추가할것)
subway.insert(1, "정씨")
print(subway)
subway.insert(1, "정씨")
= 1번지(즉, 두번째)에 정씨를 추가한다.
** 한명씩 뒤에서부터 하나씩 꺼내기 = pop() 함수
print(subway.pop())
print(subway)
연속 세번 실행해본 결과는 다음과 같다.
뒤에서부터 하나씩 꺼내므로 총 3개가 꺼내진 것과 같다.
** 같은 이름의 사람이 몇 명이 있는지 = count() 함수
#같은 이름의 사람이 몇 명 있는지 확인
subway.append("김씨")
print(subway)
print(subway.count("김씨"))
** 리스트 정렬도 가능. = sort() 함수
# 정렬도 가능 = sort() 함수
num_list = [5,2,4,3,1]
num_list.sort()
print(num_list)
** 순서 뒤집기도 가능 = reverse() 함수
# 정렬도 가능 = sort() 함수
num_list = [5,2,4,3,1]
num_list.sort()
print(num_list)
#뒤집기 = reverse()함수
num_list.reverse()
print(num_list)
** 리스트 속의 값 모두 지우기 = clear() 함수
num_list.clear()
print(num_list)
결과 : [ ] (안에 있던 요소들이 다 삭제됨.)
** 여러가지 자료형을 함께 리스트에 사용시
# 다양한 자료형 함께 사용시
mix_list = ["thisisyjin", 22, True]
print(mix_list)
** 리스트의 확장 = extend(합칠리스트)
num_list.extend(mix_list)
하나의 리스트로 합쳐진 것을 알 수 있다.
2. 사전
** 키는 중복이 안되고, 한개의 값만 열 수 있다.
cabinet = {3 : "김씨", 100 : "최씨"}
3이라는 키는 김씨가 / 100이라는 키는 최씨가.
print(cabinet[3]) # 김씨
print(cabinet[100]) # 최씨
print(cabinet.get(3)) # get()을 이용하여 불러올 수도 있음
print(cabinet.get(100))
< 출력 방법 >
1. 변수명 [키값] = 대괄호 이용
2. 변수명.get (키값) = get() 함수 이용
변수명 [키값] | 변수명.get (키값) |
존재하지 않는 키값을 적으면 오류가 발생한다. |
존재하지 않는 키값을 적으면 None이라는 값을 반환한다. |
+) 마치 지난번에 비교했던 index()와 find()의 차이와도 같다. = index는 오류 / find는 -1을 반환했었다.
print(cabinet.get(5, "사용가능")) #값이 없다면 '시용가능'이라는 메시지 반환
존재하지 않는 키값을 입력했을때 값이 없으면 None을 반환한다. (기본값)
만약, None 대신 다른 문구를 띄우고싶다면 get(키값, " 문구 ") 로 작성하면 된다.
= 문구 대신 숫자나 논리식 작성해도 좋음.
** 해당 키값이 변수 안에 존재하는지 여부를 print를 통해 알 수 있음. = print(키값 in 변수명)
print(3 in cabinet) # 3이라는 키가 cabinet변수에 있는지 = True
print(5 in cabinet) # false
** 키값은 숫자 뿐만 아니라 String도 가능함 (대신 "" 로 감싸줘야함)
예> A-3
cabinet = {"A-3": "김씨", "B-100": "최씨"}
** 새로운 키와 value를 추가할 때는 변수명[키값] = value
cabinet["C-20"] = "이씨"
cabinet["C-20"] = "이씨"
C-20이라는 이름의 키값을 가진 / value는 '이씨' 를 추가한다.
+) 원래 있던 키값에 해당하는 value를 바꿀때에도 위와 같이 작성하면 된다.
예 > cabinet["A-3"] = "박씨"
원래 "A-3"값은 "김씨" 였으나 위 식을 통해 "박씨"로 수정할 수 있다.
** 키값과 value 삭제 = del cabinet[키값]
del cabinet["A-3"]
print(cabinet)
A-3키에 해당하는 값과 함께 세트로 사라지게 된다.
** Key값만 출력하려면 (value 말고) = 변수명.keys()
** Value들만 출력하려면 = 변수명.values()
** (key,value) 와 같이 두 값을 쌍으로 묶어서 출력하려면 = 변수명.items()
** clear()함수 = 모든 값 삭제 (빈 중괄호만 남음)
3. 튜플
= 리스트나 사전과 같이 내용 변경할 수 없음. 그러나 속도가 빠름.
주로 변경되지 않는 값을 빠르게 제공하는데에 사용함.
menu = ("돈까스", "치즈까스")
print(menu[0])
print(menu[1])
튜플 변수 선언 : (" ", " ") 출력 : 변수명[인덱스] |
** 튜플은 값을 변경할 수 없다. 그렇다면 언제 사용할지> = 고정된 값. (절대 변하지 않는 값)
name = "yjin"
age = 22
hobby = "코딩"
print(name, age, hobby)
원래대로라면 총 3개의 변수를 각각 선언한 후, print(변수1, 변수2, 변수3)과 같이 출력했었다.
우리는 튜플을 이용해서 한꺼번에 선언하고 튜플채로 출력할 수 있다.
(name, age, hobby) = ("yjin", 22, "코딩")
print(name, age, hobby)
4. 세트 (set, 집합)
-중복 안됨. 순서 없음
세트 변수 선언 방법 |
변수명 = { 요소1, 요소2, 요소3 } | { } 안에 나열. |
변수명 = set( [요소1, 요소2, 요소3] ) | [ ] 안에 적는 것은 리스트 이므로 , 리스트에 set()함수로 감싸준다. |
set은 집합이므로 집합의 성질을 이용한 교집합, 합집합 등의 연산 가능.
1) 교집합
# 교집합 (java, python 모두 할 줄 아는 사람)
print(java & python)
print(java.intersection(python))
두 방법 모두 가능하다.
1. & 연산자 이용
- 단, java and python으로 하면 안된다. ☆ and가 아닌 &로 적어야함.
2. 변수1.intersection(변수2)
intersection() 함수를 이용한다.
2) 합집합
# 합집합 (java 또는 python을 할 줄 아는 사람)
print(java | python)
print(java.union(python))
합집한 또한 두가지 방법이 존재한다.
1. | 연산자 이용
-단, or을 작성하면 안된다. 반드시 |로 작성해야함.
2. 변수1.union(변수2)
union() 함수를 이용한다.
** 집합은 순서가 없어서 순서대로 안나온다.
3) 차집합
# 차집합 (java는 할 줄 아는데 python을 못하는 사람)
print(java - python)
print(java.difference(python))
차집합도 두가지 방법이 존재.
1. - 연산자 이용
2. 변수1.difference(변수2)
difference() 함수를 이용한다.
4) 집합에 원소 추가/삭제 = add() / remove() 함수
# 집합에 원소 추가
python.add("pr2")
print(python)
# 집합에 원소 제거
java.remove("pr3")
print(java)
5. 자료구조의 변형
# 자료구조의 변경
menu = {"커피", "우유", "주스"}
print(menu, type(menu))
menu = list(menu)
print(menu, type(menu))
menu = tuple(menu)
print(menu, type(menu))
type()함수는 해당 변수의 자료구조를 출력해준다.
예 -> 튜플이면 <class 'tuple'>
<선언 방법 총정리>
|
{ } 는 세트(집합) 이고, [ ] 는 리스트이고 , ( ) 는 튜플이다.
<Quiz>
당신의 학교에서는 파이썬 코딩 대회를 주최한다.
댓글 이벤트를 진행하기로 했는데, 댓글 작성자중에서 1명은 치킨, 3명은 커피 쿠폰을 받게 된다.
추첨 프로그램을 작성하시오.
조건1) 편의상 댓글은 20명이 작성했고, 아이디는 1~20 이라 가정
조건2) 댓글 내용과 관련 없이 무작위로 추첨. 중복은 불가
조건3) random 모듈의 shuffle과 sample을 이용
<random 모듈의 함수>
|
(1:51:04)
+)
from random import *
lst = [1,2,3,4,5]
shuffle(lst)
print(lst)
print(sample(lst, 1))
'WEB STUDY > PHYTHON | BACK-END' 카테고리의 다른 글
Phython. 파이썬 코딩 기초편-06 (4) | 2021.09.15 |
---|---|
Phython. 파이썬 코딩 기초편-05 (2) | 2021.09.14 |
Phython. 파이썬 코딩 기초편-03 (1) | 2021.08.28 |
Phython. 파이썬 코딩 기초편-02 (2) | 2021.08.27 |
Phython. 파이썬 코딩 기초편-01 (1) | 2021.08.24 |