2013-03-08 82 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语句参数的括号。