-
[부스트코스] 모두를 위한 파이썬(PY4E) 5주차 리스트PYTHON/부스트코스 PY4E 2022. 9. 28. 16:05728x90
5주차는 08. 리스트에 대해 학습했다
08. <리스트>
핵심 키워드 미리보기
컬렉션
리스트
내장함수
리스트 병합
리스트 슬라이싱
컬렉션이란?
하나의 변수에는 하나의 값만 할당해야 한다 하지만 하나의 변수에 여러 값을 할당 할 수 있는 것이 있다 이처럼 하나의 변수에 여러 값을 할당 할 수 있는 것을 컬렉션이라고 한다
리스트
리스트는 컬렉션의 한 종류이다 즉, 하나의 변수에 여러값을 할당할 수 있다
- 리스트의 각 항목들은 '[]'로 둘러싸게 된다
- 리스트 내의 항목들에 대한 구분은 ,(콤마)로 구분한다
- 리스트 내에 또 다른 리스트를 내포할 수 있다
- 비어 있는 리스트를 만들 수 있다
- 리스트의 항목들에 인덱스 값으로 접근할 수 있다
- 리스트의 항목들은 바뀔 수 있다
friends변수에 Joseph, Glenn, Sally 리스트에 넣어서 저장
carryon 변수에 socks, shirt, perfume 리스트에 넣어서 저장
colors 변수에 red, [yellow,blue], black 리스트에 넣어서 저장 (리스트 안에는 또다른 리스트를 넣을 수 있음)
리스트는 0부터 숫자를 세니까 colors[0]은 첫번째인 red가 나온다
그리고 lotto[2] = 28로 바꾸면 lotto안에 숫자가 바뀐다
len()
리스트에서도 해당 리스트가 몇개의 항목을 가지고 있는지를 len()함수를 통해서 확인할 수 있다
len은 길이를 나타내니까 len(friends)하면 friends 원소개수인 3이 나온다
range()
range() 함수는 인자로 전달되는 값에 따라서 숫자로 이루어진 리스트를 반환하게 된다
range 함수와 for문을 함께 사용하면 범위를 사용해서 반복 할 수 있다
리스트 병합
리스트 타입 역시 문자열과 마찬가지로 '+'기호를 사용해서 다른 리스트와 합칠 수 있다
문자열의 덧셈처럼 숫자끼리 합이 아닌 숫자들의 모임이다
리스트 슬라이싱
리스트도 콜론(:)을 이용해서 자를 수 있다
주의 할 점은 콜론(:) 뒤에 오는 값은 포함하지 않는다
즉, [1:3]의 경우는 3은 포함하지 않고 1,2값만 나온다
있는지 없는지 확인 후 있으면 True 없으면 False
첫번째 예시의 경우, [1:3]이니까 1,2만 출력해서 [41,12]가 나온다
두번째 예시의 경우, [:4]이니까 처음부터 3까지니까 0,1,2가 출력되어서 [9,41,12,3]이 나온다
세번째 예시의 경우, [3:]이니까 3부터 끝까지 나와서 3,4,5가 출력되어서 [3,74,15] 가 나온다
마지막 예시의 경우, [:]이니까 전체 다 출력하니까 리스트 t 전체가 출력되어서 [9,41,12,3,74,15]가 나온다
dir() 메소드
특정타입에서 사용할 수 있는 메소드의 목록들을 볼 수 있는 함수도 있다
x = list() print(dir(x))
['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']
리스트 만들기
빈 리스트 만들기 ->항목 추가하기 -> 항목 정렬하기-> in을 활용해 'pring'이 친구 목록에 있는지 확인하기
friends에 리스트 함수 넣는 법은 list()를 사용해도 되고 []만 넣어도 리스트로 인식한다
그래서 위에 코드와 아래코드는 출력값이 동일하다
append('넣을 값') 함수를 사용해서 값들을 리스트에 넣어준다
그리고 값들이 잘 넣어졌는지 확인해준다
잘 넣어진 경우, print해보면 다음과 같이 리스트가 나온다
그리고 오름차순으로 정렬하고 싶으면 sort()함수를 사용해서 값을 정렬해준다
오름차순이니까 알파벳은 abc순서 숫자는 123순서로 정렬된다
pring은 친구 목록에 없으니까 False가 나온다
문자열과 리스트
문자열은 리스트와 함께 자주 사용된다
split()함수를 사용해서 리스트 안에 원소를 하나씩 쪼갤 수 있다
그러면 위에처럼 출력된다
구분자
명시적으로 구분자를 넣어주지 않으면, 빈칸을 구분자를 인지하고 나누게 된다
split 함수의 default 값이 공백이기 때문에 split해도 예시처럼 공백없이 ; 가 포함되어 한묶음으로 나온다
아래는 ;를 split기준으로 넣어주었다 이 경우 ;를 구분자로 인식해서 나누게된다
5주차 미션
📌Q1. 여러분 혹시 베스킨라빈스31 게임을 아시나요? 1부터 31까지 숫자를 플레이어들끼리 번갈아 외치다가 31을 외치는 사람이 패배하는 게임인데요.
이번엔 이 게임을 파이썬 함수로 만들어 봅시다. 지성이 없이 숫자를 랜덤하게 외치는 컴퓨터와 대결을 해보겠습니다.
- 😲조건1 - 나의 턴에서는 숫자를 직접 입력하며 한 번 입력 후에 space 한 번으로 구분
my = input("My turn - 숫자를 입력하세요: ") 1 2 3
- 😲조건2 - 나와 컴퓨터 모두 한 턴에 1회 ~ 3회까지만 숫자를 외칠 수 있음
- 😲조건3 - 외쳐진 숫자보다 1큰 수만 (ex: 5 다음엔 무조건 6)
- 위 조건이 안맞을 경우 다시 입력
더보기#Q1. 당시 다른 사람들 코드를 참고해서 작성했던것 같은데 정확한 링크는 생각나지 않습니다
print("베스킨라빈스 써리원 게임")
print("------------------------")
import random #랜덤 불러오기
number = 0 #숫자 초기화
your_number = []
computer_number =[]
turn = 0 #차례 초기화
while True:
if turn == 0: #사용자부터 시작
you = int(input("당신이 부를 숫자의 개수를 입력하세요 (1 ~ 3): ")) #1~3 중 입력
if you >= 4 or you == 0: #4이상인 경우나 0을 입력한 경우 다시 입력하세요
print("1~3까지만 출력가능 합니다. 다시 입력하세요.") #입력가능 값 다시 알려줌
you = int(input("당신이 부를 숫자의 개수를 입력하세요 (1 ~ 3): ")) #다시 값 입력
for i in range(you): #입력한 횟수만큼 숫자 출력하기
number += 1
print("나:", number)
your_number.append(number) #나의 리스트에 입력값 넣기
turn += 1
turn %= 2
elif turn == 1: #컴퓨터 차례
com = random.randint(1, 3) #1~3 중 랜덤으로 값 추출하기
for i in range(com): #랜덤 횟수만큼 반복하여 숫자 출력
number += 1
print("컴퓨터:", number)
computer_number.append(number) #컴퓨터 리스트에 입력값 넣기
turn += 1
turn %= 2
if number >= 31: #31이상이면 게임 종료
break
if 31 not in your_number: #나의 리스트에 31이 없으면 나의 승리
print("나의 승리")
else: #나의 리스트에 31이 있으면 컴퓨터의 승리
print("컴퓨터 승리")📌Q2. 다음과 같이 학생들의 시험 답지가 있습니다. 그리고 답안지도 있습니다.
함수를 하나 만들어 채점을 하고 학생들의 점수를 출력하고 등수도 함께 출력해주세요.
# 학생 답 s = ["김갑,3242524215", "이을,3242524223", "박병,2242554131", "최정,4245242315", "정무,3242524315"] # 정답지 a = [3,2,4,2,5,2,4,3,1,2]
- 🧐hint
# 문자열도 숫자 정렬 가능 a = ["5","2","3"] a.sort() ["2", "3", "5"] # 내림차순 정렬 가능 a.sort(reverse=True) ["5", "3", "2"]
- ✅출력 예시
grader(s, a) 학생: 정무 점수: 90점 1등 학생: 김갑 점수: 80점 2등 학생: 이을 점수: 70점 3등 학생: 박병 점수: 50점 4등 학생: 최정 점수: 40점 5등
당시2번 문제는 잘 모르겠어서 비워놓고 제출했습니다
📌Q3. 숫자 맞추기 게임을 만들어 볼게요. 컴퓨터가 임의의 숫자를 3개 만들고 우리가 그것을 맞춰보겠습니다.
- 😲조건1 - 숫자는 0 ~ 100까지 숫자를 3개 만듭니다(중복 불가).
- 😲조건2 - 5회, 10회까지 정답을 못맞추면 최솟값, 최대값에 대한 힌트를 줍니다.
- 😲조건3 - 정답을 맞추면, 맞춘 정답이 최솟값인지, 중간값인지, 최댓값인지 알려줍니다.
import random number = random.randint(0, 100)
- ✅출력 예시
guess_numbers() 1차 시도 숫자를 예측해보세요 : 39 숫자를 맞추셨습니다! 39는 최솟값입니다. 2차 시도 숫자를 예측해보세요 : 48 숫자를 맞추셨습니다! 48은 중간값입니다. 3차 시도 숫자를 예측해보세요 : 100 숫자를 맞추셨습니다! 100는 최댓값입니다. 게임종료 3번 시도만에 예측 성공 ... 5차 시도 숫자를 예측해보세요 : 9 9는 없습니다 최솟값은 9보다 작습니다 6차 시도 숫자를 예측해보세요 : 9 이미 예측에 사용한 숫자입니다 6차 시도
더보기#Q3.
count = 1 #처음부터 1차시도이므로 count는 1부터 시작
your_list =[] #맞추면 넣어줄 값 리스트
num_list =[] #임의의 값 리스트
def small(): #최솟값 함수 정의
if num_list[0] > you:
print(you,"은 최솟값보다 작습니다")
else:
print(you,"은 최솟값보다 큽니다")
def middle(): #중간값 함수 정의
if num_list[1] > you:
print(you,"은 중간값보다 작습니다")
else:
print(you,"은 중간값보다 큽니다")
def big(): #최댓값 함수 정의
if num_list[2] > you:
print(you,"은 최댓값보다 작습니다")
else:
print(you,"은 최댓값보다 큽니다")
import random #랜덤 함수 불러옴
for i in range(3): #3개의 값을 랜덤으로 불러옴
num = random.randint(1,100) #1~100까지 중에 불러옴
while num in num_list : # num이 이미 뽑은 리스트에 있을 때까지 다시 뽑자
num = random.randint(1,100)
num_list.append(num) # 새로운 num 값을 리스트에 추가
num_list.sort() #num 값을 순서대로 정리함
while True: #정답이 나올때까지 반복
you = int(input("숫자를 입력하세요:"))
if you == num: #나와 랜덤 값이 같은 경우
print(count,"차 시도")
print("숫자를 맞추셨습니다!")
count += 1 #n회차 종료 => n+1회차로 넘어감
your_list.append(num) #값을 맞추었으니 your_list에 추가해줌
if your_list == num_list: #두개의 리스트가 일치 할때 숫자 반복은 멈춘다
break
print(count,"번 시도만에 예측성공")
elif you != num: #만약에 입력값과 랜덤값이 다른경우
print(count,"차 시도")
print("틀렸습니다!")
count += 1 #n회차 종료 => n+1회차로 넘어감
if count-1 == 5: #5차시도 전에 5차로 countting 되기때문에 -1 해준다
small()
if count-1 == 10:#10차시도 전에 10차로 countting 되기때문에 -1 해준다
middle()
if count-1 == 15:#15차시도 전에 15차로 countting 되기때문에 -1 해준다
big()📌Q4. 오늘 애인이 생겼다고 해봅시다. 100일을 기념하고 싶은데요.
날짜를 넣으면 100일 뒤가 몇월 며칠인지 계산해주는 함수를 만들어 보겠습니다.
- 😲조건1 - "오늘부터 1일"이기 때문에 날짜를 계산할 때 오늘을 포함합니다
- 😲조건2 - 몇년도인지 구분하지 않고 윤년도 고려하지 않고 2월은 무조건 28일로 합니다.
- 🧐hint
# 특정 원소의 위치를 찾는 방법 a = [1,2,3,4] a.index(1) 0
- ✅출력 예시
after_100(6,21,"월") 6월 21일 월요일부터 100일 뒤는 9월 28일 화요일
코딩도장 참고
더보기#Q4.
#timedelta, datetime 불러오기
from datetime import datetime, timedelta
#datatime클래스는 Python에서 날짜와 시간을 처리 할 수있는 여러 함수를 사용자에게 제공
#timedelta()클래스는datetime모듈의 기능 중 하나
#특정 기간 또는 두 날짜와 시간의 차이를 나타내는 데 사용
#일, 밀리 초, 마이크로 초, 초, 분, 시간 및 주와 같은 많은 인수를 보유
#입력값 받기
year, mon, day = input("년,월,일을 공백 문자로 구분하여 입력하세요 : ").split()
year = int(year)
mon = int(mon)
day = int(day)
no_days = 0
while no_days < 1:
print("%s년 %s월 %s일로부터 경과되는 일수를 입력하세요 : " %(year,mon,day),end='')
no_days = int(input())
time = datetime(year,mon,day)
print (time + timedelta(days = no_days))<08. 리스트 강의 들으러 가기>
https://www.boostcourse.org/cs122/joinLectures/76169?isDesc=false
모두를 위한 파이썬 (PY4E)
부스트코스 무료 강의
www.boostcourse.org
<오늘 올린 코드 자료>
https://colab.research.google.com/drive/14hV4u_bYI79lkx80nkl_uw3MQu2dGc1g?usp=sharing
부스트코스 py4e 5주차
Colaboratory notebook
colab.research.google.com
<미션문제 코드만 모아보기>
https://colab.research.google.com/drive/1kJZTHgrCgEcXWJFVwfF2qh_6qT1i_dVs?usp=sharing
미션5
Colaboratory notebook
colab.research.google.com
'PYTHON > 부스트코스 PY4E' 카테고리의 다른 글
[부스트코스] 모두를 위한 파이썬(PY4E) 6주차 딕셔너리, 튜플 (0) 2022.09.28 [부스트코스] 모두를 위한 파이썬(PY4E) 4주차 문자열,파일 (0) 2022.09.22 [부스트코스] 모두를 위한 파이썬(PY4E) 3주차 루프와 반복문 (0) 2022.09.14 [부스트코스] 모두를 위한 파이썬(PY4E) 2주차 조건부 실행, 함수 (0) 2022.09.13 [부스트코스]PY4E 수료증 인증 (0) 2022.08.30