# 모듈
'''
calculator.py
'''
# 더하기
def add (x, y):
return x + y
# 빼기
def subtract(x, y):
return x - y
# 곱하기
def multiply(x, y):
return x * y
# 나누기
def divide(x, y):
return x / y
import calculator as cal
print(cal.add(2, 5))
print(cal.multiply(3, 4))
from calculator import add, multiply # 함수 앞에 모듈이름을 매번 쓰는게 귀찮을 때
print(cal.add(2, 5))
print(cal.multiply(3, 4))
# 스탠다드 라이브러리
# standard library (표준 라이브러리)
import math
import random
import os
# math
print(math.log10(100))
print(math.cos(0))
print(math.pi)
print()
# random
print(random.random()) # random 모듈 안의 random 함수 : 0.0 ~ 1.0 사이의 랜덤한 수 리턴
print()
# os
print(os.getlogin()) # 현재 어떤 계정에 로그인 되어있는지 확인
print(os.getcwd()) # 현재 이 파일의 경로 확인
# random 모듈
import random # 랜덤한 숫자를 생성하기 위한 다양한 함수들 제공
- randint 함수 : 두 수 사이의 어떤 랜덤한 정수를 리턴하는 함수
randint(, b) : a <= N <= b 를 만족하는 어떤 랜덤한 정수 N 리턴
import random
print(random.randint(1, 20))
print(random.randint(1, 20))
print(random.randint(1, 20))
print(random.randint(1, 20))
print(random.randint(1, 20))
- uniform 함수
두 수 사이의 랜덤한 소수를 리턴하는 함수
randit 와 다른 점 : 리턴하는 값이 정수가 아니라 소수
uniform(a, b) : a <= N <= b 를 만족하는 어떤 랜덤한 소수 N
import random
print(random.uniform(0, 1))
print(random.uniform(0, 1))
print(random.uniform(0, 1))
print(random.uniform(0, 1))
print(random.uniform(0, 1))
# datatime 모듈
import datetime
'날짜'와 '시간'을 다루기 위한 다양한 '클래스' 갖춤
- datetime 값 생성
'''
2021년 7월 21일을 파이썬으로 표현
'''
import datetime
pi_day = datetime.datetime(2021, 7, 12)
print(pi_day)
print(type(pi_day))
시간도 직접 설정 가능
import datetime
pi_day = datetime.datetime(2021, 7, 12, 13, 6, 15)
print(pi_day)
print(type(pi_day))
- 오늘 날짜
우리가 날짜를 지정하는 것이 아닌 코드 실행할 '지금 이 순간'의 날짜와 시간을 받아올 때
import datetime
today = datetime.datetime.now()
print(today)
print(type(today))
- timedelta
두 datetime 값 사이의 기간 알고 싶을 때, 숫자 뺄셈 하듯이 그냥 빼면 됨
import datetime
today = datetime.datetime.now()
pi_day = datetime.datetime(2021, 7, 10, 13, 6, 15)
print(today - pi_day)
print(type(today - pi_day))
두 datetime 값을 빼면, timedelta 라는 타입 나옴
timedelta : 날짜 간의 차이를 나타내는 타입
반대로 timedelta 를 생성해서 datetime 값에 더해 줄 수도 있음
import datetime
today = datetime.datetime.now()
my_timedelta = datetime.timedelta(days=5, hours=3, minutes=10, seconds=50)
print(today)
print(today + my_timedelta)
- datetime 해부하기
datetime 값에서 '연도'나 '월' 같은 값들을 추출
import datetime
today = datetime.datetime.now()
print(today)
print(today.year) # 연도
print(today.month) # 월
print(today.day) # 일
print(today.hour) # 시
print(today.minute) # 분
print(today.second) # 초
print(today.microsecond) # 마이크로초
- datetime 포맷팅
datetime 값을 출력하면 별로 예쁘지 않음 but. strftime 을 사용하면 우리 입맛대로 바꿀 수 있음
import datetime
today = datetime.datetime.now()
print(today)
print(today.strftime("%A, %B %dth %Y"))
%A, %B, %d, %Y : 포맷 코드
포맷 코드설명예시
%a | 요일 (짧은 버전) | Mon |
%A | 요일 (풀 버전) | Monday |
%w | 요일 (숫자 버전, 0~6, 0이 일요일) | 5 |
%d | 일 (01~31) | 23 |
%b | 월 (짧은 버전) | Nov |
%B | 월 (풀 버전) | November |
%m | 월 (숫자 버전, 01~12) | 10 |
%y | 연도 (짧은 버전) | 16 |
%Y | 연도 (풀 버전) | 2016 |
%H | 시간 (00~23) | 14 |
%I | 시간 (00~12) | 10 |
%p | AM/PM | AM |
%M | 분 (00~59) | 34 |
%S | 초 (00~59) | 12 |
%f | 마이크로초 (000000~999999) | 413215 |
%Z | 표준시간대 | PST |
%j | 1년 중 며칠째인지 (001~366) | 162 |
%U | 1년 중 몇 주째인지 (00~53, 일요일이 한 주의 시작이라고 가정) | 35 |
%W | 1년 중 몇 주째인지 (00~53, 월요일이 한 주의 시작이라고 가정) | 35 |
# input
name = input("이름을 입력하세요: ")
print(name)
1과 20 사이의 숫자를 맞히는 게임을 만들려고 합니다.
random 모듈과 input 함수를 활용하여 프로그램을 만들어 보세요.
진행 방식
- 프로그램을 실행하면 "기회가 *번 남았습니다. 1-20 사이의 숫자를 맞혀 보세요: "가 출력됩니다. 총 네 번의 기회가 주어지며, 사용자가 한 번 추측할 때마다 남은 기회 횟수가 줄어듭니다.
- 정답을 맞히면 "축하합니다. *번 만에 숫자를 맞히셨습니다."가 출력되고 프로그램은 종료됩니다.
- 사용자가 입력한 수가 정답보다 작은 경우 "Up"이 출력되고, 입력한 수가 정답보다 큰 경우 "Down"이 출력됩니다.
- 정답이 틀렸으면 1번부터 다시 진행합니다. 만약 네 번의 기회를 모두 사용했는데도 답을 맞히지 못했으면, "아쉽습니다. 정답은 *입니다."가 출력되고 프로그램은 종료됩니다.
import random
ANS = random.randint(1, 20)
i = 4
while i > 0:
guess_num = float(input(f"기회가 {i}번 남았습니다. 1-20 사이의 숫자를 맞혀보세요: "))
guess = guess_num // 1 # 입력값이 정수라면 소수점 .0을 버린 값을 guess 에 저장
float_check = guess_num % 1 # 나머지 연산으로 소수점 값 저장
# 올바르지 않은 입력은 count 안함
if float_check != 0: # 저장한 소수점 값이 있으면 올바르지 않은 입력. 없으면 (0이면) 올바른 입력
print("올바르지 않은 값입니다. 1-20 사이의 정수를 입력하세요")
continue
elif guess < 1 or guess > 20:
print("올바르지 않은 값입니다. 1-20 사이의 정수를 입력하세요")
continue
# 올바른 입력
else:
if guess == ANS:
print(f"축하합니다. {5-i}번만에 숫자를 맞히셨습니다.")
break
elif guess > ANS:
i -= 1
print("down")
else: # guess < ANS
i -= 1
print("up")
if i == 0:
print(f"아쉽습니다. 정답은 {ANS}입니다.")
해설
import random
# 상수 정의
ANSWER = random.randint(1, 20) # ANSWER : 게임의 정답 --> 상수
NUM_TRIES = 4 # NUM_TRIES : 총 기회 수 --> 상수
# 변수 정의
guess = -1 # 사용자가 입력한 값
tries = 0 # 사용자 시도 횟수
while guess != ANSWER and tries < NUM_TRIES: # 아직 사용자가 정답을 맞히지 않았고, 기회가 남아있을 때
guess = int(input("기회가 {}번 남았습니다. 1-20 사이의 숫자를 맞혀보세요: ".format(NUM_TRIES - tries)))
tries += 1 # 사용자 시도 횟수 증가
if ANSWER > guess:
print("Up")
elif ANSWER < guess:
print("Down")
if guess == ANSWER:
print("축하합니다. {}번 만에 숫자를 맞히셨습니다.".format(tries))
else:
print("아쉽습니다. 정답은 {}입니다.".format(ANSWER))