220913 Day13

유예지·2022년 9월 13일

* hex()

-정수 값을 입력 받아 16진수(hexadecimal)로 변환하여 돌려주는 함수

>>> print(hex(3))
    print(hex(9))
    print(hex(10))
    print(hex(15))
0x3
0x9
0xa
0xf
#앞에 '0x'가 붙는다
  • 16진수 예
    -1 1 => 16 + 1 = 17
    -2 a => 216 + 10 = 42
    -f f => 15
    16 + 15 = 255

* id()

-객체(object)를 입력받아 객체의 고유 주소 값을 돌려주는 함수

* int()

-문자열 형태의 숫자나 소숫점이 있는 숫자 등을 정수 형태로 돌려주는 함수

>>> int('0xff', base = 16)   #문자열 형태의 숫자를 16진수로 변환
255

* list()

-반복 가능한 자료형을 입력받아 리스트로 만들어주는 함수

>>> list("python")
['p','y','t','h','o','n']

>>> list((1,2,3))
[1,2,3]

(3) map()

-map(f, iterable) : 함수(f)와 반복 가능한(iterable) 자료형을 입력으로 받는다
-반복 가능한 자료형 : 리스트, for문에서 'in' 다음으로 오는 부분 등
-입력 받은 자료형의 각 요소를 함수 f가 수행한 결과를 묶어서 돌려준다

* two_times 함수는 리스트 요소를 입력받아 각 요소에 2를 곱한 결괏값을 돌려준다

>>> def two_times(numberList):
		result = []
        for number in numberList:
        	result.append(number*2)
        return result

>>> result = two_times([1,2,3,4])
>>> print(result)
[2,4,6,8]

* map 함수를 사용하여

>>> def two_times(x):
		return x*2

>>> list(map(two_times, [1,2,3,4]))
[2,4,6,8]

* lambda 를 사용하면

>>> list(map(lambda x: x*2, [1,2,3,4]))
[2,4,6,8]
>>> list(map(int, ["1","2","3","4"]))
[1,2,3,4]

* oct()

-정수 형태의 숫자를 8진수 문자열로 바꾸어 돌려주는 함수

* ord()

-문자의 아스키 코드 값을 돌려주는 함수

* round()

-숫자를 입력받아 반올림해주는 함수

* sorted()

-입력값을 정렬한 후 그 결과를 '리스트' 로 돌려주는 함수
-리스트 자료형에도 sort 함수가 있지만, 이는 리스트 객체 그 자체만 정렬할 뿐 정렬된 결과를 돌려주지는 않는다

* sum()

-입력받은 리스트나 튜플의 모든 요소의 합을 돌려주는 함수

>>> sum([1,2,3])
6

>>> sum([1,2,3], [4,5,6])
TypeError: can only concatenate list (not "int") to list

>>> import numpy as np
>>> np.sum(np.array(([[1,2,3], [4,5,6]])))
21

(4) zip()

-동일한 개수로 이루어진 자료형을 묶어주는 역할을 하는 함수

>>> for i in zip([1,2,3], [4,5,6], ['a','b','c']):
		print(i)
(1, 4, 'a')
(2, 5, 'b')
(3, 6, 'c')

>>> for i, j, k in zip([1,2,3], [4,5,6], ['a','b','c']):
		print(i, j, k)
1 4 a
2 5 b
3 6 c

* folium

>>> pip install folium

>>> import folium
>>> import pandas as pd

>>> import os
	os.getcwd()
    
>>> pip install openpyxl

>>> df = pd.read_excel("서울지역대학교위치.xlsx")
	df
    
>>> df.대학교
	df.경도
    df.위도
    
>>> for i, j, k in zip(df.대학교, df.경도, df.위도):
		print(i, j, k)
        
>>> seoul_map = folium.Map(location = [37.55, 126.98], zoom_start = 12)
	seoul_map
    
>>> for name, lat, long in zip(df.대학교, df.경도, df.위도):
		folium.Marker([lat, long], tooltip=name).add_to(seoul_map)
	seoul_map        
#최소 코드로 표현
>>> df = pd.read_excel("서울지역대학교위치.xlsx")

	seoul_map = folium.Map(location = [37.55, 126.98], zoom_start = 12)

    for name, lat, long in zip(df.대학교, df.위도, df.경도):
        folium.Marker([lat, long], tooltip = name).add_to(seoul_map)
    
	seoul_map

12. 외장함수(라이브러리)

(1) sys

-sys 모듈은 파이썬 인터프리터가 제공하는 변수와 함수를 직접 제어할 수 있게 해주는 모듈이다

>>> import sys

>>> sys.path   #파이썬 모듈들이 저장되어 있는 위치를 나타낸다
>>> sys.path.append   #경로 이름 추가하기
>>> sys.argv   #명령 행에서 인수 전달하기

(2) pickle

-객체의 형태를 그대로 유지하면서 파일에 저장하고 불러올 수 있게 하는 모듈
-pickle.dump(객체, 파일) 로 저장하고,
-pickle.load(파일) 로 로딩한다

>>> import pickle
>>> df.to_csv("aaa.csv")   #csv로 변환하여 저장한다
>>> df.to_excel("bbb.xlsx")   #excel로 변환하여 저장한다

#Save pickle
>>> with open("test.pickle", "wb") as f:
		pickle.dump(df, f)
        
#Load pickle
>>> with open("test.piclke", "rb") as f:
    	data = pickle.load(f)
	print(data)

(3) os

-환경변수나 디렉터리, 파일 등의 OS 자원을 제어할 수 있게 해주는 모듈

#내 시스템의 환경 변수 값을 알고 싶을 때
>>> import os
>>> os.environ   #딕셔너리 객체로 돌려준다

#디렉터리 위치 변경하기
>>> os.chdir()

#디렉터리 위치 돌려받기
>>> os.getcwd()

#시스템 명령어 호출하기
>>> os.system("dir")
>>> !dir

* 기타 유용한 os 관련 함수

-os.mkdir(디렉터리) : 디렉터리를 생성한다
-os.rmdir(디렉터리) : 디렉터리를 삭제한다 (단, 디렉터리가 비어있어야 삭제가 가능하다)
-os.unlink(파일이름) : 파일을 지운다
-os.rename(src, dst) : src라는 이름의 파일을 dst라는 이름으로 바꾼다

* glob

-디렉터리 안의 파일들을 읽어서 돌려준다
-'*,?' 등 메타 문자를 써서 원하는 파일만 읽어들일 수도 있다

>>> import glob

>>> glob.glob("C:/Users/admin/*")

>>> glob.glob("C:/Users/admin/a*")

>>> glob.glob("C:/Users/admin/*.csv")

* time

  • time.time
    -1970년 1월 1일 0시 0분 0초를 기준으로 지난 시간을 초 단위로 돌려준다
>>> import time
>>> time.time()

>>> s = time.time()
	s / 60
    
>>> m = s / 60
	m / 60
    
>>> c = m / 60
	c / 24    
  • time.localtime
    -time.time()이 돌려준 실수 값을 '연도, 월, 일, 시, 분, 초, ...'의 형태로 바꾸어준다
>>> time.localtime(time.time())

>>> time.localtime(time.time()).tm_year

>>> time.localtime(time.time()).tm_hour
  • time.strftime
    -strftime 함수는 시간에 관계된 것을 세밀하게 표현하는 여러가지 포맷코드를 제공한다
    -str 형태로 변환해준다
>>> now = time.localtime(time.time())
	time.strftime('%x', now)
    
>>> time.strftime('%X', now)

>>> time.strftime('%B', now)

>>> time.strftime('%Y-%m-%d %I:%M:%S %p', now)

>>> time.strptime('2022-09-13 09:58:14 PM', '%Y-%m-%d %I:%M:%S %p')
  • time.sleep
    -주로 루프 안에서 많이 사용한다
    -일정한 시간 간격을 두고 루프를 실행할 수 있다
>>> while True:
		print("Hello")
        time.sleep(1)

* calendar

-달력을 볼 수 있게 해주는 모듈

>>> import calendar

>>> calender.calendar(2022)

>>> calender.prmonth(2022, 9)

>>> calender.weekday(2022, 9, 13)

>>> print(calendar.weekday(2022, 9, 11))
    print(calendar.weekday(2022, 9, 12))
    print(calendar.weekday(2022, 9, 13))
    print(calendar.weekday(2022, 9, 14))
    print(calendar.weekday(2022, 9, 15))
    print(calendar.weekday(2022, 9, 16))
    print(calendar.weekday(2022, 9, 17))

* random

-난수(규칙이 없는 임의의 수)를 발생시키는 모듈

>>> import random

>>> random.random    #0과 1 사이의 '실수' 중에서 난수 값 출력

>>> random.randint(1, 10)   #1과 10 사이의 '정수' 중에서 난수 값 출력
>>> li = []
	for _ in range(10):
    	li.append(random.randint(1, 20))
	li
    
#중복되는 수가 없도록    
>>> li = []
	for _ in range(10):
    	a = random.randint(1, 20)
        if a in li:
        	continue
        else:    
    		li.append(a)
	li     
>>> random.choice([1,2,3,10])

>>> random.choice(range(5))

>>> np.random.uniform()    #random.random() 과 같은 기능을 한다

>>> data = [1,2,3,4,5]
	random.shuffle(data)   #리스트의 항목을 무작위로 섞는다
    data
[1,3,2,5,4]    

* webbrowser

-기본 웹 브라우저를 자동으로 실행하는 모듈

>>> import webbrowser

>>> webbrowser.open("www.naver.com")
>>> webbrowser.open_new("www.naver.com")   #새로운 창에 열리도록 한다

* threading

-보통 컴퓨터에서 동작하고 있는 1개의 프로세스는 한 가지 일만 하지만, 스레드(Thread)를 사용하면 한 프로세스 안에서 2가지 또는 그 이상의 일을 동시에 수행할 수 있다

>>> import time

>>> def long_task():    #5초의 시간이 걸리는 함수
		for _ in range(5):
        	time.sleep(1)    #1초씩 대기한다
            print("working: %s" %i)
	print("Start")
>>> long_task()    

>>> print("Start")
	for _ in range(3):    #long_task()를 3회 수행
    	long_task()
	print("End")        
  • threading 을 하면 5초의 시간이 걸리는 long_task 함수를 동시에 실행할 수 있다
>>> import threading

>>> def long_task():
		for _ in range(5):
        	time.sleep(1)
            print("working: %s" %i)
	print("Start")
    
>>> threads = []
	for _ in range(5):
    	t = threading.Thread(target = long_task)   #스레드 생성
        threads.append(t)
        
>>> for t in threads:
		t.start()   #스레드 실행
        
>>> for t in threads:
		t.join()   #해당 스레드가 종료될 때까지 기다린다        

	print("End")

13. 파이썬 프로그래밍

-프로그램을 만들려면 가장 먼저 '입력'과 '출력'을 생각해라

(1) 구구단 프로그램

-구구단 프로그램 중 2단을 만든다면 2를 입력값으로 주었을 때 어떻게 출력되어야 할까
-함수 이름은? GuGu
-입력받는 값은? 2
-출력하는 값은? 2단(2, 4, 6, 8, ..., 18)
-결과는 어떤 형태로 저장할 것인가? 연속된 자료형 이니까 -> 리스트

>>> def GuGu(n):
        result = []
        i = 1
        while i < 10:
            result.append(n * i)
            i = i + 1
        return result
        
>>> print(GuGu(2))        

(2) 3과 5의 배수 합하기

-1000 미만의 자연수에서 3의 배수와 5의 배수의 총합을 구해라
-입력받는 값은? 1~999
-출력하는 값은? 3의 배수와 5의 배수의 총합
-생각해 볼 것은? 3의 배수와 5의 배수를 어떻게 찾을 것인지, 3의 배수와 5의 배수가 겹칠 때는 어떻게 할 것인지

>>> i = 1
	sum3 = 0
    sum5 = 0
    while i < 1000:
    	if i%3 == 0:
        	sum3 += i
		elif i%5 == 0:
        	sum5 += i
		i += 1
	
>>> sum_t = sum3 + sum5
    print(sum_t)    
>>> result = 0
	for i in range(1000):
    	if i%3 == 0 or i%5 == 0:
        	result += i
>>> print(result)                    

(3) 게시판 페이징하기

-게시물의 총 건수와 한 페이지에 보여줄 게시물 수를 입력했을 때 총 페이지 수는?
-함수 이름은? getTotalPage
-입력받는 값은? 게시물의 총 건수(m), 한 페이지에 보여줄 게시물 수(n)
-출력하는 값은? 총 페이지 수

>>> def getTotalPage(m, n):
        if m%n == 0:
        	return m//n
        else:
        	return (m//n) + 1            

(4) 간단한 메모장 만들기

-원하는 메모를 파일에 저장하고, 추가 및 조회가 가능한 간단한 메모장을 만들자
-필요한 기능은? 메모 추가하기, 조회하기
-입력받는 값은? 메모 내용, 프로그램 실행 옵션
-출력하는 값은? memo.txt

① 입력으로 받은 옵션과 메모를 출력하는 코드를 작성한다

-작성 후 memo.py 로 저장

>>> import sys

    #sys.argv : 프로그램을 실행할 때 입력된 값을 읽어들일 수 있는 파이썬 라이브러리
	option = sys.argv[1]   #프로그램 실행 옵션 값
	memo = sys.argv[2]     #메모 내용

    print(option)
    print(memo)

①-1 명령 프롬프터에서 실행

-입력으로 전달한 옵션과 메모 내용이 그대로 출력된다
-'-a' 가 option, "Life is too short" 이 memo 에 해당된다

C:\Users\admin>python memo.py -a "Life is too short"
-a
Life is too short

② 입력 받은 메모를 파일에 쓸 수 있게 코드 변경

>>> import sys

    option = sys.argv[1]

    if option == '-a':    #옵션이 '-a'인 경우에만 
        memo = sys.argv[2]    #memo 값을 읽어 memo.txt 파일에 그 값을 써라
        f = open('memo.txt', 'a')   #메모에 새로운 내용이 '추가' 되어야 하므로 파일 열기 모드 'a'
        f.write(memo)
        f.write('\n')   #메모를 추가할 때마다 다음 줄에 저장되도록
        f.close()

②-1 명령 프롬프터에서 실행

C:\Users\admin>python memo.py -a "Life is too short"

C:\Users\admin>python memo.py -a "You need python"

C:\Users\admin>type memo.txt   #'type ~' -> 정상적으로 기입되었는지 확인
Life is too short
You need python

③ 작성한 메모를 출력하기 위해 코드 변경

-메모 추가는 '-a' 옵션을 사용하고, 메모 출력은 '-v' 옵션을 사용한다

>>> import sys

    option = sys.argv[1]

    if option == '-a':    #옵션이 '-a'인 경우에만 
        memo = sys.argv[2]    #memo 값을 읽어 memo.txt 파일에 그 값을 써라
        f = open('memo.txt', 'a')   #메모에 새로운 내용이 '추가' 되어야 하므로 파일 열기 모드 'a'
        f.write(memo)
        f.write('\n')   #메모를 추가할 때마다 다음 줄에 저장되도록
        f.close()
    elif option == '-v':    #옵션으로 '-v'가 들어온 경우
        f = open('memo.txt')
        memo = f.read()    #memo.txt 파일을 읽어서 출력
        f.close()
        print(memo)

③-1 명령 프롬프터에서 실행

-입력한 메모가 그대로 출력된다

C:\Users\admin>python memo.py -v
Life is too short
You need python

0개의 댓글