Как завершить сценарий Python, используя цикл while и получить результат? - PullRequest
0 голосов
/ 06 ноября 2019

Я хотел бы генерировать случайные числа в течение 5 минут. после этого я хотел бы знать наиболее распространенные числа.

мой вопрос:

Я не уверен, сколько времени мне нужно. Могу ли я вручную завершить сценарий через 1 минуту или 1 минуту 19 секунд и получить результат

Мой код выглядит следующим образом:

import random
from collections import Counter
t_end = time.time() + 60*5
numbers = []
while time.time() < t_end:
    number=''.join(map(str, [random.randint(0,9)for value in range(0,4)]))
    numbers.append(number)

print(Counter(numbers))

Ответы [ 3 ]

1 голос
/ 06 ноября 2019

Существует множество опций:

  • выводит промежуточный результат каждые 5 с или около того и прерывает выполнение сценария с помощью Ctrl + C
  • , проверяя, нажата ли пробел или что-то ещеесли это так, прервите цикл (см. здесь , чтобы узнать, как это сделать)
  • прослушайте сигналы и обработайте его соответствующим образом (это также может корректно завершить сценарий для варианта 1)
  • открыть сокет и прослушать сокет, если поступит сигнал остановки
  • создать графический интерфейс с помощью TKinter или что-то еще и добавить кнопку остановки
  • ...

Первый - самый простой, но и самый быстрый и грязный. Что касается второго варианта, следующий скрипт должен помочь вам начать работу (ваш скрипт работал для меня после добавления пробелов и разрывов строк):

import keyboard
while True: 
    if keyboard.read_key() == "p": 
        print("You pressed p") 
        break

Предполагается, что python3 и windows: Обратите внимание, что keyboard не поставляется с pythonпо умолчанию. Вам необходимо установить его с pip3 install keyboard. Pip3.exe может быть не на вашем пути. Перейдите туда, где вы установили Python и посмотрите вокруг. Для меня это было в папке Scripts (моя установка довольно испорчена, хотя).

0 голосов
/ 06 ноября 2019

Как уже упоминал Луиджи в комментарии, вы можете просто использовать число итераций в качестве предела и использовать цикл for:

number_of_iterations = 10000

for i in range(number_of_iterations):
    place_your_function_here()

Однако, если вы по какой-то причине действительно хотите использоватьвремя, вот как вы можете это сделать: обновите текущее время в нижней части блока while и, в состоянии продолжения цикла while, сравните его с временем окончания:

import datetime


delta_in_seconds = 60
finish = datetime.datetime.now() + datetime.timedelta(0, delta_in_seconds)
while time < finish:
    place_your_function_here()
    time = datetime.datetime.now()
0 голосов
/ 06 ноября 2019
import random
from collections import Counter
import time
t_end = time.time() + 60*5
numbers = []
while time.time() < t_end:
    number=''.join(map(str, [random.randint(0,9)for value in range(0,4)]))
    numbers.append(number)
    if time.time()==(t_end-60*4): # break a 1 min
        break
print(Counter(numbers))
...