#python-3.x #for-loop #random
#python-3.x #цикл for #Случайный
Вопрос:
Моим заданием было создать генератор случайных комплиментов, который использует два цикла for для случайного выбора и замены существительного и прилагательного в предложении. Предполагается, что я использую функцию random.choice для выбора существительного / прилагательного, а затем распечатываю предложение с заменами. Я сделал большую часть этого ниже, но по какой-то причине программа заменяет только существительное, но не прилагательное. Вместо этого он выводит предполагаемое прилагательное после заполнителя.
import random
sentence = "Hi, your *noun is looking *adj today."
sentence = sentence.split()
nouns = ["son", "daughter", "dog", "house"]
adjectives = ["beautiful", "handsome", "pretty", "warm", "fantastic"]
indexCount = 0
for word in sentence:
if word == "*noun":
wordChoice = random.choice(nouns)
sentence[indexCount] = wordChoice
indexCount = 1
if word == "*adj":
wordChoice = random.choice(adjectives)
sentence[indexCount] = wordChoice
st = ""
for word in sentence:
st = word " "
print(st)
Результат, который я продолжаю получать в режиме ОЖИДАНИЯ, похож на:
Hi, your son is looking *adj warm
Today вообще не распечатывается. Когда я пытаюсь добавить второй indexCount = 1 , программа возвращает, что он находится вне диапазона.
Комментарии:
1. Сейчас самое время использовать
enumerate
Ответ №1:
Вы увеличиваете значение перед тем, как выполнить проверку на наличие прилагательного, что означает, где вы выполняете замену, которую вы, по сути, получаете:
if word == "*adj":
wordChoice = random.choice(adjectives)
sentence[(indexCount 1)] = wordChoice
Это объясняет, почему слово one после «* adj» изменяется. Вместо этого переместите приращение indexCount
после проверки прилагательного.
Лучше использовать enumerate
для получения индексации:
for idx, word in enumerate(sentence):
if word == "*noun":
wordChoice = random.choice(nouns)
sentence[idx] = wordChoice
if word == "*adj":
wordChoice = random.choice(adjectives)
sentence[idx] = wordChoice
Также при построении ваших результатов вы также можете использовать join
:
st = " ".join(sentence)
Комментарии:
1. Вау! перечислять было чем-то, чему меня вообще не учили. Так удобно не устанавливать значение indexCount равным 0 вручную. Я попробую это решение и свяжусь с вами.
2. Я попробовал метод enumerate, но я продолжаю получать сообщение об ошибке в строке с надписью sentence[idx] = wordChoice . В нем говорится, что wordChoice не определен.
3. @Dev ах, да, это была ошибка, теперь ее нужно исправить
4. Спасибо за вашу помощь! Теперь это работает отлично. Теперь я должен полностью понять это и иметь возможность использовать его в своей практической работе завтра. Спасибо за полезные советы по перечислению и объединению, они сэкономят мне много времени.
5. @Dev Рад помочь! Если этот вопрос был полезен, вы можете пометить его как принятый ответ, установив галочку рядом с ним.
Ответ №2:
Давайте пойдем проще:
import random
nouns = ["son", "daughter", "dog", "house"]
adjectives = ["beautiful", "handsome", "pretty", "warm", "fantastic"]
Теперь простой оператор печати, хотя и длинный, очень прост в использовании:
print "Hi, your", random.choice(nouns), "is looking", random.choice(adjectives), "today."
Hi, your dog is looking beautiful today.
Комментарии:
1. Упс — Сначала я не получил требования к циклам for .
2. Спасибо за комментарий! Если бы мне не было поручено использовать циклы for, это, вероятно, то, что я бы выбрал. Это действительно просто, однако оно не удовлетворяет требованиям.