2014-09-06 48 views
1

的Python 2.7.6在CentOS上IndexError

給出一個字符串OS X或Python 2.6.6: 'ABCDEFGHIJKLMNO' 選擇從該字符串隨機字符:

#!/usr/bin/env python 
import random 
symbols = 'abcdefghijklmnop' 
print symbols[random.randint(1, len(symbols))] 

結果通常是我所期望的,它是該字符串中的一個隨機字符。但是在運行此多次:

$ for i in {1..100}; do python test.py; done; 

偶爾會返回一個IndexError:

....  
h 
f 
f 
Traceback (most recent call last): 
    File "test.py", line 6, in <module> 
    print symbols[random.randint(1, len(symbols))] 
IndexError: string index out of range 
b 
n 
.... 

我首先考慮的也許是隨機數發生器曾在OS X中的錯誤,所以我試圖在CentOS的爲好,但得到了同樣的結果。

回答

1

列表索引從零開始,而不是一個。因此,randint()調用應該讀

randint(0, len(symbols) - 1) 

這將無疑更清楚使用random.choice(),而不是直接處理指標:

print random.choice(symbols) 
+2

和'random.randrange()'會給你'範圍()'語義代替。 – 2014-09-06 12:03:03

+0

我其實並沒有意識到0被算作一個數字。 – user193673 2014-09-06 12:12:49