Я продолжаю получать код ошибки имени, но я уже дважды определил имя в функции, кажется, я не могу найти ошибку

#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.")  

На самом деле вам также не нужно использовать «присоединиться», так как в этом случае функция сортировки вернет списки, и сравнение будет происходить между отсортированными списками, что даст тот же результат.