Data Scientist 옌

매일 발전하는 IT문제해결사

Programing 프로그래밍/Python 파이썬

[나도코딩] Python 코딩 무료 강의 (기본편) 정리 (1/3)

옌炎 2022. 1. 13. 09:25
728x90

Python 기본 강의를 다시 들으면서 코딩테스트를 준비하려고 합니다. 마침 눈에 띈 것이 YouTube의 6시간 짜리 파이썬 강의가 있었습니다. <파이썬 코딩 무료 강의 (기본편) - 6시간 뒤면 여러분도 개발자가 될 수 있어요 [나도코딩]>을 보면서 정리한 내용입니다.

자료형

1. 숫자형

print(5)   # 5
print(-10)   # -10
print(3.14)   # 3.14
print(1000)   # 1000
print(5+3)   # 8
print(2*8)   # 16
print(3*(3+1))   # 12

2. 문자열

print('풍선')   # 풍선
print("나비")   # 나비
print("ㅋㅋㅋㅋㅋㅋㅋ") # ㅋㅋㅋㅋㅋㅋㅋ
print("ㅋ"*9)   # ㅋㅋㅋㅋㅋㅋㅋㅋㅋ

3. Boolean

print(5 > 10)   # False
print(5 < 10)   #  True
print(True)   # True
print(False)   # False
print(not True)   # False

4. 변수

# """애완동물을 소개해주세요~"""
animal = "강아지"
name = "연탄이"
age = 4
hobby = "산책"
is_adult = age >= 3

print("우리집 " + animal + "의 이름은 " + name + "예요")
print(name + "는 " + str(age) + "살이며, " + hobby + "을 아주 좋아해요")
print(name, "는 어른일까요? "+ str(is_adult))

# 우리집 강아지의 이름은 연탄이예요
# 연탄이는 4살이며, 산책을 아주 좋아해요
# 연탄이 는 어른일까요? True

Q1. 변수를 이용하여 다음 문장을 출력하시오
# 변수명: station
# 변수값: "사당", "신도림", "인천공항" 순서대로 입력
# 출력문장: XX행 열차가 들어오고 있습니다.

A1)

station = "사당"
print(station + "행 열차가 들어오고 있습니다.")
station = "신도림"
print(station + "행 열차가 들어오고 있습니다.")
station = "인천공항"
print(station + "행 열차가 들어오고 있습니다.")

A2)

for i in ["사당", "신도림", "인천공항"]:
    print(i + "행 열차가 들어오고 있습니다.")

연산자

1. 간단한 수식

print(1+1) # 2
print(3-2) # 1
print(5*2) # 10
print(6/3) # 2

print(2**3) # 2^3
print(5%3) # 나머지 2
print(10%3)
print(5//3) # 몫 1
print(10//3)

print(10 > 3) # True
print(4 >= 7) # False
print(10 < 3) # False
print(5 <= 5) # True

print(3 == 3) # True
print(4 == 2) # False
print(3 + 4 == 7) # True

print(1 != 3) # True
print(not(1 != 3)) # False

print((3 > 0) and (3 < 5)) # True
print((3 > 0) & (3 < 5)) # True

print((3 > 0) or (3 > 5)) # True
print((3 > 0) | (3 > 5)) # True

print(5 > 4 > 3) # True
print(5 > 4 > 7) # False

print(2 + 3 * 4) # 14
print(((2 + 3) * 4)) # 20
number = 2 + 3 * 4
print(number)

number = number + 2
print(number) # 16
number += 2
print(number) # 18
number *= 2
print(number) # 36
number /= 2
print(number) # 18
number -= 2
print(number) # 16
number %= 5 # 1
print(number)

2. 숫자처리함수

print(abs(-5)) # 5
print(pow(4, 2)) # 4^2 = 4*4 = 16
print(max(5, 12)) # 12
print(min(5, 12)) # 5
print(round(3.14)) # 3
print(round(4.99)) # 5

from math import *
print(floor(4.99)) # 내림 4 
print(ceil(3.14)) # 올림 4
print(sqrt(16)) # 제곱근 4

Q2. 당신은 최근에 코딩 스터디 모임을 새로 만들었습니다.
# 월 4회 스터디를 하는데 3번은 온라인으로 하고 1번은 오프라인으로 하기로 했습니다.
# 아래 조건에 맞는 오프라인 모임 날짜를 정해주는 프로그램을 작성하시오.
# 조건1: 랜덤으로 날짜를 뽑아야 합
# 조건2: 월별 날짜는 다름을 감안하여 최소 일수인 28 이내로 정함
# 조건3:  매월 1~3일은 스터디 준비를 해야하므로 제외
# (출력문 예제) 오프라인 스터디 모임 날짜는 매월 x 일로 선정되었습니다.

A1)

from random import *
date = randint(4, 28)
print("오프라인 스터디 모임 날짜는 매월 " + str(date) + "일로 선정되었습니다.")

문자열

sentence = '나는 소년입니다'
print(sentence)
sentence2 = "파이썬은 쉬워요"
print(sentence2)
sentence3 = """
나는 소년이고,
파이썬은 쉬워요
"""
print(sentence3)

1. 슬라이싱

jumin = "990120-1234567"

print("성별 : " + jumin[7])
print("연 : " + jumin[0:2]) # 0부터 2 직전까지
print("월 : " + jumin[2:4])
print("일 : " + jumin[4:6])

print("생년월일 : " + jumin[0:6]) # [:6] 처음부터 6 직전까지
print("뒤 7자리 : " + jumin[7:14]) # [7:] 7부터 끝까지
print("뒤 7자리 (뒤에부터) : " + jumin[-7:]) # 맨 뒤에서 7번째부터 끝까지

2. 문자열 처리 함수

python = "Python is Amazing"
print(python.lower())
print(python.upper())
print(python[0].isupper())
print(len(python))
print(python.replace("Python", "Java"))

index = python.index("n")
print(index)
index = python.index("n", index + 1)
print(index)

print(python.find("Java")) # -1 없음
print(python.index("Java")) # ValueError, 다음 코드가 실행되지 않음
print("hi")

print(python.count("n"))

3. 문자열 포맷

print("a" + "b")
print("a", "b")

# 방법 1
print("나는 %d살입니다."% 20) # d는 정수만 가능
print("나는 %s을 좋아해요." % "파이썬") # s는 문자열
print("Apple은 %c로 시작해요" % "A") # c는 한 글자만 가능
print("나는 %s살입니다."% 20)
print("나는 %s색과 %s색을 좋아해요." %("파란", "빨간"))

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

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

# 방법 4 (v3.6 이상)
age = 20
color = "빨간"
print(f"나는 {age}살이며, {color}색을 좋아해요.")

4. 탈출 문자

# print("백문이 불여일견 
# 백견이 불여일타.") 오류남
print("백문이 불여일견 \n 백견이 불여일타.")
# print("저는 "나도코딩"입니다.") 오류남
print("저는 \"나도코딩\"입니다.")
print("저는 \'나도코딩\'입니다.")

# \\ : 문장 내에서 \
print("C:\\Users\\pythonworkspace")

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

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

# \t : 탭
print("Red\tApple") # Red     Apple

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

# 예) http://naver.com
# 규칙1 : http:// 부분은 제외 => naver.com
# 규칙2 : 처음 만나는 점(.) 이후 부분은 제외
# 규칙3 : 남은 글자 중 처음 세자리 + 글자 갯수 + 글자 내 'e' 갯수 + "!"로 구성
#                       (nav)                      (5)                 (1)                  (!)

# 예) 생성된 비밀번호: nav51!

A1)

site = "http://naver.com"
extract = site[7:].split(".")[0]
password = extract[:3] + str(len(extract)) + str(extract.count("e")) + "!"
print(password)

A2)

url = "http://naver.com"
my_str = url.replace("http://", "") # 규칙 1
print(my_str)
my_str = my_str[:my_str.index(".")] # 규칙 2
print(my_str)
password = my_str[:3] + str(len(my_str)) + str(my_str.count("e")) + "!"
print("{0}의 비밀번호는 {1}입니다.".format(url, password))

자료구조

1. 리스트

# 지하철 칸 별로 10명, 20명, 30명
# subway1 = 10
# subway2 = 20
# subway3 = 30
# 이런 식으로가 아니라 한꺼번에 표기 가능

subway = [10, 20, 30]
print(subway)

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

# 조세호씨가 몇 번째 칸에 타고 있는가?
print(subway.index("조세호")) # 1

# 하하 씨가 다음 정류장에서 다음 칸에 탐
subway.append("하하")
print(subway)

# 정형돈씨를 유재석 / 조세호 사이에 태워봄
subway.insert(1, "정형돈")
print(subway)

# 지하철에 있는 사람을 한 명씩 뒤에서 꺼냄
print(subway.pop()) # 하하
print(subway) # ['유재석', '정형돈', '조세호', '박명수']

print(subway.pop()) # 박명수
print(subway) # ['유재석', '정형돈', '조세호']

print(subway.pop()) # 조세호
print(subway) # ['유재석', '정형돈']

# 같은 이름의 사람이 몇 명 있는지 확인
subway.append("유재석")
print(subway)
print(subway.count("유재석")) # 2

# 정렬도 가능
num_list = [5, 2, 4, 3, 1]
num_list.sort()
print(num_list)

# 뒤집기
num_list.reverse()
print(num_list)

# 모두 지우기
num_list.clear()
print(num_list)

# 다양한 자료형 함께 사용
num_list = [5, 2, 4, 3, 1]
mix_list = ["조세호", 20, True]
print(mix_list)

# 리스트 확장
num_list.extend(mix_list)
print(num_list) # [5, 2, 4, 3, 1, '조세호', 20, True]

2. 사전

cabinet = {3: "유재석", 100: "김태호"}
print(cabinet[3])
print(cabinet[100])

print(cabinet.get(3))
# print(cabinet[5]) # 없는 키이기 때문에 Error. 아래 hi 출력 안됨.
print("hi")

print(cabinet.get(5)) # 없는 키이므로 None으로 출력
print(cabinet.get(5, "사용가능")) # 없는 키일 경우 사용가능 출력

print(3 in cabinet) # True
print(5 in cabinet) # False

cabinet = {"A-3": "유재석", "B-100": "김태호"}
print(cabinet["A-3"])
print(cabinet["B-100"])

# 새 손님
print(cabinet)
cabinet["A-3"] = "김종국"
cabinet["C-20"] = "조세호"
print(cabinet) # {'A-3': '김종국', 'B-100': '김태호', 'C-20': '조세호'}

# 간 손님
del cabinet["A-3"]
print(cabinet) # {'B-100': '김태호', 'C-20': '조세호'}

# key들만 출력
print(cabinet.keys())

# value들만 출력
print(cabinet.values())

# key, value 쌍으로 출력
print(cabinet.items())

# 목욕탕 폐점
cabinet.clear()
print(cabinet)

3. 튜플

# 변경되지 않는 목록을 사용할 때 쓰임.
# 리스트보다 속도가 빠름.

menu = ("돈까스", "치즈까스")
print(menu[0])
print(menu[1])

# menu.add("생선까스") # Error!

name = "김종국"
age = 20
hobby = "코딩"
print(name, age, hobby)

(name, age, hobby) = ("김종국", 20, "코딩")
print(name, age, hobby)

4. 세트

# 집합, 중복이 안되고 순서가 없음

my_set = {1, 2, 3, 3, 3}
print(my_set) # {1, 2, 3}

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

# 교집합 (java와 python을 모두 할 수 있는 개발자)
# {'유재석'}
print(java & python)
print(java.intersection(python))

# 합집합 (java도 할 수 있거나 python도 할 수 있는 개발자)
# {'양세형', '유재석', '김태호', '박명수'}
print(java | python)
print(java.union(python))

# 차집합 (java는 할 수 있지만 python을 할 줄 모르는 개발자)
# {'김태호', '양세형'}
print(java - python)
print(java.difference(python))

# python을 할 줄 아는 사람이 늘어남
python.add("김태호")
print(python) # {'김태호', '유재석', '박명수'}

# java를 잊었어요
java.remove("김태호")
print(java) # {'유재석', '양세형'}

5. 자료구조의 변경

# 커피숍
menu = {"커피", "우유", "주스"}
print(menu, type(menu)) # {'커피', '주스', '우유'} <class 'set'>

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

menu = tuple(menu)
print(menu, type(menu)) # ('커피', '주스', '우유') <class 'tuple'>

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

Q4. 당신의 학교에서는 파이썬 코딩 대회를 주최합니다.

# 참석률을 높이기 위해 댓글 이벤트를 진행하기로 하였습니다.
# 댓글 작성자들 중에 추첨을 통해 1명은 치킨, 3명은 커피 쿠폰을 받게 됩니다.
# 추첨 프로그램을 작성하시오

# 조건1: 편의상 댓글은 20명이 작성하였고 아이디는 1~20이라고 가정
# 조건2: 댓글 내용과 상관없이 무작위로 추첨하되 중복 불가
# 조건3: random 모듈의 shuffle과 sample을 활용.

 

(출력 예제)
-- 당첨자 발표 --
치킨 당첨자 : 1
커피 당첨자 : [2, 3, 4]
-- 축하합니다 --

 

(활용예제)

from random import *
lst = [1, 2, 3, 4, 5]
print(lst)

shuffle(lst)
print(lst)

print(lst)
print(sample(lst, 1))

A1)

from random import *

ids = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]

shuffle(ids)

chicken = sample(ids, 1)
coffee = sample(ids, 3)

print("""
-- 당첨자 발표 --
치킨 당첨자 : {0}
커피 당첨자 : {1}
-- 축하합니다 --
""".format(*chicken, coffee))

중복 불가를 고려 안하고 풀었네요

A2)

from random import *
users = range(1, 21)
users = list(users)
# print(users)

shuffle(users)
print(users)

winners = sample(users, 4)

print(" -- 당첨자 발표 -- ")
print("치킨 당첨자 : {0}".format(winners[0]))
print("커피 당첨자 : {0}".format(winners[1:]))
print(" -- 축하합니다 -- ")
728x90