[Python] 조건문, 반복문

그냥·2022년 5월 6일
0

python

목록 보기
2/9

1. 조건문

1) if문의 구조

조건문을 테스트해서 참이면 if문 바로 다음 문장(if 블록)들을 수행하고, 조건문이 거짓이면 else문 다음 문장(else 블록)들을 수행하게 된다. 그러므로 else문은 if문 없이 독립적으로 사용할 수 없다.

if 조건문:
    수행할 문장1
    수행할 문장2
    ...
else:
    수행할 문장A
    수행할 문장B
    ...

2) 들여쓰기

if문을 만들 때는 if 조건문: 바로 아래 문장부터 if문에 속하는 모든 문장에 들여쓰기를 해주어야 한다.

if 조건문:
	수행 문장1
	수행 문장2
	수행 문장3

들여쓰기 너비는 같아야 한다.

if 조건문:
    수행할 문장1
    수행할 문장2
        수행할 문장3

-> 오류 발생

if 조건문:
    수행할 문장1
수행할 문장2
	  수행할 문장3

-> 오류 발생

3) 조건문이란?

if 조건문에서 “조건문"이란 참과 거짓을 판단하는 문장을 뜻한다.

money = True
if money:

# money는 True이기 때문에 조건이 참이 되어 if문 다음 문장을 수행하게 된다.
  • 비교연산자 조건문에서 사용되는 비교연산자는 여러가지가 있다.
    비교연산자설명
    x < yx가 y보다 작다
    x > yx가 y보다 크다
    x == yx와 y가 같다
    x ! = yx와 y가 같지 않다
    x > = yx는 y보다 크거나 같다
    x < = yx는 y보다 작거나 같다
    money = 2000
    if money >= 3000:
    	print("돈이 충분하다.")
    else:
    	print("돈이 부족하다.")
    
    돈이 부족하다
  • and, or, not 조건을 판단하기 위해서 사용하는 다른 연산자로 위 3개의 연산자가 있다.
    연산자설명
    x or yx와 y 중 하나만 참이어도 참이다
    x and yx와 y 모두 참이어야 참이다
    not xx가 거짓이면 참이다
    money = 2000
    card = True
    
    if money >= 3000 or card:
    	print("돈이 충분하다")
    else:
    	print("돈이 부족하다")
    
    돈이 충분하다
    첫 번째 조건인 money ≥ 3000에 대해서는 거짓이지만, card=True이므로 참이어서 “돈이 충분하다"가 출력된다.
  • x in s, x not in s
    innot in
    x in listx not in list
    x in tuplex not in tuple
    x in 문자열x not in 문자열
    1 in [1,2,3]
    True
    
    1 not in [1,2,3]
    False
# tuple
'a' in ('a', 'b', 'c')
True

# 문자열
'j' not in 'python'
True

만약 주머니에 돈이 있으면 택시를 타고 가고, 없으면 걸어가라

pocket = ['paper', 'cellphone', 'money']

if 'money' in pocket:
	print("택시를 타고 가라")
else:
	print("걸어가라")

택시를 타고 가라
  • 조건문에서 아무 일도 일어나지 않게 설정하고 싶을 경우 pass 구문을 사용하여 조건문에서 아무 일도 일어나지 않게 하고 지나갈 수 있다.

    주머니에 돈이 있으면 가만히 있고, 주머니에 돈이 없으면 카드를 꺼내라

    pocket = ['paper', 'cellphone', 'money']
    
    if 'money' in pocket:
    	pass
    else:
    	print("카드를 꺼내라")
    

4) Elif

elif는 if와 else만으로 만들 수 없는 다양한 조건문을 만들 수 있게 해준다.

"주머니에 돈이 있으면 택시를 타고, 주머니에 돈은 없지만 카드가 있으면 택시를 타고, 돈도 없고 카드도 없으면 걸어 가라.”

pocket = ['paper', 'headphone']
card = True

if 'money' in pocket:
	print("택시를 타고 가라")
elif card:
	print("택시를 타고 가라")
else: 
	print("걸어가라")

택시를 타고 가라
# elif 구문이 참이므로 "택시를 타고 가라"가 출력된다.
  • 기본 구조
    if <조건문>:
        <수행할 문장1> 
        <수행할 문장2>
        ...
    elif <조건문>:
        <수행할 문장1>
        <수행할 문장2>
        ...
    elif <조건문>:
        <수행할 문장1>
        <수행할 문장2>
        ...
    ...
    else:
       <수행할 문장1>
       <수행할 문장
💡 [한 줄로 if 문 작성하기]
# if, else, elif문 다음 수행할 문장을 콜론(:) 뒤에 바로 적는다.

pocket = ['paper', 'money', 'cellphone']
if 'money' in pocket: pass
else print("카드를  꺼내라")

5) 조건부 표현식

  • 형식

    조건문이 참인 경우  if 조건문 else 조건문이 거짓인 경우

if score >= 60:
	message = "success"
else:
	message = "failure"

위 코드를 조건부 표현식을 사용하면 아래와 같이 간단히 표현할 수 있다.

message = "success" if score >=60 else "failure"

2. 반복문

1) While문

While문의 구조

반복해서 문장을 수행해야 할 경우 while문을 사용한다. 그래서 while 반복문이라고도 한다.

while <조건문>:
    <수행할 문장1>
    <수행할 문장2>
    <수행할 문장3>
    ...
  • while문은 조건문이 참인 동안에 while문 아래의 문장이 반복해서 수행된다.
treehit = 0
while treehit < 10:
	treehit = treehit + 1
	print("나무를 %d번 찍었습니다." %treehit)
	if treehit == 10:
		print("나무 넘어갑니다.")

나무를 1번 찍었습니다.
나무를 2번 찍었습니다.
나무를 3번 찍었습니다.
나무를 4번 찍었습니다.
나무를 5번 찍었습니다.
나무를 6번 찍었습니다.
나무를 7번 찍었습니다.
나무를 8번 찍었습니다.
나무를 9번 찍었습니다.
나무를 10번 찍었습니다.
나무 넘어갑니다.

while 문 내 조건문 treehit < 10 이 있다. treehit가 9까지는 계속해서 treehit+1이 되며, “나무를 n번 찍었습니다.”가 출력된다. 또한 if 문 내 treehit == 10 조건문에 대해서는 거짓이므로 그냥 넘어가게 된다.
treehit가 10이 되었을 때 while 내 조건문에 대해서 거짓이 되므로 그냥 넘어가고 if문에 대해서는 참이 되므로 “나무 넘어갑니다.”가 출력되며 반복문이 끝나게 된다.

while문 만들기

여러 가지 선택지 중 하나를 선택해서 입력받는 경우에 대해서 생각해보기

prompt = """
 1. Add
 2. Del
 3. List
 4. Quit

 Enter number: """

number = 0

while number != 4:
     print(prompt)
     number = int(input())

1. Add
2. Del
3. List
4. Quit

Enter number:

while문 실행되면 input() 함수 때문에 사용자가 number 값을 직접 넣게 된다. 이때 4가 아닌 값을 넣으면 계속해서 prompt가 출력되며, 4를 넣게되면 while문이 종료된다.

while문 강제로 빠져나오기

coffee = 10
money = 300

while money:
	print("돈을 받았으니 커피를 줍니다.")
	coffee = coffee - 1
	print("남은 커피의 양은 %d개입니다.", %coffee)
	if coffee == 0:
		print("커피가 다 떨어졌습니다.")
		break

while 내 조건문은 False 혹은 0이 아닐 경우 모두 참으로 반복문이 계속해서 실행된다. money는 0이 아니므로 while문은 무한루프를 돌게 된다. 그런데 while문이 돌면서 coffee가 0이 될 경우 if 문이 참이 되면서 break문이 호출되어 while문을 빠져나갈 수 있게 된다.

while문의 맨 처음으로 돌아가기

a = 0
while a < 10:
	a = a + 1
	if a % 2 == 0: continue
	print(a)
	
1
3
5
7
9

if 문 내 a % 2 == 0 은 a를 2로 나눈 나머지가 0인 수, 즉 짝수일 경우 continue문이 호출되는 것이다. 그러면 print(a)로 가기 전에 while문의 맨 처음으로 돌아가게 된다.


2) for문

for문 구조

for 변수 in 리스트(혹은 튜플, 문자열):
	수행 문장1
	수행 문장2
	...

여러가지의 for문

  • 기본 형태
    test_list = ['one', 'two', 'three']
    for i in test_list:
    	print(i)
    
    one
    two
    three
  • 다른 형태
    a = [(1,2), (3,4), (5,6)]
    for (first, last) in a:
    	print(first+last)
    
    3
    7
    11
  • for문의 응용

    "총 5명의 학생이 시험을 보았는데 시험 점수가 60점이 넘으면 합격이고. 그렇지 않으면 불합격이다. 합격인지 불합격인지 결과를 보여 주시오.”

marks = [90, 25, 84, 22, 70]

number = 0

for mark in marks:
	number = number + 1
	if marks >= 60: 
		print("%d번 학생은 합격입니다." %number)
	else:
		print("%d번 학생은 불합격입니다." %number)
	

1번 학생은 합격입니다.
2번 학생은 불합격입니다.
3번 학생은 합격입니다.
4번 학생은 불합격입니다.
5번 학생은 합격입니다.

for문과 continue

marks = [90, 25, 67, 45, 80]

number = 0 
for mark in marks:
	number = number + 1
	if mark < 60:
		continue
print("%d번 학생 축하합니다. 합격입니다." %number)

1번 학생 축하합니다. 합격입니다.
3번 학생 축하합니다. 합격입니다.
5번 학생 축하합니다. 합격입니다.

60점 미만의 학생들은 출력되지 않고 60점 이상의 학생들만 출력된다.

for문과 range 함수

range(a, b)는 a부터 b-1까지의 숫자를 데이터로 갖는 객체이다.
range(a)는 0부터 a-1까지의 숫자를 데이터로 갖는다.

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

print(add)
55
marks = [90, 25, 86, 45, 70]
for number in range(len(marks)):
	if marks[number] < 60:
		continue
	print("%d번 학생 합격입니다." %(number+1))

len()함수는 리스트 안의 요소의 갯수를 돌려주는 함수이다. marks 요소의 갯수는 5이므로 range(len(marks))는 range(5)이고 0~4까지의 숫자를 객체로 갖는다.

중첩 for 문

for문 내에 for문을 대입하여 아래와 같은 코드를 만들 수도 있다.

for i in range(2,10):
	for j in range(1,10):
		print(i*j, end= " ") # 매개변수 end를 넣어 준 이유는 해당 결괏값을 출력할 때 다음줄로 넘기지 않고 그 줄에 계속해서 출력하기 위해서이다.
	print('') # 안쪽 for문이 끝날 때마다 줄바꿈이 됨

리스트 내포

리스트 내포란 리스트 안에 for문을 포함하는 것이다.

a = [1,2,3,4]
result = []
for num in a:
	result.append(num*3)

print(result)
[3,6,9,12]

위 코드를 리스트 내포를 사용하면 더 간단하게 코드를 짤 수 있다.

a = [1,2,3,4]
result = [num*3 for num in a]

for문과 if문을 같이 사용할 수도 있다.

a = [1,2,3,4]
result = [num*3 for num in a if num % 2 == 0]

[출처: https://wikidocs.net/19]

0개의 댓글