안넝하세오. 서루태에오.
오늘도 힘내서 공부 하자구요!

재귀함수
함수 안에 자신을 호출(재귀)하는 함수
이해를 돕기 위해 예시를 들어볼게요
def factorial(x):
if x > 1:
return x * factorial(x - 1)
else:
return x
factorial(4)
=> 24
x를 4라고 하면 우리가 4*3*2*1을 해야 팩토리얼 계산이 되겠죠
factorial(4) = 4 * factorial(3) 으로 해주는거에요
그럼 factorial(3)은 3*factorial(2)가 되고
factorial(2)는 2 * factorial(1) ...
한마디로
4 * (3 * (2 * ( 1 ) ) )
의 과정을 함수로 나타낸거에요
(피보나치 설명)
Python 내장함수
abs
## abs(x)는 어떤 숫자를 입력받았을 때 그 숫자의 절댓값을 리턴하는 함수이다.
all
# # all(x)는 반복 가능한 데이터 x를 입력값으로 받으며 이 x의 요소가 모두 참이면 True, 거짓이 하나라도 있으면 False를 리턴한다.
# # 반복 가능한 데이터란 for 문에서 사용할 수 있는 자료형을 의미한다. 리스트, 튜플, 문자열, 딕셔너리, 집합 등이 있다.
any
## any(x)는 반복 가능한 데이터 x를 입력으로 받아 x의 요소 중 하나라도 참이 있으면 True를 리턴하고 x가 모두 거짓일 때만 False를 리턴한다.
chr
## chr(i)는 유니코드 숫자 값을 입력받아 그 코드에 해당하는 문자를 리턴하는 함수이다.
dir
## dir은 객체가 지닌 변수나 함수를 보여 주는 함수이다.
divmod
## divmod(a, b)는 2개의 숫자 a, b를 입력으로 받는다. 그리고 a를 b로 나눈 몫과 나머지를 튜플로 리턴한다.
enumerate
## enumerate는 ‘열거하다’라는 뜻이다. 이 함수는 순서가 있는 데이터(리스트, 튜플, 문자열)를 입력으로 받아 인덱스 값을 포함하는 enumerate 객체를 리턴한다.
for i, name in enumerate(['body', 'foo', 'bar']):
print(i, name)
eval
## eval(expression)은 문자열로 구성된 표현식을 입력으로 받아 해당 문자열을 실행한 결괏값을 리턴하는 함수이다.
# eval('1+2')
filter
## filter란 ‘무엇인가를 걸러 낸다’라는 뜻으로, filter 함수도 이와 비슷한 기능을 한다.
## filter(함수, 반복_가능한_데이터)
id
## id(object)는 객체를 입력받아 객체의 고유 주솟값(레퍼런스)을 리턴하는 함수이다.
input
## input([prompt])는 사용자 입력을 받는 함수이다. 입력 인수로 문자열을 전달하면 그 문자열은 프롬프트가 된다.
len
## len(s)는 입력값 s의 길이(요소의 전체 개수)를 리턴하는 함수이다.
max
## max(iterable)은 인수로 반복 가능한 데이터를 입력받아 그 최댓값을 리턴하는 함수이다.
min
## min(iterable)은 max 함수와 반대로, 인수로 반복 가능한 데이터를 입력받아 그 최솟값을 리턴하는 함수이다.
pow
## pow(x, y)는 x를 y제곱한 결괏값을 리턴하는 함수이다.
round
## round(number [,ndigits])는 숫자를 입력받아 반올림해 리턴하는 함수이다.
sorted
## sorted(iterable)는 입력 데이터를 정렬한 후 그 결과를 리스트로 리턴하는 함수이다.
sum
## sum(iterable)은 입력 데이터의 합을 리턴하는 함수이다.
type
## type(object)는 입력값의 자료형이 무엇인지 알려 주는 함수이다.
zip
## zip(*iterable)은 동일한 개수로 이루어진 데이터들을 묶어서 리턴하는 함수이다.
list(zip([1, 2, 3], [4, 5, 6]))
list(zip([1, 2, 3], [4, 5, 6], [7, 8, 9]))
list(zip("abc", "def"))
이외에도 다양한 내장 함수가 존재하지만 자주 쓰이는 몇 가지만 가져왔어요
좀 더 알고싶은 함수들이 있다면 공식문서를 참고하시는 걸 추천드려요
Python 표준 라이브러리
기본적으로 라이브러리는 import를 통해서 불러오고 as로 이름을 재정의 할 수 있어요
import (라이브러리) as (별칭)
Python에서 기본으로 제공하는 라이브러리들을 소개할게요
# datetime - 날짜와 관련된 기능
## datetime.date는 연, 월, 일로 날짜를 표현할 때 사용하는 함수
import datetime
day1 = datetime.date(2021, 12, 14)
day2 = datetime.date(2023, 4, 5)
diff = day2 - day1
diff.days
=> 477
datetime 라이브러리를 가져와서 .days로 날짜를 가져다 쓸 수 있어요
# math - 수학연산 관련 기능
## math.gcd는 최대 공약수(gcd, greatest common divisor)를 쉽게 구할 수 있어요
import math
math.gcd(60, 25)
=> 5
math 라이브러리에는 gcd말고도 수학적 연산을 위한 함수들이 많이 존재해요
# random - 난수
import random
random.random()
random.randint(1, 10)
=> (1부터 10까지 임의의 값 출력)
랜덤값을 쓰고싶을때 자주 사용되는 함수에요
# glob - 디렉토리 파일 리스트를 조회해요
import glob
glob.glob("./*.ipynb")
프로그램 내에서 파일을 조회하고 출력할 수 있답니다
이제 실습으로 넘어가 볼까요?
파이썬 베이스볼 게임 만들기
- 임의의 숫자 생성: 컴퓨터가 0-9 사이의 서로 다른 3개의 숫자를 임의로 생성합니다.
- 사용자 입력: 사용자가 3자리 숫자를 입력합니다.
- 스트라이크 및 볼 계산: 사용자가 입력한 숫자와 위치를 비교하여 스트라이크와 볼의 개수를 계산합니다.
- 결과 출력: 스트라이크와 볼의 개수를 사용자에게 알려줍니다.
- 게임 종료: 사용자가 숫자를 모두 맞추면 게임을 종료하고, 재시작 여부를 묻습니다.
# 임의의 숫자 3개 생성 (0~9,3)
# while문 사용 / 조건은 (3s가 아니면)
# input함수로 3자리 숫자 입력
# split으로 3자리 숫자를 끊어서 받아줌
# if 임의의 숫자랑 입력 숫자가 겹치는게 있는가 ?
# 그 중에서도 인덱스가 같은게 있는가 ?
# 없다면 아웃 !
def search_dup(list): # 리스트에 중복이 있는지 확인하는 함수
temp = 0
for i in range(len(list)-1):
if list[i] == list[i+1]:
temp += 1
if temp != 0:
return True
else:
return False
def single_int(list): # 리스트의 값이 0~9까지의 정수인지 확인하는 함수
for i in list:
if int(i) >= 0 and int(i)<10:
continue
else:
return False
return True
#랜덤 라이브러리 임포트
import random as ran
#재시작 변수
str_retry = 'Y'
#재시작을 위한 while문
while (str_retry == 'Y'):
#맞춘 카운트 선언
s_count = 0
b_count = 0
#변수 선언
list_prob_num = []
temp = 0
#겹치지 않게 랜덤 숫자 3개 생성
while (len(list_prob_num) < 3):
temp = ran.randint(0,9)
if (temp not in list_prob_num):
list_prob_num.append(temp)
# 3스트라이크 될때까지
while (s_count<3):
# 카운트 초기화
s_count = 0
b_count = 0
# 입력값 받기
str_my_num = input("숫자 세개를 한칸씩 띄워서 적어주세요 ")
list_my_num = str_my_num.split()
# 입력한 값이 양식에 맞는지 확인하고 틀렸다면 다시 입력받기 ( 중복, 길이, 한자릿수 )
while (search_dup(list_my_num) == True) or (len(list_my_num) != 3) or (single_int(list_my_num) == False):
str_my_num = input("숫자 세개를 한칸씩 띄워서 '다시' 적어주세요 ")
list_my_num = str_my_num.split()
# 인덱스와 값이 모두 같다면 s_count 증가 그게 아니고 값이 들어 있기는 하면 b_count 증가
for i in range(3):
if str(list_prob_num[i]) == list_my_num[i]:
s_count += 1
elif str(list_prob_num[i]) in list_my_num:
b_count += 1
print(f"{s_count} 스트라이크, {b_count} 볼")
str_retry = input(f"\n3 스트라이크! 정답입니다! 게임을 다시 시작하시겠습니까? (Y/N)")
코드를 하나씩 뜯어서 보고 '직접' 해보는 걸 추천드려요!
오늘은 ! 여기까지 ~
다음 글에서 만나요~

'ABC 부트캠프' 카테고리의 다른 글
[7일차] ABC 부트캠프 - 데이터분석 with Python (pandas) (0) | 2024.07.02 |
---|---|
[6일차] ABC부트캠프 - 데이터 분석 with Python (matplotlib) (0) | 2024.07.01 |
[4일차] ABC 부트캠프 - 파이썬 기초 #3 ( 제어문 & 연습 예제, 함수) (2) | 2024.06.27 |
[3일차] ABC부트캠프 - 파이썬 기초 #2 ( 리스트, 딕셔너리, if문, for문) (2) | 2024.06.26 |
[2일차] ABC 부트캠프 - 파이썬 기초 #1 (변수와 타입, 함수와 메서드) (2) | 2024.06.25 |