본문 바로가기

Study/class note

python / 시퀀스(인덱싱, 슬라이싱, 연결, 반복, 크기)

027 시퀀스 자료 인덱싱 이해하기

인덱싱(indexing)이란 시퀀스 자료형에서 인덱스를 통해 해당하는 값을 얻는 방법

파이썬에서는 인덱스를 0부터 시작하며 음수인 인덱스도 가능함.

음수는 "끝에서 몇 번째"라는 의미를 가짐.

a = 'SALESMAN'
print( a[2] )    # L
문자열 S A L E S M A N
자릿수 0 1 2 3 4 5 6 7
음수표현
자릿수
-8 -7 -6 -5 -4 -3 -2 -1

문제109. SALESMAN이 들어있는 a 변수에서 두번째 철자를 출력하시오.

a = 'SALESMAN'
print( a[1] )

문제110. 판다스를 이용해서 emp2.csv에서 사원이름을 가져오시오.

import pandas as pd

emp = pd.read_csv("c:\\data\\emp2.csv")
emp[['ename']]

문제111. emp에서 이름의 두번째 철자만 출력하시오.

emp['ename_two'] = emp['ename'].apply(lambda x:x[1])
emp
emp[['ename','ename_two']]

문제112. 이름의 두번째 철자가 M인 사원들의 이름을 출력하시오

emp[['ename','ename_two']][emp['ename_two'] == 'M']
-- SQL작성시
select ename
 from emp
 where ename like '_M%';

 


028 시퀀스 자료 슬라이싱 이해하기

인덱싱은 인덱스에 해당하는 요소 하나를 취하는 방법이지만

슬라이싱은 시퀀스 자료에서 일정 범위에 해당하는 부분을 취하는 방법

a = 'scott'
print(a[1:3])    # co 출력
                 # 1 이상 3 미만의 값

문제113. 아래의 SQL을 판다스로 구현하시오.

-- SQL
select substr(ename, 1, 3)
 from emp;
# 판다스
emp['ename'].apply(lambda x:x[0:3])

 

문자열 슬라이싱 스텝 주는 방법

#a = 'salesman'
print(a[0:5]) # 0부터 5미만까지 출력 = sales

###  print(변수[시작 인덱스: 끝 인덱스: 스텝]) ###
print(a[0:5:2]) # 두칸씩 건너 뛰어서 출력 = sls

문제114. 아래의 SQL을 판다스로 구현하시오.

-- SQL
select substr(ename, -3,3)
 from emp;
# 판다스
emp['ename'].apply(lambda x:x[-3:])

 

문제115. (점심시간 문제) 아래의 문제 108번 코드에서 결제금액까지 출력했는데, 그 다음 바로 "돈을 입력하세요~"라고 물어보게 하고 돈을 맞게 입력하면 "커피를 줍니다. 거스름돈은 ?  입니다.", 돈을 적게 입력하면 "금액이 부족합니다."라는 메시지가 출력되게 하세요. 

print('1번:아메리카노:1500원 \n2번:카페라떼:2500원 \n3번:카페모카:3500원')

coffee1 = 20   #아메리카노 
coffee2 = 10   #카페라떼
coffee3 = 30   #카페모카

c1_price = 1500
c2_price = 2500
c3_price = 3500

while True:
    num = int(input('주문하시겠습니까? 메뉴를 골라주세요. 번호를 눌러주세요.'))
    if num == 1:
        print('아메리카노를 선택하셨습니다.')
        cup = int(input('몇 잔 주문하시겠습니까?'))
        if cup > coffee1:
            print('죄송합니다. 주문량에 비해 아메리카노가 부족합니다.')
            print('현재 주문 가능한 수량은 %d잔 입니다.' %coffee1, '다시 입력해주세요.')
            cup = int(input('몇 잔 주문하시겠습니까?'))
        print('결제하실 금액은',c1_price * cup, '원 입니다.')
        money = int(input('돈을 입력하세요~'))
        if coffee1 > cup and money >= c1_price * cup:
            print('아메리카노가 나왔습니다. 거스름돈은 ',money - c1_price*cup,'원 입니다.')
            coffee1 -= cup
        elif coffee1 > cup and money < c1_price * cup:
            print('금액이 부족합니다. 돈을 반환합니다.')
            
    elif num == 2:
        print('카페라떼를 선택하셨습니다.')
        cup = int(input('몇 잔 주문하시겠습니까?'))
        if cup > coffee2:
            print('죄송합니다. 주문량에 비해 카페라떼가 부족합니다.')
            print('현재 주문 가능한 수량은 %d잔 입니다.' %coffee2, '다시 입력해주세요.')
            cup = int(input('몇 잔 주문하시겠습니까?'))
        print('결제하실 금액은',c2_price * cup, '원 입니다.')
        money = int(input('돈을 입력하세요~'))
        if coffee2 >= cup and money >= c2_price * cup:
            print('카페라떼가 나왔습니다. 거스름돈은 ',money - c2_price*cup,'원 입니다.')
            coffee2 -= cup
        elif coffee2 > cup and money < c2_price * cup:
            print('금액이 부족합니다. 돈을 반환합니다.')
            continue
            
    elif num == 3:
        print('카페모카를 선택하셨습니다.')
        cup = int(input('몇 잔 주문하시겠습니까?'))
        if cup > coffee3:
            print('죄송합니다. 주문량에 비해 카페모카가 부족합니다.')
            print('현재 주문 가능한 수량은 %d잔 입니다.' %coffee3, '다시 입력해주세요.')
            cup = int(input('몇 잔 주문하시겠습니까?'))
        print('결제하실 금액은',c3_price * cup, '원 입니다.')
        money = int(input('돈을 입력하세요~'))
        if coffee3 >= cup and money >= c3_price * cup:
            print('카페모카가 나왔습니다. 거스름돈은 ',money - c3_price*cup,'원 입니다.')
            coffee3 -= cup
        elif coffee3 > cup and money < c3_price * cup:
            print('금액이 부족합니다.돈을 반환합니다.')
            continue
            
    else:
        print('메뉴가 없습니다.')
        continue

 

ㅁ SQL은 짧을수록 좋지만, 프로그래밍 언어는 loop문을 자제할수록 좋음.

 


029 시퀀스 자료 연결 이해하기(+)

오라클 파이썬
|| +

자료형이 동일한 두 개의 시퀀스 자료는 + 연산자로 순서있게 연결하여 새로운 시퀀스 자료를 만들 수 있습니다. 문자열+문자열, 리스트+리스트, 튜플+튜플과 같이 동일한 시퀀스 자료형에 대해 '+' 연산자로 연결이 가능합니다.

a = 'I love '
b = 'Python'
print(a + b)

문제116. 아래의 SQL을 파이썬으로 구현하시오.

-- SQL
select ename ||'의 직업은 '||job
 from emp;
# 파이썬
import csv

file = open("c:\\data\\emp5.csv")
emp_csv = csv.reader(file)

for i in emp_csv:
    print(i[1] + '의 직업은 ' + i[2])

문제117. 아래의 SQL을 파이썬으로 구현하시오!

-- SQL
select lower(ename)
 from emp;
# 파이썬
import csv

file = open("c:\\data\\emp5.csv")
emp_csv = csv.reader(file)

for i in emp_csv:
    print(i[1].lower())

문자열.함수 = 문자열에 함수를 적용함

ex) 문자열.upper() =  문자열을 대문자로 바꿈 / 문자열.lower() = 문자열을 소문자로 바꿈

 

문제118. 아래의 SQL을 파이썬으로 구현하시오.

-- SQL
select initcap(ename)
 from emp;
# 파이썬
import csv

file = open("c:\\data\\emp5.csv")
emp_csv = csv.reader(file)

for i in emp_csv:
    print(i[1].upper()[0] + i[1].lower()[1:])
    # print(i[1][0].upper() + i[1][1:].lower()) 으로 해도 동일하게 출력됨

 


030 시퀀스 자료 반복 이해하기(*)

동일한 시퀀스 자료를 반복하여 새로운 시퀀스 자료를 만들고자 하면 별표(*)를 연산자로 사용함.

print('a'*7)     # aaaaaaa
print('good morning! '*3)     #good morning good morning good morning

문제119. 다음과 같이 숫자를 물어보게하고 숫자를 입력하면 해당 숫자만큼 '★'이 출력되게 하시오.

★★

★★★

★★★★

★★★★★

num = int(input('숫자를 입력하세요~ '))

for i in range(1,num+1):
    print('★'*i)

문제120. 다음과 같이 숫자를 물어보게하고 숫자를 입력하면 정삼각형이 출력되게 하시오.

숫자를 입력하세요 ! 5

      ★

     ★★

    ★★★

   ★★★★

  ★★★★★

num = int(input('숫자를 입력하세요~ '))

for i in range(1,num+1):
    print(' '*(num-i) + '★'*i)

 

 

031 시퀀스 자료 크기 이해하기(len)

모든 시퀀스 자료는 고정된 길이 또는 크기를 가지고 있음.

시퀀스 자료의 크기는 자료를 구성하는 요소의 갯수

k = 'abcdefg'
print(len(k))    # k에 입력된 문자열의 길이를 출력함 = 7

문자열 함수에는 len이라는 함수가 없어서 문자열.len()이 안됨.(k.len()이 안먹힘)

따라서 파이썬의 내장함수 len을 사용해야함.

 

문제121. 아래의 SQL을 파이썬으로 구현하시오.

-- SQL
select ename, length(ename)
 from emp;
# 파이썬
import csv

file = open("c:\\data\\emp5.csv")
emp_csv = csv.reader(file)

for i in emp_csv:
    print(i[1], len(i[1]))
    

# 판다스
emp['ename_len'] = emp['ename'].apply(len)    #임의의 컬럼을 하나 만들어서 검색해야함, apply(함수명)
emp[['ename','ename_len']]                

emp.drop('ename_len', axis=1, inplace=True)   #컬럼 삭제

axis=1은 열 삭제, axis=0은 행 삭제

inplace = True 를 써야 실제 emp데이터 프레임에서 ename_len 컬럼을 삭제하는 것임. inplace = False를 쓰면 ename_len 컬럼이 실제로 삭제된 것은 아니고 삭제된 것으로 보이게 함.

 

반응형