def FindingTwoPrimes(n, p1, p2):
p1 = 0
p2 = 0
n = 0
primeList = []
for num in range(1,101):
if all(num%i!=0 for i in range(2,num)):
primeList.append(num)
print (primeList)
print ("Length of Primelist = ", len(primeList))
lengthOfPrimelist = len(primeList)
p1 = primeList[random.randint(0,lengthOfPrimelist)]
p2 = primeList[random.randint(0,lengthOfPrimelist)]
n = p1 * p2
print ("p1 =", p1)
print ("p2 =", p2)
return n
return p1
return p2
FindingTwoPrimes(n, p1, p2)
print(p1, p2, n)
所以上面是一个函数,它将找到我将在公钥加密系统的方法中使用的两个素数。但是,当我运行该函数时,它将p1,p2和n返回为0.为什么这样,我该如何解决?此外,任何使这些代码更有效的方法都将受到赞赏: - )
答案 0 :(得分:4)
您的函数将返回单个值,因为它将在第一个return
语句后执行。您可以使用tuple
def FindingTwoPrimes(n, p1, p2):
...
return n, p1, p2
n, p1, p2 = FindingTwoPrimes(n, p1, p2)
print(p1, p2, n)
此外,您的代码根本不起作用。在函数的开头,你为它的所有args分配零值。
def FindingTwoPrimes(n, p1, p2):
p1 = 0
p2 = 0
n = 0
尝试在函数内使用具有不同名称的变量
据我所知,你试图从参数中的函数传回结果。这是个坏主意。使用tuple
从函数
def FindingTwoPrimes():
p1 = 0
p2 = 0
n = 0
...
return n, p1, p2
n, p1, p2 = FindingTwoPrimes()
print(p1, p2, n)
关于问题的最后一部分 - 如何提高效率。如果您计划多次调用此函数,则可以将primeList
计算移到函数之外。
def FindingTwoPrimes(primeList):
lengthOfPrimelist = len(primeList)
p1 = primeList[random.randint(0,lengthOfPrimelist)]
p2 = primeList[random.randint(0,lengthOfPrimelist)]
n = p1 * p2
print ("p1 =", p1)
print ("p2 =", p2)
return n, p1, p2
primeList = [num for num in range(1,101) if all(num%i!=0 for i in range(2,num))]
print (primeList)
print ("Length of Primelist = ", len(primeList))
n, p1, p2 = FindingTwoPrimes(primeList)
print(p1, p2, n)
答案 1 :(得分:1)
在一个函数中应该只有一个返回但你有3.从
更改以下行return n
return p1
return p2
到
return [n,p1,p2]
然后将print statement更改为
print FindingTwoPrimes(n, p1, p2)
您的功能中的代码也是错误的。请改变它
import random
def FindingTwoPrimes(n, p1, p2):
primeList = []
for num in range(1,101):
if all(num%i!=0 for i in range(2,num)):
primeList.append(num)
lengthOfPrimelist = len(primeList)
p1 = primeList[random.randint(0,lengthOfPrimelist)]
p2 = primeList[random.randint(0,lengthOfPrimelist)]
n = p1 * p2
return [p1,p2,n]
print FindingTwoPrimes(10, 11, 12)
答案 2 :(得分:-1)
解决这个问题只需要
(n, p1, p2) = FindingTwoPrimes(n, p1, p2)