Python 05, 06. 단순 반복문, 다중 반복문

김지민·2024년 7월 26일

for

  • 증가 시
    - i = a부터 b - 1까지
  • 감소 시
    - i = a부터 b+1까지
  • b에 등호가 들어가지 않음
  • for문 뒤에는 꼭 :
  • indentation으로 분리
for i in range(4): # i = 0 ~ 3

for i in range(a, b):
    코드 작성
    이 위치에 i값이 a부터 b - 1까지 1씩 증가하며 들어옴
    
for i in range(5, 11, 2): print(i) #2씩 증가 5,7,9

`range(a, b, -1)`는 a부터 b + 1까지 1씩 감소

for _ in range(5): #변수가 별로 중요하지 않은 경우
	print(1, end="") 
  • 도전 문제
    - n을 입력받아, 1부터 n까지 공백을 두고 출력하는 프로그램을 작성해보세요.
# 변수 선언, 입력
n = int(input())

# 출력
for i in range(1, n + 1):
	print(i, end=" ") #이렇게 하면 \n 자동 실행되지 않아. 

while문

i = 5           <- 시작 값

while i <= 10:  <- 계속 반복할 조건
    print(i)    <- 원하는 코드 작성
    i += 1      <- 원하는 증감값 설정

print("Done")

while True: #계속 반복

continue문

  • for, while 안에서만 사용이 가능
  • 조건이 만족하는 경우에는 아래 코드를 더 이상 실행하지 않고 다시 위로 올라가 그 다음 for loop을 실행
  • 조건문과 같이 쓰여야 함
for i in range(5, 11):
    코드1
    if i % 2 == 0:
        코드2
        continue
    코드3
#이 경우 i = 짝수라면, 코드3이 실행되지 않고 바로 다시 for문
  • 도전문제
    - 조건에 부합하는 수
    정수 a 를 입력받아 1부터 a까지의 수 중 다음 조건을 모두 만족하지 않는 수들을 모두 출력하는 프로그램을 작성해보세요.
    - 짝수이면서 4의 배수가 아닌 수
    - 8로 나눈 몫이 짝수인 수
    - 7로 나눈 나머지가 4보다 작은 수
    입력 형식: 첫 번째 줄에 정수 a가 공백을 두고 주어집니다 1 ≤ a ≤ 100
    출력 형식: 첫 번째 줄에 1부터 a까지의 수 중 문제의 조건을 모두 만족하지 않는 수들을 공백을 사이에 두고 오름차순으로 출력합니다.
# 변수 선언, 입력
a = int(input())

# 조건을 모두 만족하지 않는 수들만 출력합니다.
for i in range(1, a + 1):
    if(i % 2 == 0 and i % 4 != 0) or (i // 8) % 2 == 0 or (i % 7) < 4:
        continue
    print(i, end=" ")

break문

  • for, while 안에서만 사용
  • 가장 가까이에 있는 for loop을 완전히 탈출
  • 조건문과 같이 쓰여야 함
    다음 코드에서는 i가 6, 7, 8, 9인 경우에는 순서대로 코드1 -> 코드3이 계속 수행되다가, i가 10이 되는 순간에 코드1 -> 코드2가 수행되며 for loop을 탈출하여 바로 코드4가 수행
for i in range(6, 101):
    코드1
    if i % 5 == 0:
        코드2
        break
    코드3

코드4

while True:
    n = int(input())
    if n >= 10:
        코드1
        break
    코드2

코드3

모양의 규칙부터 찾아야 돼!!!

  • 행이 1 증가함에 따라 변화하는 별의 개수에 집중

3 * 5 크기의 격자 = 3개의 행과 5개의 열 = 가로 5, 세로 3

for _ in range(3):
    for _ in range(5):
        print(1, end="")
    print()
  • 직각 삼각형
    - 규칙: 행이 1씩 증가함에 따라 열도 1씩 증가함
for i in range(4):         -> i는 0부터 3까지 돌면 됩니다.
    for j in range(i + 1): -> j는 0부터 i 까지 돌면 됩니다. 
        print("*", end="")
    print()
  • 행에 대하여 대칭인 경우
***
**
*
**
***
#감소하는 경우
for i in range(3): #i=0,1,2
    for j in range(3 - i): #j=3,2,1
        print("*", end="")
    print()
for i in range(1, -1, -1): #i=1,0
    for j in range(3 - i): #j=2,3
        print("*", end="")
    print()

#증가하는 경우
*
* *
*

# 변수 선언 및 입력
n = int(input())

# 길이가 n인 직각삼각형을 출력합니다.
for i in range(n):
	for j in range(i+1):
		print("*", end=" ")
	print()

# 길이가 n-1인 직각삼각형을 뒤집어 출력합니다.
for i in range(n-2, -1, -1):
	for _ in range(i+1):
		print("*", end=" ")
	print()
  • 열에 대해 대칭인 경우 - 앞에 공백이 붙는 경우
    - 행에 따른 공백의 개수를 변화를 파악 후, 별 출력 전에 공백 출력
    - 공백의 개수 = 격자의 개수 -별의 개수
    - 뒤에 있는 공백은 출력 X
  • 실력체크: 가로 세로 2n-1 크기에 해당하는 격자에 체크 다이아몬드 모양을 그리는 코드를 작성해보세요.
    규칙은 다음과 같습니다.
  • n = 3 일 때
  *
 * *
* * *
 * *
  *
# 변수 선언 및 입력
n = int(input())

# 모양에 맞게 위쪽 별을 출력합니다.
for i in range(n):
	for _ in range(n - i - 1):
		print(" ", end="")
	for _ in range(i + 1):
		print("* ", end="")
	print()

# 모양에 맞게 아래쪽 별을 출력합니다.
for i in range(n-2, -1, -1):
	for _ in range(n - i - 1):
		print(" ", end="")
	for _ in range(i + 1):
		print("* ", end="")
	print()
  • 행에 따라 모양이 다른 경우
    - if 문을 통해서 짝수, 홀수일 때마다 다르게 출력

아스키 코드 (ASCII)

  • ord(): 특정 문자의 아스키 코드 값
>> print(ord('A')) #따옴표 넣어줘야 돼

65
  •  chr() 함수
>> print(chr(65))

'A'
  • 알파벳 x 다음 알파벳을 구하는 것:  chr(ord(x) + 1)

  • n번 반복
    - 실력체크 : n번에 걸쳐 두 정수 a, b가 주어졌을 때, a부터 b까지의 짝수를 모두 합한 결과를 출력하는 프로그램을 작성해보세요.
    - 입력 형식
    첫 번째 줄에 테스트케이스의 수 n이 주어집니다.
    두 번째 줄 부터 n개의 줄에 걸쳐 한 줄에 두 정수 a, b가 공백을 두고 주어집니다.
    - 1 ≤ n ≤ 10
    - 1 ≤ a ≤ b ≤ 100
    - 출력 형식
    첫 번째 줄부터 n개의 줄에 걸쳐, 각 줄에 각 테스트 케이스마다 a이상 b이하의 짝수들의 합을 출력합니다.

# 변수 선언 및 입력
n = int(input())

#n회 반복합니다.
for i in range(n):
	# 변수 선언, 입력
	inp = input()
	arr = inp.split()
	a, b = int(arr[0]), int(arr[1])

	ans = 0
	
	# a부터 b까지 짝수를 전부 더한 값을 출력합니다.
	for j in range(a, b + 1): #for문 하나만 써서 if 절로 나누면 됨
		if j % 2 == 0:
			ans += j
	
	print(ans)
profile
열혈개발자~!!

0개의 댓글