2017-10-28 7 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) 

Also oben ist eine Funktion, die zwei Primzahlen finden, die ich in der Methode des öffentlichen Schlüsselverschlüsselungssystems verwenden werde. Jedoch, wenn ich die Funktion ausführen, gibt es p1, p2 und n zurück als 0. Warum ist das und wie löse ich es? Auch, um alle Methoden zu machen diesen Code effizienter wäre :-)Wie gibt man zwei Werte von einer Funktion zurück, die in der Funktion erstellt wurden? - Python

geschätzt wird
+2

Verwenden 'return (n, p1, p2)' und bekommen sie dann wie: 'n, p1, p2 = FindingTwoPrimes (n, p1, p2)' –

Antwort

1

Es solle nur eine Rückkehr in einer Funktion sein, aber Sie haben 3. Ändern Ihnen die folgenden Zeilen aus

return n 
return p1 
return p2 

zu

return [n,p1,p2] 

dann print-Anweisung ändern

print FindingTwoPrimes(n, p1, p2) 

auch Code in Ihrer Funktion falsch ist. Bitte ändern Sie das auch

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

Warum übergeben Sie Argumente an eine Funktion, wenn Sie werden nicht darin verwendet? – kvorobiev

+0

Könnte OP sein möchte einige Dinge innerhalb der Funktion mit dem ersten Wert n zu tun. Deshalb habe ich nicht entfernt. –

-1

für diesen Bedarf

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

Das ist * nicht * die einzige Änderung benötigt. –

4

Ihre Funktion einzelner Wert nur lösen zurückkehren wird, weil sie die Ausführung nach dem ersten return Anweisung abgeschlossen sein wird. Sie konnten mehrfach Werte zurückgeben ein tuple

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


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

auch verwenden, ist Ihr Code würde überhaupt nicht funktionieren. Zu Beginn der Funktion ordnen Sie allen Argumenten Nullwerte zu.

def FindingTwoPrimes(n, p1, p2): 
    p1 = 0 
    p2 = 0 
    n = 0 

Versuchen Sie, Variablen mit unterschiedlichen Namen innerhalb der Funktion zu verwenden.
Wie ich verstehe, versuchen Sie, Ergebnisse von der Funktion in Argumenten zu übergeben. Das ist eine schlechte Idee. Verwenden Sie tuple zu erhalten Ergebnisse aus Funktion

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

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

über letzten Teil Ihrer Frage - wie es effizienter zu machen. Wenn Sie diese Funktion mehrmals aufrufen möchten, können Sie die primeList Berechnung außerhalb der Funktion verschieben.

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) 
Verwandte Themen