0219 TIL ☃️

looggi·2023년 2월 18일
0

TILs

목록 보기
6/114
post-thumbnail

파이썬

파이썬 파일의 실행

☃️해당 파일 실행

해당 파일의 __name__변수에 __main__의 값(파일이름)이 저장된다

  • 함수내에 if __name__ == "__main__"을 사용하면 직접 이 파일을 실행했을 때(ex.터미널에 python filename.py 명령어 입력해서 실행)는 조건문이 True이므로 if문 다음 문장이 수행된다.
  • __main__: 현재 실행되고 있는 파이썬 파일

☃️다른 파일/셸에서 모듈로 실행

from 파일이름(==모듈) import 모듈함수

  • 대화형 인터프리터(셸)나 다른 파일에서 모듈을 불러서 사용할 때는 if __name__ == "__main__"이 거짓이 되어 이하 문장이 수행되지 않는다. → 모듈 내의 함수가 임포트와 동시에 사용되지 않는다

    *모듈: 파일이름.py
    *모듈 함수: 파일안에 정의된 함수들

sys.path에 해당 함수가 정의된 파일의 디렉터리를 추가하면 아무 곳에서나 불러 사용할 수 있다.

  • sys.path.append("C:/doit/mymod")
  • sys.path: 파이썬 라이브러리가 설치되어 있는 디렉터리

PYTHONPATH 환경 변수를 활용할 수도 있다

C:\doit>set PYTHONPATH=C:\doit\mymod

https://wikidocs.net/29

프로그래머스 문제풀기

➡️ 크기가 작은 부분 문자열

def solution(t, p):
    plen=len(p)
    count=0
    for i in range(len(t)-plen+1):
        if t[i]<p[0]:
            count+=1
        elif t[i]==p[0]:
            if int(t[i:i+plen])<=int(p):
                count+=1
    return count
  • 문자열을 다시 숫자로 바꿔야할 필요가 있어서 그냥 str 그대로 사용함
  • p의 첫자리 숫자랑 비교해서 숫자가 같거나 더 작은 경우 count+=1을 해준다.
  • 숫자가 더 작은 경우 길이가 p만큼 안나올 경우를 생각해줘야해서 range에서 범위 조정을 해줬고
  • 숫자가 같은 경우 크기를 비교해야해서 int로 변환 후 수 크기 비교를 했다.
    p의 길이가 길지 않으면 다음 자릿수를 계속해서 비교하는 것도 괜찮을 것 같다.
  • range를 그대로 두는 경우
    if not i+plen>len(t):if i+plen-1<=len(t)-1 를 두 경우 모두에 추가해줌
    t[i:i+plen]의 인덱스와 t의 마지막 인덱스를 비교한건데 -1을 빼야 실제 인덱스 값이지만 어차피 둘 다 -1을 하거나 안하거나라서 할 필요는 없는듯

근데 첨부터 첫번째 값을 비교 안하고 촤라락 다 비교해버릴 수도 있는 것이다...

def solution(t, p):
    answer = 0
    for i in range(len(t) - len(p) + 1):
        if int(p) >= int(t[i:i+len(p)]):
            answer += 1

    return answer
def solution(t, p):
    return len([t[i: i+len(p)] for i in range(len(t)-len(p)+1) if int(t[i: i+len(p)]) <= int(p)])

아니면 그것을 리스트 축약식으로 구현해서 그 리스트의 길이를 리턴해버리는....ㅎ

profile
looooggi

0개의 댓글