# 핵심은 동작 계산을 잘 정해주는 것. 로직을 짜는 것.
# 백업하는 습관 잘 들여야 한다.

 

지금은 어렵거나 이해가 잘 가지 않더라도 딱히 방법이 없다. 코드에 많이 접하고 작업하다보면 감이 온다. 감이 왔을 때 찾아보면 나온다. 파이썬은 배울 것도 볼 것도 많다. 그것들을 찾아 보면서 공부하면 좋다. 이제부터 평생 이 언어를 쓸 수도 있다고 생각한다. 2개국어를 하는 사람이라고 생각하면 된다. 맨날맨날 공부해야 한다. 나는 즐긴다고 세뇌하면서 보면 좋다.


 

ex) 정수 n을 입력받고, n보다 작은 수 중 3의 배수와 5의 배수를 모두 더한 합을 반환하는 함수를 정의하라

함수 이름 : sum_3_5

def sum_3_5(n):
    for i in range(n):
        if i % 3 == 0:
            i += 1
    for j in range(n):
        if j % 5 == 0:
            j += 1
    return i + j

nonot = sum_3_5(12)
print(nonot)

def sum_3_5(n):
    for i in range(n):
        if i % 3 == 0 or i % 5 == 0:
            result = i
            i += 1
    return result

nonot = sum_3_5(12)
print(nonot)

# or을 써보자 

def sum_3_5(n):
    result = 0
    for i in range(n):
        if i % 3 == 0:
            result += i
        elif i % 5 == 0:
            result += i
        i += 1
    return result

printsum = sum_3_5(12)
print(printsum)
 

 

# 정육면체 주사위 2개가 있다.

# 2개의 주사위를 던졌을 때 나올 수 있는 주사위 눈의 조합을 모두 print 하는 함수를 정의하세요.

# 함수 이름 : double_dice

# 출력 예시

# 1, 2

# 6, 3

# 이중 for문을 떠올리고, 파라미터 없고, 리턴 없다는 걸 떠올려라

# dice = [1,2,3,4,5,6] 이용한 분도 있었음!

def draw_dice():
    for i in range(1, 7):
        dice1 = i
        for j in range(1, 7):
            dice2 = j
        print(dice1, dice2)

draw_dice()

def double_dice():
    for i in range(1, 7):
        for j in range(1, 7):
            print(i, j)

double_dice()

def double_dice():
    while i < 7:
        i = 1
        while j < 7:
            print(i, j)
            j += 1
        i += 1

double_dice()

ex) 두 수의 차이를 구하는 함수

# 함수에 입력된 두 정수의 차이를 계산하고 반환하는 함수를 정의하세요.

# 함수 이름 : get_diff

def get_diff(num1, num2):
    ans1 = 0
    if num1 > num2:
        ans1 = num1 - num2
    else num1 <= num2:
        ans1 = num2 - num1
    return ans1

ans2 = get_diff(33, 81)
print(ans2)

def get_diff(a, b):
    result = abs(a - b) 
    return result
 

 

 

ex) 가장 큰 수를 만드는 함수

# 함수에 입력된 5개 정수(0~9)를 정렬하여 만들 수 있는 가장 큰 수를 반환하는 함수를 정의하세요.

# 함수 이름 : get_biggest

def get_biggest(a, b, c, d, e): 
    result = [a, b, c, d, e]
    result.sort(reverse = True)
    return result 

resultin = get_biggest(1, 5, 2, 1, 1)
print(resultin)


def get_biggest(a, b, c, d, e):
    numbers = [a, b, c, d, e]
    numbers.sort()
    result = 0
    for i in range(len(numbers)):
        result += numbers[i] * (10 ** i)
    return result

aa = get_biggest(2, 4, 5, 7, 8)
print
 

 

# 파이썬의 문자/숫자를 다르게 왔다갔다 할 수 있는 특성을 사용한 코드

def get_biggest(a, b, c, d, e):
    numbers = [a, b, c, d, e]
    numbers.sort(reverse=True)
    result = ""
    for i in numbers : 
        result += str(i)
    return int(result)
def get_biggest(a, b, c, d, e):
    numbers = [a, b, c, d, e]
    numbers.sort(reverse=True)
    map(numbers, str)
    result = "".join(numbers)
    for i in numbers : 
        result += str(i)
    return int(result)

 

ex) 별 찍기2

정수를 함수에 입력하여 호출하면 해당 정수 줄의 별을 화면에 출력한다.

함수 이름 : print_ stars2

출력 결과

    *

   **

  ***

 ****

# 별찍기 10종 세트라는 게 있다... 연습문제로 풀어보면 좋을 거...

def print_stars2(n):
    for i in range(1, n+1): # 1~n
        print(" " * (n - i) + "*" * i)

print_stars2(10)
 

 

 

파일 입출력 파이썬에서 파일 생성(파일 출력), 데이터 외부에서 처리하는 법

# 프로그램들은 input output 구조입니다.

# 저장 -> 다음에 또 쓰려고 기록장치에 저장하는 것.. 프로그램이 합니다!

# 내 단일 컴퓨터에서 프로그램 수행 결과를 파일로 저장하는 방법...

# 로그 기록 남기거나 계산값 저장 등을 하기 위해.

# 설정 저장 프로그램으로 읽어오는 것 가능

 

open()

open(파일 이름(경로), 파일 열기 모드)

# io : input/output

# 파이썬 내장 함수

# 파일을 열고, 파일 객체를 리턴한다.

# 파일 객체 open()함수에서 값을 f에 넣는다.

# open() 후 반드시 꼭 close() 해줘야 한다. 열었으면 닫아야지...

f = open("C:/Users/405/my_study/python_study/새파일.txt", 'w') 
f.close()

  

# 파일의 경로

- 절대 경로 : C:/ D:/ 처럼 최상단 경로부터 나타낸 경로
- 상대 경로 : 현재 작업 위치부터 나타낸 경로

파일 열기 모드

r read : 읽기 모드, 파일을 읽기만 할 때 사용 : 기존 파일 있어야 함. 추가/수정 불가
w write : 쓰기 모드, 파일에 내용을 쓸 때 사용 : 새로 만들거나 내용을 입력하고 싶을 때 사용, 내용이 덮어쓰기 된다. 문자 입력 시 줄바꿈이 되지 않는다. 줄바꿈도 입력해 주어야 한다. (\n)
a add : 추가 모드, 파일의 마지막에 새로운 내용을 추가할 때 사용 : 막줄 뒤에 내용 추가

 
f = open("python_study/새파일.txt", 'w', encoding="utf-8")
for i in range(1, 11):
    print(i, "번째 줄")
    f.write(str(i)+"번째 줄\n")
f.close()

print 모니터 창 터미널에 출력, f.write 파일로 출력한다. 위 두 가지는 여는 방식, 방법, 위치가 다르다

 

encoding

메모장 대부분 ansi(American National Standards Institute)다.

utf-8(Universal Coded Character Set + Transformation Format – 8-bit) 유니코드로 지정해서 열어야 함.

 
f = open("python_study/새파일.txt", 'a', encoding="utf-8")
for i in range(11, 21):
    print(i, "번째 줄")
    f.write(str(i)+"번째 줄\n")
f.close()

 

readline()

첫번째 줄부터 줄바꿈까지 한 줄씩 읽어오는 함수
커서가 이동하는 것처럼 읽어옴

f = open("python_study/새파일.txt", 'r', encoding="utf-8")
line = f.readline()
print(line)
line = f.readline()
print(line)
f.close()

 

readline()으로 부르면서 while 반복문 사용해 전체 읽어오기

 
f = open("python_study/새파일.txt", 'r', encoding="utf-8")
while True:
    line = f.readline()
    if line == "":
        break
    print(line)
f.close()

 

readlines()

파일의 모든 줄을 읽어서 리스트[]로 반환하는 함수

 
f = open("python_study/새파일.txt", 'r', encoding="utf-8")
lines = f.readlines()
print(lines)
f.close()

 

 

# 한 줄 씩 읽도록 출력

f = open("python_study/새파일.txt", 'r', encoding="utf-8")
lines = f.readlines()
for line in lines:
    print(line)
f.close()
 

 

read()

파일 내용 전체를 문자열 한 덩어리로 리턴하는 함수

 
f = open("python_study/새파일.txt", 'r', encoding="utf-8")
data = f.read()
print(data)
f.close()

 

for문으로 읽기 :  for문으로 전체 읽어온 것처럼 (readline처럼) 가져옴

 
f = open("python_study/새파일.txt", 'r', encoding="utf-8")
for line in f:
    print(line)
f.close()

 

with

open - close를 자동으로 해 준다. 탭 안쪽 내용 작동하는 동안만 열어두겠다.

반드시 해줘야 하는 close() 안 해줘도 되어서 조금 더 안전하게 사용 가능하다.

open()함수와 'a'(add)를 사용하는데 주로 컨텍스트가 있는 객체에서 사용한다.

그런데 기존 파일이 없다면 새로 생성함.

with open("python_study/새파일.txt", 'a', encoding="utf-8") as f:
    f.write("end of file")

※ 확장자가 없는 파일도 있다. 윈도우즈는 확장자가 있는 게 원칙.

csv comma separated values

어떤 곳에서도 사용할 수 있도록 ,와 엔터로만 구분된 값들을 모아놓은 파일

데이터를 쉼표(또는 탭)와 엔터로 구분. 데이터들을 csv형태로 저장하는 경우가 많다.

이름,입실시간,퇴실시간

권오천,09:20,18:10

김예진,09:25,18:11

데이터 불러와서 처리한다.

with open("python_study/data.csv", "w", encoding="utf-8") as f:
    f.write("날짜,날씨,기온\n")
    f.write("20230424,맑음,10\n")
    f.write("20230425,비,9\n")
with open("python_study/data.csv", "r", encoding="utf-8") as f:
    data = f.readlines
    print(data)

 

 

계산 결과 저장 함수

정수 2개를 입력받고 두 수를 더한 결과를 add_result.txt 파일에 저장하는 함수를 정의하세요.

함수 이름 : add_write

def add_write(a, b):
    result = str(a + b)
    with open("python_study/add_result.txt", "a", encoding="utf-8") as f:
        f.write(result)

add_write(9, 6)
def add_write(a, b):
    result = a + b
    with open("add_result.txt", "w", encoding="utf-8") as f:
        f.write(str(result))

add_write(1, 2)

 

텍스트 파일에 적힌 정수 2개를 읽어와서 더하는 함수를 정의하고

정수 2개를 더한 결과를 print 하세요.

# 텍스트 파일 이름은 : add_number.txt

# 경로 : python_study/add_numver.txt

# 함수 이름 : read_add_print

with open("python_study/add_numver.txt", "w", encoding="utf-8") as f:
    f.write("2,3")

def read_add_print():
    with open("python_study/add_numver.txt", "r", encoding="utf-8") as f:
        data = f.read()
        a = int(data[0])
        b = int(data[2])
        print(a + b)

read_add_print()

# 데이터 형태를 확인해야 데이터를 활용할 함수도 짤 수 있을 것 같다..

 

 

if문 조건에 함수를 입력한 계산기 만들기

# 기능 : 두 정수의 사칙연산(+, -, *, /)

# add(), sub(), mul(), div() 함수 정의

# input() 함수를 활용하여 정수 2개, 사칙연산 선택을 입력받은 후 계산 결과를 print한다.

# 계산식과 결과를 calculator_result.txt 파일에 기록한다.

# 사용자가 'q'를 입력하면 종료한다.

def add(a, b):
    result = str(a) + " + " + str(b) + " = " + str(a+b) + "\n"
    print(result)
    with open("calculator_result.txt", "a", encoding="utf-8") as f:
        f.write(result)

def sub(a, b):
    result = str(a) + " - " + str(b) + " = " + str(a-b) + "\n"
    print(result)
    with open("calculator_result.txt", "a", encoding="utf-8") as f:
        f.write(result)

def mul(a, b):
    result = str(a) + " * " + str(b) + " = " + str(a*b) + "\n"
    print(result)
    with open("calculator_result.txt", "a", encoding="utf-8") as f:
        f.write(result)

def div(a, b):
    result = str(a) + " / " + str(b) + " = " + str(a/b) + "\n"
    print(result)
    with open("calculator_result.txt", "a", encoding="utf-8") as f:
        f.write(result)

while True:
    print("""
    계산기 표시
    1: +
    2: -
    3: *
    4: /
    q: 종료
    """)
    operator = input("원하는 계산을 입력하세요.")
    if operator == 'q':
        break
    a = int(input("정수 1: "))
    b = int(input("정수 2: "))
    if operator == "1":
        add(a, b)
    elif operator == "2":
        sub(a, b)
    elif operator == "3":
        mul(a, b)
    elif operator == "4":
        div(a, b)
# 경제적으로 코드 짜기 많이 보고 많이 직접 짜봐야 함.. 
# 어떤 과정이 일어나는지 확실히 짚어가면 좋을 것 같음 
def add(a, b):
    add1 = a + b
    print(a, "+", b, "=", add1)
    with open("python_study/calculator_result.txt", "a", encoding="utf-8") as f:
        f.write(str(a) + "+" + str(b) + "=" + str(add1))

def sub(a, b):
    sub1 = a - b
    print(a, "-", b, "=", sub1)
    with open("python_study/calculator_result.txt", "a", encoding="utf-8") as f:
        f.write(str(a) + "-" + str(b) + "=" + str(sub1))

def mul(a, b):
    mul1 = a * b
    print(a, "*", b, "=", mul1)
    with open("python_study/calculator_result.txt", "a", encoding="utf-8") as f:
        f.write(str(a) + "*" + str(b) + "=" + str(mul1))

def div():
    div1 = a / b
    print(a, "/", b, "=", div1)
    with open("python_study/calculator_result.txt", "a", encoding="utf-8") as f:
        f.write(str(a) + "*" + str(b) + "=" + str(div1))


while True:
    print("""
    계산기 표시
    1: +
    2: -
    3: *
    4: /
    q: 종료
    """)
    operator = input("원하는 계산을 입력하세요.")
    if operator == 'q':
        break
    a = int(input("정수 1: "))
    b = int(input("정수 2: "))
    if operator == "1":
        add(a, b)
    elif operator == "2":
        sub(a, b)
    elif operator == "3":
        mul(a, b)
    elif operator == "4":
        div(a, b)

 

formatting string formatting 문자열 포매팅 중요중요 자주 씀

다양한 자료형을 문자열로 바꿀 수 있다. 위치, 문자, 다양한 요소들을 자유롭게 사용할 수 있다.

a = 3
b = 2
c = 5
result = str(a) + "+" + str(b) + "=" + str(a+b)
# 위와 같은 줄을 아래와 같이 쓸 수 있다. 위 아래 행들은 같은 내용임 
result = "%d + %d = %d" % (3, 2, 5)
print(result)

# 변수 적용도 가능하다. ♥
a, b = 1, 2
result1 = "%d + %d = %d" % (a, b, a+b) 
print(result1)

 

 

 

포맷 코드

%s 문자열(string)
%d 정수(int)
%f 실수(float)
%o 8진수
%x 16진수
%% % 글자 자체

string1 = "Hello"
int1 = 3
float1 = 1.2345

print("%s %d %f" % (string1, int1, float1))
# 계산기 문자열 포매팅으로 변경해 보기 
def add(a, b):
    result = "%d + %d = %d\n" % (a, b, a+b)
    print(result)
    with open("calculator_result.txt", "a", encoding="utf-8") as f:
        f.write(result)

def sub(a, b):
    result = "%d - %d = %d\n" % (a, b, a-b)
    print(result)
    with open("calculator_result.txt", "a", encoding="utf-8") as f:
        f.write(result)

def mul(a, b):
    result = "%d * %d = %d\n" % (a, b, a*b)
    print(result)
    with open("calculator_result.txt", "a", encoding="utf-8") as f:
        f.write(result)

def div(a, b):
    result = "%d / %d = %d\n" % (a, b, a/b)
    print(result)
    with open("calculator_result.txt", "a", encoding="utf-8") as f:
        f.write(result)

while True:
    print("""
    계산기 표시
    1: +
    2: -
    3: *
    4: /
    q: 종료
    """)
    operator = input("원하는 계산을 입력하세요.")
    if operator == 'q':
        break
    a = int(input("정수 1: "))
    b = int(input("정수 2: "))
    if operator == "1":
        add(a, b)
    elif operator == "2":
        sub(a, b)
    elif operator == "3":
        mul(a, b)
    elif operator == "4":
        div(a, b)

 

 

 

f-string 중요중요 자주 씀

Python 3.6 이후 버전부터 지원

직관적으로 사용할 수 있어서 좋다.

string1 = "Hello"
int1 = 3
float1 = 1.2345
result = f"string{string1} {int1} {float1}"

print(result) # Hello 3 1.2345 출력됨
# 계산기 f-string 포매팅으로 변경해 보기 

def add(a, b):
    result = f"{a} + {b} = {a+b}\n"
    print(result)
    with open("calculator_result.txt", "a", encoding="utf-8") as f:
        f.write(result)

def sub(a, b):
    result = f"{a} - {b} = {a-b}\n"
    print(result)
    with open("calculator_result.txt", "a", encoding="utf-8") as f:
        f.write(result)

def mul(a, b):
    result = f"{a} * {b} = {a*b}\n"
    print(result)
    with open("calculator_result.txt", "a", encoding="utf-8") as f:
        f.write(result)

def div(a, b):
    result = f"{a} / {b} = {a/b}\n"
    print(result)
    with open("calculator_result.txt", "a", encoding="utf-8") as f:
        f.write(result)

while True:
    print("""
    계산기 표시
    1: +
    2: -
    3: *
    4: /
    q: 종료
    """)
    operator = input("원하는 계산을 입력하세요.")
    if operator == 'q':
        break
    a = int(input("정수 1: "))
    b = int(input("정수 2: "))
    if operator == "1":
        add(a, b)
    elif operator == "2":
        sub(a, b)
    elif operator == "3":
        mul(a, b)
    elif operator == "4":
        div(a, b)

+ Recent posts