관리 메뉴

프로그래밍 삽질 중

[유투브]나도코딩 : 파이썬 코딩 무료 강의(기초편) 4 본문

과거 프로그래밍 자료들/python

[유투브]나도코딩 : 파이썬 코딩 무료 강의(기초편) 4

평부 2021. 6. 10. 23:10

※ 강의를 선택한 이유 : 파이썬에 대해 기초부터 알려주는 강의 중 평가가 좋아서

※ 학습 중간중간에 예제(문제풀의)도 같이 있는데, 예시가 이해하기 쉬웠음

※ 6/10 현재 6시간 강의 다 들음, 웹 크롤링 관련 강좌 듣는 중

※ 순서가 뒤죽박죽이므로, 반드시 유투브 강의를 참고하길 바람

 https://www.youtube.com/watch?v=kWiCuklohdY&t=14455s (참고 출처)

※ 모든 코드의 저작권은 나도코딩님에게 있으며, 문제가 될 경우 삭제하겠습니다 

 

[practice4.py]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
#에러상황 -> 예외처리
 
print("나누기 전용 계산기입니다.")
num1 = int(input("첫 번째 숫자를 입력하세요 : "))
num2 = int(input("두 번째 숫자를 입력하세요 : "))
print("{0} / {1} = {2}".format(num1, num2, int(num1/num2)))
 
#숫자가 아닌 문자열을 넣을 때 오류 발생 -> 예외처리 하도록 함
try:
    print("나누기 전용 계산기입니다.")
    num1 = int(input("첫 번째 숫자를 입력하세요 : "))
    num2 = int(input("두 번째 숫자를 입력하세요 : "))
    print("{0} / {1} = {2}".format(num1, num2, int(num1/num2)))
except ValueError:
    print("에러! 잘못된 값을 입력하였습니다.")
except ZeroDivisionError as err: #0으로 나눌 때 예외
    print(err) #division by zero
 
 
#리스트 만들기
try:
    print("나누기 전용 계산기입니다.")
    nums = []
    nums.append(int(input("첫 번째 숫자를 입력하세요 : ")))
    nums.append(int(input("두 번째 숫자를 입력하세요 : ")))
    nums.append(int(nums[0/ nums[1]))
    print("{0} / {1} = {2}".format(nums[0], nums[1], nums[2]))
except ValueError:
    print("에러! 잘못된 값을 입력하였습니다.")
except ZeroDivisionError as err: #0으로 나눌 때 예외
    print(err) #division by zero
 
#리스트 만들기 중 nums.append(int(nums[0] / nums[1])) 빠진 경우
try:
    print("나누기 전용 계산기입니다.")
    nums = []
    nums.append(int(input("첫 번째 숫자를 입력하세요 : ")))
    nums.append(int(input("두 번째 숫자를 입력하세요 : ")))
    #nums.append(int(nums[0] / nums[1]))
    #list index out of rang로 오류 표시
    print("{0} / {1} = {2}".format(nums[0], nums[1], nums[2]))
except ValueError:
    print("에러! 잘못된 값을 입력하였습니다.")
except ZeroDivisionError as err: #0으로 나눌 때 예외
    print(err) #division by zero    
#해결법(나머지 모든 에러)
except Exception as err: #Exception as err 에러 표시
    print("알 수 없는 에러가 발생하였습니다.")
 
#에러 발생시키기
try:
    print("한 자리 숫자 나누기 전용 계산기입니다.")
    num1 = int(input("첫 번째 숫자를 입력하세요 : "))
    num2 = int(input("두 번째 숫자를 입력하세요 : "))
    if num1 >= 10 or num2 >= 10:
        raise ValueError
    print("{0} / {1} = {2}".format(num1, num2, int(num1 / num2)))
except ValueError: #10이상 표시할 때 발생하는 에러
    print("잘못된 값을 입력하였습니다. 한 자리 숫자만 입력하세요")
 
#사용자 정의 예외 처리
class BigNumberError(Exception):
    #pass
    def __init__(self, msg):
       self.msg = msg
    
    def __str__(self):
        return self.msg
 
try:
    print("한 자리 숫자 나누기 전용 계산기입니다.")
    num1 = int(input("첫 번째 숫자를 입력하세요 : "))
    num2 = int(input("두 번째 숫자를 입력하세요 : "))
    if num1 >= 10 or num2 >= 10:
        raise BigNumberError("입력값 : {0}, {1}".format(num1, num2))
    print("{0} / {1} = {2}".format(num1, num2, int(num1 / num2)))
except ValueError: #10이상 표시할 때 발생하는 에러
    print("잘못된 값을 입력하였습니다. 한 자리 숫자만 입력하세요")
except BigNumberError as err:
    print("에러가 발생하였습니다. 한 자리 숫자만 입력하세요2")
    print(err)
 
 
#finally : 예외 처리 구문 중 정상적이건, 오류가 나건 무조건 실행
class BigNumberError(Exception):
    #pass
    def __init__(self, msg):
       self.msg = msg
    
    def __str__(self):
        return self.msg
 
try:
    print("한 자리 숫자 나누기 전용 계산기입니다.")
    num1 = int(input("첫 번째 숫자를 입력하세요 : "))
    num2 = int(input("두 번째 숫자를 입력하세요 : "))
    if num1 >= 10 or num2 >= 10:
        raise BigNumberError("입력값 : {0}, {1}".format(num1, num2))
    print("{0} / {1} = {2}".format(num1, num2, int(num1 / num2)))
except ValueError: #10이상 표시할 때 발생하는 에러
    print("잘못된 값을 입력하였습니다. 한 자리 숫자만 입력하세요")
except BigNumberError as err:
    print("에러가 발생하였습니다. 한 자리 숫자만 입력하세요2")
    print(err)
finally:
    print("계산기를 이용해 주셔서 감사합니다.")
 
 
#퀴즈
#자동 주문 시스템 제작
#조건 1 : 1도가 작거나 숫자가 아닌 입력값이 들어올 때 ValueError로 처리
        #출력 메시지 : "잘못된 값을 입력하였습니다"
#조건 2 : 대기 손님이 주문할 수 있는 총 치킨량은 10마리로 한정
        #치킨 소진 시 사용자 정의 에러[SoldOutError]를 발생시키고 프로그램 종료
        #출력 메시지 : "재고가 소진되어 더 이상 주문을 받지 않습니다."
 
#[코드] #기존 코드는 -1 입력시 chicken 값 증가됨
 
class SoldOutError(Exception): #조건 2
    pass
 
chicken = 10
waiting = 1 #홀 안에 현재 만석. 대기번호 1번부터 시작
while(True):
    try :
        print("[남은 치킨 : {0}]".format(chicken))
        order = int(input("치킨 몇 마리 주문하시겠습니까?"))
        if order > chicken: #남은 치킨보다 주문량이 많을 때
            print("재료가 부족합니다.")
        elif order <= 0#조건 1 해결법
            raise ValueError 
        else:
            print("[대기번호 {0}] {1} 마리 주문이 완료 되었습니다."\
                .format(waiting, order))
            waiting += 1
            chicken -= order
 
        if chicken == 0:
            raise SoldOutError
    except ValueError:
        print("잘못된 값을 입력하였습니다.")
    except SoldOutError:
        print("재고가 소진되어 더 이상 주문을 받지 않습니다.")
        break #while문 탈출
cs

<module>

[theather_module.py]

1
2
3
4
5
6
7
8
9
10
11
12
13
# 일반 가격
def price(people):
    print("{0}명 가격은 {1}원 입니다.".format(people, people*10000))
 
#조조할인 가격
def price_morning(people):
    print("{0}명 조조 할인 가격은 {1}원 입니다.".format(people, people*6000))
 
#군인 할인 가격
def price_soldier(people):
    print("{0}명 군인 할인 가격은 {1}원 입니다.".format(people, people*4000))
 
 
cs

[module_test.py]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import theather_module #폴더 내에 있으면 인식x
theather_module.price(3#3명이서 영화를 보러 갔을 때 가격 
theather_module.price_morning(4#4명이서 조조 할인 영화를 보러 갔을 때
theather_module.price_morning(4)
theather_module.price_soldier(5)
 
import theather_module as mv
mv.price(3)
mv.price_morning(4)
mv.price_soldier(5)
 
from theather_module import *
price(3)
price_morning(4
price_soldier(5)
 
from theather_module import price, price_morning
price(5)
price_morning(6)
#price_soldier(7) -> 쓸 수 없음
 
from theather_module import price_soldier
 
 
cs

<package> : Thailand.py, Vietnam.py, __init__.py 셋 다 travel 폴더에 존재

[Thailand.py]

1
2
3
4
5
6
7
8
9
10
11
12
#패키지 - 모듈을 모아놓음
class ThailandPackage:
    def detail(self):
        print(["[태국 패키지 4박5일] 방콕, 파타야 여행(야시장 투어) 50만원"])
 
if __name__ == "__main__":
    print("Thailand 모듈을 직접 실행")
    print("이 문장은 모듈을 직접 실행할 때만 실행돼요")
    trip_to = ThailandPackage()
    trip_to.detail()
else:
    print("Thailand 외부에서 모듈 호출")
cs

[Vietnam.py]

1
2
3
4
#패키지 - 모듈을 모아놓음
class VietnamPackage:
    def detail(self):
        print(["[베트남 패키지 3박5일] 다낭 효도 여행(야시장 투어) 60만원"])
cs

[__init__.py]

1
__all__ = ["Vietnam", "Thailand"]
cs

[package_test.py]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
from travel import Thailand
import travel.Thailand
trip_to = travel.Thailand.ThailandPackage()
trip_to.detail()
 
from travel.Thailand import ThailandPackage
trip_to = ThailandPackage()
trip_to.detail()
 
from travel import Vietnam
trip_to = Vietnam.VietnamPackage()
trip_to.detail()
 
from travel import * //travel 내 전체 파일 불러옴
# trip_to = Vietnam.VietnamPackage()
trip_to = Thailand.ThailandPackage()
trip_to.detail()
 
import inspect
import random
print(inspect.getfile(random))
print(inspect.getfile(Thailand))
cs

 

 

[practice5.py]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
from bs4 import BeautifulSoup
soup = BeautifulSoup("<p>Some<b>bad<i>HTML")
print(soup.prettify())
 
#내장함수
#input : 사용자의 입력을 받는 함수
language = input("무슨 언어를 좋아하세요?")
print("{0}은 아주 좋은 언어입니다!.".format(language))
 
#dir : 어떤 객체를 넘겨줬을 때 그 객체가 어떤 변수와 함수를 가지고 있는지 표시
print(dir())
import random #외장함수
print(dir())
import pickle
print(dir())
 
print(dir(random))
lst = [123]
print(dir(list))
 
name = "Jim"
print(dir(name))
 
#외장함수
#glob : 경로 내의 폴더 / 파일 목록 조회(윈도우 dir)
import glob
print(glob.glob("*.py")) #확장자가 py인 모든 파일
 
#os : 운영체제에서 제공하는 기본 기능
import os
print(os.getcwd()) #현재 디렉토리
 
folder = "sample_dir"
 
if os.path.exists(folder):
    print("이미 존재하는 폴더입니다.")
    os.rmdir(folder) #폴더 삭제
    print(folder, "폴더를 삭제하였습니다.")
else:
    os.makedirs(folder) #폴더 생성
    print(folder, "폴더를 생성하였습니다.")
 
 
print(os.listdir())
 
#time : 시간 관련 함수
import time
print(time.localtime())
print(time.strftime("%Y-%m-%d %H:%M:%S")) #2021-06-10 17:45:23
 
import datetime
print("오늘 날짜는 ", datetime.date.today()) #오늘 날짜는  2021-06-10
 
#timedelta : 두 날짜 사이의 간격
today = datetime.date.today() #오늘 날짜 저장
td = datetime.timedelta(days=100#100일 저장
print("우리가 만난 지 100일은", today+td) #우리가 만난 지 100일은 2021-09-18
 
#퀴즈
#프로젝트 내에 나만의 시그니처를 남기는 모듈을 만드시오
#조건 : 모든 파일명은 byme.py로 작성
 
#(모듈 사용 예제)
import byme
byme.sign()
 
#(출력 예제)
#이 프로그램은 나도코딩에 의해 만들어졌습니다
#유투브 : http://youtube.com
#이메일 : nadocoding@gmail.com
 
 
cs

[byme.py]

1
2
3
4
def sign():
    print("이 프로그램은 나도코딩에 의해 만들어졌습니다")
    print("유투브 : http://youtube.com")
    print("이메일 : nadocoding@gmail.com")
cs