2016-10-27 3 views
0

Я пишу код, в котором пользователь вводит предложение, вводя одно слово за раз. Когда они набирают «exit», код возвращает «Ваше исходное предложение было предложением. Число слов (генерирование случайного числа) - это слово, соответствующее этому номеру».Используйте тот же случайный сгенерированный номер Несколько раз

Например, приговор «Это крутой код», он будет возвращать «Ваш первоначальный приговор был Это крутым код. Слово номер 3 является.

Сейчас мой код получает два различные случайные числа и слова, так что это будет, как «Слово номер 2 это» или что-то. Как я должен это исправить и заставить его работать правильно?

print ('Think of a sentence') 
print ('Type the sentence one word at a time pressing enter after each word') 
print ("When you have finished the sentence enter 'exit'") 
print ('') 
sentence = [] 
while True: 
    word = input('') 
    print ('Accepted', word) 
    if word == 'exit': 
       print ('') 
       print ('Your original sentence was') 
       outputString = " ".join(sentence) 
       print (outputString) 
       wordCount = len(outputString.split()) 
       pleaseWork = (random.randint(0,wordCount)) 
       print('Word number ',pleaseWork,' is ', (sentence[pleaseWork])) 

       break 
    sentence.append(word) 

ответ

1

Вы были почти там!

Когда вы делаете:

pleaseWork = (random.randint(0,wordCount)) 

Вы получаете ряд (в переменной pleaseWork) между нулем и len(outputString), что (так как outputString это строка) даст вам количество символов в outputString.

Попробуйте:

>>> len("Hello, my name is BorrajaX") 
26 

Однако то, что вы действительно хотите, случайный индекс между 0 и количество элементов в вашем sentence списке, не так ли? Потому что, когда вы это делаете: sentence[pleaseWork] вы используете pleaseWork в качестве индекса для списка sentence, а не для вашей строки outputString.

Итак, что вы делаете здесь:

wordCount = int(len(outputString)) 
pleaseWork = (random.randint(0,wordCount)) 
print('Word number ',pleaseWork,' is ', (sentence[pleaseWork])) 

может быть сокращен до:

pleaseWork = random.randint(0, len(outputString)) 
print('Word number ',pleaseWork,' is ', (sentence[pleaseWork])) 

Видите ли вы сейчас? pleaseWork содержит число от 0 и длину outputString. BUT затем вы используете этот номер для доступа к вашему списку sentence. Что произойдет, если outputString имеет 100 символов, а sentence имеет только три элемента? Что ж...Вероятно, вы получите целое число, превышающее 2, в том, что звонок random.randint. Допустим, вы получили ... 50 ... Что происходит, когда вы пытаетесь получить доступ к 50-му элементу списка с тремя элементами?

>>> [1, 2, 3][50] 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
IndexError: list index out of range 

Итак, что вы должны сделать, это изменить диапазон этой randint к числу элементов в вашем sentence списке:

wordCount = int(len(sentence)) 
    pleaseWork = (random.randint(0, wordCount)) 

Полный пример:

def sentenceSplit(): 
    print ('Think of a sentence') 
    print ('Type the sentence one word at a time pressing enter after each word') 
    print ("When you have finished the sentence enter 'exit'") 
    print ('') 

sentence = [] 
while True: 
    word = raw_input('') 
    print ('Accepted', word) 
    if word == 'exit': 
     print ('') 
     print ('Your original sentence was') 
     outputString = " ".join(sentence) 
     print (outputString) 
     wordCount = int(len(sentence)) 
     pleaseWork = (random.randint(0, wordCount)) 
     print('Word number ', pleaseWork, ' is ', (sentence[pleaseWork])) 

     break 
    sentence.append(word) 
0

Вы используете количество символов в предложении для генерации индекса для слов в предложении. Измените wordCount = int(len(outputString)) на wordCount = len(sentence) - 1, чтобы получить соответствующий индекс.

0

Он не получает двух разных случайных чисел или слов, так как вы только называете randint один раз. Проблема состоит в двух вещах:

  1. wordCount В настоящее время количество символов в строке. Вместо этого используйте len(sentence).
  2. randint является включая его верхнюю границы (в отличие от range, исключающего его так, что вы не должны думать о вещах, как это) означает, что random.randint(0,wordCount) иногда возвращается wordCount и так pleaseWork == wordCount == len(sentence) (предполагая, что вы выше) является Possiblity, и sentence[len(sentence)] обязана выбросить ошибку. Используйте random.randint(0,wordCount-1).
Смежные вопросы