打印在python中格式化字符串和函数调用



我有一个函数displayHand(),它看起来像这样:

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类)。如前所述,它接受string->int类型的字典,并打印出"手"。

我遇到的麻烦是如何正确显示这个。当我尝试

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会容易得多,但是如果不这样做,我怎么能完成正确的输出呢?

进一步编辑:我正在处理一个自动分级器,要求输出完全像我写的。很抱歉这么挑剔,我很感激你的回答,如果不是为了这个,我会用它们的。

最终编辑:感谢您的澄清-我将使用您的想法,并在此函数内创建一个辅助函数,以完成我需要它做的事情!

最终编辑:我弄明白了!我所要做的就是,

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

真正的最终编辑:

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

你的函数已经打印了,它没有返回任何东西。

不要试图'捕捉'打印的输出,只需更改函数以返回手,格式为字符串:

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语句末尾添加逗号来打印换行符:

print 'Current Hand:',
displayHand(hand)

如果您必须使用所提供的函数并且不能尝试修复它,则可以这样做:

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

我很困惑,你用python 2还是3?

python 2:

print 'Current Hand" ',
displayHand(hand)

首先,你的displayHand函数不返回任何东西,所以当你试图打印它的结果时,你得到None。您可能需要从函数中删除那些print语句并返回字符串。

第二,你尝试使用print作为一个函数,这可能只在python 3中,而你似乎在使用python 2。如果是这种情况,您需要删除print语句参数周围的括号。

如果你真的不能修改该函数,那么你可能需要在调用该函数之前将标准输出重定向到一个字符串,然后将其设置为正常。

这篇文章解释了如何做到这一点:我可以将python中的stdout重定向到某种字符串缓冲区吗?

最新更新