숭실대 프로그래밍 기말 고사(2024-2)

2025. 1. 14. 23:23python study

! 범위

Conditional Statement, Loop, Implementation. String, File Input/Output(File I/O), Random, tkinter etc...

문제

1. 다음과 같은 방식으로 코드를 완성하시오

  • 파일명 s를 입력받는다.
  • 랜덤으로 a~z, A~Z의 문자를 7개를 받아서 파일 s에 저장해 준다.(파일에 새로운 내용 추가해 줌)
  • 이후에 파일을 열고 각각 문자를 [랜덤 i: "문자" (i: 인덱스 값)]로 출력해 준다. 
  • 나머지 부분은 예시를 참고하여서 완벽히 동일하게 출력해야 한다.
#예시

파일명 입력: abc
abc 내용을 출력합니다.

랜덤 1: "h"
랜덤 2: "k"
랜덤 3: "m"
랜덤 4: "M"
랜덤 5: "y"
랜덤 6: "T"
랜덤 7: "p"

 

정답 코드

더보기
import random

s=input("파일명 입력: ")
print(f"{s} 내용을 출력합니다.\n")

ss="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"

with open("{s}", 'w') as f:
    for _ in range(7):
        cnt=random.randint(0, 51)
        f.write(f"{ss[cnt]}")

with open("{s}",'r') as f:
    sss=f.readline()
    cnt=0
    for i in sss:
       print(f"랜덤 {cnt+1}: \"{sss[cnt]}\"")
       cnt+=1

2. 다음과 같은 방식으로 코드를 완성하시오

  • 랜덤 한 숫자를 하나를 생성하고 변수에 저장해 준다.
  • Book클래스를 정의해 주고 생성자 메소드를 활용하여서 no, title, price를 생성해 준다.
  • 그런 다음 book1 객체를 생성해 주는 데 다음과 같이 생성해 준다.
Book(no, 'title', price) #price: 랜덤 생성해준 값
  • 이후에는 객체에 있는 속성 값들을 불러와서 다음과 같이 출력해 준다.
book1 객체: (1001,'python1',47174)

 

정답 코드

더보기
import random

class Book:
    def __init__(self, no, title, price):
        self.no=no
        self.title=title
        self.price=price

r=random.randint(10000, 50000)

book1=Book(1001, 'python1', r)
print(f"book1 객체: ({book1.no},\'{book1.title}\',{book1.price})")

3. 다음과 같은 방식으로 코드를 완성하시오

  • 단어들을 띄어쓰기로 분리된 문자열로 입력받는다.
  • 단어들을 분리해 주고 가장 길이가 짧은 단어들을 콤마로 나누어서 출력해 준다.
  • 단, 각 단어들의 길이는 10자를 넘어가지 않는다.
  • 나머지 부분은 예시를 참고하여서 완벽히 동일하게 출력해야 한다. 
문자열 입력: ssjjss 2025 sjs kim jun SSU
가장 짧은 단어: sjs, kim, jun, SSU

 

정답 코드

더보기
s = input("문자열 입력: ")
s = s.split(" ")

mn = 1000000
ss = []

for i in s:
    if mn > len(i):
        ss = [i]  
        mn = len(i)
    elif mn == len(i):
        ss.append(i)


print(f"가장 짧은 단어: {', '.join(ss)}")

4. 다음과 같은 방식으로 코드를 완성하시오

  • 기본적으로 다음과 같은 화면을 띄워야 하는 데 다음 조건을 만족하면서 화면을 구성한다.

place를 활용하여서 버튼과 택스트 등의 위치를 다음과 비슷한 맥략으로 맞춰야 한다.

  • 다음으로는 Entry box에 값을 입력해 준 다음 등급 확인 버튼을 눌렀을 때 다음과 같은 기준으로 화면을 표시해 준다.

숫자가 아닌 값이 입력된다면 "숫자만 입력하시오"라고 표시한다.(색상 변경은 필요 없음)
숫자가 아닌 값은 예외처리를 활용하여서 분리해 낸다. (힌트: ValueError)

0~100의 숫자가 아니라면 "0~100 사이의 숫자만 입력하시오"라고 표시하고 배경색상을 Red로 바꾼다.

0~59의 숫자라면 "c등급"이라고 표시하고 배경색상을 Orange로 바꾼다.

60~79의 숫자라면 "B등급"이라고 표시하고 배경색상을 Green으로 바꾼다.

80~100의 숫자는 "A등급"이라고 표시하고 배경색상을 SkyBlue로 바꾼다.

 

정답 코드

더보기
from tkinter import *

def event1():
    try:
        k=int(entry.get())
        if(k<=100 and k>=80): l2.config(bg="SkyBlue", text="A등급")
        elif(k<80 and k>=60): l2.config(bg="Green", text="B등급")
        elif(k<60 and k>=0): l2.config(bg="Orange", text="C등급")
        else: l2.config(text="0~100사이의 숫자만 입력하시오.", bg="Red")
    except ValueError as msg:
        l2.config(text="숫자만 입력하시오.")

root=Tk()

root.geometry("400x300")

root.title("점수 관리 프로그램")

l1=Label(root, text="성적 입력:")
l1.place(x=20, y=40)

entry=Entry(root,width=6)
entry.place(x=80, y=40)

b1=Button(root, text="등급 확인",command=event1)
b1.place(x=140, y=37)

l2=Label(root, text="점수를 입력하시오.",width=25)
l2.place(x=20, y=70)


root.mainloop()

마치면서..

시험이 어렵다고 하기보다는 문제를 이해하거나 코드를 작성하는 데 약간 시간이 많이 소모되었을 것 같다. 중간 시험 같은 경우에는 한 군데 실수를 하더라도 -1의 페널티를 받았지만 이번 기말 시험에서는 실수를 했음에도 만점을 얻을 정도로 난이도가 높았던 것 같다.

 

※오류나 궁금한점 질문 부탁드립니다!