[Python] 나도코딩 기본편 - (2)

Updated:

유튜브 나도코딩 무료 강의를 통해 학습한 내용을 정리해서 올리고 있습니다.

실습과정에서 필요에 따라 일부 강의 내용의 누락 및 추가, 수정사항이 있습니다.

퀴즈의 경우, 유튜브 풀이와 상이할 수 있습니다.


문자열

sentence3 = """
나는 소년이고,
파이썬은 쉬워요.
"""
print(sentence3)
나는 소년이고,
파이썬은 쉬워요.
  • """ """ 사이에 문자열을 쓰면 줄 띄어쓰기가 가능하다.

슬라이싱

jumin =  "901010-1210210"

print("성별:  " + jumin[7])
print("출생년도:  " + jumin[0:2]) # 0~1
print("출생년도:  " + jumin[:2]) # 0~1

print("뒷자리: " + jumin[7:]) # 7index부터 끝까지
print("뒷자리: " + jumin[-7:])
성별:  1
출생년도:  90
출생년도:  90
뒷자리: 1210210
뒷자리: 1210210
  • 파이썬 슬라이싱에서 시작은 0부터 시작하며, 끝은 -1부터 시작한다.

  • 슬라이싱시 마지막 인덱스는 포함하지 않는다.

문자열 처리 함수

b = "kkdkD"
print("소문자: " + b.lower())
print("대문자: " + b.upper())
print("길이: " + str(len(b)))

print("글자 대체: " + b.replace("D", "ID"))

print("첫 번째 k 위치:", b.index("k"))
print("시작 위치 지정 후 k 위치:", b.index("k",2))

# find는 없으면 -1, index는 없으면 error
print(b.find("f",2))
# print(b.index("f",2))

print("글자 수:", b.count("k"))
소문자: kkdkd
대문자: KKDKD
길이: 5
글자 대체: kkdkID
첫 번째 k 위치: 0
시작 위치 지정 후 k 위치: 3
-1
글자 수: 3
  • find()는 찾는 문자가 없으면 -1을 반환하고 index()는 에러가 발생한다.

문자열 포맷

# 방법 1
print("나는 %d살입니다." % 20) # 정수
print("나는 %s를 좋아해요." % "파이썬") # 문자
print("나는 %c를 좋아해요." % "A")
print("나는 %s색과 %s색을 좋아해요." % ("파란","초록"))

# 방법 2
print("나는 {}살입니다." .format(20))
print("나는 {}색과 {}색을 좋아해요." .format("파란","초록"))
print("나는 {1}색과 {0}색을 좋아해요." .format("파란","초록"))

# 방법 3
print("나는 {age}살이고 {color}색을 좋아해요." .format(age = 20, color = "파란"))

# 방법 4
age = 20
color = "파란"

print(f"나는 {age}살이고 {color}색을 좋아해요.")
나는 20살입니다.
나는 파이썬를 좋아해요.
나는 A를 좋아해요.
나는 파란색과 초록색을 좋아해요.
나는 20살입니다.
나는 파란색과 초록색을 좋아해요.
나는 초록색과 파란색을 좋아해요.
나는 20살이고 파란색을 좋아해요.
나는 20살이고 파란색을 좋아해요.
  • 문자열 포맷 방법은 여러가지가 있지만 f 스트링 방식이 보다 직관적이어서 편하다.

탈출 문자

# \ 뒤를 문자로 인식
print("저는 \"파이썬 사용자\"입니다.")
print("C:\\Users\\Name")

# \n : 줄 바꿈
print("백문이 불여일견 \n백견이 불여일타")

# \r : 커서를 맨 앞으로 이동
print("Red Apple\rPine")
print("Red a b\rPine")

# \b : 백 스페이스 (한 글자 삭제)
print("Redd\bApple")

# \t : 탭
print("Red\tApple")
저는 "파이썬 사용자"입니다.
C:\Users\Name
백문이 불여일견 
백견이 불여일타
Pine
Pine
ReddApple
Red	Apple

Quiz 3

사이트별로 비밀번호를 만들어 주는 프로그램을 작성하시오

예) http://naver.com

  • 규칙 1: http:// 부분은 제외 => naver.com
  • 규칙 2: 처음 만나는 점(.) 이후 부분은 제외 => naver
  • 규칙 3: 남은 글자 중 처음 세자리 + 글자 갯수 + 글자 내 ‘e’ 갯수 + “!”로 구성

답: nav51!

url = "http://naver.com"
url_2 = url.replace("http://", "")
url_3 = url_2[0:url_2.find(".")]

password =  url_3[0:3] + str(len(url_3)) + str(url_3.count("e")) + "!"

print(f"{url}의 비밀번호는 {password} 입니다.")
http://naver.com의 비밀번호는 nav51! 입니다.

리스트 [ ] 튜플 () 집합{ } 사전{ }

  • 리스트 [ ]: append, insert, pop, sort, reverse, clear, extend

  • 튜플 ( ): 수정이 안되지만 리스트보다 빠름 / 여러 튜플 동시 설정 가능

  • 집합 { }: 중복x, 순서x / 교집합 & interaction / 합집합 union / 차집합 - difference / add remove
  • 사전 {key,value}: key, value, items, get(key, “출력문”), del, clear

리스트 [ ]

subway = ["유재석", "조세호", "박명수"]

# 인덱스 위치
print(subway.index("조세호"))

# 데이터 추가
subway.append("하하")
print(subway)

# 데이터 중간 삽입
subway.insert(1, "정형돈")
print(subway)

# 데이터 제거
subway.pop(3)
print(subway)

# 데이터 수 확인
subway.append("유재석")
print(subway.count("유재석"))

# 정렬
subway.sort()
print(subway)

# 내림차순
subway.reverse()
print(subway)

# 다양한 자료형 함께 사용
n_list= [1,2,3]
m_list= ["김","나",3]

# 리스트 합치기
n_list.extend(m_list)
print(n_list)

# 모두 지우기
subway.clear()
print(subway)
1
['유재석', '조세호', '박명수', '하하']
['유재석', '정형돈', '조세호', '박명수', '하하']
['유재석', '정형돈', '조세호', '하하']
2
['유재석', '유재석', '정형돈', '조세호', '하하']
['하하', '조세호', '정형돈', '유재석', '유재석']
[1, 2, 3, '김', '나', 3]
[]

사전 { }

cabinet = {3:"유재석", 100:"김태호"}
print(cabinet[3]) # 값이 없는 경우 에러
print(cabinet.get(3)) # 값이 없는 경우 None 이라고 나옴
print(cabinet.get(5,"값이 없습니다.")) # 값이 없는 경우 나오는 값 설정

print( 3 in cabinet) # true false

# 사전 데이터 갱신
cabinet[3] = "김종국" # 갱신
cabinet[5] = "조세호" # 추가
del cabinet[3] # 삭제

# 출력
print(cabinet.keys()) # 키 출력
print(cabinet.values()) # 값 출력
print(cabinet.items()) # 함께 출력

# 데이터 제거
cabinet.clear()
print(cabinet)
유재석
유재석
값이 없습니다.
True
dict_keys([100, 5])
dict_values(['김태호', '조세호'])
dict_items([(100, '김태호'), (5, '조세호')])
{}

튜플 ( )

menu = ("돈까스", "치즈까스")

# name = "김종국"
# age =20
# hobby = "코딩"

# 한번에 데이터 입력
(name, age, hobby) = ("김종국", 20, "코딩")

집합 { }

# 중복 안됨, 순서 없음
my_set = {1,2,3,3,3}
print(my_set)

java = {"유재석", "김태호", "양세형"}
python = set(["유재석", "박명수"])

# 교집합
print(java & python)
print(java.intersection(python))

# 합집합
print( java | python)
print( java.union(python))

# 차집합
print( java - python)
print( java.difference(python))

# 데이터 추가 삭제
python.add("김태호")
python.remove("김태호")
{1, 2, 3}
{'유재석'}
{'유재석'}
{'박명수', '김태호', '유재석', '양세형'}
{'박명수', '김태호', '유재석', '양세형'}
{'김태호', '양세형'}
{'김태호', '양세형'}

자료구조의 변경

menu = {"커피", "우유", "주스"}
print(menu, type(menu))

menu = list(menu)
print(menu, type(menu))

menu = tuple(menu)
print(menu, type(menu))
{'커피', '우유', '주스'} <class 'set'>
['커피', '우유', '주스'] <class 'list'>
('커피', '우유', '주스') <class 'tuple'>

Quiz 4

추첨통해서 1명은 치킨, 3명은 커피

  • 조건1: 20명 참가, 아이디는 1-20
  • 조건2: 무작위로 추첨하되 중복 불가
  • 조건3: random 모듈의 suffle과 sample 사용

(출력예제)

– 당첨자 발표 –

치킨 당첨자 : 1

커피 당첨자 : [2,3,4]

– 축하합니다 –

from random import *

# 리스트 생성 및 셔플
lst = list(range(1,21))
shuffle(lst)

# 치킨 당첨자
chicken = sample(lst,1)

# 커피 당첨자
lst_2 = set(lst) - set(chicken)
coffee = sample(lst_2,3)

print(f"-- 당첨자 발표 -- \n치킨당첨자: {chicken} \n커피당첨자: {coffee} \n-- 축하합니다 --")
-- 당첨자 발표 -- 
치킨당첨자: [15] 
커피당첨자: [6, 3, 5] 
-- 축하합니다 --

Leave a comment