본문 바로가기
  • Coding & Book
학습단/Python 학습단

3주차 완료입니다.

by 루이3 2023. 7. 21.

학습인증


 

7/17


 

기본값

  • 함수를 호출할때 사용할값을 직접 정의하는것을 기본값이라고 합니다.

 

키워드 인자

  • 함수를 호출할때 전달값 뿐만 아니라 어디에 전달할지 명시적으로 지정하는것을 키워드 인자라고 합니다.
  • 보통 어떤 함수에 전달값이 많고 기본값이 잘 정의 되어 있을때 사용합니다.
  • 키워드 인자에 오타가 있으면 오류가 발생합니다.

 

가변인자

  • 함수를 정의할때 인자의 개수가 유동적일때 사용하는 방법입니다.
  • 함수를 호출할때 몇개의 인자를 사용할지 정해놓지 않고 유동적으로 인자를 받게 합니다.
  • * 기호를 사용하여 표시합니다.

 

def profile(name, age, *lan):
	print("name : {0}, age : {1}".format(name, age))
	print(lan, type(lan))
 
profile("찰리",20,"자바","c")

가변인자 예시

지역변수

  • 함수안에서만 사용할수 있는 변수 입니다.
  • 매개변수를 포함해 함수 안에서 새롭게 정의하는 변수는 모두 해당합니다.

 

전역변수

  • 모든곳에서 사용할수 있는 변수 입니다.
  • global을 변수 앞에 붙이면 전역변수를 함수 안에서 사용하겠다는 의미 입니다.
glasses = 10

def rent(people):
    global glasses
    glasses = glasses - people
    print(glasses)

print(glasses)
rent(2)

 

 

 

 

실습문제: 표준체중 구하기

조건

표준체중은 별도 함수로 계산한다 단 키는 미터단위로 받는다.

전달값으로 키 와 성별을 받는다.

실행결과에서 표준체중은 소수점 이하 둘쨰자리까지 표시한다.

def std_weight(height,gender):
    if(gender == "남자"):
        weight = round(height/100*height/100*22,2)
        print("키 {0}cm 남자의 표준 체중은 {1}kg 입니다".format(height,weight))
    
    else:
        weight = round(height/100*height/100*21,2)
        print("키 {0}cm 여자의 표준 체중은 {1}kg 입니다".format(height,weight))
        
        
        
std_weight(175,"남자")

 

 

 

7/18


 

 

표준입력

  • 표준 입력은 표준입력 장치인 키보드 값을 입력 받는것을 뜻합니다.
  • 파이썬에서는 input() 함수를 사용합니다.
  • 입력 받은 값은 항상 문자열로 인식합니다.
num = input()
print("입력한 값은 " + num + "입니다.")

 

 

sep(separator)

  • 쉼표와 +연산자 외에도 문자열을 구분하는 기호를 사용자가 직접 지정해  출력할수 있습니다.
  • sep 매개변수 기본값은 공백이지만 다른값도 집어 넣을수 있습니다.
print("python", "java", "html" ,  sep ="__")

end

  • end 값에 다른 값을 넣어주면 문장 끝을 줄바꿈 대신 지정한값으로 바꿀수 있습니다.
print("python", "java", "html" ,  sep ="__", end="!!!")

file

  • 실행 결과를 어디에 출력할지 지정하는 기능입니다.
  • sys.stdout는 표준 출력을 나타내며 vsCode의 터미널에 결과를 출력하라는 뜻입니다.
  • sys.stderr은 표준 오류를 나타내며 오류가 발생했을때 터미널에 오류 메시지를 띄우라는 뜻입니다.
import sys
print("파이썬", "java", file=sys.stdout)
print("파이썬", "java", file=sys.stderr)

결과 값은 같지만 실제 용도는 다릅니다.

 

ljust() 와 rjust()

  • 문자열을 특정 길이로 맞추는데 사용합니다.(남은 공간을 특정 문자로 채웁니다.)
  • 문자열의 정렬을 조절하는데도 사용합니다.
  • ljust()는 왼쪽 rjust는 오른쪽을 말합니다
scores = {"수학":0 ,"영어":10}
for sub, score in scores.items():
    print(sub.ljust(8), str(score).rjust(4), sep=":")

 

 

zfill()

  • 전달하는 숫자만큼 공간을 확보하고 문자열 앞의 빈칸을 0으로 채웁니다.
for num in range(1,21):
    print("대기 번호: " + str(num).zfill(3))

format() 함수

  • format() 함수 중괄호 부분을 수정하면 다양한 형태로 문자열을 출력할수 있습니다.
공백 빈칸으로 두기
> 오른쪽으로 정렬하기
10 지정한 만큼(10) 공간 확보하기

 

# {인덱스:[[빈칸 채우기]정렬][기호][공간 확보][쉼표][.자릿수][자료형]}
print("{0}".format(500))
print("{0:> 10}".format(500))
print("{0:a> 10}".format(500))

 

 

7/19


 

open()

  • 파일을 열때는 open() 함수를 사용합니다.
  • 첫번째로 넣는 파일명은 열어볼 파일의 이름이고, 두번째로 넣는 모드는 파일을 어떤 방식으로 여는지를 의미합니다.
open("파일명","모드",encoding="인코딩 형식")

 

 

모드 의미 설명
r 읽기 파일 내용을 읽어오기 위한 모드
w 쓰기 파일에 내용을 쓰기 위한 모드, 같은 이름의 파일이 있으면 해당 파일을 덮어 써서 기존 내용은 삭제됨
a 이어쓰기 파일에 내용을 쓰기 위한모드, 같은 이름의 파일이 있으면 기존 내용에 끝에 이어써 씀

 

close()

  • 파일을 닫을때 사용합니다.

 

write()

  • 텍스트 또는 바이너리 데이터를 파일에 쓸수 있습니다.

 

score_file = open("score.txt", "a", encoding="utf8")
score_file.write("안녕\n")
score_file.write("hello\n")
score_file.close()

 

파일읽기

  • 파일에 작성한 내용을 읽어와서 터미널에 출력할수 있습니다.
함수 설명
read() 파일 내용을 한꺼번에 읽어오기
readline() 파일 내용을 한 줄씩 읽어 오기
readlines() 파일 내용을 줄 단위로 나뉜 리스트 형태로 한꺼번에 읽어오기

 

 

pickle

  • 프로그램에서 작업하던 데이터를 파일로 저장하거나 저장된 데이터를 불러올때 사용하는 모듈입니다.
  • 데이터를 파일로 저장할때 dump() 함수를 사용합니다.
  • 파일에서 데이터를 불러올때는 load() 함수를 사용합니다.
dump(저장할 데이터, 저장할 파일명)

load(불러올 파일명)

 

with문

  • 파일을 열고나서 close() 함수를 호출하지 않아도 자동으로 닫아주는 역할을 합니다.
with 작업 as 변수명:
    실행할 명령1
    실행할 명령2
    ...

 

 


실습문제 보고서 파일 만들기

회사에서 매주 1회 보고서를 작성하라고 합니다.

1주차부터 50주차까지 보고서 파일을 만드는 프로그램을 작성하세요

 

조건

파일명은 1주차.txt.로 만듭니다.

완성 코드를 실행하면 소스코드와 동일 한 위치에 50개 파일을 생성합니다.

 

for i in range(1, 51):
    with open(f"{i}주차.txt", 'w', encoding="utf8") as report_file:
        report_file.write(f"-{i}주차 주간보고-\n")
        report_file.write("부서:\n")
        report_file.write("이름:\n")
        report_file.write("업무요약 :")

 

7/20


 

클래스와 객체 생성하기

  • 클래스는 붕어빵 틀에 비유하곤 합니다.
  • 클래스의 기본형식으로 class 키워드 뒤에 클래스명을 적고 콜론을 붙입니다.
  • 클래스 안에는 필요한 함수를 정의 하는데 클래스 안에 정의한는 함수를 메서드라고 합니다.
  • 메서드 안에 정의한 변수를 인스턴스 변수라고 합니다.
class 클래스명:
    def 메서드명(self,전달값1, 전달값2):
        실행할 명령 1
        실행할 명령 2

 

 

게임 소개1

  • 세 종족 사이에 전쟁을 그린 게임입니다.
  • 유닛을 최대한 빠르게 많이 만들어 적을 궤멸시키는 게임입니다.
  • 종족은 보병, 탱크, 전투기 와 같은 유닛을 생성합니다.

유닛)

class Unit:
    def __init__(self, name, hp, damage):
        self.name = name 
        self.hp = hp 
        self.damage = damage
        print("{0} 유닛을 생성했습니다.".format(self.name))
        print("체력 {0}, 공격력 {1}".format(self.hp, self.damage))

soldier1 = Unit("보병", 40, 5)
soldier2 = Unit("보병", 40, 5)
tank = Unit("탱크", 150, 35)

공격유닛)

class AttackUnit:
    def __init__(self, name, hp, damage):
        self.name = name
        self.hp = hp
        self.damage = damage

    def attack(self, location):
        print("{0} : {1} 방향 적군을 공격합니다. [공격력 {2}]".format(self.name, location, self.damage))

    def damaged(self, damage):
        print("{0} : {1}만큼 피해를 입었습니다.".format(self.name, damage))
        self.hp -= damage
        
        print("{0} : 현재 체력은 {1}입니다.".format(self.name, self.hp))
        if self.hp <= 0:
            print("{0} : 파괴됐습니다.".format(self.name))

코드 설명

& 객체와 인스턴스

  • 클래스 하나로 서로 다른 유닛 3개를 만들었는데, 이렇게 만들어진 유닛들을 객체라고 합니다.
  • 위와 같은 객체들을 클래스의 인스턴스라고 합니다.

(soldier1, soldier2, tank 객체는 Unit 클래스의 인스턴스 입니다.)

 

 

& 생성자

  • Unit 클래스에 __init__() 메서드를 정의 했는데 파이썬에 이를 생성자라고 합니다.
  • 생성자는 사용자가 따로 호출하지 않아도 객체를 생성할 떄 자동으로 호출되는 메서드 입니다.

 

& 인스턴스 변수

  • 메서드에 정의한 변수를 인스턴스 변수라고 하며 self와 함께 사용합니다.
  • Unit클래스에서는 name, hp, damage가 인스턴스 변수 입니다.
  • self.name과 같은 형식으로 전달값을 받아 정의 합니다.

 

& 메서드

  • 메서드는 클래스 내부에 정의한 함수로 클래스 안에 여러개를 만들 수 있습니다.
  • 전달값 부분에 첫 번째로 self를 넣습니다.
  • 메서드 안에서 self. 으로 인스턴스 변수에 접근 할수 있습니다.

 

7/21


게임 소개2

  • 세 종족 사이에 전쟁을 그린 게임입니다.
  • 유닛을 최대한 빠르게 많이 만들어 적을 궤멸시키는 게임입니다.
  • 종족은 보병, 탱크, 전투기 와 같은 유닛을 생성합니다.
  • 공격유닛과 공격할수 없는 유닛이 있습니다.
  • 의무병이 공격할수 없는 유닛에 해당 합니다. 

 

 

상속

  • 클래스의 내용을 다른 클래스가 물려받아 사용하는 것을 뜻합니다.
  • 클래스에 공통되는 부분을 중복으로 작성하지 않고 재사용할수 있습니다.
  • 아래 코드는 9장의 유닛과 공격 유닛 코드를 수정한 것입니다.

 

class Unit:
    def __init__(self, name, hp):
        self.name = name 
        self.hp = hp 

class AttackUnit(Unit):
    def __init__(self, name, hp, damage):
        Unit.__init__(self, name, hp)
        self.damage = damage
    
    def attack(self, location):
        print("{0} : {1} 방향 적군을 공격합니다. [공격력 {2}]".format(self.name, location, self.damage))


    def damaged(self, damage):
        print("{0} : {1}만큼 피해를 입었습니다.".format(self.name, damage))
        self.hp -= damage
        print("{0} : 현재 체력은 {1}입니다.".format(self.name, self.hp))
        if self.hp <= 0:
            print("{0} : 파괴됐습니다.".format(self.name))

 

 

다중 상속

  • 한 클래스가 두개 이상의 다른 클래스로부터 상속을 받는것을 의미합니다.
  • 형태는 아래 1번과 같습니다.
  • 지상 유닛을 다른 위치로 수송하면서 공격력이 없는 수송선같은 유닛을 만들어주겠습니다.

1번)

class 자식 클래스(부모 클래스1, 부모 클래스2,..):

 

2번)

class Flyable:
    def __init__(self, flying_speed):
        self.flying_speed = flying_speed
    
    def fly(self, name, location):
        print("{0} : {1} 방향으로 날아갑니다. [속도 {2}]".format(name, location, self.flying_speed))


class FlyableAttackUnit(AttackUnit, Flyable):
    def __init__(self, name, hp, damage, flying_speed):
        AttackUnit.__init__(self, name, hp, damage)
        Flyable.__init__(self, flying_speed)

 

 

메소드 오버라이딩

  • 상속관계일때 자식 클래스에서 부모 클래스에 정의한 메서드를 그대로 사용하지 않고
    같은 이름으로 메서드를 새롭게 정의해 사용하는 방법입니다.

 

pass

  • 아무것도 하지 않고 그냥 넘어간다는 의미로 사용합니다.

 

 

super()

  • 클래스에 이름을 적지 않고 부모 클래스에 접근할수 있습니다.
  • 상속하는  부모 클래스의 메서드를 사용할때 필요합니다.

 

 

 

게임만들기

  • 이동 동작을 나타내는 move() 메서드를 정의하겠습니다.
  • 지상유닛에 기동성이 좋은 호버 바이크와 공중유닛에 체력과 공격력이 좋은 우주 순양함을 만들어주겠습니다.
  • 유닛이 많아 개별적으로 관리가 어려우므로 move() 메서드를 오버라이딩해서
    재정의 한 메서드에서 fly()를 호출하도록 바꾸겠습니다.
class Unit:
    def __init__(self, name, hp, speed):
        self.name = name
        self.hp = hp
        self.speed = speed

    def move(self, location):
        print("[지상 유닛 이동]")
        print("{0} : {1} 방향으로 이동합니다. [속도 {2}]".format(self.name, location, self.speed))


class AttackUnit(Unit):
    def __init__(self, name, hp, damage, speed):
        Unit.__init__(self, name, hp, speed)
        self.damage = damage

    def attack(self, location):
        print("{0} : {1} 방향 적군을 공격합니다. [공격력 {2}]".format(self.name, location, self.damage))

    def damaged(self, damage):

        print("{0} : {1}만큼 피해를 입었습니다.".format(self.name, damage))
        self.hp -= damage

        print("{0} : 현재 체력은 {1}입니다.".format(self.name, self.hp))
        if self.hp <= 0:
            print("{0} : 파괴됐습니다.".format(self.name))

class Flyable:
    def __init__(self, flying_speed):
        self.flying_speed = flying_speed
    
    def fly(self, name, location):
        print("{0} : {1} 방향으로 날아갑니다. [속도 {2}]".format(name, location, self.flying_speed))



class FlyableAttackUnit(AttackUnit, Flyable):
    def __init__(self, name, hp, damage, flying_speed):
        AttackUnit.__init__(self, name, hp, damage, 0)
        Flyable.__init__(self, flying_speed)

    def move(self, location):
        print("[공중 유닛 이동]")
        self.fly(self.name, location)

 

 

 


3주차 일별

 

https://loui3.tistory.com/117

 

7-2장 함수 호출하기+실습문제

기본값 함수를 호출할때 사용할값을 직접 정의하는것을 기본값이라고 합니다. 키워드 인자 함수를 호출할때 전달값 뿐만 아니라 어디에 전달할지 명시적으로 지정하는것을 키워드 인자라고 합

loui3.tistory.com

https://loui3.tistory.com/120

 

8장 입출력

표준입력 표준 입력은 표준입력 장치인 키보드 값을 입력 받는것을 뜻합니다. 파이썬에서는 input() 함수를 사용합니다. 입력 받은 값은 항상 문자열로 인식합니다. num = input() print("입력한 값은 "

loui3.tistory.com

https://loui3.tistory.com/124

 

8-2장 파일 입출력

open() 파일을 열때는 open() 함수를 사용합니다. 첫번째로 넣는 파일명은 열어볼 파일의 이름이고, 두번째로 넣는 모드는 파일을 어떤 방식으로 여는지를 의미합니다. open("파일명","모드",encoding="

loui3.tistory.com

https://loui3.tistory.com/129

 

9장 클래스(게임 만들기)

클래스와 객체 생성하기 클래스는 붕어빵 틀에 비유하곤 합니다. 클래스의 기본형식으로 class 키워드 뒤에 클래스명을 적고 콜론을 붙입니다. 클래스 안에는 필요한 함수를 정의 하는데 클래스

loui3.tistory.com

https://loui3.tistory.com/130

 

9-2장 클래스(게임 만들기2)

게임 소개 세 종족 사이에 전쟁을 그린 게임입니다. 유닛을 최대한 빠르게 많이 만들어 적을 궤멸시키는 게임입니다. 종족은 보병, 탱크, 전투기 와 같은 유닛을 생성합니다. 공격유닛과 공격할

loui3.tistory.com

 

'학습단 > Python 학습단' 카테고리의 다른 글

10장 예외처리하기  (0) 2023.07.25
9-3장(게임 만들기3)  (0) 2023.07.24
9-2장 클래스(게임 만들기2)  (0) 2023.07.21
9장 클래스(게임 만들기)  (0) 2023.07.20
8-2장 파일 입출력  (0) 2023.07.19