
어제는 수업 바로 시작하셔서 못하셨다고 하는데, 원래 매일 한다고 한다 ㅎㅎ
개념공부 하다가 어제 코드 짜는 부분이 있었고 못따라가는 느낌이 많았다. 혹시 나만 어렵게 느껴질까 걱정도 많았는데 다른 해보지 않은 비전공자분들도 어려움이 있다고 하셔서 조금은 위안이 든다.
다들 아침 잘 챙겨드시구.
오늘도 파이팅하자!
1교시
f = open(r'new_file.txt', 'w', encoding='utf-8')
while True: #얘 안하면 1라인만 가져옴
line = f.readline()
if not line: # 왜 이렇게 하는지는 내일 -> 커서와 관련 있음!
break
print(line, end=' ')
f.close()
w모드는 젤 앞에 포인트
확장프로그램 hex view -> hex editor
0D 0A : 문장의 끝
# readline_test.py
f = open("C:/doit/새파일.txt", 'r')
line = f.readline()
print(line)
f.close()
f = open(r'new_file.txt', 'w', encoding='utf-8')
lines = f.readlines()
print(lines)
for line in lines:
print(line, end="") #line 에도 계행문자, print에도 계행문자 겹치니까 end 공백 넣어주기.
계행문자 제거
f = open(r'new_file.txt', 'r', encoding='utf-8')
# for i in range(1, 10):
# f.write(f'{i}번째 라인입니다.\n')
# 파일 내용을 줄 단위로 저장하고 있는 리스트를 반환
lines = f.readlines()
print(lines)
for line in lines:
# print(line, end="") # print 함수를 실행할 때 개행문자를 제거
line = line.strip() # 파일 데이터에서 개행문자를 제거
print(line)
f.close()
f = open(r'new_file.txt', 'r', encoding='utf-8')
# 파일 내용 전체를 문자열로 반환
lines = f.read()
print(lines)
f.close()
f = open(r'new_file.txt', 'r', encoding='utf-8')
#방법1. readlines() 함수 이용
lines = f.readlines()
for line in lines:
print(line, end="")
#방법 2. 파일 객체 이용 방법
#for line in f:
# print(line, end="")
# 방법 1,2 똑같다
# 라인으로 읽는거나, 파일 전체 읽는거나
# 동시는 왜 안되냐 : 이미 한번 읽어서 파일 포인터가 끝에 있음
# 되게 하려면 파일 클로스하고 새로 열던지, 포인터 원래 위치로 돌려야 함
f.close()
# f = open(r'new_file.txt', 'r', encoding='utf-8')
# for line in f:
# print(line, end="")
# f.close()
with open(r'new_file.txt', 'r', encoding='utf-8') as f:
for line in f:
print(line, end="")
# 자동으로 파일 객체를 반환
2교시
출력 예)
이 름 국어 영어 수학 합계 평균
====== ==== ==== ==== ==== ====
홍길동 100 90 80 270 90
신길동 90 70 60 220 73 ⇐ 평균은 반올림
고길동 60 100 20 180 60
# 점수 데이터 파일 오픈
with open('score_data.txt', 'r', encoding='utf-8') as f:
# 타이틀 출력
print("===== ==== ==== ==== ====")
print('이 름 국어 영어 수학 합계 평균")
print("===== ==== ==== ==== ====")
# 파일 행 단위로 읽어서 처리
for line in file:
# 개행문자를 제거
line = line.strip()
# 이름과 정수 분리 : 공백 문자 기준 분리
datas = line.split()
# 이름을 추출
name = datas[0]
# 점수 추출
scores = datas[1:]
#print(scores)
# 합계 계산
sum = 0
for score in scores:
sum += int(score)
#print(sum)
# 평균 계산
average = int(sum / len(scores))
#print(average)
# 이름, 점수, 합계, 평균 출력
print(f"{name:3}, end=" ")
for score in scores:
print(f"{score:>4}", end=" ")
print(f"{sum:4}", end=" ")
print(f"{average:4}")
def calurate_sum(scores):
sum = 0
for score in scores:
sum += int(score)
return sum
def calurate_average(scores):
return int(calurate_sum(scores) / len(scores))
def print_title():
print('====== ==== ==== ==== ==== ====')
print('이 름 국어 영어 수학 합계 평균')
print('====== ==== ==== ==== ==== ====')
def print_data(name, scores, sum, average):
print(f"{name:3}", end=" ")
for score in scores:
print(f"{int(score):4}", end=" ")
print(f"{sum:4}", end=" ")
print(f"{average:4}")
with open('score_data.txt', 'r', encoding='utf-8') as file:
print_title()
for line in file:
line = line.strip()
datas = line.split()
name = datas[0]
scores = datas[1:]
sum = calurate_sum(scores)
average = calurate_average(scores)
print_data(name, scores, sum, average)
3교시
명령어 [인수1 인수2 ...]
import sys
args = sys.argv[1:]
for i in args:
print(i)
dan = 2
for i in range(1, 10):
print(f"{dan} x {i}) = {dan * i}")
import sys
print(sys.argv)
dan = 2
for i in range(1, 10):
print(f"{dan} x {i} = {dan * i}")
argv 이용
import sys
print(sys.argv)
dan = int(sys.argv[1])
for i in range(1, 10):
print(f"{dan} x {i} = {dan * i}")
#터미널에 python test.py 4 요론식으로 입력
import sys
sentence = sys.argv[1]
print(f"입력 => {sentence}")
# 글자(키)와 글자의 사용 회수(값)를 가지는 딕셔너리
char_count = dict()
# 입력받은 문장에서 한 글자씩을 추출해서 딕셔너리에 추가
for char in sentence:
# 딕셔너리에 해당 글자가 존재하는 경우, 사용 회수를 증가
if char in char_count:
char_count[char] = char_count[char] + 1
# 딕셔너리에 해당 글자가 존재하지 않는 경우, 사용 회수로 1을 설정해서 추가
else:
char_count[char] = 1
# 딕셔너리를 순회하면서 출력
for char in char_count:
print(f"{char} => {char_count[char]}")
import sys
sentence = sys.argv[1]
print(f"입력 => {sentence}")
char_count = dict()
for char in sentence:
# 알파벳을 소문자로 변경
char = char.lower()
# 알파벳이 아닌 경우 다음 글자를 처리
if char < 'a' or char > 'z':
continue
if char in char_count: char_count[char] = char_count[char] + 1
else: char_count[char] = 1
# 알파벳(키)를 기준으로 정렬한 결과를 출력
for key in sorted(char_count.keys()):
print(f"{key} => {char_count[key]}")
이거 &입력 뜬다고 오류 났음 -> 터미널 -> 뉴터미널 -> 파워쉘 학인하고 해야함!!
위치 줄:2 문자:5
+ ar."& C:/Users/r2com/AppData/Local
/Programs/Python/Python312/python.e
...
+ ~
앰퍼샌드(&) 문자를 사용할 수 없습니
다. & 연산자는 나중에 사용하도록 예
약되었습니다. 앰퍼샌드를 문자열의 일
부로 전달하려면 큰따옴표로 묶으십시
오("&").
+ CategoryInfo : Parse
rError: (:) [], ParentContainsE
rrorRecordException
+ FullyQualifiedErrorId : Amper
sandNotAllowed
4교시
c:\python\main.py
=================
1. 행맨
2. 점수계산
3. 알파벳 카운터
Q. 종료
=================
실행할 프로그램의 번호를 입력하세요. : 1
def show_menu():
print("""
=================
1. 행맨
2. 점수계산
3. 알파벳 카운터
Q. 종료
=================
""")
while True:
show_menu()
menu = input("실행할 프로그램의 번호를 입력하세요. : ")
if menu == 'Q':
print("프로그램을 종료합니다.")
break
menu = int(menu)
if menu == 1:
print("행맨 실행")
elif menu == 2:
print("점수 계산 실행")
elif menu == 3:
print("알파벳 카운트 실행")
else:
print("잘못된 입력입니다. 다시 시도해 주세요.")
from mo1 import add
add(3, 4)
from mod1 import add, sub
from mod1 import *
#좋은 방법은 아님(불투명해져서)
행맨 소스코드 모듈화
if __name__ == '__main__':
main()
5교시
계산기 : 결과값 저장,
add 사용자 함수 2개 구분 -> 변수도 달라짐 -> 이름만 다르고 동작 기능 똑같음
class Calculator: # class : 클래스를 정의할 때 사용하는 키워드
# Calculator: 클래스 이름
def __init__(self): # 생성자 : 해당 클래스의 인스턴스가 생성될 때 가장 먼저 호출, 실행되는 메서드(클래스 내에 정의된 함수)
self.result = 0 # 해당 클래스 내의 변수를 초기화 로직이 추가
# self : 해당 클래스를 이용해서 생성된 인스턴스를 의미
def add(self, num):
self.result += num
return self.result
def sub(self, num):
self.result -= num
return self.result
cal1 = Calculator() # Calculator 클래스의 인스턴스를 생성해서 cal1 변수에 할당
cal2 = Calculator()
print(cal1.add(3))
print(cal2.add(30))
print(cal1.add(4))
print(cal2.add(40))
print(cal1.sub(10))
print(cal2.sub(10))
class Calculator:
def setdata(self, first, second):
self.first = first
self.second = second
def add(self):
return self.first + self.second
def sub(self):
return self.first - self.second
def mul(self):
return self.first * self.second
def div(self):
return self.first / self.second
cal1 = Calculator()
result = cal1.add() # 인스턴스 변수가 정의되지 않은 상태에서 값을 사용할려고 하면 오류가 발생
# ==> 생성자가 필요한 이유
cal1.setdata(10, 20)
result = cal1.add()
print(result) # 30
result = cal1.sub()
print(result) # -10
result = cal1.mul()
print(result) # 200
result = cal1.div()
print(result) # 0.5
class Calculator:
def __init__(self): # 변수 초기화 작업
self.first = 0
self.second = 0
def setdata(self, first, second):
self.first = first
self.second = second
def add(self):
return self.first + self.second
def sub(self):
return self.first - self.second
def mul(self):
return self.first * self.second
def div(self):
return self.first / self.second
cal1 = Calculator() # 인스턴스가 생성될 때 클래스에서 정의한 생성자가 제일 먼저 호출, 실행됨
result = cal1.add() # 오류가 발생하지 않음
cal1.setdata(10, 20)
result = cal1.add()
print(result) # 30
result = cal1.sub()
print(result) # -10
result = cal1.mul()
print(result) # 200
result = cal1.div()
print(result) # 0.5
class Calculator:
def __init__(self): # 변수 초기화 작업
self.first = 0
self.second = 0
def setdata(self, first, second):
self.first = first
self.second = second
def add(self):
return self.first + self.second
def sub(self):
return self.first - self.second
def mul(self):
return self.first * self.second
def div(self):
if self.second == 0: # 나누는 수(제수)가 0인 경우 0을 반환하도록 수정
return 0
return self.first / self.second
cal1 = Calculator()
cal1.setdata(100, 0)
result = cal1.div() # ZeroDivisionError 오류가 발생하지 않고 0을 반환
print(result)
import time
class Clock:
def __init__(self) -> None:
self.hour = 0
self.miniute = 0
self.second = 0
def print(self):
print(f"{self.hour}:{self.miniute}:{self.second}")
def add_one_hour(self):
self.hour += 1
if self.hour >= 24:
self.hour = 0
def add_one_minute(self):
self.miniute += 1
if self.miniute >= 60:
self.miniute = 0
self.add_one_hour()
def add_one_second(self):
self.second += 1
if self.second >= 60:
self.second = 0
self.add_one_minute()
c = Clock()
while True:
c.add_one_second()
c.print()
# time.sleep(1)

둘째날 까지는 이전에 파이썬 완전 기초강의 들었던 것도 있고, 시작 부분이라 괜찮았는데, 어제부터 슬슬 어려워지더니 오늘은...실습 문제 냈을 때 아예 손을 못대겟다 ㅋㅋㅋ
보는 거랑 직접 해보는 거는 진짜 완전 천지차이여가지고...
원래 수업 끝나고 조금만 공부하고 갔었는데, 오늘부터 공부시간 늘려야 겠다!!
Just holding on!
안녕하세요~~ 글 잘 봤습니다 혹시 여쭈어볼게 있는데 괜찮으실까요?? 하고 계시는 교육에 대해서 궁금한게 있어서요!