如何打印得很好?

时间:2010-01-17 05:47:17

标签: python printing

我有两个班级:

class Dog(object):
    def __init__(self, name):
        self.name = name
class Toy(object):
    def play(self):
        print "Squeak!"

我需要为类Dog提出一个名为play(self,toy,n)的方法。它打印“Yip!”(带空格),然后输出同一行的toy.play输出。这种情况发生了n次,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

然而,当我打电话给狗('大')。玩(玩具,3)或其他什么时,它表明了这一点 吱! 伟业!没有 吱! 伟业!没有 吱! 伟业!没有 我不知道出了什么问题。尖叫!和叶!应该假设在同一条线上,而现在有分开,那里的顺序应该相反。为什么没有? 有人可以帮帮我吗?

2 个答案:

答案 0 :(得分:1)

在您的示例通话Dog('big').play(0)中,您传递toy参数 - 这就是它所抱怨的内容!在n之前传递玩具参数,那会更好。

然后你可以开始解决你的play实施中的错误:你为什么要制作一个新的玩具而不是使用这个论点,为什么你打印'None'时这不是规范的一部分,如何你无用地打印Toy.play方法的返回值(隐式地返回None),而不是与后一种方法是print的事实一起工作,并且永远不会增加count然后以无限循环结束。 (我认为,八行中的四个严重错误加上一个通话中的一个必须是某种记录; - 。)。

BTW,家庭作业通常使用标记homework进行标记,而不是exercise。 (并且,你的Q标题还有一个错误,因为实际上没有classmethod,只是一个很好的旧平原和完全正常的实例方法。)

答案 1 :(得分:0)

我看到错误的第一件事是你试图调用类'Toy'而不是代表实例'toy'的变量传递给你'play'方法。我不相信你可以实例化一个类并同时调用它的一个方法,这就是'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!
>>>