在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课程)。根据描述,它接收一个字符串到整数的字典,然后打印出“手牌”。
我遇到的问题是,想让它正确显示出来。当我尝试这样做:
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() 方法的情况下做到这一点呢?
如果我的判断不对,那到底发生了什么呢?
补充说明:这个函数是课程给我的,我必须这样使用它。我明白如果改成返回一个字符串会简单得多,但我该如何在不这样做的情况下得到正确的输出呢?
进一步补充:我正在处理一个自动评分系统,它要求输出必须完全按照我写的那样。抱歉这么挑剔,我很感激大家的回答,如果不是因为这个,我会使用你们的建议。
最后补充:谢谢你的澄清——我打算使用你的想法,在这个函数内部创建一个辅助函数,来完成我需要的功能!
最终的最终补充:我搞定了!我只需要这样做:
print('Current Hand:'),
displayHand(hand)
真的最后的补充:
Hah! you got it too! thank you so much for the help, I appreciate it!
4 个回答
如果你真的不能修改那个函数,那么你可以在调用这个函数之前,把标准输出重定向到一个字符串里,然后在调用完之后再把它恢复正常。
这篇文章解释了怎么做:我可以把Python中的标准输出重定向到某种字符串缓冲区吗?
如果你必须使用这个给定的函数,并且不能尝试去修复它,你可以这样做:
print('Current Hand: ', end='')
displayHand(hand)
我有点困惑,你是用 Python 2 还是 Python 3 呢?
在 Python 2 中:
print 'Current Hand" ',
displayHand(hand)
你的函数已经在打印内容了,它并没有返回任何东西。
不要试图去“捕捉”打印出来的内容,直接把函数改成返回手牌,并把它格式化成字符串:
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)