我正在尝试在不和谐机器人的“选择数字”游戏中区分不和谐消息(即数字)和即字母。我认为我可以只使用startswith参数来查看消息是否包含数字,但是无论何时尝试,它都将返回“ TypeError:切片索引必须为整数或None或具有 index 方法”。我该如何解决?
if current_guess.startswith('1','2','3'):
current_guess = int(current_guess)
if best_id == "N/A":
best_guess = current_guess
best_id = current_id
else:
if abs(current_guess-number)<abs(best_guess-number):
best_guess = current_guess
best_id = current_id
else:
return
因为startwith仅允许搜索3个参数,所以我只复制了此代码3次,每次检查1-9中的三个数字。
我期望它能够检测一条消息是否由数字组成,但是它只会输出我不理解的错误。
line 57, in PAN
if current_guess.startswith('1','2','3'):
TypeError: slice indices must be integers or None or have an __index__ method
答案 0 :(得分:0)
startswith
仅接受一个字符串进行搜索;您可以将条件写为:
if any(guess.startswith(n) for n in ('1', '2', '3'))):
....
如果您只想知道字符串的第一个字符是否为数字,则也可以使用isdigit
(尽管也可以与'0'
匹配):
if guess[0].isdigit():
...
根据您真正想要寻找的内容,还可以考虑使用re
module:
if re.match('^[1-9]', guess)):
...
其中^
表示字符串的起点,而[1-9]
将匹配从'1'
到'9'
范围内的一个字符。
答案 1 :(得分:0)
如果我正确理解了您的问题,则要检查消息是否为数字。可以使用try /除外:
try:
current_guess = int(current_guess)
except ValueError:
# warn user about only being possible to send digits