프로그램/파이썬(Python)

Hello Python 파이썬 기본 명령어 소스 (Hello python)

EVEWorld 2021. 1. 14. 06:01

 

 

부분별로 실행하면서 공부를 했기 때문에 소스 내용은 주석으로 막아 놨어요. 

 

# 변수에 값 대입하기

# aa1 = "sss"

# aa2 = "zzz"

# aa3 = 4

# is_can = aa3 >= 3

 

# 값 출력

# print("aaaa", aa1, aa2, aa3, is_can)

 

# 긴 글 주석 처리

'''asdfasdfasdf

asdf

asdf

# '''

# print(2**3) #2에 3승

# print(5%3) # 나머지

# print(5//3) #몫

 

# aa4 = 5

# aa4 %= 1

# print(aa4)

# print(pow(4, 2)) #4^2 = 16

# print(round(3.14)) # 3

 

# from math import *

# print(floor(4.99)) #내림 4

# print(ceil(3.14)) #올림 4

# print(sqrt(16)) #제곱근 4

 

# from random import *

# print(random()) #0.0 ~ 1.0 랜덤

# print(random() * 10) #0.0 ~ 10.0 랜덤

# print(int(random() * 10))

# print(int(random() * 10)+1) # 1 ~ 10의 랜덤

 

# print(randrange(1, 46)) #1 ~ 46미만의 랜덤

# print(randint(1, 45)) #1 ~ 45이하의 랜덤

 

# date = randint(4, 28)

# print("오프라인 스터디 모임 날짜는 매월", date, "일로 선정되었습니다.")

 

#--------------------------------------------------

# s = "나는 소년입니다."

# print(s)

# s1 = "파이썬은 쉬워요"

# print(s1)

# s2 = """나는 소년이고

# 파이썬은 쉬워요"""

# print(s2)

#--------------------------------------------------

 

# jumin = "721015-1100123"

 

# print("성별 : ", jumin[7]) #0부터 7번째 문자 1

# print("연 : ", jumin[0:2]) #0부터 2번째 전까지 문자 72

# print("월 : ", jumin[2:4]) #2부터 4번째 전까지 문자 10

# print("일 : ", jumin[4:6]) #4부터 6번째 전까지 문자 15

# print("뒷자리 : ", jumin[7:]) #7부터 끝까지 전까지 문자 1100123

# print("뒷자리 (뒤부터) : ", jumin[-7:]) #맨 뒤에서 -7까지 전까지 문자 1100123

 

#--------------------------------------------------

# p1 = "Python is Amazion"

# print(p1.lower())

# print(p1.upper())

# print(p1[0].isupper()) #p1의 첫 글자가 대문자인가?

# print(len(p1)) 

# print(p1.replace("is", "as"))

 

# index = p1.index("m")

# print(index) #문자 위치 찾기

# index = p1.index("m", index+1) #문자 m 찾은 상태에서 + 1의 값 / Error

# print(index) #문자 위치 찾기

 

# print(p1.find("Java")) # 원하는 값이 없으면 -1

# # print(p1.index("Java")) # 원하는 값이 없으면 Error

# print(p1.count("n"))

#--------------------------------------------------

 

# print("나는 %d살 입니다." % 20)

# print("나는 %s살 입니다." % 20)

# print("나는 %s살 입니다." % "파이썬")

# print("나는 %f살 입니다." % 1.4)

# print("나는 %c살 입니다." % "A")

 

# print("나는 %d살 %s입니다." % (20, "파이썬"))

 

# print("나는 {}살 입니다.".format(20))

# print("나는 {}살 {}입니다.".format(20, "파이썬"))

# print("나는 {1}살 {0}입니다.".format(20, "파이썬"))

 

# print("나는 {age}살이며 {color}색을 좋아합니다.".format(age = 20, color = "빨강"))

 

# age = 20

# color = "빨강"

# print(f"나는 {age}살이며 {color}색을 좋아합니다.")

 

# print("백문이 불여일견 \n백견이 불여일타") #줄바꿈

 

# print('저는 "나도코딩" 입니다.')

# print("저는 \"나도코딩\" 입니다.")

# print('저는 \'나도코딩\' 입니다.')

# print('c:\\')

# print("Red Apple\rPine") # \r에 의해 맨 앞에 Pine 만큼을 덮어쓴다.

# print("Redd\bApple") # \b에 의해 한칸 지우고 나머지를 쓴다.

# print("Red\tApple") #\t는 Tab

 

#--------------------------------------------------

# url = "http://daum.com" #각자 다른 싸이트를 넣으면 값이 다르게 나온다.

# str1 = url.replace("http://", "")

# print(str1)

# str2 = str1[:str1.index(".")] #str1의 0번째 부터 .의 위치 직전까지

# print(str2)

# passwd = str2[:3] + str(len(str2)) + str(str2.count("2")) + "!"

# print(passwd)

# print("{0} 의 비밀번호는 {1} 입니다.".format(str1, passwd))

 

#--------------------------------------------------

#리스트

#지하철 칸별로 10명, 20명, 30명

# sub1 = 10

# sub2 = 20

# sub3 = 30

 

# sub = [10, 20, 30]

# print(sub)

 

# sub = ["홍길동", "홍길순", "홍길녀"]

# print(sub)

 

# #홍길순이 몇번째 칸에 타고 있는가?

# print(sub.index("홍길순"))

 

# sub.append("하하") # 맨 뒤에 추가

# print(sub)

 

# sub.insert(1, "정형돈") # 1번째 추가

# print(sub)

 

# #맨뒤 하나 제거

# print(sub.pop())

 

# print(sub.count("홍길순")) # "홍길순"이 몇번 나오는지?

 

# num_lst = [4, 2, 5, 1]

# num_lst.sort()

# print(num_lst) #오름차순 정렬

 

# num_lst.reverse()

# print(num_lst) #내림차순 정렬

 

# num_lst.clear()

# print(num_lst) #모두 지우기

 

# num_lst = [4, 2, 5, 1]

# mix_lst = [1, True, "야"]

# print(mix_lst)

 

# num_lst.extend(mix_lst) #리스트 합치기

# print(num_lst)

 

#--------------------------------------------------

# 열쇠

# cab = {3:"유재석", 100:"김태호"} #Key의 값은 유재석

# print(cab[3]) #키 값을 넣으면 키에 대한 값 출력

# print(cab.get(3)) #위와 동일값

# print(cab.get(5)) #키 값이 없는 경우에는 None 나온다.

# print(cab.get(5, "사용 가능")) #키 값이 없는 경우에는 사용가능 나온다.

# print(3 in cab) #3이라는 키가 cab에 있는가?

 

# cab1 = {"a1":"유재석", "a2":"김태호"}

# print(cab1)

# cab1["a3"] = "조세호" #a3라는 키를 만들고 값으로 조세호가 들어간다. 동일한 키값이 존재하면 값이 업데이트 된다.

# cab1["a2"] = "딱따구리"

# print(cab1)

 

# del cab1["a3"]

# print(cab1)

 

# print(cab1.keys())  #키값만 출력

# print(cab1.values()) #값만 출력

# print(cab1.items()) #키와 값을 쌍으로 출력

 

# cab.clear() #열쇠 클리어

# print(cab)

 

#--------------------------------------------------

# 튜플 : 리스트와 다르게 변경이 안됨, 속도가 빠름

# menu = ("돈까스", "치즈까스")

# print(menu[0])

# print(menu[1])

 

# name = "김종국"

# age = 20

# hobby = "코딩"

# print(name, age, hobby)

 

# name1, age1, hobby1 = "홍길동", 40, "테니스" #변수 정의를 편하게 쓸수 있다.

# print(name1, age1, hobby1)

 

#--------------------------------------------------

#세트 (집합) : 중복되지 않고 순서가 없는 경우

# set1 = {1, 2, 3, 3, 3}

# print(set1) #중복되는 값은 출력되지 않는다.

 

# java = {"유재석", "김태호", "양세형"}

# python = set(["유재석", "박명수"])

 

# #교집합 (java와 python을 모두 할수 있는 개발자)

# print(java & python)

# print(java.intersection(python))

 

# #합집합 (Java도 할 수 있고 python도 할 수 있는 개발자)

# print(java | python)

# print(java.union(python))

 

# #차집합 (Java는 할 수 있지만 python은 할수 없는 개발자)

# print(java - python)

# print(java.difference(python))

 

# #python 할줄 아는 사람이 늘어남

# python.add("김태호")

# print(python)

 

# #java를 잊어버렸다.

# java.remove("김태호")

# print(java)

 

#--------------------------------------------------

#자료구조의 변경 (형변환)

# menu = {"커피", "우유", "쥬스"}

# print(menu, type(menu)) #타입이 set형

 

# menu = list(menu)

# print(menu, type(menu)) #리스트형으로 변환

 

# menu = tuple(menu)

# print(menu, type(menu)) #튜퓰형으로 변환

 

# menu = set(menu)

# print(menu, type(menu)) #set형으로 변환

#--------------------------------------------------

# 랜덤한 값에서 특정 당첨자별로 치킨과 커피를 준다는 예제

# from random import *

# lst = [1, 2, 3, 4, 5]

# print(lst)

# shuffle(lst) #lst의 값의 순서가 랜덤하게 바뀐다.

# print(lst)

# print(sample(lst, 1)) #lst 내역중에 하나를 뽑는다.

 

# users = range(1, 21) #1 ~ 20까지의 숫자를 생성

# print(type(users)) #type이 range형이기 때문에 list형으로 변환

# users = list(users)

# print(users)

 

# shuffle(users) #users의 값의 순서가 랜덤하게 바뀐다.

# print(users)

 

# winners = sample(users, 4) #users 내역중에 4개를 뽑는다.

# print(" 당첨자 발표 ")

# print("치킨 당첨자 : {0}".format(winners[0]) )

# print("커피 당첨자 : {0}".format(winners[1:]) )

# print("축하합니다." )

 

#--------------------------------------------------

# if

# weather = input("오늘 날씨는 어때요? ") #input은 화면에서 입력을 대기한다.

# if weather == "비":

#     print("우산을 챙기세요")

# elif weather == "미세먼지":

#     print("마스크를 챙기세요")

# else:

#     print("준비물 필요가 없어요")

 

# int1 = int(input("오늘 기온은 몇도인가요? ")) #input은 화면에서 입력을 대기한다. 숫자형

# if int1 < 0:

#     print("춥네요.")

# elif int1 > 30:

#     print("아주 더워요")

# else:

#     print("적당한 날씨입니다.")

 

#--------------------------------------------------

# for

# for wait1 in [0, 1, 2, 3, 4, 5]: #정해진 숫자를 순서대로 실행하는 경우

#     print("커피숖 대기번호 : {0}".format(wait1))

 

# for wait2 in range(11): # 0 ~ 10

#     print("열차 대기번호 : {0}".format(wait2))

 

# for wait3 in range(1, 11): # 1 ~ 10

#     print("코끼리열차 대기번호 : {0}".format(wait3))

 

# star1 = ["아이언맨", "토르", "에어맨", "그루트"]

# for wait4 in star1: # star1의 내용을 순서대로

#     print("{0} 입장하세요.".format(wait4))

 

# cust = "토르"

# index = 5

# while index >= 1:

#     print("{0} 손님 커피가 준비되었습니다. {1} 번 남았어요".format(cust, index))

#     index -= 1

#     if index == 0:

#         print("커피는 폐기처분되었습니다.")

 

# cust = "아이언맨" 

# index = 1

# while True: #무한루프

#     print("{0} 손님 커피가 준비되었습니다. {1} 번 남았어요".format(cust, index))

#     index += 1

    

# cust = "아이언맨" 

# person = ""

# index = 1

# while cust != person: #무한루프

#     print("{0} 손님 커피가 준비되었습니다. {1} 번 남았어요".format(cust, index))

#     person = input("입력 ")

#     index += 1

#--------------------------------------------------

# continue

 

# abc = [2, 5]

# for student in range(1, 11):

#     if student in abc:

#         continue

 

#     print("{0}, 책을 읽어봐".format(student))  #2, 5를 건너 뛴다.

 

# abc = [7]

# for student in range(1, 11):

#     if student in abc:

#         break

 

#     print("{0}, 책을 읽어봐".format(student))  #6번 까지만 출력하고 끝낸다.



#--------------------------------------------------

# 한줄 for

# stu = [1, 2, 3, 4, 5]

# print(stu)

# stu = [i+100 for i in stu]  #i를 stu 개수 만큼 반복을 하는데 i에 stu값이 대처가 된다. 

# # 이 때, i+100 의 값을 stu에 적용한다.

# print(stu)

 

# stu = ["Iron man", "Thor", "I am groot"]

# stu = [len(i) for i in stu]  #i를 stu 개수 만큼 반복을 하는데 i에 stu값이 대처가 된다. 

# # 이 때, i의 길이값을 stu에 적용한다.

# print(stu)

 

# stu = ["Iron man", "Thor", "I am groot"]

# stu = [i.upper() for i in stu]  #i를 stu 개수 만큼 반복을 하는데 i에 stu값이 대처가 된다. 

# # 이 때, i의 대문자값을 stu에 적용한다.

# print(stu)

 

#--------------------------------------------------

# from random import *

# cnt = 0 # 총 탑승 승객 수

# for i in range(1, 51): # 1~50 이라는 수 (승객)

#     time = randrange(5, 51) #5분 ~ 50분 소요시간

#     if 5 <= time < 15: #5분 ~ 15분 이내의 손님, 탑승 승객 수 증가처리

#         print("[0] {0} 번째 손님 (소요시간 : {1}분 )".format(i, time))

#         cnt += 1

#     else:

#         print("[ ] {0} 번째 손님 (소요시간 : {1}분 )".format(i, time))

        

# print("총 탑승 승객 : {0} 분".format(cnt))

 

#--------------------------------------------------

# 합수 선언과 리턴

# def open_account():

#     print("새로운 계좌가 생성되었습니다.")

 

# open_account()

 

# def open1(a1, a2):

#     print("새로운 계좌가 생성되었습니다.{0}, {1}".format(a1, a2))

#     return a1 + a2

 

# a3 = 0

# a3 = open1(a3, 20)

# print(a3)

 

# def open2(a1, a2):

#     return a1 + a2, a1 * a2

 

# a3, a4 = open2(10, 20) #리턴값이 여러개인 경우

# print(a3, a4)

 

#--------------------------------------------------

# 합수에 기본값 설정

# def func1(name, age=17, sex="남자", lang="자바"):

#     print("이름 : {0}\t나이 : {1}\t성별 : {2}\t사용언어 : {3}" \

#         .format(name, age, sex, lang))

    

# func1("유재석", 20, "남자", "자바")    

# func1("홍길동", 30, "남자", "파이썬")    

# func1("홍길순")    

 

# # 키워드값을 이용한 함수 호출

# func1(name="홍말숙", age=25, sex="남자", lang="자바")    

# func1(lang="자바", name="홍말숙", sex="남자", age=25)    

 

# #--------------------------------------------------

# def func2(name, age, sex, lang1, lang2, lang3):

#     #end=" "의 의미는 뒤에 이어서 계속 출력하겠다는 의미

#     print("이름 : {0}\t나이 : {1}\t성별 : {2}\t".format(name, age, sex), end=" ")

#     print(lang1, lang2, lang3)

 

# func2("차차차", 24, "Man", "A++", "B++", "C++")    

 

# def func3(name, age, sex, *lang): #뒤에 무한대의 변수를 넣을 수 있다.(가변)

#     #end=" "의 의미는 뒤에 이어서 계속 출력하겠다는 의미

#     print("이름 : {0}\t나이 : {1}\t성별 : {2}\t".format(name, age, sex), end=" ")

#     for lang_s in lang:

#         print(lang_s, end=" ")



# func3("타타타", 27, "Women", "A++", "B++", "C++", "D++")

 

#--------------------------------------------------

# 지역변수, 전역변수

# gun = 10

 

# def func4(solid):

#     global gun #외부에 있는 변수를 func4합수에서도 이용하겠다는 의미

#     gun = gun + solid

#     print("값 : {0}".format(gun))

 

# func4(4)

# print("gun : {0}".format(gun))

 

#--------------------------------------------------

# print("AAA", "BBB", sep="_") # AAA_BBB

# print("AAA", "BBB", "CCC", sep=" vs ") # AAA vs BBB vs CCC

# print("AAA", "BBB", "CCC", sep=",", end="?") # end의 ?는 아래 출력을 한줄에 하게 한다.

# print("aaaaaaaa?")

 

# import sys

# print("Python", "java", file=sys.stdout) #표준 출력

# print("Python", "java", file=sys.stderr) #표준 에러

 

# score = {"수학":0, "영어":100, "코딩":50}

# for subject, score in score.items():

#     #subject를 8칸 확보 후 왼쪽으로 정렬

#     #score를 4칸 확보 후 오른쪽 정렬

#     print(subject.ljust(8), str(score).rjust(4), sep=":") 

#     #zfill 4칸 숫자에 마춰서 zero 로 채운다.

#     print(subject.ljust(8), str(score).zfill(4).rjust(5), sep=":") 

 

#--------------------------------------------------

# 빈 자리는 빈공간으로 두고 오른쪽 정렬을 하되, 총 10자리 공간 확보

# >는 오른쪽이라는 의미이다.

# print("|{0: >10}|".format(500))

# # <는 왼쪽이라는 의미이다.

# print("|{0: <10}|".format(500))

# # +는 부호값 표시 의미이다.

# print("|{0: >+10}|".format(500))

# print("|{0: >+10}|".format(-500))

# # *는 채워지는 값 표시 의미이다.

# print("|{0:*<+10}|".format(500))

# print("|{0:*<10}|".format(500))

# # ,는 금액표시

# print("|{0:,}|".format(500000000000))

# # ,는 금액표시

# print("|{0:+,}|".format(500000000000))

# # 금액형태로 30자리 확보 후 왼쪽 정렬

# print("|{0: <+20,}|".format(500000000000))

# # 소수점

# print("{0:f}".format(5/3))

# print("{0:.2f}".format(5/3)) #소수점 2자리 반올림

 

#--------------------------------------------------

# 파일 입력

# score_file = open("aaa.txt", "w", encoding="utf8")

# print("수학 : 0", file=score_file)

# print("영어 : 50", file=score_file)

# score_file.close()

 

# # 파일 추가 입력

# score_file = open("aaa.txt", "a", encoding="utf8")

# score_file.write("과학 : 100")

# score_file.write("\n국사 : 70")

# score_file.close()

 

# 쓰기 (With 이용)

# with open("aaa.txt", "a", encoding="utf8") as score_file

#     score_file.write("파이썬 공부")

# score_file.close()



# # 파일 읽기

# score_file = open("aaa.txt", "r", encoding="utf8")

# print(score_file.read())

# score_file.close()

 

# # 파일 한줄씩 읽기 (한줄 읽은 후 커서는 다음 라인으로 이동)

# score_file = open("aaa.txt", "r", encoding="utf8")

# print(score_file.readline(), end="")

# print(score_file.readline(), end="")

# print(score_file.readline(), end="")

# print(score_file.readline())

# score_file.close()

 

# score_file = open("aaa.txt", "r", encoding="utf8")

# print(score_file.readlines())

# score_file.close()

 

# # 가변 라인의 경우 한줄씩 출력

# score_file = open("aaa.txt", "r", encoding="utf8")

# while True:

#     line = score_file.readline()

#     if not line:

#         break

#     else:

#         print(line, end="")

 

# score_file.close()

 

# # 리스트에 넣어 처리

# score_file = open("aaa.txt", "r", encoding="utf8")

# lines = score_file.readlines()

# for line in lines:

#     print(line, end="")

 

# score_file.close()

 

#--------------------------------------------------

# 피클(Pikel) - 2진 처리 (파일 형태로 저장해서 활용하기 위한 방법)

# import pickle

# profile_file = open("profile.pickle", "wb")

# profile = {"이름":"박명수", "나이":30, "취미":["축구", "야구", "골프"]}

# pickle.dump(profile, profile_file) #profile에 있는 정보를 file에 저장

# profile_file.close()

 

# # 읽기

# profile_file = open("profile.pickle", "rb")

# profile = pickle.load(profile_file)

# print(profile)

# profile_file.close()

 

# 위와 같은 효과 (With 로 정의)

# with open("profile.pickle", "rb") as profile_file

#     print(pickle.load(profile_file))

# with open("test.txt", "w", encoding="utf8") as profile_file:

#     profile_file.write("파이썬을 열심히 공부중입니다.")

# 이 경우의 경우에는 close를 하지 않아도 with를 탈출하게 되면 자동으로 close가 된다.

 

#--------------------------------------------------

# 클래스

# class Unit:

#     def __init__(self, name, hp, damage):

#         self.name = name # .name 클래스 변수를 멤버변수라고 한다.

#         self.hp = hp

#         self.damage = damage

#         print("{0} 유닛이 생성되었습니다.".format(self.name))

#         print("체력 {0}, 공격력 {1}".format(self.hp, self.damage))

        

# marine1 = Unit("마린",  40, 5)

# marine2 = Unit("마린",  40, 5)

# tank1 = Unit("탱크",  200, 30)

# print(" 유닛이름 : {0}, 생명력 : {1}, 공격력 : {2}".format(tank1.name, marine1.hp, marine2.damage))

 

# tank1.stage = "정상" # 클래스 안에 변수를 지정해서도 사용 할 수 있다.

# print("{0}는 현재 {1}에 있다.".format(tank1.name, tank1.stage))

 

#--------------------------------------------------

# 메쏘드 (클래스 내의 함수), 상속 방법

# class Unit: # 부모 클래스

#     def __init__(self, name, hp):

#         self.name = name # .name 클래스 변수를 멤버변수라고 한다.

#         self.hp = hp

 

# class AttackUnit(Unit): # AttackUnit(자식 클래스)은 Unit을 상속 받아서 만들어진 클래스

#     def __init__(self, name, hp, damage):

#         Unit.__init__(self, name, hp) # 상속 받은 클래스의 변수 정의

#         # super().__init__(name, hp) 위 문장은 이와 같이 포현되기도 한다.

#         # 다중상속의 경우 마지막에 상속을 받는 것만 해당한다.

#         self.damage = 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))

 

# firebat1 = AttackUnit("파이어뱃", 50, 15)

# firebat1.attack("5시") # AttackUnit 클래스에 있는 attack 메쏘드를 호출

# firebat1.damaged(25)

# firebat1.damaged(25)

 

#--------------------------------------------------

# 다중상속 방법

# 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)

 

# valkyrie = FlyableAttackUnit("발키리", 200, 5, 5)

# valkyrie.fly(valkyrie.name, "3 시")

 

#--------------------------------------------------

# pass 를 쓰면 완성된것 처럼 하고 그냥 지나간다.

# class BuildingUnit(Unit)

#     def __init__(self, name, hp, location) 

#         pass 

 

# 완성된것 처럼 보여준다.

# supply_depot = BuildingUnit("서플라이 디폿", 500, "7시")    

 

# if isinstance(unit, Marine): Unit가 Marine 클래스인가?

 

#--------------------------------------------------

# 퀴즈

# (출력 예제)

# 총 3대의 매물이 있습니다.

# 강남 아파트 매매 10억 2010년

# 마포 오피스텔 전세 5억 2007년

# 송파 빌라 월세 500/50 2000년

 

# class house:

#     # 매물 초기화

#     def __init__(self, location, house_type, deal_type, price, completion_year):

#         self.location   = location

#         self.house_type = house_type

#         self.price      = price

#         self.deal_type  = deal_type

#         self.completion_year = completion_year

 

#     # 매물 정보 표시

#     def show_detail(self):

#         print(self.location, self.house_type, self.price, self.deal_type, self.completion_year)

 

# houses = []

# house1 = house("강남", "아파트", "매매", "10억", "2010년")

# house2 = house("마포", "오피스텔", "전세", "5억", "2007년")

# house3 = house("송파", "빌라", "월세", "500/50", "2000년")

 

# houses.append(house1)

# houses.append(house2)

# houses.append(house3)

 

# print("총 {0} 개의 매물이 있습니다. ".format(len(houses)))

# for house in houses:

#     house.show_detail()



#--------------------------------------------------

# 예외처리

# try:

#     print("나누기 전용 계산기입니다.")

#     nums = []

#     num1 = int(input("첫번째 숫자를 입력하세요 :"))

#     num2 = int(input("두번째 숫자를 입력하세요 :"))

 

#     nums.append(num1)

#     nums.append(num2)

#     nums.append(int(nums[0]/nums[1]))

#     # nums[3]은 리스트에 없는 값이므로 에러 발생

#     print("{0} / {1} = {2}".format(nums[0], nums[1], nums[3])) 

#     print("{0} / {1} = {2}".format(num1, num2, int(num1/num2)))

# except ValueError:

#     print("Error")

# except ZeroDivisionError as err:

#     print(err)

# except Exception as err: # nums[3]에 의해 에러

#     print("알 수 없는 에러가 발생했습니다. : {0}".format(err))

 

#--------------------------------------------------

# 일부러 에러 발생시키기

# try:

#     print("한 자리 숫자 나누기 전용 계산기입니다.")

#     num1 = int(input("첫번째 숫자를 입력하세요 : "))

#     num2 = int(input("두번째 숫자를 입력하세요 : "))

#     if num1 >= 10 or num2 >= 10:

#         raise ValueError # 값 err 발생

#     print("{0} / {1} = {2}".format(num1, num2, int(num1/num2)))

# except ValueError:

#     print("잘못된 값을 입력했습니다. 한자리 숫자만 입력하세요.")

 

#--------------------------------------------------

# 사용자 정의 에러 처리

# class BigNumberError(Exception):

#     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("\n입력값 : {0}, {1}".format(num1, num2)) # 값 err 발생

#     print("{0} / {1} = {2}".format(num1, num2, int(num1/num2)))

# except BigNumberError as err:

#     print("에러가 발생했습니다. 한자리 숫자만 입력하세요. : {0}".format(err))

 

#--------------------------------------------------

# finally : 오류가 있던 없던 무조건 실행되는 경우 이용

# class BigNumberError(Exception):

#     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("\n입력값 : {0}, {1}".format(num1, num2)) # 값 err 발생

#     print("{0} / {1} = {2}".format(num1, num2, int(num1/num2)))

# except BigNumberError as err:

#     print("에러가 발생했습니다. 한자리 숫자만 입력하세요. : {0}".format(err))

# finally:

#     print("계산기 연습이었습니다.")

 

#--------------------------------------------------

# 퀴즈 : 동네에 항상 대기 손님이 있는 맛있는 치킨집이 있습니다.

# 대기 손님의 치킨 요리 시간을 줄이고자 자동 주문 시스템을 제작했습니다.

# 시스템 코드를 확인하고 적절한 예외처리 구분을 넣으세요.

# 조건1 : 1보자 작거나 숫자가 아닌 입력값이 들어올 때에는 ValueError로 처리하고

#         출력 메세지는 : 잘못된 값을 입력했습니다.

# 조건2 : 대기 손님이 주문할 수 있는 총 치킨량은 10마리로 한정

#         치킨 소진 시 사용자 정의 에러[SoldOutError]를 발생시키고 프로그램 종료

#         출력 메세지는 : 재고가 소진되어 더 이상 주문을 받지 않습니다.

# class SoldOutError(Exception):

#     pass

 

# chicken = 10

# waiting = 1 # 홀 안에는 현재 만석. 대기번호는 1부터 시작

# while(True):

#     try:

#         print("[남은 치킨 : {0}]".format(chicken))

#         order = int(input("치킨 몇 마리를 주문하시겠습니까? "))

#         if order > chicken:

#             print("재료가 부족합니다.")

#         elif order <= 0:

#             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

 

#--------------------------------------------------

# 모듈 : 같은 경로에 있어야 한다.

# import sale_file1

# sale_file1.price(3) # 3명이 영화보러 갔을 때의 가격

# sale_file1.price_morning(4) # 4명이 조조 할인 영화보러 갔을 때의 가격

# sale_file1.price_soldier(5) # 5명이 군인 할인 영화보러 갔을 때의 가격

 

# import sale_file1 as mv # 별명 지정

# mv.price(3) # 3명이 영화보러 갔을 때의 가격

# mv.price_morning(4) # 4명이 조조 할인 영화보러 갔을 때의 가격

# mv.price_soldier(5) # 5명이 군인 할인 영화보러 갔을 때의 가격

 

# from sale_file1 import *

# price(3) # 3명이 영화보러 갔을 때의 가격

# price_morning(4) # 4명이 조조 할인 영화보러 갔을 때의 가격

# price_soldier(5) # 5명이 군인 할인 영화보러 갔을 때의 가격

# 모두 같은 의미 이다.

 

# pric와 price_morning 만 쓰려고 하는 경우

# from sale_file1 import price, price_morning

# price(3) # 3명이 영화보러 갔을 때의 가격

# price_morning(4) # 4명이 조조 할인 영화보러 갔을 때의 가격

 

# 모듈 안에 하나의 메쏘드만 이용 하려는 경우 별명을 붙여 이용 가능하다.

# from sale_file1 import price_soldier as mv

# mv(5)

 

#--------------------------------------------------

# 패키지 : 모듈을 모아놓은 집합

# import 의 뒤에는 항상 모듈이나 패키지만 가능. 만약 클래스까지 쓰고 싶다면 from import 로 쓴다.

# import travel.bangkok # 폴더.모듈

# trip_to = travel.bangkok.bangkok_pakage()

# trip_to.detail()

 

# from travel.bangkok import bangkok_pakage # 폴더.모듈.클래스

# trip_to = bangkok_pakage()

# trip_to.detail()

 

# from travel import japen # 폴더.모듈.클래스

# trip_to = japen.japen_pakage()

# trip_to.detail()

 

#--------------------------------------------------

# __all__ 패키지 사용 하는 방법 (__init__.py)

# from travel import * # *의 의미는 모든것을 가져다 쓰겠다는 말이다. 그러나 __init__에서 지정한 것들로 이용 가능

# trip_to = japen.japen_pakage()

# trip_to.detail()

# trip_to = bangkok.bangkok_pakage()

# trip_to.detail()

 

#--------------------------------------------------

# 사용하는 클래스가 어떤 경로에 있는지 찾고 싶은 경우 inspect 이용

# import inspect

# import random

# print(inspect.getfile(random))

# print(inspect.getfile(bangkok))

 

#--------------------------------------------------

# pip로 패키지 설치하기 (새로운 패키지는 계속 개발중이다) 그래서 개발이 편하다

https://pypi.org/ 에서 설치 (터미널 창에서 설치 및 제거, 정보수집)

 

#--------------------------------------------------

# 내장 함수

https://docs.python.org/ko/3/library/functions.html 참조

# input : 입력값 받는 경우 사용

# dir : 어떤 객체를 넘겨줬을 때 그 객체가 어떤 변수와 함수를 가지고 있는지 표시

# print(dir())

# import random

# print(dir())

# import pickle

# print(dir())



# print(dir(random)) # random 패키지에서 이용 할 수 있는 클래스들을 나타내 준다.

 

# lst = [1, 2, 3]

# print(dir(lst)) # 리스트형에서 활용할 수 있는 클래스들을 나타내 준다.

 

# str1 = "aaa"

# print(dir(str1)) # 스트링형에서 활용할 수 있는 클래스들을 나타내 준다.

 

#--------------------------------------------------

# 외장 함수 (실제로 import 해서 사용해야 하는 함수)

# glob : 경로 내의 폴더 / 파일 목록 조회 (윈도우 dir)

# import glob

# print(glob.glob("*.py")) # 확장자가 py 인 파일을 모두 나타내어 준다.

 

# os : 운영체제에서 제공하는 기본 기능

# import os

# print(os.getcwd()) # 현재 디렉토리 표시

 

# folder = "sample_dir"

# if os.path.exists(folder):

#     print("존재하지 않는 폴더 입니다.")

# else:

#     os.makedirs(folder)

#     print("폴더 생성 되었습니다.")

 

# os.rmdir(folder)

# print("폴더 삭제 완료")

 

# print(os.listdir())

 

# time

# import time

# print(time.localtime())

# print(time.strftime("%Y-%m-%d %H:%M:%S"))

 

# import datetime

# print(datetime.date.today())

 

# # timedelta : 두 날짜의 간격

# today = datetime.date.today() # 오늘 날자

# td = datetime.timedelta(days=100)  # 100일 저장

# print("오늘 날자는 {0}이고 100일 후 날자는 {1} 입니다.".format(today, today+td))

# print("오늘 날자는 {0}이고 100일 이전 날자는 {1} 입니다.".format(today, today-td))