#python #dictionary #for-loop #punctuation
Вопрос:
Я пытаюсь использовать код для разработки цепочки Маркова, которая будет создавать случайные предложения из строки. Я уже разделил строку и оцениваю ее. Мой текущий код:
#Your code here
string = '''how much wood could a woodchuck chuck
if a woodchuck could chuck wood?
as much wood as a woodchuck could chuck
if a woodchuck could chuck wood.'''
st_dict={}
for i in range(0, len(words)-1):
#print(words)
word=words[i]
next_word=words[i 1]
if word in ['.','?']:
st_dict[word]=[]
elif word in st_dict:
st_dict[word].append(next_word)
else:
st_dict[word]=[next_word]
st_dict[words[-1]]=[]
print(st_dict)
Однако любое слово, в котором есть знаки препинания, должно иметь в качестве значения только нулевой список. Однако я не могу заставить это работать. Я пытался:
слово не в [‘.’,’?’… и т. Д.] в дополнение к приведенному выше оператору if, но слова с пунктуацией в середине строки все равно добавляют следующее слово в качестве значения. Как мне это предотвратить?
Спасибо.
Комментарии:
1. Оберните свой код в функцию, предоставьте пример ввода, а также текущий вывод и ожидаемый вывод.
Ответ №1:
word in ['.','?']
будет истинно только в том случае, если word
это точно '.'
или точно '?'
.
Вы хотите противоположного: '.' in word or '?' in word
.
Если у вас есть список знаков препинания, то вам следует использовать any
:
punctuation = ".?"
any(punct in word for punct in punctuation)
Комментарии:
1. Эй, спасибо! Просто, я пытался
if '." or '?' in word...
, но все время забываю, что логика кода не такая, как логика нашего неформального языка.