如何显示正在处理程序?

时间:2018-06-10 17:29:00

标签: python python-3.6

我制作了一个关于检查用户输入数字是否为素数的程序。但是,当我输入大数字时,需要相当长的时间。什么样的代码有助于向用户显示正在检查该号码,类似于加载器,除非结果已经确定?代码如下:

from math import sqrt as s
from time import time as t
def check_prime(p):
    prime = [p]
    start = t()
    if p > 3:
        for i in range(2, int(s(p)) + 1):
            if p % i == 0:
                end = t()
                print('Time taken is', end - start, 'seconds')
                prime.remove(p)
                break
            else:
                continue
    else:
        pass
    try:
        end
    except:
        end = t()
        print('Time taken is', end - start, 'seconds')
    if p in prime:
        if p == 2 or p == 3 or (p != 1 and p > 0):
            return(f'{p} is a prime number')
        elif p <= 0:
            return(f'{p} is not in the domain of prime or composite numbers')
        else:
            return('1 is neither prime nor composite')
    else:
        return(f'{p} is NOT a prime number')


while True:
    p = input('> ')
    print(check_prime(int(p)))

2 个答案:

答案 0 :(得分:1)

我认为最简单的解决方案就是可以插入一个动画加载器(因为我猜这是你所要求的),就像这样:

import sys, threading, time

loading = True

def loader(*args):
     while loading:
         time.sleep(0.5)
         sys.stdout.write('[-]' + '\b'*3) # Write loader and return to start of line
         sys.stdout.flush()
         time.sleep(0.5)
         sys.stdout.write('[/]' + '\b'*3)
         sys.stdout.flush()
         time.sleep(0.5)
         sys.stdout.write('[|]' + '\b'*3) 
         sys.stdout.flush()
         time.sleep(0.5)
         sys.stdout.write('[\]' + '\b'*3) 
         sys.stdout.flush()

t = threading.Thread(target=loader)
t.start()

# Do some work here

loading = False

为避免创建线程,您可以在循环中执行此操作,同时检查您的号码是否为素数。

答案 1 :(得分:0)

您可以在控制台上打印类似于加载栏的内容(例如,使用_字符)。因此,只要正在处理您执行的给定操作的百分比,就可以向控制台缓冲区添加新的“_”字符。 您可以在“check_prime”函数内部的循环中执行此操作,因为我不建议将此任务分配给另一个线程,因为有几种情况需要您考虑。