부분별로 실행하면서 공부를 했기 때문에 소스 내용은 주석으로 막아 놨어요.
# 변수에 값 대입하기
# 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))
'프로그램 > 파이썬(Python)' 카테고리의 다른 글
디장고 환경 설정 (Setting Django environment) (0) | 2021.01.14 |
---|---|
여러 사진 합치기 파이썬 소스 연습용 (Multiple photo combinations Python source) (1) | 2021.01.14 |
파이썬 GUI 샘플 소스 (Python GUI sample source) (0) | 2021.01.14 |
파이썬(Python) 시작하기 (0) | 2021.01.14 |
웹브라우저에서 파이썬 테스트 하기 (0) | 2021.01.14 |