25. 04. 24 공부일지

behumble·2025년 5월 1일

공부일지

목록 보기
2/20

회고

  • 흐름을 어느정도 파악해도 적지를 못하고 있다. 한글의 가나다라를 외우듯이 파이썬의 기초문법들은 계속 반복하여 체화해야겠다. 사람마다 코딩스타일이 정말 다양하다고 느낀다. 강사님, 옆자리친구, 나의 코드가 전부 다르다. 대중적으로 사용할 수 있는 나의 코딩스타일을 확실하게 만들고 싶다.

필기

성적처리프로그램

  • 입력/계산/출력의 순서를 생각하는 것을 잊지 말자.
  • Print(X,Y,Z)를 통해 여러값을 한번에 출력 가능!
#입력
stu_name = input("당신의 이름은?")
stu_kor = int(input("국어?"))
stu_eng = int(input("영어?"))
stu_math = int(input("수학?"))

#계산 수식 - 수학의 경우는 좌변과 우변을 바꿀 수 있다. 프로그램의 경우는 좌변은 언제나 변수만 가능하다.
stu_total = stu_kor + stu_eng + stu_math
stu_average = stu_total//3
print(stu_name, stu_total, stu_average)

m를 km와 m로 변환하기

  • 몫과 나머지를 활용한 변환
  • 1차원적으로 어떤 값을 출력해야하는지에 초점을 더 맞춰보자.
question = 2300
kilo_meter = question// 1000
meter = question % 1000
print(str(kilo_meter) + "km와 " + str(meter) + "m 입니다.")

사다리꼴 면적 구하기

  • 정수값을 입력할 때 int 사용하기
  • 입력 : 윗변, 아랫변, 높이
  • 계산 : 면적 = (윗변+아랫변) * 높이 / 2
above = int(input("윗변의 길이를 입력하세요"))
below = int(input("아랫변의 길이를 입력하세요"))
height = int(input("높이를 입력하세요"))
area = (above + below) * height / 2
print("사다리꼴의 넓이는 " + str(area) + " 입니다")

철수가 산 과일의 총 금액은?

  • str(total_cost)을 통해 숫자열을 문자열로 변환하여 출력
  • 입력 : 사과와 배의 개수
  • 계산 : 사과와 배의 가격, 가격의 합계
apple = 5000
pear = 10000
apple_num = int(input("사과 갯수를 입력하세요"))
pear_num = int(input("배의 갯수를 입력하세요"))
apple_cost = apple * apple_num
pear_cost = pear * pear_num
total_cost = apple_cost + pear_cost
print("총 금액은 " + str(total_cost) + " 원 입니다.")

거스름돈 계산하기

  • temp로 임시변수를 지정해서 계산
    - 남은 돈을 어떻게 표현해야하는지 몰랐는데 임시변수를 통해 해결했다.
use_money = int("27560")
change_money = 100000 - use_money

m50000 = change_money // 50000
temp = change_money % 50000 #temporary(임시변수)

m10000 = temp // 10000
temp = temp % 10000

m5000 = temp //5000
temp = temp % 5000

m1000 = temp // 1000
temp = temp % 1000

m100 = temp // 100
temp = temp % 100

m50 = temp // 50
temp = temp % 50

m10 = temp // 10
temp = temp % 10

print("50000 ->", m50000, "장")
print("10000 ->", m10000, "장")
print("5000 ->", m5000, "장")
print("1000 ->", m1000, "장")
print("100 ->", m100, "장")
print("50 ->", m50, "장")
print("10 ->", m10, "장")

문자열의 표현

  • 인덱싱과 슬라이싱을 통해 원하는 부분을 출력가능
  • 인덱싱을 통해 거꾸로도 출력가능
s = "Python String"
s2 = "Hello"
#여러줄에 걸칠 때는 """~""" 또는 '''~'''

s3 = """
동해물과 백두산이
마르고 닳도록
하느님이 보우하사
우리나라 만세
"""

print(s)
print(s2)
print(s3)

#인덱싱 - 0부터 시작해서 0,1,2....
print(s[0])
print(s[1])
print(s[2])
print(s[3])
#print(s[20]) #Index out of range

#슬라이싱 - [시작:종료:증감치] : 시작위치부터 증감치만큼 증가 또는 감소하면서 종료 보다 하나작게(시작 이상 종료 미만)
print(s[0:3]) #0,1,2,3 인덱스만 출력
print(s[2:6]) #2,3,4,5 인덱스만 출력, 증감치를 생략하면 +1로 생각한다.
print(s[0:6:2]) #0,2,4 인덱스만 출력, 증감치가 2이다.
print(s[7:]) #7~마지막 인덱스까지 출력, 증감치는 1이다.
print("문자열의 길이는", len(s), "입니다.") #맨 마지막 인덱스 번호는 -1이다.
print(s[len(s)-1:-1:-1]) #Python 버전에 따라서 에러메세지가 뜨기도 하고 지금처럼 아무것도 출력안한다.
print(s[len(s)-1::-1]) #정답이다.
print(s[::-1]) #생략하면 알아서 처리한다. 역순으로 출력한다

문자열의 표현

  • f"을 통한 문자열과 숫자열을 섞어서 출력가능
#escape 문자 - \n(줄바꿈), \t(탭키 작동)
s = "I like star.\nred star.\nblue star."
print(s)

s = "apple\tpear\tcherry\tbanana"
print(s)

#escape 기능을 무력화 하고자 한다. 1)\\ 2)r문자열 : 문자열 앞에 r을 붙인다.

s = "c:\\test\\temp"
print(s)

s = r"c:\test\temp"
print(s)

#문장안에 ' 나 " 가 있을 때 처리방식
s = "'I like \ 'stepany\'"

s = "I like \"stepany\""
print(s)

#다른언어의 경우는 문자는 '' 문자열은 ""
#때로는 \를 직접 출력해야 하는 경우가 있다.
s = "역슬래시(\\)는 특별한 기능을 갖는 문자이다."
print(s)

#print 사용방법
print("red", "green", "blue")
print("yellow", "cyan", "magent", sep=",")
print("red", "green", "blue", sep="\t", end="\n")

print("*" * 20)

print("=" * 40)

#문자열 포매팅 - 문자, 숫자 섞어서 문장 만들 때 사용한다.
name = "홍길동"
age = 34.5
height = 185
# %s : string의 약자
# %d : decimmal의 약자
# %f : float의 약자
# %자릿수 형식 : %.출력하려는 자리수
s = "%s의 나이는 %d입니다. 그리고 키는 %.2f 입니다." %(name,age,height)
print(s)

a = 37
print("8진수 %o"%a)
print("16진수 %x"%a)

#퍼센트로 출력하는법
print("16진수 %x%%"%a)

print("%10s %10s"% ("hi","hello")) #10자리를 확보하고 오른쪽부터 채워온다.
print("%-10s %-10s"% ("hi","hello")) #10자리를 확보하고 왼쪽부터 채워온다.

a = 3.41592
print("%f"%a)
print("%.2f"%a)
print("%7.2f"%a)

print("이름 : {0} 나이 : {1}".format(name,age))
print("이름 : {} 나이 : {}".format(name,age))
print("이름 : {name} 나이 : {age}".format(name = "김성재",age = 27))

#f string : 문자열앞에 f를 쓰고 {변수명} : 문자와 숫자를 같이 출력할 때 쓰면 유용하다. 최신식이며 요즘 트렌드이니 꼭 숙지하기!
print(f"이름 : {name} 나이 : {age}") 

#왼쪽, 오른쪽, 가운데 정렬, 공백 채우기
print("{0:<10} {1:<10}".format("hi", "hello"))
print("{0:>10} {1:>10}".format("hi", "hello"))
print("{0:^10} {1:^10}".format("hi", "hello"))
print("{0:=^10} {1:*^10}".format("hi", "hello"))

print("{0:.4f}".format(3.141592))

x = int(input("x = "))
y = int(input("y = "))
print(f"{x} + {y} = {x + y}")

문자열의 표현

  • 기초문법 외우진 못하더라도 익숙해질때까지 계속 읽고 적어보자.
s = "hobby"
print(s.count("b")) #b가 몇 개 있는가?
print(s.count("h")) #h가 몇 개 있는가?

#문자의 위치 값
print(s.find("b")) #첫번째 문자 위치 값을 반환
print(s.find("k")) #문자가 없으면 -1을 반환

s = "I like star, red star, blue star, I like star."
print(s.count("star"))
print(s.find("star"))

pos1 = s.find("star") #0번째 방부터 찾기
print(pos1)

pos2 = s.find("star, pos1+1")
print(pos2)

pos1 = s.index("like")
print(pos1)

#pos1 = s.index("love") #단어가 없으면 예외가 발생한다. 오류남
#print(pos1)

s = ",".join("abcd")
print(s)

#[] : 리스트 타입임
#[]에 전달된 단어들을 처음 "," 이 안에 있는 기호로 묶어서 문장으로 만들어주는 역할을을 한다.
s = ",".join(["cherry", "banana", "pear", "grape"])
print(s)
#위와 반대역할 문장을 -> list 타입으로 변환
words = s.split(",") #하나의 문장을 쪼갠다. -> list 타입으로 변환한다.
print(words)

print("hi".upper())
print("HI".lower())

s = "   hi  "
print("*" + s + "*",)
print("*" + s.lstrip() + "*")
print("*" + s.rstrip() + "*")
print("*" + s.strip() + "*")

#True와 False는 무조건 이대로 써야함(대소문자 변경금지)
print("python".isalpha())
print("python1".isalpha())

print("python".isdigit())
print("123".isdigit())

s = "hello" #upper 바뀐 값을 반환, 원래 값은 안바뀜
print(s.upper(), s)
s = s.upper()
print(s)

리스트

  • list의 형태와 값의 변형에 초점을 맞추자.
#성적처리 3명이면 name1, name2, name3
#list 타입이면 -> 배열
words = ["red", "green", "blue"] #list타입, 인덱싱과 슬라이싱을 지원한다.
print(words[0]) #indexing
print(words[1])
print(words[2])
print(words) #한번에 출력 가능

#새로운 단어 추가하기 : append
words.append("black")
words.append("cyan")
print(words)
print("내가 찾는 단어 개수", len(words))
print("내가 찾는 단어 개수", words.count("red"))

#단어 위치 찾기 : index
if words.count("yellow") :
    print("단어 위치 찾기", words.index("yellow"))
else:
    print("yellow는 없다")

#in연산자 "내용" in list타입 있으면 True 없으면 False를 반환한다.
if "yellow" in words:
    print("yellow 위치", words.index("yellow"))
else :
    print("yellow는 없다.")

#인덱싱 - list타입의 경우에는 인덱싱을 통해 값 변경가능, 문자열은 인덱싱을 통한 값 변경 불가
words[0] = "white"
print(words)

#extend 함수 : 리스트와 리스트를 합친다.
words.extend(["brown", "violet", "purple", "magenta"])
print(words)

#list -> str로 변경할 때 join을 사용한다.
s = ",".join(words)
print(s)

#str -> list로 변경할 때 split을 사용한다.
words2 = s.split(",")
print(words2)

numbers = [1,2,3,4,5,6,7,8,9,10]
print(numbers[0])
print(numbers[0::2])
print(numbers[::-1])
print(numbers[1::2])

#리스트 만들기
names = []
names.append("홍길동")
names.append("임꺽정")
names.append("장길산")
names.append("홍경래")
print(names)

names = list()
names.append("모란")
names.append("작약")
names.append("불두화")
names.append("목련")
print(names)

과제

문자열 연습하기(김성재풀이)

  • type의 변환에 유의하고, 배운 기초문법을 활용해 문제를 풀자.
#5-1 변수에 값 "홍길동,임꺽정,장길산,최영,윤관,강감찬,서희,이순신,남이"
names = ("홍길동,임꺽정,장길산,최영,윤관,강감찬,서희,이순신,남이")

#5-2 => list타입으로 전환해서
name_list = names.split(",") #split을 통해 ,를 기준으로 리스트로 전환
print(name_list)

#5-3 => "서희"가 몇번째에 있는지
print(name_list.index("서희"),"번째에 있습니다.") #index를 통해 서희찾기

#5-4 "이순신", "장영실" 존재여부 확인 #리스트 안에 "000"이 있는지 체크
if "이순신" in name_list:
    print("이순신이 있습니다.")
else:
    print("이순신이 없습니다.")
    
if "장영실" in name_list:
    print("장영실이 있습니다.")
else:
    print("장영실이 없습니다.")
    
#5-5 추가할 사람 : "정도전", "정약용" "최치원".... #append("")
name_list.append("정도전")
name_list.append("정약용")
name_list.append("최치원")
print(name_list)

#5-6 "서희" => "김종서"로 바꾸기 #서희의 인덱스 번호를 사용해 김종서로 바꾸기
name_list[6] = "김종서"
print(name_list)

#5-7 장길산 => 김길산으로 첫글자만 바꾸기
name_list[2] = "김길산" #그냥 장길산을 김길산으로 통으로 바꿨다.
print(name_list)

문자열 연습하기(백현숙강사님풀이)

# 문제5 문자열 연습하기

#5-1 변수에 값 "홍길동,임꺽정,장길산,최영,윤관,강감찬,서희,이순신,남이"
names = "홍길동,임꺽정,장길산,최영,윤관,강감찬,서희,이순신,남이"
print(names,type(names))

#5-2 => list타입으로 전환하기
nameList = names.split(",") #전달된 값으로 문자열을 쪼개서 list타입으로 반환한다.
print(nameList, len(nameList)) #list, 배열의 길이

#5-3 => "서희"가 몇번째에 있는지
print("서희의 위치는", nameList.index("서희"), "입니다")


#5-4 "이순신", "장영실" 존재여부 확인
if nameList.count("이순신") >0: #if 조건식의 결과가 0이 아닌 모든것 True, 나머지 False
    print("이순신이 존재한다")
else:
    print("이순신이 존재하지 않는다.")
    
if nameList.count("장영실") >0:
    print("장영실이 존재한다")
else:
    print("장영실이 존재하지 않는다.")
    
#5-5 추가할 사람 : "정도전", "정약용" "최치원"....
nameList.append("정도전")
nameList.append("정약용")
nameList.append("최치원") #또는 nameList.extend(["정도전","정약용","최치원원"])

#5-6 "서희" => "김종서"로 바꾸기
pos = nameList.index("서희")
nameList[pos] = "김종서"

#5-7 장길산 => 김길산으로 첫글자만 바꾸기
pos = nameList.index("장길산")
nameList[pos] = (nameList[pos].replace("장","김"))
print(nameList)

OT의 추억

ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ 재밌네

0개의 댓글