본문 바로가기

파이썬기초/파이썬기본개념2

[점프투파이썬] 03장 프로그램의 구조를 쌓는다! 제어문 [#파이썬공부기록-요약정리]

03장 프로그램의 구조를 쌓는다! 제어문

__03-1 if 문

____if 문은 왜 필요할까?

#"돈이 있으면 택시를 타고, 돈이 없으면 걸어 간다."
>>> money = True
>>>if money:
...     print("택시를 타고 가라")
...else:
...     print("걸어 가라")
택시를 타고 가라

____if 문의 기본 구조 : 들여쓰기

if 조건문:
    수행할 문장1(명령문1)
    수행할 문장2
    ...
else:
    수행할 문장A
    수행할 문장B
    ...

 

____조건문이란 무엇인가? :: 참과 거짓을 판단하는 문장

>>>money = True #조건문 : money : 참과 거짓을 판단하는 문장
>>>if money:

# 비교 연산자 사용하기
x = 3  
y = 2  

# x > y
print(x > y)  # x가 y보다 크다면 True를 출력

# x < y
print(x < y)  # x가 y보다 작다면 True를 출력

# x == y
print(x == y)  # x와 y가 같다면 True를 출력

# x != y
print(x != y)  # x와 y가 다르다면 True를 출력

 

# 조건문 예제: 돈에 따라 택시를 타거나 걸어가기
money = 2000                  # 돈이 2000원인 상황

if money >= 3000:             # 만약 돈이 3000원 이상이면
    print("택시를 타고 가라")  # 택시를 타고 가라 출력
else:                         # 그렇지 않으면
    print("걸어가라")         # 걸어가라 출력
# 출력: 걸어가라

 

  • and, or, not
    연산자 설명
    x or y x와 y 둘중에 하나만 참이어도 참이다
    x and y x와 y 모두 참이어야 참이다
    not x x가 거짓이면 참이다
>>> money = 2000
>>> card = True
>>>if money >= 3000 or card:     #False or True
...     print("택시를 타고 가라")
...else:
...     print("걸어가라")
...

택시를 타고 가라

 

  • in, not in
    in not in
    x in 리스트 x not in 리스트
    x in 튜플 x not in 튜플
    x in 문자열 x not in 문자열
    >>> 1 in [1, 2, 3]
    True
    >>> 1 not in [1, 2, 3]
    False
    
    >>> 'a' in ('a', 'b', 'c')
    True
    >>> 'j' not in 'python'
    True
    
    >>> pocket = ['paper', 'cellphone', 'money']
    >>>if 'money' in pocket:         # 위 리스트 안에 'money'가 있으므로 참
    ...     print("택시를 타고 가라")
    ...else:
    ...     print("걸어가라")
    택시를 타고 가라
    
#**조건문에서 아무 일도 하지 않게 설정하고 싶다면? - pass**
>>> pocket = ['paper', 'money', 'cellphone']
>>> if 'money' in pocket:
...     pass
... else:
...     print("카드를 꺼내라")
#아무 결괏값도 보여 주지 않는다.

 

 

____다양한 조건을 판단하는 elif

if <조건문>:
    <수행할 문장1>
    <수행할 문장2>
    ...
elif <조건문>:
    <수행할 문장1>
    <수행할 문장2>
    ...
elif <조건문>:
    <수행할 문장1>
    <수행할 문장2>
    ...
...
else:
   <수행할 문장1>
   <수행할 문장2>
   ...

#비효율적
>>> pocket = ['paper', 'handphone']
>>> card = True
>>> if 'money' in pocket:
...     print("택시를 타고가라")
... else:
...     if card:
...         print("택시를 타고가라")
...     else:
...         print("걸어가라")
...
택시를 타고가라
#elif 사용
>>> pocket = ['paper', 'cellphone']
>>> card = True
>>> if 'money' in pocket:
...      print("택시를 타고가라")
... elif card: 
...      print("택시를 타고가라")
... else:
...      print("걸어가라")
...
택시를 타고가라

 

____조건부 표현식

변수 = 조건문이_참인_경우의_값 if 조건문 else 조건문이_거짓인_경우의_값

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

 

__03-2 while 문

___while 문의 기본 구조

while <조건문>:
    <수행할 문장1>
    <수행할 문장2>
    <수행할 문장3>
    ...
treeHit = 0                 # 나무를 찍은 횟수(를 나타내는 변수 초기화)

while treeHit < 5:          # 나무를 5번 미만으로 찍었을 때 반복
    treeHit = treeHit + 1   # 나무를 한 번 찍을 때마다 treeHit 값 1 증가
    print("나무를 %d번 찍었습니다." % treeHit)     # 나무를 찍은 횟수 출력
    if treeHit == 5:        # 나무를 5번 찍었을 때
        print("나무 넘어갑니다.")                  # 해당 메시지 출력

# 나무를 찍는 동안 treeHit이 5보다 작을 때까지 반복, 나무 넘어가는 메시지 출력 후 반복문 종료
...
나무를 1번 찍었습니다.
나무를 2번 찍었습니다.
나무를 3번 찍었습니다.
나무를 4번 찍었습니다.
나무를 5번 찍었습니다.
나무 넘어갑니다.
                     # 여러 선택지를 포함한 prompt 문자열을 생성
		
prompt = """   
1. Add
2. Del
3. List
4. Quit

Enter number: """  

number = 0           # 초기 number 변수를 0으로 설정

while number != 4:   # number가 4가 아닌 동안 반복
    print(prompt)    # prompt 문자열 출력
    number = int(input())  # 사용자로부터 숫자를 입력받아 number에 할당

# 사용자가 4를 입력하기 전까지 prompt를 반복해서 출력하며 사용자 입력을 받음
# 4가 입력되면 while문을 빠져나가게 됨

 

 

____while 문 강제로 빠져나가기 - break

#자판기로 break 예시
>>> coffee = 10
>>> money = 300

>>> while money:                                     #조건문인 money는 0이 아니기 때문에 항상 True
...     print("돈을 받았으니 커피를 줍니다.")
...     coffee = coffee -1                           #while문 내용 한 번 수행할 때마다 1개씩 줄어듦
...     print("남은 커피의 양은 %d개입니다." % coffee)
...     if coffee == 0:
...         print("커피가 다 떨어졌습니다. 판매를 중지합니다.")
...         **break**
...

 

#실제 자판기라면? 예시

coffee = 5  # 커피의 초기 재고를 5로 설정

while True:  # 무한 루프 시작
    money = int(input("돈을 넣어 주세요: "))  # 사용자로부터 돈을 입력받음
    
    # 입력받은 돈에 따라 커피를 판매하고 남은 재고를 출력

    if money == 300:
        print("커피를 줍니다.")
        coffee -= 1
    elif money > 300:
        print("거스름돈 %d를 주고 커피를 줍니다." % (money - 300))
        coffee -= 1
    else:
        print("돈을 다시 돌려주고 커피를 주지 않습니다.")
        print("남은 커피의 양은 %d개 입니다." % coffee)
    
    # 만약 커피가 다 떨어졌다면 판매 중지를 알리고 루프를 종료

    if coffee == 0:
        print("커피가 다 떨어졌습니다. 판매를 중지 합니다.")
        break

             돈을 넣어 주세요: 1 돈을 다시 돌려주고 커피를 주지 않습니다. 남은 커피의 양은 5개 입니다.

             돈을 넣어 주세요: 1000 거스름돈 700를 주고 커피를 줍니다.

             돈을 넣어 주세요: 2000 거스름돈 1700를 주고 커피를 줍니다.

             돈을 넣어 주세요: 3000 거스름돈 2700를 주고 커피를 줍니다.

             돈을 넣어 주세요: 4000 거스름돈 3700를 주고 커피를 줍니다.

             돈을 넣어 주세요: 5000 거스름돈 4700를 주고 커피를 줍니다.

             커피가 다 떨어졌습니다. 판매를 중지 합니다.

 

 

____while 문의 맨 처음으로 돌아가기 - continue

: while문을 빠져나가지 않고 while문의 맨 처음(조건문)으로 다시 돌아가게 만들고 싶은 경우, continue문 사용

#1부터 10까지의 숫자 중에서 홀수만 출력하는 것을 while문을 사용해서 작성

a = 0              # 변수 a를 0으로 초기화
while a < 10:      # a가 10보다 작은 동안 반복
    a = a + 1      # a를 1씩 증가시킴
    if a % 2 == 0: # 만약 a를 2로 나눈 나머지가 0이라면(즉, a가 짝수라면)
        continue   # continue문을 만나면 현재 반복을 중지하고 다음 반복으로 넘어갑니다.
    print(a)       # a를 출력합니다. (홀수인 경우에만 출력됩니다.)

1
3
5
7
9

 

____무한 루프

while True:
    수행할 문장1
    수행할 문장2
    ...

 

__03-3 for 문

 

____for 문의 기본 구조

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

 

____예제를 통해 for 문 이해하기

##1. 전형적인 for문

>>>test_list = ['one', 'two', 'three']
>>>for i in test_list:
...     print(i)
...
one
two
three
#2. 다양한 for문의 사용

>>>a = [(1,2), (3,4), (5,6)]
>>>for (first, last) in a:
...    print(first + last)
...
3
7
11
# marks1.py
marks = [90, 25, 67, 45, 80]  #학생들의 시험점수 리스트

number = 0                    #학생에게 붙여줄 번호
for mark in marks:            #90, 25, 67, 45, 80을 순서대로 marks에 대입
    number = number +1 
    if mark >= 60: 
        print("%d번 학생은 합격입니다." % number)
    else: 
        print("%d번 학생은 불합격입니다." % number)

 

 

____for 문과 continue 문

# marks2.py 
#60점 이상인 사람에게는 축하 메시지를 보내고 나머지 사람에게는 아무 메시지도 전하지 않음
marks = [90, 25, 67, 45, 80]

number = 0 
for mark in marks: 
    number = number +1 
    if mark < 60:
        continue       #아래에 있는 print문 실행 안 하고 처음으로 돌아감
    print("%d번 학생 축하합니다. 합격입니다. " % number)

 

 

____for 문과 함께 자주 사용하는 range 함수

>>> a = range(10)
>>> a
range(0, 10)

>>> a = range(1, 11)
>>> a
range(1, 11)
#for와 range 함수를 사용하면 1부터 10까지 더하는 것을 다음과 같이 쉽게 구현할 수 있다
>>>add = 0
>>>for i in range(1, 11):
...    add = add + i
...
>>>print(add)
55
#**for와 range를 이용한 구구단**
>>>for i in range(2,10):        # 1번 for문
...    for j in range(1, 10):   # 2번 for문
...        print(i*j, end=" ")
...    print('')                #i 2 뽑아오고 j 1~9까지 뽑아온 다음 print '' 그다음 i 3...
2 4 6 8 10 12 14 16 18
3 6 9 12 15 18 21 24 27
4 8 12 16 20 24 28 32 36
5 10 15 20 25 30 35 40 45
6 12 18 24 30 36 42 48 54
7 14 21 28 35 42 49 56 63
8 16 24 32 40 48 56 64 72
9 18 27 36 45 54 63 72 81

 

 

____리스트 컴프리헨션 사용하기

# 리스트 컴프리헨션: 리스트 안에 for문을 활용하여 리스트를 간결하게 생성하는 방법
a = [1, 2, 3, 4]  # 리스트 a를 정의합니다.
result = [num * 3 for num in a]  # 리스트 컴프리헨션을 사용하여 a의 각 항목에 3을 곱한 결과를 result 리스트에 담습니다.
print(result)  # 결과를 출력합니다.

# 조건을 추가하여 리스트 컴프리헨션을 사용할 수 있습니다.
result = [num * 3 for num in a if num % 2 == 0]  # 리스트 a의 짝수에만 3을 곱하여 result 리스트에 담습니다.
print(result)  # 결과를 출력합니다.

# 여러 개의 for문을 사용하여 리스트 컴프리헨션을 구성할 수 있습니다.
result = [x * y for x in range(2, 10) for y in range(1, 10)]  # 구구단을 리스트 컴프리헨션으로 구현합니다.
print(result)  # 결과를 출력합니다.