아하
생활

생활꿀팁

잘웃는오색조170
잘웃는오색조170

파이썬 이거 왜 이러는 건가요?

원래 소수면, 소수입니다. 소수가 아니면, 소수가 아닙니다. 이렇게 짠 코드입니다. 근데 가끔 이렇게 큰 숫자를 넣고 엔터를 치면 아무것도 안뜨고, 엔터를 쳐도 에러도 안나고, 저렇게 계속 숫자는 입력할 수 있게 되어있는데, 닫기 창을 누르면 저렇게 뜨고...

같은 코드에 같은 숫자를 넣어도 그 숫자가 소수면 소수입니다. 이렇게 뜨는 경우가 있고, 저렇게 아무것도 안뜨고 커서만 깜빡 거리는 경우가 있습니다. 이거 왜이러는 건가요?

55글자 더 채워주세요.
4개의 답변이 있어요!
  • 시크한븍극곰184
    시크한븍극곰184

    내용만 봐서는 무한루프에 빠진것 같습니다.

    큰 숫자를 넣었을떄 while이나 for문이 계속 동작하는지 디버깅을 통해서 확인해보시길 바랍니다.

    커서만 깜빡거리는게 동작중이긴하나 출력문을 만나지 못해서 그런것같고, kill 문구를 봣을때 현재 동작중인데

    종료하겠는냐라고 묻는것으로 보아 소스의 반복문을 살펴보시면 문제를 해결하실수 있을것 같습니다.

  • 소수 판별을 위해 구현한 알고리즘을 분석해보셔야 합니다.

    작은 수에서는 정상적으로 동작하나 큰 수에서 출력이 없는 경우 아직도 프로그램이 동작 중 일 가능성이 높습니다.

    입력 숫자 n 에 대한 시간복잡도를 Big O 표기법으로 나타낸 후 계산해보세요. Big O 표기법 계산시 약 10^8 정도를 일반적인 컴퓨터에서 1초 정도 소모되는 시간으로 봅니다.

    시간 복잡도에 의거 n이 커짐에 따라 loop 가 너무 많이 도는건 아닌지 확인해보시고 loop 탈출 조건이 잘못되어 무한 loop 를 돌고 있는건 아닌지 확인해보세요.

  • 안녕하세요:)

    닫기창을 누르셨을 때 위의 팝업창 이벤트가 발생한 것으로 봐서 아직 연산중인 상태로 확인이됩니다.

    글쓴이 분께서 큰 숫자를 넣으셨다고 하는데, 만드신 함수에서 연산하는데 충분한 시간이 필요한 것 같습니다.

    +같은 코드에 같은 숫자를 넣었을 때 소수인지 판별해주는 경우도 있다고 하셨죠?

    파이썬 이외에 프로그램 등이 활성화 된 경우에 컴퓨터에서 cpu나 RAM 소모되기 때문에 연산의 속도에 차이가 날 수 있습니다.

    아래의 코드를 확인해보시고 연산에 어느 정도 시간이 걸리는지 확인해보시는 것도 좋은 방법인 것 같습니다.

    import time >>> start=time.time() #하시고자하는 함수를 내부에 넣어주세요 >>> print("{0}seconds".format(time.time()-start))

    추가적으로 현재 컴퓨터의 발열, 상태 등에 따라서도 미세하게 차이가 날 수 있습니다.

    감사합니다.

    즐코하세요:D

  • 탈퇴한 사용자
    탈퇴한 사용자

    안녕하세요

    소스를 안 올려주셔서 제가 작성했는데 큰 수를 입력해도 오류는 나지 않습니다.

    python3 에서 테스트 했습니다.

    python2 이하에서는 결과가 다르게 나올 수 있습니다. python3 부터는 int 오버플로우가 없어졌습니다.

    샘플 소스입니다.

    def main(n): if n - int(n) == 0: print('정수') if n - int(n) != 0: print('소수') try: n = input() n = float(n) main(n) except ValueError: print('math error')