[Python]파이썬의 기초 정리
본 글은 객체지향 언어를 알고있다는 전제 하에서 서술되었습니다.
개념에 대한 설명은 없습니다.
<입출력>
- 기본
s = input('나이를 입력해라.')
print('나이 : ', s)
- 정수형, 실수형 입력의 명시화
a = input('나이를 입력하세요: ')
i = int(a)
print(i)
p = input('원주율을 입력하세요: ')
f = float(p)
print(f)
print('입력한 수는' , i , f)
print('입력한 수는' + str(i) + str(f))
#스트링으로 변환하여 붙이면 공백 없이 출력된다.
#변환하지 않으면 그냥 값의 합이 출력된다.
print 함수사용으로 문자열 연결시 콤마(,) 자동으로 형변환한다. 하지만 (+)로 연결을 할 때는 오류가 발생한다.
왜냐하면, '입력한 수는' 이라는 문자열과 int형이 +로 연결되어 있어서 concat인지 단순한 덧셈연산인지 ambiguous하기 때문.
만약 '입력한 수는'에 (,)가 따라오고, 뒤의 두 정수가 (+)로 연결되어 있다면 덧셈 연산으로 인식하고 오류는 발생하지 않는다.
- 자동 형 지정의 eval 함수
e = eval(input("정수 입력 하시오: "))
print(e, type(e))
e = eval(input("실수 입력 하시오: "))
print(e, type(e))
-응용
inputString1,inputString2 = input('두 수를 차례로 입력하시오: ').split()
integer1 = int(inputString1)
integer2 = int(inputString2)
print('두 수의 합은 :', integer1 + integer2)
한 줄에 두개 이상의 입력을 받고 싶을때 사용한다. 스트링으로 입력을 받은 뒤, 스트링 클래스의 split()으로 입력을 나눈 후 int 또는 자신이 원하는 type으로 형 변환 후 사용한다.
<클래스>
-기본
class hajimemashite:
name ="jaypan"
age =0
def __init__(self,name,age):
self.name = name
self.age = age
print("생성자 입니다.")
def __del__(self):
print("소멸자 입니다.")
def jikoshoukai(self):
print("안녕하세요 저는",self.age,\
"살",self.name+"입니다.")
first = hajimemashite("Jaypan",530)
first.jikoshoukai()
생성자 입니다.
안녕하세요 저는 0 살 jaypan입니다.
안녕하세요 저는 0 살 jaypan입니다.
소멸자 입니다.
-클래스 메소드, 인스턴스 메소드
class hajimemashite:
name ="jaypan"
age =0
def __init__(self,name,age):
self.name = name
self.age = age
print("생성자 입니다.")
def __del__(self):
print("소멸자 입니다.")
def jikoshoukai1(self):
print("안녕하세요 저는",self.age,\
"살",self.name+"입니다.")
@classmethod
def jikoshoukai2(self):
print("안녕하세요 저는",self.age,\
"살",self.name+"입니다.")
first = hajimemashite("Jaypan",530)
first.jikoshoukai1()
first.jikoshoukai2()
#hajimemashite.jikoshoukai1()
hajimemashite.jikoshoukai2()
생성자 입니다.
안녕하세요 저는 530 살 Jaypan입니다.
안녕하세요 저는 0 살 jaypan입니다.
안녕하세요 저는 0 살 jaypan입니다.
소멸자 입니다.
클래스 메소드는 @classmethod 를 함수 앞에 명시하여 나타내고, 이는 인스턴스에 따라 다른 값을 가지는 인스턴스 메소드와는 달리 클래스 본연의 데이터를 다룬다. 또한 클래스 명으로 호출이 가능하다.
<함수>
파이썬은 기본으로 빌트인 함수를 제공한다. 例)len(),max(),min(),sum() 등등
dir(__builtins__) 명령으로 그 종류를 확인 할 수 있다.
하지만 사용자의 필요에 따라서 정의하는 함수는 메소드라고 부르며
아래와 같이 사용한다.
def 메소드명(param1, param2 ...):
#statements
return 리턴값
아무런 수행을 하지 않는 함수는 statement부에 pass를 서술한다.
파이썬에서 함수는 클래스이다. (함수클래스, class 'function')
멀티리턴 가능
def plus_and_minus(a,b):
return a+b,a-b
plus_and_minus(10,5)
=> (15,5) #튜플형식반환
가변인자의 전달 가능
def like_pointer(*number):
return sum(number)
calc(1,2,3,4,5)
=> 15
<상속>
class unit_class:
name = 'unit'
def __init__(self,name):
print('유닛 생성~')
self.name = name
def __del__(self)
print('사망')
def person_action(self):
print(self.name,'은 이동가능')
class attack_unit_class(unit_class):
attack_type = 'machine gun attack'
def __init__(self,name,attack_type):
super().__init__(name)
self.attack_type = attack_type
def person_action(self):
super().person_action()
print(attack_type,"의 공격가능")
attack_unit_1 = attack_unit_class('marine','M1 garand gun shot')
##자식 생성자 호출 -> 부모 생성자 호출
attack_unit_1.person_action()
>#marine 은 이동가능
>#M1 garand gun shot 의 공격가능
자식 클래스 정의시 괄호 안에 부모클래스의 이름을 넣어주면 상속 과정을 마칠 수 있으며, 여타 객체지향언어의 다형성, 오버라이딩과 같은 개념은 동일하게 적용된다.
<반복문>
-for반복문
Array_List = ['안녕','하세요','콘니','치와']
for i in Array_List:
print(i)
json = {1:'hello',2:'hi',3:'konni',4:'chiha'}
for a,b in json.items():
print(a,':',b)
string_s = "Good day commander!"
for character_c in string_s:
print(character_c)
iteratable type(리스트, 튜플, 사전, 스트링) 들을 쉽게 처리할 수 있다.
매 출력시 줄띄움을 포함한다.
for i in range(10):
print(i)
0~9로 증가.
for i in range(10,0,-1):
print(i)
10~1로 감소
-for else 반복문
Array_List = [1,3,2,4,5]
for i in Array_List:
print(i)
if i == 0:
print('0을 찾았다.')
break
else:
print('모든 탐색을 마쳤고, 0은 존재하지 않는다.')
for문을 무사히 마쳤을때 else 하의 문장이 실행된다. break로 도중 탈출한 경우 실행 되지 않는다.
-while 반복문
i = 0
while i <= 9 :
i = i+1
print(i)
1~10 출력
-무한루프
while True:
#statements
키보드 인터럽트 Ctrl + C로 빠져나올 수 있음.
<조건문>
age = int(input("나이를 입력하세요 : "))
score = int(input("신체검사 결과를 입력하세요 : "))
# 중첩된 조건문
if age >= 20 :
if score <=3 :
print("현역입영 대상입니다.")
else :
print("사회복무 대상입니다")
else :
print("미성년자입니다")
# 관계/논리 연산자를 사용
if age >= 20 and score <=3 :
print("현역입영 대상입니다")
else :
print("현역입영 대상이 아닙니다")