Notice
Recent Posts
Recent Comments
Archives
04-27 20:01
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
관리 메뉴

줴림이 공부하줴림

[SWEA] [파이썬 프로그래밍 기초(1) 파이썬의 기본 구조와 기초 문법] 9. 내장 함수 본문

Study/SWEA

[SWEA] [파이썬 프로그래밍 기초(1) 파이썬의 기본 구조와 기초 문법] 9. 내장 함수

줴림 2025. 4. 2. 18:56

방으로 돌아오는 길에 학교 메일로 취업스터디 공고가 왔다. 신청할까? 돈 지원해주는데 역시 하는 게 좋으려나. 어쨌든 내장 함수 파트 렛츠고

 

1. 다음의 결과와 같이 이름과 나이를 입력 받아 올해를 기준으로 100세가 되는 해를 표시하는 코드를 작성하십시오.

name = input()
age = int(input())

term = 100-age			# 100세 - (현재 나이) = 100세까지 남은 기간
year = 2019 + term		# 남은 기간에 현재(2019년) 더하면 100세 되는 연도

print("%s(은)는 %d년에 100세가 될 것입니다." % (name, year))

가뿐하게 pass

 

2. ~~ 문자열이 주어지고, A 4, B 3, C 2, D 1점이라고 할 때 문자열에 사용된 알파벳 점수의 총합을 map 함수와 람다식을 이용해 구하십시오.

어... 람다 어떻게 쓰더라... 람다 어떻게 쓰는지 기억 안 나 일단 안 쓰고 풀어봤다.

words = "ADCBBBBCABBCBDACBDCAACDDDCAABABDBCBCBDBDBDDABBAAAAAAADADBDBCBDABADCADC"
word_list = list(words)
count = 0

for i in word_list:
    if i == 'A':
        count += 4
    elif i == 'B':
        count += 3
    elif i == 'C':
        count += 2
    else:
        count += 1

print(count)

하지만 문제에서는 람다를 쓰라고 했으므로 람다를 쓰긴 해야지.

words = "ADCBBBBCABBCBDACBDCAACDDDCAABABDBCBCBDBDBDDABBAAAAAAADADBDBCBDABADCADC"
num_word = list(map(lambda x: ord('E') - ord(x), words))
print(sum(num_word))

하지만 ord 함수(아스키코드로 변환하는 함수) 이용해서 점수 +4, +3, +2, +1 매핑하기.
lambda 함수가 한 번만 쓸 연산의 내용을 작성할 때 사용하는 함수라고 한다 (내가 이해한 대로 쓴거임.. 아니면 말고)
map 함수랑 같이 쓰면 "map(lambda x: ~~, 리스트명)" 이렇게 쓰면 리스트 내 요소에 대해서 각각 연산할 수 있다고 함!!

 

3. 가변형 인자로 정수들을 입력받아 곱을 반환하는 함수를 정의하고, 단, 1, 2, '4', 3와 같이 제대로 입력되지 않은 경우 예외를 처리하는 프로그램을 작성하십시오.

가변형 인자?? 이건 진짜 몰라서 인터넷 찾아봄.

정해지지 않은 수의 파라미터를 받을 때args를 입력하는데, 별표(*) 1개와 함께 입력해야 한다고 한다.
kwargs도 있었는데 이건 나중에...

def multiply(*arg):
    total = 1
    for i in arg:
        total *= arg
        
        
try:
    multiply(1, 2, '4', 3)
except:
    print("에러발생")

 

4. ASCII 코드 값를 입력받아 문자를 확인하는 코드를 작성하십시오.

문자를 아스키코드로 변환하려면 => ord() 함수
그러면 아스키코드를 문자로 변환할 때는??!

모른다. 그래서 또 인터넷의 도움을 빌렸다. chr() 함수를 사용하면 아스키코드를 문자로 변환할 수 있다고 한다!!

num = int(input())
character = chr(num)

print("ASCII %d => %s" % (num, character))

확실히 내장함수를 아니까 편하네... 내장함수 공부 좀 제대로 해야겠다.

 

5. 1~10까지의 정수를 항목으로 갖는 리스트 객체에서 filter 함수와 람다식을 이용해 짝수만을 선택해 리스트를 반환하는 프로그램을 작성하십시오.

filter 함수의 기본형 => filter(적용시킬 함수, 적용할 요소들)
람다식을 사용하고 짝수 찾으라고 했으니까 'x % 2 == 0' 넣으면 될 듯

nums = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
is_even = list(filter(lambda x: x % 2 == 0, nums))
print(is_even)

 

6. 1~10까지의 정수를 항목으로 갖는 리스트 객체에서 map 함수와 람다식을 이용해 항목의 제곱 값을 갖는 리스트를 반환하는 프로그램을 작성하십시오.

nums = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

square_nums = list(map(lambda x: x**2, nums))
print(square_nums)

 

7. 1~10까지의 정수를 항목으로 갖는 리스트 객체에서 filter 함수와 람다식을 이용해 짝수만을 선택한 후, map 함수와 람다식을 이용해 항목의 제곱 값을 갖는 리스트를 반환하는 프로그램을 작성하십시오.

nums = [1, 2, 3, 4, 5, 6, 7, 8, 9 ,10]
is_odd = list(filter(lambda x: x % 2 == 0, nums))
square_odd = list(map(lambda x: x ** 2, is_odd))

print(square_odd)

 

8. 가변형 인자를 전달 받아 가장 큰 값을 반환하는 함수를 정의하고, 다음과 같은 결과를 출력하는 프로그램을 작성하십시오.

def max(*arg):
    max = 0
    for i in arg:
        if i > max:
            max = i
    return max
num =  max(3, 5, 4, 1, 8, 10, 2)
print("max(3, 5, 4, 1, 8. 10, 2) ==> %d" % (num))

역시 test할 때는 제대로 나오지만 제출하니 fail이 뜬다. 왜 틀렸을까?...싶었는데 ==> 가 아니라 =>을 써야했다. 진짜 이 사소한 실수 진짜;;;

 

9. 다음의 결과와 같이 'abcdef' 문자열의 각각의 문자를 키로 하고 0~5 사이의 정수를 값으로 하는 딕셔너리 객체를 생성하고, 이 딕셔너리 객체의 키와 값 정보를 출력하는 프로그램을 작성하십시오.

난 처음에 그냥 딕셔너리로 만들고 출력을 for문 통해서 돌리면 되지 않을까 했는데 계속 오류 나면서 안되더라...
알고보니 enumerate() 함수 안 써서 그랬던 거였음.
참고로 enumerate() 함수는 각 요소의 인덱스랑 값을 함께 반환하는 함수임.

근데 접근도 틀린게, 'abcdef' 문자열이라고 이미 명시됨. 제발 문제 좀 제대로 읽자;;

words = 'abcdef'
words_dic = {}

for k, v in enumerate(words):
    words_dic[k] = v
    print("%s: %s" % (v, k))

 

이번엔 풀면서 생각보다 모르는 내장함수도 꽤 있었고, 난독 이슈도 있었지만... 그래도 자주 쓰이는 내장함수 사용법을 제대로 알아간 것만으로도 만족!