[2주차] 파이썬 중급: 모듈에 관하여 (사용자 모듈, as, from, __name__)

Gracie·2024년 4월 11일
0

모듈의 종류

  1. 내부 모듈: 파이썬 설치 시 기본적으로 사용할 수 있는 모듈
  2. 외부 모듈: 별도 설치 후 사용할 수 있는 모듈
    ex) Numpy, pandas(빅데이터 분석에 좋음)
  3. 사용자 모듈: 사용자가 직접 만든 모듈
#사용법
import + 모듈명
모듈명.키워드(함수/class)
#'.' 점(dot) 접근 연산자

math 모듈

import math

#절댓값: 10
print(math.fabs(-10))
#올림: 6
print(math.ceil(5.21))
#내림: -6
print(math.floor(-5.21))
#버림: -5
print(math.trunc(-5.21)
#최대공약수: 7
print(math.gcd(14, 21))
#팩토리얼: 3628800
print(math.factorial(10))
#제곱근: 3.4641016151377544
print(math.sqrt(12))

time 모듈

import time

#class형으로 반환
lt = time.localtime()

#연도만 추출
print(lt.tm_year())
#월만 추출
print(lt.tm_mon())

random 모듈(내부 모듈)

import random

#1-10 정수 중 난수 1개 발생
rNum = random.randint(1, 10)
print(f'rNum: {rNum}')
#0-100 정수 중 난수 10개 발생
#sample(범위, 난수 갯수) > list형으로 값 반환
rNums = sample(f'rNums: {rNum}')

sample 함수
두 개의 매개번수를 받음
매개변수 1. 샘플링할 대상 📌시퀀스(리스트, 튜플 등)
매개변수 2. 샘플링할 항목의 개수

📌 시퀀스(sequence)란?
python에서 데이터를 순서대로 저장하고 접근하는데 사용되는 데이터 형식
인덱싱(indexing), 슬라이싱(slicing)을 통해 개별 항목에 접근 가능

  • 종류
    리스트(List): 순서가 있는 값들의 목록으로, 대괄호 []를 사용하여 정의됩니다.
    튜플(Tuple): 순서가 있는 값을 그룹화한 것으로, 소괄호 ()를 사용하여 정의됩니다. 튜플은 불변(immutable)하며 수정할 수 없습니다.
    문자열(String): 문자의 시퀀스로, 작은따옴표 ' '나 큰따옴표 "로 둘러싸인 텍스트입니다. 문자열은 불변(immutable)_하며 수정할 수 없습니다.
    범위(Range): 숫자 시퀀스를 나타내는 데 사용되며, 주로 반복문과 함께 사용됩니다.
    바이트(Byte): 이진 데이터를 시퀀스로 나타냅니다.
    바이트 배열(Bytearray): 변경 가능한 바이트 시퀀스입니다

💡 sample 매개변수에 문자열을 넣는다면?

import random

text = 'abcdefg'
sample_result = random.sample(text, 3)
print(sample_result) #출력 예: ['d', 'g', 'c']

사용자 모듈 만들기

특정 기능을 가지고 있는 파이썬 파일을 만든 후 > 해당 파일의 이름을 import해주면 됨

1) 모듈파일 생성

#파일명: calculator.py
def add(n1, n2):
    print(f'덧셈 결과:{n1 + n2}')
def sub(n1, n2):
    print(f'뺄셈 결과:{n1 - n2}')
def mul(n1, n2):
    print(f'곱셈 결과:{n1 * n2}')
def div(n1, n2):
    print(f'나눗셈 결과:{n1 / n2}')

2) 모듈 import

import calculator

calculator.add(3,4)
#덧셈 결과:7

as 키워드

as를 사용해서 모듈 이름을 단축시킬 수 있음

import calculator as cal

#cal만 작성해도 모듈을 불러올 수 있음
cal.add(10, 20)

from 키워드

from 키워드를 이용해서 모듈의 특정 기능만 사용할 수 있음

#여러 기능을 불러올 경우 ,(콤마)로 구분
from random import randint, sample

#from를 사용해서 함수를 가져올 경우, 모듈명으로 접근하지 않고 함수명만 입력하여 실행
num = randint(1, 100)
# *키워드를 사용하면 모든 기능을 가져옴 (import random과 동일한 기능)
from random import *

__name__ 전역변수

  • 각 파이썬 파일에 자동으로 저장되어 있는 변수
  • 일반적으로 파이썬 스크립트는 모듈로써(import되어)사용 되거나, 단독으로 실행됨(import되지 않고)

1) 단독 실행일때

  • 해당 스크립트를 '실행(메인)파일'이라고 하며 변수값이 __main__으로 설정됨
    ex) module.py(메인파일) > __name__ = '__main__'

2) 모듈로써(import되어) 사용될때

  • 변수값에 모듈명으로 설정됨
    addModule.py > __name__ = 'addModule'
    subModule.py > __name__ = 'subModule'

3) 언제 __name__ 변수를 사용하는가?

  • 파이썬 엔진이 여러개의 파이썬 스크립트가 있는 프로그램을 실행할 때, __name__을 이용해서 실행파일을 찾음
  • 어떤 코드 블럭을 단독 실행일 때만 작동되도록 할 때도 사용 됨
def add(n1, n2):
return n1 + n2

if __name__ == '__main__':
	print(f'__name__: {__name__}')
#실행 파일일 때만, __name__: __main__ 이 출력됨

getter 와 setter

  • 일반적으로 모듈을 만들 때, 모듈 내 있는 변수에 값을 입력하거나 변수 값을 불러오기 위해 get() 함수와 set() 함수를 생성한다.
#로또 당첨 여부 알아보기!
#사용자에게 5개의 번호(1~45)를 입력받아, 모듈 내 생성된 난수(로또번호 5개 + 보너스번호 1개)와 일치하는지 확인할 수 있는 모듈

import random

userNums = []; ranNums = []; collNums = []
randBonuNum = 0

#사용자에게 받은 번호(list형)을 모듈 내 변수에 입력하는 함수
def setUserNums(ns):
    global userNums
    userNums = ns

#모듈 내 변수를 실행파일로 가져올 수 있도록 하는 함수
def getUserNums():
    return userNums

def setRandNums():
    global randNums
    randNums = random.sample(range(1, 46), 6)

def getRandNums():
    return randNums

def setBonuNum():
    global randBonuNum

    while True:
        randBonuNum = random.randint(1, 45)
        if randBonuNum not in randNums:
            break

def getBonuNum():
    return randBonuNum

def lottoResult():
    global userNums
    global randNums
    global collNums

    collNums = []
    for un in userNums:
        if un in randNums:
            collNums.append(un)
    if len(collNums) == 6:
        print('1등 당첨!!')
        print(f'번호: {collNums}')

    elif (len(collNums) == 5 ) and (randBonuNum in userNums):
        print('2등 당첨!')
        print(f'번호: {collNums}, 보너스 번호: {randBonuNum}')

    elif len(collNums) == 5:
        print('3등 당첨!')
        print(f'번호: {collNums}')

    elif len(collNums) == 4:
        print('4등 당첨!')
        print(f'번호: {collNums}')

    elif len(collNums) == 3:
        print('5등 당첨!')
        print(f'번호: {collNums}')

    else:
        print('아쉽습니다. 다음 기회에 ~')
        print(f'기계 번호: {randNums}')
        print(f'보너스 번호: {randBonuNum}')
        print(f'선택 번호: {userNums}')
        print(f'일치 번호: {collNums}')

def startlotto():
    n1 = int(input('번호(1~45) 입력: '))
    n2 = int(input('번호(1~45) 입력: '))
    n3 = int(input('번호(1~45) 입력: '))
    n4 = int(input('번호(1~45) 입력: '))
    n5 = int(input('번호(1~45) 입력: '))
    n6 = int(input('번호(1~45) 입력: '))
    selectNums = [n1, n2, n3, n4, n5, n6]

    setUserNums(selectNums)
    setRandNums()
    setBonuNum()

    lottoResult()
profile
비전공자의 Data Analyst 도전기 🥹✨

0개의 댓글