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上运行,但结果相同。
答案 0 :(得分:1)
列表索引从零开始,而不是一个。因此randint()
调用应该是
randint(0, len(symbols) - 1)
使用random.choice()
而不是直接处理索引可能会更清楚:
print random.choice(symbols)