관리 메뉴

클라이언트/ 서버/ 엔지니어 "게임 개발자"를 향한 매일의 공부일지

[Spring반] 중간시험 19 - 파이썬 시험 및 문제 풀이 5 : 문제 7~8번 <성적표와 구구단 출력> 본문

개발 포트폴리오/수료증 및 시험

[Spring반] 중간시험 19 - 파이썬 시험 및 문제 풀이 5 : 문제 7~8번 <성적표와 구구단 출력>

huenuri 2024. 12. 9. 21:02

저녁을 먹고 공부를 다시 시작해보려고 한다. 길어야 3시간 정도 될 것 같은데 그 시간 안에 파이썬 문제를 모두 풀고 학습을 마쳐볼 것이다.


 

 

 

파이썬 시험 다섯 번째

 

문제 7번

다음 score_list에 들어있는 데이터를 이용해 아래와 같이 성적표를 만드는 프로그램을 작성하시오. (단, 학생의 숫자가 늘어나도 동작할 수 있도록 고려)


 

 

 

이 문제를 풀기 위한 코드를 단계별로 작성해 보겠다.

 

1. 리스트와 반복문

  • score_list는 2차원 리스트로 되어 있으므로, 반복문을 활용해서 각 학생의 정보를 처리해야 한다.

 

 

2. 평균 계산하기

  • 학생별 점수의 평균을 계산하려면 sum()과 len()을 활용할 수 있다.

 

여기서 student[0]이라고 쓰는 이유는, score_list가 2차원 리스트 형태로 되어 있기 때문이다. 각 student는 리스트 내부의 하나의 리스트를 나타내고, 그 리스트의 첫 번째 요소(student[0])가 학생의 이름이다.


 

score_list 구조 다시 보기

score_list = [
    ['김미희', 89, 78, 99],  # 첫 번째 학생 데이터
    ['서대희', 67, 88, 77],  # 두 번째 학생 데이터
    ['강예진', 100, 55, 96], # 세 번째 학생 데이터
    ['차현석', 75, 100, 60]  # 네 번째 학생 데이터
]

 

여기서

  • score_list[0]는 ['김미희', 89, 78, 99] 전체를 나타낸다.
  • score_list[1]는 ['서대희', 67, 88, 77] 전체를 나타낸다.
  • student[0]는 각 리스트의 첫 번째 요소, 즉 학생 이름을 나타낸다.

 

반복문에서 student[0]의 역할

 

여기서

  1. for student in score_list는 score_list 내부의 각 리스트(['김미희', 89, 78, 99] 등)를 순서대로 student에 할당
  2. student[0]은 각 리스트의 첫 번째 요소, 즉 학생 이름을 가져오는 역할을 함

 

 

다른 요소에 접근하는 방식

  • 점수에 접근 : student[1:]를 사용해 첫 번째 요소(이름)를 제외한 나머지 점수들을 가져올 수 있다.


 

 

 

3. 학점 계산하기

  • 학점 계산은 점수 범위에 따라 조건문을 사용하면 된다.

 

 

4. 과목별 평균 계산하기

  • 과목별 평균은 각 과목 점수를 누적해서 계산하면 된다.

 

print 구문의 코드가 길어서 한 문장씩 잘라보았다. 전에는 이 문자열을 나누는 방법을 몰라서 긴 문장 그대로 쓸 때가 많았는데 이제는 알 것 같다.


 

수정 코드

방법 1 : f-string 줄 바꿈

f-string을 사용할 때, 괄호 ()를 열어주면 여러 줄로 나눠 작성할 수 있다.

print(
    f"과목별 평균: Python={subject_averages[0]:.2f}, "
    f"Java={subject_averages[1]:.2f}, "
    f"DB={subject_averages[2]:.2f}"
)

 

 

방법 2 : + 연산자로 문자열 연결

긴 문자열을 나눠서 연결하는 방식이다.

print(
    "과목별 평균: Python=" + f"{subject_averages[0]:.2f}, "
    "Java=" + f"{subject_averages[1]:.2f}, "
    "DB=" + f"{subject_averages[2]:.2f}"
)

 

 

방법 3 : \(백슬래시)를 사용한 줄 바꿈

백슬래시 \를 사용하면 긴 코드나 문자열을 줄 바꿈해 작성할 수 있다.

print(f"과목별 평균: Python={subject_averages[0]:.2f}, "
      f"Java={subject_averages[1]:.2f}, "
      f"DB={subject_averages[2]:.2f}")

 

  • 방법 1은 가장 깔끔하고 파이썬스러운 방식이다. 괄호를 열고 여러 줄로 나눠서 작성하면 읽기 쉽고 오류도 안 난다.

 

 

 

5. 테이블 형식 출력

  • 출력 결과를 깔끔하게 보이게 하려면 f-string과 문자열 정렬을 활용한다.


 

 

:<의 의미

  • :<n는 파이썬의 문자열 포맷팅(f-string 또는 str.format)에서 사용되는 정렬 옵션이다.
  • :n은 출력할 문자열의 최소 너비를 지정하고, <는 왼쪽 정렬을 의미한다.
name = "김미희"
print(f"{name:<10}")  # 최소 너비 10, 왼쪽 정렬

 

위 코드에서 :<6, :<7 같은 포맷팅은 데이터가 왼쪽에 맞춰지고, 최소 너비를 보장하게 한다.

 

이제 문제에 맞게 모든 코드를 작성해 보겠다.


 

 

 

 

이제 점수도 소수점이 아닌 정수로 되었고, 테이블의 선도 모두 잘 만들었다. 이제 다음 문제로 넘어가도 될 것 같다.


 

 

 

 

문제 8번

다음과 같이 2단부터 9단까지의 구구단을 출력하시오.


 

 

 

이 문제를 풀기 전에 구구단을 출력하는 기초적인 문제를 몇 개 풀어보려고 한다.

 

 


 

 

 

 

 

 

 

 

 

 

 

 

 

그냥 출력하는 것과 리스트로 출력하는 것은 어떤 차이가 있는지 궁금해졌다. 둘 다 구구단을 처리하지만 저장 방식과 활용도에서 큰 차이가 있다.

 

1. 그냥 출력

  • 특징 : 계산한 결과를 즉시 화면에 출력만 함
  • 장점
    • 메모리를 추가로 사용하지 않음
    • 단순히 결과를 화면에 보여주는 용도에 적합
  • 단점
    • 출력된 결과를 다시 사용할 수 없음
    • 데이터가 프로그램 내에 저장되지 않음
  • 용도
    • 구구단 결과를 즉시 확인하거나 단순 출력할 때 사용

 

2. 리스트로 저장

  • 특징 : 구구단의 계산 결과를 리스트에 저장하여 프로그램 내에서 재사용 가능
  • 장점
    • 계산 결과를 저장하므로 이후에 다시 사용할 수 있음
    • 원하는 형식으로 가공하거나, 조건에 따라 특정 데이터를 추출할 수 있음
  • 단점
    • 메모리를 추가로 사용
    • 즉각 출력이 필요하면 오히려 비효율적
  • 용도
    • 구구단 결과를 다른 연산이나 조건 검색에 활용할 때
    • 저장된 결과를 여러 번 출력하거나 변형하고 싶을 때

 

비교

특징 그냥 출력 리스트로 저장
메모리 사용 적음 추가적인 메모리 사용
결과 활용도 화면에만 출력, 이후 재사용 불가 저장된 데이터를 재활용 가능
사용 시점 단순 출력이 필요할 때 데이터를 저장하고 반복 활용할 때
예시 용도 즉시 결과 확인 검색, 가공, 조건 처리 등

 

결론

  • 즉시 출력이 목적이면 그냥 출력
  • 데이터 저장 및 활용이 필요하면 리스트로 저장

 

 

 

이제 문제를 풀어보겠다. 이미 작성된 코드 안에 답이 있는 것 같다.

 

 

여기서 :2는 무엇일까? :{2}는 **문자열 포매팅(f-string)**에서 출력될 문자열의 최소 너비를 지정하는 옵션이야. 간단히 말해서, 숫자나 텍스트를 출력할 때 자릿수를 맞추기 위해 사용하는 옵션이야.


 

 

:{2}의 의미

  • : 최소 2칸의 공간을 확보해서 값을 출력
  • 숫자가 한 자릿수면 앞쪽에 공백을 추가해서 출력이 정렬되도록 보장

 

:2가 없을 때

 

여기서 한 자릿수와 두 자릿수가 섞여 출력되므로 정렬되지 않음

 

 

정렬 효과

:2를 추가하면 정렬 효과를 볼 수 있다.


 

 

 

학습을 마치고

이번에도 두 문제를 풀며 많은 것들을 배웠다. 이제 딱 두 문제만이 남아있으니 마지막까지 힘을 내볼 것이다. 내일은 웹 공부를 해볼 수 있을 것 같다.