카테고리 없음

PCCE 정리 - 파이썬

Break-Limits 2023. 7. 25. 00:07

list


 

 

 

파이썬


[특징]

1. 문법이 간단함

2. 학습자료가 많고 다양한 분야에 활용가능함.

 

 

[파이썬 설치]

1. https://www.python.org/downloads/

 

Download Python

The official home of the Python Programming Language

www.python.org

 

2. VScode Extension 설치

 

[code runner 설정]

# VScode extension ->code runner 설치 -> setting 변경   // "code-runner.runInTerminal": true     

# 코드 실행단축키 [ ctrl + alt + N ]

 

[터미널]

clear (cls) : 터미널 출력내용 지우기

 

 

[특징]

1. 코드는 위에서 아래 방향으로 실행된다.

2. 주석은 # 으로 처리.   // vscode 단축키 [ctrl + / ]

3. 일반적으로, 변수 선언시 별도의 키워드가 필요하지않다.

 

 

파이썬 사용 - 입출력


[출력]

print("HI")    #괄호 열고닫기 , 문자열은 큰따옴표(or 외따옴표) 열고닫기
print("1")
print("2")
print("3")

#1
#2
#3
print("this is \'Python\'")
# 이스케이프 문자로 문자처리 가능

 

[변수]  데이터를 저장하는 공간

name = "test"    # 변수 name을 선언하고 문자열 "test" 할당.
print(name)

 

 

[여러 항목 출력]

* 변수 이름은 영어 ,숫자 , 언더바(_) 사용함.

# 콤마로 구분해서 출력.
print("test1", "test2", "test3")   #test1 test2 test3
    

# 여러 변수를 출력
name1 = "kim"
name2 = "lee"
name3 = "park"
print(name1, name2, name3)   #kim lee park


# 문자열에 덧셈 뺄셈 연산 가능
str1 = " K"+" Y"
str2 = "initial"
str3 = str2 + str1
print(str3)  # initial K Y
str1 = "first"
str2 = "second"
str3 = "third"
print(str1, str2, str3, sep="\n")
# sep 인수로 문자열 사이에 들어갈 값을 지정할수있다.

 

[입력]  -  사용자로부터 입력받는다.

x = input("입력하세요.")
print(x)

1.

name = input("이름을 입력하세요.")
print("안녕하세요.", name+"님", "환영합니다.", sep=" ")

2.

name = input("type your name")
age = input("type your age")
print("your name: ", name)
print("your age: ", age)

 

 

[자료형]  - 데이터의 형태 : 문자열,숫자,논리 

* type 함수로 데이터의 형식을 알수있다.

print(type("문자입니다."))
print(type(100))
print(type(3.14))
print(type(True))   # true 대문자!

# <class 'str'>
# <class 'int'>
# <class 'float'>
# <class 'bool'>

 

[각종 연산]

# 사칙연산
print(4+2)
print(4-2)
print(4*2)
print(4/2)  # 나누기연산은 실수로 표현된다.
# 몫, 나머지, 제곱
print(4//2)
print(4 % 2)
print(4**2)

 

[참고 - 연산 우선순위]

괄호 > 지수 > 곱셈,나숫셈,몫,나머지 > 덧셈,뺄셈 > 같은 우선순위에서는 왼쪽->오른쪽.

result = 100+20/(4-2)*5
print(result)  #150

 

[예제]

 

* input함수는 문자열 출력하므로 int 함수로 입력값 정수 변환해준다.

 

1.

hour_wage = int(input("시급을 입력: "))
work_hour = int(input("일일 근무시간을 입력: "))
day_work = int(input("근무일수를 입력: "))
bonus = int(input("보너스가 있나요? : "))
total = hour_wage*work_hour*day_work+bonus
print("총 급여입니다: ", total)

 

2. 등차수열 합 구하기

num = int(input("입력하였던 숫자는? : "))

sum = num*(2+(num-1))/2
print("total number of"+str(num)+"phase: ", sum)

3. 나머지 구하기

num = int(input("type number: "))
re1 = 1 % num
re2 = 2 % num
re3 = 3 % num
re4 = 4 % num
re5 = 5 % num
print("result of remainder: ", re1, re2, re3, re4, re5)

 

[자료형 변환] - 데이터 형식이 같으면 자료형 변경할수있다.

# 문자열 -> 정수
a = "100"
b = int(a)
c = int("200")
print(type(b), type(c))

# 문자열 -> 실수
num = "3.14"
num_t = float(num)
print(type(num_t), type(num))

# 정수,실수 -> 문자열
a = 100
b = 3.14
c = str(a)
d = str(b)
print(type(c), type(d))

 

[문자열* 숫자] - 문자열을 숫자만큼 이어준다.

str = "test "
num = 2
print(str*num)
# test test
str = input("문자 입력하세요: ")
multiple = int(input("반복 횟수: "))

print(str*multiple)

 

 

 

 

파이썬 사용 - 조건문


비교연산 - 데이터의 크기를 비교하는 연산 -> 결과값을 참(true) or 거짓(false)으로 반환

 

x = 5
y = 8

print(x < y)   # True
print(x > y)	# False
print(x >= 10) 	# False
print(x <= 10)	# True

print(x == y) 	# False
print(x != y)	# True

 

[조건문]  - 조건이 true이면 if 절을 실행한다.

 

1.

pass_origin = "1234"
pass_input = "1234"

if pass_origin == pass_input:
    print("참일때 실행1")
    print("참일때 실행2222")
elif pass_origin != pass_input:
    print("거짓 조건입니다.")
    print("거짓 조건입니다.22222")
else:
    print("위에서 만족하는 조건이 없음")
print("조건문 빠져 나옴.")


# 조건이 참이므로 실행되었다.
# 명령블록은 다수 가질수있다.
# 자바스크립트와 달리 괄호로 묶지 않아야하고 콜론을 써야한다. 들여쓰기 해야한다.

 

2.

study = int(input("공부시간은? : "))

if study >= 10:
    print("잠금해제")
elif study >= 5:
    print("리미트")
else:
    print("No")

 

 

[반복문-for] - 반복 명령 수행시 사용한다.

 

for i in range(5):
    print(i, "번째")
print("반복문 빠져나오면 실행.")
    
# i : 반복하고자 하는 변수
# range(5) : 반복횟수
num = int(input("숫자 입력하세요: "))

# 사칙연산으로 계산
result = num*(num+1)/2
print(result)

# 반복문으로 계산
sum = 0
for i in range(num):
    sum = sum+(i+1)
print(sum)

 

[복합 할당 연산자] -  동일 변수에 대한 연산 수행시 축약해서 사용할수있다.

for i in range(num):
    # sum = sum+(i+1)
    sum += (i+1)    #복합할당 연산자

 

[range] - 특정 구간범위 control

# range(start , end)
for i in range(1, 6):    # range 끝 번호는 포함하지 않는다.
    print(i)

# 1부터 n까지 출력
n = int(input("숫자 입력하세요: "))
for i in range(1, n+1):    # range 끝 포함되도록.....
    print(i)

# range(start ,end, step)
for i in range(1, 11, 2):  # step : 건너뛸때 사용 , i에 2씩 더해준다.
    print(i)


for i in range(10, 0, -1):      # step : i에 -1 씩 더해준다.
    print(i)

 

 

[반복문 - while] - 특정 조건을 만족하는 경우에만 반복을 수행. 반복횟수 정해져있지 않을때

 

# 반복횟수 정해져 있지않고,
# 조건으로 반복 수행하고자 할때

i = 0
while i < 3:
    print("test")
    i += 1    # 없으면 무한루프 빠지므로 주의

 

1. 특정 범위내에 있는 숫자들의 합

num1 = int(input("숫자 1: "))
num2 = int(input("숫자 2: "))

sum = 0
# num1 부터 num2 까지의 합계 구해주는
for i in range(num1, num2+1):
    sum += i
    print(sum)

 

2. 

# for문과 while문의 변환 연습
for i in range(1, 11, 2):
    print(i)
print("done")
i = 1
while i < 11:
    print(i)
    i += 2

 

3. 구구단

num = int(input("몇단을 출력? : "))

for i in range(1, 10):
    result = num*(i)
    print(str(num)+"*"+str(i)+"="+str(result))

print(f"{num}*{i}= {result}")    # f string 사용하면 간편하게 표현할수 있다.

[참고 - 문자열과 변수 함께 나열]

1. C# : $ " " 내부에 중괄호 { (변수) }

2. JavaScript : ``(백틱) 내부에 ${ (변수) }

 

 

파이썬 - 자료형 , 변수 , 입출력 , 자료형 변환 , 조건문 , 반복문

 

 

파이썬 - 라이브러리 


1. 난수생성 random

#  create random number [range 1~10]

import random
n = random.randint(1, 10)
print(n)

 

2. 시간 함수 time

import time

print("hi")
time.sleep(2)
print("time sleep 2 seconds")
time.sleep(2)
print("time sleep 4 seconds")

# 순차 실행되므로 시간 지연이 누적된다.
# 동기(synchronous) 일까? 블로킹(blocking) 일까?

https://inpa.tistory.com/entry/%F0%9F%91%A9%E2%80%8D%F0%9F%92%BB-%EB%8F%99%EA%B8%B0%EB%B9%84%EB%8F%99%EA%B8%B0-%EB%B8%94%EB%A1%9C%ED%82%B9%EB%85%BC%EB%B8%94%EB%A1%9C%ED%82%B9-%EA%B0%9C%EB%85%90-%EC%A0%95%EB%A6%AC

 

👩‍💻 완벽히 이해하는 동기/비동기 & 블로킹/논블로킹

동기/비동기 & 블로킹/논블록킹 프로그래밍에서 웹 서버 혹은 입출력(I/O)을 다루다 보면 동기/비동기 & 블로킹/논블로킹 이러한 용어들을 접해본 경험이 한번 쯤은 있을 것이다. 대부분 사람들은

inpa.tistory.com

 

 

파이썬 - 알고리즘


 

[제어문] - 논리연산 [논리합 , 논리곱 , 논리부정]

 

1. and (논리곱)

sub_count = int(input(" 구독자 수 : "))
watch_time = int(input(" 시청시간 : "))


if sub_count >= 1000 and watch_time >= 4000:
    print("Possible!!")
else:
    print("Impossible")

2. or(논리합) , not(논리 부정)

test1 = int(input(" input test1: "))
test2 = int(input(" input test2: "))
test3 = int(input(" input test3: "))

if test1 >= 30 or test2 >= 35 or test3 >= 5:
    print("pass!!!")
else:
    print("fail...")


if test1 != 10:
    print("not enough")

 

 

 

 

[참고] - 논리연산 (JavaScript)

https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=zzz7692&logNo=221240535182 

 

And(논리곱), Or(논리합), Not(논리 부정), E(X)or(배타적 논리합)

게임메이커는 C언어처럼 논리 연산자를 가지고 있습니다. 대부분 조건문과 반복문 정도까지 배우신 분들은...

blog.naver.com

 

 

[다중조건문

 

test = int(input("필기 점수는? : "))

if test >= 80:
    interview = input("면접 결과는? : ")
    if interview == "pass":
        print("you Passed")
    elif interview == "fail":
        print("you Failed")
else:
    print("you Failed")

 

[다중반복문]

for i in range(5):
    for j in range(5):
        print(i, j)

 

1. 별찍기

for i in range(5):
    for j in range(i+1):
        print("*", end="")
    print()

 

2. 거꾸로

for i in range(5):
    for j in range(5-i):
        print("*", end="")
    print()

 

3. 크리스마스 트리

[방법1]

for i in range(5):
    print(" "*(4-i), "*"*(2*i+1))

[방법2]

for i in range(5):      # 트리의 단 수
    for j in range(4-i):
        print(' ',end='')   # 공백 찍기
    for j in range(2*(i+1)-1):
        print('*',end='')   # 별 찍기
    print()     # 줄 바꾸기

 

 

[조건문 속의 반복문 or 반복문 속의 조건문]

 

* 특정 조건이 만족하기전까지 무한 반복하면서 입력받으며 출력한다.

while True:
    order = input("order please: ")
    if order == "go":
        print("keep going")
    elif order == "stop":
        print("exit")
        break
    else:
        print("wrong order")

 

리스트


[리스트]

 여러개의 데이터를 저장할수 있는 자료형                      예) 배열

[형태]

  변수 = [데이터 ,데이터,데이터]

 

*인덱싱 - 데이터에 접근.

*추가 하기(append) , 삭제하기(del) , 리스트 길이(len) , 슬라이싱(start:end:step)

 

[참고 - 슬라이싱] https://twpower.github.io/119-python-list-slicing-examples 

 

 

#  리스트 만들기

test_arr = ["data1", "data2", "data3", "data4", "data5"]

# 데이터 접근하기(인덱싱)

print(test_arr[0])
print(test_arr[1])
print(test_arr[2])
print()

# 데이터 할당하기
test_arr[0] = "sample1"
test_arr[1] = "sample2"
test_arr[2] = "sample3"

print(test_arr)
print()

# 데이터 추가하기
test_arr.append("additional")
print(test_arr)
print()

# 데이터 삭제하기
del test_arr[0]
print(test_arr)
print(test_arr[0])   # 인덱스 1번이 0번으로 지정됨.
print()

# 리스트 길이
print(len(test_arr))
print()

# 리스트 슬라이싱

print(test_arr[0:2])    # 인덱스 0~2번 (2번 미포함)
print(test_arr[0:])    # 인덱스 0~끝까지 (시작 끝은 생략가능)
print(test_arr[::2])    # 시작 포함하여 2스텝씩 건너가며 포함

 

[리스트와 반복문]

 

리스트를 반복문(for) 을 사용해서 활용할수있다.

testArr = ["data1", "data2", "data3", "data4"]

for text in testArr:
    print(text, "get!!!")

numArr = [1, 2, 3, 4, 5]

for num in numArr:
    print(num*3)

 

[2차원 리스트]

arr_2d = [["str", 111, "str1"], ["str", 222, "str2"], ["str", 333, "str3"]]

print(arr_2d[0][0])  # 시작은 0번 인덱스 , 왼쪽차원 인덱스부터 파악한다. 
print(arr_2d[2][1])  

arr_2d.append(["str", 444, "str4"])
print(arr_2d)

 

1. 최소값 찾기

nums = [5, 15, 2, -8, -12, -29, 43, 1]
x = 9999
for i in nums:
    if i < x:
        x = i
print(x)

2. 최대값 찾기

nums = [5, 15, 2, -8, -12, -29, 43, 1]
x = -9999
for i in nums:
    if i > x:
        x = i
print(x)

 

3. 홀수 번째 원소들의 합계

nums = [5, 15, 2, -8, -12, -29, 43, 1]

x = 1
sum = 0
for i in nums:
    if i % 2 == 1:
        sum += i
    i += 1
print(sum)

 

4. 로또 번호 뽑기

import random

lotto_num = []
count = 0  # 로또 뽑은 갯수

while True:
    num = random.randint(1, 45)  # 로또 번호 랜덤 추출
    if num not in lotto_num:   # 멤버십 연산자 (추출한 번호가 리스트에 포함되어 있는지)
        lotto_num.append(num)   # 없으면 리스트에 추가....
        count += 1
        if count == 6:
            break
lotto_num.sort()   # 오름차순 리스트 정렬....
for lotto in lotto_num:
    print(lotto, end=" ")   # 리스트 요소를 순회하면서 요소를 출력함. end 옵션으로 스페이스 간격을 준다.

 

 

함수


함수 - 특정 작업을 수행하는 코드를 모아놓은 것.

 

1. 반복되는 코드를 줄일수 있음.

2. 재사용 가능.

3. 코드 수정 수월해짐

 

1. 

import random

# 기본 함수 형태 
def add_num(a,b):
    result = a+b
    return result

# function with no return value
def div_num(a,b):
    res=a/b
    print("나눗셈 결과",res)

# 매개변수 없는 함수
def get_random_number():
    res=random.randint(1,100)
    return res

# 결과값, 매개변수가 없는 함수
def say_hello():
    print("Hello")
    print("there")



print(add_num(20,30)) 
div_num(20,30)
print(get_random_number())
say_hello()

 

2. 문자열 함수 - 문자열을 다룬다

# 문자 갯수를 세보자
message = "some message from server to server some message from server to server" 
print(message.count("some"))

# 문자 찾기
name = "sadasdsadasdsrgasfafdas"
print(name.find("s"))   # 먼저 찾은 인덱스 번호를 반환!!!
print(name.count("s"))   

# 문자 바꾸기
sayhello = "hello. hello. hello. hello. hello. hello."
print(sayhello)
sayhi = sayhello.replace("hello","hi")    # hello를 hi로  전부.... 대치한다
print(sayhi)

# 문자 자르기
text = "some text text text text text"
print(text.split())   # 공백을 기준으로 문자열을 자른다 + 자른 문자열을 리스트 요소로 할당한다.+ [원본유지]
print(len(text.split()))   # 자른 후 총 요소를 구할수도있다.


text2 = "some,text,text,text,text,text"
print(text2.split(","))   # 콤마를 기준으로 문자열 스플릿.


# 문자 합치기 [join]
text = ["monday", "tuesday", "wednesday", "thursday"]
print("".join(text))   #공백없이
print(" ".join(text))   #공백 추가
print(":".join(text))   #콜론추가

# 공백문자 제거 [strip]
text ="*******        long spaces      *******"
print(text.strip("*"))    # 좌우 볊표 제거함.
print(text.strip())         # 좌우 공백 제거
print(text.lstrip())         # 왼쪽 공백 제거 -> 별표먼저 제거해야함
print(text.lstrip("*").lstrip())         # 메서드 체이닝 -> 별표제거+ 공백제거

print(text.rstrip())         # 오른쪽 공백 제거 -> 별표먼저
print(text.rstrip("*").rstrip())         # 메서드 체이닝 -> 별표제거+ 공백제거