导入随机 - python 中的 randint 不工作

import random - randint in python not working

我被选中参加明天的 python 比赛 (aio.edu.au),我正在尝试其中一个练习题但已经失败了,因为显然 random.randit 需要一个字符串.

我已经试过了...

import random
a = "7 2"
b = a.split(" ")
random.randint(0, b[0])

我希望它的输出是随机选择 0 到 7 之间的任何数字,包括 0 和 7。但它给出了这个错误信息:

Traceback (most recent call last):
  File "program.py", line 4, in <module>
    random.randint(0, b[0])
  File "/opt/python-3.6/lib/python3.6/random.py", line 220, in randint
    return self.randrange(a, b+1)
TypeError: must be str, not int

有什么帮助吗?

拆分字符串时会得到一个字符串数组,ranint 不会将字符串作为参数,因此您必须将其转换为整数。

import random
a = "7 2"
b = a.split(" ")
random.randint(0, int(b[0]))

您已使用 split 将字符串转换为字符串列表。它们不是整数,randint 取整数。

将 str 转换为 int:

>>> random.randint(0, int(b[0]))
4
>>> 

恭喜!您在 random 模块中发现了一个未捕获的异常!

random.randint(a, b)取两个整数作为输入(即ab,其中a小于等于bdocumentation here).但是错误信息是不正确的。它应该是这样的:

TypeError: must be int, not str

因此,如果您的字符串值不需要作为输入的一部分,您可以只输入纯整数,或者从列表中删除,或者如果您确实需要,可以保留字符串输入:

import random

# just a single integer
random.randint(0, 7)

# using a list of potential values
bounds = [7, 2]
random.randint(0, bounds[0])
random.randint(0, bounds[1])

# or stick with the string conversion
bounds = "7 2"
random.randint(0, int(bounds.split(" ")[0])
random.randint(0, int(bounds.split(" ")[1])

编辑:如果有人对异常感兴趣,这里是 randint 的定义:

def randint(self, a, b):
    """Return random integer in range [a, b], including both end points.                                        
    """
    return self.randrange(a, b+1)

问题是 b+1str + int,这就是问题中出现 TypeError 的原因。