for와 range 사용하기
반복문의 변수 i
▶ 변수 i를 루프 인덱스라고도 부르며 index의 첫머리글자를 따서 i를 주로 사용합니다
for i in range(1,101):
print('Hello, world!', i)
for와 range 응용하기
-1
입력 필수 for i in range(0,21, 2): # 증가폭 사용하기
print('Hello, world!', i)
for i in range(20,-1, -2): # 증가폭으로 숫자 감소시키기
print('Hello, world!', i)
for i in reversed(range(0,21, 2)): # reversed()로 숫자 감소시키기
print('Hello, world!', i)
list
, tuple
, dict
, str
...while 반복문 기본 형태
초기식
while 조건식:
반복할 코드
변화식
while 반복문 사용하기
초깃값을 감소시키기
입력한 횟수대로 반복하기
i = 20
while i > 0:
print( i, 'Hello, world!')
i -= 1
count = int(input())
i = 0
while i < count:
print(i, 'Hello, world!')
i += 1
반복 횟수가 정해지지 않은 경우
랜덤(random) 모듈
random.random()
: 0 이상 1 미만의 숫자 중에서 아무 숫자나 하나를 뽑아 return
random.randrange(a, b)
: a 이상 b 미만의 정수 중에서 하나를 뽑아 return
random.randint(a, b)
: a 이상 b 이하의 정수 중에서 하나를 뽑아 return
random.shuffle(list 객체)
: list 객체 내부 요소의 순서를 섞음. 원본을 변경
random.choice(sequence 객체)
: 내부 요소 중 하나를 무작위로 뽑음.
while 반복문으로 무한 루프 만들기
while True:
print('Hello, world')
break
로 반복문 끝내기
break
는 for
와 while
문법에서 제어흐름(반복)을 벗어나기 위해 사용continue
는 제어흐름(반복)을 유지한 상태에서 코드의 실행만 건너뜀 i = 0
while True:
print(i)
i += 1
if i == 100:
break
for i in range(200):
print(i)
if i == 100:
break
continue
로 코드 실행 건너뛰기
continue
를 실행하면 continue 아래의 코드는 실행하지 않고 건너뛴 다음 반복을 시작 for i in range(100):
if i % 2 == 0:
continue # 아래 코드를 실행하지 않고 건너뜀
print(i)
연습문제
표준 입력으로 정수 두 개가 입력됩니다(첫 번째 입력 값의 범위는 1~200, 두 번째 입력 값의 범위는 10~200이며 첫 번째 입력 값은 두 번째 입력 값보다 항상 작습니다). 다음 소스 코드를 완성하여 첫 번째 정수와 두 번째 정수 사이의 숫자 중 3으로 끝나지 않는 숫자가 출력되게 만드세요. 정답에 코드를 작성할 때는 while True:에 맞춰서 들여쓰기를 해주세요.
start, stop = map(int, input().split())
i = start
while True:
if (i-3) % 10 == 0:
i += 1
continue
if i > stop:
break
print(i, end=' ')
i += 1
print()
: 다음 줄로 개행 for i in range(5):
for j in range(5):
if j <= i:
print('*', end='')
print()
for i in range(1, 6):
for j in range(1, 6):
if j <= i:
if i == j:
print('*', end='')
print(' ', end='')
print()
for i in range(5):
for j in range(5):
if i == j:
print('*', end='')
print(' ', end='')
print()
산 모양으로 별 출력하기
for i in range(count)
: x축 좌표for i in reversed(range(count))
: y축 좌표j <= i
, j < i
, j >= i
, j > i
count = int(input())
for i in range(count):
for j in reversed(range(count)):
if j <= i:
print('*', end='')
else:
print(' ', end='')
for j in range(count):
if j < i:
print('*', end='')
else:
print(' ', end='')
print()
# 다른 풀이
count = int(input())
for i in range(count):
for j in range(2*count-1):
if j in range(count-1-i, count+i):
print('*', end='')
else:
print(' ', end='')
print()
FizzBuzz란?
매우 간단한 프로그래밍 문제이며 규칙은 다음과 같다
1) 1에서 100까지 출력
2) 3의 배수는 Fizz 출력
3) 5의 배수는 Buzz 출력
4) 3과 5의 공배수는 FizzBuzz 출력
FizzBuzz 문제의 의도: 문제의 요구사항을 정확히 파악하여 구현했는지를 평가하는 것
FizzBuzz 기초 실력을 가늠하는 문제이기 때문에 프로그래밍 면접에 자주 등장한다.
for i in range(1, 101):
print(i)
for i in range(1, 101):
if i % 3 == 0:
print('Fizz')
elif i % 5 == 0: # 문제점: 3과 5의 공통된 배수(공배수)가 모두 'Fizz'로 출력됨
print('Buzz')
else:
print(i)
for i in range(1, 101):
if i % 3 == 0 and i % 5 == 0:
print('FizzBuzz')
elif i % 3 == 0:
print('Fizz')
elif i % 5 == 0:
print('Buzz')
else:
print(i)
x = 15
for i in range(1, x+1):
if x % i == 0:
print(i)
논리 연산자를 사용하지 않고 3과 5의 공배수 처리하기
논리 연산자를 사용하는 대신 3과 5의 최소공배수 15의 배수에 대한 흐름을 제어
하지만 실무에서는
i % 3 == 0 and i % 5 == 0
처럼 의미를 명확하게 드러내는 것이 좋다.
코드 단축하기
문자열의 곱셈과 덧셈 복습
>>>
'Fizz' + 'Buzz'
'FizzBuzz'
>>>
'Fizz' * 'True'
'FizzBuzz'
>>>
'Fizz' * 'False'
''
문자열에 True를 곱하면 문자열이 그대로 나오고, False를 곱하면 문자열이 출력되지 않습니다(True는 1, False는 0으로 연산).
논리 연산자 복습
>>>
print(True and Fasle)
False
>>>
print(True or Fasle)
True
>>>
print('' or 6)
6
>>>
print(1 or 6)
1
>>>
print(23 and 'abc')
abc
코드 단축하여 표현하기
for i in range(1, 101):
print('Fizz'*(i % 3 == 0) + 'Buzz'*(i % 5 == 0) or i)
# 문자열의 '덧셈'과 '곱셈'을 이용하여 print() 내부에서 처리