我有一个函数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重定向到某种字符串缓冲区吗?