_won_
wonprogrammer
_won_
전체 방문자
오늘
어제
  • 분류 전체보기
    • woncoding
      • TIL
      • WIL
    • source Code
      • Python
      • Programmers
      • BAEKJOON

블로그 메뉴

  • 방명록

티스토리

Github · Wonprogrammer
hELLO · Designed By 정상우.
_won_

wonprogrammer

woncoding/TIL

TIL | 9.7.수 [Python 활용]

2022. 9. 7. 17:35

- 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
    'woncoding/TIL' 카테고리의 다른 글
    • TIL | 9.9.금 [Git / GitHub]
    • TIL | 9.8.목 [Git / GitHub]
    • TIL | 9.6.화 [Python 활용]
    • TIL | 9.5.월 [Python 언어의 이해 / Python 기초]
    _won_
    _won_
    Coding Practice blog

    티스토리툴바