나도코딩 '파이썬 코딩 무료 강의(기본편) - 6시간 뒤면 여러분도 개발자가 될 수 있어요' 정리
##숫자처리함수
print(abs(-5)) #절대값 5
print(pow(4, 2)) #제곱수 -> 4^2=16
print(max(5, 12)) #최대값 12
print(min(5, 12)) #최솟값 5
print(round(3.14)) #반올림 3
print(round(4.99)) #반올림 5
# math 라이브러리 사용
from math import *
print(floor(4.99)) #내림 4
print(ceil(3.14)) #올림 4
print(sqrt(16)) #제곱근 4
##랜덤함수
# random 라이브러리 사용
from random import *
print(random()) #0.0 ~ 1.0 미만의 임의의 값 생성
print(random() * 10) #0.0 ~ 10.0 미만의 임의의 값 생성
print(int(random() * 10)) #0 ~ 10 미만의 임의의 값 생성
print(int(random() * 10) + 1) #1 ~ 10 이하의 임의의 값 생성
print(int(random() * 45) + 1) #1 ~ 45 이하의 임의의 값 생성
print(randrange(1, 46)) #1 ~ 46 미만의 임의의 값 생성
print(randint(1, 45)) #1 ~ 45 이하의 임의의 값 생성
##Quiz##
# 당신은 최근에 코딩 스터디 모임을 새로 만들었습니다.
# 월 4회 스터디를 하는데 3번은 온라인, 1번은 오프라인
# 조건에 맞는 오프라인 모임 날짜를 정해주는 프로그램 작성.
# 조건 1 : 랜덤으로 날짜를 뽑아야 함
# 조건 2 : 월별 날짜는 다름을 감안하여 최소 일수인 28 이내로 정함
# 조건 3 : 매월 1~3일은 스터디 준비를 해야 하므로 제외
from random import *
date = randint(4,28)
print("오프라인 스터디 모임 날짜는 매월 " + str(date) + " 일로 선정되었습니다.")
##문자열
# '' "" 둘 다 상관없다
sentence = '나는 소년입니다'
print(sentence)
sentence1 = "파이썬은 쉬워"
print(sentence1)
#여러 줄로 문자열 표현
sentence2 = """
나는 소년이고,
파이썬은 쉬워
"""
print(sentence2)
##슬라이싱
jumin = "990120-1234567"
print("성별 : " + jumin[7]) # 1
print("연 : " + jumin[:2]) # 99
print("월 : " + jumin[2:4]) # 01
print("일 : " + jumin[4:6]) # 20
print("생년월일 : " + jumin[:6]) # 990120
print("뒤 7자리 : " + jumin[7:]) # 1234567
print("뒤 7자리(뒤에서부터) : " + jumin[-7:]) # 1234567
# 맨 뒤부터 index -1 이므로 '1234567'에서 '1'의 index=-7
##문자열 처리함수
sentence = "Python is Amazing"
# lower(소문자로 변환)
print(sentence.lower()) # python is amazing
# upper(대문자로 변환)
print(sentence.upper()) # PYTHON IS AMAZING
print(sentence[0].isupper()) #해당 문자의 대/소문자 여부(true/false) T
print(len(sentence)) #문자열 길이 17
print(sentence.replace("Python", "Java")) #Python을 찾아서 Java로 교체 Java is Amazing
#문자 위치(인덱스) 찾기
#1. index 함수
index = sentence.index("n")
print(index) # 5
index = sentence.index("n", index+1) #index+1=6은 시작위치를 의미. 시작위치부터 해당문자의 인덱스를 찾음
print(index) # 15
#2. find 함수
print(sentence.find("n")) # 5
#원하는 값이 문자열에 없을 경우
#find -> -1 출력
print(sentence.find("Java"))
#index -> 오류 후 프로그램 종료
# print(sentence.index("Java"))
print(sentence.count("n")) #문자열 안에서 해당문자의 개수 2
##문자열 포맷방법
#방법1 - %
print("나는 %d살입니다." % 20) #숫자
print("나는 %s을 좋아해요." % "파이썬") #문자열
print("Apple은 %c로 시작해요." % "A") #문자
print("나는 %s색과 %s색을 좋아해요." % ("파란", "빨간"))
# %s는 정수, 문자 상관없이 모두 가능
print("나는 %s살이고, %s 색을 좋아해요" %(20, "분홍"))
#방법2 - {}
print("나는 {}살입니다." .format(20))
print("나는 {}색과 {}색을 좋아해요." .format("파란", "빨간"))
print("나는 {0}색과 {1}색을 좋아해요." .format("파란", "빨간"))
#방법3
print("나는 {age}살이며, {color}색을 좋아해요". format(age = 20, color = "빨간"))
#방법4(v3.6 이상부터 가능)
age = 20
color = "빨간"
print(f"나는 {age}살이며, {color}색을 좋아해요.")
##탈출문자
#\n : 줄바꿈
print("백문이 불여일견\n백견이 불여일타")
# 백문이 불여일견
# 백견이 불여일타
#\" : 문장 내에서 ", \' : 문장 내에서 '
print("저는 \"나도코딩\"입니다.") # 저는 "나도코딩"입니다.
print("저는 \'나도코딩\'입니다.") # 저는 '나도코딩'입니다.
#\\ : 문장 내에서 \
print("C:\\Users\\PythonWorkspace\\python") # C:\Users\PythonWorkspace\python
#\r : 커서를 맨 앞으로 이동
print("Red Apple\rPine") # PineApple
#\b : 백스페이스(한글자 삭제)
print("Redd\bApple") # RedApple
#\t : 탭
print("Red\tApple") # Red Apple
##Quiz##
#사이트별로 비밀번호를 만들어 주는 프로그램을 작성하시오
#규칙1 : http:// 부분은 제외 -> naver.com
#규칙2 : 처음 만나는 점(.) 이후 부분은 제외 -> naver
#규칙3 : 남은 글자 중 처음 세자리 + 글자 갯수 + 글자 내 'e' 갯수 + "!" f로 구성
# ex. http://naver.com -> nav51!
site = input()
my_site = site.replace("http://", "") #http://를 ""(공백)으로 교체
my_site = my_site[:my_site.index(".")] #.이후 부분 제외
password = my_site[:3] + str(len(my_site)) + str(my_site.count("e")) + "!"
print("{0} 의 비밀번호는 {1} 입니다. " .format(site, password))
##리스트(list): []
subway =[10, 20, 30]
print(subway) # [10, 20, 30]
subway =["유재석", "조세호", "박명수"]
print(subway) # ["유재석", "조세호", "박명수"]
#조세호씨가 몇 번째 칸에 타 있는가?
print(subway.index("조세호")) # 1
#하하씨가 다음 정류장에서 다음 칸에 탐
subway.append("하하")
print(subway) # ['유재석', '조세호', '박명수', '하하']
#정형돈씨를 유재석/조세호 사이에 태움
subway.insert(1, "정형돈") #1 번째 위치에 '정형돈' 추가
print(subway) # ['유재석', '정형돈', '조세호', '박명수', '하하']
#지하철에 있는 사람을 한 명씩 뒤에서 꺼냄
print(subway.pop()) #빼낸 사람 하하
print(subway) #빼낸 후 subway ['유재석', '정형돈', '조세호', '박명수']
#같은 이름의 사람이 몇명 있는지 확인
subway.append("유재석")
print(subway) # ['유재석', '정형돈', '조세호', '박명수', '유재석']
print(subway.count("유재석")) # 2
#리스트 정렬
num_list=[5,2,4,3,1]
num_list.sort()
print(num_list) # [1, 2, 3, 4, 5]
#리스트 뒤집기
num_list1=[5,2,4,3,1]
num_list1.reverse()
print(num_list1) # [1, 3, 4, 2, 5]
#모두 지우기
num_list.clear()
print(num_list)
#하나의 리스트에 다양한 자료형 함께 사용 가능
mix_list=["조세호", 20, True]
print(mix_list) # ["조세호", 20, True]
#리스트 확장(합칩)
num_list=[5,2,4,3,1]
num_list.extend(mix_list)
print(num_list) # [5, 2, 4, 3, 1, '조세호', 20, True]
##사전(dictionary) : {}
# 'key : value' 형태
# key 중복 허용 X
cabinet = {3: "유재석", 100: "김태호"}
print(cabinet) # {3: "유재석", 100: "김태호"}
print(cabinet[3]) # 유재석
print(cabinet[100]) # 김태호
print(cabinet.get(3)) # 유재석
#딕셔너리에 없는 키일 경우
print(cabinet[5]) # 오류 발생 후 프로그램 종류
print(cabinet.get(5)) # None 출력
print(cabinet.get(5, "사용 가능")) # None이 아닌 다른 기본값을 지정할 수 있음
#딕셔너리에 키가 있는지 확인
print(3 in cabinet) # True
print(5 in cabinet) # False
#딕셔너리 키는 문자열도 가능
cabinet = {"A-3": "유재석", "B-100": "김태호"}
print(cabinet)
print(cabinet["A-3"])
print(cabinet["B-100"])
#딕셔너리에 추가
print(cabinet)
cabinet["C-20"] = "조세호"
print(cabinet) # {'A-3': '유재석', 'B-100': '김태호', 'C-20': '조세호'}
#해당 키가 이미 사용중일 경우 value 가 업데이트 됨
cabinet["A-3"] = "김종국"
print(cabinet) # {'A-3': '김종국', 'B-100': '김태호', 'C-20': '조세호'}
#딕셔너리 삭제
del cabinet["A-3"]
print(cabinet) # {'B-100': '김태호', 'C-20': '조세호'}
#key 들만 출력
print(cabinet.keys()) # dict_keys(['B-100', 'C-20'])
#value 들만 출력
print(cabinet.values()) # dict_values(['김태호', '조세호'])
#key, value 쌍으로 출력
print(cabinet.items()) # dict_items([('B-100', '김태호'), ('C-20', '조세호')])
#모두 지우기
cabinet.clear()
print(cabinet)
##튜플(tuple) : ()
# 내용 변경, 추가 X
# 리스트보다 속도가 빠름
menu = ("돈까스", "치즈까스")
print(menu[0]) # 돈까스
print(menu[1]) # 치즈까스
#튜플로 한번에 값 선언이 가능함
(name, age, hobby) = ("김종국", 20, "코딩")
print(name, age, hobby)
##집합(set)
# 중복 X, 순서 X
my_set ={1, 2, 3, 3, 3}
print(my_set) # {1, 2, 3}
java = {"유재석", "김태호", "양세형"}
python = set(["유재석", "박명수"])
#교집합
print(java & python) # {'유재석'}
print(java.intersection(python)) # {'유재석'}
#합집합
print(java | python) # {'유재석', '박명수', '양세형', '김태호'}
print(java.union(python)) # {'박명수', '김태호', '유재석', '양세형'}
#차집합
print(java - python) # {'양세형', '김태호'}
print(java.difference(python)) # {'양세형', '김태호'}
#집합에 추가
python.add("김태호")
print(python) # {'유재석', '박명수', '김태호'}
#집합에 삭제
java.remove("김태호")
print(java) # {'유재석', '양세형'}
##자료구조 변경
menu = {"커피", "우유", "주스"}
print(menu, type(menu)) # {'주스', '우유', '커피'} <class 'set'>
#set -> list 로 변경
menu = list(menu)
print(menu, type(menu)) # ['주스', '우유', '커피'] <class 'list'>
#set -> tuple 로 변경
menu = tuple(menu)
print(menu, type(menu)) # ('주스', '우유', '커피') <class 'tuple'>
#Quiz##
# 당신의 학교에서는 파이썬 코딩 대회를 주최합니다.
# 참석률을 높이기 위해 댓글 이벤트를 진행하기로 하였습니다.
# 댓글 작성자들 중에 추첨을 통해 1명은 치킨, 3명은 쿠폰을 받게 됩니다.
# 추첨 프로그램을 작성하시오.
# 조건1 : 편의상 댓글은 20명이 작성하였고 아이디는 1~20이라고 가정
# 조건2 : 댓글 내용과 상관 없이 무작위로 추첨하되 중복 불가
# 조건3 : random 모듈의 shuffle 과 sample을 활용
# (출력예제)
# -- 당첨자 발표 --
# 치킨 당첨자 : 1
# 커피 당첨자 : [2, 3, 4]
# -- 축하합니다 --
##random 모듈의 shuffle 과 sample##
# from random import *
# lst = [1, 2, 3, 4, 5]
# print(lst)
# shuffle(lst) #shuffle(list): 리스트(list) 안의 값을 무작위로 배치
# print(lst)
# print(sample(lst, 1)) #sample(list, n): 리스트(list)에서 n개만큼 무작위로 뽑음
from random import *
users = range(1, 21) #1~20까지의 숫자 생성
users = list(users) #range 타입 -> list로 변경
shuffle(users)
winners = sample(users, 4) #users에서 한번에 4명 뽑음.
print("-- 당첨자 발표 --")
print("치킨 당첨자 : {0} " .format(winners[0]))
print("커피 당첨자 : {0}" .format(winners[1:]))
print("-- 축하합니다 --")
##if
weather = input("오늘 날씨는 어때요? ")
if weather == "비" or weather == "눈":
print("우산을 챙기세요")
elif weather == "미세먼지":
print("마스크를 챙기세요")
else:
print("준비물 필요 없어요")
temp = int(input("기온은 어때요? ")) #숫자형을 입력받을 때는 int로 감싸준다
if temp >= 30:
print("너무 더워요. 나가지 마세요")
elif temp >= 10 and temp < 30:
print("괜찮은 날씨예요")
elif temp >=0 and temp < 10:
print("외투를 챙기세요")
else:
print("너무 추워요. 나가지 마세요")
##for문(반복문)
# print("대기번호 : 1")
# print("대기번호 : 2")
# print("대기번호 : 3")
# print("대기번호 : 4")
#을 for문을 사용하여 나타낸다.
for waiting_no in [0, 1, 2, 3, 4]:
print("대기번호 : {0}" .format(waiting_no))
# 대기번호 : 0
# 대기번호 : 1
# 대기번호 : 2
# 대기번호 : 3
# 대기번호 : 4
for waiting_no in range(5): #[0, 1, 2, 3, 4]
print("대기번호 : {0}" .format(waiting_no))
# 대기번호 : 0
# 대기번호 : 1
# 대기번호 : 2
# 대기번호 : 3
# 대기번호 : 4
starbucks = ["아이언맨", "토르", "아이엠 그루트"]
for customer in starbucks:
print("{0}, 커피가 준비되었습니다" .format(customer))
# 아이언맨, 커피가 준비되었습니다
# 토르, 커피가 준비되었습니다
# 아이엠 그루트, 커피가 준비되었습니다
##while문(반복문)
customer = "토르"
index = 5
while index >= 1:
print("{0}, 커피가 준비 되었습니다. {1} 번 남았어요" .format(customer, index))
index -= 1
if index == 0:
print("커피가 폐기처분되었습니다")
# 토르, 커피가 준비 되었습니다. 5 번 남았어요
# 토르, 커피가 준비 되었습니다. 4 번 남았어요
# 토르, 커피가 준비 되었습니다. 3 번 남았어요
# 토르, 커피가 준비 되었습니다. 2 번 남았어요
# 토르, 커피가 준비 되었습니다. 1 번 남았어요
# 커피가 폐기처분되었습니다
#무한루프
# index = 0
# while True:
# print("{0}, 커피가 준비 되었습니다. {1} 번 남았어요" .format(customer, index))
# index += 1
#특정 손님일 경우에만 커피를 주도록 한다.
customer = "아이언맨"
person = "Unknown"
while person != customer:
print("{0}, 커피가 준비 되었습니다." .format(customer))
person = input("이름이 어떻게 되세요? ")
# 아이언맨, 커피가 준비 되었습니다.
# 이름이 어떻게 되세요? 토르
# 아이언맨, 커피가 준비 되었습니다.
# 이름이 어떻게 되세요? 그루트
# 아이언맨, 커피가 준비 되었습니다.
# 이름이 어떻게 되세요? 아이언맨
##continue & break
absent = [2,5] #결석한 사람들
no_book = [7] #책을 안가져온 사람
for student in range(1, 11):
#continue
if student in absent: #결석한 경우
continue
#break
if student in no_book:
print("오늘 수업 여기까지. {0}는 교수실로 따라와" .format(student))
break
print("{0}, 책을 읽어봐" .format(student))
# 1, 책을 읽어봐
# 3, 책을 읽어봐
# 4, 책을 읽어봐
# 6, 책을 읽어봐
# 오늘 수업 여기까지. 7는 교수실로 따라와
#출석번호가 1 2 3 4, 앞에 100을 붙이기로 함 -> 101 102 103 104 ...
students = [1, 2, 3, 4, 5]
print(students) # [1, 2, 3, 4, 5]
students = [i+100 for i in students]
# students 리스트에서 i를 하나씩 불러와서 i+100 값을 students 리스트에 넣는다
print(students) # [101, 102, 103, 104, 105]
#학생 이름을 길이로 변환
students = ["Iron man", "Thor", "I am groot"]
students = [len(i) for i in students]
print(students) # [8, 4, 10]
#학생 이름을 대문자로 변환
students = ["Iron man", "Thor", "I am groot"]
students = [i.upper() for i in students]
print(students) # ['IRON MAN', 'THOR', 'I AM GROOT']
##Quiz##
#당신은 Cocoa 서비스를 이용하는 택시 기사님입니다.
#50명의 승객과 매칭 기회가 있을 때, 총 탑승 승객 수를 구하는 프로그램을 작성하시오.
# 조건1 : 승객별 운행 소요 시간은 5분 ~ 50분 사이의 난수로 정해집니다.
# 조건2 : 당신은 소요 시간 5분 ~ 15분 사이의 승객만 매칭해야 합니다.
# (출력문 예제)
# [O] 1번째 손님 (소요시간 : 15분)
# [ ] 2번째 손님 (소요시간 : 50분)
# [O] 3번째 손님 (소요시간 : 5분)
# ...
# [ ] 50번째 손님 (소요시간 : 16분)
# 총 탑승 승객 : 2분
from random import *
count = 0 #총 탑승 승객 수
for i in range(1, 51):
customer_time = randint(5, 50) #5 ~ 50 분 사이의 소요시간
if customer_time >= 5 and customer_time <=15: #매칭 성공
print("[O] {0}번째 손님 (소요시간 : {1}분)" .format(i, customer_time))
count += 1
else: #매칭 실패
print("[ ] {0}번째 손님 (소요시간 : {1}분)" .format(i, customer_time))
print("총 탑승 승객 : {0} 분" .format(count))