Python

Python 기초(For, While) - AWS 풀스택 과정 (예습) 2일차

awspspgh 2024. 7. 2. 23:54

 7월 2일에 배운 핵심 내용은 크게 for, while문입니다.

for, while문에 대해 자세히 들어가기 전에 어제 배웠던 내용을 복습하도록 하겠습니다.

목차
1. if문 복습
2. list
3. for문
4. while문
5. random
6. 예제 문제
7. 느낀점

 

1. if문 복습

 if문 복습을 위해서 새로운 문제를 하나 풀어보겠습니다.

-  숫자 하나를 입력 받아 홀수인지 짝수인지 출력하시오.

입력을 받기 위해서는 input을 이용해야 합니다. 그런데 홀수인지 짝수인지는 어떻게 판단할 수 있을까요?

바로 숫자를 2로 나누어 나머지가 0 나오면 짝수입니다!

num = int(input("숫자를 입력해주세요."))
result = num%2
if result == 0:
    print("%d는 짝수입니다." % (num))
else:
    print("%d는 홀수입니다." % (num))

 

총 6줄로 정리하였습니다. 하지만 여기서 줄일 수 있는데요. 바로 if문을 한 줄로 더 정리할 수 있습니다.

num = int(input("숫자를 입력해주세요."))
result = num%2
print("짝수" if result % 2 == 0 else "홀수")

if와 else를 한 줄로 간단하게 정리할 수 있습니다. 이렇게 하면 코딩이 길어지는 것을 조금이라도 줄여줄 수 있습니다.

하지만 조건이 길거나 출력값이 길면 쓰기 어렵기에 짧은 if문을 정리할 때 이렇게 하는 것이 좋을 것 같습니다.

 

2. list

 list => [요소1, 요소2, 요소3 ...]

in

: 리스트와 같이 요소들 중에 내가 원하는 것이 존재하는지 확인해줍니다.

 

not in

: in과 반대로 없는지 확인해줍니다.

 

list와 in을 이용해서 문제 하나를 풀어보겠습니다.

- poket = ['patper', 'phone', 'money']일 때, poket 안에 money가 있으면 "택시를 타고" 없으면

"걸어가라"라는 문장을 출력하시오.

poket = ['paper', 'phone', 'money']
if "money" in poket:
    print("택시를 타고 가라")
else:
    print("걸어가라")

 

3. for문

 리스트나 튜플, 문자열의 첫 번째 요소부터 마지막 요소까지 차례대로 변수에 대입되어 '수행할_문장1', '수행할_문장2'

등이 수행됩니다.

 

한 번 전형적인 for문의 예시를 보면서 이해를 해보겠습니다.

test_list = ['one', 'two', 'three']
for i in test_list:
    print(i)

for문은 차례대로 변수에 대입을 하므로 one, two, three로 출력값이 나올 것입니다.

 

range

ex) range(10)은 0부터 10미만의 숫자를 포함하는 range 객체를 생성합니다.

 

range를 이용해서 1~10까지의 숫자의 합계를 출력해보겠습니다.

x = 0
for i in range(1,11):
    x = x + i
print(x)

여기서 아까전에 배웠던 내용을 활용해본다면

sum = 0
evenSum = 0
oddSum = 0
for i in range(1,11):
    sum = sum + i
    if i % 2 == 0:
        evenSum = evenSum + i
    else:
        oddSum = oddSum + i
print("총합:%d, 짝수의 합:%d, 홀수의 합:%d" % (sum, evenSum, oddSum))

 

이렇게 짝수와 홀수의 합을 각각 구해볼 수 있습니다.

 

4. while문

 while문은 문장을 반복해서 수행해야 할 경우 while문을 사용합니다.

 

 

while문은 조건문이 참인 동안 while문에 속한 문장들이 반복해서 수행됩니다.

조건식이 참(true)이면 반복합니다. 반드시 수행문에서 조건식이 false가 될 수 있는 문장을 포함해야 합니다.

(무한 루프에 빠질 수 있음)

break

: 반복문을 빠져나가게 해줍니다.

 

먼저 while을 이용해서 1~10까지의 숫자들을 출력해본다면

i = 0
while i <= 10:
    print(i)
    i += 1

여기서 숫자들의 합계도 출력한다면

i = 0
sum = 0
while i < 10:
    i += 1
    sum = sum + i
print("합계:%d" % sum)

이렇게 표현할 수도 있습니다.

 

그렇다면 while문을 활용해서 여러 메뉴 중에 하나를 선택할 때 각각의 출력값이 나오는 것을 while과 if를 활용해서 만들어볼 수도 있습니다.

msg = '''
메뉴를 선택해주세요.
1. 추가하기
2. 삭제하기
3. 조회하기
4. 종료하기
>>
'''

num = 0
while num !=4:
    print(msg)
    num = int(input())
    if num == 1:
        print("데이터를 추가합니다.")
    elif num == 2:
        print("데이터를 삭제합니다.")
    elif num == 3:
        print("데이터를 조회합니다.")
    elif num > 4:
        print("잘못된 번호입니다.")
print("종료합니다.")

여기서 while num != 4를 이용하지 않고 True와 break를 이용해서 변형할 수 있습니다.

num = 0
 while True:
     print(msg)
     num = int(input())
     if num == 1:
         print("데이터를 추가합니다.")
     elif num == 2:
         print("데이터를 삭제합니다.")
     elif num == 3:
         print("데이터를 조회합니다.")
     elif num == 4:
         print("종료합니다.")
         break
     elif num > 4:
     print("잘못된 번호입니다.")

True를 이용해서 다른 문제도 풀어보겠습니다.

- 아무 단어나 입력 및 출력를 하고 Y 또는 y를 입력 시 종료하게 하시오.

while True:
    msg = input("단어를 입력해주세요. (종료하시려면 y)")
    if msg.lower() == "y":
        print("종료합니다.")
        break
    print(msg)

 

lower를 이용해서 Y를 입력했을 시 y로 바뀌도록 하였습니다. 물론 if문 조건 부분에 lower를 이용하지 않고 Y or y을 이용해도 가능합니다!

 

5. random

: 난수를 발생시키는 함수입니다. (이 때 난수는 0~1 사이의 아무 수)

 

random만 이용하면 0~1 사이의 소수만 이용할 수 있어서 활용성이 조금 아쉽습니다.

하지만 randint를 이용하면 정수를 이용할 수 있습니다.

- 1~10까지의 난수를 발생시키고, 출력하시오. (단, 난수의 값이 7이면 종료)

while True:
    num = random.randint(1,10)
    print(num)
    if num == 7:
        print("종료")
        break

 

randint의 경우에는 range와 다르게 마지막 숫자도 포함합니다.

 

6. 예제 문제

◉ 1번 문제 

: score = [90, 56, 87, 25, 64]일 때, score 70점 이상이면 합격이 나오고

70점 이하면 불합격을 출력하시오.

 

◉ 2번 문제

: 구구단을 만드시오.

 

◉ 3번 문제

: test_list = [78, 89, 57, 81, 20, 75, 96, 90]일 때, 점수의 전체 합계 및 평균을 출력하시오.

 

◉ 4번 문제

: Up and Down 게임 만드시오. (아래의 규칙을 적용해야 함)

1. 컴퓨터가 난수를 하나 발생시킨다. (단 1~50 사이의 숫자)

2. 플레이어가 숫자를 입력하고, 컴퓨터가 발생시킨 숫자를 맞추면 게임을 종료한다.

3. 도전 횟수는 5번으로 제한하고, 매번 남은 기회를 출력해야한다.

ex) 발생한 난수: 45

숫자를 입력하세요.

숫자 입력 : 10 => UP!

남은 기회는 4번입니다.

숫자를 입력하세요.

숫자 입력 : 20 => UP!

남은 기회는 3번입니다.

숫자를 입력하세요.

숫자 입력 : 50 => DOWN~

남은 기회는 2번입니다.

숫자를 입력하세요.

남은 기회는 1번입니다.

숫자 입력 : 45 => 정답!! 게임 종료

 

남은 기회는 2번입니다.

 

◉ 1번 문제 정답

index = 0
for i in score:
    index = index + 1          # x += 1
    if i >= 70:
        print("%d번 학생 점수:%d (합격)" % (index,i))
    else:
        print("%d번 학생 점수:%d (불합격)" % (index,i))

 

◉ 2번 문제 정답

for i in range(2, 10): # 2단 ~ 9단
    for j in range(1, 10): # 증가값 1~9
        print("%d*%d=%d" % (i, j, i*j), end=" ")
    print()

(end를 넣을 필요 없음)

for i in range(1, 10): # 증가값 1~9 
    for j in range(2, 10): # 2단 ~ 9단
        print("%3d*%d=%3d" % (j, i, i*j), end=" ")
    print()

(정리 버전)

◉ 3번 문제 정답

test_list = [78, 89, 57, 81, 20, 75, 96, 90]

num = 0
sum = 0

while num < len(test_list):
    sum += test_list[num]
    num += 1

avg = sum / len(test_list)
print("합계:%d, 평균:%.2f" % (sum, avg))

◉ 4번 문제 정답

import random

# 난수 & 도전 횟수
num = random.randint(1,50)
point = 0

# 게임 시작
print("--------------------------------")
print("Up/Down 게임을 시작합니다~!")
msg = int(input("숫자를 입력하세요.(단 1~50 사이의 숫자)"))

# 게임 진행
while True:
    point = point + 1   # 도전 횟수
    chance = 5 - point   # 남은 도전 횟수
    if num == msg:
        print("숫자 입력 : %d => 정답입니다!! 게임 종료" % msg)   # 승리
        break
    elif num < msg:
        print("숫자 입력 : %d => DOWN~" % msg)   # DOWN
        print("남은 기회는 %d번 입니다." % chance)
    elif num > msg:
        print("숫자 입력 : %d => UP!" % msg)   # UP
        print("남은 기회는 %d번 입니다." % chance)
    if point == 5:
        print("도전 횟수를 전부 소진하였습니다. 게임 종료")   # 패배
        break
    msg = int(input("숫자를 입력하세요.(단 1~50 사이의 숫자)"))

 

7. 느낀점

: 오늘 배웠던 for문, while문이 반복한다는 점이 비슷하기에 어떤 상황에 이용하면 좋은지 헷갈리기도 했지만

계속 예제 문제들을 풀다 보니 어떤 상황에 for문과 while문 둘 중에 어떤 것을 써야 더 좋을지 판단을 자꾸 하게 되면서

for문과 while문의 차이점을 확실하게 알 수 있게 되었다.