Test_anagram 函数

Test_anagram function

我想定义一个名为 test_anagram 的函数,它不带任何参数。 它应该调用以前的函数 'anagram' 并测试它是否正常工作。 该函数需要在每对单词下面用 true/false 打印出它是否通过。 (到目前为止,我已经将其中一个变位词显示为 false 以进行测试。

我的代码:

# -*- coding: utf-8 -*-


def anagram(str1,str2):
 # string to list
  str1 = list(str1.lower())
  str2 = list(str2.lower())

  #sort list
  str1.sort()
  str2.sort()

  #join list back to string
  str1 = ''.join(str1)
  str2 = ''.join(str2)

  return str1 == str2

print(anagram('trainer', 'terrain')) #true
print(anagram('trainer', 'shoe')) #false

(这个下半部分是我遇到的问题)。

def test_anagram():
   strings = [("plane","panel"),("traps","parts"),("state","man"),                                                            ("nails","snail"),("reset","trees"),("later","alert")]        strings
   for str1,str2 in strings: 
   print(str1,str2) # print each string
   anagram(str1,str2) 


test_anagram() 
print(anagram('plane', 'panel'))

print(anagram('traps', 'parts'))

print(anagram('state', 'man'))

print(anagram('nails', 'snail'))

print(anagram('later', 'alert'))

目前它像这样打印到终端:

plane panel
traps parts
state man
nails snails
reset trees
later alert
True
True
False
True
True

我希望它像这样打印的地方:

plane panel
True
traps parts
True
state man
False
nails snails
True
reset trees
True
later alert
True

我不确定该怎么做,所以非常感谢您的帮助, 谢谢。

缩进是关键。

def test_anagram():
   strings = [("plane","panel"),("traps","parts"),("state","man"),                                                            ("nails","snail"),("reset","trees"),("later","alert")]        strings
   for str1,str2 in strings: 
       print(str1,str2) # print each string
       print(anagram(str1,str2))

以下答案假定缩进是正确的(我回答时不是)

好吧,您的 anagram 函数不打印任何内容。它只是 returns TrueFalse,对吗?所以你这样做:

test_anagram() 
print(anagram('plane', 'panel'))

print(anagram('traps', 'parts'))

print(anagram('state', 'man'))

print(anagram('nails', 'snail'))

print(anagram('later', 'alert'))

您正在调用仅打印字符串的 test_anagram 函数,然后调用 anagram,但 test_anagram 不会对该调用返回的值执行任何操作anagram 函数(它只是调用它)。之后,您手动执行 print(anagram('plane', 'panel')),这就是为什么您会看到 TrueFalse...

如果您的函数 test_anagram 进行了打印,则您不需要手动打印所有对 anagram 的调用:

def test_anagram():
   strings = [("plane","panel"),
              ("traps","parts"),
              ("state","man"),                                                                  
              ("nails","snail"),
              ("reset","trees"),
              ("later","alert")]
   for str1,str2 in strings: 
       print(str1,str2) # print each string (as you're alredy doing)
       print(anagram(str1,str2))  # Print whether is an anagram or not

而不是

   for str1,str2 in strings: 
   print(str1,str2) # print each string
   anagram(str1,str2)

使用

   for str1,str2 in strings:                       # OK - no change
       print(str1,str2) # print each string        # added indentation
       print(anagram(str1,str2))                   # added indentation + print()

(并删除行 test_anagram() 之后所有现在已经多余的行。)

正在格式化

经初步检查,您似乎忘记了关闭列表中的括号,但列表的其余部分实际上就在右边大约 60 个空格处。这有点不可取,但不是什么大问题。然而,问题在于您的变量 "strings" 位于行尾,在您的列表之后。如果代码是 运行,那应该被删除。此外,如果您的行超过 90 个字符左右,您应该使用“\”,如下所示。

缩进(毕竟这是 Python)

其次,Nf4r 没有错,你的缩进有点偏离,但即使那样也不能解决你的问题,因为你需要打印你的 anagram 函数的结果(Nf4r 可以,但不能' t say)在你打印每个字符串的下面。

打印

打印很棒,但是您在此处添加了太多打印语句,无法获得您想要的结果。函数调用后的 5 条 print 语句是多余的。以下将按照您希望的方式工作:

def test_anagram():
  strings = [("plane","panel"),("traps","parts"),("state","man"), \
           ("nails","snail"),("reset","trees"),("later","alert")]
  for str1,str2 in strings:
      print(str1,str2) # print each string
      print(anagram(str1,str2))

test_anagram()