基本上,该程序会检查一首诗的押韵模式是否正确。我采用了['A','B','A']的参数,并将其排列在一个字典中,该字典中包含要比较的单词索引。
rhyme_pattern = {'A': [0, 2], 'B': [1]}
我还从每一行中取出了最后一个单词并将其放入列表中。
words_to_compare = ['OFF', 'NEXT', 'ENDS']
我已经制作了一个帮助函数来比较两个单词,如果它们押韵。我无法弄清楚如何遍历rhyme_pattern ['A']并比较单词'OFF'和'ENDS'。此外,如果只有一个索引值,我会得到不比较任何东西的问题,比如B.
答案 0 :(得分:1)
如果dict.get(some_val, [])
中没有显示some_val
,您可以使用dict
确保返回空列表:
rhyme_pattern.get('A', [])
然后编写辅助函数,以便在条目只有空列表时它的行为符合预期。
假设您的比较函数被称为compare_with
,那么您可以像dict['A']
中的元素进行比较:
[compare_with(x, y) for x in rhyme_pattern.get('A', [])
for y in words_to_compare]
最后一位假设您的比较功能与compare_with(0, 'OFF')
类似。如果您希望通过words_to_compare
的内容索引rhyme_pattern['A']
,则可能如下所示:
A_words = [word_to_compare[x] for x in rhyme_pattern.get('A', [])]
答案 1 :(得分:1)
rhyme_pattern = {'A': [0, 2], 'B': [1]}
words_to_compare = ['OFF', 'NEXT', 'ENDS']
for val in rhyme_pattern["A"]:
print(words_to_compare[val])
要访问所有值,请迭代值:
for val in rhyme_pattern.itervalues(): # just .values() for python 3
print([words_to_compare[v] for v in val])
这假设所有值都在words_to_compare的索引范围内,而你的问题似乎就是这样。
答案 2 :(得分:1)
您需要遍历rhyme_pattern并将任何数组中的所有值与超过1的值进行比较。困难的部分是将所有单词组合进行比较。 itertools库让这很容易。
这应该有效:
import itertools as it
for words in rhyme_pattern:
if len(words) > 1:
#now loop through all combinations of 2 words
for pair in it.permutations(words,2):
if not words_ryhme(*pair):
return False
return True