我正在尝试用 Python 创建一个密码生成器。我首先编写一个程序来生成计算 RSA 时使用的素数,并且我发现了一个经过修改的程序,可以通过 PySimpleGUI 通过弹出窗口显示结果。但是,我无法在一个弹出窗口中获取所有结果。
这是我到目前为止的代码:
import PySimpleGUI as sg
start = int(sg.popup_get_text("Enter the start of the range: " ))
end = int(sg.popup_get_text("Enter the end of the range: "))
for num in range(start, end + 1):
if num > 1:
for i in range(2, int(num**0.5) + 1):
if(num % i) == 0:
break
else:
sg.popup(num)
sg.popup("The process is complete. Press OK to close.")
如何让所有结果显示在一个弹出窗口上?
您应该将您的数字存储在 1 个变量中。例如,您可以使用列表:
result = []
for num in range(start, end + 1):
if num > 1:
for i in range(2, int(num**0.5) + 1):
if(num % i) == 0:
break
else:
result.append(num)
sg.popup(f'Numbers are: {result}')
您的代码按原样在 for 循环的每次迭代中创建一个弹出窗口。这就是为什么它为每个数字创建一个新的弹出窗口;每次到达下一个素数时,它都必须从头开始一个新的弹出窗口。
如果您希望所有数字都出现在一个弹出窗口中,则必须在所有循环完成后精确地调用
sg.popup
一次。这就需要在计算时以某种方式存储素数;列表可能是最好的选择。
您的现有代码只需进行一些小的修改即可完成工作:
import PySimpleGUI as sg
start = int(sg.popup_get_text("Enter the start of the range: " ))
end = int(sg.popup_get_text("Enter the end of the range: "))
primes = [] # Intialize an empty list; we'll fill this with primes later
for num in range(start, end + 1):
if num > 1:
for i in range(2, int(num**0.5) + 1):
if(num % i) == 0:
break
else:
primes.append(str(num)) # Instead of creating a popup immediately, add it to the list
sg.popup(" ".join(primes)) # Now join all the primes with spaces and create one combined popup
sg.popup("The process is complete. Press OK to close.")
您正在为每个素数制作一个弹出窗口。相反,创建一个列表并将所有素数附加到列表中,然后在一个弹出窗口中显示该列表。
import PySimpleGUI as sg
start = int(sg.popup_get_text("Enter the start of the range: " ))
end = int(sg.popup_get_text("Enter the end of the range: "))
nums = []
for num in range(start, end, 1):
if num > 1:
for i in range(2, int(num**0.5) + 1):
if (num % i == 0):
break
else:
nums.append(num)
sg.popup(nums)
sg.popup("The process is complete. Press OK to close.")