2010-01-17 37 views
1

我有兩個類:如何打印很好?

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

我需要拿出一個方法叫戲(自我,玩具,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)或任何n是,它表明 吱! Yip! Yip!無 吱吱! Yip! Yip!無 吱吱! Yip! Yip!無 我不知道什麼是錯的。尖叫!和Yip!應該假設在同一條線上,而現在和現在的順序應該相反。爲什麼有一個無? 任何人都可以請幫我嗎?

回答

1

在你的示例調用Dog('big').play(0)中,你是而不是通過了toy的說法 - 這就是它的抱怨!在n之前傳遞一個玩具參數,那會更好。

然後,您可以開始解決play實現中的錯誤:爲什麼要製作新玩具而不是使用參數,爲什麼在打印'None'時不是規範的一部分,如何無用地打印返回(隱式地返回None)的值,而不是與後一個方法是print的事實一起工作,並且從不增加count,從而最終陷入無限循環。 (八條線中的四個嚴重錯誤再加上一個電話就是某種記​​錄,我相信;-)。

順便說一句,作業通常用標籤homework而不是exercise標記。 (而且,Q的標題還有一個缺陷,因爲實際上沒有classmethod,只是一個很好的老的普通和完全正常的實例方法)。

+0

嗯,我很抱歉我做了很多錯誤。但我有點不認同你的想法。你能否更明確地解釋我應該如何解決這個問題()。當我傳遞t =玩具(),然後調用Dog('big')。play(t,3),它顯示, Squeak!分隔線 Yip!無 吱吱!分隔線 Yip!無 吱吱!分隔線 Yip!無 但是,我想達到, Yip!吱!/ n Yip!吱!/ n Yip!吱!。 – timy 2010-01-17 19:45:01

+0

@timy,很明顯,你需要首先打印Yip而不需要行結束(當然''print'語句後面的逗號將會這樣做),然後調用'toy.play()'(它打印其餘部分和最後的換行符)。 – 2010-01-18 00:43:27

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()嗎?謝謝! – timy 2010-01-17 19:30:47

+0

嗯,起初沒有看到'家庭作業'標籤...我的壞!我現在編碼的方式是Dog是一個複合對象。對於你有一隻狗,你必須先有一個玩具,這是不現實的。但對於狗玩,玩具或其他娛樂可能會有所幫助。看看我給你的東西,想想玩具應該送給狗的時候。然後考慮如何引用不同的變量,以及如何根據Toy傳遞給Dog對象的情況來更改引用。你能告訴我用來輔導物理嗎?提示:您只需修改四行代碼。 – snarkyname77 2010-01-17 21:38:22

相關問題