我有一些问题,即使经过几天的努力,我也无法克服。
Toy
没有实例变量和一个方法play,它返回字符串"Squeak!\n"
(带有感叹号和大写'S'
,没有空格,并带有换行符结束)。 Toy的构造函数(它的__init__
方法)不带任何参数(除了通常的self)并且什么都不做(所以它可能被省略)。
Dog
有一个实例变量,它的名称,必须作为构造函数的参数提供。它有两种方法:
call(self, shout)
正好是True
(带逗号,空格和感叹号,没有前导或尾随空格),则 shout
会返回"Here, n!"
,其中n
1}}是狗的名字。否则,它返回False
play(self, toy, n)
生成字符串"Yip! "
(带有尾随空格)与toy.play()
返回的字符串连接在一起。它重复该组合重复n次,除非n为负,它与0相同。澄清:“s”重复2次是“ss”。 “s”重复0次是“”。
这就是我所拥有的:
class Toy:
def __init__(self):
pass
def play(self):
return "Squeak!\n"
class Dog:
def __init__(self, name):
self.name = name
def call(self, shout):
self.shout = shout
if self.shout == 'Here, ' + self.name + '!':
return True
return False
def play(self, toy, n):
self.toy = toy
self.n = n
if n <= 0:
print('')
else:
for i in range(n):
print('Yip ' + self.toy.play())
但是,我得到的错误很少:
TestDog2.test_dog_fancy_toy
FAILURE: AssertionError
None != 'Yip! Ding, Dong!\n'
-
TestDog2.test_dog_play_once
FAILURE: AssertionError
None != 'Yip! Squeak!\n'
-
TestDog2.test_dog_play_zero_twice
ERROR: TypeError
Can't convert 'NoneType' object to str implicitly
答案 0 :(得分:1)
在Toy
类中,play
方法返回一个字符串,而play
Dog
方法返回任何内容(它只是打印内容)。
当您致电dog.call()
时,您不会获得'Yip ' + self.toy.play()
值。所以函数按预期返回None
,你的断言是错误的
要解决这个问题,您应该返回值而不是打印它。
例如,在您的Dog.call()
方法中:
if n <= 0:
return ''
else:
phrases = ['Yip ' + self.toy.play() for i in range(n)]
return '\n'.join (phrases)
phrases
是一个构建using list comprehension的列表。它将包含n
个元素,由表达式'Yip ' + self.toy.play()
组成。您只需要使用\n
加入每个元素,在每个短语后创建一个新行,然后就完成了。
答案 1 :(得分:0)
#!/usr/bin/env python
class Toy:
def play(self):
return "Squeak!\n"
class Dog:
def __init__(self, name):
self.name = name
def call(self, shout):
if shout == 'Here, ' + self.name + '!':
return True
return False
def play(self, toy, n):
if n <= 0:
print('')
else:
for i in range(n):
print('Yip ' + toy.play())
dog = Dog("Spot") # Spot the dog
toy = Toy()
assert(toy.play() == "Squeak!\n")
assert(dog.call("Here, {0}!".format('Spot'), 'Here, Spot!')
不确定您的问题究竟是什么,但这可能会有所帮助?
我们真的需要更多信息才能在这里为您提供帮助。