📖TIL(Today I Learned)

TIL 21일 차)🔥 초보자를 위한 파이썬 51~100문제

highcat 2024. 12. 11. 23:30

 

 

 

 

하루 종일 문제만 푼 것 같다..





파이썬 리스트 51~60


# 051 리스트 생성
# 2016년 11월 영화 예매 순위 기준 top3는 다음과 같습니다.
# 영화 제목을 movie_rank 이름의 리스트에 저장해보세요. (순위 정보는 저장하지 않습니다.)

# 순위    영화
# 1       닥터 스트레인지
# 2       스플릿
# 3       럭키

movie_rank = ['닥터 스트레인지','스플릿','럭키']
print(movie_rank)


# 052 리스트에 원소 추가
# 051의 movie_rank 리스트에 "배트맨"을 추가하라.

movie_rank = ['닥터 스트레인지','스플릿','럭키']
movie_rank.append('배트맨')    # append로 리스트 끝에 값을 추가
print(movie_rank)    # 맨위에 변수로 지정해줘야 리스트가 출력이 된다.


# 053
# movie_rank 리스트에는 아래와 같이 네 개의 영화 제목이 바인딩되어 있다.
# "슈퍼맨"을 "닥터 스트레인지"와 "스플릿" 사이에 추가하라.

movie_rank = ['닥터 스트레인지', '스플릿', '럭키', '배트맨']
movie_rank.insert(1,'슈퍼맨') # insert로 (n번째, 값)을 넣어준다.
print(movie_rank)    # 맨위에 변수로 지정해줘야 리스트가 출력이 된다.


# 054
# movie_rank 리스트에서 '럭키'를 삭제하라.

movie_rank = ['닥터 스트레인지', '슈퍼맨', '스플릿', '럭키', '배트맨']
del movie_rank[3]  # del은 "인덱스 기반 삭제"라 리스트를 사용한다
print(movie_rank)  # remove()가 "값 기반 삭제" 함수이다.
                   # 그럼 movie_rank.remove('럭키')도 가능하다.
 


# 055
# movie_rank 리스트에서 '스플릿' 과 '배트맨'을 삭제하라.

movie_rank = ['닥터 스트레인지', '슈퍼맨', '스플릿', '배트맨']
del movie_rank[-2:]  # [2:]도 가능하다
print(movie_rank)


# 056
# lang1과 lang2 리스트가 있을 때
# lang1과 lang2의 원소를 모두 갖고 있는 langs 리스트를 만들어라.

lang1 = ["C", "C++", "JAVA"]
lang2 = ["Python", "Go", "C#"]

# 실행 예:
# langs
# ['C', 'C++', 'JAVA', 'Python', 'Go', 'C#']

lang1 = ["C", "C++", "JAVA"]
lang2 = ["Python", "Go", "C#"]
langs = lang1 + lang2       #lang에 's'를 넣어 복수라고 변수 지정
print(langs)


# 057
# 다음 리스트에서 최댓값과 최솟값을 출력하라. (힌트: min(), max() 함수 사용)

nums = [1, 2, 3, 4, 5, 6, 7]

# 실행 예:
# max:  7
# min:  1

max_num = (max(nums))       # 굳이 변수로 지정 안 해도 괜찮다.
min_num = (min(nums))       # 구별하기 쉽도록 일단은 변수로 지정

print("MAX: ",max_num)
print("MIN: ",min_num)


# 058
# 다음 리스트의 합을 출력하라.

nums = [1, 2, 3, 4, 5]

# 실행 예:
# 15

print(sum(nums))    # 리스트 안에 요소들을 합하는 sum 함수 사용
 


# 059
# 다음 리스트에 저장된 데이터의 개수를 화면에 구하하라.

cook = ["피자", "김밥", "만두", "양념치킨", "족발", "피자", "김치만두", "쫄면", "소시지", "라면", "팥빙수", "김치전"]

print(len(cook))    #리스트 안에 몇 개의 요소가 있는지 len 함수 사용
 


# 060
# 다음 리스트의 평균을 출력하라.

nums = [1, 2, 3, 4, 5]

# 실행 예:
# 3.0
                               # sum 함수와 len 함수를 써서
print(sum(nums) / len(nums))   # 요소들의 합 ÷ 요소의 갯 수를 출력

 


파이썬 리스트 61~70


 
# 061
# price 변수에는 날짜와 종가 정보가 저장돼 있다.
# 날짜 정보를 제외하고 가격 정보만을 출력하라. (힌트 : 슬라이싱)

price = ['20180728', 100, 130, 140, 150, 160, 170]

# 출력 예시:
# [100, 130, 140, 150, 160, 170]

print(price[1:]) # 0번째 제외, 1번째부터 끝까지

 
# 062
# 슬라이싱을 사용해서 홀수만 출력하라.

nums = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

# 실행 예:
# [1, 3, 5, 7, 9]

print(nums[::2]) # 0번째 (숫자 1)부터 끝까지 +2씩 건너 뜀
 


# 063
# 슬라이싱을 사용해서 짝수만 출력하라.

nums = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

# 실행 예:
# [2, 4, 6, 8, 10]

print(nums[1::2]) #1번째(숫자 2)부터 끝까지 +2씩 건너 뜀
 


# 064
# 슬라이싱을 사용해서 리스트의 숫자를 역 방향으로 출력하라.

nums = [1, 2, 3, 4, 5]

# 실행 예:
# [5, 4, 3, 2, 1]

print(nums[::-1]) # 뒤에서부터 -1씩
 


# 065
# interest 리스트에는 아래의 데이터가 바인딩되어 있다.

interest = ['삼성전자', 'LG전자', 'Naver']

# interest 리스트를 사용하여 아래와 같이 화면에 출력하라.
# 출력 예시:
# 삼성전자 Naver

print(interest[2]) # 리스트에서 2번째 값을 출력했다.
 


# 066 join 메서드
# interest 리스트에는 아래의 데이터가 바인딩되어 있다.

interest = ['삼성전자', 'LG전자', 'Naver', 'SK하이닉스', '미래에셋대우']

# interest 리스트를 사용하여 아래와 같이 화면에 출력하라.
# 출력 예시:
# 삼성전자 LG전자 Naver SK하이닉스 미래에셋대우

result =" ".join(interest) # join으로 문자열 사이에 문자(" ")를 삽입했다.
print(result)              # 변수로 지정한 result로 출력
 


# 067 join 메서드
# interest 리스트에는 아래의 데이터가 바인딩되어 있다.

interest = ['삼성전자', 'LG전자', 'Naver', 'SK하이닉스', '미래에셋대우']

# interest 리스트를 사용하여 아래와 같이 화면에 출력하라.
# 출력 예시:
# 삼성전자/LG전자/Naver/SK하이닉스/미래에셋대우

result = "/".join(interest) # join으로 문자열 사이에 문자("/")를 삽입했다.
print(result)               # 변수로 지정한 result로 출력
 


# 068 join 메서드
# interest 리스트에는 아래의 데이터가 바인딩되어 있다.

interest = ['삼성전자', 'LG전자', 'Naver', 'SK하이닉스', '미래에셋대우']

# join() 메서드를 사용해서 interest 리스트를 아래와 같이 화면에 출력하라.
# 출력 예시:
# 삼성전자
# LG전자
# Naver
# SK하이닉스
# 미래에셋대우

            # join으로 문자열 사이에 문자 ("\n")줄바꿈을 삽입했다.
result = "\n".join(interest)
print(result)               # 변수로 지정한 result로 출력
 


# 069 문자열 split 메서드
# 회사 이름이 슬래시 ('/')로 구분되어 하나의 문자열로 저장되어 있다.

string = "삼성전자/LG전자/Naver"

# 이를 interest 이름의 리스트로 분리 저장하라.
# 실행 예시
# >> print(interest)
# ['삼성전자', 'LG전자', 'Naver']

interest = string.split("/")
print(interest)
 


# 070 리스트 정렬
# 리스트에 있는 값을 오름차순으로 정렬하세요.

data = [2, 4, 3, 1, 5, 10, 9]
data.sort()           # sort를 사용하면 오름차 순으로 정렬해준다.
print(data)           # sorted를 사용하면 원래 값도 같이 출력



파이썬 튜플 71~80



# 071
# my_variable 이름의 비어있는 튜플을 만들라.
my_variable= ()                # 빈 튜플을 변수에 지정해줌
print(type(my_variable))       # type을 쓰면 데이터 타입 확인 가능.


# 072
# 2016년 11월 영화 예매 순위 기준 top3는 다음과 같다.
# 영화 제목을 movie_rank 이름의 튜플에 저장하라. (순위 정보는 저장하지 않는다.)

# 순위    영화
# 1       닥터 스트레인지
# 2       스플릿
# 3       럭키

movie_rank = ('닥터스트레인지','스플릿','럭키') # 위에 영화들을 튜플로 묶음
print(movie_rank)      # ('닥터스트레인지', '스플릿', '럭키')로 출력됨.


# 073
# 숫자 1 이 저장된 튜플을 생성하라.

num = (1)          # 오답 : 튜플에 1만 넣어서 확인해 보면 int로 뜬다        
num = (1,)                # 하나의 데이터가 저장되는 경우 ,(콤마)는 필수!
print(type(num))          # 정답은 num = (1,)이다


# 074
# 다음 코드를 실행해보고 오류가 발생하는 원인을 설명하라.

t = (1, 2, 3)
t[0] = 'a'
# Traceback (most recent call last):
#   File "<pyshell#46>", line 1, in <module>
#     t[0] = 'a'
# TypeError: 'tuple' object does not support item assignment

print("튜플은 원소의 값을 변경할 수 없다.")


# 075
# 아래와 같이 t에는 1, 2, 3, 4 데이터가 바인딩되어 있다.
# t가 바인딩하는 데이터 타입은 무엇인가?

t = 1, 2, 3, 4       # ,(콤마)가 붙으면 튜플로 인식된다.

print(type(t))       # <class 'tuple'>


# 076
# 변수 t에는 아래와 같은 값이 저장되어 있다.
# 변수 t가 ('A', 'b', 'c') 튜플을 가리키도록 수정하라.

t = ('a', 'b', 'c')

t = ('A', 'b', 'c')     # 대문자 A의 새로운 튜플로 덮어씌워진다.
print(t)                # ('A', 'b', 'c')


# 077
# 다음 튜플을 리스트로 변환하라.

interest = ('삼성전자', 'LG전자', 'SK Hynix')

result = list(interest) # 튜플로 묶고 list를 써서 변환해준다.
print(result)           # ['삼성전자', 'LG전자', 'SK Hynix']


# 078
# 다음 리스트를 튜플로 변경하라.

interest = ['삼성전자', 'LG전자', 'SK Hynix']

result = tuple(interest) # ()튜플로 묶고 tuple을 써서 변환해준다.
print(result)            # ('삼성전자', 'LG전자', 'SK Hynix')


# 079 튜플 언팩킹
# 다음 코드의 실행 결과를 예상하라.

temp = ('apple', 'banana', 'cake') # 각 요소들이 튜플로 묶여 있지만
a, b, c = temp              # ,(콤마)를 써서 각 요소를 변수로 바인딩 해준다.
print(a, b, c)              # 이걸 튜플의 언팩킹이라 한다.


# 080 range 함수
# 1 부터 99까지의 정수 중 짝수만 저장된 튜플을 생성하라.
# 예시: (2, 4, 6, 8 ... 98)

num= range(2, 99, 2) # range(시작,끝,간격)함수를 써서 변수를 지정
print(tuple(num))    # 튜플을 쓰지 않으면 range(2, 99, 2)로 출력됨




파이썬 딕셔너리 81~90




# 081 별 표현식
# 기본적으로 데이터 언패킹은 좌변의 변수와 우변 데이터 개수가 같아야 합니다.
# 하지만 *(start expression)을 사용하면 변수의 개수가 달라도 데이터 언패킹을 할 수 있습니다.

# 예시▼
# >> a, b, *c = (0, 1, 2, 3, 4, 5)
# >> a 는 0번 째 요소 언패킹
# >> b 는 1번 째 요소 언패킹
# >> 별이 붙은 변수는 언패킹할 요소를 쭉 바인딩 시킨다 [2, 3, 4, 5]
a, b, *c = (0, 1, 2, 3, 4, 5)
print(*c)        # 출력값 2, 3, 4, 5

# 다음과 같이 10개의 값이 저장된 scores 리스트가 있을 때, *(start expression)을 사용하여
# 좌측 8개의 값을 valid_score 변수에 바인딩하여라.

scores = [8.8, 8.9, 8.7, 9.2, 9.3, 9.7, 9.9, 9.5, 7.8, 9.4]

*valid_score,b ,c = scores # b와 c는 끝에 2 요소가 각각 언패킹 되었다.
print(valid_score)         # valid_score는 그 앞에 전부 언패킹 되어 바인딩 된 변수다.


# 082
# 다음과 같이 10개의 값이 저장된 scores 리스트가 있을 때, *(start expression)을 사용하여
# 우측 8개의 값을 valid_score 변수에 바인딩하여라.

scores = [8.8, 8.9, 8.7, 9.2, 9.3, 9.7, 9.9, 9.5, 7.8, 9.4]


# 083
# 다음과 같이 10개의 값이 저장된 scores 리스트가 있을 때, *(start expression)을 사용하여
# 가운데 있는 8개의 값을 valid_score 변수에 바인딩하여라.

scores = [8.8, 8.9, 8.7, 9.2, 9.3, 9.7, 9.9, 9.5, 7.8, 9.4]

a, *valid_score, c= scores  # 양 끝에 8.8 과 9.4는 각각, a와 c로 언패킹 되었다.
print(valid_score)          # [8.9, 8.7, 9.2, 9.3, 9.7, 9.9, 9.5, 7.8]


# 084 비어있는 딕셔너리
# temp 이름의 비어있는 딕셔너리를 만들라.

temp = {}
print(type(temp)) # <class 'dict'>


# 085
# 다음 아이스크림 이름과 희망 가격을 딕셔너리로 구성하라.

# 이름   희망 가격
# 메로나  1000
# 폴라포  1200
# 빵빠레  1800

ice = {'메로나' : 1000,'폴라포' : 1200,'빵빠레' : 1800}
print(ice)   # {Key : Value} 키와 벨류 값으로 이루어져있다.


# 086
# 085 번의 딕셔너리에 아래 아이스크림 가격정보를 추가하라.

# 이름   희망 가격
# 죠스바  1200
# 월드콘  1500

ice = {'메로나' : 1000,'폴라포' : 1200,'빵빠레' : 1800}
ice['죠스바'] = 1200     # 리스트를 추가해준다 생각하고
ice['월드콘'] = 1500     # ['Key'] = Value값을 리스트 에 넣는다.
print(ice)     # 반드시 ':'이 아니라 '='을 써야한다.


# 087
# 다음 딕셔너리를 사용하여 메로나 가격을 출력하라.

ice = {'메로나': 1000,
       '폴로포': 1200,
       '빵빠레': 1800,
       '죠스바': 1200,
       '월드콘': 1500}

# 실행 예:
# 메로나 가격: 1000

print('메로나 가격 :', ice['메로나']) # ice[0]는 안 됨.
      #딕셔너리는 순서가 없다! 키를 통해서만 인덱싱할 수 있다.


# 088
# 다음 딕셔너리에서 메로나의 가격을 1300으로 수정하라.

ice = {'메로나': 1000,
       '폴로포': 1200,
       '빵빠레': 1800,
       '죠스바': 1200,
       '월드콘': 1500}

ice['메로나'] = 1300   # 추가와 동일하게 덮어 씌운다.
print(ice)


# 089
# 다음 딕셔너리에서 메로나를 삭제하라.

ice = {'메로나': 1000,
       '폴로포': 1200,
       '빵빠레': 1800,
       '죠스바': 1200,
       '월드콘': 1500}

del ice['메로나']   # del은 "인덱스 기반 삭제"이다.
print(ice)        


# 090
# 다음 코드에서 에러가 발생한 원인을 설명하라.

# >> icecream = {'폴라포': 1200, '빵빠레': 1800, '월드콘': 1500, '메로나': 1000}
# >> icecream['누가바']
# Traceback (most recent call last):
#   File "<pyshell#69>", line 1, in <module>
#     icecream['누가바']
# KeyError: '누가바'

print("icecream 딕셔너리 안에 '누가바'라는 키 값이 없다.")
 
 

 


파이썬 딕셔너리 91~100



# 091 딕셔너리 생성
# 아래의 표에서, 아이스크림 이름을 키값으로, (가격, 재고) 리스트를 딕셔너리의 값으로 저장하라.
# 딕셔너리의 이름은 inventory로 한다.

# 이름    가격   재고
# 메로나   300    20
# 비비빅   400     3
# 죠스바   250   100

inventory= {'메로나' : [300,20],    #리스트로 다시 묶어 가격과 재고를 나눈다.
            '비비빅' :[400,3],
            '죠스바': [250,100]}
print(inventory)


# 092 딕셔너리 인덱싱
# inventory 딕셔너리에서 메로나의 가격을 화면에 출력하라.

inventory = {
    "메로나": [300, 20],
    "비비빅": [400, 3],
    "죠스바": [250, 100]
}

# 실행 예시:
# 300 원

print(inventory['메로나'][0],"원")
        #첫번째[키]두번째[벨류]값인데, 만약[0:]처럼 콜론을 붙이면 갯 수도 출력


# 093 딕셔너리 인덱싱
# inventory 딕셔너리에서 메로나의 재고를 화면에 출력하라.

inventory = {
    "메로나": [300, 20],
    "비비빅": [400, 3],
    "죠스바": [250, 100]
}

# 실행 예시:
# 20 개

print(inventory['메로나'][1],"개")
         #첫번째[키]두번째[벨류]값, [1] 1번째 값을 출력


# 094 딕셔너리 추가
# inventory 딕셔너리에 아래 데이터를 추가하라.

inventory = {
    "메로나": [300, 20],
    "비비빅": [400, 3],
    "죠스바": [250, 100]
}

# 이름    가격   재고
# 월드콘   500     7

# 실행 예시:
# >> print(inventory)
# {'메로나': [300, 20], '비비빅': [400, 3], '죠스바': [250, 100], '월드콘': [500, 7]}

inventory['월드콘']= [500,7]   #[가격,갯수]벨류 값을 월드콘 키 값에 넣어 추가한다.
print(inventory)


# 095 딕셔너리 keys() 메서드
# 다음의 딕셔너리로부터 key 값으로만 구성된 리스트를 생성하라.

icecream = {
    '탱크보이': 1200,
    '폴라포': 1200,
    '빵빠레': 1800,
    '월드콘': 1500,
    '메로나': 1000
}
                   # .keys 함수로 키 값만 가져온다
price = list(icecream.keys())  # list로 묶어준다.
print(price)


# 096 딕셔너리 values() 메서드
# 다음의 딕셔너리에서 values 값으로만 구성된 리스트를 생성하라.

icecream = {
    '탱크보이': 1200,
    '폴라포': 1200,
    '빵빠레': 1800,
    '월드콘': 1500,
    '메로나': 1000
}

price= list(icecream.values()) # 위와 동일한 방법
print(price)


# 097 딕셔너리 values() 메서드
# icecream 딕셔너리에서 아이스크림 판매 금액의 총합을 출력하라.

icecream = {
    '탱크보이': 1200,
    '폴라포': 1200,
    '빵빠레': 1800,
    '월드콘': 1500,
    '메로나': 1000
}

# 출력 예시:
# 6700

sum_price= sum(icecream.values())  # sum()으로 벨류 값들의 합을 변수에 지정
print(sum_price)                   # 변수 지정 없이 바로 프린트에 출력해도 무관.


# 098 딕셔너리 update 메서드
# 아래의 new_product 딕셔너리를 다음 icecream 딕셔너리에 추가하라.

icecream = {
    '탱크보이': 1200,
    '폴라포': 1200,
    '빵빠레': 1800,
    '월드콘': 1500,
    '메로나': 1000
}

new_product = {
    '팥빙수': 2700,
    '아맛나': 1000
}

# 실행 예시:
# >> print(icecream)
# {'탱크보이': 1200, '폴라포': 1200, '빵빠레': 1800, '월드콘': 1500, '메로나': 1000, '팥빙수': 2700, '아맛나': 1000}


icecream.update(new_product)
print(icecream)


# 099 zip과 dict
# 아래 두 개의 튜플을 하나의 딕셔너리로 변환하라. keys를 키로, vals를 값으로 result 이름의 딕셔너리로 저장한다.

keys = ("apple", "pear", "peach")
vals = (300, 250, 400)

# 실행 예시:
# >> print(result)
# {'apple': 300, 'pear': 250, 'peach': 400}

            # zip 함수는 두개의 쌍을 묶어줌
result = dict(zip(keys,vals)) # zip 함수를 출력하려면 타입 변경을 해야함.
print(result)            # {'apple': 300, 'pear': 250, 'peach': 400}


# 100 zip과 dict
# date와 close_price 두 개의 리스트를 close_table 이름의 딕셔너리로 생성하라.

date = ['09/05', '09/06', '09/07', '09/08', '09/09']
close_price = [10500, 10300, 10100, 10800, 11000]

# 실행 예시:
# >> print(close_table)
# {'09/05': 10500, '09/06': 10300, '09/07': 10100, '09/08': 10800, '09/09': 11000}


close_table = dict(zip(date,close_price)) #위와 동일한 방법이다.
print(close_table)



 

 

 

del에 주석을 달다가 '인덱스 기반'과'값을 기반'으로 두는 건 무슨 차이인지 튜터님께 여쭤봤다.


값을 기반으로 하는 remove는 동일한 값이 있다면 제일 첫번째 값을 없애고
인덱스 기반으로 하는 del은 동일한 값이 있더라도 저장된 값 자체를 없애는 거라 다르다.

 

 

 

 

 

 

오늘도 깔끔하게 정리하는 건 포기했다..
자정까지 30분 남았네