본문 바로가기
Python

string, 내장함수, random 명령어 연습

by Nirah 2023. 1. 13.

 

String

# String(문자열) 자료형
import sys
print(sys.getdefaultencoding())

'''
1. 문자들의 집합

Sequence Type
 - 문자들에 대한 순서가 유지 됨
 - index 번호를 통해 접근 가능
 
Iterable Type
 - 반복문에서 문자열의 각 문자에 반복적으로 접근 가능
 
Immutation Type
 - 문자열의 특정 문자를 변경할 수 없음
'''

# Sequence Type
s = 'abcd'
print(s[0], s[2]) # a c 출력 됨
print(s[1:3]) # bc 출력 됨

# Iterable Type
for x in s: # 인덱스 순서대로 전체 출력 됨
    print(x)

# Unpacking
x,y = '58'
print(x,y) # 5 8 출력 됨


# 2. 문자열 함수
#  2-1. find(value,[index number])
#       : 문자열에서 value 문자열을 찾아서 해당 문자열의 위치를 반환 (없는경우 -1)
#       : 인덱스값으로 찾아야되는 위치 지정 (동일한 검색결과 중복시)
string = 'python programming project'
print(string.find('pro'))
print(string.find('pro',8))

7
19


#  2-2. count(value) 
#       : 문자열에서 value 문자열을 찾아서 일치한 문자열의 개수 반환
string = 'python programming project'
print(string.count('pro'))

2


#  2-3. lower() 
#       : 알파벳 문자열을 소문자로 변경하여 반환
#         (함수 기존 문자열이 변경되지는 않음)
string = 'python Programming Project'
print(string.lower())
print(string)

python programming project
python Programming Project

#upper()

 

strip([char])

 

split([value])

문자열의 공백을 기준으로 문자열을 분리하여 리스트 자료형으로 반환

 

replace(old, new)

 

isnumeric()

 

isalpha()

 

# find 예제
st = 'python string'
print(st.find('string'))  # string시작 인덱스 값
                          # 인자를 3개를 차지함.
                          # find(문자열,시작위치,끝)
# count 예제
st = 'python string'
print(st.count('t'))  # t문자의 숫자를 반환
 
# lower 예제
st = 'PYTHON STRING'
print(st.lower())     # 'python string'로 소문자로 변경
 
# upper 예제
st = 'python string'
print(st.upper())     # 'PYTHON STRING'로 대문자로 변경
 
# strip 예제
st = '  python string  '
print(st.strip())     # 양쪽에 공백을 제거
 
# lstrip 예제
st = '  python string  '
print(st.lstrip())    # 왼쪽 공백을 제거
 
# rstrip 예제
st = '  python string  '
print(st.rstrip())    # 오른쪽 공백을 제거
 
# replace 예제
st = 'python string'
print(st.replace('string','문자열')) # 'string' => '문자열'로 변경
 
# split 예제
st = 'python string'
print(st.split(' '))

['python', 'string']

 
values = input('입력 : ').split(' ')  # I am a student
print(values)       # 리스트 자료

입력 : I am a student
['I', 'am', 'a', 'student']

 

#[예제.1]
A = "Have a"
print(A)
B = " Nice Day"
C = A + B
print(C)        # Have a Nice Day
print(C*3)      # Have a Nice Day 세번
A += " Nice Day"# A = A+ " Nice Day"와 같음
print(A)        # Have a Nice Day
 
 
#[예제.2]
str = "python is Easy. Programming 참 쉽죠~~잉!!"
print(str)
print(str.upper())    # python is Easy. Programming 참 쉽죠~
print(str.lower())    # PYTHON IS EASY. PROGRAMMING 참 쉽죠~
#swapcase() 영문 소문자를 대문자로, 대문자를 소문자로 변경
print(str.swapcase()) # PYTHON IS eASY. pROGRAMMING 참 쉽죠~
#title() 단어의 시작은 대문자로 변경
print(str.title())    # Python Is Easy. Programming 참 쉽죠~
 
 
#[문제1] 아래의 문장 주어진 조건에 맞게 변경
 
#"NevEr-eVer 100glVe Up" [변경전]
#"Never-Ever 100Glve Up" [변경후]
st = "NevEr-eVer 100glVe Up"
print(st.title())
 
#Have a nice day 문자열에서 다음 알아오기
#'a', 'day', 'dak'의 갯수
st2 = 'Have a nice day'
print(st2)
print(st2.count('a'))
print(st2.count('day'))
print(st2.count('dak'))
 
 
#[문제2] "It is a fun python class" 문자열의 길이,
# 문자 'a'의 개수, 's'의 개수를 출력하세요.
str = "It is a fun python class"
cnt = cnt_a = cnt_s = 0
for i in str:
    cnt += 1
    if i == 'a':
        cnt_a += 1
    elif i == 's':
        cnt_s += 1
print("문자열의 길이:",cnt)
print("문자 'a'의 개수: ",cnt_a)
print("문자 's'의 개수: ",cnt_s)
 
#or  함수를 이용한 방법
print("======= 함수를 이용한 방법 =======")
print("문자열의 길이:",len(str))
print("문자 'a'의 개수: ",str.count('a'))
print("문자 's'의 개수: ",str.count('s'))
 
#[문제3] "Have a nice day" 문자열을 가지고 다음을 처리하세요.
# - 각각 find와 index를 사용하여 'day'문자의 위치를 찾으세요.
# - 각각 find와 index를 이용하여 'kkk'문자의 위치를 확인하세요
# - find를 사용하여 첫번째, 두번째, 세번째, 네번째 'a'의 위치를
#   출력하세요.
 
str3 = "Have a nice day"
print("Find('day') :",str3.find("day"))
print("index('day') :",str3.index("day"))
print("Find('kkk') :",str3.find("kkk"))    #값이 없으면 -1
#print("index('kkk') :",str3.index("kkk"))  #값이 없으면 Error
 
idx=str3.find('a')
print("find : 첫번째 a의 위치=",idx)
idx=str3.find('a',(idx+1))
print("find : 두번째 a의 위치=",idx)
idx=str3.find('a',(idx+1))
print("find : 세번째 a의 위치=",idx)
idx=str3.find('a',(idx+1))
print("find : 네번째 a의 위치=",idx)
 
#[ Quiz ] : List 정의 하여 첨자 위치 저장
#a의 총 개수와 첨자의 위치를 출력 하시오
#st = 'Have a nice day Have a nice day Have a nice day'
#결과
#a 개수 : 9
#첨자 : [1, 5, 13, 17, 21, 29, 33, 37, 45]
 
st ='Have a nice day Have a nice day Have a nice day'
cnt = 0
ls = []
while True:
    cnt = st.find("a",cnt)
    if cnt != -1:
        ls.append(cnt)
        cnt += 1
    else:
        break
print("a 개수 : ",st.count("a"))
print("첨자 : ",ls)
 
st = " 파 이 썬 "
print("*{}*".format(st))         # * 파 이 썬 * 이 출력
print("*{}*".format(st.strip())) # *파 이 썬*
 
st2 = "파이썬파"
print(st2)                       # 파이썬파
print(st2.strip("파"))           # 이썬
print(st2.lstrip("파"))          # 이썬파
print(st2.rstrip("파"))          # 파이썬
 
st3 = "---파이썬---"
print(st3)                       # ---파이썬---
print(st3.strip("-"))            # 파이썬
print(st3.lstrip("-"))           # 파이썬---
print(st3.rstrip("-"))           # ---파이썬
 
 
st = "2015/04/04"
print(st)
print(st.replace("/","."))
print(st.replace("2015","2019"))
print(st.replace(st[0:4],"2019"))
 
 
st = "Never Ever Give Up"
a = st.split()
print(st)
print(a,type(a))
 
st2 = "하나:둘:셋"
st3 = "1,2,3"
b = st2.split(":")
c = st3.split(",")
print(b,type(b))
print(c,type(c))
 
 
 
 
 
st4 = "하나둘셋넷다섯"
d = st4.split()
print(d,type(d))
 
st = "Never\nEver\nGive\nUp"
print(st.splitlines())  # 개행을 기준으로 문자열을 나눈다.
 
 
# """ """:여러 줄의 문자열을 표시할 경우 사용
st2 = """Never Ever Give UP
Never Ever Give UP
Never Ever Give UP
Never Ever Give UP"""
print(st2)
a = st2.splitlines()
print(a,type(a))

 

파이썬 내장 함수

 

함수명(인자1, 인자2, ...)

인자 : 함수의 기능이 동작 하기 위해서 전달해야하는 값(데이터)

 

print() : 문자열, 정수, 실수 값등을 터미널에 출력 하는 함수

type() : 전달된 객체의 타입을 확인하기 위해 사용합니다

sum() : 값의 합을 반환하는 함수

all(mylist) : 리스트에 있는 요소들이 모두 True로 계산될 때만 True를 돌려준다. (요소를 참 거짓으로 변환하여 계산)

any(mylist) : 리스트에 있는 요소 중 하나라도 True로 계산되는 것이 있으면 True를 돌려준다

max(mylist) : 리스트에 있는 요소 중에 비교 연산에 의해 가장 큰 것을 반환한다. (모든 요소가 비교 가능해야 함)

min() : 가장 작은 값을 반환 하는 함수

pow() : 거듭 제곱을 계산하여 반환 하는 함수

divmod() : 나누기 결과의 몫, 나머지를 반환 하는 함수

round() : 반올림 함수, 지정된 자리를 반올림 한 값을 반환 하는 함수 -3 -2 -1 0. 1 2 3

 

bin() : 2 진수 값으로 변환하여 반환하는 함수

 

16 진수 A를 2 진수로 변환

print(bin(0xA))

 

8 진수 10를 2 진수로 변환

print(bin(0o10))

 

oct() : 8 진수 값으로 변환하여 반환하는 함수

print(oct(10))

 

8 진수 12를 10 진수로 변환

print(0o12)

 

16 진수 A6을 10 진수로 변환

print(0xA6)

 

 

 

Random 함수

[예제]
from random import *
# 1. random.random()
x1 = random()
print(f'1. random.random() => {x1}')
 
# 2. random.uniform(a,b)
x2 = uniform(0, 1)
print(f'2-1. random.uniform(0,1) => {x2}')
 
x3 = uniform(10, 20)
print(f'2-2. random.uniform(10,20) => {x3}')
 
# 3. random.randint(a, b)
x4 = randint(100, 200)  # 100~200
print(f'3. random.randint(100,200) => {x4}')
 
# 4. random.randrange(a, b) / random.randrange(b)
x5 = randrange(100, 200)  # 100~199
print(f'4-1. random.randrange(100,200) => {x5}')
 
x6 = randrange(200)  # 0~199
print(f'4-2. random.randrange(200) => {x6}')
 
# 5. random.choice(seq)
fruits = ('apple','pear','pineapple')
print(f'5. random.choice => {choice(fruits)}')
 
# 6. random.sample(seq or set, N)
x8 = sample([1, 2, 3, 4, 5], 3)
print(f'6-1. random.sample([1,2,3,4,5], 3) => {x8}')
 
sample(range(1, 47), 6)
#1 이상 47 미만의 6개 값을 리스트 형식으로 반환 (중복 없음)
#시퀀스 자료형을 인자로 전달받아 임의의 값(난수)을 필요한 개수만큼 리스트(list)로 반환특정 영역의 숫자를 중복 없이 리턴하기 때문에 로또 번호 생성에 사용할 수 있다.
 
x9 = sample(range(1,47),6)
print(f'6-2. random.sample(range(1,47), 6) => {x9}')
 
x10 = sample('aaaa', 3)  # 실제 문자가 같은지는 상관없음, index가 unique.
print(f'6-3. random.sample(aaaa, 3) => {x10}')
 
# 7. random.shuffle(list)
arr1 = [1,2,3,4,5,6,7,8,9,10]
print(f'7-1. random.shuffle([1~10]) before => {arr1}')
shuffle(arr1)
print(f'7-1. random.shuffle([1~10]) after  => {arr1}')

 

 랜덤 함수에 대해서

파이썬에서 랜덤 관련한 함수들을 모아놓은 다양한 모듈 이다.

랜덤 함수들을 사용하기 위해서는 import random을 해야한다.

 

import random

 

이렇게 랜덤을 임포트 하게 되면 이제 random.함수이름() 을 통해서

랜덤 모듈에 존재하는 함수들을 가지고와서 사용할 수 있다.

 

모듈 소개

 

 

1. random.random()

random.random() 함수는 0.0에서부터 1.0 사이의 실수(float)를 반환합니다. [0.0, 1.0) 

정확한 범위는 1.0을 포함하지 않는 범위 입니다. (0.0 <= x < 1.0)

x = random.random()

print(x)    # 0.00000~0.999999...

 

2. random.uniform(a, b)

random.uniform 함수는 인자로 들어온 a~b 사이의 실수(float)를 반환합니다.

uniform 함수의 랜덤 범위는 a <= x <= b 입니다.

 

x = random.random(10, 20)

print(x)    # 10.00000 <= x <= 20.00000

 

3. randint(a, b)

randint 함수는 인자로 들어온 a, b 사이의 랜덤한 정수(int)를 반환합니다.

반환하는 x는  a, b를 포함한 범위 입니다. (a <= N <= b)

randrange 함수에 a, b+1을 넣은것과 동일하게 동작합니다.

 

x = random.randint(10, 20)

print(x)    # 10 <= x <= 20

 

4. randrange(a, b), randrange(b)

randrange 함수는 매개변수 1개 버전, 2개 버전이 존재합니다.

randrange(a, b)는 a <= x < b 의 범위 내에서의 랜덤한 정수(int)를 반환합니다. b를 포함하지 않는 범위입니다!

randrange(b)는 0 <= x < b 의 범위 내에서의 랜덤한 정수(int)를 반환합니다.  b를 포함하지 않습니다!

 

x1 = random.randrange(10, 20)

print(x1)    # 10 <= x < 20 사이의 랜덤한 int 반환

x2 = random.randrange(20)

print(x2)    # 0 <= x < 20 사이의 랜덤한 int 반환

 

 

5. random.choice(seq)

choice 함수는 매개변수로 seq 타입을 받습니다. 시퀀스 데이터 타입은 문자열, 튜플, range, 리스트 타입들을 말합니다.

시퀀스 함수는 인자로 받은 리스트, 튜플, 문자열, range 에서 무작위로 하나의 원소를 뽑습니다.

만약, 비어있는 시퀀스 타입의 객체를 인자로 넣는다면 (ex. 리스트가 비어있다면) indexError 의 예외가 발생합니다.

 

 

6. random.sample(seq or set, N)

첫번째 매개 변수로 시퀀스 데이터 타입(튜플, 문자열, range, 리스트) 또는 set 타입을 받을 수 있습니다.

두번째 매개 변수로는 랜덤하게 뽑을 인자의 개수 입니다.

sample 함수는 첫번째 인자로 받은 시퀀스데이터 or set에서 N개의 랜덤하고, unique하고, 순서상관없이 인자를 뽑아서 리스트로 만들어서 반환해줍니다.

 

 

7 . random.shuffle(seq)

셔플 함수는 데이터의 순서를 무작위로 랜덤하게 바꾸어 주는 함수 입니다.

매개변수 x에는 시퀀스 데이터 타입이 들어가게 됩니다. 하지만 내부의 값을 무작위로 바꿔야 하기 때문에 

내부인자를 변경할 수 있는 리스트만 가능하게 됩니다. (문자열, 튜플 및 range(a,b)는 불가능)

 

random.suffle(리스트) 의 반환은 없고, 인자로 들어온 리스트 내부의 데이터를 무작위로 섞습니다.

 

arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

print(arr)    # [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

 

random.shuffle(arr)    # 셔플셔플셔플 빰빰빰빠밤

print(arr)    # [10, 5, 6, 7, 8, 9, 2, 3, 4, 1]  무작위로 변경됨.

 

 

 

예제 구구단 맞추기 게임

 

 허수아비(scarecrow) 게임

허수아비는 기본 체력을 100을 가진다.

게임자는 100보다 큰 공격포인트를 가지면 이긴다.

100보다 10 이내로 공격 포인트를 얻으면 ‘아쉽다는’ 메세지 출력

그 외는 허수아비의 체력이 어느 정도 남았는지와 더 힘내세요 라는 메세지 출력

hp = 100

while hp >= 1:
    damage = randint(0,100)
    hp = hp - damage
    if hp > 10:
        print('아쉬워요. 더 힘내세요!')
        print('데미지: ',damage)
        print('남은 체력 :',hp)
    elif hp > 0 :
        print('거의 다 됐어요!')
        print('남은 체력 :',hp)
        print('데미지: ',damage)
    else:
        print("사냥 성공!")
        print('남은 체력 :',hp)
        print('데미지: ',damage)

 

 

파이썬 예외 처리

원하지 않는 수를 입력했을 경우 오답 처리 except

 

f-string을 써서 f'' 문자 중간에 함수값을 표현해보자.

import sys
try:
    score = int(input('Enter score: '))
    if score < 0 : sys.exit()
    if score >= 95 : grade ='A+'
    elif score >= 90 : grade = 'A-'
    elif score >= 85 : grade = 'B+'
    elif score >= 80 : grade = 'B-'
    elif score >= 75 : grade = 'C+'
    elif score >= 70 : grade = 'C-'
    elif score >= 65 : grade = 'D+'
    elif score >= 60 : grade = 'D-'
    else: grade = 'F'
except:
    print('Please enter the number or more than 0 only.')
else:
    print(f'Your grade is {grade}.\n')
finally:
    print(f'Everyone! Well done. See you next.')

 

홀짝 판단해주는 코딩

짝수인 경우 : num % 2 = 0 =True

try:
    num = int(input('Enter the numbers here: '))
    odd = f'{num} is the odd.'
    even = f'{num} is the even.'    
except:
    print('Please, Enter the numbers only')
else:
    print(even) if not num % 2 else print(odd)
finally:
    print('Thank for all.')

 

try

except : 에러 종류를 구체적으로 지시할 수 있음.

else

finally : 에러가 나든 안나든 출력

 

'Python' 카테고리의 다른 글

반복문 연습  (0) 2023.01.16
if문 심리테스트로 포켓몬 정해주는 코딩  (0) 2023.01.13
변수 문제 풀이  (0) 2023.01.12
연산자  (0) 2023.01.12
파이썬 자유롭게 만들기 (print, format, list)  (0) 2023.01.11