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문의 차이점을 확실하게 알 수 있게 되었다.
'Python' 카테고리의 다른 글
Python 기초(File, Class) - AWS 풀스택 과정 (예습) 5일차 (0) | 2024.07.06 |
---|---|
Python 기초(Set, Function) - AWS 풀스택 과정 (예습) 4일차 (0) | 2024.07.04 |
Python 기초(List, Dictionary) - AWS 풀스택 과정 (예습) 3일차 (0) | 2024.07.04 |
Python 설정 및 기초(변수, 문자열, IF) - AWS 풀스택 과정 (예습) 1일차 (0) | 2024.07.02 |