Как правильно печатать? - PullRequest
       10

Как правильно печатать?

1 голос
/ 17 января 2010

У меня есть два класса:

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

Мне нужно придумать метод play (self, toy, n) для класса Dog.Он печатает «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

Однако, когда я вызываю Dog ('big'). Play (toy,3) или что-то еще, это показывает, что Squeak!Yip!Писк!Yip!Писк!Yip!Нет, я не знаю, что не так.Визга!и Yip!должен предполагать, чтобы быть на одной линии, в то время как есть в отдельных сейчас и там порядок должен быть противоположным.А почему нет ни одного?Может кто-нибудь помочь мне?

Ответы [ 2 ]

1 голос
/ 17 января 2010

В вашем примере вызова, Dog('big').play(0), вы не передаете аргумент toy - вот на что он жалуется! Передайте игрушечный аргумент перед n, и это будет лучше.

Затем вы можете приступить к исправлению ошибок в вашей реализации play: почему вы создаете новую игрушку, а не используете аргумент, почему вы печатаете 'None', когда это не является частью спецификации, как вы бесполезны? печать возвращаемого значения метода Toy.play (который возвращает None, неявно) вместо того, чтобы работать вместе с тем фактом, что последний метод print что-то вводит, никогда не увеличивая count и таким образом заканчивая бесконечными циклами , (я полагаю, что четыре серьезные ошибки в восьми строках плюс одна в вызове должны быть какой-то записью; -).

Кстати, домашняя работа обычно помечается тегом homework, а не exercise. (И есть еще одна ошибка в названии вашего Q, так как на самом деле нет classmethod , просто старая добрая равнина и совершенно нормальный экземпляр метод).

0 голосов
/ 17 января 2010

Первое, что я вижу неправильно, это то, что вы пытаетесь вызвать класс «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!
>>> 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...