#nameerror
#ошибка имени
Вопрос:
Я продолжаю получать код ошибки имени, но я уже дважды определил имя в функции и, похоже, не могу найти ошибку. Вот код:
firstword = input("Enter phrase: ") secondword = input("Enter phrase: ") def get_phrase(sorted_fw, sorted_sw) : sorted_fw = sorted(firstword.lower()) sorted_sw = sorted(secondword.lower()) if sorted_fw == sorted_sw : print ("The phrases are anagrams.") else: print("The phrases are not anagrams.")
Ответ №1:
Вы получаете ошибку имени, так как литералы sorted_fw, sorted_sw определены внутри функции, и их область действия ограничена функцией. Кроме того, чтобы вернуть отсортированную версию обеих фраз, вы должны предоставить оператор return, который возвращает отсортированные строки. Вы можете изменить код, как показано здесь:
firstword = input("Enter phrase: ") secondword = input("Enter phrase: ") def get_phrase(sorted_fw, sorted_sw) : sorted_fw = ''.join(sorted(firstword.lower())) sorted_sw = ''.join(sorted(secondword.lower())) return sorted_fw, sorted_sw firstword, secondword = get_phrase(firstword, secondword) if firstword == secondword : print ("The phrases are anagrams.") else: print("The phrases are not anagrams.")
Существует более простой способ, если вы просто хотите отсортировать строки без использования других переменных. Вы можете написать:
firstword = input("Enter phrase: ") secondword = input("Enter phrase: ") def get_phrase() : global firstword, secondword firstword = ''.join(sorted(firstword.lower())) secondword = ''.join(sorted(secondword.lower())) get_phrase() if firstword == secondword : print ("The phrases are anagrams.") else: print("The phrases are not anagrams.")
На самом деле вам также не нужно использовать «присоединиться», так как в этом случае функция сортировки вернет списки, и сравнение будет происходить между отсортированными списками, что даст тот же результат.