포스팅 썸네일 이미지

Coding_Algorithm/Python

[Python 2] input() 취약점에 대하여

0. 조사하게 된 계기 CTF문제를 풀다가 엄청난걸 알아냈습니다 python2에 한해서 input함수는 eval(raw_input(prompt))로 실행된다는 사실이요. 일단 eval함수 자체가 보안측면에서 봤을 때는 위험한 함수죠. (명령어를 실행시킬 수 있는 함수인지라) 그래서 조금 더 찾아봤는데 생각보다 뭐가 많더라구요! 그래서 정리할 겸 찾아봤습니다. 1. input함수 자체에 대하여 일단 input함수 자체에 대해서 조금 탐구를 해봅시다. python2에서 이 함수의 가장 큰 특징은 "알아서 형변환"을 해준다는 점입니다. 직접 확인해봅시다 s1 = input("input()>> ") print(type(s1)) s2 = input("input()>> ") print(type(s2)) s3 = i..

2021.05.17 게시됨

 포스팅 썸네일 이미지

Coding_Algorithm/Python

[Python] is에 대해서, 그리고 재미있는 문제 하나

1. 비교연산자 'is'에 대하여 is는 python에서 ==과 더불어 python에서 쓸 수 있는 비교문 중 하나입니다. 두 비교문의 차이는 다음과 같습니다. is는 변수가 같은 Object(객체)를 가리키면 True ==는 변수가 같은 Value(값)을 가지면 True is는 객체 자체를 본다면, ==는 값을 확인합니다. 이렇게만 하면 감이 안오기때문에 직접 예시로 봅시다. 우선 간단한 ==예시를 보여드리겠습니다. 너무나도 당연한 과정이죠? 그럼 같은 예시를 is를 가지고 해봅시다. is는 "값"이 같은지 보는게 아니라, "객체"가 같은지 확인해서 그렇습니다. 비록 같은 값이여도, 다른 객체(object)이기 때문에 False를 반환하는 것을 볼 수 있습니다. 이외는 직접 코드를 작성해주시면서 확인하..

2021.04.11 게시됨

 포스팅 썸네일 이미지

Coding_Algorithm/Python

[Python] 레퍼런스(reference)에 대해서

안녕하세요, 오늘은 레퍼런스에 대해서 이야기하려고 합니다. 공부하다가 흥미로운 점을 찾아서유 0. 레퍼런스란? 우선 레퍼런스가 뭔지부터 알아봅시다. C언어와 달리 Python에서는 "주소"라는 개념이 없습니다. 대신 레퍼런스라는 개념이 있고, 이 레퍼런스를 얻기 위해서는 id()함수를 사용합니다. 아래 정의를 봅시다. id(object) Return the “identity” of an object. This is an integer which is guaranteed to be unique and constant for this object during its lifetime. Two objects with non-overlapping lifetimes may have the same id() valu..

2021.04.10 게시됨

 포스팅 썸네일 이미지

Coding_Algorithm/Python

[Python 함수정리] 숫자 반올림하고싶을때 :: round

:: Python 함수정리 :: round() round함수는 반올림을 해주는 함수입니다. 조금 다른점이 있다면 우리는 0.5이상을 반올림해주는데, 이 함수는 0.5초과를 해야 반올림 처리가 되더군요.. 제 상식의 문제인지 이 함수가 그렇게 짜여진 건지는 잘 모르겠습니다. print(round(10.5)) print(round(10.2)) print(round(4.5)) print(round(0.66)) print(round(-0.33)) print(round(-0.6)) printround(-10.01)) 10 10 4 1 0 -1 -10 실습은 repl.it 5.2를 참고하도록 하겠습니다. 보면 문자열을 반반 나누어서 뒤의 반토막을 먼저 출력하라는 문제인데, if문을 쓰지 말라고해서 round함수를 ..

2020.03.19 게시됨

 포스팅 썸네일 이미지

Coding_Algorithm/Python

[repl.it] 4.7. For: Number of zeros Solutions/풀이

몇개를 입력받을지 입력받아 정한 후, 0이라고 입력한 갯수를 세라고 하네요. N = int(input()) cnt=0 for i in range(N): if(int(input()) == 0): cnt += 1; print(cnt) 사실 if문 조건을 저렇게 괄호로 안씌워줘도 됩니다. 근데 C언어를 하던 관성이 남아있어서.. 아 참고로 python3에서는 C언어에서의 ++이 없다는거 알아두세요. (1을 더해주는 기능)

2020.03.17 게시됨

Coding_Algorithm/Python

Python에서 for문으로 감산하기

python에서는 for문을 이용하면 보통 for (변수) in (범위)의 꼴로 많이 이용을 하고, 특히 for i in range(0, 10): print(i, end=" ") 의 방식으로 주로 사용합니다. 하지만 이 방법은 증가에만 해당이 되고, 감산을 할 수 있는 방법은 없습니다. for i in range(10, 0): print(i, end=" ") 의 식은 실제로 python에서 돌아가지 않습니다. 이와 같은 문제는 2가지로 해결할 수 있는데요, 1. 증가 폭을 음수로 지정하기 >>> for i in range(10, 0, -1): # 10에서 1까지 역순으로 숫자 생성 ... print('Hello, world!', i) ... Hello, world! 10 Hello, world! 9 He..

2019.05.21 게시됨