【问题标题】:IndexError from random character in string [duplicate]来自字符串中随机字符的IndexError [重复]
【发布时间】:2014-09-06 11:57:31
【问题描述】:

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 上尝试了它,但得到了相同的结果。

【问题讨论】:

    标签: python string random


    【解决方案1】:

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

    randint(0, len(symbols) - 1)
    

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

    print random.choice(symbols)
    

    【讨论】:

    • 和 random.randrange() 会给你 range() 语义。
    • 我其实没有意识到0也算一个数字。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-29
    • 2020-05-13
    • 1970-01-01
    • 1970-01-01
    • 2010-12-07
    相关资源
    最近更新 更多