개발 공부 일지/Python

개발 공부 일지[나도코딩/ 파이썬 기본편] - 독학 2일차

yelimu 2024. 6. 4. 16:59

https://www.inflearn.com/course/%EB%82%98%EB%8F%84%EC%BD%94%EB%94%A9-%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EA%B8%B0%EB%B3%B8

 

[지금 무료] 파이썬 무료 강의 (기본편) - 6시간 뒤면 나도 개발자 | 나도코딩 - 인프런

나도코딩 | 6시간. 여러분이 파이썬 개발자가 되는데 필요한 시간입니다. 핵심 내용만 선정 / 챕터마다 퀴즈 & 해설 / 실생활 기반 예제로 아주 쉽게 설명합니다. 그리고 완전 무료입니다., 배우지

www.inflearn.com

강의명 : 파이썬 무료 강의 (기본편) - 6시간 뒤면 나도 개발자

수강 기한 : 무제한

강의 구성 : 71강

시작일 : 2024.6.3.

커리큘럼 :

[기본편]

1. 기본문법 

1) 자료형 (6/3 학습)

2) 연산자  (6/3 학습)

3) 문자열처리  (6/3 학습)

4) 자료구조  (6/3 학습)

5) 제어문 (6/4 학습)

6) 함수  (6/4 학습)

7) 입출력 (6/4 학습)

8) 클래스 

9) 예외처리

10) 모듈과 패키지

 

2. 실생활 기반 예제

3. 퀴즈 


5) 제어문 


#
If

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

 

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

 

input값을 집어넣으면 그 값의 범위에 따라 다른 조건문이 시행된다


for waiting_no in [1,2,3,4]:
    print("대기 번호 : {}".format(waiting_no))

   
for waiting_no in range(1, 10): # 1~ 9
    print("대기 번호 : {}".format(waiting_no))

starbucks = ["토르", "슈퍼맨", "그루트"]
for customer in starbucks:
    print("{0}님, 주문하신 커피 나왔습니다".format(customer))

 

for A in [ ] : 

 

for A in range( ) : # 시작점 ~ 끝점+1 (시작점을 미지정시 0 ~ ) 

 

A = [ ] 

for a in A : 

A라는 리스트 안의 개체?들을 a 로 지정?하는 개념..

#while
customer = "철수"
index = 5
while (index >= 1):
    print("{0}, 커피 나왔습니다. {1}번 남았습니다".format(customer, index))
    index -= 1
    if index == 0:
        print("커피 처분 각")

index = 0
while True :
    print("{0}, 커피 나왔습니다. {1}번 호출했습니다".format(customer, index))
    index += 1 #무한루프 발생 > ctrl + C 로 종료

 

customer = "토르"
person = "unknown"

while person != customer : #person이 customer가 아니면 반복문을 반복. 토르가 찾아오면 반복문 탈출
    print("{0}, 커피 가져가삼".format(customer))
    person = input("이름이 머삼?") #person에 이름을 입력받기

 


#continue, break

absent = [2,5] #:결석한 학생의 번호 리스트
no_book = [7]
for student in range(1,11): #:1 ~ 10 번    
    if student in absent:
        continue # 아래 명령문을 시행하지않고 다음 번호로 넘어가게함
    elif student in no_book:
        print("수업끝.{0}는 교무실로".format(no_book))
        break #뒤의 반복문을 시행하지않고 거기서 끝냄
    print("{0}야, 책읽어라".format(student))

if와 elif에 안걸리면 for 반복문에 걸려있는 명령문이 계속 시행되는거고 

if 조건에 해당하면 continue 

elif 조건에 해당하면 break

 

#한줄 for?
#출석번호 1234 > 101 102 103 104로 변환
student = [1,2,3,4]
print (student)
student = [i+100 for i in student]
print (student)

#학생이름을 길이로 변환
student = ["iron man", "super man", "groot"]
print(student)
# student = [len(i) for i in student]
# print(student)

#학생이름을 대문자로 변환
student = [i.upper() for i in student]
print(student)

 

.upper() < 괄호 빼먹지말기

print( )

 

QUIZ.

from random import *
# time = int(random() * 45 + 5) # 난수 0~ 1.0 * 45 + 5 = 5 ~ 50
count = 0

for i in range(1, 51):
    time = randrange(5, 51)
    if 5 <= time <= 15:
        print("[o], {0}번째 손님 (소요시간 : {1})".format(i, time))
        count += 1
    else:
        print("[ ], {0}번째 손님 (소요시간 : {1})".format(i, time))
       
# #반복문 종료 후
print("총 탑승 승객 : {0}".format(count))

 

각 i (승객)에게 time을 배정해줘야한다고 생각했는데 그럴필요없이

1~50 i 마다 time이 랜덤하게 출력되면 된다 

 


6) 함수 

 

#함수 정의 하고 호출하기

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

open_account()

()좀 빼먹지말장

 


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


def withdraw(balance, money): #출금하는 함수
    if balance >= money:
        print("{0}원이 출금되었습니다. 잔액은 {1}입니다.".format(money, 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)
balnace = withdraw(balance, 500)
commission, balance = withdraw_night(balance, 400)
print("수수료는 {}원이며, 잔액은 {}원 입니다.".format(commission, balance))

 

함수에서 return 하는 이유는 뭐지?

함수 호출 할때 왜 balance = ~~ 를 붙이는거지? 그거 없어도 함수 호출은 되는데? *** balance 라는 변수를 선언 return을 통해서 반환된 값을 balance에 저장 

 

commission, balance = ~~ 하고 두개를 같이 쓰는게 뭔가 혼란스러움.. ***튜플 형식으로 두개의 값을 콤마(,)로 구분해서 반환해준다 > 이런식으로 여러개의 값을 한번에 반환할 수 있음 

 

마지막 print 는 왜 함수 안에 안넣었지? ***넣어도되는데 return이 함수를 종료하는 역할도 하기때문에 return 윗줄에 넣어줘야함 

 

# def profile(name, age, main_lang):
#     print("이름은 {0}, 나이는 {1}, 주 개발언어는 {2}입니다.".format(name, age, main_lang))


# profile("유재석", 20, "java")

#기본값 설정하기
def profile(name, age=17, main_lang="파이썬"):
    print("이름은 {0}, 나이는 {1}, 주 개발언어는 {2}입니다.".format(name, age, main_lang))


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

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

#입력하는 순서가 바뀌어도 함수에서 정의한 순서대로 출력됨
profile(age=12, name="유재석", main_lang="자바")

 



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

profile("김태호", 20, "p", "a", "s", "c")

*language라는 가변 인자를 사용해서 

입력되는 값의 개수가 일정치않아도 동일한 폼으로 출력됨 

 

[전역 변수와 지역 변수 (global / local)]


gun = 10

def checkpoint(soldiers):
    gun = 20 # 값 지정을 안해주면 함수실행이 안됨 
    gun = gun - soldiers
    print("함수 안에서/ 남은 총의 개수:{0}".format(gun))

print(gun)
checkpoint(2)
print("남은 총 : {0}".format(gun))

[출력값]

10
함수 안에서/ 남은 총의 개수:18
남은 총 : 10 

 

gun = 10

def checkpoint(soldiers):
    global gun #전역 변수를 함수에서 사용함 
    gun = gun - soldiers
    print("함수 안에서/ 남은 총의 개수:{0}".format(gun))

print(gun)
checkpoint(2)
print("남은 총 : {0}".format(gun))

[출력값]

10
함수 안에서/ 남은 총의 개수:8
남은 총 : 8

 


gun = 10

def checkpoint_ret(gun, soldiers):
    gun = gun - soldiers
    print("함수 안에서/ 남은 총의 개수:{0}".format(gun))
    return gun

print(gun)
gun = checkpoint_ret(gun, 2)
print("남은 총 : {0}".format(gun))

 

함수에서 gun 변수를 받고, return 해줌으로써 전역 변수인 gun 값에 계산된 값이 반환됨

 


#QUIZ_함수: 표준체중을 구하는 프로그램 작성

def std_weight(height, gender):
    if gender == "여자":
        std_weight = round(height * height * 21 / 10000,2)
        print("{0}cm 여자의 표준체중은 {1}kg 입니다.".format(height, std_weight))
    else :
        std_weight = round(height * height * 22 / 10000,2)
        print("{0}cm 남자의 표준체중은 {1}kg 입니다.".format(height, std_weight))

std_weight(158, "여자")
std_weight(174, "남자")

 

[다른 답안 : 강의 내용]


def std_weight(height, gender):
    if gender == "남자":
        return height * height * 22
    else:
        return height * height * 21

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

공통적으로 연산하는 부분은 밖에서 한번만 적어준다.

공통적으로 출력하는 것도 한번만 적어준다 : 함수안에서 출력할 필요는 없음 

값을 입력해주는 방법이 다르다 나는 함수 변수로 바로 받았고 강의에서는 별도로 변수를 선언했음 

간결한 방식으로 코드 짜기 

 


7) 표준 입출력 

print("java", "python", sep=" & ", end="?")
print("몰랑")

 

sep= " " : 문자열 사이에 들어감 (separate)

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.ljust(4), str(score).rjust(4), sep=":")

for num in range(1,20):
    print("대기번호 : "+str(num).zfill(3))

 

sys.stdout & sys.stderr : 이건 나중에 추가적으로 찾아봐야겠음..

숫자는 str으로 감싸주기

 


answer = input("아무거나 입력하세요 : ")
# answer=10
print(type(answer))
# print("입력하신 값은 {0}입니다.".format(answer))

input으로 입력받은 값은 항상 str type임 

#다양한 출력 포맷
print("{0:$>+20,}".format(99999999999))

0: 

$빈공간채우기

정렬방향(>:오른쪽)

+ 양수음수 표시

20자릿수

, 3자리마다 콤마표시


print("{0}".format(7/6))
print("{0:f}".format(7/6))
print("{0:.3f}".format(7/6))

[출력값]

1.1666666666666667
0:f     1.166667
0:.3f    1.167

 


#파일 생성해서 내용 입력하기
score_file = open("score.txt", "w", encoding="utf8") #score_file 이라는 변수에 파일 write 모드로 읽기 utf8 해줘야 한국어 안씹힘 
print("오 짱 신 기", file=score_file)
print("파일을 만들어서 내용 입력하기", file=score_file)
score_file.close() #파일을 열면 항상 닫아줘야함 

score_file = open("score.txt", "a", encoding="utf8") #append
score_file.write("append 추가도 가능함")
score_file.write("\n 근데 print 안쓸땐 줄바꿈 따로 해줘야됨")
score_file.close()

#출력하기
score_file = open("score.txt","r",encoding="utf8") #read
print(score_file.read())
score_file.close()

#한줄씩 출력하기
score_file = open("score.txt","r",encoding="utf8")
print(score_file.readline())
print(score_file.readline())
print(score_file.readline())
print(score_file.readline())
score_file.close()

#파일이 몇줄인지 모를때 반복문 활용
score_file = open("score.txt","r",encoding="utf8")
while True:
    line = score_file.readline()
    if not line:
        break
    print(line)
score_file.close()
score_file = open("score.txt", "r", encoding="utf8")
lines = score_file.readlines() # -> list 형태로 저장
for line in lines:
    print(line, end="")
score_file.close()

나 이거 좀 신기하잖아

파일을 열어서 거기에 입력하기 !! 

그리고 그 입력한 내용도 다시 가져올수있음 

 

pickle 라이브러리

프로그램상에서 사용하고있는 데이터를 파일형태로 저장 & 불러오기 


import pickle
profile_file = open("profile.pickle", "wb") #파일 만들어주고 write binary로 정의
profile = {"이름":"박명수", "나이":30, "취미":["축구", "골프", "코딩"]} #변수에 데이터 할당
print(profile)
pickle.dump(profile, profile_file) #profile 변수에 있는 정보를 file에 저장
profile_file.close()

profile_file = open("profile.pickle", "rb")
profile = pickle.load(profile_file) #파일에 있는 정보를 profile에 불러옴
print(profile)
profile_file.close()

 


import pickle

with open("profile.pickle","rb") as profile_file:
    print(pickle.load(profile_file))
    #with 사용시 별도의 close 필요없음

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())

 

with를 써서 파일 쓰고 읽기 : 2줄로 쌉가능 

 


for i in range (1, 51):
    week_file = open(str(i) +"주차.txt", "w", encoding="utf8")
    print("-"+ str(i)+"주차 주간 보고 - \n 부서 : \n 이름: \n 업무 요약 : ", file=week_file)
    week_file.close()
# 왜 .format 쓰면 실행이 안되나요?
# 왜 하나의 프린트문 안에서 줄바꿈 하지않고 프린트문을 다 따로 써줘야하나요?
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 업무 요약:")

[내 풀이]

[강의 풀이]

format은 프린트문안에서만 쓰는건강?

강의에서는 file close를 안하기위해 with로 풀이