簡體   English   中英

如何從函數中返回在函數中創建的兩個值? -Python

[英]How to return two values from a function, that are created in the function? - Python

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。這是為什么?如何解決? 另外,任何使該代碼更有效的方法都將受到贊賞:-)

您的函數將返回單個值,因為它的執行將在第一個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)

一個函數中應該只有一個返回值,但是您有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)

為了解決這個只需要

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM