문제 설명
5명의 학생 점수가 리스트로 주어집니다. 내장 함수를 사용하여 최고 점수, 최저 점수, 총점, 평균을 계산하여 출력하세요.
입력 예시:
입력 없음
출력 예시:
최고 점수: 95점
최저 점수: 78점
총점: 438점
평균: 87.6점
내가 작성한 코드문
scores = [85, 92, 78, 95, 88]
print(f"최고 점수: {max(scores)}점")
print(f"최저 점수: {min(scores)}점")
print(f"총점: {sum(scores)}점")
print(f"평균: {sum(scores)/len(scores)}점")
문제 설명
이름을 매개변수로 받아서 "안녕하세요, {이름}님!"을 출력하는 함수 greet를 작성하세요. 그리고 3명의 이름으로 함수를 호출하세요.
입력 예시:
입력 없음
출력 예시:
안녕하세요, 철수님!
안녕하세요, 영희님!
안녕하세요, 민수님!
내가 작성한 코드문
for i in range(3):
name = input("이름 입력: ")
def greet(name):
print(f"안녕하세요, {name}님!")
greet(name)
다른사람의 풀이
def greet(name):
print(f"안녕하세요, {name}님!")
greet("철수")
greet("영희")
greet("민수")
아무래도 이게 더 맞아보인다. 함수를 선언하고,
각각 인자 값 다르게 넣거나
아님 함수 밖에 반복문 형태로 출력하게 하든
문제 설명
가로와 세로 길이를 매개변수로 받아서 직사각형의 넓이를 계산하여 반환하는 함수 calculate_area를 작성하세요.
두 개의 직사각형 넓이를 계산하여 출력하세요.
입력 예시:
입력 없음
출력 예시:
첫 번째 직사각형 넓이: 50
두 번째 직사각형 넓이: 56
(설명: 첫 번째 직사각형의 입력은 5와 10, 두 번째 직사각형의 입력은 7과 8)
내가 작성한 코드문
def calculate_area(width, height):
return width * height;
print(f"첫 번째 직사각형의 넓이: {calculate_area(5, 10)}")
print(f"두 번째 직사각형의 넓이: {calculate_area(7, 8)}")
다른 사람의 풀이
def calculate_area(width, height):
return width * height
area1 = calculate_area(5, 10)
area2 = calculate_area(7, 8)
print(f"첫 번째 직사각형 넓이: {area1}")
print(f"두 번째 직사각형 넓이: {area2}")
나는 함수 호출만 한거라면 여기는 객체선언만 한 느낌이다.
문제 설명
커피 종류와 사이즈를 매개변수로 받는 함수 order_coffee를 작성하세요. 사이즈의 기본값은 "Regular"로 설정하세요. 사이즈를 지정하지 않으면 기본값이 사용됩니다.
출력 예시와 같은 출력을 하는 함수를 정의하세요.
입력 예시:
# 호출 예시
order_coffee("아메리카노", "Large")
order_coffee("카페라떼")
order_coffee("카푸치노", "Small")
출력 예시:
아메리카노(Large) 주문이 완료되었습니다.
카페라떼(Regular) 주문이 완료되었습니다.
카푸치노(Small) 주문이 완료되었습니다.
내가 작성한 코드문
def order_coffee(kind, size = 'Regular'):
c = f"{kind}({size}) 주문이 완료되었습니다."
return c
print(order_coffee("아메키라노", "Large"))
print(order_coffee("카페라떼", "Regular"))
print(order_coffee("카푸치노", "Smal"))
다른 사람의 풀이
def order_coffee(coffee_type, size="Regular"):
print(f"{coffee_type}({size}) 주문이 완료되었습니다.")
order_coffee("아메리카노", "Large")
order_coffee("카페라떼")
order_coffee("카푸치노", "Small")
함수 리턴값 있게하냐 리턴없이 print문 사용이냐 그 차이
문제 설명
이름, 나이, 학년을 매개변수로 받아 학생 정보를 출력하는 함수 print_student_info를 작성하세요. 키워드 인자를 사용하여 함수를 호출하세요. (순서를 바꿔보면서 호출해보세요!)
입력 예시:
입력 없음
출력 예시:
이름: 김철수, 나이: 16세, 학년: 2학년
이름: 이영희, 나이: 17세, 학년: 3학년
이름: 박민수, 나이: 15세, 학년: 1학년
내가 작성한 코드문
def print_student_info(name, age, grade):
return f"이름: {name}, 나이: {age}세, 학년: {grade}학년"
print(print_student_info(name="김철수", age=16, grade=2))
print(print_student_info(name="이영희", age=17, grade=3))
print(print_student_info(name="박민수", age=15, grade=1))
문제 설명
두 개의 숫자를 매개변수로 받아 교환된 값을 튜플로 반환하는 함수 swap_numbers를 작성하세요. 반환된 값을 언패킹하여 두 변수에 저장하고 출력하세요.
입력 예시:
# 호출 예시
a = 10
b = 20
a, b = swap_numbers(a, b)
출력 예시:
교환 전: a=10, b=20
교환 후: a=20, b=10
내가 작성한 코드문
a = 10
b = 20
print(f"교환 전: a = {a}, b = {b}")
def swap_numbers(a, b):
tmp = a
a = b
b = tmp
return a, b
a, b = swap_numbers(a,b)
print(f"교환 후: a = {a}, b = {b}")
다른 사람의 풀이
def swap_numbers(a, b):
return b, a
a = 10
b = 20
print(f"교환 전: a={a}, b={b}")
a, b = swap_numbers(a, b)
print(f"교환 후: a={a}, b={b}")
나는 자바에 익숙해져 알고리즘을 썼지만, 알고리즘 없이 이렇게 하는방법도 있다.
문제 설명
학생의 국어, 수학, 영어 점수를 매개변수로 받아서 총점, 평균, 최고점수, 최저점수를 모두 반환하는 함수 analyze_scores를 작성하세요. 반환된 값들을 각각 변수에 할당하여 출력하세요.
입력 예시:
# 호출 예시
total, avg, max_score, min_score = analyze_scores(85, 90, 78)
출력 예시:
총점: 253점
평균: 84.33333333333333점
최고 점수: 90점
최저 점수: 78점
내가 작성한 코드문
def analyze_scores(kor, math, eng):
tp = (kor, math, eng)
total = sum(tp)
avg = total / len(tp)
max_score = max(tp)
min_score = min(tp)
return total, avg, max_score, min_score
total, avg, max_score, min_score = analyze_scores(85, 90, 78)
print(f"총점: {total}점")
print(f"평균: {avg}점")
print(f"최고 점수: {max_score}점")
print(f"최저 점수: {min_score}점")
다른 사람의 풀이
def analyze_scores(korean, math, english):
scores = [korean, math, english]
total = sum(scores)
avg = total / len(scores)
max_score = max(scores)
min_score = min(scores)
return total, avg, max_score, min_score
total, avg, max_score, min_score = analyze_scores(85, 90, 78)
print(f"총점: {total}점")
print(f"평균: {avg}점")
print(f"최고 점수: {max_score}점")
print(f"최저 점수: {min_score}점")
튜플 변수냐 리스트냐 차이 결국 큰 차이 없음
문제 설명
비밀번호가 유효한지 검사하는 함수 validate_password를 작성하세요. 비밀번호는 다음 조건을 모두 만족해야 합니다:
함수는 유효성 여부(True/False)와 실패 이유를 모두 반환(투플 형태)해야 합니다. 5개의 비밀번호를 검사하고 각각 결과를 출력하세요.
입력 예시:
# 호출 예시
passwords = ["abc123", "password", "Pass1234", "12345678", "MyP@ss99"]
for pwd in passwords:
is_valid, message = validate_password(pwd)
출력 예시:
비밀번호: abc123
결과: 실패 (길이가 8자 미만입니다)
비밀번호: password
결과: 실패 (숫자가 포함되지 않았습니다)
비밀번호: Pass1234
결과: 성공
비밀번호: 12345678
결과: 실패 (영문자가 포함되지 않았습니다)
비밀번호: MyP@ss99
결과: 성공
내가 작성한 코드문
password = ["abc123", "password", "Pass1234", "12345678", "MyP@ss99"]
def valid_password(pwd):
if len(pwd) < 8:
is_valid = "실패"
message = "(길이가 8자 미만입니다.)"
# tp = is_valid, message
elif str.isalpha(pwd) == True:
is_valid = "실패"
message = "(숫자가 포함되지 않았습니다.)"
# tp = is_valid, message
elif str.isdigit(pwd) == True:
is_valid = "실패"
message = "(영문자가 포함되지 않았습니다.)"
# tp = is_valid, message
else:
is_valid = "성공"
message = ""
return is_valid, message
for pwd in password:
is_valid, message = valid_password(pwd)
print(f"비밀번호: {pwd}")
print(f"결과: {is_valid} {message}")
다른 사람의 풀이
def validate_password(password):
# 길이 체크
if len(password) < 8:
return False, "길이가 8자 미만입니다"
has_digit = False
has_alpha = False
for ch in password:
if '0' <= ch <= '9':
has_digit = True
elif ('a' <= ch <= 'z') or ('A' <= ch <= 'Z'):
has_alpha = True
# 숫자 포함 여부
if not has_digit:
return False, "숫자가 포함되지 않았습니다"
# 영문자 포함 여부
if not has_alpha:
return False, "영문자가 포함되지 않았습니다"
return True, "성공"
passwords = ["abc123", "password", "Pass1234", "12345678", "MyP@ss99"]
for pwd in passwords:
is_valid, message = validate_password(pwd)
print(f"비밀번호: {pwd}")
if is_valid:
print(f"결과: {message}")
else:
print(f"결과: 실패 ({message})")
나는 isalpha, isdigit 함수를 썼다.
If문 안에 그냥 return 실패, 실패사유 이렇게 리턴하는 방법도 좋음
For문안에 isdigit 메서드 안쓰는 대신,
"1"<= ch <="9" 조건문도 쓰기.
마찬가지로 isalpha 메서드 대신 조건문"a"<=ch <="z" or "A"<=ch<="Z"
변수도 has_digit, has_alpha 를 만들어서 조건문에 일치안하면
False, "에러메시지" 반환시키는 것
다 조건문에 안 걸려들면 return True, "성공"
문제 설명
문자열을 다양한 방식으로 변환하는 함수들을 구현하세요.
join_with_space(words): 단어 리스트에서 각 단어를 공백으로 연결하여 하나의 문자열로 반환count_chars(text, *chars): 텍스트에서 매개 변수로 받은 여러 문자의 각 출현 횟수를 딕셔너리로 반환 (가변 인자 사용)입력 예시:
# 호출 예시
word_list = ["Python", "is", "fun"]
result = join_with_space(word_list)
text = "hello world programming"
print("문자 개수: ", count_chars(text, 'o', 'l', 'r'))
출력 예시:
결합된 문장: Python is fun
문자 개수: {'o': 3, 'l': 3, 'r': 2}
내가 작성한 코드문
word_list = ["Python", "is", "fun"]
def join_with_space(word_list):
result = " ".join(word_list)# join 함수 안쓰고 시도 해보기
return result
text="hello world programming"
tp = ("o", "l", "r")
dic = {}
def count_chars(text, *chars):#함수 안에 반복문 써도 되긴 하고 두개 써보기 o, l, r각각 갯수세기
for i in range(len(chars)):
dic[tp[i]] = text.count(tp[i])# 여기에 int가 들어감
# result = {} # 결과 변수
# 코드를 구현하세요.
return dic
# 위 정의한 함수들 호출하여 결과를 출력하세요.
print(f"결합된 문장: {join_with_space(word_list)}")
print(f"문자개수: {count_chars(text, *tp)}")# tp 언패킹 하거나 tp 변수를 없애거나 둘중 하나의 방식
트러블 슈팅
맨밑에 언패킹 안해준 실수 하고, 이렇게 언패킹 하거나 tp 변수를 없애는 방식 있다 함
그리고 반복문에서도 chars 변수가 튜플((o,l,r),)이 들어가서 임시방편으로 chars[0]을 넣었었다. 그런데 수정 함
다른 사람의 풀이
def join_with_space(word_list):
result = "" # 결과 변수
for i in range(len(word_list)):
result += word_list[i]
if i < len(word_list) - 1:
result += " "
return result
def count_chars(text, *chars):
result = {} # 결과 변수
for char in chars:
count = 0
for c in text:
if c == char:
count += 1
result[char] = count
return result
# 위 정의한 함수들 호출하여 결과를 출력하세요.
word_list = ["Python", "is", "fun"]
result = join_with_space(word_list)
print(f"결합된 문장: {result}")
# 4. 문자 개수 세기 테스트
text = "hello world programming"
print(f"문자 개수: {count_chars(text, 'o', 'l', 'r')}")
## 클래스 정의 (1) Book 클래스
이것도 반복문을 돌려서 result에 추가를 한다면
마지막만 공백이 안들어가게 끔 해야 한다.
이럴려면 조건문을 넣어서 현재 인덱스 변수, 순번이 word_list보다 작은 경우
공백 넣기
아닐 경우 더해지지 않는다.
If i < len(word_list) - 1:
result += " "
여기서도 .count 메서드를 안쓰고 count 변수로 세보는 방법
for char in chars:
count = 0
for t in text:
if char == t:
count += 1
result[char] = count
return result
언패킹 안하고 그냥 튜플을 변수로 넣는 방법도 있다.
책을 표현하는 Book 클래스를 작성하세요.
3개의 책 객체를 생성 후, 각 책의 정보를 출력하고, read() 메서드를 호출하세요.
예시 출력
=== 책 정보 ===
제목: 파이썬 기초
저자: 김코딩
페이지: 350쪽
파이썬 기초을(를) 읽고 있습니다.
=== 책 정보 ===
제목: 자료구조
저자: 이알고
페이지: 420쪽
자료구조을(를) 읽고 있습니다.
=== 책 정보 ===
제목: 웹 개발
저자: 박웹개
페이지: 280쪽
웹 개발을(를) 읽고 있습니다.
내가 작성한 코드문
# 클래스 정의와 객체 생성 및 활용 코드를 작성하세요.
class Book:
def __init__(self, name, author, page):
self.name = name
self.author = author
self.page = page
def get_info(self):
print("=== 책 정보 ===")
print(f"제목: {self.name}")
print(f"저자: {self.author}")
print(f"페이지: {self.page}")
def read(self):
print(f"{self.name}을(를) 읽고 있습니다.")
book1 = Book("웹 개발", "박웹개", 280)
book2 = Book("파이썬의 기초", "김코딩", 350)
book3 = Book("자료구조", "이알고", 420)
book1.get_info()
book1.read()
book2.get_info()
book2.read()
book3.get_info()
book3.read()
은행 계좌를 표현하는 BankAccount 클래스를 작성하세요.
2개의 계좌 객체를 생성하고, 입출금을 수행하세요.
예시 출력
[김철수] 50000원이 입금되었습니다.
[김철수] 30000원이 출금되었습니다.
[김철수] 현재 잔액: 120000원
[이영희] 50000원이 출금되었습니다.
[이영희] 100000원이 입금되었습니다.
[이영희] 현재 잔액: 250000원
내가 작성한 코드문
class BankAccount:
def __init__(self, owner, balance):
self.owner = owner
self.balance = balance
def deposit(self, amount):
self.balance += amount
print(f"[{self.owner}] {amount}원이 입금되었습니다.")
def withdraw(self, amount):
if amount > self.balance:
print(f"[{self.owner}] 잔액이 부족합니다. (현재 잔액: {self.balance}원)")
else:
self.balance -= amount
print(f"[{self.owner}] {amount}원이 출금되었습니다.")
def get_balance(self):
print(f"현재 잔액: {self.balance}")
bank1 = BankAccount("김철수", 100000)
bank2 = BankAccount("이영희", 200000)
bank1.deposit(50000)
bank1.withdraw(30000)
bank1.get_balance()
bank2.deposit(50000)
bank2.withdraw(100000)
bank2.get_balance()
학생을 표현하는 Student 클래스를 작성하세요.
3명의 학생 객체를 생성하고, 각 학생의 정보(print_info)와 합격 여부(is_pass)를 출력하세요.
예시 출력
=== 학생 정보 ===
이름: 김철수
학번: 2024001
평균: 87.66666666666667점
판정: 합격
=== 학생 정보 ===
이름: 이영희
학번: 2024002
평균: 92.0점
판정: 합격
=== 학생 정보 ===
이름: 박민수
학번: 2024003
평균: 55.0점
판정: 불합격
내가 작성한 코드문
class Student:
def __init__(self, name, student_id, scores):
self.name = name
self.student_id = student_id
self.scores = scores
def calculate_average(self):
return sum(self.scores) / len(self.scores)
def print_info(self):
print(f"이름: {self.name}")
print(f"학번: {self.student_id}")
print(f"평균: {self.calculate_average()}점")
def is_pass(self):
if self.calculate_average() >= 60:
print("합격")
else:
print("불합격")
student1 = Student("김철수", 12, [85, 90, 88])
student2 = Student("이영희", 13, [92, 95, 89])
student3 = Student("박민수", 45, [55, 48, 62])
student1.print_info()
student1.is_pass()
student2.print_info()
student2.is_pass()
student3.print_info()
student3.is_pass()
트러블 슈팅
객체 초기화시에 리스트 형태로 점수 안줌
하나의 정수로만 줌.
그리고 평균 구하는 메서드를 계속 활용하는것도 팁이다.
마지막으로 캡슐화 진행