# 핵심은 동작 계산을 잘 정해주는 것. 로직을 짜는 것.
# 백업하는 습관 잘 들여야 한다.
지금은 어렵거나 이해가 잘 가지 않더라도 딱히 방법이 없다. 코드에 많이 접하고 작업하다보면 감이 온다. 감이 왔을 때 찾아보면 나온다. 파이썬은 배울 것도 볼 것도 많다. 그것들을 찾아 보면서 공부하면 좋다. 이제부터 평생 이 언어를 쓸 수도 있다고 생각한다. 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)