반응형

1번 문제

Person class 를 정의하고

조건

• name, id, age, height, weight 변수선언

• __str__(self) 메서드 재정의(overriding)

 각 항목에 Person class 의 객체를 갖는 리스트 정의

 각각 객체의 필드 name, 에 “을지문덕”, “계백”, “김유신”, “강감찬“, “이순신”을 대입

 각각의 age, height, weight 대입 4. 각 인물의 이름과 나이 키 몸무게 순서로 5명의 데이터를 출력

 

class Person:
    name=""
    id=""
    age=0
    height=0
    weight=0

    def __init__(self,name,id,age,height,weight):
        self.name = name
        self.id= id
        self.age = age
        self.height = height
        self.weight = weight
        
    def __str__(self):
        return "이름: " + self.name +  "나이: " + str(self.age) + "키: " + str(self.height) + "몸무게: " + str(self.weight)
    

def main():
    manyperson = [Person("을지문덕","1",20,60,174),Person("계백","2",23,80,194),Person("김유신","3",18,59,174),Person("강감찬","4",25,78,180),Person("이순신","5",24,67,184)]
    for i in range(0,5):
        print(manyperson[i])


if  __name__ == "__main__":
    main()

 person 클래스를 생성하고 init 함수를 생성하여 변수값들을 초기화 해줍니다.( 생성자)

__str__ 메소드를 함수오버라이딩 하여 사용합니다. 객체에 대한 반환값을 문자열로 전달하는 것입니다. 

그 이후 리스트를 생성하고 반복문을 통해서 출력해주면 됩니다. 

 

 

2번 문제 

원을 나타내는 Circle라는 클래스를 설계,

 반지름 radius와  중심 좌표 cx와 cy를 통하여

 원의 넓이를 반환하는 메소드 area()와

 원의 중심을 반환하는 메소드 center () 를 구현 클래스를 완성하고 객체를 생성하여 임의의 값을 대입하여 원의 넓이와 그 중심 좌표값을 화면에 출력하시오.

 

import math


class Circle:
    radius =0
    cx=0
    cy=0

    def __init__(self, radius, cx, cy):
        self.radius = radius
        self.cx = cx
        self.cy = cy
    def area(self):
        return self.radius*self.radius*math.pi
    def center(self):
        return self.cx,self.cy
    

def main():
    radius =0
    cx=0
    cy=0
    print("정보를 입력하세요")
    radius=int(input("반지름:"))
    cx=int(input("x좌표:"))
    cy=int(input("y좌표:"))
    circle = Circle(radius,cx,cy)

    #함수호출
    print("원의 넓이: "+str(circle.area()))
    print("중심좌표: "+str(circle.center()))


if  __name__ == "__main__":
    main()

 circle 클래스를 생성하고 init 함수를 생성하여 변수값들을 초기화 해줍니다.( 생성자)

area, center 메소드를 생성해서 값을 전달해줍니다. 

main 메소드에서는 int(input())의 형태로 int형 숫자를 입력받습니다. 

math 라이브러리에 pi값을 사용하였습니다.

 

 

3번 문제 

주사위 클래스 Dice를 설계하는데 메소드에는 roll()을 구현하여 주사위를 던져 나온 숫자를 화면에 출력하는 프로그램을 작성하시오.

-단, 난수의 발생은 다음을 이용하라. -face = random.randint(1, 6)

 

import random as rd

class Dice:

    face = 0
    def __init__(self):
        self.face = 0
    
    @classmethod
    def roll(self):
        self.face = rd.randint(1,6)
        return self.face


def main():
    print("주사위를 굴리려먼 아무값이나 입력하세요")
    input()
    print("주사위값: " + str(Dice().roll()))



if  __name__ == "__main__":
    main()

 

random 라이브러리의 randint 메소드를 사용하여 난수를 생성하였습니다. 

 

 

반응형
반응형

파이썬을 사용할 때 기본으로 제공되는 라이브러리만 사용되지 않고 많은 기능을 제공하는 라이브러리들을 추가 하여 사용하게 됩니다. 이러한 라이브러리가 특정 프로젝트에서만 사용되거나 프로젝트를 배포할 때 필요한 라이브러리만 포함시켜 배포하고 싶을 경우가 있을 것입니다.

 

이럴때 사용할 수 있는것이 가상환경(virtualenv) 입니다. 가상환경을 만들고, 그 가상환경에서 라이브러리를 추가하면 추가된 라이브러리는 그 가상환경에서만 사용 되어집니다.

 

우선 패스설정이 완료되었다는 가정하에 진행하겠습니다. (path설정을 통해 파이썬이 다른 경로 폴더의 .py들을 실행시킬 수 있게 만드는 과정입니다. 

 

C:\>esay_install pip

 

파이썬 패키지 관리자인 pip.exe 파일을 Python 3.4 버전부터 미리 포함되어 있습니다. 이전 버전을 사용한다면 easy_install 프로그램을 이용해서 pip.exe 를 먼저 설치합니다.

 

여러개의 파이썬 프로젝트를 관리하면서 각 프로젝트마다 사용되는 라이브러리가 충돌을 한다던가 하는 경우에도 가상환경을 사용하여 분리할 수 있습니다.

 

가상 환경 없이 설치한 파이썬 라이브러리는 전역으로 설치됩니다. 이렇게 설치한 라이브러리는 모든 사용자와 모든 프로젝트에서 사용할 수 있습니다.

 

가상환경을 다음과 같이 설치합니다.

 

C:\>pip install virtualenv

 

이제 가상환경을 만들어 봅니다. 가상환경 파일이 생성될곳을 C:\>workspace\python 으로 하겠습니다. 다음 명령을 실행합니다.

 

C:\>workspace\python>virtualenv ProjectEnv

 

이 명령은 새 환경 ProjectEnv 를 만듭니다. 만든 새 환경을 사용하려면 먼저 활성화해야 합니다. 새환경 폴더 아래 Scripts 폴더 아래에 activate.bat 파일을 실행합니다.

 

C:\>workspace\python>cd ProjectEnv\Scripts

C:\>workspace\python\ProjectEnv\Scripts>activate

 

환경을 활성화하면 환경의 이름이 명령 프롬프트에 표시되어 현재 가상 환경에 있음을 알립니다. 가상 환경에서 라이브러리를 설치하거나 스크립트를 실행하면 그 환경에만 영향이 있습니다.

 

(ProjectEnv) C:\workspace\python\ProjectEnv\Scripts>python

>>>^Z

 

deactivate 명령으로 환경에서 떠날 수 있습니다. 다시 가상환경으로 들어가기 위해서는 activate 명령을 다시 실행하면 됩니다.

 

(ProjectEnv) C:\workspace\python\ProjectEnv\Scripts>deactivate



출처: https://offbyone.tistory.com/74 [쉬고 싶은 개발자]


 

요약정리

 

가상환경 설치 & 실행
python - m venv (가상환경 이름)
source (가상환경이름)/scrips/activate

<->deactivate

 

라이브러리 설치시 

pip install ~~ 

반응형
반응형

Python은 1991년 프로그래머인 귀도 반 로섬(Guido van Rossum)이 발표한 고급 프로그래밍 언어로, 플랫폼 독립적이며 인터프리터식, 객체지향적, 동적 타이핑(dynamically typed) 대화형 언어이다. 파이썬이라는 이름은 귀도가 좋아하는 코미디 〈Monty Python’s Flying Circus〉에서 따온 것입니다. 

 

즉 프로그래밍 언어입니다. 

 

가장 큰 특징은 인터프리터 언어라는 것입니다.

소스 코드를 기계어로 컴파일해서 실행파일을 만들고 실행하는 컴파일 언어와는 다르게 인터프러터 언어는 코드를 한 줄씩 읽어 내려가며 실행하는 프로그래밍 언어입니다. 인터프리터 방식을 쓰는 프로그래밍 언어는 많은데 대표적인 것이 Python입니다. 파이썬은 그 외에도 정적타입, 동적타입 모두 사용가능하다는 특성이 있습니다.

 

인터프리터 언어의 장단점

인터프리터는 실행 시마다 소스 코드를 한 줄씩 기계어로 번역하는 방식이기 때문에 실행 속도는 컴파일 언어보다 느리다. 그렇다면 왜 사용할까? 인터프리터 언어는 프로그램 수정이 간단하다는 장점이 있습니다. 컴파일러는 소스 코드를 번역해서 실행 파일을 만들기 때문에 프로그램에 수정 사항이 발생하면 소스 코드를 다시 컴파일해야 한다. 하지만 인터프리터는 소스 코드를 수정해서 바로 실행시킬 수 있습니다.

 

장점

  • 배우기 쉬워서 학습용으로 좋다.
  • 공동 작업과 유지 보수가 아주 쉽고 편해서 생산성이 높고 실사용률도 높다.
  • 읽고 쓰기 쉽다.

단점

  • 느리다.

Python 동작절차

Python의 구현체 CPython

일반적으로 python이 C로 구현되어 있다고 알려져있는데 그 구현체가 CPython이다. 가장 처음 만들어진 python의 구현체이고 Python.org 에서 다운 받으면 CPython을 받는 것입니다. 다른 구현체들과 비교해서 언급할 때 주로 CPython이라고 표기하는데 Python을 C언어로 구현한 구현체를 의미합니다.

CPython은 인터프리터 이면서 컴파일러 입니다. 우리가 작성하는 Python 코드를 bytecode로 컴파일 하고 실행합니다. 다시 말해, python 코드를 C언어로 바꾸는 것이 아니라 컴파일하여 bytecode로 바꾸고 그 다음에 interpreter(virtual machine)가 실행합니다.

(CPython 인터프리터 실행 중에 단점이 있는데 GIL(global interpreter lock)을 사용한다는 것이다. bytecode를 실행할 때에 여러 thread를 사용할 경우, 전체에 lock 을 걸어서 한번에 단 하나의 thread 만이 python object에 접근하도록 제한한 것이다. 하지만 single thread일 때는 문제가 없고 GIL의 단점을 보안하기 위한 방법들이 존재하고 있어서 GIL로 인한 불편함을 느낄 가능성은 거의 없다고 한다.)

 

Jython

python 코드를 java 바이트코드로 만들어 JVM에서 실행할 수 있도록 한다. .py 파일을 .class파일로 컴파일 한다.

 

pypy

python 자체로 구현. JIT 컴파일 도입하여 CPython 보다 빠르다.

 

(JIT(just-in-time) 컴파일 이란 프로그램을 실행하기 전에 컴파일 하는 대신, 프로그램을 실행하는 시점에서 피료한 부분을 즉석으로 컴파일하는 방식. 보통 인터프리터 언어의 성능 향상을 목적으로 도입하는 경우가 많다. 인터프리트 하면서 자주 쓰이는 코드를 캐싱하기 때문에 인터프리터의 느린 실행 속도를 개선할 수 있다. JVM에서도 바이트코드를 기계어로 번역할 때 JIT 컴파일러를 사용한다.)

 

 

 

출처:https://cjh5414.github.io/about-python-and-how-python-works/

 

Python에 대하여, Python은 어떻게 동작하는가? Python의 장단점

Jihun's Development Blog

cjh5414.github.io

 

반응형

+ Recent posts