String中随机字符的IndexError

时间:2014-09-06 11:57:31

标签: python string random

OS X上的Python 2.7.6或CentOS上的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 个答案:

答案 0 :(得分:1)

列表索引从零开始,而不是一个。因此randint()调用应该是

randint(0, len(symbols) - 1)

使用random.choice()而不是直接处理索引可能会更清楚:

print random.choice(symbols)