Python Day 6_문자열표현, 문자열함수

Day 5 복습

Day 5 복습 & Day 6 학습자료

1-1) list1을 활용하여 출력예시와 같이 출력해보자. 물가인상으로 매입가격이 변경되어 연지상회 역시 이윤과 판매가격을 업데이트해보려 합니다. list1에 담긴 각각 금액에 10%를 반영한 금액을 소수 첫째자리에서 반올림하여 print 함수로 출력해주세요.

출력예시
할인가격 : 2040 새 이윤: 40
할인가격 : 3400 새 이윤: 0
할인가격 : 55200 새 이윤: 1200
#원가, 이윤, 판매가격이 있는 리스트이다.
list1 = [
    [ 2000,  550,  2550],
    [ 3400,  850,  4250],
    [54000, 15000, 69000]
]
for i in list1:
    print("할인가격: {0} 새 이윤: {1}".format(round(i[2]*0.9), round((i[2]*0.9))-i[0]))

1-2) 물가인상으로 매입가격이 변경되어 연지상회 역시 이윤과 판매가격을 업데이트해보려 합니다. list1에 담긴 이윤과 판매가격 각각 금액에 10%를 반영해 list1에 소수 첫째자리에서 반올림하여 다시 저장해 주세요.

for i in list1:
    i[2] = round(i[2]*1.1)
    i[1] = round((i[2]*1.1))-i[0]
print(list1)

1-3) 연지상회의 장부인 list1의 첫번째 순서로 '원가', '이윤', '판매금액'이라는 내용이 담긴 리스트를 추가하려 합니다. 추가후 전체 리스트를 출력해보세요.

list1.insert(0, ['원가', '이윤', '판매금액'])

1-4) 연지상회는 새해를 맞이하여 판매금액이 5000원 미만의 물건은 판매하지 않는다는 방침을 세웠습니다. list1에서 5000원 미만의 품목은 제외하고 판매가격만을 출력해보자

list1 = [[ 2000,  550,  2550],[ 3400,  850,  4250],[54000, 15000, 69000]]
for i in list1:
    if i[2] > 5000:
        print(i[2])

1-5) 연지상회는 새해를 맞이하여 판매금액이 5000원 미만의 물건은 판매하지 않는다는 방침을 세웠습니다. list1에서 5000원 미만의 품목을 list1에서 제외하고 판매 중인 판매가격만을 출력해보자.

list1 = [[ 2000,  550,  2550],[ 3400,  850,  4250],[54000, 15000, 69000]]
for i in list1:
    if i[2] < 5000:
        list1.remove(i)
    else:
        print(i[2])

2) 퍼렐 윌리엄스의 'happy'가사를 활용해보자. 소괄호()는 공백이 없이 ''로, 엔터를 의미하는 이스케이핑 문자열이 있는 부분의 문자열은 한 칸 공백으로 변경해 string이라는 변수명에 저장해주세요. (반복문 없이)

happy = '''It might seem crazy what I am 'bout to say
Sunshine she's here, you can take a break
I'm a hot air balloon that could go to space
With the air, like I don't care, baby by the way
Huh (Because I'm happy)
Clap along if you feel like a room without a roof
(Because I'm happy)
Clap along if you feel like happiness is the truth
(Because I'm happy)
Clap along if you know what happiness is to you
(Because I'm happy)
Clap along if you feel like that's what you wanna do
Here come bad news talking this and that (Yeah)
Well give me all you got, don't hold back (Yeah)
Well I should probably warn you I'll be just fine (Yeah)
No offence to you don't waste your time
Here's why
Clap along if you feel like a room without a roof
(Because I'm happy)
Clap along if you feel like happiness is the truth
(Because I'm happy)
Clap along if you know what happiness is to you
(Because I'm happy)
Clap along if you feel like that's what you wanna do
Uh, bring me down
Can't nothing, bring me down
My level's too high to bring me down
Can't nothing, bring me down, I said
Bring me down, can't nothing
Bring me down
My level's too high to bring me down
Can't nothing, bring me down, I said
Clap along if you feel like a room without a roof
(Because I'm happy)
Clap along if you feel like happiness is the truth
(Because I'm happy)
Clap along if you know what happiness is to you
(Because I'm happy)
Clap along if you feel like that's what you wanna do
Clap along if you feel like a room without a roof
(Because I'm happy)
Clap along if you feel like happiness is the truth
(Because I'm happy)
Clap along if you know what happiness is to you
(Because I'm happy)
Clap along if you feel like that's what you wanna do
Uh, bring me down (Happy, happy, happy, happy)
Can't nothing (Happy, happy, happy, happy)
Bring me down, my level's too high
To bring me down (Happy, happy, happy, happy)
Can't nothing (Happy, happy, happy, happy)
Bring me down, I said
Clap along if you feel like a room without a roof
(Because I'm happy)
Clap along if you feel like happiness is the truth
(Because I'm happy)
Clap along if you know what happiness is to you (ayy, ayy, ayy)
(Because I'm happy)
Clap along if you feel like that's what you wanna do
Clap along if you feel like a room without a roof
(Because I'm happy)
Clap along if you feel like happiness is the truth
(Because I'm happy)
Clap along if you know what happiness is to you (hey)
(Because I'm happy)
Clap along if you feel like that's what you wanna do
Come on'''
happy = happy.replace('(', '')
happy = happy.replace(")", '')
string = happy.replace("\n", ' ')
print(string)

2-2)문자열 string의 가사 단어들을 공백(space) 단위로 끊어 happy1 라는 이름의 리스트에 저장해주세요.

happy1 = string.split(' ')
print(happy1)

2-3) 퍼렐윌리엄스의 노래 Happy엔 happy가 과연 몇 번 들어갈까?

string.lower()
happy1 = string.split(' ')
print(happy1.count('happy')) #23번 나온다.

3) str1을 띄어쓰기 없애고 거꾸로 출력해보자.

str1 = "엔코아 플레이 데이터 인공지능 부트캠프"
str2 = str1.replace(" ", "")[::-1]
print(str2)   #프캠트부능지공인터이데이레플아코엔

1. 문자열

1)문자열 함수

split(가르기), replace(찾아서 바꾸기),strip(찾아서 제거), find/index(찾기), count(글자수세기), join(합치기), lower(소문자로 바꾸기), upper(대문자로 바꾸기), isupper(n번째 문자가 대문자인지 판단)

  • 변수.split('구분자', 가를횟수)
  • 변수.replace(찾을것, 바꿀것, 횟수_생략가능)
  • 변수.strip(찾아서제거할것)
    • 문자열의 앞, 뒤에 존재하는 화이트 스페이스를 전부 제거한다.
      (보충)
    • 문자열의 마지막에 뉴라인의 존재 여부(보충)
    • 불필요한 문자들은 전부 제거 할 수 있다.
    • 문자열 중간에 있는 화이트 스페이스는 제거되지 않는다.
  • 변수.find('찾을 문자', 시작인덱스, 끝인덱스)
  • 변수.count('셀 문자')
  • '구분자'.join(변수) 리스트를 구분자로 나누어 문자열로 변환
  • 변수.lower(변수) 소문자로
  • 변수.upper(변수) 대문자로
  • 변수[n].isupper() n자리 글자가 대문자인지
str1 = '안녕 나는 짱구 아빠야!?!?!?!?!'
str2 = '안녕/나는/짱구/아빠야/너는/누구니!!!!!'

#split(t, n) t=가를기준 n=가를횟수
print(str1.split()) #공백이면 한칸 띄어쓰기 
print(str2.split('/'))
print(str2.split('/', 3)) #3번째까지 적용
print(str2.split('/', maxsplit=3)) #최대 3번까지 적용
print(str2.split('/', 4))  #4번째까지 적용

#변수.replace(찾을것, 바꿀것, 횟수_생략가능)
print(str1.replace('짱구', '짱아'))

#변수.strip(찾아서제거할것)
print(str1.strip("!")) 

# 변수.find('찾을 문자', 시작인덱스, 끝인덱스)
str1.find('짱')
# 변수.count()
str1.count('!')
# '구분자'.join(변수)
str2_j = '/'.join(str2) # str2.split('/')와 정반대이다.

str3 = 'I am Kim Rocki'
# 변수.lower() / 변수.upper() 대/소문자로 변환
print(str3.lower()) #소문자로 바꾸기
print(str3.upper()) #대문자로 바꾸기

#첫글자를 대문자로 바꾸기
str3 = str3.split()
for i in str3:
    i.capitalize()
str3 = ' '.join(str3)
print(str3)

#변수[n].isupper()
print(str3[5].isupper()) #True

find 심화(추후보충)

엄청 많은 데이터 사이에서 해당 문자열을 찾아야 하는데... 처음 하나만 찾아주면 쓸모가 있을까?

import re 
# 정규식 관련된 함수들이 모여있는 모듈
        
for letter in re.finditer('core', data1):
    print(letter.start(), letter.end()) # start() 시작위치 반환, end() 끝 위치 반환

2) 문자열 표현방식

A. 3가지 표현방식

#방법1
print("저는 {}을 좋아하며 역시 {}도 좋아합니다.".format("방탄소년단", "보라색"))
print("저는 {1}을 좋아하며 역시 {0}도 좋아합니다.".format("보라색", "방탄소년단"))    #순서바꾸기

age = 31
artist = "BTS"
color = "보라색"
print("저는 {0}살이며 {1}을 좋아하며 역시 {2}도 좋아합니다.".format(age, artist, color)) #변수로 넣기

#방법2
age = 31
artist = "BTS"
color = "보라색"
print(f"저는 {age}살이며 {artist}을 좋아하며 역시 {color}도 좋아합니다.") #변수를 넣고 싶은 곳에 {}로 구멍을 내서 그 안에 넣고 싶은 변수를 넣는다."")하면 된다

#방법3
print("저는 %s살 입니다" % 20) #%s는 문자로 모두 출력 가능
print("저는 %d살, 정확히 %f이며 %c가입니다" % (20, 20.554555, "김")) 
#d는 정수, f는 실수, c는 하나의 문자로 표현 가능

# 소수점 자릿수 표현(버림) %.nf  n번째 자리까지 출력
print("저는 %d살, 정확히 %.2f이며 %c가입니다" % (20, 20.554555, "김")) 

B. 정렬

  • :>n 빈칸 n개만큼 오른쪽 정렬
  • :^n 빈칸 n개만큼 가운데 정렬
a = 1.1234536346542334125346634
b = 2
add = '글자'
print('The sum of {0} + {1} = {2}'.format(a, b, add))
print('The sum of {0} + {1:>30} = {2:>10}'.format(a, b, add))
The sum of 1.1234536346542334 + 2 = 글자
The sum of 1.1234536346542334 +                           
   2 =         글자

2. 표준출력

1)print의 원형

참조

print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=False)
print("Hello", "Python", "Bye")

A. sep=''

print("Hello", "Python", "Bye", sep='▶') #sep 기본은 공백(띄어쓰기)이다.

B. end=''

print("Hello", "Python", "Bye", sep='▶', end='★')
#파일을 만들고 그 파일에 쓰는 법

2). 파일입출력

A. 데이터에 따라 구별하여 쓰기

a. 텍스트 데이터인 경우
w : 쓰기 모드, r: 읽기 모드, a: 추가 모드
b. 바이너리 데이터인 경우
wb : 쓰기 모드, rb: 읽기 모드, ab: 추가 모드

B. 덱스트 파일의 쓰기, 덧붙이기, 읽기

#새 파일 생성하며 내용 쓰기
score_file = open("score.txt", "w", encoding="utf8") #열 파일명, write 쓸 목적, utf8한글파일사용시
print("수학: 0", file=score_file)
print("영어: 50", file=score_file)
score_file.close() #파일을 열었다면 닫아줘야한다

#기존 파일에 덧붙여쓸 때
score_file = open("score.txt", "a", encoding="utf8") #a는 파일에 덧붙여 쓸 때이다.append
score_file.write("과학: 80")
score_file.write("\n코딩: 100")
score_file.close()

#파일을 읽어오기 read, 줄별로 읽기(+줄바꿈 안하고), while 활용, for 활용
score_file = open("score.txt", "r", encoding="utf8")
print(score_file.read())
score_file.close()
#줄바꿔오며 읽어오기
score_file = open("score.txt", "r", encoding="utf8")
print(score_file.readline(), end="")
print(score_file.readline(), end="")
print(score_file.readline(), end="")
print(score_file.readline(), end="")
score_file.close()

실습1 While문을 이용하여 한 줄씩 출력하기

score_file = open("score.txt", "r", encoding="utf8")
while True:
    line = score_file.readline()
    if not line:
        break
    print(line, end="")
score_file.close()

실습2 for문을 이용하여 한 줄씩 출력하기

score_file = open("score.txt", "r", encoding="utf8")
lines = score_file.readlines()
for line in lines:
    print(line, end="")
score_file.close()

B_1 with 활용

with 구문 내에서 해결할 수 있다.

with open("study.txt", "w", encoding="utf8") as study_file:
    study_file.write("코딩을 열심히 하고 있습니다.")
with open("study.txt", "r", encoding="utf8") as study_file:
    print(study_file.read())

실습3 1~50주차까지의 보고서 파일을 만드는 프로그램을 작성해보자.

하나의 파일에 담길 내용

  • x 주차 주간보고 -
    부서:
    이름:
    업무 요약:
for i in range(1, 51):
    with open(str(i)+ "주차.txt", "w", encoding="utf8") as parking_file:
        parking_file.write("- {0}주차 주간보고 - \n부서: \n 이름: \n업무 요약: ".format(i))

C. 바이너리 데이터 쓰기, 읽기(추후 보충)

import pickle
profile_file = open("profile.pickle", "wb") # w가 아니라 wb이다. 
profile = {"이름":"박명수", "나이":"31", "취미":["축구", "코딩"]}
print(profile)

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

#불러오기
profile_file = open("profile.pickle", "rb")
profile = pickle.load(profile_file)
print(profile)
profile_file.close()

3) flush=False

스트림객체로 바꿔서 출력을 해주고 있다는 뜻이다.

#기본 한번에 출력된다.
import time 
for i in range(15):
    print(i, flush=False)
    time.sleep(2)
    
#True일 때는 하나하나 한다.
import time 
for i in range(15):
    print(i, flush=True)
    time.sleep(2)
    

좋은 웹페이지 즐겨찾기