3.2 파이썬 자료구조 문제풀이1 / sort() None 반환하는 이유

소리·2023년 9월 28일
0
post-thumbnail

리스트 문제풀이

40번 영상 : 1부터 100사이에 난수 10개 생성한 후 (2) 짝수 홀수 구분해서 리스트에 저장하고 (3)각각의 개수를 출력하는 프로그램

import random

nums = random.sample(range(1, 101), 10)
print(f'셍성 난수 : {nums}')
listOdd = []
listEve = []

for n in nums:
    if n % 2 == 0:
        listEve.append(n)
    else:
        listOdd.append(n)

print('짝수의 갯수 : {}'.format(len(listEve)))
print('홀수의 갯수 : {}'.format(len(listOdd)))

[Output]

41번 영상 : 1일 총 입장객이 100명이라고 할 때, 1일 전체 입장 요금을 구하는 프로그램 / 고객 나이 난수로 이용

import random

visitorAge = random.sample(range(1, 101), 100)

babyCnt = 0; childCnt = 0; teenCnt = 0; adultCnt = 0; seniorCnt = 0

childFee = 200; teenFee = 300; adultFee = 500

babyTotal = 0; childTotal = 0; teenTotal = 0
adultTotal = 0; seniorTotal = 0



for i in visitorAge:
    if i < 8:
        babyCnt += 1

    elif i >= 8 and i <14:
        childCnt += 1

    elif i >= 14 and i < 20:
        teenCnt += 1

    elif i >= 20 and i <65:
        adultCnt += 1

    else:
        seniorCnt += 1

childTotal = childFee * childCnt
teenTotal = teenFee * teenCnt
adultTotal = adultFee * adultCnt

totalFee = format(int(childTotal + teenTotal +  adultTotal), ',')

print('-'*20)
print('영유아 \t : {}명 \t : {}원'.format(babyCnt, babyTotal))
print('어린이 \t : {}명 \t : {}원'.format(childCnt, childTotal))
print('청소년 \t : {}명 \t : {}원'.format(teenCnt, teenTotal))
print('성인 \t : {}명 \t : {}원'.format(adultCnt, adultTotal))
print('어르신 \t : {}명 \t : {}원'.format(seniorCnt, seniorTotal))
print('-'*20)
print('1일 요금 총 합계 : {}'.format(totalFee))
print('-'*20)

[Output]

💎 내 풀이와 다른 또 다른 방법

1) 
visitorAge = random.sample(range(1, 101), 100)

== 

visitor = []
for n in range(100): 
	visitors.append(random.randint(1, 100))
  
  
  
2) 
babyCnt = 0; childCnt = 0; teenCnt = 0; adultCnt = 0; seniorCnt = 0

==
#한 번에 할당하기
babyCnt, childCnt, teenCnt, adultCnt, seniorCnt = 0,0,0,0,0

3)
Fee를 굳이 정의할 필요없이 total에서 한 번에 처리해도 됨

42번 영상_1 : 친구 이름 다섯 명을 리스트에 저장하고 오름차순과 내림차순으로 정렬해보자

friendsName = []

for i in range(5):
    names = input('친구 이름 입력 : ')
    friendsName.append(names)

friendsName2 = sorted(friendsName)
friendsName3 = sorted(friendsName, reverse=True)

print(f'친구들 : {friendsName}')
print(f'오름차순 : {friendsName2}')
print(f'내림차순 : {friendsName3}')

[Output]

🔎 내 풀이 초기에서 sort() 반환값이 None으로 나오는 에러가 나왔는데, 영상풀이와 입력의 다른 점은 없다고 생각했다. 그래서 나는 sorted()를 사용해 문제를 해결했다.

[내 풀이]

[영상 풀이]

💎💎 sort( ) vs sorted( ) 차이

sort()

  • 리스트를 정렬한 상태로 변경
  • 리스트만을 위한 메소드
  • The sort() method returns None, which means there is no return value since it just modifies the original list. It does not return a new list. (원래 목록을 수정하기 때문에 반환 값이 없다)

sorted()

  • 기존의 리스트 변경이 아닌 새로운 리스트를 반환
  • 어떤 iterable 객체도 받을 수 있다.
    .
    .

🔑 None이 나온 이유는 순서에 있다.
sort()는 기존 리스트를 재정렬하는 것이기 때문에, None을 반환한다. 그래서 실제 friendsName을 가지고 와야 값이 실제로 반환된다.

  • 찾은 더 쉬운 예

(에러가 난 식)

 list1 = [1,1,1,1,1]
 list2 = list1.sort[]
 print(list2)
 
 [Output]
 None

(결과값이 나온 식)

list1 = [1,1,1,1,1]
list2 = list1
list2.sort()
print(list2)

[Output]
[1,1,1,1,1]

🎯 이유를 알고 순서를 바꾸니 문제가 해결되었다

profile
데이터로 경로를 탐색합니다.

0개의 댓글