已解决并已修复 我怎么关闭这个? :d
我最近一直在努力为我添加功能 聊天机器人偶尔遇到一个我需要帮助的问题。 我已经看过其他建议的帖子了。
简短说明:
尝试让它选择1到n之间的数字。用户可以执行的命令
使用将是/ roll 20,这将返回1-20。我正试图在 n =整数时让args替换random.randint(n)
。对不起,如果我的解释很糟糕。一直在不停地工作。
尝试前的原始代码(python):
elif used_prefix and cmd.lower() == "roll" and self.rank(user) >= 1:
args = args.lower()
if len(args) == 0: post("Select a dice amount(6,8,10,20)")
else:
if args == "6": post("Rolled %s" % random.randint(1,6))
elif args == "8": post("Rolled %s" % random.randint(1,8))
elif args == "10": post("Rolled %s" % random.randint(1,10))
elif args == "20": post("Rolled %s" % random.randint(1,20))
else: post("Select a dice amount(6,8,10,20")
尝试后的最终结果代码(Python):
elif used_prefix and cmd.lower() == "roll" and self.rank(user) >= 1:
args = args.lower()
n = args.lower()
if len(args) == 0: post("Select a dice amount(6,8,10,20)")
else:
post("Rolled %s" % str(random.randint(1,n)))
追溯
[STATUS] Setting status Online...
[LOAD] Loading Errors...
[LOAD] Loading Locks...
[SAVE] Appending default...
Connected
Connected
Youcoldyet(4)-[devlcars]:[/roll 20](Monday, 11 May 2015, 01:07:23 AM)
[ERR] Fatal error.
(C:\Python34\lib\random.py:218) Can't convert 'int' object to str implicitly
Traceback (most recent call last):
File "C:\Users\Administrator\Downloads\hmm\bot.py", line 575, in <module>
TestBot.easy_start(rooms, "Hidden", "Hidden")
File "C:\Users\Administrator\Downloads\hmm\ck.py", line 1278, in easy_start
self.main()
File "C:\Users\Administrator\Downloads\hmm\ck.py", line 1254, in main
con._feed(data)
File "C:\Users\Administrator\Downloads\hmm\ck.py", line 550, in _feed
self._process(food.decode().rstrip("\r\n")) #numnumz ;3
File "C:\Users\Administrator\Downloads\hmm\ck.py", line 560, in _process
getattr(self, func)(args)
File "C:\Users\Administrator\Downloads\hmm\ck.py", line 670, in rcmd_u
self._callEvent("onMessage", msg.user, msg)
File "C:\Users\Administrator\Downloads\hmm\ck.py", line 957, in _callEvent
getattr(self.mgr, evt)(self, *args, **kw)
File "C:\Users\Administrator\Downloads\hmm\bot.py", line 447, in onMessage
post("Rolled %s" % str(random.randint(1,n)))
File "C:\Python34\lib\random.py", line 218, in randint
return self.randrange(a, b+1)
TypeError: Can't convert 'int' object to str implicitly
[96m[SAV][0m Saving Rooms..
[STATUS] Setting status Offline...
Waiting 30 seconds for you to read the error..
我能做什么并尝试:
我正在努力让args取代random.randint(n)
而 n =整数。我可以尝试n = args.lower()
但是,当我这样做时,它返回了一个值错误,因为我
无法选择第二个选项,这将迫使
用户使用命令/ roll n,n。我想过要努力
将新代码设置为random.randint(1,n)
然后设置n = args.lower()
,这可能允许滚动选择。
更新
尝试了我的想法,它只是回来了:
TypeError: Can't convert 'int' object to str implicitly
我甚至开始将行更改为post("Rolled %s" % str(random.randint(1,n)))
失败
哦,如果你想知道这是一个用于角色扮演目的的滚动命令 欢迎任何和所有反馈/建议。我希望能够解决这个问题。
答案 0 :(得分:1)
randint(a, b)
需要两个整数,但是你给它一个整数和一个字符串。
不应将randint
的结果转换为字符串,而应将第二个参数转换为整数:
post("Rolled %s" % random.randint(1,int(n)))
如果ValueError
无法解析为整数(即“/ roll foo”),则会抛出n
。
<强>澄清:强>
错误消息有点令人困惑,因为调用random.randint(a,b)
时会发生的情况是该方法将调用random.randrange(a, b+1)
而不对其参数进行任何类型检查,导致(C)Python抛出关于无法将整数1
转换为字符串的错误(因为b
是一个字符串)。
如果您执行以下操作,您可以自己查看:
Python 3.4.3 (default, Apr 13 2015, 22:30:47)
[GCC 4.6.3] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> "8" + 1
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: Can't convert 'int' object to str implicitly
如果我们尝试致电random.randrange(a, "9")
,我们会收到正确的错误:
>>> random.randrange(1, "9")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python3.4/random.py", line 191, in randrange
raise ValueError("non-integer stop for randrange()")
ValueError: non-integer stop for randrange()
如果我们也调用random.randint(1, "8")
,这可能会发生什么。
随意向Python issue tracker
提交有关此内容的错误答案 1 :(得分:0)
在n
内使用{。}}之前,您需要将random.randint(1,n)
转换为整数。
您可以使用random.randint(1, int(n))
答案 2 :(得分:0)
问题出在这个电话中:
randint(1,n)
这里n是一个字符串,randint
期望它是一个int。我同意错误信息有点误导。