1. 내장함수란 무엇인가 그 갯수는?
[답변]
파이썬 내장 함수는 외부 모듈과 달리 import가 필요하지 않기 때문에
아무런 설정 없이 바로 사용할 수 있는 함수
69개
2. 아래 리스트에서 짝수만 추출하시오 (filter사용)
[리스트]
num = [1, 6, 99, 3, 28, 8, 9, 12, 56, 17, 284]
[답변]
num = [1,6,99,3,28,8,9,12,56,17,284]
def even(i):
if i % 2 == 0:
return i
print(list(filter(even, num)))
3. 클래스에 쓸 수 있는 세가지 변수는
[답변]
지역변수, 전역변수, 클래스 변수
4. if __name__=="__main__": 의 용도는?
[답변]
해당 인터프리터에서 직접 실행했을 경우에만 if 문 내부의 코드를 돌리라는 명령이다.
즉, 현재 모듈 내에서만 코드가 실행되고 import 당했을 시에는 실행하지 않으려 할때 사용
5. '4/0' 을 계산 실행시 에러가 난다.
이때 에러메시지인 "division by zero" 가 나오도록 하세요
[답변]
try :
print(4/0)
except ZeroDivisionError as e :
print(e)
6. 패스를 추가할 때 필요한 라이브러리와 추가하는 방법은?
[답변]
import sys
sys.path.append
7. 아래 클래스에서
나이가 5 이하는 'baby'
13 이하는 'kids'
14 이상이면서 female이면 women's
14 이상이면서 male이면 men's
값을 리턴하는 하는 def 를 생성하시오
[답변]
class Clothes :
def __init__(self, color, fit) :
self.color = color
self.fit = fit
def target(self, age, gender) :
self.age = age
self.gender = gender
result = ""
if age <= 5 :
result = "baby"
elif 5 < age <= 13 :
result = "kids"
elif 14 <= age :
if gender == "female" :
result = "women"
elif gender == "male" :
result == "men"
return result
a = Clothes("red", "1")
a.target(13, "female")
8. 위 클래스를 상속받아 Clothes2를 만들고 부모 클래스의
생성자 함수를 그대로 사용하고 싶은 경우 어떻게 작성해야 하는가
또한 season 이라는 생성자를 추가하고 싶다면?
[답변]
class Clothes2(Clothes) :
def __init__(self, season, color, fit) :
super().__init__(color, fit)
self.season = season
9. 아래 id에서 남자만 골라서 새로운 리스트를 만들어주세요
(단, filter와 lambda를 사용하세요)
[리스트]
id= ['970212-1054321','010101-2054321','020202-1065432','220908-1044444']
[답변]
id_male = list(filter(lambda x : x[7] == '1', id))
10. 다음 Smartphone 클래스를 상속하여 인스턴스 변수 'model'을 추가한
Galaxy 클래스를 만드세요
[Smartphone Class]
class Smartphone :
def __init__(self, brand, price) :
self.brand = brand
self.price = price
[답변]
class Galaxy(Smartphone) :
def __init__(self, brand, price, model) :
super.__init__(brand, price)
self.model = model
11. 두 정수를 입력받아 그 사이에 있는 숫자의 리스트를 출력하세요.(a,b 포함)
단, 문자를 입력할 경우 "문자입니다" 예외처리
[답변]
try :
a, b = map(int, input().split())
if a > b :
a, b = b, a
result = []
for i in range(a, b+1) :
result.append(i)
print(result)
except :
print("문자입니다")
12. num_list = [ 1, ,2, 3, 4] 일 때
map, lambda 를 이용하여 위에서 추출한 리스트에 *2 를 한 리스트를 만드시오.
[답변]
num_list = [ 1, 2, 3, 4]
num_list = list(map(lambda x: x*2, num_list))
num_list
13. 아래의 리스트에서 짝수만 추출하시오.
filter, lambda 사용
[리스트]
num = [1,6,99,3,28,8,9,12,56,17,284]
[답변]
num = [1,6,99,3,28,8,9,12,56,17,284]
list(filter(lambda x:x%2==0, num))
14. filter를 사용해 아래 data에서 여자를 구분해보세요
[data]
data =
[{'name':'영자','gender':'여자'},
{'name':'옥순','gender':'여자'},
{'name':'광수','gender':'남자'},
{'name':'순자','gender':'여자'}]
[답변]
list(filter(lambda x:x["gender"] == "여자", data))
15. 클래스 이름 : 주문(Order)
생성자 인자 : 주문메뉴(menu), 손님이름(name)
count 를 0 에서부터 주문이 들어올 때마다(클래스가 생성될 때마다) 1 씩 늘리면서
손님(클래스)마다 count 를 부여해준다 주문을 받은 순서(count)가 3 의 배수인 분들에게
"이벤트 당첨!" 이라는 문구를 보여드리는 event 메소드를 만들어주세요
[답변]
class Order() :
def __init__(self, menu, count, name) :
self.menu = menu
self.name = name
self.count = count
self.count += 1
def event(self) :
if self.count % 3 == 0 :
print("이벤트 당첨!")
else :
print("아쉽습니다")
c1 = Order("coffee",3, "철수")
c2 = Order("beer",2, "영희")
c3 = Order("soju",5, "길동")
16. 아래와같은 리스트 a에서 "KOR" 문자열을 제거해주세요
pop 사용
[리스트]
a = ["C#" ,"C++" ,"C", "KOR","JAVA" ,"R" ,"Python"]
[답변]
a.pop(3)
[풀이답변]
for i,j in enumerate(a) :
if a[i] == "KOR" :
a.pop(i)
int : 안에 들어온 값을 정수형태로 돌려주는 함수
int(x, 진수단위) : radix 진수로 표현된 문자열 x를 10진수로 변환하여 돌려준다
예를 들어
2진수 숫자 11의 10진수 값을 보고 싶다면
>>> int('11', 2)
3
16진수로 표현된 1A의 10진수 값은
>>> int('1A', 16)
26
isinstance(object, class) : 첫번째 인수로 인스턴스 명, 두번째 인수로 클래스 이름을 받는다. 입력으로 받은 인스턴스가 그 클래스의 인스턴스인지 판단하여 True, False로 돌려준다
>>> class Person :
pass
>>> a = Person()
# a가 Person클래스의 인스턴스인지 확인
>>> isinstance(a, Person)
True
>>> b = 3
>>> isinstance(b, Person)
False
map(f, iterable) : 함수(f)와 반복가능한(iterable) 자료형을 입력으로 받는다.
→입력받은 자료형의 각 요소를 함수가 수행한 결과를 묶어 돌려주는 함수 (원본 리스트는 변경하지 않고 새 리스트를 생성한다)
# 리스트의 모든 요소를 정수로 변환하는 코드
>>> a = [1.2, 2.5, 3.1, 4.6]
>>> for i in range(len(a)) :
a[i] int(a[i])
>>> a
[1, 2, 3, 4]
# 반복하면서 요소를 변환하는 for 형식을 대신하여
# map을 사용하여 a 리스트를 int()에 넣어서 정수를 만들겠다
>>> a = list(map(int, a))
>>> a
>>> [1, 2, 3, 4]
# input().split() 과 map
# 가끔 input().split() 으로 여러 개의 값을 입력받고
# 정수, 실수로 변환할 때도 map을 사용했었다.
# 들어온 문자열 값을 int로 변환하겠다
>>> map(int, input().split())
pow(x, y) : 거듭제곱. x를 y제곱한 결과값을 돌려주는 함수
round : 숫자를 입력받아 반올림해주는 함수
>>> round(4.6)
4
# (응용)소수점 2자리까지만 반올림 하겠다
>>> round(3.141592, 2)
3.14
사전 처리(jupyter lab)
pip install folium
pip install openpyxl
import pandas as pd
import os
import folium
import openpyxl
파일 불러오기
pd.read_excel("서울지역대학교위치.xlsx")

>>> df = pd.read_excel("서울지역대학교위치.xlsx")
# 한개의 칼럼에만 접근
>>> df.대학교
0 KAIST 서울캠퍼스
1 KC대학교
2 가톨릭대학교(성신교정)
3 가톨릭대학교(성의교정)
4 감리교신학대학교
5 건국대학교
6 경기대학교 서울캠퍼스
7 경희대학교 서울캠퍼스
8 고려대학교
9 광운대학교
10 국민대학교
for i, j, k in zip(df.대학교, df.위도, df.경도) :
print(i, j, k)

# lacation = 입력한 위, 경도 좌표를 기준으로 지도를 그릴수 있다
# zoom_start = 확대의 정도를 지정할 수 있다. 최대 18
seoul_map = folium.Map(location=[37.55, 126.98], zomm_start = 12)
seoul_map

# 만들어진 'seoul_map' 위에 마커 찍기
# location = 마커를 추가할 위 경도 좌표를 입력
# popup = 마우스 클릭시 표기되는 문구
# tooltip = 마우스 오버시 표기되는 문구
for name, lat, long in zip(df.대학교, df.위도, df.경도) :
folium.Marker([lat, long], tooltip=name).add_to(seoul_map)
seoul_map

2차원 리스트는 리스트 안에 리스트를 넣는 형태로 만들 수 있다.
list = [값, 값], [값, 값], [값, 값]]
>>> a = [[10, 20], [30, 40], [50, 60]]
>>> a
[[10, 20], [30, 40], [50, 60]]
위는 가로2 세로3 의 2차원 리스트를 만든것이다.
리스트 뒤에 대괄호([ ]) 두번으로 세로인덱스와 가로 인덱스를 지정해주면 된다
>>> a = [[10, 20], [30, 40], [50, 60]]
>>> a[0] [0] # 세로 인덱스 0, 가로 인덱스 0인 요소 출력
10
만약 사람이 알아보기 쉽도록 2차원 리스트의 사각형 구조를 유지하도록 출력하려면 pprint를 사용하면된다
>>> from pprint import pprint
>>> # indent는 들여쓰기 칸 수, width는 가로 폭
>>> pprint(a, indent=4, width=20)
[ [10, 20],
[30, 40],
[50, 60]]
1) for 반복문 한번
# 리스트 a에서 요소 두 개를 꺼내자
>>> a = [[10, 20], [30, 40], [50, 60]]
>>> for x, y in a:
... print(x, y)
...
10 20
30 40
50 60
2) for 반복문 두 번
>>> a = [[10, 20], [30, 40], [50, 60]]
>>> for i in a :
for j in i :
print(j, end=' ')
print()
>>>
10 20
30 40
50 60
3) for와 range
# 가로 세로 크기를 지정해 인덱스로 접근해보기
# 세로 크기
for i in range(len(a)) :
# 가로 크기
for j in range(len(a)) :
print(a[i][j], end=' ')
print()
4) while 반복문 한번
i = 0
# 리스트의 세로 크기만큼 반복하겠다
while i < len(a) :
# 요소 두개를 한번에 가져와 각각 담아주기
x, y = a[i]
print(x, y)
i += 1
5) while 반복문 두 번
i = 0
# 세로 크기
while i < len(a) :
# 안에 지정해줘야 돌때마다 초기화 되어 행에 있는 값들 모두 출력
j = 0
# 가로 크기
while j < len(a[i]) :
print(a[i][j], end=' ')
j += 1
print()
i += 1
# for 문 한번 사용하기
>>> a = [[0] * 2 for i in range(3)]
>>> a
[[0, 0], [0, 0], [0, 0]]
# for 문 두번 사용하기
>>> a = [[0 for j in range(2)] for i in range(3)]
>>> a
[[0, 0], [0, 0], [0, 0]]
# 톱니형(일정하지 않은 모양) 만들기
>>> a = [[0] * i for i in [3, 1, 3, 2, 5]]
>>> a
[[0, 0, 0], [0], [0, 0, 0], [0, 0], [0, 0, 0, 0, 0]]
sorted(반복가능한객체, key=정렬함수, reverse=T or F)
아래는 학생 정보가 저장된 2차원 리스트를 정렬하는 예시이다
students = [
['john', 'C', 19],
['maria', 'A', 25],
['andrew', 'B', 7]
]
# 안쪽 리스트의 인덱스 1을 기준으로 정렬
print(sorted(students, key=lambda student: student[1]))
'''
높이 2, 세로크기 4, 가로크기 3인
3차원 리스트를 만드세요
'''
>>> a = [[[0 for col in range(3)] for row in range(4)] for depth in range(2)]
>>> a
[[[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]],
[[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]]]
3차원 리스트는 2차원 리스트가 여러겹 있는 모양이다. 따라서 한 면을 완성한 다음 다른 면을 완성하는 방식으로 작성해야 한다
replace("기존 문자열", "바꿀 문자열")
문자열 자체는 변경하지 않으며 결과만 보여주기 때문에, 바뀐 결과를 유지하고 싶다면 변수에 재할당 해주어야 한다.
>>> 'Hello, world!' = a
>>> a.replace('world', 'Python')
'Hello, Python!'
>>> a
'Hello, world!'
>>> a = a.replace('world', 'Python')
>>> a
'Hello, Python!'
str.maketrans('기존 문자열', '새로운 문자')
# 주어진 문자열에서 a, e, i, o, u 가 있다면
# 1, 2, 3, 4, 5 로 치환하겠다는 말
>>> table = str.maketrans('aeiou', '12345')
>>> 'apple'.translate(table)
'1ppl2'
split(구분자)
주어진 구분자를 기준으로 문자열을 분리, 리스트로 만든다.
>>> 'apple, pear, grape, pineapple, orange'.split(', ')
['apple', 'pear', 'grape', 'pineapple', 'orange']
'구분자'.join(리스트)
구분자 문자열과 문자열리스트의 요소를 연결해준다.
# 공백으로 연결하겠다
>>> ' '.join(['apple', 'pear', 'grape', 'pineapple', 'orange'])
'apple pear grape pineapple orange'
# -로 연결하겠다
>>> '-'.join(['apple', 'pear', 'grape', 'pineapple', 'orange'])
'apple-pear-grape-pineapple-orange'
strip, lstrip, rstrip()는 공백을 제거 할때 뿐 아니라 특정문자를 삭제할 때도 사용할 수 있는데 ('삭제할 문자들') 을 넣어주면된다
# 왼쪽의 특정 문자 삭제하기
>>> ', python.'.lstrip(',.')
' python.'
# 오른쪽의 특정 문자 삭제하기
>>> ', python.'.rstrip(',.')
', python'
# 양쪽의 특정 문자 삭제하기
>>> ', python.'.rstrip(',.')
', python'
string 모듈의 punctuation에는 모든 구두점이 들어있다. strip 메소드에 string.punctuation을 넣으면 문자열 양쪽의 모든 구두점을 간단히 삭제할 수 있다.
>>> import string
>>> ', python.'.strip(string.punctuation)
' python'
>>> string.punctuation
'!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~'
문자열 메서드는 처리한 결과를 반환하도록 만들어져있다. 따라서 메서드를 계속 연결하며 호출하는 메서드 체이닝(method chaining)이 가능합니다.
지정된 길이에 맞춰서 문자열의 왼쪽에 0을 채운다.
>>> '35'.zfill(4) # 숫자 앞에 0을 채움
'0035'
>>> 'hello'.zfill(10) # 문자열 앞에 0을 채울 수도 있음
'00000hello'
find('찾을문자열')
특정 문자열을 찾아 없다면 -1을 있다면 그 위치(인덱스)를 반환한다. 단, 하나만 찾는다
# find는 왼쪽부터 문자열을 찾는다.
# 같은 문자열이 여러개일 경우 처음 찾은 문자열의 인덱스를 반환
>>> 'apple pineapple'.find('pl')
2
# rfind()는 오른쪽부터 탐색하여 인덱스 반환
>>> 'apple pineapple'.rfind('pl')
12
index('찾을 문자열')
마찬가지로 왼쪽에서부터 특정 문자열을 찾아 인덱스를 반환한다. 단, index()의 경우 찾는 문자열이 없으면 에러를 발생시킨다.
# 찾을 문자열이 여러개일 경우 처음 찾은 문자열의 인덱스만 반환시킨다
>>> 'apple pineapple'.index('pl')
2
# rindex('찾을문자열')은 오른쪽에서부터 특정 문자열을 찾아서 인덱스를 반환
>>> 'apple pineapple'.rindex('pl')
12
count('문자열')
현재 문자열에서 특정 문자열이 몇번이나 나오는지 알아낸다.
>>> 'apple pineapple'.count('pl')
2
입력된 수의 구구단 결과 값만 모여있는 리스트를 만들어주세요
1.
def GuGu(n) :
result = []
for i in range(1, 9+1) :
result.append(n * i)
return result
2.
def GuGu(n):
result =[n*i for i in range(1,10)]
return result
3.
def GuGu(n) :
result = []
i = 1
while i < 10 :
result.append(n*i)
i += 1
return result
1부터 100 사이에 있는 3의 배수와 5의 배수들을 모두 합하는 프로그램을 만들어보자
1.
def hap() :
i = 0
result = 0
while i < 100:
i += 1
if i%15 == 0 :
result += i
elif i%3 == 0 or i%5 == 0:
result += i
return result
2.
def hap() :
result = 0
for i in range(1, 100+1) :
if i%15 == 0 :
result += i
elif i%3 == 0 or i%5 == 0 :
result += i
return result
3.
def hap():
result = [i for i in range(1,100+1) if i % 3 == 0 or i % 5 == 0]
return sum(result)
게시물의 총 건수와 한 페이지에 보여 줄 게시물 수를 입력으로 받아, 총 페이지 수를 출력하는 프로그램 작성
# 게시물의 총건수 m, 한페이지에 보여줄 게시물 수 n
def getTotalPage(m, n) :
if m % n == 0 :
return m // n
else :
return m // n + 1
getTotalPage(15, 10)