오늘의 한 일
- python 강의 3일차
- 과제 숫자야구 만들기
python 강의
반복문 for, while
- for문
- list, tuple, set 자료형의 요소들로 반복문을 사용할 수 있습니다.
numbers = [1, 2, 3, 4]
for number in numbers:
print(number)
# result print
"""
1
2
3
4
"""
members = ("lee", "kim", "park")
for member in members:
print(member)
# result print
"""
lee
kim
park
"""
-
- enumerate()를 사용해 반복되는 요소가 몇번째인지 확인할 수 있습니다.
members = ["lee", "park", "kim"]
for i, member in enumerate(members):
print(f"{member}는 {i}번째 회원입니다.")
# result print
"""
lee는 0번째 회원입니다.
park는 1번째 회원입니다.
kim는 2번째 회원입니다.
"""
-
- dictionary 자료형의 key 혹은 value로 반복문을 사용할 수 있습니다.
products = {
"bread": 1000,
"milk": 3000,
"egg": 6000,
"drink": 1500
}
for k in products: # key만 사용할 때
print(k)
for v in products.values(): # value만 사용할 때
print(v)
for k, v in products.items(): # key, value 모두 사용할 때
print(k, v)
# result print
"""
bread
milk
egg
drink
1000
3000
6000
1500
bread 1000
milk 3000
egg 6000
drink 1500
"""
-
- range() 함수를 활용하면 원하는 만큼 반복문을 사용할 수 있습니다.
# range에 지정한 값만큼 반복되며, i에는 0부터 지정한 값-1까지의 값이 할당됩니다.
for i in range(5):
print(i)
# result print
"""
0
1
2
3
4
"""
-
- continue를 활용해 특정 상황에서 아무런 동작도 하지 않고 넘어갈 수 있습니다.
numbers = [24, 75, 12, 54, 30, 70, 99]
for number in numbers:
if number <= 50: # number가 50보다 작거나 같은 경우
continue # 아무런 동작도 하지 않고 다음으로 넘어감
print(f"{number}는 50보다 큰 숫자입니다!")
# result print
"""
75는 50보다 큰 숫자입니다!
54는 50보다 큰 숫자입니다!
70는 50보다 큰 숫자입니다!
99는 50보다 큰 숫자입니다!
"""
-
- break를 활용해 특정 상황에서 반복문을 중지시킬수 있습니다.
numbers = [1, 2, 3, 4, 5, 6, 7, 8]
for number in numbers:
if number >= 4: # number가 4보다 크거나 같은 경우
break # 반복문을 중지
print(number)
# result print
"""
1
2
3
"""
- while문
- 사용방법은 for문과 크게 다르지 않지만, 조건을 다루는 방식에 차이가 있습니다.
# while문은 조건이 참일 경우 계속해서 실행됩니다.
# 때문에 아래와 같이 코드를 작성할 경우, 무한 루프(infinity loop)에 빠지게 됩니다.
while True:
print("hello world")
-
- 대부분의 경우 while문은 반복 할 횟수가 정해져 있지 않을 때 사용합니다.
while True:
user_input = input("번호를 입력하세요. 종료 : 0") # 사용자의 input을 받는 함수
if user_input == "0":
break
print(f"{user_input}번을 입력하셨습니다!")
자주 사용되는 모듈 및 패턴
- type() / 값의 자료형 확인해보기
integer = 10
float_ = 1.23
string = "hello world!!"
list_ = [1, 2, 3]
tuple_ = (1, 2, 3)
set_ = {1, 2, 3}
dictionary = {"key": "value"}
boolean = True
print(type(integer)) # <class 'int'>
print(type(float_)) # <class 'float'>
print(type(string)) # <class 'str'>
print(type(list_)) # <class 'list'>
print(type(tuple_)) # <class 'tuple'>
print(type(set_)) # <class 'set'>
print(type(dictionary)) # <class 'dict'>
print(type(boolean)) # <class 'bool'>
- split() / string을 list로 변환하기
# split은 string.split("구분자")로 구성되어 있습니다.
string = "hello/python/world!!"
string_list = string.split("/") # split() 안에 들어간 값을 기준으로 문자를 나눈다.
print(string_list) # ['hello', 'python', 'world!!']
- join() / list를 string으로 변환하기
# join은 "사이에 들어갈 문자".join(리스트) 로 구성되어 있습니다.
string_list = ["hello", "python", "world"]
string = "!! ".join(string_list)
print(string) # hello!! python!! world
- replace() / 문자 바꾸기
- pprint() / 코드 예쁘게 출력하기
# pprint는 pretty print의 약자이며, 데이터를 더 예쁘게 출력해 준다.
from pprint import pprint
sample_data = {
"id": "0001",
"type": "donut",
"name": "Cake",
"ppu": 0.55,
"batters":
{
"batter":
[
{"id": "1001", "type": "Regular"},
{"id": "1002", "type": "Chocolate"},
{"id": "1003", "type": "Blueberry"},
{"id": "1004", "type": "Devil's Food"}
]
},
"topping":
[
{"id": "5001", "type": "None"},
{"id": "5002", "type": "Glazed"},
{"id": "5005", "type": "Sugar"},
{"id": "5007", "type": "Powdered Sugar"},
{"id": "5006", "type": "Chocolate with Sprinkles"},
{"id": "5003", "type": "Chocolate"},
{"id": "5004", "type": "Maple"}
]
}
pprint(sample_data) # print로 출력했을 때와 결과 비교해 보기!!
- random / 랜덤한 로직이 필요할 때
# 난수 생성, 임의의 번호 생성 등 랜덤한 동작이 필요할 때 사용된다.
import random
numbers = [1, 2, 3, 4, 5, 6, 7, 8]
random.shuffle(numbers) # numbers를 무작위하게 섞기
print(numbers) # [2, 8, 6, 4, 3, 7, 1, 5]
random_number = random.randint(1, 10) # 1 ~ 10 사이의 무작위 번호 생성
print(random_number) # 4
- time / 시간 다루기
# 함수의 실행 시간을 측정하는 등 시간을 다룰 때 사용되는 모듈이다.
import time
start_time = time.time() # 현재 시간 저장
time.sleep(1) # 1초간 대기
end_time = time.time()
# 코드가 종료된 시간 - 코드가 시작된 시간으로 실행 시간 구하기 (단위 : 초)
print(f"코드 실행 시간 : {end_time-start_time:.5f}") # 코드 실행 시간 : 1.00100
- datetime / 날짜 다루기
from datetime import datetime, timedelta
# 현재 날짜 및 시간 출력
print(datetime.now()) # 2022-09-04 03:55:32.277095
# datetime의 format code, 더 제세한건 여기
'''
%y : 두 자리 연도 / 20, 21, 22
%Y : 네 자리 연도 / 2020, 2021, 2022
%m : 두 자리 월 / 01, 02 ... 11 ,12
%d : 두 자리 일 / 01, 02 ... 30, 31
%I : 12시간제 시간 / 01, 02 ... 12
%H : 24시간제의 시간 / 00, 01 ... 23
%M : 두 자리 분 / 00, 01 ... 58, 59
%S : 두 자리 초 / 00, 01 ... 58, 59
'''
# string을 datetime 날짜로 변경하기
string_datetime = "22/12/25 13:20"
datetime_ = datetime.strptime(string_datetime, "%y/%m/%d %H:%M")
print(datetime_) # 2022-12-25 13:20:00
# datetime 날짜를 string으로 변환하기
now = datetime.now()
string_datetime = datetime.strftime(now, "%y/%m/%d %H:%M:%S")
print(string_datetime) # 22/09/04 04:04
# 3일 전 날짜 구하기
three_days_ago = datetime.now() - timedelta(days=3)
print(three_days_ago) # 2022-09-01 04:07:48.526502
지금까지 배운 문법들을 활용해 로또 번호를 뽑는 코드 작성하기
import random
lotto = set() # lotto 변수를 set 자료형으로 선언
def get_lotto_number(count):
result = []
if count < 1:
print("1 이상의 값을 입력해주세요")
for _ in range(count): # count만큼 반복해서 실행
lotto = set()
while len(lotto) < 8: # lotto의 요소 갯수가 8 이하일 경우 계속해서 반복
lotto.add(random.randint(1, 45)) # lotto에 1~45 사이의 랜덤 값을 입력
result.append(lotto)
return result
lotto_numbers = get_lotto_number(10)
print(lotto_numbers)
# result print
"""
[
{1, 3, 4, 6, 9, 44, 18, 22, 26},
{2, 5, 9, 11, 44, 45, 19, 23, 28},
{1, 4, 39, 41, 16, 18, 27, 29, 31},
{2, 5, 8, 9, 14, 20, 22, 24, 31},
{33, 37, 6, 40, 41, 42, 19, 30, 31},
{33, 1, 36, 8, 41, 9, 17, 24, 30},
{5, 39, 41, 10, 12, 16, 23, 25, 26},
{3, 35, 37, 11, 14, 17, 19, 20, 30},
{33, 35, 3, 11, 43, 15, 16, 27, 30},
{33, 36, 38, 6, 43, 24, 25, 30, 31}
]
"""
# 랜덤 값을 사용하기 때문에 코드를 실행할 때마다 결과는 달라집니다.
+ 내가 짠 로또번호생성기
P.S. 공백 만들 시에 탭 공백 vs 스페이스바 공백
보통 탭공백을 스페이스바 4칸으로 설정해서 스페이스바 공백 쓴다고 합니다.. 주의합시다
과제 숫자야구 만들기
20220907 숫자야구 게임
고려해야 할 사항 몇 자리 숫자(count)로 할 건지 입력받기 -> 받은 숫자를 이후의 함수에도 적용시켜야하는데?? -> 전역변수화 (global) count의 조건 3자리수 이상 10자리 수 이하 -> if 문 활용해 오류
yaun.tistory.com
3일차 강의에 배웠던 거의 모든 부분을 활용하는 난제였다..
일단 작동 방식을 구상한 뒤, 코드를 짜보고 감이 오지 않는 부분은 구글링을 통해 해결하는 방식으로 진행.
구글링 해서 찾을 수 있는 보통의 숫자야구 게임 코딩은 랜덤으로 뽑는 숫자의 자릿수가 3자리였는데, 이 부분부터 인풋받아서 코드를 구상해야 해서 뼈대를 찾고도 살을 굉장히 많이 붙여야하는 문제였다.
정리 글에서도 볼 수 있듯이 크고 작은 오류들을 겪었는데 잘 해결해냈고, 결과도 만족스럽게 뽑혀서 기분이 좋다 ㅎㅎ