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

时间:2013-03-08 17:00:45

标签: python function printing

我有一个函数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()方法的情况下做到这一点?

如果我的评估结束了,发生了什么?

编辑:这个功能是由班级给我的,我必须这样使用它。我知道更改它以返回str会更容易,但是如何在不这样做的情况下完成正确的输出?

进一步编辑:我正在处理一个自动编程器,它要求输出完全像我写的那样。很抱歉这么挑剔,我很感激答案,如果不是这样的话会使用它们。

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

最终决赛编辑:我想通了!我所要做的就是,

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

真正的最终编辑:

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

4 个答案:

答案 0 :(得分: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)

答案 1 :(得分:2)

如果您必须使用提供的功能,并且不得尝试修复它,则可以执行此操作:

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

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

在python 2中:

print 'Current Hand" ',
displayHand(hand)

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

如果您真的无法修改该功能,那么您可能希望在调用该功能之前将标准输出重定向到字符串,然后将其恢复正常。

这篇文章解释了如何做到这一点:Can I redirect the stdout in python into some sort of string buffer?