AI python 문자열과 연산자

alert("april");·2023년 8월 18일
0

AI-PM

목록 보기
5/19
post-thumbnail
post-custom-banner

문자와 문자열

end = ''

한 줄로 표현하기
print( 이진수변환, end = ' ')
0b1101001100001100 0b1100011101110100 0b1100001101101100

문자열 인덱싱과 슬라이싱

a = "사랑해요, 파이썬! "

a[0:3:1] 0~3까지 1씩 증가
'사랑해'

a[:3] 처음부터(생략)~3까지
'사랑해'

문자열 포맷팅

문자열 관련 함수들

count() 문자 개수 세기
find() 위치를 알려줘
index()
join()
upper() 소문자를 대문자로
lower() 대문자를 소문자로
strit() 공백 지우기
replace()
split()

[퀴즈]
문자열을 입력하세요: 사랑해요 파이썬!
!썬이파 요래랑사

s = input('문자열을 입력하세요:')
print(s[::-1])

[퀴즈]
split() 함수로 파일명과 확장자 분리하기

fname = input('파일을 입력하세요: ')
print(f'입력한 파일: {fname}')

a = fname.split('.')
print(f'파일명: {a[0]}, 확장자: {a[1]}')

[실습 문제]: 지불할 음식 총 가격 계산하기

  • 음식가격: 4,450 원
  • 세금: 6.75%
  • 팁: 15%
  1. meal 변수를 선언하고 값을 4450으로 지정하세요.
  2. tax 변수를 생성하고 값으로 6.75%를 소수점 형태로 지정하세요.
  3. tip 변수를 생성하고 값으로 15%를 소수점 형태로 지정하세요.
  4. meal의 변수값에 세금을 곱해 meal 변수에 지정하세요.
  5. 음식값에 tip을 더해 total 변수에 지정하세요.
  6. total 변수 값을 출력하세요.

[풀이]

meal = 4450    # 1.음식가격
tax = 0.0675   # 2.세금
tip = 0.15     # 3.팁
print(f'순수 세금: {meal*tax}')
meal = meal + (meal * tax)   # 4. 음식가격
total = meal + (meal * tip)  # 5. 팁 적용한 총 금액
print(f'팀 금액: {meal * tip}')
print(f'내가 지불해야 할 총 금액: {round(total,2)}')

산술 연산자

대입 연산자

관계 연산자

주로 조건문이나 반복문에서 사용, 단독으로는 거의 사용하지 않음

논리 연산자

멤버쉽 연산자

원소의 구성 여부를 확인하는 연산자
결과값의 자료형은 bool형 (True 혹은 False)

in
not in

iterables
list, dict, set, str, bytes... 반복되서 꺼내올 수 있는 객체

연산자 우선순위

[실습문제] 동전 교환 프로그램 만들기
몫과 나머지 이용

[풀이]

print('---동전교환기 프로그램을 작동합니다.---')
money = int( input('금액을 입력하세요: '))
print('동전으로 교환하겠습니다.---------')

print(f"500원짜리 ==> {money // 500}개")
money %= 500    # money = money % 500
print(f"100원짜리 ==> {money // 100}개")
money %= 100
print(f"50원짜리 ==> {money // 50}개")
money %= 50
print(f"10원짜리 ==> {money // 10}개")
money %= 10
print(f"잔돈 ==> {money}원")

리스트

여러개의 데이터 값을 하나의 변수에 담을 수 잇는 데이터 구조
인덱스가 있고 데이터를 수정, 삭제, 추가 가능하다
[ ] 대괄호로 표현되고 내부 원소는 ,(쉼표)로 구분됨

range() : 정수를 순차적으로 만들어주는 함수

print(list(range(10)))   # 정수를 순차적으로 만들어주는 함수
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

문자열을 리스트로 만들기

기사 = '''오늘 남부지방과 제주도는 대체로 흐린 가운데 비가 내리겠습니다.
예상 강수량은 영남 해안 지역이 30에서 80mm, 많은 곳은 100mm 이상이고, 그 밖의 남부지방과 제주도는 10에서 60mm입니다.
비가 오는 동안 천둥·번개가 치고, 한 시간에 30mm가 넘는 강한 비가 쏟아지는 곳이 있겠습니다.
남부지방과 제주도의 비는 내일 오전까지 계속되는 곳이 있겠습니다.
오늘 중부지방은 가끔 구름이 많이 끼는 가운데 오후에 5에서 30mm의 소나기가 오는 곳이 있겠습니다.
낮 최고기온은 서울 33도 등 전국이 26도에서 34도로 어제와 비슷하거나 조금 더 높겠습니다.
바다의 물결은 남해 먼바다와 제주도 해상에서 최고 2.5m로 비교적 높게 일겠습니다.
동해안과 경남 남해안에는 높은 너울이 밀려오는 곳이 있겠고, 동해상에는 짙은 안개가 끼는 곳이 있겠습니다.
'''
기사 = 기사.replace('남부지방', '중부지방')  # 단어 다른 단어로 대체
print(기사)

result = 기사.split(' ') # ' '로 분리해서 리스트로 반환
print(f'리스트의 요소 개수(길이): {len(result)} ')
print(result)

리스트 요소에 접근하기

인덱싱 & 슬라이싱을 통해

colors = ['pink', 'sky blue', ['white', 'purple'], 'black']
print( colors[1] )
print( colors[2] )
print( colors[2][1] )
# 2차원 배열이다

[출력]
sky blue
['white', 'purple']
purple

리스트 요소 추가 / 변경

colors = ['pink', 'sky blue', ['white', 'purple'], 'black']
print(colors)
colors.append('ivory')     # 리스트 맨 끝에 추가
print(colors)
colors.insert(1, 'mint')  # 리스트명.insert(인덱스위치, 값)
print(colors)
colors[3].insert(1, 'dark blue')
print(colors)
colors.append(['orange', 'yellow', 'green'])
print(colors)

[출력]'pink', 'sky blue', ['white', 'purple'], 'black']
['pink', 'sky blue', ['white', 'purple'], 'black', 'ivory']
['pink', 'mint', 'sky blue', ['white', 'purple'], 'black', 'ivory']
['pink', 'mint', 'sky blue', ['white', 'dark blue', 'purple'], 'black', 'ivory']
['pink', 'mint', 'sky blue', ['white', 'dark blue', 'purple'], 'black', 'ivory', ['orange', 'yellow', 'green']]

리스트 요소 삭제

colors = ['red', 'light green', 'green', 'e', 'l', 'l', 'o']
print(colors)

del colors[3]       # 특정 위치 요소 제거
print(colors)

colors.remove('l')  # 특정 값 제거
print(colors)

colors.pop()        # 맨 뒤의 요소 제거
print(colors)

리스트 관련 함수

딕셔너리

쌍이 하나로 묶인 자료구조
{key : value} 구성
순서(sequence)가 없다

members = {}    # 빈 딕셔너리
members = dict()    # 빈 딕셔너리
print(type(members),members)

members = {'name':'진', 'age':29, 'email':'jin@gggmail.com'}
print(type(members),members)
print(members['age'])   # 키로 값 찾기
print(members.get('age'))   # get() 함수 사용
members[7] = ['정국', '뷔', '지민'] # 딕셔너리에 요소 추가: 새로운 키(key): 값(value) 추가
print(members)

[출력]
<class 'dict'> {}
<class 'dict'> {'name': '진', 'age': 29, 'email': 'jin@gggmail.com'}
29
29
{'name': '진', 'age': 29, 'email': 'jin@gggmail.com', 7: ['정국', '뷔', '지민']}

scores = {'국어': 100, '수학': 90, '영어': 80}

print(scores['국어']) # 딕셔너리는 키로 접근한다.

딕셔너리 키(key)와 값(value)에 접근하기

# 방법1
print('---방법1---')
for key in scores:
    # print('%s => %s' % (key, scores[key]))
    print(f'{key} => {scores[key]}')

print(scores.items())   # (키,값)의 리스트 형태로 반환하는 함수

# 방법2
print('---방법2---')
for (key, value) in scores.items():
    # print('%s => %s' % (key, value))
    print(f'{key} => {value}')

[출력]
100
---방법1---
국어 => 100
수학 => 90
영어 => 80
dict_items([('국어', 100), ('수학', 90), ('영어', 80)])
---방법2---
국어 => 100
수학 => 90
영어 => 80

딕셔너리에 요소 추가/수정/삭제

scores = {'국어': 100, '수학': 90, '영어': 80}

# 키로 요소 추가하기
scores['music'] = 100
print(scores)

# 요소 값 수정하기
scores['수학'] = 99
print(scores)

# 요소 삭제하기
del (scores['영어'], scores['music'])
print(scores)

[출력]
{'국어': 100, '수학': 90, '영어': 80, 'music': 100}
{'국어': 100, '수학': 99, '영어': 80, 'music': 100}
{'국어': 100, '수학': 99}

JSON 이 다 딕셔너리 형태로 되어 있다
한번 보고 갈까요~?
https://www.data.go.kr/

튜플 & 집합

튜플

리스트와 형태 거의 유사
대괄호[ ] 대신 소괄호( )를 사용한다
수정과 추가가 불가하다. 원본을 그대로 유지하고 싶을때 사용
소괄호( ) 생략 가능, 항목이 하나인 튜플은 뒤에 심표 붙임

Q. 이걸 왜 사용할까?
대량의 데이터 사용시
메모리 적게 사용, 속도도 빠름

a = tuple() # 빈 튜플 생성
a = ()  # 빈 튜플 생성
print(type(a))

a = ('사과',)    # 튜플에 요소 1개를 정의할 때느 반드시, 사용
print( type(a), a)

a = (1, 2, 3, 4, 5)
print( type(a), a)

print(a[3])
print(a[:3])

a[3] = 44   # 튜플의 요소를 변경하거나 추가할 수 없다.

[출력]
<class 'tuple'>
<class 'tuple'> ('사과',)
<class 'tuple'> (1, 2, 3, 4, 5)
4
(1, 2, 3)

집합(Set)

집합 자료는 키만 모아 놓은 딕셔너리의 특수한 형태
딕셔너리의 키는 중복되면 안 되므로 세트에 들어 있는 값은 항상 유일
세트를 생성하려면 딕셔너리처럼 중괄호{} 사용하지만 : 없이 값을 입력
중복된 키는 자동으로 하나만 남음!!

# 집합에서는 중복된 데이터를 배제시킬 수 있다.
fruits = ['사과', '바나나', '사과', '포도', '귤', '귤']
a = list(set(fruits))
a.sort()    # '가나다라~' 순으로 정렬
print(a)

[출력]['귤', '바나나', '사과', '포도']

집합 데이터 다루기

profile
Slowly but surely
post-custom-banner

0개의 댓글