Day34. 자료구조 (7)

Junghwan Park·2023년 5월 23일
0

스터디노트

목록 보기
35/54

튜플과 아이템 정렬

  • 튜플 아이템 정렬
  • 튜플은 수정이 불가하기 때문에 리스트로 변환 후 정렬하자!


    ('홍길동', '박찬호', '이용규', '강호동', '박승철', '김지은')
    ['홍길동', '박찬호', '이용규', '강호동', '박승철', '김지은'] list() 자료형 변환
    ['강호동', '김지은', '박승철', '박찬호', '이용규', '홍길동'] sort() 오름차순 정렬
    ('강호동', '김지은', '박승철', '박찬호', '이용규', '홍길동') tuple() 자료형 변환
  • sorted() 함수를 이용하면 튜플도 정렬할 수 있다.


    ('홍길동', '박찬호', '이용규', '강호동', '박승철', '김지은')

    오름차순 정렬 ← sorted()

    ['홍길동', '이용규', '박찬호', '박승철', '김지은', '강호동']

    sorted() 리스트 자료형을 반환한다!
students = ('홍길동', '박찬호', '이용규', '강호동', '박승철', '김지은')
print('students type : {}'.format(type(students)))
print('students : {}'.format(students))

students = list(students)
students.sort() # 정렬
print('students type : {}'.format(type(students)))
print('students : {}'.format(students))

students = tuple(students)  # 리스트형으로 정렬했으니 다시 튜플로 변환!

숫자도 가능!

숫자도 가능!
numbers = (2, 50, 0.12, 1, 9, 7, 17, 35, 100, 3.14)
print('numbers type : {}'.format(type(numbers)))
print('numbers : {}'.format(numbers))

numbers = list(numbers)
numbers.sort(reverse = True) # 정렬
print('numbers type : {}'.format(type(numbers)))
print('numbers : {}'.format(numbers))

numbers = tuple(numbers)
print('numbers type : {}'.format(type(numbers)))
print('numbers : {}'.format(numbers))
  • 튜플을 리스트로 변환하지 않고 바로 변환하기!
sorted() 함수 사용!

students = ('홍길동', '박찬호', '이용규', '강호동', '박승철', '김지은')

sortedStudents = sorted(students)
print('sortedStudents type : {}'.format(type(sortedStudents)))
print('sortedStudents : {}'.format(sortedStudents))
  • 실습
    튜플로 정의된 점수표에서 최저 및 최고 점수를 삭제한 후 총점과 평균을 출력해 보자.


    점수1 9.5
    점수2 8.9
    점수3 9.2
    점수4 9.8
    점수5 8.8
    점수6 9.0
playerScore = (9.5, 8.9, 9.2, 9.8, 8.8, 9.0)
print('playerScore : {}'.format(playerScore))

sortedplayerScore = sorted(playerScore)
playerScore = list(playerScore)
playerScore.sort()
print('playerScore : {}'.format(playerScore))
print('sortedplayerScore : {}'.format(sortedplayerScore))

playerScore.pop(0)
playerScore.pop(len(playerScore) - 1)

playerScore = tuple(playerScore)
print('playerScore : {}'.format(playerScore))

튜플과 for문(01)

  • 튜플과 for문(1)
  • for문을 이용해서 튜플 아이템을 참조(조회)하자!


    for문을 이용하면 튜플의 아이템을 자동으로 참조할 수 있다.


    cars = '그랜저', '소나타', '말리부', '카니발', '쏘렌토' # 괄호를 생략해도 튜플로 생성된다!


    for i in range(len(cars)):
    print(cars[i])


    for car in cars:
    print(car)
cars = '그랜저', '소나타', '말리부', '카니발', '쏘렌토'    # 괄호를 생략해도 튜플로 생성된다!

for i in range(len(cars)):
    print(cars[i])

for car in cars:
    print(car)
  • for문을 이용하면 튜플의 아이템을 자동으로 참조할 수 있다.


    for문을 이용하면, 튜플 내부의 또 다른 튜플의 아이템을 조회할 수 있다.
studentCnts = ((1, 19), (2, 20), (3, 22), (4, 18), (5, 21))

for i in range(len(studentCnts)):
    print('{}학급 학생수 : {}'.format(studentCnts[i][0], studentCnts[i][1]))

for classNo, cnt in studentCnts:
    print('{}학급 학생수 : {}'.format(classNo, cnt))
  • 실습
    아래 표와 튜플을 이용해서 학급별 학생 수와 전체 학생 수 그리고 평균 학생수를 출력해보자.
    학급 학생수
    1학급 18
    2학급 19
    3학급 23
    4학급 21
    5학급 20
    6학급 22
    7학급 17
studentCnts = ((1, 18), (2, 19), (3, 23), (4, 21), (5, 20), (6, 22), (7, 17))

sum = 0
avg = 0
# for i in range(len(studentCnts)):
#     print('{}학급 학생수 : {}'.format(studentCnts[i][0], studentCnts[i][1]))

for classNo, cnt in studentCnts:
    sum += cnt
    print('{}학급 학생수 : {}'.format(classNo, cnt))

avg = sum / len(studentCnts)
print('전체 학생수 : {}'.format(sum))
print('평균 학생수 : {}'.format(avg))

튜플과 for문(02)

  • for문을 이용한 조회
  • for문과 if문을 이용해서 과락 과목 출력하기
minScore = 60
scores = (
    ('국어', 58),
    ('영어', 77),
    ('수학', 89),
    ('과학', 99),
    ('국사', 50))

for item in scores:
    if item[1] < minScore:
        print('과락 과목 : {}, 점수 : {}'.format(item[0], item[1]))

for subject, score in scores:
    if score < minScore:
        print('과락 과목 : {}, 점수 : {}'.format(subject, score))

for subject, score in scores:
    if score >= minScore: continue  # 개행 하면 실행이 안된다??
    print('과락 과목 : {}, 점수 : {}'.format(subject, score))
  • 실습1
    사용자가 국어, 영어, 수학, 과학, 국사 점수를 입력하면 과락 과목과 점수를 출력하는 프로그램을 만들어보자.
minScore = 60

korScore = int(input('국어 점수 : '))
engScore = int(input('영어 점수 : '))
matScore = int(input('수학 점수 : '))
sciScore = int(input('과학 점수 : '))
hisScore = int(input('국사 점수 : '))

scores = (('국어', korScore),
          ('영어', engScore),
          ('수학', matScore),
          ('과학', sciScore),
          ('국사', hisScore))

for subject, score in scores:
    if score < minScore:
        print('과락 과목 : {}, 점수 : {}'.format(subject, score))
  • 실습2
    아래의 표와 튜플을 이용해서 학급 학생 수가 가장 작은 학급과 가장 많은 학급을 출력해보자.


    학급 학생수
    1 18
    2 19
    3 23
    4 21
    5 20
    6 22
    7 17
studentsCnt = ((1, 18),
               (2, 19),
               (3, 23),
               (4, 21),
               (5, 20),
               (6, 22),
               (7, 17))

minClassNo = 0  # 가장 적은 학급
maxClassNo = 0  # 가장 많은 학급

minCnt = 0  # 가장 적은 학생수
maxCnt = 0  # 가장 많은 학생수
for classNo, cnt in studentsCnt:
    if minCnt == 0 or minCnt > cnt: # 이 부분 다시 이해해 보기!
        minClassNo = classNo
        minCnt = cnt

    if maxCnt < cnt:
        maxClassNo = classNo
        maxCnt = cnt

print('학생 수가 가장 적은 학급(학생수) : {}학급 ({}명)'.format(minClassNo, minCnt))
print('학생 수가 가장 많은 학급(학생수) : {}학급 ({}명)'.format(maxClassNo, maxCnt))

튜플과 while문(01)

  • 튜플과 while문(1)
  • while문을 이용한 튜플 아이템 참조!


    while문을 이용하면 다양한 방법으로 아이템 조회가 가능하다.
cars = ('그랜저', '소나타', '말리부', '카니발', '쏘렌토')

# 방법1
n = 0
while n < len(cars):
    print(cars[n])
    n += 1


# 방법2
n = 0
flag = True
while flag:
    print(cars[n])
    n += 1

    if n == len(cars):
        flag = False


# 방법3
n = 0
while True:
    print(cars[n])
    n += 1

    if n == len(cars):
        break
        
studentCnts = (1, 19), (2, 20), (3, 22), (4, 18), (5, 21)

n = 0
while n < len(studentCnts):
    print('{}학급 학생수 : {}'.format(studentCnts[n][0], studentCnts[n][1]))
    n += 1
  • 실습
    아래 표와 튜플을 이용해서 학급별 학생 수와 전체 학생 수 그리고 평균 학생수를 출력해보자.


    학급 학생수
    1 18
    2 19
    3 23
    4 21
    5 20
    6 22
    7 17
studentsCnt = ((1, 18),
               (2, 19),
               (3, 23),
               (4, 21),
               (5, 20),
               (6, 22),
               (7, 17))

sum = 0
n = 0
while n < len(studentsCnt):
    classNo = studentsCnt[n][0]
    cnt = studentsCnt[n][1]
    print('{}학급 학생수 : {}명'.format(classNo, cnt))

    sum += cnt
    n += 1

print('전체 학생 수 : {}명'.format(sum))
print('평균 학생 수: {}명'.format(sum / len(studentsCnt)))

튜플과 while문(02)

  • 튜플과 while문(2)
  • while문을 이용한 튜플 아이템 참조!


    while문과 if문을 이용해서 과락 과목 출력하기
minScore = 60
scores = (('국어', 58),
          ('영어', 77),
          ('수학', 89),
          ('과학', 99),
          ('국사', 50))

n = 0
while n < len(scores):
    if scores[n][1] < minScore:
        print('과락 과목 : {}, 점수 : {}'.format(scores[n][0], scores[n][1]))

    n += 1

# continue를 사용한 방법
n = 0
while n < len(scores):
    if scores[n][1] >= minScore:
        n += 1
        continue

    print('과락 과목 : {}, 점수 : {}'.format(scores[n][0], scores[n][1]))

    n += 1
  • 실습1
    while문을 이용해서 사용자가 국어, 영어, 수학, 과학, 국사 점수를 입력하면 과락 과목과 점수를 출력하는 프로그램을 만들어보자.
minScore = 60

korScore = int(input('국어 점수 : '))
engScore = int(input('영어 점수 : '))
matScore = int(input('수학 점수 : '))
sciScore = int(input('과학 점수 : '))
hisScore = int(input('국사 점수 : '))

scores = (('국어', korScore),
          ('영어', engScore),
          ('수학', matScore),
          ('과학', sciScore),
          ('국사', hisScore))

n = 0
while n < len(scores):
    if scores[n][1] < minScore:
        print('과락 과목 : {}, 점수 : {}'.format(scores[n][0], scores[n][1]))

    n += 1
  • 실습2
    학급별 학생 수가 다음과 같이 정의되어 있을 때, while문을 이용해서


    학급 학생수
    1 18
    2 19
    3 23
    4 21
    5 20
    6 22
    7 17
studentsCnt = ((1, 18),
               (2, 19),
               (3, 23),
               (4, 21),
               (5, 20),
               (6, 22),
               (7, 17))

minClassNo = 0  # 가장 적은 학급
maxClassNo = 0  # 가장 많은 학급

minCnt = 0  # 가장 적은 학생수
maxCnt = 0  # 가장 많은 학생수

n = 0
while n < len(studentsCnt):
    if minCnt == 0 or minCnt > studentsCnt[n][1]: # 이 부분 다시 이해해 보기!
        minClassNo = studentsCnt[n][0]
        minCnt = studentsCnt[n][1]

    if maxCnt < studentsCnt[n][1]:
        maxClassNo = studentsCnt[n][0]
        maxCnt = studentsCnt[n][1]

    n += 1

print('학생 수가 가장 적은 학급(학생수) : {}학급 ({}명)'.format(minClassNo, minCnt))
print('학생 수가 가장 많은 학급(학생수) : {}학급 ({}명)'.format(maxClassNo, maxCnt))

profile
안녕하세요 반갑습니다^^

0개의 댓글