2

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()

私は関数の定義を完全には理解していないと思うので、何が起こっているのか説明していただければ幸いです!

4

3 に答える 3

1

アナグラムを見つけるためのあなたのアプローチは完全に合理的です。単語を並べ替えて比較することは、2 つの単語が互いにアナグラムであるかどうかを確認する最も簡単な方法です。

ただし、関数パラメーターの考え方に混乱していると思います。定義すると

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
于 2013-11-13T02:55:41.710 に答える
1

あなたは正しい考えを持っていますが、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)
于 2013-11-13T02:55:50.867 に答える