[2일차] Python

멍게장·2022년 2월 22일
0

chapter 1

Python을 배워야 하는 이유

요즘 IT의 핫한 핵심 키워드가 모두 데이터와 관련되어 있다.
ex) 머신러닝, 딥러닝, 데이터 마이닝, 빅 데이터, 인공지능 등

한때는 작은 범위를 말했던 데이터 사이언스가 이제는 저 키워드를 다 삼키는 것을 넘어서 비즈니스와 마케팅, 의학, 스포츠등으로 다른 영역까지 침투하고 있습니다.

데이터는 현 시대를 사는 모든 사람을 관통하는 키워드가 되었다.

이렇게 우리가 데이터가 중요한 세상에 살고 있는데 어떡해야 데이터를 소유하고, 어떻게 데이터를 다룰까에 대해서 고민을 해보면 그 답은 '파이썬' 에 있다.

데이터를 다룰 때 가장 많이 쓰는 언어가 파이썬이다.

파이썬은 데이터와 함께 성장하고 있는 언어이다.
데이터의 중요성이 부각되기 이전 파이썬은 그냥 흔한 언어 중 하나였다.

그런데 데이터 처리 관련 능력이 급격히 발전하면서 이제 파이썬은 독자적인 위치로 급부상을 했고, 지금은 사실 대체 불가능한 영역까지 올라와 있다.

데이터가 다양한 영역으로 확장되면서 파이썬도 똑같이 다양한 영역으로 확장을 하고 있다.

따라서 현재 가장 대중화된 언어 중 하나이자 가장 좋은 평가를 받고 있는 언어 중에 하나이다.

현재 가장 큰 클라우드 서비스인 아마존 클라우드가 파이썬을 전폭적으로 지원하고 있다.
아마존 뿐만 아니라, 다른 대형 IT 회사들이 파이썬을 기본 제공하고 있고, 다른 언어를 옵션으로 두는 경우가 굉장히 많다.

따라서 파이썬을 할 수 있는 사람이 최첨단 기술을 남들보다 빠르게 접할 수 있게 되는 것이다.

하지만 파이썬의 장점은 이런 기술적인 이야기를 다 떠나서 파이썬 생태계가 아주 크다는 점에 있다.

이미 오픈 소스로 선개발된 프로그램이 많아서 코드 한줄, 한줄을 우리가 직접 짜지 않고 남이 가져다준걸 쓸 수 있다.
1. 즉, 오픈 소스 활용 폭이 굉장히 넓다.
2. 또한 활성화된 온/오프라인 커뮤니티가 굉장히 많아서 질문 답변이 쌓인 양이 다른 언어에 비해 굉장히 풍부하다. 그래서 코딩하다가 헤매는 상황을 빠르게 탈출이 가능하다!
3. 거기에 더해서 행사도 굉장히 많아서 비슷한 작업을 하는 사람을 굉장히 쉽게 만날 수 있는데 이런 것은 정말 다른 언어에서 누릴 수 없는 굉장히 큰 장점이다.
4. 파이썬을 사용하는 회사가 많아서 직장을 선택할 때 폭이 넓은 편이다.


Chapter 2

'오늘은 뭐 드실?' 제작하기

Python 맛보기

예시

import random			//import 모듈

print(random.choice(["된장찌개","피자","제육볶음"]))
  • 위 예시는 된장찌개, 피자, 제육볶음 중 하나를 랜덤으로 골라 출력하는 코드이다.
  • 된장찌개, 피자, 제육볶음을 싸고 있는 대괄호는 List라는 python자료형이다.
  • random 기능은 python이 가진 기본 기능이 아니기 때문에 import random 코드를 맨 위에 작성해준다.
  • 기본 기능인 print를 사용할 때는 다른 별도의 import를 사용하지 않는다.
  • python은 이와 같이 기본 기능이 아닌 함수를 사용할 때 import를 해주어야 사용이 가능하다.

파이썬 코드 실행 방법

python 파일명.py
  • 위 명령어를 터미널에 입력해준다.
  • 명령어를 한번 입력했다면, 그 뒤부터는 바로 전 명령어를 위 방향키를 누르면 자동으로 입력된다.

직접 반복하기

  • 랜덤으로 30개의 음식을 뽑아보자.
    코드
import random

print(random.choice(["된장찌개","피자","제육볶음","치킨","떡볶이","라면"]))
print(random.choice(["된장찌개","피자","제육볶음","치킨","떡볶이","라면"]))
print(random.choice(["된장찌개","피자","제육볶음","치킨","떡볶이","라면"]))
print(random.choice(["된장찌개","피자","제육볶음","치킨","떡볶이","라면"]))
print(random.choice(["된장찌개","피자","제육볶음","치킨","떡볶이","라면"]))
print(random.choice(["된장찌개","피자","제육볶음","치킨","떡볶이","라면"]))
print(random.choice(["된장찌개","피자","제육볶음","치킨","떡볶이","라면"]))
print(random.choice(["된장찌개","피자","제육볶음","치킨","떡볶이","라면"]))
print(random.choice(["된장찌개","피자","제육볶음","치킨","떡볶이","라면"]))
print(random.choice(["된장찌개","피자","제육볶음","치킨","떡볶이","라면"]))
print(random.choice(["된장찌개","피자","제육볶음","치킨","떡볶이","라면"]))
print(random.choice(["된장찌개","피자","제육볶음","치킨","떡볶이","라면"]))
print(random.choice(["된장찌개","피자","제육볶음","치킨","떡볶이","라면"]))
print(random.choice(["된장찌개","피자","제육볶음","치킨","떡볶이","라면"]))
print(random.choice(["된장찌개","피자","제육볶음","치킨","떡볶이","라면"]))
print(random.choice(["된장찌개","피자","제육볶음","치킨","떡볶이","라면"]))
print(random.choice(["된장찌개","피자","제육볶음","치킨","떡볶이","라면"]))
print(random.choice(["된장찌개","피자","제육볶음","치킨","떡볶이","라면"]))
print(random.choice(["된장찌개","피자","제육볶음","치킨","떡볶이","라면"]))
print(random.choice(["된장찌개","피자","제육볶음","치킨","떡볶이","라면"]))
print(random.choice(["된장찌개","피자","제육볶음","치킨","떡볶이","라면"]))
print(random.choice(["된장찌개","피자","제육볶음","치킨","떡볶이","라면"]))
print(random.choice(["된장찌개","피자","제육볶음","치킨","떡볶이","라면"]))
print(random.choice(["된장찌개","피자","제육볶음","치킨","떡볶이","라면"]))
print(random.choice(["된장찌개","피자","제육볶음","치킨","떡볶이","라면"]))
print(random.choice(["된장찌개","피자","제육볶음","치킨","떡볶이","라면"]))
print(random.choice(["된장찌개","피자","제육볶음","치킨","떡볶이","라면"]))
print(random.choice(["된장찌개","피자","제육볶음","치킨","떡볶이","라면"]))
print(random.choice(["된장찌개","피자","제육볶음","치킨","떡볶이","라면"]))
print(random.choice(["된장찌개","피자","제육볶음","치킨","떡볶이","라면"]))
  • 위 내용은 직접 코드를 복사 붙여넣기를 통해 30줄을 작성한 것이다.
    결과
치킨
된장찌개
된장찌개
라면
제육볶음
치킨
피자
피자
된장찌개
라면
된장찌개
된장찌개
제육볶음
떡볶이
피자
떡볶이
피자
피자
라면
치킨
피자
떡볶이
라면
치킨
치킨
제육볶음
제육볶음
떡볶이
피자
떡볶이
  • 위와 같이 30개의 음식이 랜덤으로 잘 나오는 것을 확인 할 수 있다.

문제점

  • 메뉴를 추가,수정,삭제할 때 모든 코드를 하나하나 다 수정을 해야 해서 번거롭다.
  • 코드 수정시 오타가 생길 가능성도 크고, 시간도 많이 소요된다.

대신 반복하기

  • 동일한 코드를 여러번 작성하는 것이 아닌 for문과 while문을 사용해서 print문을 반복해보자.

1. for문 사용

형식

for 변수 in 리스트(또는 튜플, 문자열):
  • in 다음 설정하는 것에 따라 반복하는 횟수와 변수에 들어가게 되는 내용이 달라진다.

코드

import random

for x in range(30):		
    print(random.choice(["된장찌개","제육볶음","치킨","떡볶이","라면"]))
  • for: 이제 반복을 시작하겠다는 뜻.
  • range(30): 0~29까지 숫자를 세겠다는 뜻.
  • x in range(30): 0부터 29까지의 숫자를 셀 때마다 변수 x에 넣겠다는 뜻.
  • 끝에 있는 ':'콜론: for문에서 꼭 쓰는 마침표 같은 존재.
  • 'for x in range(30):'은 아래 있는 코드를 30번 반복하겠다는 뜻.

결과

치킨
치킨
된장찌개
라면
된장찌개
된장찌개
치킨
제육볶음
떡볶이
된장찌개
된장찌개
제육볶음
라면
제육볶음
제육볶음
라면
라면
제육볶음
라면
제육볶음
떡볶이
치킨
제육볶음
라면
된장찌개
떡볶이
라면
떡볶이
치킨
된장찌개
  • 위와 같이 결과는 동일하게 잘 나온다.
  • 코드 수가 30줄에서 2줄로 바뀌어 더욱 읽기 쉬워졌다.
  • 메뉴 추가,수정,삭제시에도 한줄만 수정하면 된다.

python의 강력한 들여쓰기를 확인해보자!

예시1

  • for문 아래 문장은 들여쓰기가 되어있는 문장이고, 바로 다음 줄 print문은 들여쓰기가 되어있지 않다.
import random

for x in range(30):
    print(random.choice(["된장찌개","제육볶음","치킨","떡볶이","라면"]))
print("이 문장도 반복되나")

결과

치킨
치킨
된장찌개
라면
된장찌개
된장찌개
치킨
제육볶음
떡볶이
된장찌개
된장찌개
제육볶음
라면
제육볶음
제육볶음
라면
라면
제육볶음
라면
제육볶음
떡볶이
치킨
제육볶음
라면
된장찌개
떡볶이
라면
떡볶이
치킨
된장찌개
이 문장도 반복되나

예시2

  • for문 아래 문장과 바로 다음 줄 print문까지 들여쓰기가 되어있다.
import random

for x in range(30):
    print(random.choice(["된장찌개","제육볶음","치킨","떡볶이","라면"]))
    print("이 문장도 반복되나")

결과

된장찌개
이 문장도 반복되나
제육볶음
이 문장도 반복되나
라면
이 문장도 반복되나
된장찌개
이 문장도 반복되나
제육볶음
이 문장도 반복되나
된장찌개
이 문장도 반복되나
된장찌개
이 문장도 반복되나
된장찌개
이 문장도 반복되나
떡볶이
이 문장도 반복되나
된장찌개
이 문장도 반복되나
제육볶음
이 문장도 반복되나
라면
이 문장도 반복되나
제육볶음
이 문장도 반복되나
치킨
이 문장도 반복되나
제육볶음
이 문장도 반복되나
치킨
이 문장도 반복되나
제육볶음
이 문장도 반복되나
라면
이 문장도 반복되나
치킨
이 문장도 반복되나
제육볶음
이 문장도 반복되나
된장찌개
이 문장도 반복되나
된장찌개
이 문장도 반복되나
떡볶이
이 문장도 반복되나
제육볶음
이 문장도 반복되나
라면
이 문장도 반복되나
제육볶음
이 문장도 반복되나
라면
이 문장도 반복되나
라면
이 문장도 반복되나
된장찌개
이 문장도 반복되나
된장찌개
이 문장도 반복되나

결론

  • 예시1예시2를 보면 알 수 있듯이 python은 들여쓰기를 엄청나게 강력하게 체크를 한다.
  • 다른 언어들은 명시적 체크를 해주어야 가능하거나 들여쓰기가 좀 잘못되어도 크게 문제가 되지 않을 때가 있다.
  • 들여쓰기를 하면 for문에 포함이 된다.

2. while문 사용

형식

while 조건문:
	적용코드
  • while문은 위 조건문이 참일 때만 반복하게 된다.

코드

import random

while True:
    print(random.choice(["된장찌개","치킨","떡볶이","라면","감자튀김"]))
    print("이 문장도 반복되나")
  • 이렇게 작성하게 되면 조건문이 계속 참이기 때문에 무한반복이 되며 굉장히 빠른 속도로 출력하게 된다.

코드수정

import random
import time

while True:
    print(random.choice(["된장찌개","치킨","떡볶이","라면","감자튀김"]))
    print("이 문장도 반복되나")
    time.sleep(1)
  • time모듈을 추가해서 1초마다 출력되도록 변경해서 출력시간을 천천히 한다.
  • 그렇지만 무한 반복이기에 ctrl+c를 눌러 멈춰야 한다.

코드수정2 - break 사용

import random
import time

while True:
    print(random.choice(["된장찌개","치킨","떡볶이","라면","감자튀김"]))
    break
    print("이 문장도 반복되나")
    time.sleep(1)
  • break문을 만나게되면 반복문에서 반복을 멈추고 나오게 된다.

데이터 상자 만들기

  • 점심메뉴를 담는 데이터 상자(변수) lunch와 저녁메뉴를 담는 데이터 상자(변수) dinner를 작성해보자.
  • 데이터를 담는 상자를 변수라고 한다.

코드

import random

lunch = random.choice(["된장찌개","피자","제육볶음"])
dinner = random.choice(["김밥","쫄면","돈까스"])
print(lunch)

결과

피자
  • 이런식으로 랜덤선정된 점심메뉴가 lunch라는 변수에 담겨 출력된다.

Dictionary

  • python 자료형 중 하나인 Dictionary에 대해 알아보자.

Dictionary란?
: 사전(dictionary)은 파이썬에서 리스트(list)와 더불어 가장 많이 사용되는 내장 데이터 타입 중 하나이다.

  • 해시 테이블(hash table) 자료 구조 기반으로 하는 사전(dictionary)은 키(key)와 값(value)으로 이루어진 여러 쌍의 데이터를 담아 둘 때 사용한다.

코드

information = {"고향":"수원", "취미":"영화관람", "좋아하는 음식":"국수"}
print(information)
print(information.get("취미"))
  • 여기서 key는 고향, 취미, 좋아하는 음식이고, value는 수원, 영화관람, 국수이다.

결과

{'고향': '수원', '취미': '영화관람', '좋아하는 음식': '국수'}
영화관람
  • 첫번째로, dictionary가 그대로 출력되고 두번째로, dictionary의 get함수를 이용해 입력한 key("취미")에 맞는 value("영화관람")를 출력한다.

List와 Dictionary

1. Dictionary 사용법

< 특정값 가져오기 >

코드

information = {"고향":"수원", "취미":"영화관람","좋아하는 음식":"국수"}
print(information.get("취미"))

결과

영화관람

< 값 추가 >
코드

information = {"고향":"수원", "취미":"영화관람","좋아하는 음식":"국수"}
information["특기"] = "피아노"
information["사는곳"] = "서울"
print(information)

결과

{'고향': '수원', '취미': '영화관람', '좋아하는 음식': '국수', '특기': '피아노', '사는곳': '서울'}

< 값 삭제 >
코드

information = {"고향":"수원", "취미":"영화관람","좋아하는 음식":"국수"}
del information["좋아하는 음식"]
print(information)

결과

{'고향': '수원', '취미': '영화관람'}

< key, value 쌍 갯수 출력 >
코드

information = {"고향":"수원", "취미":"영화관람","좋아하는 음식":"국수"}
print(len(information))

결과

3
  • len은 length의 줄임말로 개수나 길이를 출력해준다.

< 값 모두 삭제 >
코드

information.clear()
print(information)

결과

{}

2. List 사용법

< 특정 값 읽기 >

코드

foods = ["된장찌개", "피자", "제육볶음"]
print(foods[-2])

결과

피자

< 값 추가 >
코드

foods = ["된장찌개", "피자", "제육볶음"]
foods.append("김밥")
print(foods)

결과

['된장찌개', '피자', '제육볶음', '김밥']

< 값 삭제 >
코드

foods = ["된장찌개", "피자", "제육볶음"]
del foods[1]
print(foods)

결과

['된장찌개', '제육볶음']

끝까지 반복하기

모든 딕셔너리의 각 요소 출력하기

코드

information = {"고향":"수원", "취미":"영화관람", "좋아하는 음식":"국수"}
for x, y in information.items():
    print(x)
    print(y)

결과

고향
수원
취미
영화관람
좋아하는 음식
국수
  • 딕셔너리의 경우 key, value 두가지 요소를 쌍으로 받아야 해서 x, y 두개의 변수 지정을 해주어야 한다.
  • 각각 앞에서부터 x(=key), y(=value)이렇게 대입된다.
  • 딕셔너리의 요소가 100개든 1000개든 모두 요소 출력이 가능하다.

모든 리스트의 각 요소 출력하기

코드

foods = ["된장찌개", "피자", "제육볶음"]
for x in range(3):
    print(foods[x])

결과

['된장찌개', '피자', '제육볶음']
  • 모든 요소를 출력하며 결과가 잘 나온다. 하지만, 이렇게 되면 리스트의 길이가 변할때마다(요소가 추가되거나 삭제될 때) 숫자를 일일이 수정해주어야 한다.
  • 따라서 아래와 같이 코드를 수정해서 효율을 높이자.

수정된 코드

foods = ["된장찌개", "피자", "제육볶음"]
for x in foods:
    print(x)

결과

['된장찌개', '피자', '제육볶음']
  • 이렇게 수정되면 리스트의 요소가 100개든 1000개든 모두 요소 출력이 가능하다.

집합 알아보기

information = ["된장찌개","피자","제육볶음"]
information.append("된장찌개")

-> 위와 같이 코드를 작성하게 되면 한 리스트에 데이터(된장찌개)가 중복된다.

  • 이렇게 메뉴 개수가 적으면 중복여부를 쉽게 알 수 있지만, 메뉴가 세기 힘들게 많아진다면 중복을 확인하기 힘들다.

    이때 필요한 것이 집합이다.

집합이란?

  • 여러가지 원소들의 모음이다.
  • 리스트는 순서가 명확한 반면, 집합은 순서가 없다.
  • 리스트와 달리 겹치는 요소 즉, 중복된 요소가 없다.

합집합 연산

  • 두개의 집합을 합치게 되면 중복되는 요소를 하나로 합쳐준다.

차집합 연산

  • 두 집합에 대해서 겹치는 요소를 빼준다.

교집합 연산

  • 겹치는 요소만 뽑아준다.

리스트를 set()으로 감싸면 어떻게 될까?

코드

foods = ["된장찌개", "피자", "제육볶음"]
foods_set1 = set(foods)
print(foods_set1)

결과

{'피자', '된장찌개', '제육볶음'}
  • 순서가 있는 리스트를 set()으로 감쌌더니 순서가 없는 집합이 되었다.

집합 사용하기

  • 집합을 특성을 사용해 리스트의 중복을 없애보자.

코드

foods = ["된장찌개", "피자", "제육볶음", "된장찌개"]
foods_set = set(foods)
print(foods)
print(foods_set)

결과

['된장찌개', '피자', '제육볶음', '된장찌개']
{'제육볶음', '피자', '된장찌개'}
  • 리스트 출력에선 된장찌개가 2개가 나왔지만, 집합에선 1개로 합쳐 나왔다.
  • 리스트를 집합으로 변경하면 중복을 없앨 수 있다.

< 합집합 >
코드

menu1 = set(["된장찌개", "피자", "제육볶음"])
menu2 = set(["된장찌개", "떡국", "김밥"])
menu3 = menu1 | menu2
print(menu3)

결과

{'피자', '제육볶음', '김밥', '된장찌개', '떡국'}

< 교집합 >
코드

menu1 = set(["된장찌개", "피자", "제육볶음"])
menu2 = set(["된장찌개", "떡국", "김밥"])
menu3 = menu1 & menu2
print(menu3)

결과

{'된장찌개'}

< 차집합 >
코드

menu1 = set(["된장찌개", "피자", "제육볶음"])
menu2 = set(["된장찌개", "떡국", "김밥"])
menu3 = menu1 - menu2
print(menu3)

결과

{'피자', '제육볶음'}

만약에

  • 랜덤으로 뽑았을 때 만약에 제육볶음이 나오면 곱배기로 먹고싶다면?
    -> 조건문인 if문을 사용해보자!
    코드
import random

food = random.choice(["된장찌개","피자","제육볶음"])

print(food)
if(food == "제육볶음"):
    print("곱배기 주세요")
else:
    print("그냥 주세요")
print("종료")
  • if문도 반복문인 for문, while문과 마찬가지로 들여쓰기를 통해 영역 지정을 해준다.
  • else문은 앞에 if문을 썼을 때만 사용가능하며, if조건문에 들어가지 않는 모든 조건을 의미한다.

[오늘은 뭐드실?] 제작하기(1)

코드

  • 기존 메뉴에 돈까스 메뉴를 추가해보자.
lunch = ["된장찌개", "피자", "제육볶음", "짜장면"]
item = input("음식을 추가 해주세요 : ")
lunch.append(item)
print(lunch)
  • input함수를 이용해 값을 받아와 list에 추가해주는 코드이다.

결과

음식을 추가 해주세요 : 돈까스
['된장찌개', '피자', '제육볶음', '짜장면', '돈까스']

[오늘은 뭐드실?] 제작하기(2)

  • while문을 이용해 음식을 계속해서 추가해보고, q를 입력하면 종료하도록 해보자.

코드

lunch = ["된장찌개", "피자", "제육볶음", "짜장면"]

while True:
    print(lunch)
    item = input("음식을 추가 해주세요 : ")
    if(item == "q"):
        break
    else:
        lunch.append(item)
    
print(lunch)

결과

['된장찌개', '피자', '제육볶음', '짜장면']
음식을 추가 해주세요 : 돈까스
['된장찌개', '피자', '제육볶음', '짜장면', '돈까스']
음식을 추가 해주세요 : q
['된장찌개', '피자', '제육볶음', '짜장면', '돈까스']
  • 돈까스는 추가되고 q를 입력하니 전체 음식을 출력하고 종료된다.

[오늘은 뭐드실?] 제작하기(3)

  • 짜장면을 메뉴에서 빼보자.
    코드
set_dinner = set(["된장찌개", "피자", "제육볶음", "짜장면"])
food = "짜장면"

print(set_dinner - food)
  • 위 코드를 실행시켜보면 error가 발생한다.
  • '-' 차집합 기호는 집합과 집합간에만 사용이 가능해서, 집합에서 문자열을 빼는 것은 불가능해 발생하는 error이다.
  • 따라서 문자열인 food를 집합으로 바꿔줘야한다. 문자열이 집합이 되기 위해서는 리스트로 만든 후 set()으로 감싸야 한다.

수정된 코드

set_dinner = set(["된장찌개", "피자", "제육볶음", "짜장면"])
food = "짜장면"

print(set_dinner - set([food]))
print(set_dinner)

결과

{'피자', '제육볶음', '된장찌개'}
{'피자', '제육볶음', '된장찌개', '짜장면'}
  • food 문자열을 집합으로 변경해서 실행하면 에러가 발생하지 않는다. 그러나, 차집합 연산을 한 뒤에 set_dinner에는 실질적으로 짜장면이 빠진 것은 아니다.
  • 이를 해결하기 위해서는 차집합을 그대로 원래의 집합인 set_dinner에 대입을 하면 된다.

수정된 코드

set_dinner = set(["된장찌개", "피자", "제육볶음", "짜장면"])
food = "짜장면"

set_dinner = set_dinner - set([food])
print(set_dinner)

결과

{'피자', '제육볶음', '된장찌개'}

[오늘은 뭐드실?] 제작하기(4)

코드

import random
import time

lunch = ["된장찌개", "피자", "제육볶음", "짜장면"]

while True:
    print(lunch)
    item = input("음식을 추가 해주세요 : ")
    if(item == "q"):
        break
    else:
        lunch.append(item)
print(lunch)

set_lunch = set(lunch)
while True:
    print(set_lunch)
    item = input("음식을 삭제해주세요 : ")
    if(item == "q"):
        break
    else:
        set_lunch = set_lunch - set([item])

print(set_lunch, "중에서 선택합니다.")
print("5")
time.sleep(1)
print("4")
time.sleep(1)
print("3")
time.sleep(1)
print("2")
time.sleep(1)
print("1")
time.sleep(1)
print(random.choice(list(set_lunch)))

결과

['된장찌개', '피자', '제육볶음', '짜장면']
음식을 추가 해주세요 : 돈까스
['된장찌개', '피자', '제육볶음', '짜장면', '돈까스']
음식을 추가 해주세요 : q
['된장찌개', '피자', '제육볶음', '짜장면', '돈까스']
{'피자', '된장찌개', '돈까스', '제육볶음', '짜장면'}
음식을 삭제해주세요 : 된장찌개
{'제육볶음', '짜장면', '돈까스', '피자'}
음식을 삭제해주세요 : q
{'제육볶음', '짜장면', '돈까스', '피자'} 중에서 선택합니다.
5
4
3
2
1
피자
  • 기존 메뉴가 있는 상태에서 원하는 메뉴를 추가하고 추가가 끝나면 q를 입력해 종료
  • 삭제를 원하는 메뉴가 있다면 입력하고 입력이 끝나면 q를 입력해 종료
  • 이후 남은 목록 중 랜덤으로 메뉴를 선정하는 코드이다.

[오늘은 뭐드실?] 정리하기

최종코드 리뷰

import random		//메뉴를 랜덤으로 뽑기 위해 import
import time			//초를 세기 위해 import

lunch = ["된장찌개", "피자", "제육볶음", "짜장면"] //리스트 형태로 메뉴 저장

while True:				//무한루프
    print(lunch)
    item = input("음식을 추가 해주세요 : ")	//메뉴를 입력받는다.
    if(item == "q"):	
        break				//사용자 입력이 q이면 반복문 종료
    else:
        lunch.append(item)	//사용자 입력이 q가 아닌 경우 리스트에 추가
print(lunch)

set_lunch = set(lunch)		//리스트를 집합으로 변경해 중복제거
while True:
    print(set_lunch)
    item = input("음식을 삭제해주세요 : ")
    if(item == "q"):
        break
    else:
        set_lunch = set_lunch - set([item])		//차집합을 통해 요소 삭제

print(set_lunch, "중에서 선택합니다.")	//,(콤마)로 변수와 문자열을 동시 출력할 수 있다.
print("5")
time.sleep(1)		//1초 쉬기
print("4")
time.sleep(1)
print("3")
time.sleep(1)
print("2")
time.sleep(1)
print("1")
time.sleep(1)
print(random.choice(list(set_lunch)))	//랜덤으로 메뉴 최종 선정

Chapter 3

Python으로 만드는 익명 질문 게시판

함수 알아보기

돌체라떼 레시피

-> 이 레시피(함수가 해야 할 내용)대로 만드는 돌체라떼 기계가 바로 함수이다.

함수 형식

def 함수이름():
	함수가 해야 할 내용 1
    함수가 해야 할 내용 2
    ...

예시

def make_dolcelatte():
    print("1. 얼음을 넣는다.")
    print("2. 연유를 30ml 넣는다.")
    print("3. 찬 우유를 넣는다.")
    print("4. 에스프레소샷을 넣는다.")

def make_blueberry_smoothie():
    print("1. 블루베리 20g을 넣는다.")
    print("2. 우유 300ml를 넣는다.")
    print("3. 얼음을 넣는다.")
    print("4. 믹서기에 간다.")

def make_simple_latte():
    print("1. 커피를 넣는다.")
    print("2. 우유를 넣는다.")
    print("3. 신나게 섞는다.")

-> 이대로 파일을 실행해도 아무것도 출력되지 않는다.
왜? 함수를 호출해야 함수가 동작한다.

함수 호출 방법

함수이름()

함수 호출 코드

def make_dolcelatte():
    print("1. 얼음을 넣는다.")
    print("2. 연유를 30ml 넣는다.")
    print("3. 찬 우유를 넣는다.")
    print("4. 에스프레소샷을 넣는다.")

def make_blueberry_smoothie():
    print("1. 블루베리 20g을 넣는다.")
    print("2. 우유 300ml를 넣는다.")
    print("3. 얼음을 넣는다.")
    print("4. 믹서기에 간다.")

def make_simple_latte():
    print("1. 커피를 넣는다.")
    print("2. 우유를 넣는다.")
    print("3. 신나게 섞는다.")

make_simple_latte()

결과

1. 커피를 넣는다.
2. 우유를 넣는다.
3. 신나게 섞는다.

[이상형이 뭐예요?] 제작하기 (1)

  • 우리는 익명 게시판에서 받은 질문과 답변을 모두 저장할 것이다.

  • 질문을 딕셔너리(dictionary)의 key로, 답변을 value로 나눌 수 있다.

  • 아래와 같이 두개의 딕셔너리(dictionary)를 하나의 리스트에 담을 수 있다.

  • 두가지 형태로 나누어 구성해보자.

  • 1번과 같이 처음 보는 사람도 질문인지 답변인지 알 수 있도록 작성할 수도 있고, 2번과 같이 처음 보는 사람은 모르지만 간결하게 작성할 수 있는 방법도 있다.


[이상형이 뭐예요?] 제작하기 (2)

코드

  • 질문을 입력받아서 딕셔너리(dictionary)의 key값에 저장해보자.
total_dictionary = {}

while True:
    question = input("질문을 입력해주세요 : ")
    if question == "q":
        break
    else:
        total_dictionary[question] = ""
print(total_dictionary)
  • 질문을 입력받아 dictionary의 key에 저장하고 답변인 value값은 비워둔다.

[이상형이 뭐예요?] 제작하기 (3)

  • 답변을 입력받아 딕셔너리(dictionary)의 value값에 저장해보자.
total_dictionary = {}

while True:
    question = input("질문을 입력해주세요 : ")
    if question == "q":
        break
    else:
        total_dictionary[question] = ""
//추가된 내용
for i in total_dictionary:
    print(i)
    answer = input("답변을 입력해주세요 : ")
    total_dictionary[i] = answer
print(total_dictionary)
  • for문을 사용해 앞에서 저장한 질문을 뽑아서 출력하고 그에 맞는 답변을 입력받아 딕셔너리(dictionary)의 value값에 저장한다.

[이상형이 뭐예요?] 제작하기 (4)


코드

  • 질문을 입력받아 딕셔너리로 구성 후 리스트에 추가.
total_list = []

while True:
    question = input("질문을 입력해주세요 : ")
    if question == "q":
        break
    else:
        total_list.append({"질문" : question, "답변" : ""})

[이상형이 뭐예요?] 제작하기 (5)

코드

  • 질문에 따른 답변을 입력받아 "답변"key의 value에 저장.
total_list = []

while True:
    question = input("질문을 입력해주세요 : ")
    if question == "q":
        break
    else:
        total_list.append({"질문" : question, "답변" : ""})
//추가된 내용
for i in total_list:
    print(i["질문"])
    answer = input("답변을 입력해주세요 : ")
    i["답변"] = answer
print(total_list)

결과

질문을 입력해주세요 : 취미는?
질문을 입력해주세요 : 특기는?
질문을 입력해주세요 : q
취미는?
답변을 입력해주세요 : 노래듣기
특기는?
답변을 입력해주세요 : 노래부르기
[{'질문': '취미는?', '답변': '노래듣기'}, {'질문': '특기는?', '답변': '노래부르기'}]

[이상형이 뭐예요?] 정리하기

최종 코드 리뷰

total_list = []

while True:				//무한루프
    question = input("질문을 입력해주세요 : ")	
    if question == "q":		//q를 입력하면 
        break				//질문 입력 종료
    else:
        total_list.append({"질문" : question, "답변" : ""})

for i in total_list:
    print(i["질문"])
    answer = input("답변을 입력해주세요 : ")
    i["답변"] = answer
print(total_list)

0개의 댓글