2012-06-07 20 views
5

Ho un bot di chat javascript in cui una persona può digitare in una casella di input qualsiasi domanda a loro piace e sperare di ottenere una risposta accurata. Posso farlo, ma so che sto sbagliando tutto questo perché non so in che posizione apparirà il numero nella frase. Se una persona digita esattamente:Stringa di ricerca per numeri

qual è la radice quadrata di 5 funziona correttamente.

Se digita in cose come questa no.

qual è la radice quadrata del 5

la radice quadrata di 5 è quello che

Sapete che cosa la radice quadrata di 5 è

ecc

ho bisogno di essere in grado di determinare dove il numero appare nella frase, quindi eseguire il calcolo da lì. Nota che la riga sottostante fa parte di un chatbot funzionante più grande. Nella riga seguente sto solo cercando di essere in grado di rispondere a qualsiasi domanda radice quadrata indipendentemente da dove il numero appare nella frase. So anche che ci sono molte insidie ​​con una casella di immissione aperta dove una persona può digitare qualsiasi cosa come errori di ortografia ecc. Questo è solo per l'intrattenimento non è un progetto scientifico serio. :)

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; 
} 

tanto per essere chiari il bot è stato scritto utilizzando "Se statemments" per un motivo. Se l'input in questo caso non include le parole "what" e "square root" e "some number" la linea non si innesca e viene risposto più in basso dal bot con un generico "Non so tipo di risposta". Quindi spero che qualsiasi risposta si adatti al formato che sto usando. Sii gentile, sono nuovo qui. Mi piace fare bot, ma non sono un gran programmatore. Grazie.

+0

Wow. Sei sicuro di portare il tuo divertimento ad alti livelli. :) –

risposta

2

È possibile farlo utilizzando un'espressione regolare.

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

L'output è un array contenente tutti i numeri trovati nella stringa. Se ne hai più di uno, ad esempio "La radice quadrata di 100 10?" quindi sarà

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

in modo da poter scegliere quale numero si desidera utilizzare nel proprio script.

+0

'" Il significato della vita 42? "' -> '6.48' –

+0

Quel codice ti fornirà solo il numero, come richiesto dalla domanda originale. Sembra che 'mister movie' abbia già un modo per gestire la domanda della domanda. – sachleen

+0

Penso che questo punto potrebbe non essere chiaro. "If Statement" elimina tutte le informazioni non necessarie. Se l'informazione non è presente, se l'affermazione non si attiva mai. Quindi so che ci sarà un numero nella dichiarazione if. Speravo qualcosa come var root = qualunque sia quel numero. Quindi eseguire un semplice calcolo su quel numero come sum = Math.sqrt (root); Osservando il post originale, so che la parola [5] è il numero. Tuttavia se formulato in modo diverso il numero può essere la parola [3] parola [4] ecc. Esiste un modo per cercare l'input. Trova dove cade il numero e calcolatrice di conseguenza. –

1

Avrete bisogno di usare le espressioni regolari, se non sapete cosa sono dovreste cercarle perché ci vorrebbe troppo tempo per spiegarle in questa risposta. Ecco un utile sito Web per le espressioni regolari in JavaScript https://developer.mozilla.org/en/JavaScript/Guide/Regular_Expressions.

Supponendo di conoscere le espressioni regolari, è necessario innanzitutto cercare i numeri e memorizzare tutti i numeri trovati, se non viene trovato alcun numero, stampare un messaggio di errore. Come nota aggiuntiva, è possibile considerare la ricerca di costanti matematiche come pi o e. Questo dovrebbe funzionare

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

La parte successiva sta per essere difficile, ma a bollire giù a è il concetto di base, è necessario cercare per parole chiave come 'radice quadrata', 'volte', o 'più' . Dovresti farlo parola per parola andando da sinistra a destra.Per esempio, se un utente ingressi

What is 5 plus 3 minus 8? 

si dovrebbe rilevare il più prima del meno, mentre se questo viene immesso

What is 5 minus 3 plus 8? 

Si dovrebbe rilevare il meno davanti il ​​plus.

Per le operazioni che utilizzano due numeri è necessario prendere i primi due numeri trovati e fare l'operazione e sostituire i due numeri con il risultato. Sto cercando di usare la notazione di smalto inverso se non capisci cosa sto cercando di fare, cercalo se non sai cosa sia.

Spero di aver capito correttamente la tua domanda e di aver fornito un aiuto per arrivare a una soluzione perché quello che hai chiesto è molto difficile ma sembra divertente. In bocca al lupo. Inoltre come avvertimento non sto considerando l'ordine delle operazioni nella mia risposta.

+0

[Si prega di considerare di evitare w3schools.] (Http://w3fools.com) – Pointy

+0

@Pointy Grazie, non mi ero reso conto che w3schools poteva essere dannoso, lo ho cambiato in un sito MDN come suggerito da w3fools. –

Problemi correlati