greatsangho의 이야기

캠프 2일차 - 파이썬 반복문 본문

프로그래밍/SK AI 캠프

캠프 2일차 - 파이썬 반복문

greatsangho 2024. 8. 21. 19:14

배운 내용 복습하기

  1. 변수
    식별자
    식별자() --> 함수
    첫글자가 대문자인 식별자 --> 클래스
    네이밍 룰 : 스네이크, 카멜케이스
    스네이크 : 식별자_식별자
    카멜케이스 : 각 단어의 첫글자는 대문자로 해서 결합
  2. 연산자
    사칙연산자 : + - * /
    대입연산자 : =
    **, //, %
  3. 문자열
    슬라이싱
    [startindex : endindex -1]
    정방향
    역방향 : 맨 마지막 데이터를 쉽게 접근
    step : [ :: -1]
    연산
    문자열끼리 더하기
    문자열 + 숫자
  4. 파이썬의 특징
    예약어 : 사용하며 안되지만 사용해도 에러가 안 나서 그게 문제
    우선순위
    타입이 없지만 조사는 가능 ( type() )
    타입 변환이 가능하다
    int() float() bool() str() ...

얕은복사와 깊은복사

 

비교연산자

같다: ==

다르다 !=

크기 비교 >< <= >=

bool 값(True/False)으로 반환

 

and(&) or(|) not(!)

 

정수 판단

.isdecimal()

 

시간 가져오기

import datetime

now = datetime.datetime.now() + datetime.timedelta(hours = 9) # 한국 시간

print(f"{now.year}년 {now.month}월 {now.day}일 {now.hour}시 {now.minute}분 {now.second}초")

 

오전/오후 구해보기

계절 출력하기

남은 시간 계산하기

target = now.replace(hour=17, minute=50, second=0) # 목표시간
RemainTime = target - now # 두 시간차
TotalSec = RemainTime.total_seconds()

그 다음 몫과 나머지를 이용해 시분초를 구한다

 

응용문제

순수하게 강의를 듣는 시간 구해보기

강의는 정시부터 50분까지 진행하고 10분 휴식

1시부터 2시는 점심시간이고 강의는 오전 9시부터 오후 5시 50분까지 진행하는 조건임

 

나이 입력받아 출력

홀짝 구분

x, y = 5, 0
if x > 4:
    if y > 2:
        print(x * y)
else:
    print(x + y)
 ------------------------
x, y = 5, 0
if x > 4 and y > 2:
    print(x * y)
else:
    print(x + y)

if 문을 합칠 때 두 코드가 달라짐에 유의하기

 

윤년 판단하기

# 년도를 입력받아서 해당년도가 윤년인지 판단하는 프로그램을 작성
'''
그레고리력의 정확한 윤년 규칙은 다음과 같다.

서력 기원 연수가 4로 나누어 떨어지는 해는 윤년으로 한다. (1988년, 1992년, 1996년, 2000년, 2004년, 2008년, 2012년, 2016년, 2020년, 2024년, 2028년, 2032년, 2036년, 2040년, 2044년 ...)
서력 기원 연수가 4, 100으로 나누어 떨어지는 해는 평년으로 한다. (1700년, 1800년, 1900년, 2100년, 2200년, 2300년...)
서력 기원 연수가 4, 100, 400으로 나누어 떨어지는 해는 윤년으로 둔다. (1600년, 2000년, 2400년...)
'''
출처: 위키백과

year = input("년도를 입력하세요: ")

year = int(year)

if (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0):

    print("윤년")

else

    print("평년")

 

자료구조

 - list

 - tuple

 - set

 - dictionary


# 자료구조는 crud 가능해야 한다
# c : 생성
# r : 읽기
# u : 업데이트
# d : 삭제

 

연산: +, *, len()

append(), insert()

extend()

del, remove : 위치정보와 값으로 제거한다.
pop : 삭제한 데이터를 리턴한다
clear : 전부

in/not in

 

반복문

for 문

for i in range(5): 의 형태

 

응용문제

* 출력해서 가운데 정렬, 오른쪽 정렬하기

 

거꾸로 출력

range(4, -1, -1)

range(5)[::-1]

.reverse()는  반환을 하지 않아 Nonetype에러 때문에 조건에 올 수 없음

 

나누어 떨어지는 수의 합 및 리스트에 담기

if 문과 .append() 활용

 

조건문 안에 아무것도 할 것이 없으면 pass 적어주어야 함

 

리스트가 리스트를 요소로 가지는 2차원 리스트

로또 만들기

import random
lotto = []
lottos = []

# random.randint(1,100) 1~99 사이의 숫자중에 랜덤한 숫자를 반환
# for문을 이용해서 리스트에 랜덤한 데이터 3개를 저장
for j in range(5):
    lotto.clear() # 재 사용을 위해서 저장했던 리스트를 비움
    for i in range(6):
        lotto.append(random.randint(1,46)) # 1 ~ 45 랜덤한 수사를 발생 후 저장

    lottos.append(lotto) # 랜덤한 6개의 숫자로 된 리스트를 다시 리스트에 저장

# 출력
for i in lottos:
    print(i)

# 참조한 것을 다시 참조해서 결국 같은 주소를 가져오게 되므로
# 마지막 가져온 값으로 똑같이 가져옴

미리 lotto라는 리스트를 만들고 이를 clear해서 사용할 경우 문제 발생

--> 이는 리스트를 저장할 때 값이 아닌 주소를 저장하기 때문임

--> 위 코드에서 모든 lottos에 같은 메모리 주소가 들어감

--> 마지막 실행한 랜덤 값으로 전체 값이 같아짐

 

import random

lottos = []

# random.randint(1,100) 1~99 사이의 숫자중에 랜덤한 숫자를 반환
# for문을 이용해서 리스트에 랜덤한 데이터 3개를 저장
for j in range(5):
    lotto = [] # 재 사용을 위해서 저장했던 리스트를 비움
    for i in range(6):
        lotto.append(random.randint(1,46)) # 1 ~ 45 랜덤한 수사를 발생 후 저장

    lottos.append(lotto) # 랜덤한 6개의 숫자로 된 리스트를 다시 리스트에 저장

# 출력
for i in lottos:
    print(i)

# 매번 새로 리스트를 만들어 사용, 참조형임을 주의

안쪽에서 새로운 리스트 생성 필요

 

** 깊은 복사와 얕은 복사를 주의하자!

 

반복문 중간에 나가려면 break

반복문 해당 과정을 건너뛰면 continue

 

로또 번호를 겹치지 않게 6개를 만들어보기

while문 사용

import random

lotto = []

while len(lotto) < 6:

    random_data = random.randint(1,45)

    if random_data not in lotto:

        lotto.append(random_data)

print(lotto)

 

딕셔너리

{key:value}

키값은 겹칠 수 없음

 

웹에서 json 형태로 많이 사용됨

 

딕셔너리 value는 딕셔너리, 리스트, 숫자, 문자열 모두 가능함

 

key 유무 확인

'name' in dict_1

 

key 값만 리스트로 반환

dict_1.keys()

for key in dict_1:
    print(key)

기본적으로 키값 리스트임

 

value 값만 리스트로 반환

dict_1.value()

for value in dict_1.values():
    print(value)

value 값을 출력

 

key, value 쌍으로 집합화

dict_1.items()

for key, value in dict_1.items():
    print(key, value)

key value 쌍으로 받아 출력

 

지우기

dict_1.clear()

 

리스트와 딕셔너리를 이요한 투표시스템 작성

단어의 빈도수 구하기

 

응용문제

혼공파 character 만들기 문제

 

https://github.com/greatsangho/python_study/blob/main/20240821_day_2.ipynb

 

python_study/20240821_day_2.ipynb at main · greatsangho/python_study

Contribute to greatsangho/python_study development by creating an account on GitHub.

github.com

반응형