2010-01-17 2 views
1

У меня есть два класса:Как печатать красиво?

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

мне нужно придумать метод, который называется игрой (я, игрушка, п) для класса Dog. Он печатает «Yip!» (С пробелом), за которым следует выход из play.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 

Однако, когда я называю собаку («большой»). Играть (игрушки, 3) или что-то n, это показывает, что Squeak! Yip! Нет Squeak! Yip! Нет Squeak! Yip! Нет Я не знаю, что случилось. Визга! и Ип! должно быть, должно быть на той же линии, пока есть в отдельном сейчас, и там порядок должен быть противоположным. А почему нет? Может ли кто-нибудь помочь мне?

ответ

1

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

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

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

+0

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

+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(). Так вы можете подумать о том, как исправить игру(), сделав это? Благодаря! – timy

+0

Хммм сначала не видел тег «Домашнее задание» ... мой плохой! Теперь, когда я его кодировал, Dog является составным объектом. Чтобы у вас была Собака, вы должны сначала иметь Игрушку, которая не очень реалистична. Но для собаки, чтобы играть, игрушка или какое-то другое развлечение могут быть полезны. Посмотрите, что я вам дал, и подумайте, когда Игрушку нужно дать собаке. Затем подумайте о том, как ссылаются разные переменные и как следует изменять ссылки в зависимости от того, когда Игрушка передается объекту Dog. Можете ли вы сказать, что я использую для обучения физике? Подсказка: вам нужно всего лишь изменить четыре строки кода. – snarkyname77

Смежные вопросы