내일배움캠프/TIL

[TIL]250121_파이썬 print의 옵션, 딕셔너리 형태의 key, value이용법

dydatablog 2025. 1. 21. 22:13

FACTS :

  • ✅ [오전] 파이썬300제 11~20
  • ✅ [오전] 파이썬 코드카타 1문
  • ✅ [오전] 베이직반 복습 정리
  • [ ] [오후] 머신러닝 심화 강의 2주차
  • [ ] [오후] 베이직반 복습
  • 🔺 [오후] 머신러닝 개인과제 1~4번 -> 1,2번 완료

FEELINGS : 파이썬으로 치이고,, 머신러닝으로 치이는 하루하루를 보내는 중이다. 튜터님들은 안심시켜주시려고 "어렵지만 괜찮아요!! 할 수 있어요!!" 라고 해주시지만 밥아저씨가 "참 쉽죠?"하는 느낌~ 파이썬은 알다가도 모르겠고 머신러닝은 그냥 모르겠다.

그래도 파이썬은 확실히 베이직반을 들어서 그런지 점점 익숙해지는 기분이다. (실력과는 별개로ㅎ) 정말 많이 해볼 수록 느는건 어쩔 수 없는것 같다. 멘붕에 늪에 빠지지 말고 꾸준히 반복, 반복, 반복!

아니요..하낫두 안쉬워요..

 

- FINDINGS :

[파이썬] print() 함수의 두가지 옵션: sep, end

[파이썬] 딕셔너리 형태 {key : value} 일 때, df.values로 딕셔너리 안에 있는 value 값들만 추출 가능.


파이썬 300제

009 print 줄바꿈

다음 코드를 수정하여 줄바꿈이 없이 출력하세요. (힌트: end='') print 함수는 두 번 사용합니다. 세미콜론 (;)은 한줄에 여러 개의 명령을 작성하기 위해 사용합니다.

print("first");print("second")
#출력: 
first
second
print("first", end='');print("second")
#출력: firstsecond

print() 함수의 옵션:

- sep=" " 

출력할 값들 사이에 삽입할 문자를 지정. 기본값은 공백(" ")이며, 원하는 다른 문자를 넣어 출력 형식을 변경가능.

- end=" "

함수가 출력된 후 추가할 문자를 지정. 기본값은 개행 문자(\n). 원하는 문자나 공백을 넣을 수 있다.


알고리즘 코드카타

43. 크기가 작은 부분문자열

#오류코드
def solution(t, p):
    answer = 0
    number = []
    for i in range(len(t)-len(p)+1): # t의 길이에서 p의 길이를 빼고 +1한 만큼 반복 -> t에서 p와 같은 길이의 문자열 추출
        number.append(t[i:len(p)+i]) # number에 i~(p길이+i)인 인덱스 만큼 추가
# 부분 문자열들이 p보다 작은지 판단
    for i in number: #number의 개수만큼 반복
        if number[i] <= p:
            answer += 1
    return answer

solution('3141592', '271')

❗️오류 : TypeError: list indices must be integers or slices, not str

if numbers[i] <= p

-> 리스트의 인덱스에는 문자열이 올 수 없음

i 에는 number의 각 항목이 순서대로 하나씩 들어가므로, int(i)가 int(p)보다 작으면으로 판단.

for i in number에서 이미 number의 항목들이 하나씩 들어가게 조건을 줬으므로 if 문에서는 numbers가 아니라 i로 쓰면 됨

(예시) number= ['314', '141', '415', '159', '592'] , p = 271 라고 한다면

for i in number:
    if int(i) <= int(p):

(반복문)

if int(314) <= int(271)

if int(141) <= int(271)

if int(415) <= int(271)

if int(159) <= int(271)

if int(592) <= int(271)

#정답코드
def solution(t, p):
    answer = 0
    number = []
    for i in range(len(t)-len(p)+1):
        number.append(t[i:len(p)+i])

    for i in number:
        if int(i) <= int(p):
            answer += 1
    return answer

solution('3141592', '271')

파이썬 베이직반 복습

문제 2 - 학생 성적 관리 시스템

  • 다음 요구사항에 맞게 3개의 함수를 작성하세요.
  1. 학생들의 이름과 성적을 딕셔너리에 저장하고, 출력하는 함수를 작성하세요. (add_student(grades, name, score))
  2. 성적 평균을 반환하는 함수를 작성하세요. (calculate_average(grades))
  3. 최고 점수 학생을 반환하는 프로그램 작성하세요. (find_top_students(grades))
    • 출력결과를 참고하여, 같은 양식으로 출력되도록 함수를 작성하세요.
# 중간과정
student = {'grade': 0, 'name' : 0, 'score' : 0}
def add_student(grades, name, score):
    student['name'] = name
    student['score'] = score
    print(f"Added {name} with score {score}.")
grades = {}
add_student(grades, "Alice", 85)
add_student(grades, "Bob", 92)
add_student(grades, "Charlie", 78)

✔️ 나는 새로운 student라는 딕셔너리를 만들어줬기 때문에 skeleton code와 연동되지 않음

-> skeleton code에 있는 grades = {}만 사용해서 수정

#수정 코드
def add_student(grades, name, score):
    grades[name] = score #grade의 key값 name에 score을 value로 넣는다.
    print(f"Added {name} with score {score}.")


def calculate_average(grades):
    return sum(grades.values())/len(grades) #.values()로 grade의 value값들만 추출
    

def find_top_student(grades):
    top_student = max(grades.values()) #.values()로 grade의 value값들 중에서 최댓값
    top_score = max(grades, key=grades.get) #key=grades.get로 grade의 Key값들 중에서 최댓값
    print(f"Top student: {top_student} with score {top_score}")

# Example usage
grades = {}
add_student(grades, "Alice", 85)
add_student(grades, "Bob", 92)
add_student(grades, "Charlie", 78)

print(f"Average score: {calculate_average(grades):.2f}")
# top_student, top_score = find_top_student(grades)
find_top_student(grades)

 

❗️ 마지막 출력에서 top_student, top_score = find_top_student(grades)가 제대로 작동하지 않음

✔️top_student와 top_score을 따로 지정하는게 아니라 딕셔너리의 key:value값을 이용하여 지정

#정답 코드
def add_student(grades, name, score):
    grades[name] = score #grade의 key값 name에 score을 value로 넣는다.
    print(f"Added {name} with score {score}.")


def calculate_average(grades):
    return sum(grades.values())/len(grades) #.values()로 grade의 value값들만 추출
    

def find_top_student(grades):
    top_student = max(grades, key=grades.get) #grades.get로 점수를 가져와서 max 값을 가진 학생의 이름을 반환
    return top_student, grades[top_student] #가장 높은 점수의 학생의 이름(top_student)과 해당 학생의 점수(grades[top_student])를 반환

# Example usage
grades = {}
add_student(grades, "Alice", 85)
add_student(grades, "Bob", 92)
add_student(grades, "Charlie", 78)

print(f"Average score: {calculate_average(grades):.2f}")
top_student, top_score = find_top_student(grades)
print(f"Top student: {top_student} with score {top_score}")