[Python기초]list 연습2

[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!


파이썬 list 연습문제 2


문제1: 학생 n명의 점수를 입력받아서 리스트로 생성하고 총점과 평균을 계산하여 출력하라. 또한, 80점 이상의 학생 수도 출력하고, 각 점수들을 큰 순서대로 정렬해서 출력해라.


학생 n명이라는 조건으로 입력을 받아야하기 때문에, 반복문을 사용할 시에 기존에 range를 적어주던 것처럼 fix하게 적을 수 없다. 때문에, 입력받는 정수로 반복문의 range의 매개변수의 인자를 채워주면 해결할 수 있을 것 같다. 또한 점수를 큰 순서대로 정렬을 요구 했으므로 내림차순으로 정리하는 sort 함수와 메소드를 이용하면 될 것 같다.


  • 출력 예시: 학생들의 수는?!5
    학생 1 점수 입력 : 100
    학생 2 점수 입력 : 87
    학생 3 점수 입력 : 73
    학생 4 점수 입력 : 61
    학생 5 점수 입력 : 99
    총점 : 420
    평균 : 84.00
    80점 이상의 학생 수는 3명 이다.
    [100, 99, 87, 73, 61]


scores = []
sum = 0
high = 0
n = int(input('학생들의 수는?!'))

# 학생들의 성적을 저장하기 위한 scores 리스트를 생성
# 총점을 구하기 위한 sum = 0
# 80점 이상의 고득점자의 명수를 세기 위한 high = 0
# n은 학생들의 수를 입력받는다.

for i in range(1, n+1):
    scores.append(int(input(f'학생 {i} 점수 입력 : ')))
    sum += scores[i-1]
    if scores[i-1] >= 80:
        high += 1

# 학생들의 수만큼 점수를 입력받기 위한 반복문을 작성한다.
# for문의 range의 인자로 1,과 n+1이 들어가는데, range는 기본적으로 0부터 시작한다. 그래서 점수입력 창에 '학생 0 점수 입력: '으로 만들 수 없기에 1로 적어줬다.
# range의 매개변수 2에는 n에 입력받은 학생들의 수만큼  점수를 입력하도록 만들기 위해서 n+1을 적어줬다.
# scores 리스트에 학생 순서대로 점수를 정수로 저장하고, 적은 점수들이 반복될 때마다 sum에 저장되도록 sum += score[i-1]를 사용했다.
# 마지막으로 if문을 사용해 점수가 80점 이상인 학생들을의 수를 high에 저장해준다. 

avg = sum / n

# 방금 전의 반복문에서 구한 총점을 학생 수로 나눠서 평균을 구해 avg 변수에 담아준다.
print('총점 : {:d}\n평균 : {:.2f}'.format(sum, avg))
print('80점 이상의 학생 수는 {}명 이다.'.format(high))

# 이제 구했던 총점과 평균, 고득점자를 프린트해준다.
sort_scores = sorted(scores, reverse=True)
print(sort_scores)

# 마지막으로 sorted 정렬함수를 이용해 학생들의 점수가 적힌 scores 리스트를 정렬시켜준다. reverse = True는 내림차순으로 정렬이 될 수 있게 만들어준다. 그리고 고득점 순으로 정리가 되었는지 프린트문으로 확인해준다.







문제2: 학생별, 과목별 총점과 평균점수를 출력하시오.


학생 별로 각 과목의 점수가 담긴 리스트가 있다. 리스트에 담겨있는 값들은 순서대로 국어, 수학, 영어 점수인데 이렇게 일정한 패턴이 있기에 반복문과 집계함수를 사용하면 구할 수 있을 것이다.


  • 조건 :

    순서대로 국어, 수학, 영어 점수다.
    kim = [90, 85 , 70]
    choi = [88, 92, 72]
    kang = [100, 95, 100]
    lee = [90, 60, 70]

  • 출력 예시:

    kim 총점 : 245 평균 : 61.25
    choi 총점 : 252 평균 : 63.0
    kang 총점 : 295 평균 : 73.75
    lee 총점 : 220 평균 : 55.0
    kor 과목 총점 : 368
    kor 과목 평균 : 92.0
    math 과목 총점 : 332
    math 과목 평균 : 83.0
    english 과목 총점 : 312
    english 과목 평균 : 78.0


kim = [90, 85 , 70]
choi = [88, 92, 72]
kang = [100, 95, 100]
lee = [90, 60, 70]

# 조건에 적혀있는데로 학생들의 점수 리스트를 만들어준다.
students = [kim, choi, kang, lee]
students_name = ['kim', 'choi', 'kang', 'lee']

# students 리스트를 만들어서 각 학생들의 리스트를 넣어 이중 리스트로 만들어준다.
# 학생들의 이름도 순서대로 담겨있는 students_name 리스트를 만들어준다.


for i in range(len(students)):
    students_sum = sum(students[i])
    print(students_name[i], '총점 :', students_sum, '평균 :', round(students_sum/len(students[i]), 2))

# len(students)로 학생들의 수 만큼 반복문이 실행되게 만든다.
# 집계함수 sum을 이용해 students 리스트 안에 있는 학생들의 점수 리스트 안의 수를 모두 더해 students_sum 안에 저장해준다.
# 평균은 총점을 각 학생의 리스트의 길이로 나눠준다. 학생 개인의 리스트의 길이는 과목수가 되기 때문이다.
# 그리고 평균은 소수점 아래 숫자가 많을 수 있으므로, round함수를 사용해 소수점자리를 제한해준다.
# 그리고 학생 별로 이름, 총점, 평균이 출력되도록 코드를 작성해주면 된다.

row = len(students)
col = len(students[0])
sub_name = ['kor', 'math', 'english']

# 과목 별 총점과 평균을 구해야한다.
# 이중 리스트 students의 값을 쉽게 가져오려면 이중반복문을 사용해야 한다.
# 그래서 행을 뜻하는 row를 학생들의 수로
# 열을 뜻하는 col을 과목들의 수로 받는다.
# 그것들의 길이만큼 반복문을 수행할 수 있다.

# 그리고 과목별 총점과 평균을 출력할 때 같이 출력할 과목의 이름도 리스트로 만들어준다.

for c in range(col):
    sub_sum = 0
    for r in range(row):
        sub_sum += students[r][c]
    print(sub_name[c], '과목 총점 :', sub_sum)
    print(sub_name[c], '과목 평균 :', sub_sum/len(students))

# 과목 별 이기 때문에 첫 반복문을 과목의 수와 같은 col을 range로 사용해 그만큼 반복을 시행한다.
# 과목의 총점을 계산할 sub_sum을 0으로 만든다.
# 이중 반복문을 활용할 차례다. 기존의 for문 안에 또하나의 row를 range로 하는 for문을 작성해, 과목별 학생들의 점수를 인덱싱해 총점에 더해준다.
# 그리고 기존의 for문 안으로 나와서 출력문을 작성해주면 끝이다.

이중 반복문은 내가 활용하기에는 아직 버거운 감이 있다. 그래도 앞으로도 자주 사용될 것 같으니 꾸준히 연습하고 생각해야겠다.
이제 출력해보자.

kim 총점 : 245 평균 : 81.67
choi 총점 : 252 평균 : 84.0
kang 총점 : 295 평균 : 98.33
lee 총점 : 220 평균 : 73.33
kor 과목 총점 : 368
kor 과목 평균 : 92.0
math 과목 총점 : 332
math 과목 평균 : 83.0
english 과목 총점 : 312
english 과목 평균 : 78.0

2022

[web]jQuery 복습 3

2 분 소요

[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!

[web]jQuery 복습 2

11 분 소요

[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!

[web]jQuery 복습 1

16 분 소요

[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!

[web]JavaScript 정리4

6 분 소요

[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!

[web]JavaScript 정리3

6 분 소요

[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!

[web]JavaScript 정리2

6 분 소요

[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!

[web]JavaScript 정리1

7 분 소요

[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!

[web]CSS 기초 정리

9 분 소요

[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!

[web]HTML 기초 정리

2 분 소요

[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!

[Pandas]pandas 연습

3 분 소요

[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!

맨 위로 이동 ↑

2021

[Python기초]module

1 분 소요

[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!

맨 위로 이동 ↑