Python 将函数的结果存储为变量

Python 将函数的结果存储为变量,python,rsa,Python,Rsa,我正试图写一个RSA代码,但我遇到了一个简单的问题。我想将函数的结果存储为变量,在Python中存储两次。这是我的密码 def random_odd_between(j,k): k1 = (k-1)//2 j1 = j//2 a1 = int(random()*(k1-j1+1))+j1 a = 2*a1 +1 return a # The list of primes less than 10^6 is given by: list_of_primes

我正试图写一个RSA代码,但我遇到了一个简单的问题。我想将函数的结果存储为变量,在Python中存储两次。这是我的密码

def random_odd_between(j,k):
    k1 = (k-1)//2
    j1 = j//2
    a1 = int(random()*(k1-j1+1))+j1
    a = 2*a1 +1
    return a

# The list of primes less than 10^6 is given by:
list_of_primes = prime_range(1,10^6)

# Write a function to check if given number is prime:
def check_if_prime(n):
    prime_flag = 1
    for i in list_of_primes:
        checker = n%i
        if checker != 0:
            if (n/i) in ZZ:
                prime_flag = 0
        break
    else:
        prime_flag = 0
        break
    return prime_flag

# Generate random numbers between 6*10^9 and 10^10 until we get a prime.
# Generate two prime numbers between 6*10^9 and 10^10 for p and q
def get_a_prime():
    count = 0
    prime_found = 0
    while prime_found == 0:
        a = random_odd_between(6*10^9,10^10)
        prime_found = check_if_prime(a)
        count = count + 1
# Print a prime you've got:
    print '%i' %a

p = get_a_prime()
q = get_a_prime()
n = p*q

# Let t stand for totient

t = (p-1)*(q-1)

我无法定义我的p和q,但他们总是给我一个错误。我意识到我需要执行某种返回操作,但语法不正确

只需将
打印“%I”%a
替换为
返回a

只需将
打印“%I”%a
替换为
返回a
我相信您的
检查prime
获取prime
函数都有错误。在前者中,
ZZ
没有定义,第一个
break
应该再缩进一级,最后一个是多余的。更好的是,只要在需要时返回True或False

在第二个函数中,您需要返回prime值,而不仅仅是打印它

def check_if_prime(n):
    if n == 2:
        return True  # 2 is a prime.
    if n % 2 == 0 or n <= 1:
        return False  # Anything less than or equal to one is not prime.

    for divisor in xrange(3, int(n ** 0.5) + 1, 2):  # 3, 5, 7, ..., int(SQRT(n)) + 1
        if not n % divisor:  
            return False  # NOT divisible by the divisor.

    return True  # Must be prime.

def get_a_prime():
    prime_found = False
    while not prime_found:
        a = random_odd_between(6 * 10 ^ 9, 10 ^ 10)
        prime_found = check_if_prime(a)
    return a

我相信您的
检查如果素数
获取素数
函数都有错误。在前者中,
ZZ
没有定义,第一个
break
应该再缩进一级,最后一个是多余的。更好的是,只要在需要时返回True或False

在第二个函数中,您需要返回prime值,而不仅仅是打印它

def check_if_prime(n):
    if n == 2:
        return True  # 2 is a prime.
    if n % 2 == 0 or n <= 1:
        return False  # Anything less than or equal to one is not prime.

    for divisor in xrange(3, int(n ** 0.5) + 1, 2):  # 3, 5, 7, ..., int(SQRT(n)) + 1
        if not n % divisor:  
            return False  # NOT divisible by the divisor.

    return True  # Must be prime.

def get_a_prime():
    prime_found = False
    while not prime_found:
        a = random_odd_between(6 * 10 ^ 9, 10 ^ 10)
        prime_found = check_if_prime(a)
    return a


您得到的错误是什么?另外,在
get_a_prime
方法中,您没有返回任何内容。您可能希望返回某些内容,以便将其存储在p和q中。照目前情况,上面的一个或多个
break
语句嵌套不正确。代码中的ZZ是什么?只需将代码粘贴到PyCharm中,错误就会自动突出显示,您所遇到的问题就更容易解决。我强烈建议您购买PyCharm(非商业学术等免费)或一些。您的错误是什么?另外,在
get_a_prime
方法中,您没有返回任何内容。您可能希望返回某些内容,以便将其存储在p和q中。照目前情况,上面的一个或多个
break
语句嵌套不正确。代码中的ZZ是什么?只需将代码粘贴到PyCharm中,错误就会自动突出显示,您所遇到的问题就更容易解决。我强烈建议您获取PyCharm(非商业学术等免费)或第50-50行回溯中的一些.Error(最后一次调用):文件“/projects/sage/sage-6.10/local/lib/python2.7/site packages/smc_sagews/sage_server.py”,第947行,在命名空间中的执行执行编译(block+'\n',single'),本地文件,第1行,在文件“”的第5行中,在获取素数文件“”的第4行中,在类型之间的随机奇数错误中:'module'对象不可调用7350行是素数=0@CoriVanderWerf这确实解决了你问题中的问题。您提到的错误是另一个您必须修复的问题。第50-50行回溯中的错误(最后一次调用):文件“/projects/sage/sage-6.10/local/lib/python2.7/site packages/smc_sagews/sage_server.py”,第947行,在命名空间中的执行执行编译(block+“\n”,“single”)、本地文件“”中的第1行、文件“”中的第5行,在get_a_素数文件“”的第4行中,在random_odd_between TypeError中:“module”对象不可调用7350行是素数\u found=0@CoriVanderWerf这确实解决了你问题中的问题。您提到的错误是另一个您必须修复的问题。Python的哪个版本以及错误是什么?这是针对Python2.7的。对于Python3,将
xrange
更改为
range
.Oops。有些东西错过了我最后的编辑。请参阅上面的轻微修订。Python的哪个版本以及错误是什么?这是针对Python2.7的。对于Python3,将
xrange
更改为
range
.Oops。有些东西错过了我最后的编辑。请参阅上面的轻微修订。