본문 바로가기
SeSAC/파이썬 프로그래밍

[SeSAC 성동캠퍼스 1기] 파이썬 프로그래밍 2일차

by zivvon 2023. 11. 1.
목차 접기

Ch5. 조건문

[기본 제어구조]

- 순차 구조

- 선택 구조

- 반복 구조

 

[ if문 ]

- 만약에 ~라면

- 참일 때는 무엇을 실행하고, 거짓일 때는 아무것도 하지 않는 가장 단순한 형태의 조건문

 

'사용형식'

'if 조건식' 에서 조건식이 참이라면 실행할 문자이 실행되고, 거짓이라면 아무것도 실행하지 않고 프로그램 종료
# if문 예제
num = 99
if num < 100:
    print("100보다 작음")

 

[ if~else문 ]

- 거짓일 때 실행해야 할 문장이 따로 있을 때 사용

- 조건식이 참이라면 문장 1을 실행하고, 그렇지 않으면 문장 2 실행

 

'사용형식'

# if~else문 예제
num = 200
if num < 100:
    print("100보다 작음")
else:
    print("100보다 큼")

 

ex) 숫자가 짝수인지 홀수인지 알아내는 프로그램

# if~else문 예제
## 짝수, 홀수 구분 프로그램

num = int(input("숫자 입력 : "))

if num % 2 == 0:
    print("짝수")
else:
    print("홀수")

 

[ 중첩 if문 ]

- 조건을 검사하는 과정이 2번 이상인 경우

ex) 서울 사는 학생 중 25세 이상인 학생이 몇 명인지 구할 경우

1. 우선 학생의 주소가 서울인지 아닌지 확인
2. 주소가 서울인 학생 중 25세 이상 여부 구별

- if문 안에 또 다른 if문이 있는 형태

⚠️ 조건식이 여러 개 겹쳐지면 헷갈릴 수 있음!

 

[ elif문 ]

- if~else문 안에 다시 if~else문 사용하면 복잡해보이기 때문에 중첩 if문 사용할 때는 중간의 if~else문을 elif문으로 줄여서 사용 가능

- if~elif~else문 사용하면 더 짧고 깔끔하게 표현 가능

# 중첩 if문
## if~elif~else문
score = int(input("점수 입력 : "))

if score >= 90:
    print("A")
elif score >= 80:
    print("B")
elif score >= 70:
    print("C")
elif score >= 60:
    print("D")
else:
    print("F")

 

✏️ 하나 더 알기!

[ 랜덤한 값 추출 ]

: 랜덤(random)한 값이란 알 수 없는 임의의 숫자

 

ex) 로또 추첨하기

로또는 1~45까지의 숫자를 뽑는 복권 게임. 미리 어떤 숫자가 뽑힐지 프로그래밍해 놓는다면, 프로그램을 만든 사람이 항상 1등에 당첨될 것. 그래서 로또 뽑을 때마다 반드시 임의의 숫자가 나와야만 함. 파이썬에서는 랜덤한 값을 뽑기 위해 다음 코드가 필요!
import random
# 1~45까지의 랜덤한 숫자 추출 가능
random.randint(1, 45)

 

ex) 가위바위보 게임하기

import random

userInput = input("나의 가위/바위/보 ==> ")
comOutput = random.choice(["가위", "바위", "보"])
print("컴퓨터의 가위/바위/보 ==>", comOutput)

if userInput=="가위":
    if comOutput=="가위":
        print("비겼습니다!")
    elif comOutput=="바위":
        print("졌습니다...")
    else:
        print("이겼습니다! :)")
elif userInput=="바위":
    if comOutput=="가위":
        print("이겼습니다! :)")
    elif comOutput=="바위":
        print("비겼습니다!")
    else:
        print("졌습니다...")
else:
    if comOutput=="가위":
        print("졌습니다...")
    elif comOutput=="바위":
        print("이겼습니다! :)")
    else:
        print("비겼습니다!")

 

- 파이썬 랜덤함수란?

: 파이썬의 'random' 모듈은 다양한 분포에 대한 의사 난수 생성기 구현

import random

 

~> 관련 함수 (주요 메소드만 정리) ⭐

- 정수 함수
1. random.randint(a, b) : a부터 b 이하의 정수 반환 ⭐

- 시퀀스 함수
1. random.choice(*seq) : 해당 리스트 등의 시퀀스 자료형 중에서 랜덤으로 하나의 값 반환
*seq = 시퀀스 자료형! (문자열, 바이트 시퀀스, 바이트 배열, 리스트, 튜플, range 객체)

⚠️ random.choices() 메소드랑 다른 점?
A) 지정 시퀀스 중 가중치를 반영해 랜덤 요소를 반환

2. random.sample(seq, n)
: 해당 시퀀스 자료형 중에서 n의 개수만큼 랜덤으로 값을 뽑아 반환, 이 때 뽑힌 값은 중복되지 않음!


- 실수 분포
1. random.random() : 0~1 사이의 실수(float)형의 수를 반환
2. random.uniform(a, b) : a~b 사이의 임의의 실수를 반환

Ch6. 반복문

[ 반복문이 필요한 이유 ]

- 반복문 : 특정 부분을 원하는 횟수만큼 반복하는 구문

 

Q. 반복문을 왜 사용하나요?

A) 수백 줄의 코드를 단 몇 줄로 줄이는 효율 발휘

 

[ for문 ]

'사용형식'

for 변수 in range(시작값, 끝값+1, 증가값):
    반복할 문장

- range(시작값, 끝값+1, 증가값) : 지정된 범위의 값 반환

ex) range(0, 3, 1) : 0에서 시작해서 2(끝값-1)까지 1씩 증가하는 값들을 반환함

~> 증가값 생략할 경우 1로 인식, 따라서 range(0, 3, 1)은 range(0, 3)과 같음

~> 시작값이 0이기 때문에 시작값도 생략 가능, range(3)만 써도 range(0, 3, 1)과 동일하게 인식

 

ex) for i in [0, 1, 2]

~> i에 0, 1, 2를 차례로 대입하면서 3회 반복

~> ⚠️ 여기서 [0, 1, 2]는 리스트

 

ex) 5 팩토리얼 계산

count = 1

for i in range(1, 6):
    count *= i

print(count)

 

[ for문 활용 ]

- 반복적인 덧셈

ex) 1에서 10까지의 합

# for문을 활용한 반복적인 덧셈 예제
sum = 0

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

print("1부터 10까지의 합 :", sum)

 

[ 중첩 for문 ]

- for문 안에 또 for문 사용 가능한데 이를 '중첩 for문', '중복 for'문'이라고 함

- 중첩 for문의 실행 횟수 : (바깥 for문 반복 횟수)  x (안쪽 for문 반복 횟수)

 

- 중첩 for문의 처리되는 순서

ex) 

for i in range(3):
    for j in range(2):
    	print("중첩 for문")
1. 외부 for문 1회 : i에 0 대입
- 내부 for문 1회 : k에 0 대입한 후 print() 수행
- 내부 for문 2회 : k에 1 대입한 후 print() 수행
2. 외부 for문 2회 : i에 1 대입
- 내부 for문 1회 : k에 0 대입한 후 print() 수행
- 내부 for문 2회 : k에 1 대입한 후 print() 수행
3. 외부 for문 3회 : i에 2 대입
- 내부 for문 1회 : k에 0 대입한 후 print() 수행
- 내부 for문 2회 : k에 1 대입한 후 print() 수행

 

ex) 구구단 프로그램

# 구구단
for i in range(1, 10):
    print(str(i) + "단")
    for j in range(1, 10):
        print(i, "*", j, "=", i*j)
    print("")
# 3단 가로 구구단
for i in range(1, 10, 3):
    for j in range(1, 10):
        for k in range(3):
            print(i+k, "x", j, "=", (i+k)*j, end='\t')
        print('')
    print('')

 

[ while문 ]

❓for문 vs while문

     for문           while문     
반복할 횟수를 range()에서 결정한 후, 그 횟수만큼 반복 반복 횟수를 결정하기 보다는 조건식이 참인 경우에 반복
ex) "파이썬"을 3번 반복하기
for i in range(0, 3):
print(파이썬)
ex) "파이썬"을 3번 반복하기
i = 0
while(i < 3):
print("파이썬")
i += 1

 

- while문의 무한 루프(무한 반복)

~> 반복문을 빠져나올 조건이 없어 무한히 while문 내부 반복

~> 'while 조건식'의 조건식을 True로 지정하면 무한 루프로 지정됨

# 무한반복 예제
while True:
    print("ㅎ", end='')

 

[ break문과 continue문 ]

- break문 : 반복문(for, while문) 안에서 break문을 만나면 무조건 반복문 빠져나옴

- continue문 : continue문은 남은 부분을 모두 건너뛰고, 반복문의 처음으로 돌아감

 

ex) 주사위 3개 동시에 던져 동일한 숫자 나오기

# 주사위 3개를 동시에 던져 동일한 숫자 나오기
import random

cnt = 0
dice1, dice2, dice3 = 0, 0, 0

while True:
    cnt += 1
  
    dice1 = random.randint(1, 6)
    dice2 = random.randint(1, 6)
    dice3 = random.randint(1, 6)

    if dice1 == dice2 == dice3:
        break

print(cnt)

 

💁‍♀️ Mission!

# 미션
# 가위바위보 게임
import random

cnt = 0 # 이길 수 있는 경우의 수
loseCnt = 3 # 질 수 있는 수

while True:
    userInput = input("가위바위보 중 하나를 내세요 ==> ")
    comOutput = random.randint(1, 3) # 1가위, 2바위, 3보

    if userInput == "가위":
        if comOutput == 1:
            print("비겼습니다.")
        elif comOutput == 2:
            print("이겼습니다!!!")
            cnt += 1
        else:
            print("졌습니다...")
            loseCnt -= 1
    elif userInput == "바위":
        if comOutput == 1:
          print("졌습니다...")
          loseCnt -= 1
        elif comOutput == 2:
          print("비겼습니다")
        else:
          print("이겼습니다!!!")
          cnt += 1
    else:
        if comOutput == 1:
          print("이겼습니다!!!")
          cnt += 1
        elif comOutput == 2:
          print("졌습니다...")
          loseCnt -= 1
        else:
          print("비겼습니다")

    if loseCnt == 0:
        break

print(cnt)

 

ex)  컴퓨터와 인간의 숫자 맞히기 대결

# 컴퓨터와 인간의 숫자 맞히기 대결
import random

cnt = 10
i = 0

while cnt > 0:  
    cnt -= 1
    i += 1
    
    print("게임", i, "회 : 컴퓨터가 생각한 숫자는 ? ", end='')
    userNum = int(input())

    comNum = random.randint(1, 5)

    if comNum == userNum:
        print("맞혔네요! 축하합니다!")
        break
    else:
        print("아까워요..", comNum, "였는데요. 다시 해보세요!")
        continue

print("게임을 마칩니다.")

마치며

오늘의 새싹 성동 1기 후기 : 코딩테스트를 준비하면서 잠깐 공부했던 파이썬을 다시 공부해보니 생각보다 많은 부분을 까먹고 있었다는 사실을 깨달았다. 역시 개발은 계속 공부해야 하는 분야임을 또 느낀다 제에발 꾸준히 공부해보자 파이팅 :)