[4일차] Python 기초

멍게장·2022년 2월 24일
0

Chapter 1

순차 - 차례대로 하나씩

친구야 안녕 1 - 인사하기

  • 목표 : 친구와 만나 밥을 먹을거예요.
    step 1. 친구의 이름을 입력받고, "이름"아 안녕!이라고 출력해보자.

우리의 목표를 이루기 위해서는 python 의 기초 문법인 아래 기능들이 필요하다.

input()		// 입력 - 사용자에게 어떠한 데이터를 입력 받아 컴퓨터에 저장해준다.
ex) a=input('숫자를 입력하세요')

print()		// 출력 - 컴퓨터에 들어있는 데이터를 사용자에게 출력해준다.

코드

name = input("이름을 입력해주세요: ")

print(name + "씨 안녕!!")

결과

이름을 입력해주세요: 장멍게
장멍게씨 안녕!!

친구야 안녕 1 - 계산하기

  • 목표 : 친구와 만나 밥을 먹을거예요.
    step 2. 친구와 먹은 가격을 더해서, 총 금액을 계산해 출력해보자.

코드
나와 친구가 먹은 음식 가격을 입력받아 더해서 출력해보자.

food1 = input("내가 먹은 음식의 가격")
food2 = input("친구가 먹은 음식의 가격")

print(food1 + food2)

결과

내가 먹은 음식의 가격 : 5000
친구가 먹은 음식의 가격 : 7000
50007000

-> 우리가 생각한 결과가 아니다.

사실 우리가 사용하고 있는 이 input()은 모두 글자로 저장이 되고 있다.
즉, 우리가 숫자를 입력했다고 하지만 5000, 7000이라는 데이터는 모두 글자다.

우리가 원했던 더하기를 하려면 어떻게 해야할까?

int()		// 글자를 숫자로 변환시켜준다.

-> 이런 것을 형변환이라 한다.

최종 코드

food1 = input("내가 먹은 음식의 가격 : ")
food2 = input("친구가 먹은 음식의 가격 : ")

food1 = int(food1)		// 문자로 입력받은 food1값 숫자로 변경
food2 = int(food2)		// 문자로 입력받은 food2값 숫자로 변경

print(food1 + food2)

결과

내가 먹은 음식의 가격 : 5000
친구가 먹은 음식의 가격 : 7000
12000

-> 이제 결과가 우리가 생각한 대로 잘 나온다.


월세와 관리비

연산자
가장 기본적인 사칙연산(+, -, *, /)에 대해 알아보자.
코드(+,-)

print(10+20)
print(10-20)

결과

30
-10

월세와 관리비를 입력받아 더해보자.

코드

월세 = int(input("월세를 입력해주세요 : "))
관리비 = int(input("관리비를 입력해주세요 : "))

print(월세 + 관리비)

결과

월세를 입력해주세요 : 500000
관리비를 입력해주세요 : 100000
600000

사칙연산을 모두사용해보자.
코드

월세 = int(input("월세를 입력해주세요 : "))
관리비 = int(input("관리비를 입력해주세요 : "))

print(월세 + 관리비)
print(월세 - 관리비)
print((월세 + 관리비) * 12)
print(월세 / 관리비)

결과

월세를 입력해주세요 : 500000
관리비를 입력해주세요 : 100000
600000
400000
7200000
5.0

중식당 주문 1 - 주문서 제작하기

  • 목표 : 중식당에서 주문을 해봅시다. 나열한 순서대로 주문합니다.
    step 1. 비어있는 주문서(list)를 만들어 "orders"라는 이름을 지어주세요.
    코드
orders = []

print(orders)

결과

[]

중식당 주문 2 - 작성하기

step 2. 순서대로 "짜장", "짬뽕", "탕수육"을 넣어주세요.
코드

orders = ["짜장", "짬뽕", "탕수육"]
  • 각 data를 요소(elements)라고 부른다.
  • 각 data는 index로 구분된다.
    - 짜장: 0
    - 짬뽕: 1
    - 탕수육: 2

코드

orders = ["짜장", "짬뽕", "탕수육"]

print(orders[0])
print(orders[1])
print(orders[2])

결과

짜장
짬뽕
탕수육

중식당 주문 3 - 추가하기

step 3. "냉면"을 첫번째로 추가해주세요.

< list[]의 기능들 >

1. list[]에 data 추가하기
append()	// 리스트의 맨 뒤에 추가된다.
insert()	// 리스트의 원하는 위치에 추가된다.

적용 코드

orders = ["짜장", "짬뽕", "탕수육"]

orders.append("냉면")
orders.insert(3, "양장피")
print(orders)

결과

['짜장', '짬뽕', '탕수육', '양장피', '냉면']

중식당 주문 4 - 제거하기

step 4. 생각해보니 "짬뽕"이 안땡겨요. 삭제해주세요.

2. list[] data 삭제하기
del			//
ex) del 리스트이름[인덱스번호]
remove()	//
ex) 리스트이름.remove(value)

'짬뽕'을 삭제하라.

적용 코드

  • remove활용
orders = ["짜장", "짬뽕", "탕수육"]

orders.remove("짬뽕")

print(orders)

결과

['짜장', '탕수육']

-> 짬뽕이 삭제된 것을 확인 할 수 있다.

  • del활용
orders = ["짜장", "짬뽕", "탕수육"]

del orders[1]

print(orders)

결과

['짜장', '탕수육']

-> 짬뽕이 삭제된 것을 확인 할 수 있다.


중식당 주문 5 - 계산하기

step 5. 주문서에 총 몇 개의 음식이 있나요?

3. list[]의 길이 구하기
len()

적용 코드

orders = ["짜장", "짬뽕", "탕수육"]

print(len(orders))

결과

3

len()을 이용해 문자열의 길이도 알 수 있다.

name = "안녕하세요 코드라이언입니다."
print(len(name))

결과

15

숫자 리스트 1

  • 목표: 숫자로 구성된 list를 만들어 보자.
    step 1. 20, 40, 50, 10, 30으로 이루어진 이름이 num인 list를 만들어 주세요.
    코드
num = [20, 40, 50, 10, 30]

print(num)

결과

[20, 40, 50, 10, 30]

step 2. list 안의 숫자들의 전체 합을 출력해주세요.
코드

num = [20, 40, 50, 10, 30]

add = num[0] + num[1] + num[2] + num[3] + num[4]
print(add)

결과

150

-> 결과는 잘 나왔지만, 위처럼 일일이 더하면 요소가 100개, 1000개가 넘어가게 되면 불가능한 방법이다.

sum()

-> 위 함수를 사용하자.

코드

num = [20, 40, 50, 10, 30, 100, 200]

add = sum(num)
print(add)

결과

450

숫자 리스트 2

step 3. list 안의 숫자들의 평균을 출력해주세요.
평균 = (전체의합)/전체개수

코드

num = [20, 40, 50, 10, 30]

print(sum(num) / len(num))

결과

30.0

step 4. 가장 큰 값과 가장 작은 값을 각각 출력해주세요.

max()
min()

코드

num = [20, 40, 50, 10, 30]

print(max(num))
print(min(num))

결과

50
10

-> 이렇게 가장 큰 값과 작은 값을 찾아낼 수 있다.


중식당 메뉴판 1 - 제작하기

  • 목표: 중식당 메뉴판을 만들어보자.
    step 1. 비어있는 메뉴판(dictionary)를 만들어 "menu"라는 이름을 지어주세요.
menu = {}

-> 딕셔너리는 중괄호를 이용해 생성할 수 있다.

step 2. 메뉴판에 음식 이름과 가격을 넣어 메뉴판을 만들어 주세요.

위 내용을 코드로 변경하면 아래와 같다.

menu = {"짜장": 4000,"짬뽕": 5000, "탕수육: 9000}

print(menu)

결과

{'짜장': 4000, '짬뽕': 5000, '탕수육': 9000}

-> 결과가 잘 나오는 것을 볼 수 있다.


중식당 메뉴판 2 - 수정하기

step 3. 새로운 메뉴 "냉면"을 메뉴판에 추가해주세요.

menu = {"짜장" : 4000, "짬뽕" : 5000, "탕수육" : 9000}

menu["냉면"] = 6000

print(menu)

결과

{'짜장': 4000, '짬뽕': 5000, '탕수육': 9000, '냉면': 6000}

-> 잘 추가된 것을 확인 할 수 있다.

step 4. "짬뽕"의 가격이 얼마죠? "짬뽕"의 가격을 출력해 주세요.

print(딕셔너리이름[key값])

코드

menu = {"짜장" : 4000, "짬뽕" : 5000, "탕수육" : 9000}

print(menu["짬뽕"])

결과

5000

step 5. 생각보다 탕수육이 비싼 것 같아요. 탕수육의 가격을 8500원으로 변경해주세요.

기존 value를 변경할 때도 추가하는 것과 구성은 똑같다.
즉, key값이 존재하면 value값 변경이 되는 것이고, key값이 존재하지 않으면 추가가 되는 것이다.

코드

menu = {"짜장" : 4000, "짬뽕" : 5000, "탕수육" : 9000}

menu["탕수육"] = 8500

print(menu)

결과

{'짜장': 4000, '짬뽕': 5000, '탕수육': 8500}

중식당 메뉴판 3 - 완성하기

step 6. 준비해둔 "짜장"재료가 다 떨어졌어요. "짜장"을 메뉴판에서 삭제해 주세요.
코드

menu = {"짜장" : 4000, "짬뽕" : 5000, "탕수육" : 9000}

del menu["짜장"]

print(menu)

결과

{'짬뽕': 5000, '탕수육': 9000}

step 7. 완성된 메뉴판 전체를 출력해 주세요.
코드

menu = {"짜장" : 4000, "짬뽕" : 5000, "탕수육" : 9000}

menu["냉면"] = 6000

print(menu["짬뽕"])

menu["탕수육"] = 8500

del menu["짜장"]

print(menu)

결과

5000
{'짬뽕': 5000, '탕수육': 8500, '냉면': 6000}

Chapter 2

조건 - 상황에 다르게

학번 계산기 1 - 관계 연산자

  • 목표: 나와 동료의 학번을 입력하고, 호칭을 정해보자.

step 1. 나와 동료의 학번을 입력받아서 비교해봅시다.

  • 조건: 하나의 수식을 이야기 하는데, 결과가 True 혹은 False로만 이루어져 있다.

관계연산자 종류

a==b		// a와 b가 같니?
a!=b		// a와 b가 다르니?
a<b			// a가 b보다 작니?
a>b			// a가 b보다 크니?
a<=b		// a가 b보다 작거나 같니?
a>=b		// a가 b보다 크거나 같니?

학번 계산기 2 - 관계 연산자

코드

myGrade = int(input("학번을 입력하세요 : "))
yourGrade = int(input("학번을 입력하세요 : "))

print(myGrade != yourGrade)
print(myGrade == yourGrade)
print(myGrade > yourGrade)
print(myGrade < yourGrade)
print(myGrade >= yourGrade)
print(myGrade <= yourGrade)

결과

학번을 입력하세요 : 15
학번을 입력하세요 : 17
True
False
False
True
False
True

학번 계산기 3 - 학번 비교하기

step 2. 동료의 학번이 나와 같다면, "앗!동기네요"라고 출력해봅시다.

if 조건:
	실행할 코드

-> if는 조건문 사이에 스페이스로 한칸 띄어줘야 하고 실행할 코드는 tab을 이용해 띄워줘야 한다.


학번 계산기 4 - 인사하기

step 3. 동료의 학번에 따라 호칭을 다르게 인사 해봅시다.
(e.g.안녕하세요(후배님/동기님/선배님)
코드

myGrade = int(input("학번을 입력하세요 : "))
yourGrade = int(input("학번을 입력하세요 : "))

if myGrade == yourGrade :
    print("앗 동기네요!")
    print("반갑습니다.")

결과

학번을 입력하세요 : 10
학번을 입력하세요 : 10
앗 동기네요!
반갑습니다.

학번 계산기 5 - 동기에게 인사하기

  • 조건문을 사용해 나의 동기라면 인사를 해보자.
myGrade = int(input("학번을 입력하세요 : "))
yourGrade = int(input("학번을 입력하세요 : "))

if myGrade == yourGrade :
    print("앗 동기네요!")
else :
    print("앗 동기가 아니네요!")

학번 계산기 6 - 다르게 인사하기

  • 여러개의 조건문
if 조건:
	True일때 실행될 코드
elif 조건:
	위에있는 if가 False이고, elif 조건이 True일때 실행될 코드
else:
	모든 조건문이 False일때 실행될 코드

코드

myGrade = int(input("학번을 입력하세요 : "))
yourGrade = int(input("학번을 입력하세요 : "))

if myGrade == yourGrade :		// 나의 학번과 동료 학번이 같으면
    print("안녕하세요 동기님!")
elif myGrade < yourGrade :		// 나의 학번이 동료 학번보다 높으면
    print("안녕하세요 선배님!")
elif myGrade > yourGrade :		// 나의 학번이 동료 학번보다 낮으면
    print("안녕하세요 후배님!")
else :							// 위 세가지 경우가 다 아니라면
    print("누구세요?")

지금 주문 되나요? 1

if + list 조합을 사용해보자.

코드

orders = ["짜장", "짬뽕", "탕수육"]

food = input("먹고싶은 메뉴를 입력해주세요 : ")

if food in orders :				// 리스트의 요소들과 food 비교 
    print("주문할 수 있습니다.")
else :
    print("주문할 수 없습니다.")

-> 위에 'if food in orders:' 처럼 작성하게 되면 'orders라는 리스트안에 food가 존재한다면' 이라는 조건문이 된다.

결과

//짜장을 입력했을 때
먹고싶은 메뉴를 입력해주세요 : 짜장
주문할 수 있습니다.				//짜장은 리스트 요소에 포함되어 있기 때문에 가능
//냉면을 입력했을 때
먹고싶은 메뉴를 입력해주세요 : 냉면
주문할 수 없습니다.				//냉면은 리스트 요소에 없기 때문에 불가능

지금 주문 되나요? 2

if + dict 조합을 사용해보자.
  • dict는 dictionary를 뜻한다.

코드

menu = {"짜장" : 4000, "짬뽕" : 5000, "탕수육" : 9000}

food = input("먹고싶은 메뉴를 입력해주세요 : ")

if food in menu :
    print("주문 가능")
else :
    print("주문 불가")

결과

// 짜장 입력했을 때
먹고싶은 메뉴를 입력해주세요 : 짜장
주문 가능
// 냉면 입력했을 때
먹고싶은 메뉴를 입력해주세요 : 냉면
주문 불가

이번엔 먹고 싶은 음식의 가격을 출력해보자.

코드

menu = {"짜장" : 4000, "짬뽕" : 5000, "탕수육" : 9000}

food = input("먹고싶은 메뉴를 입력해주세요 : ")

if food in menu :
    print(menu[food], "원 입니다.")
else :
    print("주문 불가")

결과

먹고싶은 메뉴를 입력해주세요 : 짬뽕
5000 원 입니다.

Chapter 3

반복 - 일정한 패턴으로 반복

무한반복

while문
: ~하는 동안에
-> 조건이 True인 동안에 계속 실행해라.

코드

while 10 < 90 :
    print("True")

결과
-> 위 코드에서 while문의 조건이 항상 참이기 때문에 'True'가 무한반복해서 출력된다.
-> 멈추려면 Ctrl + c 를 입력하면 된다.


순차출력

무한반복의 경우는 특별한 경우가 아닌 이상 쓸 곳이 별로 없다.

무한반복이 아닌 6번만 출력하도록 해보자.
코드

i = 0

while i < 6 :
    print(i)
    i = i + 1

결과

0
1
2
3
4
5

역순으로도 출력해보자.
코드

i = 5

while i >= 0 :
    print(i)
    i = i - 1

결과

5
4
3
2
1
0

탈출하기

반복문을 빠져나갈 때 사용하는 것이 있다. 그것이 바로 break문이다.

break

코드
if문을 사용해서 특정조건에 break문을 사용해 무한 반복문을 빠져나오게 해보자.

i = 0
while True :
    print(i)
    i = i + 1

    if i >= 3 :
        print("if문 동작")
        break

print("반복문 종료!")

결과

0
1
2
if문 동작
반복문 종료!

건너뛰기

반복문을 빠져나가는 것이 아니라 continue문을 만나면 다시 반복문의 조건을 확인하러 올라간다.

continue

코드

i = 0
while i < 10 :
    i = i + 1

    if i % 2 == 0 :		// 2의 배수라면
        continue		// 아래 print 코드가 동작되기 전에 다시 while 조건문을 확인한다.
    print(i)

print("반복 종료!")

-> 2의 배수가 아닌 즉, 홀수만 출력되도록 작성된 코드이다.

결과

1
3
5
7
9
반복 종료!

x까지 반복

for문

for 변수 in 시퀀스:
	실행될 코드

시퀀스란?
: 어떠한 순서를 가지고 있는 데이터의 집합을 말한다.
ex) 튜플, 리스트 등

코드

for x in [10, 20, 30]:
	print(x)

결과

10
20
30

-> 시퀀스(리스트)의 끝을 만나게 되면 그때 반복을 멈추게 된다.


x부터 y까지 반복

range(시작숫자, 종료숫자, 스텝)
  • 시작숫자와 스텝은 생략이 가능하다.
  • 종료숫자만 입력될 경우 0~종료숫자 이렇게 범위 형성이 된다.
  • 시작숫자, 종료숫자를 입력하게 되면 시작숫자~종료숫자까지의 범위 형성이 된다.

코드

for x in range(10) :
    print(x)

결과

0
1
2
3
4
5
6
7
8
9

-> 0부터 종료숫자(10) 전까지 나오는 것을 볼 수 있다.


x부터 y까지 z만큼 반복

range(시작숫자, 종료숫자, 스텝)
  • 시작숫자와 스텝은 생략이 가능하다.
  • 종료숫자만 입력될 경우 0~종료숫자 이렇게 범위 형성이 된다.
  • 시작숫자, 종료숫자를 입력하게 되면 시작숫자~종료숫자까지의 범위 형성이 된다.
  • 시작숫자, 종료숫자, 스텝을 모두 입력하게 되면 시작숫자~종료숫자까지 스텝만큼증가 하게 된다.

코드

for x in range(10, 20, 2) : 	// 10~20까지 2씩 증가하며 반복
    print(x)

결과

10
12
14
16
18

100까지의 합

1부터 100까지 모두 더하는 프로그램을 작성해보자.
코드

result = 0

for x in range(1, 101) :
    result = result + x

print(result)

결과

5050

1부터 10까지 곱해보자.

코드

result = 1

for x in range(1, 11) :
    result = result * x

print(result)

결과

3628800

Chapter 4

직접 풀어보기

별이 빛나는 밤

1. 세로로 별 5개를 찍어보자.
코드

for i in range(5):
    print("*")

결과

*
*
*
*
*

2. 별을 가로로 10개 찍어보자.
코드

for x in range(10) :
    print("*", end="")

-> end옵션을 사용하면 그 뒤의 출력값과 이어서 출력한다. (즉, 줄바꿈을 하지 않게 된다.)

결과

**********

< 문제 1 >
다음과 같이 출력하는 코드를 작성해보자.

*****
*****
*****
*****
*****

코드

for x in range(5):
    for y in range(5):
        print("*", end="")
    print()

< 문제 2 >
다음과 같이 출력하는 코드를 작성해보자.

*
**
***
****
*****

코드

for x in range(1,6):
    for y in range(x):
        print("*", end="")
    print()

줄 바꿔 출력하기

변수 x에 숫자를 입력받아 1부터 x까지의 숫자 모두 출력하기
ex) x에 5를 입력받아 1,2,3,4,5를 출력하는 코드

코드

x = int(input('숫자를 입력해주세요'))

for i in range(x):
	print(i+1)

결과

숫자를 입력해주세요5
1
2
3
4
5

< 문제 1 >
변수 x에 숫자를 입력받아 1부터 x까지의 숫자 모두 출력하는데 10개를 1줄로 구성해서 출력하기
ex) 30을 입력했다면,
1 2 3 4 5 6 7 8 9 10
11 12 13 14 15 16 17 18 19 20
21 22 23 24 25 26 27 28 29 30

코드

x = int(input('숫자를 입력해주세요'))

for i in range(x):
    if ((i+1) % 10)==0:
        print(i+1)
    else:
        print(i+1, end= " ")

결과

숫자를 입력해주세요30
1 2 3 4 5 6 7 8 9 10
11 12 13 14 15 16 17 18 19 20
21 22 23 24 25 26 27 28 29 30

오늘의 당첨번호

로또 번호를 선택하는 방법!
step1. 1부터 45까지 숫자가 하나씩

step2. 이 중 아무거나 6개를 선택

random 사용법

random.sample(랜덤범위, 개수)

-> random기능을 사용하기 위해서는 import 해야한다.

코드

  • 1부터 100까지 숫자 중에 10개를 랜덤으로 출력해보자.
import random

randomNumber = random.sample(range(1, 100), 10)
print(randomNumber)

-> 1부터 50까지 3개를 뽑고 싶으면 아래같이 변경하면 된다.

randomNumber = random.sample(range(1, 50), 3)

결과

[87, 42, 10, 84, 59, 23, 72, 34, 61, 88]

-> 1부터 100까지 숫자 중에 10개의 숫자가 랜덤으로 출력된 것을 확인 할 수 있다.

문제
1. 사용자에게 로또를 몇 개 살건지 숫자 입력
2. 1부터 45까지 숫자 중 6개를 랜덤으로 뽑기
3. 사용자에게 입력받은 개수만큼 2를 뽑기
4. 오름차순으로 정렬해서 출력하기

코드

import random

lotto_count = int(input('로또를 몇 개 살건가요?'))

for i in range(lotto_count):
    randomNumber = random.sample(range(1, 46), 6)
    randomNumber.sort()
    print(randomNumber)

결과

로또를 몇 개 살건가요?2
[9, 11, 14, 23, 35, 38]
[14, 17, 25, 36, 37, 43]

Chapter 5

같이 풀어보기

별이 빛나는 밤 - 해설

아래 결과를 출력하는 여러가지 방법을 알아보자.

결과 1

*****

방법 1

print("*****")

방법 2

for x in range(5) :
	print("*", end="")

방법 3

print("*" * 5)

결과 2

*****
*****
*****
*****
*****

방법 1

for x in range(5) :
    print("*" * 5)

결과 3

*
**
***
****
*****

방법 1

for x in range(5) :
    print("*" * (x + 1))

줄 바꿔 출력하기 - 해설

결과 1
x에 5를 입력했을 때

5
4
3
2
1

방법 1

x = int(input("숫자를 입력하세요 : "))

for i in range(x, 0, -1) :
    print(i)

결과 2
x에 30을 입력했을 때

1 2 3 4 5 6 7 8 9 10
11 12 13 14 15 16 17 18 19 20
21 22 23 24 25 26 27 28 29 30

방법 1

x = int(input("숫자를 입력하세요 : "))

for i in range(x) :
    if i % 10 == 0 :
        print()
    print(i+1, end="")

print()

방법 2
좀 더 깔끔한 출력을 위해 /t사용

  • /t는 한 탭을 띄워준다는 의미이다.
x = int(input("숫자를 입력하세요 : "))

for i in range(x) :
    if i % 10 == 0 :
        print()
    print(i+1, end="\t")

print()

오늘의 당첨 번호 - 해설

문제
1. 사용자에게 로또를 몇 개 살건지 숫자 입력
2. 1부터 45까지 숫자 중 6개를 랜덤으로 뽑기
3. 사용자에게 입력받은 개수만큼 2를 뽑기
4. 오름차순으로 정렬해서 출력하기

방법 1

import random

count = int(input("로또를 몇개 구매하시겠습니까? "))

for i in range(count) :
    lotto = random.sample(range(1, 46), 6)
    lotto.sort()
    print(lotto)

print("로또 종료")

0개의 댓글