如何美观地打印?
我有两个类:
class Dog(object):
def __init__(self, name):
self.name = name
class Toy(object):
def play(self):
print "Squeak!"
我需要为Dog类写一个叫做play(self, toy, n)的方法。这个方法会打印“Yip! ”(后面有个空格),然后再打印玩具的play方法的输出,所有这些都在同一行上。这个过程会重复n次,每次输出都在不同的行上。如果n是负数,那就当作是0处理。
我做的事情是:
def play(self, toy, n):
count = 1
if n > 0:
while count <= n:
print "Yip! %s " % Toy().play()
count += 1
else:
print None
但是,当我调用Dog('big').play(toy, 3)或者其他任何n值时,输出是这样的: Squeak! Yip! None Squeak! Yip! None Squeak! Yip! None 我不知道哪里出错了。Squeal!和Yip!应该在同一行上,但现在它们分开了,而且顺序应该是反的。还有,为什么会有None出现呢? 有没有人能帮我解决这个问题?
2 个回答
我看到的第一个问题是,你在尝试调用类'Toy',而不是传递给你'play'方法的实例变量'toy'。我觉得你不能同时创建一个类的实例并调用它的方法,这就是'Toy().play()'想要做的事情。另一个问题是,我不太明白你设计这些类的意图。下面是我会如何实现这些类,并用它们来达到你想要的效果。
class Toy(object):
def play(self):
return "Squeak!"
class Dog(object):
speak = 'Yip! %s'
def __init__(self, name, toy):
self.name = name
self.toy = toy
def play(self,n):
if n > 0:
for each in range(n):
print(self.speak % self.toy.play())
else:
print(None)
接下来是我会如何使用它
Python 2.6.4 (r264:75821M, Oct 27 2009, 19:48:32)
[GCC 4.0.1 (Apple Inc. build 5493)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> from toy import Toy, Dog
>>> spike = Dog("Spike",Toy())
>>> spike.play(3)
Yip! Squeak!
Yip! Squeak!
Yip! Squeak!
>>>
在你的例子中,Dog('big').play(0)
,你没有传递toy
这个参数——这就是它抱怨的原因!在n
之前传递一个玩具参数,这样会更好。
然后你可以开始解决你play
实现中的问题:为什么你要新建一个玩具,而不是使用传入的参数?为什么在不需要的情况下打印'None'
?你为什么要无用地打印Toy.play
方法的返回值(它隐式返回None
),而不是利用这个方法已经在打印的事实?还有,你从来没有增加count
,这导致了无限循环。(在八行代码中出现四个严重错误,再加上调用中的一个,我觉得这简直是个记录;-)。
顺便说一下,作业通常会标记为homework
,而不是exercise
。(而且,你问题标题中还有一个错误,因为并没有真正的类方法,只是一个普通的、完全正常的实例方法)。