2014-09-06 44 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