0

我有一个函数,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->ints 的字典并打印出“手”。

我遇到的麻烦是让它正确显示。当我尝试

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!
4

4 回答 4

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

print 'Current Hand:',
displayHand(hand)
于 2013-03-08T17:02:31.270 回答
2

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

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

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

在python 2中:

print 'Current Hand" ',
displayHand(hand)
于 2013-03-08T17:02:55.593 回答
0

首先,您的displayHand函数不返回任何内容,因此当您尝试打印其结果时,您会得到None. 您可能需要print从函数中删除这些语句并返回字符串。

其次,当您似乎正在使用 python 2 时,您尝试将print其用作 python 3 中可能的函数。如果是这种情况,您需要删除print语句参数周围的括号。

于 2013-03-08T17:04:40.047 回答
0

如果您确实无法修改该函数,那么您可能希望在调用该函数之前将标准输出重定向到一个字符串,然后再将其设置为正常。

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

于 2013-03-08T18:27:38.857 回答