2012-06-07 198 views
5

我有一个JavaScript聊天机器人,一个人可以在输入框中键入任何他们喜欢的问题,并希望得到一个准确的答案。我可以做到这一点,但我知道我正在讨论这一切都是错误的,因为我不知道该数字在句子中会出现什么位置。如果一个人正好输入:数字搜索字符串

5这个工作正常的平方根是什么。

如果他键入这样的事情,它不会。

什么的5

平方根5的平方根是什么

你知道的5平方根是什么

我需要能够确定出现在句子中的数字,然后从那里进行计算。请注意下面的行是更大的工作聊天机器人的一部分。在下面的行中,我只是试图回答任何平方根问题,而不管数字在句子中出现的位置。我也知道有一个开放式输入框有很多缺陷,人们可以输入任何内容,比如拼写错误等。这仅仅是为了娱乐而不是一个严肃的科学项目。 :)

if(
    (word[0]=="what's") && 
    (word[1]=="the") && 
    (word[2]=="square") && 
    (word[3]=="root") && 
    (word [4]=="of") && 
    (input.search(/\d{1,10}/)!=-1) && 
    (num_of_words==6) 
){   
    var root= word[5]; 
    if(root<0){ 
     document.result.result.value = "The square root of a negative number is not possible."; 
    }else{ 
     word[5] = Math.sqrt(root); 
     word[5] = Math.round(word[5]*100)/100 
     document.result.result.value = "The square root of "+ root +" is "+ word[5] +"."; 
    } 
    return true; 
} 

只是要清楚,机器人使用“如果statemments”写有一个原因。如果在这种情况下的输入不包括单词“what”和“square root”和“some number”,那么该行不会触发,并且被机器人用一个通用的“我不知道类型响应”。所以我希望任何答案都能符合我使用的格式。善良,我是新来的。我喜欢制作机器人,但我不是一个程序员。谢谢。

+0

哇。你一定要把你的娱乐提高到很高的水平。 :) –

回答

2

您可以使用正则表达式来执行此操作。

"What is the sqrt of 5?".match(/\d+/g); 
["5"] 

输出是一个包含字符串中所有数字的数组。如果你有多个,比如“100 10的平方根?”那么它将是

"Is the square root of 100 10?".match(/\d+/g); 
["100", "10"] 

所以你可以选择你想要在脚本中使用的数字。

+0

'“生命的意义是42吗?'' - >'6.48' –

+0

那个代码只会给你数字,就像原来的问题一样。看起来“先生电影”已经有一种处理问题的方式了。 – sachleen

+0

我认为这一点可能不明确。 “If语句”筛选出所有不必要的信息。如果信息不存在,那么如果语句从不触发。所以我知道if语句中会有一个数字。我希望像var root =这个数字是什么。然后对该数字进行简单的计算,例如sum = Math.sqrt(root);看着原来的帖子,我知道单词[5]就是数字。然而,如果措辞不同,那么这个数字可能是[3]字[4]等。有没有办法搜索输入。相应地查找数字落在哪里以及计算器。 –

1

你需要使用正则表达式,如果你不知道他们是什么,你应该查找它们,因为在这个回应中解释它们需要很长的时间。这是一个有用的正则表达式网站,用于JavaScript https://developer.mozilla.org/en/JavaScript/Guide/Regular_Expressions

假设您知道正则表达式,您应该首先搜索数字并存储您找到的所有数字,如果未找到数字,则会打印出错误消息。作为补充说明,您可以考虑搜索诸如pi或e之类的数学常数。这应该工作

nums = someString./\d+|pi|e/gi 

接下来的部分将是很难,但熬它归结为是核心理念,你需要寻找诸如“平方根”,“次”,或“加号”关键词。你应该从左到右逐字地做这个。例如,如果用户输入

What is 5 plus 3 minus 8? 

你应该能够检测到加负之前,而如果该输入

What is 5 minus 3 plus 8? 

加之前,您应该检测负。

对于使用两个数字的操作,您需要找到找到的前两个数字,然后执行操作并将结果替换为两个数字。如果你不太明白我想要做什么,我试图使用反向波兰符号,如果不知道它是什么,请查看它。

我希望我能正确理解你的问题,并为解决问题提供了一些帮助,因为你问的内容非常难,但看起来很有趣。祝你好运。另外作为一个警告,我不会考虑我的回应中的操作顺序。

+0

[请考虑避免w3schools。](http://w3fools.com) – Pointy

+0

@Pointy谢谢,我没有意识到w3schools可能是有害的,根据w3fools的建议,将它改为MDN网站。 –