Могу ли я показать, что сейчас делает моя программа? - PullRequest
0 голосов
/ 25 октября 2018

Я пытаюсь запустить эту программу на Python в редакторе Canopy Python на Python2 и Python3, и моей медленной школьной книге Mac требуется достаточно времени для ее запуска, и я не уверен, что она действительно что-то делает или простопауза.

import binascii

lower = 10**70
upper = 10**80

v = (lower+upper)/2
c = 2205316413931134031046440767620541984801091216351222789180593875373829950860542792110364325728088504479780803714561464250589795961097670884274813261496112882580892020487261058118157619586156815531561455215290361274334977137261636930849125

while True:
    p = pow(v, 3)
    if p < c:
        lower = v
    elif p > c:
        upper = v
    else:
        print(v)
        binascii.unhexlify(hex(v)[2:])
        exit()

Используемые мной числа довольно велики, поэтому я попытался сократить свои переменные до следующего значения:

lower = 10**7
upper = 10**8

v = (lower+upper)/2
c = 22053164

Но даже с меньшими числами я не мог произвести вывод во времени.Я прервал ядро ​​ровно через 2 минуты, чтобы увидеть, где находится переполнение моей программы, и вот что я узнал:

Python 2 - остановлен на строке 12

Python 2 работал в пространстве имен ядра- остановлено на строке 10

Python 3 - остановлено на строке 10

Python 3 запущен в пространстве имен ядра - остановлено на строке 9

Есть ли в любом случае, я могу заставить программу датьменя в выходных каждые пару минут, чтобы я убедился, что он все еще работает?Или есть что-то еще, что я могу попытаться заставить мою программу ускориться и при этом дать мне вывод, который мне нужен?

Ответы [ 2 ]

0 голосов
/ 25 октября 2018

Вы можете просто следить за временем стены и время от времени распечатывать что-то:

import binascii
import time

TIME_INTERVAL = 5  # Seconds
lower = 10**70
upper = 10**80

v = (lower+upper)/2
c = 2205316413931134031046440767620541984801091216351222789180593875373829950860542792110364325728088504479780803714561464250589795961097670884274813261496112882580892020487261058118157619586156815531561455215290361274334977137261636930849125

begin_interval = time.time()
while True:
    p = pow(v, 3)
    if p < c:
        lower = v
    elif p > c:
        upper = v
    else:
        print(v)
        binascii.unhexlify(hex(v)[2:])
        exit()
    if time.time() - begin_interval > TIME_INTERVAL:
        print('still running')
        begin_interval = time.time()  # Reset.
0 голосов
/ 25 октября 2018

Самый простой способ увидеть, что делает программа, - это вставить в код последовательность операторов print.

Когда вы увидите, что показывает консоль, вы сможете понять, что происходит с вашими переменными.Подсказка: р не меняется и зацикливается навсегда.

import binascii

lower = 10**70
upper = 10**80

v = (lower+upper)/2
c = 2205316413931134031046440767620541984801091216351222789180593875373829950860542792110364325728088504479780803714561464250589795961097670884274813261496112882580892020487261058118157619586156815531561455215290361274334977137261636930849125

print("Starting Loop")
while True:
    p = pow(v, 3)
    print("p value is now:", p)
    if p < c:
        lower = v
    elif p > c:
        upper = v
    else:
        print(v)
        binascii.unhexlify(hex(v)[2:])
        exit()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...