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

1

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

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

Мне нужно придумать метод под названием play (self, toy, n) для класса Dog. Он печатает "Yip!" (С пробелом), за которым следует выход из play.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) или что-то вроде n, это показывает, что Писк! Yip! Никто Писк! Yip! Никто Писк! Yip! Никто Я не знаю, что случилось. Визга! и Ип! должно быть, должно быть на той же линии, пока есть в отдельном сейчас, и там порядок должен быть противоположным. А почему нет? Кто-нибудь может помочь мне?

Теги:
printing

2 ответа

1
Лучший ответ

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

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

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

  • 0
    Ну, извини, я сделал так много ошибок. Но я вроде не понимаю твою идею. Не могли бы вы объяснить более подробно, как я должен исправить игру (). Когда я передаю t = Toy (), затем вызываю Dog ('big'). Play (t, 3), это показывает, Squeak! разделительная линия Yip! Писк! разделительная линия Yip! Писк! разделительная линия Yip! Тем не менее, я хочу достичь, Ип! Squeak! / N Yip! Squeak! / N Yip! Писк !.
  • 0
    @timy, так ясно, что вам нужно сначала напечатать Yip без конца строки (конечная запятая в операторе print , конечно, сделает это), а затем просто вызвать toy.play() (которая печатает остальную часть строки и перевод строки в конце).
0

Первое, что я вижу неправильно, - это попытка вызвать класс "Игрушка" вместо переменной, представляющей экземпляр "игрушка", переданный вам методом "играть". Я не верю, что вы можете создать экземпляр класса и одновременно вызвать один из его методов, что и делает "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!
>>> 
  • 0
    Я так благодарен за ваше решение. Хитрость в том, что это упражнение требует от меня использования одного параметра экземпляра для init и двух для метода play (). Так что вы можете подумать о том, как исправить play () таким образом? Спасибо!
  • 0
    Хммм сначала не увидел тег «Домашнее задание» ... мой плохой! То, как я сейчас это запрограммировал, заключается в том, что Dog является составным объектом. Для того, чтобы у вас была собака, вы должны сначала иметь игрушку, которая не очень реалистична. Но для Собаки, чтобы играть, Игрушка или другое развлечение могло бы быть полезным. Посмотрите на то, что я вам дал, и подумайте, когда игрушку нужно дать собаке. Затем подумайте о том, как ссылки на разные переменные и как ссылки должны быть изменены в зависимости от того, когда Toy передается объекту Dog. Можете ли вы сказать, что я использую для обучения физике? Подсказка: вам нужно всего лишь изменить четыре строки кода.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню