sugenius

[초보자를 위한 파이썬 300제] 001 to 100 본문

Python

[초보자를 위한 파이썬 300제] 001 to 100

sugeniusk 2021. 3. 20. 03:36

초보자를 위한 파이썬 300제 

wikidocs.net/book/922

 

위키독스

온라인 책을 제작 공유하는 플랫폼 서비스

wikidocs.net


 👉 시작 (001 to 010)

# 01. 파이썬 시작하기
# 001 ~ 010
# _____________________________________________

# print 기초
# print는 정수, 실수, 문자열 등을 화면에 출력
# 문자열은 큰따옴표 또는 작은따옴표로 표현 가능

print("Hello World")
print('Hello World')
print("Mary's cosmetics")
print('신씨가 소리질렀다. "도둑이야". ')
print('"c:\Windows"')
print('"안녕하세요. \n만나서 \t\t반갑습니다."')

#여러 값을 출력하려면 print 함수에서 쉼표로 구분
print("오늘은","일요일")

# print 함수의 sep 인자로 ";"를 입력하면 출력되는 값들 사이에 한 칸의 공백대신 세미콜론이 출력
# sep = separator 분리기호 
print("naver", "kakao", "samsung", sep=";") # 출력:naver;kakao;samsung 
print("naver","kakao","sk","samsung",sep="/") # 출력:naver/kakao/sk/samsung

# end=""
# 세미콜론 (;)은 한줄에 여러 개의 명령을 작성하기 위해 사용
print("first");print("second")
#결과:
#first
#second
print("first", end="");print("second") # 결과:firstsecond

#연산 결과 출력
print(5/3)

 👉 변수 (011 to 020)

# 02. 파이썬 변수
# 011 ~ 020
# _____________________________________________

#변수 사용하기
삼성전자 = 50000
총평가금액 = 삼성전자 * 10 
print(총평가금액)

시가총액 = 298000000000
현재가 = 50000
PER = 15.79 
print(시가총액, type(시가총액)) #출력: 298000000000 <class 'int'>
print(현재가, type(현재가)) #출력: 50000 <class 'int'>
print(PER, type(PER)) #출력: 15.79 <class 'float'>

#문자열 출력
s="hello"
t="python"
print(s+"!",t) #출력:hello! python

#값 계산
print(2+2*3)

#type함수
a=128
print(a, type(a))

#문자열 -> 정수 변환
num_str = "720"
print(int(num_str)+1, type(int(num_str)+1))

#정수 -> 문자열 100 변환 
num = 100
print(str(num), type(str(num)))

#문자열 -> 실수 변환 
strr="15.79"
print(float(strr), type(float(strr))) #출력: 15.79 <class 'float'>

#문자열 -> 정수 변환 
year = "2020"
print(int(year), type(int(year)))

에어컨 = 48584
할부개월 = 36
총금액 = 에어컨*할부개월
print(총금액)

 👉 문자열 (021 to 050)

# 03. 파이썬 문자열
# 021 ~ 030
# _____________________________________________

#문자열 인덱싱 
letters = 'python'
print(letters[0],letters[2]) #출력: p t

#문자열 슬라이싱 : 문자열에서 여러 글자를 가져오는 것
#시작 인덱스를 생락하면 0으로 간주, 끝 인덱스를 생략하면 문자열의 끝을 의미
license_plate = "24가 2210"
print(license_plate[-4:]) #출력: 2210 

#문자열 인덱싱
#시작인덱스:끝인덱스:오프셋
string = "홀짝홀짝홀짝"
print(string[::2]) #출력: 홀홀홀

#거꾸로 출력
string2="PYTHON"
print(string2[::-1]) #출력:NOHTYP

#문자열 치환
#파이썬 문자열에서 replace 메서드를 사용하면 문자열을 일부를 치환
#문자열은 수정할 수 없는 자료형이므로 기존 문자열은 그대로 두고 치환된 새로운 문자열이 리턴
#전화번호에서 -를 제거하고 출력
phone_number="010-1111-2222"
phone_number1 = phone_number.replace("-"," ")
print(phone_number1) #출력:010 1111 2222

#문자열 다루기
#웹페이지에서 도메인을 출력, 문자열로 표현된 url에서 .을 기준으로 분리
url="http://charebook.kr"
url_split = url.split('.')
print(url_split[-1]) #출력: kr

#문자열은 immutable
#... 문자열은 수정할 수 없다. 문자열이 할당(assignment) 메서드를 지원하지 않음 
#lang3='python'
#lang3[0]='P'
#print(lang3)

#replace 메서드 
string3 = 'abcdfe2a354a32a'
string3 = string3.replace('a','A')
print(string3) #출력: Abcdfe2A354A32A

#abcd가 그대로 출력된다.
#문자열은 변경할 수 없는 자료형이기 때문. 
#replace 메서드를 사용하면 원본은 그대로 둔채로 변경된 새로운 문자열 객체를 리턴함.
string4 = 'abcd'
string4.replace('b', 'B')
print(string4) #출력 : abcd
#올바르게 고치면, string4 = string4.replace('b', 'B') 으로 한다. 
# 03. 파이썬 문자열
# 031 ~ 040
# _____________________________________________

#문자열 합치기
a="3"
b="4"
print(a+b) #출력:34

#문자열 곱하기
print("Hi"*3) #출력:HiHiHi
print("-"*80)

t1='python'
t2='java'
t3 = t1 + ' ' + t2 + ' '
print(t3*4) #출력: python java python java python java python java

#문자열 출력
#문자열과 정수가 바인딩되어 있을 때 % formatting을 사용
name1 = "김민수" 
age1 = 10
name2 = "이철희"
age2 = 13
print("이름 : %s 나이 : %d" % (name1,age1))
print("이름 : %s 나이 : %d" % (name2,age2))
#문자열의 format( ) 메서드를 사용
#문자열의 포맷 메서드는 타입과 상관없이 값이 출력될 위치에 { }
print("이름 : {} 나이 : {}" .format(name1,age1))
print("이름 : {} 나이 : {}" .format(name2,age2))
#파이썬 3.6부터 지원하는 f-string을 사용
print(f"이름: {name1} 나이: {age1}")
print(f"이름: {name2} 나이: {age2}")

#컴마 제거하기
상장주식수 = "5,969,782,550"
상장주식수 = 상장주식수.replace(',',"")
print(int(상장주식수), type(int(상장주식수)))

#문자열 슬라이싱 
분기 = "2020/03(E) (IFRS연결)"
print(분기[:7])

#strip 메서드
#문자열의 좌우의 공백이 있을 때 이를 제거
data = "   삼성전자    "
print(data.strip())
# 03. 파이썬 문자열
# 041 ~ 050
# ___________________________________

#uppper 메서드
#문자열이 있을 때 이를 대문자 BTC_KRW로 변경
ticket="btc_krw"
print(ticket.upper())

#lower 메서드
#문자열이 있을 때 이를 소문자 btc_krw로 변경
ticket2 = "BTC_KRW"
print(ticket2.lower())

#capitalize 메서드 첫글자만 소 > 대문자로
#문자열 'hello'가 있을 때 이를 'Hello'로 변경
a = "hello"
a = a.capitalize() #출력:Hello
print(a)

#endswith 메서드 
#파일 이름이 문자열로 저장되어 있을 때
#endswith 메서드를 사용해서 파일 이름이 'xlsx'로 끝나는지 확인
file_name="보고서.xlsx"
file_name.endswith("xlsx")
print(file_name.endswith("xlsx")) #결과:True
#endswith 메서드를 사용해서 파일 이름이 'xlsx' 또는 'xls'로 끝나는지 확인
print(file_name.endswith(("xlsx", "xls"))) #결과:True

#startswith 메서드
#파일 이름이 문자열로 저장되어 있을 때 
# startswith 메서드를 사용해서 파일 이름이 '2020'로 시작하는지 확인
file_name2 ="2020_보고서.xlsx"
print(file_name2.startswith("2020")) #결과:True

#split 메서드
#문자열이 있을 때 공백을 기준으로 문자열을 나눈다.
#어떤 값을 넘겨주면 그 값을 기준으로 문자열을 분리해줌
b = "hello world"
b.split(" ")
print(b.split(" ")) #결과:['hello', 'world']

ticker3 = "btc_krw"
ticker3.split("_")
print(ticker3.split("_")) #결과:['btc', 'krw']

#날짜를 표현하는 문자열이 있을 때 연도, 월, 일로 나눔.
date = "2020-05-01"
date.split("-")
print(date.split("-")) #결과:['2020', '05', '01']

#restrip 메서드 
#문자열의 오른쪽에 공백이 있을 때 이를 제거
data4 = "039490     "
data4.rstrip()
print(data4.rstrip())

# 참고 https://codechacha.com/ko/python-string-strip/
# strip([chars]) : 인자로 전달된 문자를 String의 왼쪽과 오른쪽에서 제거합니다.
# lstrip([chars]) : 인자로 전달된 문자를 String의 왼쪽에서 제거합니다.
# rstrip([chars]) : 인자로 전달된 문자를 String의 오른쪽에서 제거합니다.

 👉 리스트 (051 to 070)

# 04. 파이썬 리스트
# 051 ~ 060
# ___________________________________

#리스트 생성
movie_rank =["닥터 스트레인지","스플릿","럭키"]

#리스트에 원소 추가
movie_rank.append("베트맨")
print(movie_rank)
#insert(인덱스, 원소) 메서드를 사용하면 특정 위치에 값을 끼어넣기 
movie_rank.insert(1,"슈퍼맨")
print(movie_rank) #결과:['닥터 스트레인지', '슈퍼맨', '스플릿', '럭키', '베트맨']

#리스트 원소 삭제
#del을 이용하여 리스트에서 원소를 삭제
#리스트에서 어떤 값을 삭제하면 남은 값들은 새로 인덱싱
#여러 값을 삭제할 때는 어떤 값이 먼저 삭제된 후 남은 원소들에 대해서
#순서를 새로 고려한 후 삭제해야 함
del movie_rank[3]
print(movie_rank)

del movie_rank[2]
del movie_rank[2]
print(movie_rank) #결과:['닥터 스트레인지', '슈퍼맨']

#lang1과 lang2 리스트가 있을 때 
#lang1과 lang2의 원소를 모두 갖고 있는 langs 리스트를 만들어라.
lang1 = ["C", "C++", "JAVA"]
lang2 = ["Python", "Go", "C#"]
print(lang1+lang2) #결과:['C', 'C++', 'JAVA', 'Python', 'Go', 'C#']

#리스트에서 최댓값과 최솟값을 출력하라. (힌트: min(), max() 함수 사용
nums = [1, 2, 3, 4, 5, 6, 7]
print("max: ", max(nums))
print("min: ", min(nums))

#리스트의 합
nums2 = [1,2,3,4,5]
print("sum : ", sum(nums2))

#리스트의 평균
print("평균 : ", sum(nums2)/len(nums2))

#리스트에 저장된 데이터의 개수
cook = ["피자", "김밥", "만두", "양념치킨", "족발", "피자", "김치만두", "쫄면", "쏘세지", "라면", "팥빙수", "김치전"]
print(len(cook))

 

# 04. 파이썬 리스트
# 061 ~ 070
# ___________________________________

#price 변수에는 날짜와 종가 정보가 저장돼 있다. 
#날짜 정보를 제외하고 가격 정보만을 출력
price = ['20180728', 100, 130, 140, 150, 160, 170]
print(price[1:]) #출력:[100, 130, 140, 150, 160, 170]

#슬라이싱 이용. 홀수만 출력
nums = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print(nums[::2]) #출력:[1, 3, 5, 7, 9]
#슬라이싱 이용. 짝수만 출력
print(nums[1::2]) #출력:[2, 4, 6, 8, 10]

#슬라이싱 이용. 리스트 숫자를 역방향 출력
print(nums[::-1]) #출력:[10, 9, 8, 7, 6, 5, 4, 3, 2, 1]

interest = ['삼성전자', 'LG전자', 'Naver']
print(interest[0],interest[2]) #출력:삼성전자 Naver

#join 메서드 
#join 메서드를 사용하면 리스트를 문자열로 붙일 수 있음
interest = ['삼성전자', 'LG전자', 'Naver', 'SK하이닉스', '미래에셋대우']
print(" ".join(interest)) #출력:삼성전자 LG전자 Naver SK하이닉스 미래에셋대우
print("/".join(interest)) #출력:삼성전자/LG전자/Naver/SK하이닉스/미래에셋대우
print("\n".join(interest))
#출력:
'''
삼성전자
LG전자
Naver
SK하이닉스
미래에셋대우
'''

#문자열 split 메서드
string = "삼성전자/LG전자/Naver"
interest2 = string.split("/")
print(interest2) #출력:['삼성전자', 'LG전자', 'Naver']

#리스트 정렬. 오름차순
data2 = [2, 4, 3, 1, 5, 10, 9]
data2.sort()
print(data2)

data3 = [2, 4, 3, 1, 5, 10, 9]
print(sorted(data3))

👉 튜플 (071 to 080)

# 05. 파이썬 튜플
# 071 ~ 080
# ___________________________________

#my_variable 이름의 비어있는 튜플 만들어라
#괄호는 튜플을 정의하는 기호
my_variable = ()
print(type(my_variable)) #출력:<class 'tuple'> 으로 튜플이 생성되었는지 확인함. 

movie_rank = ("닥터 스트레인지", "스플릿", "럭키")
print(movie_rank) #출력:('닥터 스트레인지', '스플릿', '럭키')

#숫자 1 이 저장된 튜플을 생성
#아래와 같이 괄호와 함께 하나의 정숫값을 저장하면 튜플이 정의 될 것같지만 그렇지 않습니다. 
#type()을 출력해보면 파이썬은 튜플이 아닌 정수로 인식
my_tuple0 = (1)
print(type (my_tuple0)) #출력:<class 'int'> 
#하나의 데이터가 저장되는 경우, 아래와 같이 쉼표를 입력해만 함.
my_tuple = (1, )
print(type (my_tuple)) #출력:<class 'tuple'>

#아래 오류 발생함 
#tuple은 원소(element)의 값을 변경할 수 없습니다.
'''t = (1, 2, 3)
    t[0] = 'a' '''

#원칙적으로 튜플은 괄호와 함께 데이터를 정의해야 하지만,
#사용자 편의를 위해 괄호 없이도 동작합니다.
t=1,2,3,4

#변수 t가 ('A', 'b', 'c') 튜플을 가리키도록 수정하라.
t = ('a', 'b', 'c')
#튜플의 값은 변경할 수 없기 때문에, 
# 리스트와 달리 아래 코드는 동작하지 않습니다. ==> t[0] = 'A'
#새로운 튜플을 만들고 t 라는 변수를 업데이트 해야 합니다.
# 기존의 튜플 ('a', 'b', 'c')은 자동으로 삭제
t = ('A', 'b', 'c')

#튜플을 리스트로 변환
interest = ('삼성전자', 'LG전자', 'SK Hynix')
datalist = list(interest)

#리스트를 튜플로 변경
interest = ['삼성전자', 'LG전자', 'SK Hynix']
datatuple = tuple(interest)

#튜플 언팩킹
temp = ('apple', 'banana', 'cake')
a, b, c = temp
print(a, b, c) #출력:apple banana cake

#range 함수
#1 부터 99까지의 정수 중 짝수만 저장된 튜플을 생성 (2, 4, 6, 8 ... 98)
result = tuple( range(2,100,2))
print(result)

 👉 딕셔너리 (081 to 100)

# 06. 파이썬 딕셔너리
# 081 ~ 090
# ___________________________________

#별 표현식 
#기본적으로 데이터 언패킹은 좌변의 변수와 우변 데이터 개수가 같아야 합니다.
#하지만 star expression을 사용하면 변수의 개수가 달라도 
#데이터 언패킹을 할 수 있습니다. 튜플에 저장된 데이터 중에서 
#앞에 있는 두 개의 데이터만 필요할 경우 나머지 데이터의 언패킹 코드를
#작성할 필요가 없음.
a,b,*c = (0,1,2,3,4,5)
print(a) #출력:0
print(b) #출력:1
print(c) #출력:[2,3,4,5]
#10개의 값이 저장된 scores 리스트가 있을 때, 
#start expression을 사용하여 좌측 8개의 값을 valid_score 변수에 바인딩
scores = [8.8, 8.9, 8.7, 9.2, 9.3, 9.7, 9.9, 9.5, 7.8, 9.4]
*valid_score,_,_ = scores
print(valid_score) #출력:[8.8, 8.9, 8.7, 9.2, 9.3, 9.7, 9.9, 9.5]
#우측 8개의 값을 valid_score 변수에 바인딩
scores2 = [8.8, 8.9, 8.7, 9.2, 9.3, 9.7, 9.9, 9.5, 7.8, 9.4]
a,b,*valid_score2 = scores2
print(valid_score2) #출력:[8.7, 9.2, 9.3, 9.7, 9.9, 9.5, 7.8, 9.4]
#가운데 있는 8개의 값을 valid_score 변수에 바인딩
scores3 = [8.8, 8.9, 8.7, 9.2, 9.3, 9.7, 9.9, 9.5, 7.8, 9.4]
a,*valid_score3,b = scores3
print(valid_score3) #출력:[8.9, 8.7, 9.2, 9.3, 9.7, 9.9, 9.5, 7.8]

#비어있는 딕셔너리
temp = { }

ice={"메로나":1000,"폴라포":1200, "빵빠레":1800}
print(ice) #출력:{'메로나': 1000, '폴라포': 1200, '빵빠레': 1800}

#딕셔너리 추가
ice["죠스바"] = 1200
ice["월드콘"] = 1500
print(ice)

#딕셔너리 출력
print("메로나 가격 : ", ice["메로나"])

#딕셔너리 수정
ice["메로나"] = 1300
print("메로나 가격 : ", ice["메로나"])

#딕셔너리 삭제
del ice["메로나"]
print(ice)
#딕셔너리에 없는 키를 사용해서 인덱싱하면 에러가 발생합니다.