Анаграмма Питон 3
Я пытаюсь написать программу, которая проверяет, являются ли 2 входа анаграммы. Я чувствую, что это должно быть относительно легко, но я не могу понять это. Я должен определить функцию как:
def isAnagram(s1, s2):
до сих пор у меня есть это:
word1 = input("Enter a string: ")
word2 = input("Enter a second string: ")
def isAnagram(s1, s2):
s1 = word1.sort()
s2 = word2.sort()
if s1 == s2:
print("This is an anagram")
else:
print("This is not an anagram)
isAnagram()
Полагаю, я не совсем понимаю определяющие функции, поэтому, если бы вы могли объяснить, что происходит, это было бы здорово!
3 ответа
Вы определили функцию почти правильно, но есть несколько проблем.
Сначала вы просите s1
а также s2
в качестве параметров. Это хорошо. Теперь используйте эти значения, а не глобальные word1
а также word2
,
Во-вторых, если эти значения являются строками, вы не можете вызвать sort
на них, потому что строки не имеют sort
метод. Но вы можете позвонить sorted
Функция на любой последовательности, даже строки.
В-третьих, есть простая опечатка, отсутствует "
На втором print
,
Может быть, лучше вернуть значение True или False и поставить print
вне функции, но давайте пока оставим это.
Собирая это вместе, вот рабочая функция:
def isAnagram(s1, s2):
s1 = sorted(s1)
s2 = sorted(s2)
if s1 == s2:
print("This is an anagram")
else:
print("This is not an anagram")
Но теперь вам также нужно правильно вызывать функцию. Вы определили функцию для получения двух параметров, s1
а также s2
, Это означает, что вам нужно вызвать функцию с двумя аргументами.
Итак, где вы берете эти аргументы? Ну, у вас уже есть эти переменные word1
а также word2
сидят без дела, и они кажутся именно такими, какими ты хочешь.
Итак, измените последнюю строку на:
isAnagram(word1, word2)
И вы сделали.
Ваш подход к поиску анаграмм совершенно оправдан. Сортировка слов и сравнение их - самый простой способ определить, являются ли два слова анаграммами друг друга.
Тем не менее, я думаю, что вы смущены идеей параметров функции. Когда вы определяете
foo(x1, x2)
когда foo
называется, ожидается, что будет вызван с 2 параметрами. Вы определяете
anagram(s1, s2)
но никогда не снабжайте его s1 и s2. Список параметров не является списком имен переменных, которые вы используете в функции - вы можете назначать новые переменные по желанию. Вместо этого это список входных данных, которые принимает функция.
так, anagram()
это неверно. Вам нужно позвонить anagram(input1, input2)
, (Предполагая, что у вас нет значений по умолчанию, в которые я не буду вдаваться.
def isAnagram(s1, s2):
sortedWord1 = sorted(s1) # s1 is word1! (sorted instead of sort, strings are immutable)
#what should you do here?
if sortedWord1 == sortedWord2:
print("This is an anagram")
else:
print("This is not an anagram") # you forgot a closing quote!
word1 = input("Enter a string: ")
word2 = input("Enter a second string: ")
isAnagram(word1, word2)
Я немного изменил ваш код, чтобы он правильно делал. Тем не менее, я рекомендую вам прочитать немного больше о функциях, прежде чем продолжить.
Думайте о них как о функциях в математике! f(x)
имеет смысл, f
, хотя все еще значимым, вероятно, не то, что вы искали.
>>> isAnagram("anagram", "nagaram")
This is an an anagram
>>> isAnagram("anagram", "woohoo")
This is not an anagram
>>> isAnagram("a", "a")
This is an an anagram
У вас есть правильная идея, но так как word1
а также word2
являются строками, они не имеют .sort()
приписывать. Вы все еще можете сортировать буквы в этой строке:
>>> w='hello'
>>> sorted(w)
['e', 'h', 'l', 'l', 'o']
Результат sorted()
это список, мы можем превратить его обратно в строку, к которой я присоединяюсь, используя пустую строку:
>>> ''.join(sorted(w))
'ehllo'
Вооружившись этими знаниями, ваша программа может выглядеть примерно так:
word1 = input("Enter a string: ")
word2 = input("Enter a second string: ")
def isAnagram(s1, s2):
s1 = ''.join(sorted(word1))
s2 = ''.join(sorted(word2))
if s1 == s2:
print("This is an anagram")
else:
print("This is not an anagram")
isAnagram(word1, word2)