- Python 강의 | 3. Python 활용 [반복문 / 자주 사용되는 모듈, 패턴 / 지금까지 배운 문법들을 활용해 로또 번호를 뽑는 코드 작성하기]
1. 반복분
[for]
- 1-1) list, tuple, set 을 for문 으로 반복 할 수 있음.
- 1-2) 변수 2개 이상을 한번에 반복 할 수 있다.
members = [
('a',24),
('b',25),
('c',26)
]
for name, age in members: 👉 변수명에 상관없이 members의 첫 번째 요소는=name, 두 번째 요소 = age
print(f'{name}은 이고, {age}살 입니다.')
- 1-3) for문의 range 여부
- 리스트에 있는 원소를 하나씩 가져올 때 👉 range ❌
- 범위를 정해놓고 일정 주기로 증감이 반복 될 때 👉 range ⭕️
- 1-4) enumerate()를 사용해 반복되는 요소가 몇번째인지 확인할 수 있다.
members = ["lee", "park", "kim"]
for i, member in enumerate(members): 👉 i : for문이 몇번째 돌고 있는지 / member : members의 원소를 하나씩 가져와
print(f"{member} : {i}번째이다.")
"""
lee는 0번째 회원입니다. 👉 enumerate는 0번째 부터 시작한다.
park는 1번째 회원입니다.
kim는 2번째 회원입니다.
"""
- 1-5) dict 의 for문
ex) product_dict
products = {
"bread": 1000,
"milk": 3000,
"egg": 6000,
"drink": 1500
}
👉 case1. key값 만 이용
for k in products: # key만 사용할 때 : dict 명만 가져와
print(k)
👉 case2. value값 만 이용
for v in products.values(): # value만 사용할 때 : dict명 뒤에 .value로 내가 value를 이용한다는 걸 표기
print(v)
👉 case3. key / value 값 모두 이용
for k, v in products.items(): # key, value 모두 사용할 때 : dict에 들어있는 모든 items(key, value)를 다 이용하겠다는 의미
print(k, v)
- 1-6) for문 의 continue / break
[continue]
for number in numbers:
if number <= 50: 👉 조건에 해당 할 경우
continue 👉 for문 에서 continue 아래의 코드들을 무시하고 다시 for문 처음으로 돌아가 다시 시작
print(f"{number}는 50보다 큰 숫자입니다!")
[break]
for number in numbers:
if number >= 4: 👉 조건에 해당 할 경우 break(반복을 멈추고)
break 👉 for문 탈출
[while]
while문은 반복 할 횟수가 정해져 있지 않을 때 주로 사용합니다.
따라서, 무한루프에 빠지지 않도록 주의해야한다.
ex) 주로 쓰이는 예
while True:
user_input = input("번호를 입력하세요. 종료 : 0")
if user_input == "0":
break
print(f"{user_input}번을 입력하셨습니다!")
2. 자주 사용되는 모듈 및 패턴
[유형]
- 2-1) type( ) | 값의 자료형 확인
- 2-2) split( ) | string 👉 list로 변환
string = "hello/python/world!!"
string_list = string.split("/") 👉 '/' 를 기준으로 문자열 나누기 (기준이 되는 문자열을 지정)
결과값 : ['hello', 'python', 'world!!'] 👉 리스트로 저장된다.
- 2-3) join( ) | list 👉 string으로 변환
string_list = ["hello", "python", "world"]
string = "!! ".join(string_list) 👉 리스트 원소들 사이에 : "삽입 될 문자".join(해당 리스트)
결과값 : "hello!! python!! world" 👉 사이에만 삽입되기 떄문에, 끝에는 붙지 않는다. 리스트 형식에서 문자열로
- 2-4) replace( ) | 문자 바꾸기
string_list = "hello python world"
string = string.replace(' ', '/') 👉 ('전', '후') 전에서 후로 문자를 바꿔준다.
결과값 : "hello/python/world"
+ split + join 으로 replace | string 👉 list 👉 string
"hello/python/world!!" 👉 (split : '/') 👉 ['hello', 'python', 'world!!'] 👉 (join : ' ') 👉 "hello python world"
"hello/python/world!!" 👉 replace ('/', ' ') 👉 "hello python world" : 이게 훨씬 간편
- 2-5) pprint() | 코드 예쁘게 출력하기
pprint = pretty print의 약자 : from pprint import pprint 선언 필요함
리스트나 딕셔서리 등을 한줄이 아닌 원소별로 깔끔하게 볼 수 있게 만들어 줌
- 2-6) random | 랜덤한 로직이 필요할 때
import 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 사이의 무작위 번호 생성 : 1개 출력
print(random_number)
random_number = random.randrange(1, 10) 👉 1 ~ 10-1 사이의 무작위 번호 생성 : 1개 출력
print(random_number)
- random.shuffle은 기존에 있던 순서를 섞어
- random.randint(숫자 범위) : 숫자 범위중 무작위 번호 생성
- random.randrange(숫자 범위) : 숫자 범위-1 중 무작위 번호 생성
- 2-7) time | 시간 다루기
import time 선언 필요함
[현재 시간 저장] : time.time( )
import time
start_time = time.time() # 현재 시간 저장
[대기 시간 지정] : time.sleep( )
import time
time.sleep(1) # 1초간 대기
- 2-8) datetime | 날짜 다루기
from datetime import datetime, timedelta 선언 필요함
🔥 datatime 의 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
'''
[현재 날짜 및 시간]
print(datetime.now()) 👉 결과값 : 2022-09-04 03:55:32.277095
주로) 사용자 날짜 입력(string) -> 알고리즘에 따라 datatime 포맷으로 날짜 계산 -> datatime 포맷을 원하는 string으로 변경
[string을 datetime 날짜로 변경] .strptime
string_datetime = "22/12/25 13:20" 👉 string으로 입력받아
datetime_ = datetime.strptime(string_datetime, "%y/%m/%d %H:%M")
👉 입력 받은 문자(날짜)를 "%y/%m/%d %H:%M" datetime 형태로 변경
print(datetime_) # 결과값 : 2022-12-25 13:20:00
[날짜 계산]
three_days_ago = datetime.now() - timedelta(days=3) 👉 timedelta로 계산 (사칙연산처럼)
print(three_days_ago) # 결과값 : 2022-09-01 04:07:48.526502
+ timedelta( day, second ...등 = 숫자 ) 로 계산 가능 | year, month 는 다른 라이브러리 사용
[datetime 날짜를 string으로 변환] .strftime
now = datetime.now() 👉 datetime형식으로 입력 받아
string_datetime = datetime.strftime(now, "%y/%m/%d %H:%M:%S")
👉 datetime형식을 "%y/%m/%d %H:%M:%S" 형태의 문자열로 다시 변경
print(string_datetime) # 결과값 : "22/09/04 04:04"
3. 지금까지 배운 문법들을 활용해 로또 번호를 뽑는 코드 작성하기
import random
from pprint import pprint
def lotto_number_operater(count):
result = []
if count < 1:
print('1이상의 값을 입력하시오')
return False
for _ in range(count):
lotto_numbers = set() # 중복이 없기 때문에 set 씀
while len(lotto_numbers) < 6: # 0부터 시작 이므로 : 0부터 ~ 6-1까지 (6개)
lotto_numbers.add(random.randint(1,45)) # list = append / set = add
result.append(lotto_numbers) # set 에 중복되지 않은 저장된 번호를 lotto_numbers에 저장
return result
lotto_numbers = lotto_number_operater(5) # 로또 추천 번호 몇개 만들꺼야?
pprint(lotto_numbers)'woncoding > TIL' 카테고리의 다른 글
| TIL | 9.9.금 [Git / GitHub] (0) | 2022.09.11 |
|---|---|
| TIL | 9.8.목 [Git / GitHub] (0) | 2022.09.09 |
| TIL | 9.6.화 [Python 활용] (0) | 2022.09.06 |
| TIL | 9.5.월 [Python 언어의 이해 / Python 기초] (1) | 2022.09.05 |
| TIL | 9.2.금 [튜플 / 집합 / f-string / 예외처리 / 파일분리 / map, lambda, filter / class] (0) | 2022.09.02 |