공부/Python

[Python]파이썬의 기초 정리

용팬 2019. 5. 3. 18:40

본 글은 객체지향 언어를 알고있다는 전제 하에서 서술되었습니다. 

개념에 대한 설명은 없습니다.

<입출력>

- 기본

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))

 

eval 함수 사용시 결과

-응용 

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("현역입영 대상이 아닙니다")