导入随机 - Python 中的 randint 不起作用



我被选中参加明天(aio.edu.au(的python竞赛,我正在尝试其中一个练习题,但已经失败了,因为显然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]))

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

random.randint(a, b)接受两个整数作为输入(即ab,其中a小于或等于b,文档在这里(。但是错误消息不正确。它应该读成这样:

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根据问题出现的原因。

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

将 str 转换为 int:

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

最新更新