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 컬럼이 실제로 삭제된 것은 아니고 삭제된 것으로 보이게 함.
'Study > class note' 카테고리의 다른 글
python / 문자열, 이스케이프 문자 (0) | 2021.12.13 |
---|---|
python / 기타연산자 (0) | 2021.12.13 |
python / 로봇 커피 머신 스크립트 (0) | 2021.12.13 |
python / 판다스 모듈 (0) | 2021.12.10 |
python / 자료형(정수형, 실수형, 복소수형), 연산자(대입,사칙,축약,논리,관계), True/False (0) | 2021.12.10 |