Как настроить цикл for для добавления любого слова с пунктуацией в качестве ключа с пустым значением в словаре

#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... , но все время забываю, что логика кода не такая, как логика нашего неформального языка.