20220915 TIL

2022. 9. 15. 21:16TIL(Today I Learnd)

    목차

어제는 좀 기었지만

오늘은 달려보자


파이썬 특강

from audioop import mul


class cal:
    def set_number(self, num1, num2):
        self.num1 = num1
        self.num2 = num2
        
    def plus(self):
        return self.num1 + self.num2
    
    def minus(self):
        return self.num1 - self.num2
    
    def multiple(self):
        return self.num1 * self.num2
    
    def divide(self):
        try:
            return self.num1 / self.num2
        except ZeroDivisionError:
            print('0으로 못나눠')
while True:
    try:
        num1, num2 = [int(x) for x in input().split(" ")]
        break
    except ValueError:
        print('숫자만')
            

cal = cal()
cal.set_number(num1, num2)
print(cal.plus())
print(cal.minus())
print(cal.multiple())
print(cal.divide())

 

___이해가 필요한 부분___

파라미터

아규먼트

return

None: ""이거랑 비슷한데 진짜 아무것도 아닌거 str이 비어있는것도 아님

add함수

docstring

set

pprint

___

option

*args(아규먼트) -> 튜플 ()

**kwargs(키워드아규먼트) -> 딕셔너리 {}

.get -> 딕셔너리에 없는 key 가져올 때 기본값

___ -> 에러가 발생해서 실행되지 않을 케이스를 줄여주는 친구들

django 할때 쓰니까 지금 몰라도 된다고 하시는데 ㅎㅎ

 

패킹 언패킹

argument에 *을 앞에 붙이면 괄호(),[],{}를 없애준다 (가장 밖에있는 괄호 없애줌)

def add(num1, num2, num3, num4):
	return num1 + num2 + num3 + num4

a = [1. 2, 3, 4]

print(*a) # 이거랑
print(1, 2, 3, 4) # 이게 같은거가 됨

#result
# 1, 2, 3, 4

_______

 

 

 

객체지향

oop - 알아만 놔두면 된대요

instance? object?

isinstance

@property

@setter

regex(regular expression)정규표현식 # import re 

regex = re.compile(r'([A-Za-z0-9]+[.-_])*[A-Za-z0-9]+@[A-Za-z0-9-]+(\.[A-Z|a-z]{2,})+')

email regex 검색해서 그거 갖다 쓰셈

__repr__(representation)

__string__

상속


백준 8958 파이썬

문제

"OOXXOXXOOO"와 같은 OX퀴즈의 결과가 있다. O는 문제를 맞은 것이고, X는 문제를 틀린 것이다. 문제를 맞은 경우 그 문제의 점수는 그 문제까지 연속된 O의 개수가 된다. 예를 들어, 10번 문제의 점수는 3이 된다.

"OOXXOXXOOO"의 점수는 1+2+0+0+1+0+0+1+2+3 = 10점이다.

OX퀴즈의 결과가 주어졌을 때, 점수를 구하는 프로그램을 작성하시오.

입력

첫째 줄에 테스트 케이스의 개수가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, 길이가 0보다 크고 80보다 작은 문자열이 주어진다. 문자열은 O와 X만으로 이루어져 있다.

출력

각 테스트 케이스마다 점수를 출력한다.

TC = int(input()) # TestCase 입력

for _ in range(TC): # TC만큼 반복
    ox = input() # ox 입력
    score = 0 # 총점 초기화
    sum_score = 0 # 점수 더하기 초기화
    for i in ox: # ox 에 i를 대입하고 반복시킬겨
        if i =="O": # 만약 i가 "O"라면
            sum_score += 1 # 점수 더하기에 1을 중복해서 더해줘
        else:
            sum_score = 0 # 나머지 경우는 0으로 초기화 해줘
        score += sum_score # 총점에 점수더하기를 중복해서 더해줘
    print(score) # 총점 출력

 

백준 4344 파이썬

문제

대학생 새내기들의 90%는 자신이 반에서 평균은 넘는다고 생각한다. 당신은 그들에게 슬픈 진실을 알려줘야 한다.

입력

첫째 줄에는 테스트 케이스의 개수 C가 주어진다.

둘째 줄부터 각 테스트 케이스마다 학생의 수 N(1 ≤ N ≤ 1000, N은 정수)이 첫 수로 주어지고, 이어서 N명의 점수가 주어진다. 점수는 0보다 크거나 같고, 100보다 작거나 같은 정수이다.

출력

각 케이스마다 한 줄씩 평균을 넘는 학생들의 비율을 반올림하여 소수점 셋째 자리까지 출력한다.

HowManyClass = int(input()) # 검사할 반 갯수 입력

for _ in range(HowManyClass): # 반복문
    student_score = list(map(int, input().split(" "))) # 학생수와 점수 리스트로 입력
    average = sum(student_score[1:])/student_score[0] # 평균 계산 (학생 점수들 / 학생수)
    
    count = 0 # 평균 이상 되는 사람 세는 변수
    for i in student_score[1:]: # 학생 점수들에 반복문 돌려
        if i > average: # i가 평균보다 높으면
            count += 1 # 1을 중복해서 더해
    
    percentage = (count/student_score[0]) * 100 # (평균이상수/학생수) * 100 변수
    print('%.3f' %percentage + '%') # 소숫점 자리수 3개까지만 해서 percentage에 %기호 붙여서 출력

 

백준 15596 파이썬

문제

정수 n개가 주어졌을 때, n개의 합을 구하는 함수를 작성하시오.

작성해야 하는 함수는 다음과 같다.

  • Python 2, Python 3, PyPy, PyPy3: def solve(a: list) -> int
    • a: 합을 구해야 하는 정수 n개가 저장되어 있는 리스트 (0 ≤ a[i] ≤ 1,000,000, 1 ≤ n ≤ 3,000,000)
    • 리턴값: a에 포함되어 있는 정수 n개의 합 (정수)
def solve(a):
    return sum(a)

아니 solve로 해라 못보고 딴걸로 하다가 계속 틀렸네 ㅎㅎ

 

백준 4673 파이썬

문제

셀프 넘버는 1949년 인도 수학자 D.R. Kaprekar가 이름 붙였다. 양의 정수 n에 대해서 d(n)을 n과 n의 각 자리수를 더하는 함수라고 정의하자. 예를 들어, d(75) = 75+7+5 = 87이다.

양의 정수 n이 주어졌을 때, 이 수를 시작해서 n, d(n), d(d(n)), d(d(d(n))), ...과 같은 무한 수열을 만들 수 있다. 

예를 들어, 33으로 시작한다면 다음 수는 33 + 3 + 3 = 39이고, 그 다음 수는 39 + 3 + 9 = 51, 다음 수는 51 + 5 + 1 = 57이다. 이런식으로 다음과 같은 수열을 만들 수 있다.

33, 39, 51, 57, 69, 84, 96, 111, 114, 120, 123, 129, 141, ...

n을 d(n)의 생성자라고 한다. 위의 수열에서 33은 39의 생성자이고, 39는 51의 생성자, 51은 57의 생성자이다. 생성자가 한 개보다 많은 경우도 있다. 예를 들어, 101은 생성자가 2개(91과 100) 있다. 

생성자가 없는 숫자를 셀프 넘버라고 한다. 100보다 작은 셀프 넘버는 총 13개가 있다. 1, 3, 5, 7, 9, 20, 31, 42, 53, 64, 75, 86, 97

10000보다 작거나 같은 셀프 넘버를 한 줄에 하나씩 출력하는 프로그램을 작성하시오.

입력

입력은 없다.

출력

10,000보다 작거나 같은 셀프 넘버를 한 줄에 하나씩 증가하는 순서로 출력한다.

 

# 셀프넘버 만드는 기계
def d(n): # 함수 d
    new_n = n # new_n의 값에 n을 대입
    for num in str(n): # n을 문자열로 바꾸고 num을 대입하여 반복문 실행 
        new_n += int(num) # new_n = new_n + int(num)
    return new_n

# all_numbers = [] # list 변수 선언
# for i in range(1 ,10001): # 1~10000까지 i를 대입하여 반복문
#     all_numbers.append(i) # all_number에 1~10000까지 추가

# 1~10000까지 전체숫자
all_numbers = [x for x in range(1, 10001)] # 위와 동일한 코드

# 셀프넘버 아닌 숫자 거르기
for i in range(1, 10001): # 1~10000까지 i 안에 넣어 반복해
    not_a_self_number = d(i) # 셀프넘버 아닌 숫자 = d기계에 i 대입해서 가동시켜
    if not_a_self_number in all_numbers: # 만약 셀프넘버 아닌 숫자가 모든 숫자에 있으면
        all_numbers.remove(not_a_self_number) # 모든숫자에서 셀프넘버 아닌 숫자를 제거한다 .
        
for number in all_numbers: # 모든숫자에 number를 대입하여 반복문 한개씩 출력하니 엔터처리됨
    print(number) # 나온 숫자 출력

함수를 작동시키는 원리를 잘 몰랐는데 이 문제 풀면서 이해가 조금 된 것 같다.

함수를 변수를 작동시키는 기계로 생각하는데 까지 너무 오랜 시간이 걸린 것 같지만

그래도 지금이라도 이해 했음 됐지 하하핳

 


오늘도 소스트리에서 암호키 인증오류가 발생하고 푸쉬도 안되고 풀도 안되고 승질머리가 하늘까지 닿겠네

 

그거 해결한다고 또 시간 날렸지만 해결이 안됐다.

 

인증키 다시 받아서 로그인 했는데 안됨 하...

 

그렇다고 소중한 내 맥북을 부술 수는 없고 아... 진짜 비대면이라는게 조금 서러워지는 느낌이야

 

그래도 해보자고

 

그리고 집중력이 조금씩 오르고 있는거 같기도 하다

 

1문제 풀면 1시간 쉬어줘야 됐는데 이제는 2문제 풀면 1시간 쉬어주면 되는 것 같다 ㅎㅎ

 

남들보다 조금 천천히 하더라도 함수 사용하는 방법은 이해하고 넘어가고 싶다.

 


 

'TIL(Today I Learnd)' 카테고리의 다른 글

20220917 TIL  (0) 2022.09.17
20220916 TIL  (1) 2022.09.17
20220914 TIL  (0) 2022.09.15
20220913 TIL  (0) 2022.09.13
20220912 TIL  (0) 2022.09.13