我正在做一个大学项目,开始打印两个给定输入之间的所有素数。我后来被告知它必须与我的课程网络管理有点相关,所以我想在我的脚本末尾添加一个密码生成器(用于网络安全)
我已经写完了所有代码但是我有一个问题,它无法在我打印出的列表中使用随机素数。它只使用打印的最后一个数字,我理解为什么但是无论如何我可以制作它以便使用随机素数或者我必须将数字存储在某个地方吗?
#A program to count the prime numbers from a given start to a given end
#importing math function
import math
import os, random, string
#Input the number to start counting from
Starting_number = input("Enter the starting number: ")
#Input the number to end the count on.
Ending_number = input("Enter the number you want to count up to: ")
#if Starting_number is less than 0 it will print out a suitable message.
if Starting_number < 0:
print 'Invalid entry, please enter a positiv number. \nWill count from ',Starting_number, 'to 0 and begin prime number count to',Ending_number, '.'
#If Ending_number is less than or equals to 0 then it will print out a suitable message.
if Ending_number <= 0:
print 'Invalid entry on last input \nPlease enter two positive numbers for the count to work.'
#Starting loop as long as the current count is between Starting_number and Ending_number
for num in range(Starting_number, Ending_number):
#
if all(num%i !=0 for i in range(2,num)):
print num
if num >= 1 and num <= 100:
length = 4
chars = string.ascii_letters + string.digits + '!@#$%^&*()'
random.seed = (os.urandom(1024))
print ''.join(random.choice(chars) for i in range(length))
if num >= 101 and num <= 200:
length = (Ending_number / Starting_number) * 5 + 11
if length >= num:
length = num / 100
chars = string.ascii_letters + string.digits + '!@#$%^&*()'
random.seed = (os.urandom(1024))
print ''.join(random.choice(chars) for i in range(length))
答案 0 :(得分:2)
当您检测到素数时,请将它们添加到列表中。
而不仅仅是
print num
将其添加到如下列表中:
primes.append(num)
然后您可以从“素数”列表中选择一个随机项:
from random import choice
print choice(primes)
答案 1 :(得分:1)
我真的想将此添加为评论,但我没有足够的信用来添加评论。对于密码生成器,您不希望它是素数。你应该随机选择一个数字。如果您有一个32位数字,如果该数字在完整的32位空间中是随机的,则您有更多的熵。如果将其限制为仅素数,则会大大减少空间。与您提出的问题没有直接关系,但了解它可能会有所帮助。