2013-03-08 148 views
0

格式化字符串和函數調用我有一個功能,displayHand(),它看起來像這樣:打印在python

def displayHand(hand): 
    """ 
    Displays the letters currently in the hand. 

    For example: 
    >>> displayHand({'a':1, 'x':2, 'l':3, 'e':1}) 
    Should print out something like: 
     a x x l l l e 
    The order of the letters is unimportant. 

    hand: dictionary (string -> int) 
    """ 
    for letter in hand.keys(): 
     for j in range(hand[letter]): 
      print letter,    # print all on the same line 
    print        # print an empty line 

它是爲我提供的(從600X類)。如上所述,它需要一個字符串 - >整數的字典並打印出「手」。

我遇到越來越這顯示正確的煩惱什麼。當我嘗試

print('Current Hand: ', displayHand(hand)) 

這就是我得到:

a d d m o q y 
('Current Hand: ', None) 

,因爲這是由教師提供的,我敢肯定有代碼是這樣寫的一個原因,有什麼東西我米沒有得到。

我希望得到的是輸出這樣的:

Current Hand: a d d m o q y 

我絕對全新這個東西,所以我甚至不知道問什麼問題。

我的評價:至於我能拼湊,displayHand()不返回任何東西,這是什麼擰緊了這一切。但是,我如何捕獲這個函數的打印輸出並按照我想要的方式呈現它?我想我應該試圖捕獲它在一個字符串,並有返回,但假設

教師試圖證明什麼,我會怎麼做,而不改變displayHand()方法?

如果我的評估是關閉的,發生了什麼事?

編輯:此功能是給我的班級,我將不得不使用它是這樣。我知道改變它返回一個str會容易得多,但是我怎麼才能在沒有這樣做的情況下完成正確的輸出?

進一步編輯:我處理,要求完全按照我寫的輸出autograder。對不起,如此挑剔,我很欣賞答案,如果不是這樣的話,會使用它們。

最後編輯:感謝您的澄清 - 我會用你的想法,使這個函數做什麼,我需要做一個內部的輔助函數!

FINAL final編輯:我想通了!我所要做的就是,

print('Current Hand:'), 
displayHand(hand) 

對於真正的最終編輯:

Hah! you got it too! thank you so much for the help, I appreciate it! 
+0

我想你的功能應該不是返回打印它們的值。 – Oli 2013-03-08 17:02:03

回答

2

你已經功能打印,它不返回任何東西。

不要試圖「抓」的打印輸出,只需改變函數返回手,格式化字符串:

def displayHand(hand): 
    letters = [] 
    for letter, count in hand.iteritems(): 
     letters.extend([letter] * count) 
    return ' '.join(letters) 

這給:

>>> hand = {'a': 1, 'q': 1, 'd': 2, 'y': 1, 'm': 1, 'o': 1} 
>>> displayHand(hand) 
'a q d d y m o' 
>>> print 'Current Hand:', displayHand(hand) 
Current Hand: a q d d y m o 

如果你是不應該改變displayHand()函數,然後使用該函數中使用的相同技巧,並且不要通過在打印語句的末尾添加逗號來打印換行符:

print 'Current Hand:', 
displayHand(hand) 
+0

哈!我剛剛嘗試過,並通過IDLE運行了這個確切的命令。但是,我需要輸出爲 當前手:a d v d s v – dislikesAppleCores 2013-03-08 17:12:54

+0

@dislikesAppleCores:原始代碼將永遠不會寫這樣的手。這將是'一個dv v s'或類似的(你有多個組合在一起的卡片)。 – 2013-03-08 17:13:35

+0

@dislikesAppleCores:除此之外,我沒有看到我的代碼與輸出有什麼不同。 – 2013-03-08 17:14:46

0

你可以做到這一點,如果你必須使用所提供的功能,不能設法解決它:

print('Current Hand: ', end='') 
displayHand(hand) 

我很困惑,你使用Python 2或3?

在Python 2:

print 'Current Hand" ', 
displayHand(hand) 
0

首先,你的displayHand功能不會當您嘗試打印其結果你得到None返回任何東西左右。您可能需要從函數中刪除這些print語句,然後返回該字符串。

其次,你嘗試使用print作爲一個函數,它可能在python 3中很有用,而你似乎在使用python 2.如果是這種情況,你需要刪除圍繞print語句參數的括號。