2015-03-20 4 views
0

Я пытаюсь создать очень простой чатбот, и этот бит трудно пропустить. Одной из вещей, которые он использует, является порядок слов; например, «это» означает, что существует, вероятно, вопрос, а «то есть» означает информацию. Поэтому я пытаюсь написать код, который будет искать два слова вместе, но это не проблема.пытается совместить два последовательных слова в списке

Как вы можете видеть ниже, оно иногда генерирует число, равное len (user_input), и это возвращает слово вместе с первой записью в списке, которая соответствует первому и последнему словам предложения. Как это остановить? Они должны быть последовательными, и это проблема.

user_input = []; 
user_input = raw_input('User:') 
user_input = user_input.split(' ') 

from random import randint 
a = randint(0,len(user_input)) 
print a 
b = user_input[a] + user_input[a+1] 
+0

Хорошо, если вы не хотите, чтобы он был равен длине user_input, выполните следующие действия: 'a = randint (0, len (user_input) - 1)' – Jkdc

+0

Спасибо. Не знаю, почему я об этом не думал. – moran

+0

Теперь он дает эту ошибку - IndexError: индекс индекса за пределами диапазона – moran

ответ

0

списки Python индексируются, начиная с 0, так что если user_input имеет n элементы, они индексируются в 0, 1, ..., n-1. Если вы хотите случайным образом выбрать два последовательных элемента, вам нужно, чтобы первый был проиндексирован на одном из i = 0, 1, ..., n-2, а второй - на i+1 и остается в пределах допустимых индексов. Поэтому

import random 
user_input = 'this is a test string'.split() 
n = len(user_input) 
i = random.randint(0, n-2) 
words = user_input[i:i+2] 
print words 

['is', 'a'] 

Обратите внимание, что random.randint(a,b) возвращает равномерно распределены случайным образом целое число от а до Ь включительно (в отличие от эквивалентного метода Numpy для какой-либо причине), и что срез [i:i+2] возвращает элементы user_input на i и i+1 (т.е. эксклюзивный любого элемента на i+2).

Смежные вопросы