我正在尝试获取代码以获取用户输入,并且代码必须检查两个选项,但是代码仅注册了第一个选项。
我尝试了<?php
// User's search query
$apiEndpoint = 'https://api.transport.nsw.gov.au/v1/tp/';
$apiCall = 'stop_finder';
// Build the request parameters
$params = array(
'outputFormat' => 'rapidJSON',
'type_sf' => 'any',
'name_sf' =>'Wynyard Station',
'coordOutputFormat' => 'EPSG:4326',
'TfNSWSF' => 'true'
);
$url = $apiEndpoint . $apiCall . '?' . http_build_query($params);
$response = file_get_contents($url);
$json = json_decode($response, true);
之类的不同语法,但它们都不起作用。
(content=('m!mode computer' or 'm!mode player'))
如果用户输入 async def AgainstWho():
global mode
await client.send_message(message.channel, content='Play against the computer or another player?\n')
mode = await client.wait_for_message(content=('m!mode computer' or 'm!mode player'))
if mode == 'm!mode computer':
mode = 1
if mode == 'm!mode player':
mode = 2
,则代码m!mode player
可以正常工作。
答案 0 :(得分:2)
>>> 'm!mode computer' or 'm!mode player'
'm!mode computer'
这就是为什么。我假设这是discord.py,according to the docs,您要的是这样:
mode = await client.wait_for_message(check=lambda m: return m.content.startswith('m!mode'))
之类的。
答案 1 :(得分:0)
进行'm!mode computer' or 'm!mode player'
时; or
只会返回第一个字符串,其中以True
作为其布尔值,即任何非空字符串;因此它将默认为第一个(此处为'm!mode computer'
)。
您需要检查内容以'm!mode '
开头,并且以下“单词”是否与您的任何选项完全匹配:
async def AgainstWho():
global mode
await client.send_message(message.channel, content='Play against the computer or another player?\n')
mode = await client.wait_for_message(check=lambda m: return m.content.startswith('m!mode ') and m.content.split(' ')[1] in ('player', 'computer'))
if mode == 'm!mode computer':
mode = 1
if mode == 'm!mode player':
mode = 2
这仅检查命令的前两个“单词”。 'm!mode player'将起作用;但是“ m!mode播放器后面还有其他任何东西”也会如此。如果要避免这种行为并将其降低为严格的命令调用,请执行以下操作:您还可以检查len(m.content.split(' ')) == 2
。
此外,避免使用global
。将变量作为参数传递给函数,或将其作为具有变量作为属性的对象的方法。