如何美观地打印?

1 投票
2 回答
819 浏览
提问于 2025-04-15 18:06

我有两个类:

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 个回答

0

我看到的第一个问题是,你在尝试调用类'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!
>>> 
1

在你的例子中,Dog('big').play(0),你没有传递toy这个参数——这就是它抱怨的原因!在n之前传递一个玩具参数,这样会更好。

然后你可以开始解决你play实现中的问题:为什么你要新建一个玩具,而不是使用传入的参数?为什么在不需要的情况下打印'None'?你为什么要无用地打印Toy.play方法的返回值(它隐式返回None),而不是利用这个方法已经在打印的事实?还有,你从来没有增加count,这导致了无限循环。(在八行代码中出现四个严重错误,再加上调用中的一个,我觉得这简直是个记录;-)。

顺便说一下,作业通常会标记为homework,而不是exercise。(而且,你问题标题中还有一个错误,因为并没有真正的类方法,只是一个普通的、完全正常的实例方法)。

撰写回答