Анаграмма Питон 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)
Другие вопросы по тегам