1. lambda 명령어는 return이 없어도 결과값을 돌려준다
[답변] o
2. lambda는 어떠한 함수인가?
[답변] 익명
3. 입력된 값을 a+b하는 add 함수를 작성하세요
[답변]
def add(a,b) :
return a+b
4. 1부터 100까지의 숫자합을 while문으로 구하세요
[답변]
i = 1
sum = 0
while i < 101 :
sum += i
i += 1
print(sum)
5. 1부터 45까지 중에서 6개 숫자를 임의로 고르고 오름차순으로 정리하시오
[답변]
import random
num = []
for i in range(6) :
a = random.randint(1, 45)
num.append(a)
sorted(num)
6. 리턴값이 딕셔너리로 나오는 함수를 만드시오
[답변]
def diction(**args) :
dic = {**args}
return dic
diction(a = 1, b = 3, c = "Hello")
7. 이스케이프 문자를 한가지 이상
[답변] \n \t \' \" \\
8. 함수를 만드는 과정 중 print와 return의 차이점은?
[답변]
return 값은 연산이 가능하지만
print는 출력이기 때문에 결과물을 보여주기만 하고 연산 불가능
9. while문으로 1부터 30까지 출력하는데, 3의 배수는 "짝" 으로 출력
[답변]
i = 0
while i < 30 :
i+= 1
if i % 3 == 0:
print("짝")
continue
print(i)
10. 3개의 숫자를 입력받고 최댓값과 최소값의 차이를 구해주는 함수를 만들어주세요
[답변]
def max_min(a,b,c) :
max_min = [a,b,c]
return int(max(max_min)) - int(min(max_min))
11. 아래 코드를 한줄로 변경해보세요
[코드]
a = [1, 2, 3, 4]
b = []
for i in a :
if i%2 == 0 :
b.append(i*3)
[답변]
b = [i*3 for i in a if i % 2 == 0]
b
12. 입력한 두 수 사이에 있는 값들의 합을 구해주는 함수 만들기
[코드]
1)
def add(a, b) :
sum = 0
li = [a, b]
for i in range(min(li), max(li)+1):
sum += i
return sum
2)
def add(a, b) :
sum = 0
if a > b :
a, b = b, a
for i in range(a, b+1) :
sum += i
return sum
파일을 생성하기 위해 내장함수 open을 사용해볼 것이다.
파일 객체 = open(파일이름, 파일 열기 모드)
파일 열기 모드에는 다음과 같은 것이 있다
r : 읽기모드
w : 쓰기모드
a : 추가모드
만약 이미 있는 파일을 쓰기모드로 열 경우, 이미 존재하던 내용이 모두 사라지기 때문에 주의해야 한다.
f = open("new.txt", 'w')
f.write("Hello")
f.close()

f = open("new.text", 'a')
for _ in range(10) :
f.write("Hello \n")
f.close()

사용법은 크게 다르지 않다. 단, f.close가 없다
with open("new.txt", "w") as f :
f.write("good \n")

with open("new.txt", "a") as f :
f.write("\n")
for _ in range(10) :
f.write("good \n")

f = open("new.text", 'r')
data = f.readlines()
print(data)
f.close()
위와 같이 사용하면 아래와 같은 결과물이 나오는 것을 알 수 있다

그렇다면 for문을 사용해 한 줄씩 뽑아내면 되지 않겠는가
f = open("new.text", 'r')
# 담을 변수 = 파일 객체.readlines()
data = f.readlines()
for i in data :
print(i, end="")
f.close()
f = open("new.text", 'r')
data = f.read()
print(data)
f.close()
-> 당연히 with open() as f 가능하다
with open("new.text", 'r') as f :
data = f.readlines()
for i in data :
print(i, end="")
[문제 1]
0번째 입니다
...
10번째 입니다
[답변]
with open("new.text", 'w') as f :
for i in range(10):
f.write(f"{i+1}번째 입니다 \n")
[문제 2]
만들어진 파일을 읽어오세요
[답변]
with open("new.text", "r") as f :
data = f.readlines()
for i in data :
print(i, end="")
[문제 3]
Life is good 문자열을 저장한 후 다시 그 파일을 읽어서 출력하는 코드를 작성하였다.
하지만 예상한 Life is good 문장을 출력하지 않는다. 수정해보자
[코드]
f1 = open("test.txt", 'w')
f1.write("Life is good")
f2 = open("test.txt", "r")
print(f2.read())
[답변]
f1 = open("test.txt", 'w')
f1.write("Life is good")
f1.close()
f2 = open("test.txt", "r")
print(f2.read())
f2.close()
쓰기모드가 켜진채 꺼지지 않았기 때문에 제대로 출력이 되지 않았던 것 같다.
[문제 4]
show_file()이라는 함수를 만들어서 파일이 출력되도록 만들어보자
[답변]
def show_file(a) :
f1 = open(a, "r")
print(f1.read())
show_file("test.txt")
[문제 5]
이름과 나이를 입력받아 people.txt 만들기
단, while문을 사용해 빈칸을 입력하면 종료되도록
[답변]
f = open("people.txt", "w")
while True :
name = input('name : ')
if name == "":
break
else :
age = input('age : ')
f.write(f"name : {name} / age : {age} \n")
f.close()
f = open("people.txt", "r")
print(f.read())
[문제 6]
다음과 같은 내용을 지닌 파일이 있다.
이 내용중 "java" 를 "python"으로 바꾸어 저장해라
[문자열]
Life is good
i need java
[코드]
f = open("test.txt", "r")
body = f.read()
f.close()
body = body.replace("java", "python")
f = open("test.txt", "w")
f.write(body)
f.close()
[문제 7]
홍길동 씨의 평균점수를 구해보세요
[코드]
kor = 80
eng = 75
mat = 55
print((kor + eng + mat)/3)
[문제 8]
홍길동씨의 주민등록번호는 881120-1068234이다.
연월일과 숫자부분으로 나누어 출력하시오
[코드]
홍 = "881120-1068234"
yyyymmdd, num = 홍.split("-")
print(yyyymmdd)
print(num)
[문제 9]
a = ['Life', ' is', ' too', ' short']
위 리스트를 Life is too short 문자열로 만들어 출력하세요
[코드]
result = "".join(a)
result
[문제 10]
a = [1, 1, 1, 2, 2, 3, 3, 3, 3, 4, 4, 5]
위 리스트에서 중복 숫자를 제거해보자
[코드]
aSet = set(a)
b = list(aSet)
print(b)
[문제 11]
while 문을 사용해 1부터 100까지의 자연수 중 4의 배수 합을 구해라
[코드]
result = 0
i = 1
while i <= 100 :
if i % 3 == 0 :
result += i
i += 1
집합 자료형 set()에 리스트나 문자열을 입력하여 만들 수도 있다
[특징]
-중복을 허용하지 않는다
-순서가 없다 → 인덱싱으로 값을 얻을 수 없다
∴ set자료형에 저장된 값을 인덱싱으로 접근하려면 리스트나 튜플로 변환 후 접근 해야한다.
리스트 안에 for문을 사용하면 조금 더 직관적으로 작성할 수 있다.
for num in a :
result.append(num*3)
위와 아래는 같은 계산을 한다
result = [num * 3 for num in a]
일반 문법은 다음과 같다.
[표현식 for 항목 in 반복 가능 객체 if 조건]
예를 들어
result = [num * 3 for num in range(10) if num%2 == 0 ]
result
> [0, 6, 12, 18, 24]
리스트 중에서 홀수에만 2를 곱하여 저장하는 다음 코드가 있다
number = [1, 2, 3, 4, 5]
result = []
for n in number :
if n%2 == 1 :
result.append(n*2)
이를 리스트 내포를 사용해 표현해보자
number = [1, 2, 3, 4, 5]
result = [n * 2 for n in number if n%2 == 1]
result
기본모양
class 클래스이름 :
# 메서드의 첫번째 매개변수는 반드시 self 지정
def 메서드(self) :
코드
예시
class Person :
def greeting(self) :
print("Hello")
위에서 클래스를 작성해줬다면 사용하기 위해 변수에 할당
a = Person()
할당하고 나면 클래스 안에있는 메서드를 호출할 수 있다
a.greeting()
이때 Person()이 할당된 변수 a를 인스턴스(instance)라고 한다. 클래스는 특정 개념(메소드)들을 담고 있을 뿐 사용하기 위해서는 이렇게 인스턴스를 생성해야 한다.
또한 메서드를 호출하려면 이 인스턴스를 통해 호출하면된다. 이렇게 인스턴스를 통해 호출하는 메서드를 인스턴스 메서드 라고 한다.
# 사칙연산 클래스 만들기
class FourCal() :
def setdata(self, first, second) :
self.first = first
self.second = second
def add(self) :
result = self.first + self.second
return result
def mul(self) :
result = self.first * self.second
return result
def sub(self) :
result = self.first - self.seccond
return result
def div(self) :
result = self.first / self
return result
a = FourCal()
a.setdata(1, 2)
a.add()
보통 객체만 지칭할때는 object(객체)라고 부르지만 클래스와 연관지어서 말할때는 instance(인스턴스)라고 부르는것
속성(attribute)을 만들 때는 __init__ 메서드 안에서 self.속성에 값을 할당
class 클래스이름:
def __init__(self):
self.속성 = 값
__init__ 메서드는 인스턴스에 클래스를 할당하는 것(ex) a = Person()) 처럼 클래스에 괄호를 붙여서 인스턴스를 만들때 호출되는 특별한 메서드
이 메서드는 파이썬이 자동으로 호출해주는 메서드라 special method 또는 magic method 라고 부르기도 한다.
말그래도 자기 자신을 의미한다. __init__의 매개변수 self에 들어가는 값은 할당해줬던 클래스(ex. Person()) 이라고 할 수 있다. 클래스의 구성을 생각할때 정형화된 구문으로 기억해주면 괜찮은 것 같다.
class Person() :
def __init__(self, name, age, address) :
self.hello = "반갑습니다"
self.name = name
self.age = age
self.address = address
def greeting(self) :
print("{0} 저는 {1} 입니다".format(self.hello, self.name))
mimi = Person("mimi", "25", "서초구 반포동")
mimi.greeting()
print("이름 : ", mimi.name)
print("나이 : ", mimi.age)
print("주소 : ", mimi.address)
__init__ 메서드에서 self 뒤에 있는 매개변수에 차례대로 들어간다.self.속성 형식이였다면, 클래스 바깥에서 속성에 접근할 때는 인스턴스.속석의 형식으로 접근하면 된다. 이렇게 인스턴스를 통해 접근하는 속성을 인스턴스 속성 이라 한다.*args를 사용하면 된다. 매개변수에서 값을 가져오려면 args[0] 처럼 사용
class Person:
def __init__(self, *args):
self.name = args[0]
self.age = args[1]
self.address = args[2]
maria = Person(*['마리아', 20, '서울시 서초구 반포동'])
**kwars를 사용한다. 매개변수에서 값을 가져오려면 kwargs['name'] 과 같이 사용
class Person:
def __init__(self, **kwargs): # 키워드 인수
self.name = kwargs['name']
self.age = kwargs['age']
self.address = kwargs['address']
maria1 = Person(name='마리아', age=20, address='서울시 서초구 반포동')
maria2 = Person(**{'name': '마리아', 'age': 20, 'address': '서울시 서초구 반포동'})
변수 앞에 __ 를 붙여서 비공개 속성으로 만든다.
클래스 밖에서 값을 막 변경하거나 주무를 수 없도록 직접 접근을 막은것
class Person:
def __init__(self, name, age, address, wallet):
self.name = name
self.age = age
self.address = address
# 비공개 메서드 wallet
self.__wallet = wallet
# maria = Person() -- Error
maria = Person('마리아', 20, '서울시 서초구 반포동', 10000)
# maria.__wallet -= 10000 # Error
이를 사용하고 싶다면 클래스 내에서 저 값을 사용하는 함수를 생성해주면 된다.
class Person:
def __init__(self, name, age, address, wallet):
self.name = name
self.age = age
self.address = address
# 비공개 메서드
self.__wallet = wallet
def pay(self, amount):
# 비공개 속성은 클래스 안 메서드에서만 접근가능
self.__wallet -= amount
print('이제 {0}원 남았네요.'.format(self.__wallet))
-클래스 밖에서 접근할 수 있는 속성을 공개속성(public attribute)
-클래스 안에서만 접근할 수 있는 속성을 비공개속성(private attribute)
연습문제 : 게임 캐릭터 클래스 만들기
class Knight() :
def __init__(self, health, mana, armor) :
self.health = health
self.mana = mana
self.armor = armor
def slash(self) :
print("베기")
x = Knight(health=542.4, mana=210.3, armor=38)
print(x.health, x.mana, x.armor)
x.slash()
상속할 때 할 수 있는 재정의. 이름은 같지만 기능은 다르게 주고 싶을 때 상속 받은 자식 단계에서 메서드를 재정의 해주는 일.