파이썬 기초 공부

도백 / do back·2022년 10월 3일
0

1일차

1 기본기

0.시작은 항상 'print()' 괄호안에 무언가 적어 넣는다.
1.숫자 자료형:괄호안의 수학 공식들을 이용해 적어 넣어서 공식 값을 구할 수 있다. 단, 곱셉은 8번키의 기호를 사용(이후 작성 할 공식에서 사용 될 경우 8기호 라고 적어놓을 예정)
2.문자열 자료형:괄호안 말 그대로의 문자들을 이용해 문자들을 입력 가능하다 ''와 ""를 사용하며 입력하고 ㅋ(8기호)를 입력하게 되면 ㅋㅋㅋㅋㅋㅋㅋㅋ 로 입력이 된다.
3.boolean 자료형: 참 / 거짓 을 확인할 수 있다. '>' or '<' 이것들을 사용하거나 'True' and 'False' 혹은 'not True' 'not False'를 사용해 공식이 참 인지 거짓인지 판별이 가능하다.

변수

#애완동물을 소개해 주세요~
animal ="강아지"
name = "연탄이"
age = 4
hobby = "산책"
is_adult = age >= 3

(변수 적용 전)
print("우리집 강아지의 이름은 연탄이에요")
print("연탄이는 4살이며, 산책을 아주 좋아해요")
print("연탄이는 어른일까요? True")

(변수 적용 후)
print("우리집 " + animal + "의 이름은 " + name + "에요")
hobby = "공놀이"
print(name + "는 " + str(age) + "살이며, " + hobby + "을 아주 좋아해요")
print(name + "는 어른일까요? " + str(is_adult))

이렇게 변수를 사용하여 여러 중복적인 단어들을 한번에 쉽게 바꾸며 고칠 수 있고 다른 누군가가 이것들을 가져가 사용 할 경우 위에 적어놓은 변수들만 고치면 간편하게 본인이 사용할 수 있다.
그리고 변수는 꼭 윗부분에서만 적어야만 하는게 아닌 print의 중간부분부터 변수의 결과값을 바꾸고 싶다면 그 중간부분에 따로 변수를 적어 그 이후 부턴 다른 값으로 설정이 가능하다.
☢주의:처음부터 변수가 들어가는 경우는 (변수 + ") 이렇게 작성한다.
정수(숫자)를 사용 할 경우 플러스 뒤에 str(?)로 감싸줘야지만 오류가 나지 않고 제대로 입력이 된다.
단 앞 뒤의 플러스 대신 ,를 사용해도 되고 ,를 사용하게 될 경우 str또한 사용하지 않아도 되지만 띄워쓰기가 반드시 하나 생기기 떄문에 문장에 혹은 값이 약간 틀리게 나오므로 가급적 사용하지 아니하며 이러한 기능 있다는 것만 알면 좋다.
str = 정수(숫자 일때 사용)
int = 문자

: 프로그램 내 포함되어있지만 실행시킬 경우 나타내지 아니한 것

하는 방법은 프린트 앞에 #를 입력하거나 시작과 끝에 '''작은 따음표'''를 이렇게 3개씩 입력과 마지막으로 주석하고 싶은 곳을 드래고 하여 컨트롤 + / 를 하게 되면 주석을 설정 혹은 해제가 가능합니다.

연산자

print(1+1) # 2
print(3-2) # 1
print(5*2) # 10
print(6/3) # 2

print(2**3) # 2^3 = 8
print(5%3) # 나머지 구하기 2
print(10%3) # 1
print(5//3) # 1
print(10//3) # 3

print(10 > 3) # True
print(4 >= 7) # False
print(10 < 3) # False
print(5 <= 5) # True

print(3 == 3) # True
print(4 == 2) # False
print(3 + 4 == 7) # True

==이 붙어 있다면 앞 뒤의 숫자가 같다는 의미이고
!= 가 붙어 있다면 앞 뒤의 숫자가 다르다는 의미다.

print(1 != 3) # True
print(not(1 !=3)) # False

print((3 > 0) and ( 3 < 5)) # True
print((3 > 0) & (3 < 5)) # True

print((3 > 0) or (3 > 5)) # True
print((3 > 0) | (3 > 5)) # True

print(5 > 4 > 3) # True
print(5 > 4 > 7) # False

and 와 &는 같은 의미이며 or 과 | 또한 같은 의미이다.

print(2 + 3 4) #14
print((2 + 3 )
4) # 20
number = 2 + 3 4 # 14
print(number)
number = number + 2 # 16
print(number)
number += 2 # 18
print(number)
number
= 2 # 36
print(number)
number /= 2 # 18
print(number)
number -= 2 # 16
print(number)

number %= 5 # 1
print(number)

숫자처리함수

print(abs(-5)) # 5
print(pow(4, 2)) # 4^2 = 4*4 = 16
print(max(5, 12)) # 12
print(min(5, 12)) # 5
print(round(3.14)) # 3
print(round(4.99)) # 5

from math import *
print(floor(4.99)) # 내림. 4
print(ceil(3.14)) # 올림. 4
print(sqrt(16)) # 제곱근. 4

abs=앱솔루트=절대값
pow=파워=승
max=최대값
min=최소값
round=반올림

랜덤함수

print(random()) # 0.0 ~ 1.0 미만의 임의의 값 생성
print(random() 10) # 0.0 ~ 10.0 미만의 임의의 값 생성
print(int(random()
10)) # 0 ~ 10 미만의 임의의 값 생성

print(int(random() * 10) + 1) # 1 ~ 10 이하의 임의의 값 생성

print(int(random() * 45) + 1) # 1 ~ 45 이하의 임의의 값 생성

print(randrange(1, 46)) # 1 ~ 46 미만의 임의의 값 생성

print(randint(1, 45)) # 1 ~ 45 이하의 임의의 값 생성

랜덤을 넣을때는 꼭 'from math import *' 를 입력할 것

퀴즈

Quiz) 당신은 최근에 코딩 스터디 모임을 새로 만들었습니다.
월 4회 스터디를 하는데 3번은 온라인으로 하고 1번은 오프라인으로 하기로 했습니다.
아래 조건에 맞는 오프라인 모임 날짜를 정해주는 프로그램을 작성하시오

조건1 : 랜덤으로 날짜를 뽑아야 함
조건2 : 월별 날짜는 다름을 감안하여 최소 일수인 28 이내로 정함
조건3 : 매월 1~3일은 스터디 준비를 해야 하므로 제외

from random import *
date = randint(4, 28)
print("오프라인 스터티 모임 날짜는 매월 " + str(date) + " 일로 선정되었습니다.")

문자열

sentence = '나는 소년입니다'
print(sentence)
sentence2 = "파이썬은 쉬워요"
print(sentence2)
sentence3 = """
나는 소년이고,
파이썬은 쉬워요
"""
print(sentence3)

슬라이싱

jumin = "990120-1234567"

print("성별 : " + jumin[7])
print("연 : " + jumin[0:2]) # 0 부터 2 직전까지 (0, 1)
print("월 : " + jumin[2:4])
print("일 : " + jumin[4:6])
print("생년월일 : " + jumin[:6]) # 처음부터 6 직전까지
print("뒤 7자리 : " + jumin[7:]) # 7부터 끝까지
print("뒤 7자리 : " + jumin[-7:]) # 맨 뒤에서 7번째부터 끝까지

문자열처리함수

python = "Python is Amazing"
print(python.lower()) # 문자를 소문자로 변형
print(python.upper()) # 문자를 대문자로 변형
print(python[0].isupper()) # 0번째에 있는 문자가 대문자인지 확인
print(len(python)) # len은 문자가 몇개 있는지 확인
print(python.replace("Python", "Java")) # 다른 문자를 대입하여 변형

index = python.index("n") # n이라는 문자가 몇번째에 있는지 확인
print(index)
index = python.index("n", index + 1) # 2번째 n이 몇번째에 있는지 확인
print(index)

print(python.find("Java")) # 자바라는 문자가 없기 때문에 없다는 표시로 -1이 입력 됨
#print(python.index("Java"))
print("hi")

print(python.count("n")) # n이라는 문자가 몇개 있는지 카운트

2일차

문자열포맷

#print("a" + "b")
#primt("a", "b")

#방법 1
#print("나는 %d살입니다." % 20)
#print("나는 %s을 좋아해요." % "파이썬")
#print("Apple 은 %c로 시작해요." % "A")
#%s
#print("나는 %s살입니다." % 20)
#print("나는 %s색과 %s색을 좋아해요." % ("파란", "빨간"))

#방법 2
#print("나는 {}살입니다.".format(20))
#print("나는 {}색과 {}색을 좋아해요.".format("파란", "빨간"))
#print("나는 {0}색과 {1}색을 좋아해요.".format("파란", "빨간"))
#print("나는 {1}색과 {0}색을 좋아해요.".format("파란", "빨간"))

#방법 3
#print("나는 {age}살이며, {color}색을 좋아해요.".format(age = 20, color="빨간"))
#print("나는 {age}살이며, {color}색을 좋아해요.".format(color="빨간", age = 20))

#방법 4
age = 20
color = "빨간"
print(f"나는 {age}살이며, {color}색을 좋아해요.")

탈출문자

#\n : 줄바꿈
#print("백문이 불여일견\n백견이 불여일타")

#\" \' : 문장내에서 따음표
#저는 "나도코딩"입니다.
#print("저는 '나도코딩'입니다.")
#print("저는 "나도코딩"입니다.")
#print("저는 \"나도코딩\"입니다.")
#print("저는 \'나도코딩\'입니다.")

#\ : 문장 내에서 \
#print("C:\Users\Nadocoding\Desktop\PythonWorkspace>")

#\r : 커서를 맨 앞으로 이동
#print("Red Apple\rPine")

#\b : 백스페이스 (한 글자 삭제)
#print("Redd\bApple")

#\t : 탭
#print("Red\tApple")

퀴즈

Quiz) 사이트별로 비밀번호를 만들어 주는 프로그램을 작성하시오

예) http://naver.com
규칙1 : http:// 부분은 제외 => naver.com
규칙2 : 처음 만나는 점(.) 이후 부분은 제외 => naver
규칙3 : 남은 글자 중 처음 세자리 + 글자 갯수 + 글자 내 'e' 갯수 + "!" 로 구성
(nav) (5) (1) (!)
예) 생성된 비밀번호 : nav51!

url = "http://youtube.com"
my_str = url.replace("http://", "") #규칙1
#print(my_str)
my_str = my_str[:my_str.index(".")] #규칙2
#my_str[0:5] -> 0 ~ 5 직전까지. (0, 1, 2, 3, 4)
#print(my_str)
password = my_str[:3] + str(len(my_str)) + str(my_str.count("e")) + "!"
print("{0} 의 비밀번호는 {1} 입니다.".format(url, password))

리스트

#리스트 []

#지하철 칸별로 10명, 20명, 30명
#subway1 = 10
#subway2 = 20
#subway3 = 30

#subway = [10, 20, 30]
#print(subway)

#subway = ["유재석", "조세호", "박명수"]
#print(subway)

#조세호씨가 몇 번째 칸에 타고 있는가?
#print(subway.index("조세호"))

#하하씨가 다음 정류장에서 다음 칸에 탐
#subway.append("하하")
#print(subway)

#정형돈씨를 유재석 / 조세호 사이에 태워봄
#subway.insert(1, "정형돈")
#print(subway)

#지하철에 있는 사람을 한 명씩 뒤에서 꺼냄
#print(subway.pop())
#print(subway)

#print(subway.pop())
#print(subway)

#print(subway.pop())
#print(subway)

#같은 이름의 사람이 몇 명 있는지 확인
#subway.append("유재석")
#print(subway)
#print(subway.count("유재석"))

#정렬도 가능
#num_list = [5,2,4,3,1]
#num_list.sort()
#print(num_list)

#순서 뒤집기 가능
#num_list.reverse()
#print(num_list)

#모두 지우기
#num_list.clear()
#print(num_list)

#다양한 자료형 함께 사용
num_list = [5,2,4,3,1]
mix_list = ["조세호", 20, True]
#print(mix_list)

#리스트 확장
num_list.extend(mix_list)
print(num_list)

사전

cabinet = {3:"유재석", 100:"김태호"}
#print(cabinet[3])
#print(cabinet[100])

#print(cabinet.get(3))
#print(cabinet[5])
#print(cabinet.get(5))
#print(cabinet.get(5, "사용가능"))
#print("hi")

#print(3 in cabinet) #True
#print(5 in cabinet) #False

cabinet = {"A-3":"유재석", "B-100":"김태호"}
print(cabinet["A-3"])
print(cabinet["B-100"])

#새 손님
print(cabinet)
cabinet["A-3"] = "김종국"
cabinet["C-20"] = "조세호"
print(cabinet)

#간 손님
del cabinet["A-3"]
print(cabinet)

#key 들만 출력
print(cabinet.keys())

#value 들만 출력
print(cabinet.values())

#key, value 쌍으로 출력
print(cabinet.items())

#목욕탕 폐점
cabinet.clear()
print(cabinet)

3일차

튜플

menu = ("돈까스", "치즈까스")
print(menu[0])
print(menu[1])

#menu.add("생선까스")

#name = "김종국"
#age = 20
#hobby = "코딩"
#print(name, age, hobby)

(name, age, hobby) = ("김종국", 20, "코딩")
print(name, age, hobby)

세트

#집합 (set)
#중복 안됨, 순서 없음
my_set = {1,2,3,3,3}
print(my_set)

java = {"유재석", "김태호", "양세형"}
python = set(["유재석", "박명수"])

#교집합 (java 와 python 을 모두 할 수 있는 개발자)
print(java & python)
print(java.intersection(python))

#합집합 (java 할 수 있거나 python 할 수 있는 개발자)
print(java | python)
print(java.union(python))

#차집합 (java 할 수 있지만 python 은 할 줄 모르는 개발자)
print(java - python)
print(java.difference(python))

#python 할 줄 아는 사람이 늘어남
python.add("김태호")
print(python)

#java 를 잊었어요
java.remove("김태호")
print(java)

자료구조의 변경

#자료구조의 변경
#커피숍
menu = {"커피", "우유", "주스"}
print(menu, type(menu))

menu = list(menu)
print(menu, type(menu))

menu = tuple(menu)
print(menu, type(menu))

menu = set(menu)
print(menu, type(menu))

type에 따라 결과값이 소,중,대 괄호로 나온다.

퀴즈

#Quiz) 당신의 학교에서는 파이썬 코딩 대회를 주최합니다.
참석률을 높이기 위해 댓글 이벤트를 진행하기로 하였습니다.
댓글 작성자들 중에 추첨을 통해 1명은 치킨, 3명은 커피 쿠폰을 받게 됩니다.
추첨 프로그램을 작성하시오.

조건1 : 편의상 댓글은 20명이 작성하였고 아이디는 1~20 이라고 ㄱ자ㅓㅇ
조건2 : 댓글 내용과 상관 없이 무작위로 추첨하되 중복 불가
조건3 : random 모듈의 shuffle 과 sample 을 활용

from random import *
users = range(1, 21) # 1부터 20까지 숫자를 생성
#print(type(users))
users = list(users)
#print(type(users))

print(users)
shuffle(users)
print(users)

winners = sample(users, 4) # 4명 중에서 1명은 치킨, 3명은 커피

print(" -- 당첨자 발표 --")
print("치킨 당첨자 : {0}".format(winners[0]))
print("커피 당첨자 : {0}".format(winners[1:]))
print(" -- 축하합니다 -- ")

if(분기)

#weather = input("오늘 날씨는 어때요? ")
#if weather == "비" or weather == "눈"
#print("우산을 챙기세요")
#elif weather == "미세먼지":
#print("마스크를 챙기세요")
#else:
#print("준비물 필요 없어요")

temp = int(input("기온은 어때요? "))
if 30 <= temp:
print("너무 더워요. 나가지 마세요")
elif 10 <= temp and temp < 30:
print("괜찮은 날씨에요")
elif 0 <= temp and temp < 10:
print("외투를 챙기세요")
else:
print("너무 추워요. 나가지 마세요")

elif = if외 다른 값을 넣을때
else = 지정한 값 외 다른 값들이 나올 때

for

#print("대기번호 : 1")
#print("대기번호 : 2")
#print("대기번호 : 3")
#print("대기번호 : 4")

#randrange()
for waiting_no in range(1, 6): #1, 2, 3, 4, 5
print("대기번호 : {0}".format(waiting_no))

starbucks = ["아이언맨", "토르", "아이엠 그루트"]
for customer in starbucks:
print("{0}, 커피가 준비되었습니다.".format(customer))

for = 여러번 지정해야 하는 것들을 한번에 지정하기 위함

while

#while
customer = "토르"
index = 5
while index >= 1:
print("{0}, 커피가 준비 되었습니다. {1} 번 남았어요.".format(customer, index))
index -= 1
if index == 0:
print("커피는 폐기처분되었습니다.")

customer = "아이언맨"
index = 1
while True:
print("{0}, 커피가 준비 되었습니다. 호출 {1} 회".format(customer, index))
index += 1

customer = "토르"
person = "Unknown"

while person != customer :
print("{0}, 커피가 준비 되었습니다.".format(customer))
person = input("이름이 어떻게 되세요? ")

while = 어떤 조건이 맞을 때 까지 반복하라
Ctrl + c = 무한루프에 빠졌을때 프로그램을 종료

4일차

continue 와 break

absent = [2, 5] # 결석
no_book = [7] # 책을 깜빡했음
for student in range(1, 11): # 1,2,3,4,5,6,7,8,9,10
if student in absent:
continue
elif student in no_book:
print("오늘 수업 여기까지. {0}는 교무실로 따라와".format(student))
break
print("{0}, 책을 읽어봐".format(student))

continue = 더 이상 그 이후 문장 진행 x 다음 반복으로 진행
break = 반복문이 있든 없든 바로 반복문을 탈출(끝냄)

한 줄for

#출석번호가 1 2 3 4, 앞에 100을 붙이기로 함 -> 101, 102, 103, 104.
students = [1,2,3,4,5]
print(students)
students = [i+100 for i in students]
print(students)

#학생 이름을 길이로 변환
students = ["Iron man", "Thor", "I am groot"]
students = [len(i) for i in students]
print(students)

#학생 이름을 대문자로 변환
students = ["Iron man", "Thor", "I am groot"]
students = [i.upper() for i in students]
print(students)

퀴즈

Quiz) 당신은 Cocoa 서비스를 이용하는 택시 기사님입니다.
50명의 승객과 매칭 기회가 있을 때, 총 탑승 승객 수를 구하는 프로그램을 작성하시오.

조건1 : 승객별 운행 소요 시간은 5분 ~ 50분 사이의 난수로 정해집니다.
조건2 : 당신은 소요 시간 5분 ~ 15분 사이의 승객만 매칭해야 합니다.

(출력문 예제)
[0] 1번째 손님 (소요시간 : 15분)
[ ] 2번째 손님 (소요시간 : 50분)
[0] 3번째 손님 (소요시간 : 5분)
...
[ ] 50번째 손님 (소요시간 : 16분)

총 탑승 승객 : 2 분

from random import *
cnt = 0 # 총 탑승 승객 수
for i in range(1, 51): # 1 ~ 50 이라는 수 (승객)
time = randrange(5, 51) # 5분 ~ 50분 소요 시간
if 5 <= time <= 15: # 5분 ~ 15분 이내의 손님 (매칭 성공), 탑승 승객 수 증가 처리
print("[0] {0}번째 손님 (소요시간 : {1}분)".format(i, time))
cnt += 1
else: # 매칭 실패한 경우
print("[ ] {0}번째 손님 (소요시간 : {1}분)".format(i, time))

print("총 탑승 승객 : {0} 분".format(cnt))

함수

def open_account():
print("새로운 계좌가 생성되었습니다.")

open_account()

함수의 기본 공식 = def ???():

전달값과 반환값

def open_account():
print("새로운 계좌가 생성되었습니다.")

def deposit(balance, money): # 입금
print("입금이 완료되었습니다. 잔액은 {0} 원입니다.".format(balance + money))
return balance + money

def withdraw(balance, money): # 출금
if balance >= money: # 잔액이 출금보다 많으면
print("출금이 완료되었습니다. 잔액은 {0} 원입니다.".format(balance - money))
return balance - money
else:
print("출금이 완료되지 않았습니다. 잔액은 {0} 원입니다.".format(balance))
return balance

def withdraw_night(balance, money): #저녁에 출금
commission = 100 # 수수료 100원
return commission, balance - money - commission

balance = 0 # 잔액
balance = deposit(balance, 1000)
#balance = withdraw(balance, 2000)
#balance = withdraw(balance, 500)
commission, balance = withdraw_night(balance, 500)
print("수수료 {0} 원이며, 잔액은 {1} 원입니다.".format(commission, balance))

기본값

def profile(name,age, main_lang):
print("이름 : {0}\t나이 : {1}\t주 사용 언어: {2}" \
.format(name, age, main_lang))

#profile("유재석", 20, "파이썬")
#profile("김태호", 25, "자바")

#같은 학교 같은 학년 같은 반 같은 수업.

def profile(name,age=17, main_lang="파이썬"):
print("이름 : {0}\t나이 : {1}\t주 사용 언어: {2}" \
.format(name, age, main_lang))

profile("유재석")
profile("김태호")

줄바꿈 방법 : 스페이스 바 + 역슬래쉬() + 엔터

키워드값

def profile(name, age, main_lang):
print(name, age, main_lang)

profile(name="유재석", main_lang="파이썬", age=20)
profile(main_lang="자바", age=25, name="김태호")

가변 인자

#def profile(name, age, lang1, lang2, lang3, lang4, lang5):
print("이름 : {0}\t나이 : {1}\t".format(name, age), end=" ")
print(lang1, lang2, lang3, lang4, lang5)

def profile(name, age, *language):
print("이름 : {0}\t나이 : {1}\t".format(name, age), end=" ")
for lang in language:
print(lang, end=" ")
print()

profile("유재석", 20, "Python", "Java", "C", "C++", "C#", "JavaScript")
profile("김태호", 25, "Kotlin", "Swift", "", "", "")

가변 인자 = 별(*)로 시작되는 매개변수를 이용해서 활용 가능
end = 줄바꿈을 하지않고 이어서 결과값을 나오게 함

지역변수와 전역변수

gun = 10

def checkpoint(soldiers): # 경계근무
global gun # 전역 공간에 있는 gun 사용
gun = gun - soldiers
print("[함수 내] 남은 총 : {0}".format(gun))

def checkpoint_ret(gun, soldiers):
gun = gun - soldiers
print("[함수 내] 남은 총 : {0}".format(gun))
return gun

print("전체 총 : {0}".format(gun))
#checkpoint(2) # 2명이 경계 근무 나감
gun = checkpoint_ret(gun, 2)
print("남은 총 : {0}".format(gun))

퀴즈

Quiz) 표준 체중을 구하는 프로그램을 작성자들

  • 표준 체중 : 각 개인의 키에 적당한 체중

(성별에 따른 공식)
남자 : 키(m) x 키(m) x 22
여자 : 키(m) x 키(m) x 21

조건1 : 표준 체중은 별도의 함수 내에서 계산
함수명 : std_weight
전달값 : 키(height), 성별(gender)
조건2 : 표준 체중은 소수점 둘쨰자리까지 표시

(출력 예제)
키 175cm 남자의 표준 체중은 67.38kg 입니다.

def std_weight(height, gender): # 키 m 단위 (실수), 성별 "남자" / "여자"
if gender == "남자":
return height height 22
else:
return height height 21

height = 175 # cm 단위
gender = "남자"
weight = round(std_weight(height / 100, gender), 2)
print("키 {0}cm {1}의 표준 체중은 {2}kg 입니다.".format(height, gender, weight))

표준 입출력

#print("Python", "Java", sep=",", end="?")
#print("무엇이 더 재밌을까요?")

#import sys
#print("Python", "Java", file=sys.stdout)
#print("Python", "Java", file=sys.stderr)

#시험 성적
#scores = {"수학":0, "영어":50, "코딩":100}
#for subject, score in scores.items():
#print(subject, score)
#print(subject.ljust(8), str(score).rjust(4), sep=":")

#은행 대기순번표
#001, 002, 003, ...
for num in range(1, 21):
print("대기번호 : " + str(num).zfill(3))

answer = input("아무 값이나 입력하세요 : ")
answer = 10
print(type(answer))
#print("입력하신 값은 " + answer + "입니다.")

zfill = 제트 필 뒤에 괄호 안에 숫자를 적으면 그 숫자의 크기만큼 공간이 생긴다. 빈 공간은 0으로 채워 주기 때문에 001 이라는 숫자가 나올 수 있다.
input(심해) = input을 사용했을 때 문자열 형태로 저장이 되기 때문에 타입이 str으로 나온다.
ljust = 왼쪽 정렬, rjust = 오른쪽 정렬
sep = 큰 따음표 사이에 원하는 값을 넣고 그 같이 프로그램 쉼표 사이에 들어가게 만든다.

다양한 출력포맷

#빈 자리는 빈공간으로 두고, 오른쪽 정렬을 하되, 총 10자리 공간을 확보
print("{0: >10}".format(500))
#양수일 땐 +로 표시, 음수일 땐 -로 표시
print("{0: >+10}".format(500))
print("{0: >+10}".format(-500))
#왼쪽 정렬하고, 빈칸을 로 채움
print("{0:
<10}".format(500))
#3자리 마다 콤마를 찍어주기
print("{0:+,}".format(1000000000))
#3자리 마다 콤마를 찍어주기, +- 부호도 붙이기
print("{0:+,}".format(-1000000000))
#3자리 마다 콤마를 찍어주기, 부호도 붙이고, 자릿수 확보하기
#돈이 많으면 행복하니까 빈 자리는 ^ 로 채워주기
print("{0:^<+30,}".format(100000000))
#소수점 출력
print("{0:f}".format(5/3))
#소수점 특정 자리수 까지만 표시 (소수점 3째 자리에서 반올림)
print("{0:.2f}".format(5/3))

5일차

파일 입출력

score_file = open("score.txt", "w", encoding="utf8")
#txt는 파일명, w는 write 쓰기 위한 목적이란 의미, utf8은 한글을 적을 때 버그가 나지 않도록
print("수학 : 0", file=score_file)
print("영어 : 50", file=score_file)
score_file.close() #스코어라는 파일에 위의 프린트 문들의 결과값을 나타 냄

score_file = open("score.txt", "a", encoding="utf8")
#다른 파일의 뒤를 이어 작성 하고 싶을 때 a를 사용
score_file.write("과학 : 80")
score_file.write("\n코딩 : 100")
score_file.close()

score_file = open("score.txt", "r", encoding="utf8")
print(score_file.read())
score_file.close() # 스코어 파일에 있는 모든 내용들을 원본 파일로 불러드림
#r은 읽기 위한 목적이란 의미

score_file = open("score.txt", "r", encoding="utf8")
print(score_file,readline()) # 줄별로 읽기, 한 줄 읽고 커서는 다음 줄로 이동(위의 방법과 다르게 하나씩 가져옴)
print(score_file,readline())
print(score_file,readline())
print(score_file,readline(), end="") = # 줄바꿈을 하고 싶지 않을 때 end 사용법
score_file.close()

score_file = open("score.txt", "r", encoding="utf8")
while True:
line = score_file.readline()
if not line:
break
print(line) # 위와 마찬가지로 줄바꿈 하기 싫을 경우 )괄호를 지우고 , end="") 를 입력
score_file.close()
#while로 무한루프 반복문을 설정 후 라인이 없을 경우 break로 탈출하게 만든다.

score_file = open("score.txt", "r", encoding="utf8")
lines = score_file.readlines() # list 형태로 저장
for line in line:
print(line, end="")
score_file.close()

pickle

import pickle
profile_file = open("profile.pickle", "wb") # pickle 을 쓰기 위해선 w뒤에 b를 추가로 덮붙여 줘야 한다.
profile = {"이름":"박명수", "나이":30, "취미":["축구", "골프", "코딩"]}
print(profile)
pickle.dump(profile, profile_file) # profile 에 있는 정보를 file 에 저장
profile_file.close()
#profile.pickle 이란 파일이 생성 됨
profile_file = open("profile.pickle", "rb")
profile = pickle.load(profile_file) # file 에 있는 정보를 profile 에 불러오기
print(profile)
profile_file.close()

with

import pickle

with open("profile.pickle", "rb") as profile_file:
print(pickle.load(profile_file))

with open("study.txt", "w", encoding="utf8") as study_file:
study_file.write("파이썬을 열심히 공부하고 있어요")
#스터디 파일을 새로 만들면서 파일 안에 '파이썬을 열심히 공부하고 있어요' 라는 문장을 입력

with open("study.txt", "r", encoding="utf8") as study_file:
print(study_file.read())
#스터디파일에 적힌 문장을 현재 쓰고 잇는 곳 혹은 다른 곳에 불러오기

퀴즈

Quiz) 당신의 회사에서는 매주 1회 작성해야 하는 보고서가 있습니다.
보고서는 항상 아래와 같은 형태로 출력되어야 합니다.

  • X 주차 주간보고 -
    부서 :
    이름 :
    업무 요약 :

1주차부터 50주차까지의 보고서 파일을 만드는 프로그램을 작성하시오.

조건 : 파일명은 '1주차.txt', '2주차.txt', ... 와 같이 만듭니다

for i in range(1, 51):
with open(str(i) + "주차.txt", "w", encoding="utf8") as report_file:
report_file.write("- {0} 주차 주간보고 - ".format(i))
report_file.write("\n부서 :")
report_file.write("\n이름 :")
report_file.write("\n업무 요약 :")

클래스

#마린 : 공격 유닛, 군인. 총을 쏠 수 있음

name = "마린" # 유닛의 이름
hp = 40 # 유닛의 체력
damage = 5 # 유닛의 공격력

print("{0} 유닛이 생성되었습니다.".format(name))
print("체력 {0}, 공격력 {1}\n".format(hp,damage))

#탱크 : 공격 유닛, 탱크. 포를 쏠 수 있는데, 일반 모드 / 시즈 모드.
tank_name = "탱크"
tank_hp = 150
tank_damage = 35

print("{0} 유닛이 생성되었습니다.".format(tank_name))
print("체력 {0}, 공격력 {1}\n".format(tank_hp,tank_damage))

tank2_name = "탱크"
tank2_hp = 150
tank2_damage = 35

print("{0} 유닛이 생성되었습니다.".format(tank2_name))
print("체력 {0}, 공격력 {1}\n".format(tank2_hp,tank2_damage))

def attack(name, location, damage):
print("{0} : {1} 방향으로 적군을 공격 합니다. [공격력 {2}]".format( \
name, location, damage))

attack(name, "1시", damage)
attack(tank_name, "1시", tank_damage)
attack(tank2_name, "1시", tank2_damage)

class Unit:
def init(self, name, hp, damage):
self.name = name
self.hp = hp
self.damage = damage
print("{0} 유닛이 생성 되었습니다.".format(self.name))
print("체력 {0}, 공격력 {1}".format(self.hp, self.damage))

marine1 = Unit("마린", 40, 5)
marine2 = Unit("마린", 40, 5)
tank = Unit("탱크", 150, 35)

init(양 옆에 언더 바 2개씩)

개체가 만들어질 떄 init은 자동으로 호출되는 부문이다.
개체 = 클래스로 부터 만들어 지는 것
marine3 = Unit("마린")
marine3 = Unit("마린", 40)
이런식으로 init 뒤에 3가지 명시 중 하나라도 빠져있으면 에러가 난다.

멤버 변수

#레이스는 공중 유낫, 비행기. 클로킹 (상대방에게 보이지 않음)
wraith1 = Unit("레이스", 80, 5)
print("유닛 이름 : {0}, 공격력 : {1}".format(wraith1.name, wraith1.damage))

#마인드 컨트롤 : 상대방 유닛을 내 것으로 만드는 것 (빼앗음)
wraith2 = Unit("빼앗은 레이스", 80, 5)
wraith2.clocking = True

if wraith2.clocking == True:
print("{0} 는 현재 클로킹 상태입니다.".format(wraith2.name))

멤버 변수란? : 어떤 클래스 내에서 정의 된 변수고, 그 변수를 가지고 내가 초기화 및 사용 가능

메소드

class Unit:
def init(self, name, hp, damage):
self.name = name
self.hp = hp
self.damage = damage
print("{0} 유닛이 생성 되었습니다.".format(self.name))
print("체력 {0}, 공격력 {1}".format(self.hp, self.damage))

#공격 유닛
class AttackUnit:
def init(self, name, hp, damage):
self.name = name
self.hp = hp
self.damage = damage

def attack(self, location):
    print("{0} : {1} 방향으로 적군을 공격 합니다. [공격력 {2}]"\
        .format(self.name, location, self.damage))
    
def damaged(self, damage):
    print("{0} : {1} 데미지를 입었습니다.".format(self.name, damage))
    self.hp -= damage
    print("{0} : 현재 체력은 {1} 입니다.".format(self.name, self.hp))
    if self.hp <= 0:
        print("{0} : 파괴되었습니다.".format(self.name))

#파이어뱃 : 공격 유닛, 화염방사기.
firebat1 = AttackUnit("파이어뱃", 50, 16)
firebat1.attack("5시")

#공격 2번 받는다고 가정
firebat1.damaged(25)
firebat1.damaged(25)

상속

profile
공부할수잇을까

0개의 댓글