我被选中参加明天(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)
接受两个整数作为输入(即a
和b
,其中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+1
str + int
,这就是为什么TypeError
根据问题出现的原因。
您已使用split
将字符串转换为字符串列表。它们不是整数,randint 采用整数。
将 str 转换为 int:
>>> random.randint(0, int(b[0]))
4
>>>