python

[Python 미니세션] 기본문제

kinggoddino 2024. 7. 10.

▶ 문제1

  • cars = ['audi', 'bmw', 'subaru', 'kia', 'toyota', 'hyundai']
  • 새로운 리스트에 kia, hyundai를 대문자로 추가하기
cars = ['audi', 'bmw', 'subaru', 'kia', 'toyota', 'hyundai']
# 새로운 리스트 생성
new_list =[]
# i에 0부터 6(cars리스트의 길이)까지의 숫자를 하나씩 할당하며 반복문 실행
for i in range((len(cars))):
    # cars 안의 요소 값이 kia 혹은 hyundai 일 경우
    if cars[i] == 'kia' or cars[i] == 'hyundai':
        # cars 리스트의 i번째 요소를 대문자로 변경해서 new_list에 추가
        new_list.append(cars[i].upper())

print(new_list)    # ['KIA', 'HYUNDAI']

 

처음에 오답했던 내용 적어놓기

if문은 조건이 true일 경우 실행된다.

그래서 다음과 같이 사용할 경우, if 'hyundai'는 항상 True이기 때문에 모든 요소에서 if문이 실행되어 버린다ㅜㅜ

    if cars[i] == 'kia' or 'hyundai':      # 항상 True
    # ['AUDI', 'BMW', 'SUBARU', 'KIA', 'TOYOTA', 'HYUNDAI']

 

불연산자로 확인해보기!

print(bool(1))        # True   # 숫자는 다 True
print(bool(-1))       # True   # 숫자는 다 True
print(bool(0))        # False  # 0만 False

print(bool('아무말')) # True   # 글자는 다 True
print(bool(' '))      # True   # 공백도 True
print(bool(''))       # False  # 빈문자열 False

print(bool([1,2,3]))  # True   # 내용o리스트 True
print(bool([]))       # False  # 빈 리스트 False

print(bool('None'))   # True   # None이라는 문자 True
print(bool(None))     # False  # None(없음) False

 

신기한 건 문자열에서 공백도 True로 인식한다는 건데, 컴퓨터 아스키코드로 보면 스페이스(공백)도 숫자가 매겨져 있기 때문에 문자와 같이 인식한다. 오...

 

 

두번째 오답 내용

for문으로 반복을 돌리려면 in 뒤에 '반복가능한' 객체가 와야한다.

반복 가능하려면 __iter__ 라는 매직메서드를 갖고 있어야 함.

__iter__  :  iterable(반복가능한) 객체의 메서드

그리고 객체가 iter 라는 매직메서드를 갖고 있는지 알려주는 함수도 있다.

dir(객체) : directory 의 약자로, 객체가 갖고있는 모든 속성(attribute)과 메서드(method)를 리스트 형태로 반환한다.

print(dir(int))      # '__iter__' 없음   # 숫자는 반복할 수 X

print(dir(str))      # '__iter__' 있음   # 문자는 반복할 수 O

print(dir(len))      # '__iter__' 없음   # 길이는 반복할 수 X

print(dir(range))    # '__iter__' 있음   # 범위는 반복할 수 O

 

숫자와 길이는 iter 메서드가 없고, 문자와 범위는 iter 메서드가 있다.

따라서 str 형식과 range 형식은 for문을 통해 반복할 수 있다!


▶ 문제2

  • 25 ~ -15까지 감소하는 결과 출력하기
result = []                   # 비어있는 result 리스트 생성
for i in range(25, -16, -2):  # 25부터 -16(미포함)까지 -2씩 반복해서 숫자생성
    result.append(i)          # 생성된 요소를 result 리스트에 추가해주기

print(result)                 # result 출력
# [25, 23, 21, 19, 17, 15, 13, 11, 9, 7, 5, 3, 1, -1, -3, -5, -7, -9, -11, -13, -15]

 

오답했던거1

for i in range(25, -15, -2)
# -15 가 출력 안됨..

range(start, stop, step) 함수는 start 이상부터 stop 미만까지 step 칸씩 점프하며 범위를 지정해준다. 주의할 점은 stop이 not included 이기 때문에 -15까지 출력하고 싶으면 -16 범위를 지정해줘야한다.

 

오답했던거2

print(result.append(i))         # None

append는 함수다. print는 '값'을 출력하는거지 '기능'을 출력하는 게 아니기 때문에

이런 이상한 코드는 없다... ㅠ 글구나

 

 

 


 

'python' 카테고리의 다른 글

[Python 미니세션] 함수 *Asterisk  (0) 2024.07.12
[Python 미니세션] 딕셔너리 관련 함수  (0) 2024.07.11
[Python 기초] f-string  (0) 2024.07.09
[Python 기초] 집합 set  (0) 2024.07.09
[Python 기초] 튜플 tuple  (0) 2024.07.09