我制作了一个关于检查用户输入数字是否为素数的程序。但是,当我输入大数字时,需要相当长的时间。什么样的代码有助于向用户显示正在检查该号码,类似于加载器,除非结果已经确定?代码如下:
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)))
答案 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”函数内部的循环中执行此操作,因为我不建议将此任务分配给另一个线程,因为有几种情况需要您考虑。