我正在尝试制作一个字谜程序,但是我的程序无法正常工作。有时它会给我我想要的字符串,这是前两个字符串。但有时它什么也没打印。
我认为我可以通过将第二个for
循环放入函数中来解决该问题,这样如果最后一个if
语句没有被调用,我可以再次运行整个第二个循环。但是当我这样做时,它会打印很多东西,然后程序达到打印限制并崩溃。然后,我尝试在while
循环中放入第二个for循环,但是当我这样做时,该程序甚至无法运行。
text = "texxtttt"
text_list = ["tettxtxt", "ttexxtte", "texxtexxxt", "tttttxxe", "txextttt"]
input_unique_letters = "".join(set(text))
for i in range(len(input_unique_letters)):
input_letter = input_unique_letters[i:i+1]
input_letter_n = text.count(input_letter)
for i in range(len(text_list)):
list_unique_letters = "".join(set(text_list[i]))
list_word = text_list[i]
list_letter = list_word[i:i+1]
list_letter_n = list_word.count(list_letter)
if len(text) == len(list_word):
if input_letter == list_letter and input_letter_n == list_letter_n:
print(list_word)
在这里达到打印限制的代码:
text = "texxtttt"
text_list = ["tettxtxt", "ttexxtte", "texxtexxxt", "tttttxxe", "txextttt"]
input_unique_letters = "".join(set(text))
for i in range(len(input_unique_letters)):
input_letter = input_unique_letters[i:i+1]
input_letter_n = text.count(input_letter)
def coroutine():
for i in range(len(text_list)):
list_unique_letters = "".join(set(text_list[i]))
list_word = text_list[i]
list_letter = list_word[i:i+1]
list_letter_n = list_word.count(list_letter)
if len(text) == len(list_word):
if input_letter == list_letter and input_letter_n == list_letter_n:
print(list_word)
else:
coroutine()
coroutine()
答案 0 :(得分:1)
您对代码的一些评论:
for i in range(len(text_list)):
。考虑使用for letter in text_list:
,或者,如果您确实需要索引,请考虑使用for i, letter in enumerate(text_list):
list_letter = list_word[i:i+1]
似乎很奇怪。为什么不只是list_letter = list_word[i]
?input_letter_n
仅等于遇到的最后一个值。您不会在任何地方存储以前的值。以下是一些基于您的代码,但更多的是Pythonic:
def anagram():
text = "texxtttt"
text_list = ["tettxtxt", "ttexxtte", "texxtexxxt", "tttttxxe", "txextttt"]
input_unique_letters = set(text)
count_dict = {letter: text.count(letter) for letter in input_unique_letters}
for list_word in text_list:
word_unique_letters = set(list_word)
for letter in word_unique_letters:
if letter in input_unique_letters:
if list_word.count(letter) == count_dict[letter]:
print(list_word)
break
一些重要的变化:
break
语句可以使每个单词最多打印一次。如果发生这种情况,我们将离开for letter in word_unique_letters
循环。