본문 바로가기
프로그래밍/Python & Django

[파이썬 인강] 2주차 - 반복문,튜플, 함수, 클래스, 상속

by Cloud_Park 2021. 11. 11.

[파이썬 인강] 2주차

2021.11.11 - [프로그래밍/Python & Django] - [파이썬 인강] 1주차 파이썬 기본 문법 환경설정 및 Python 기본(Mac)

2021.11.11 - [프로그래밍/Python & Django] - [파이썬 인강] 1주차 파이썬 기본 문법 환경설정 및 Python 기본(Mac)

 

이번 주차에는 다양한 자료형과 클래스, 상속에 대해 배웠습니다 기본문법은 알고 있어 어려움은 없었고  미디어를 통해 배우는게 편하면  인강은 추천드리나 점프투 파이썬 검색하시면 예제나 소스코드 볼 수 있습니다.

해당 부분을 통해 배워도 나쁘지 않다고 생각됩니다.  

 

클래스,인스턴스와 상속의 개념을 잘 모르시는 분들에게 저만의 간단한 비유가 있는데,

클래스는 붕어빵 틀

인스턴스 선언 는 붕어빵틀로 구운  붕어빵( 붕어빵이란 점은  같으나(같은 종류의 객체) 각각은1번틀에서 구운 것, 2번틀에서 구웠다고 사장님이 이름(인스턴스 이름)을 부여했다.   

상속은 사장님이 다리달린 붕어빵을 만들기 위해 기존의 붕어빵 틀(부모 클래스)에 다리모양을 추가시켰고, 다리붕어빵에 눈은 더 똘망똥망하게 수정(오버 라이딩)했다.

---

위와 같이 이해셨으면 좋겠습니다.

 

 

 

2주차

반복문

반복문 사용이유 : 반복된 부분을 손쉽게 나타내기위해

for i in range(1,101):
	x=int(intput(i, "일차 횟수>>")
  data.append(x)

시퀀스 자료형

  1. 순서가 있는 자료형
  2. 리스트
  3. 문자열
  4. range
  5. 튜플, 딕셔너리

문법

---

for 변수 in 시퀀스문:

명령문

ex)

for a in [1,2,3,4]:

print(a)

---

출력:

1

2

3

4

range객체는 순서가 있는 데이터를 만들어준다

0~99까지의 자료형 → range(0,99)

champions=["beomsoo","base-on","kings"]

for i in champions:
    print(i)

 

문자열 사용 반복문

gogo="let's go"

for go_word in gogo:
    print(go_word)

range함수를 사용한 반복문

for x in range(0,10):
    print(x)

  • range(시작,끝 +1 , 단계)

 

 

while 반복문 /break

for과의 차이점 반복횟수가 있다 없다.

문법

while 조건식:

명령어

증감식

ex)

i=0
while i<10:
	print(i)
	i+=1

무한루프

while true:
	if 조건식:
		break
i=5
while i<= 10 :
    print(i,"번째 다짐")
    i+=1

while True:
    x= input("exit 입력해주세요>>>")
    if x=="exit":
        break

#구구단
x=input("몇 단을 출력할까요>>>")
for i in range(1,10):
    print(x,"*",i,"=",i*int(x))

 

 

 

---

함수

함수 사용하는 이유 : 재사용하기 편하고, 유지보수, 가독성이 좋다

함수의 표현 예제)

print("안녕하세요 base-on")
print("base-on.tistory.com 입니다.")

def printblog(name,address):
    print("안녕하세요",name)
    print(address,"입니다.")

print("base-on","base-on.tistory.com")

형태

def 함수이름():
	명령어 블록

#호출하기
함수이름()

예제1)

def sum(a,b):
    print(a+b)

sum(1,2)

예제2) 반환값이 있는 함수

def sum(a,b):
    return a+b

print(sum(1,2))

 

 

---

튜플와 딕셔너리

튜플

튜플: 시퀀스 자료형 → 순서가 있는 자료형 , 수정 추가,삭제가 불가능(장점 메모리 사용에 효율적), 손실이 없다.

튜플 선언

튜블 =(데이터,데이터)
or
튜플= 데이터,데이터,데이터 
괄호 생략가능

튜플 모양의 종류

a=(3,4,5) #타입이 같을 필요없다
a="base-on",2,False

a=(30) #숫자 30선언으로 취급 
a=(30,)  #뒤에 ,를 넣어준다

a=tuple([1,2,3]) #타입을 변환가능 -> 패킹

패킹(여러개의 데이터를 하나의 변수로 선언)/언패킹(컬렉션의 각각의 데이터를 선언
number=1,2,3
a,b,c=number #순서에 맞게 대입된다.

#a,b=b,a    #a값과 b값을 변경

튜플의 함수

a=1,2,3,4,5,6,2

a.index(1)  -> 0 #1의 자리값
a.count(2)  -> 2 ->2가 몇개 있는가?
max(a)  -> 6  -> 최댓값
min(a)  -> 1  -> 최솟값
sum(a)  ->23  -> 총합

딕셔너리

특징

시퀀스 자료형

사전형태의 자료형 (키:벨류의 형태)

선언방법

딕셔너리 ={키:값 ,키2:값2}

접근방법

딕셔너리[키]

할당/삭제

할당
딕셔너리["키"]=데이터
삭제
del 딕셔너리["키"]

실습

blog = {"base-on":29,"test-blog":2}
blog2 = {
    "base-on":[1,2,3,4,5],
    "test-blog":(6,7,8,9,0)
}

double_dic={
    "base-on":{
        "address":"base-on.tistory.com"
    }
}

print(blog)
print(blog2)
print(double_dic)

특정값 출력

print(blog["base-on"])
print(blog2["test-blog"])
print(double_dic["base-on"]["address"])

for item in blog.items():
    print(item)

for key in blog.keys():
    print(key)

for value in blog.values():
    print(value)

 

 

---

클래스와 객체

클래스 : 객체를 만들기 위한 설계도

객체: 설계도로 만들어낸 제품

클래스 (속성 → 설정값, 메서드→ 행위)

클래스 선헌

class 클래스이름:
	def 메서드 이름(self):
		명령블록

객체 호출

인스턴스=클래스이름()
인스턴스.메서드()

클래스의 생성자와 _ init_ 함수

생성자 : 클래스를 호출할때 처음으로 호출되는 함수

class Monster:
	def __init__(self,health,attack,speed):
		self.health=health
		self.attack=attack
		self.speed=speed

#선언 
goblin=Monster(800,200,100)

메서드 추가

class Monster:
	def __init__(self,health,attack,speed): # 생성자 선언
		self.health=health
		self.attack=attack
		self.speed=speed
	def decrease_health(self,num):
		self.health-=sum
	def get_health(self):
		return self.health

#선언 
goblin=Monster(800,200,100)
메서드 사용
goblin.decrease_health(100)
goblin.get_health()

상속

클래스를 상속(가져와서) 받아서 변형 할 수 있고 상속하는 클래스는 자식 클래스, 상속되는 클래스는 부모클래스

부모클래스 정의

class Monster: #부모 클래스 이름
	def __init__(self,name,health,attack): #생성자 생성
		self.name=name
		self.health=health
		self.attack=attack

	def move(self): #메서드 생성
		print("move")

상속받기

class Wolf(Monster):
	pass
class Shark(Monster):
	pass
class Dragon(Monster):
	pass

#각각의 상속받은 클래스는 부모클래스
class Wolf(Monster):
	pass #정의만 할때 사용
class Shark(Monster):
	def move(self): #오버라이딩: 부모의 메서드를 동일하게 정의하므로써  자식만의 메서드를 수정함
		print("헤엄치기:)
class Dragon(Monster):
	def move(self):
		print("날기")

#각각의 상속받은 클래스는 부모클래스인 Monster의 속성과 메서드를 사용할 수 있다.

오버라이딩의 내용이 부족해 오버라이딩에 대해 설명을 보충하겠습니다.

오버라이딩: 예제를 통해 설명하겠습니다. (부모클래스는 위의 예제 Monster)

import random
class Dragon(Monster):
		def __init__(self,name,attack,skills):# 스킬이라는 속성을 추가하여 오버라이딩 Dragon생성 스킬애대해  추가
			super().__init__(name,health,attack):
			self.skills=skills

		def move(self):
			print(f"[{self.skill}] 날기")

		def skill():
			print(f"[{self.skills}] 스킬 사용  {self.skills[random.randint(0,2)]}"})