2012-10-07 34 views
0

我正在編寫作爲項目的RSA算法的代碼。對於那些熟悉此加密系統的人,下面的函數計算phi(n)的值。但是當我運行這個,它出現這個錯誤:Python中的Randint錯誤?

Traceback (most recent call last): 
    File "C:\Python27\RSA.py", line 127, in <module> 
    phi_n() 
    File "C:\Python27\RSA.py", line 30, in phi_n 
    prime_f = prime_list[random.randint(0,length)] 
    File "C:\Python27\lib\random.py", line 241, in randint 
    return self.randrange(a, b+1) 
    File "C:\Python27\lib\random.py", line 217, in randrange 
    raise ValueError, "empty range for randrange() (%d,%d, %d)" % (istart, istop, width) 
ValueError: empty range for randrange() (0,0, 0) 

我不完全明白爲什麼會出現這個錯誤。這裏是我的代碼爲phi_n功能:

def phi_n(): 
    global prime_list 
    length = len(prime_list) - 1 
    prime_f = prime_list[random.randint(0,length)] 
    prime_s = prime_list[random.randint(0,length)] 
    global pq 
    n = prime_f * prime_s 
    global phi_n 
    phi_n = (prime_f -1) * (prime_s -1) 
    return phi_n 

評論將不勝感激。

由於

回答

4

問題是prime_list是空的,並因此length將等於-1導致呼叫random.randint(0, -1)這是由於明顯的原因無效。

+0

非常感謝。它現在工作!再次感謝。 – Hummus

+1

另外,如果你想從一個序列中選擇一個元素,只需使用['random.choice'](http://docs.python.org/library/random.html#random.choice)。 – poke