2017-10-28 79 views
0
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.爲什麼是這樣以及如何解決它?此外,爲了使任何方法的代碼更有效的將:-)如何從函數中返回兩個值,這些值是在函數中創建的? - Python的

理解
+2

使用'回報(N,P1,P2)',然後讓他們爲:'N,P1,P2 = FindingTwoPrimes(N,P1,P2)' –

回答

1

應該有一個函數只有一個返回,但你必須3.更改以下行從

return n 
return p1 
return p2 

return [n,p1,p2] 

然後更改打印語句

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) 
+0

爲什麼你傳遞參數的函數,如果它們不是用在裏面嗎? – kvorobiev

+0

可能是OP想要在第一個值n的函數內做更多的事情。這就是爲什麼我沒有刪除。 –

-1

爲解決這個問題唯一需要

(n, p1, p2) = FindingTwoPrimes(n, p1, p2) 
+0

這是*不*需要的唯一更改。 –

4

你的函數會返回一個值,因爲它的執行將第一return語句後完成。您可以使用返回乘積值tuple

def FindingTwoPrimes(n, p1, p2): 
... 
    return n, p1, p2 


n, p1, p2 = FindingTwoPrimes(n, p1, p2) 
print(p1, p2, n) 

此外,您的代碼根本不起作用。在函數的開始,您將所有參數賦予零值。

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)