2012-05-11 56 views
1

我有下面的代码将文本添加到前面 - Python的

Test1 = Price[Product.index(TestABC)]+ AddQTYPriceA 

print Test1 
print "try this test" + Test1 

当需要打印测试1它给出了正确的答案。我想尝试添加文本到它的前面,所以我已经输入打印“尝试这个测试”+ Test1

对于第二个打印命令,它给出了以下错误。

Traceback (most recent call last): 
    File "C:\Python26\data.py", line 78, in <module> 
    print "try this test" + Test1 
TypeError: cannot concatenate 'str' and 'float' objects 

有人能帮助我怎样才能文字出现在面前。

Greggy d

+1

'Test1'是一个浮点值,和Python不会自动将其转换为字符串。如果你想将它与一个字符串连接起来,你必须用'str()'''''来表示它。 –

+1

注意[PEP-8](http://www.python.org/dev/peps/pep-0008/)建议保留'CapWords'表示类,并且使用'lowercase_with_underscores'表示局部变量,这会让你的代码更清晰。 –

回答

6

为了将字符串和浮你需要转换为浮动使用str()函数的字符串。

print "try this test " + str(Test1) 

或者你可以使用.format()字符串的方法:

print "try this test {0}".format(Test1) 

这些方法中的两个都记录在蟒蛇string built-in type page

3

试试这个:

print "try this test", Test1 

# let's assume that Test1 is equal to 2.5, you will get : 
>>> try this test 2.5 

无需在连接字符串,让蟒蛇做的工作;)

编辑: 作为mentionned由Lattyware,Python会自动添加2个部分之间的空间的结果字符串。

+1

请注意,这将增加一个空间,这可能是也可能不是想要的。 –

1

好吧,让我的手腕掌for使用传统的方法。

使用string.format方法,因为它是非常灵活的:

print "try this test {0}".format(Test1) 

str.format()需要的参数的任意数量,并且顺序地映射到时隙{}在字符串中给出。所以你可以这样做:

"{0} {1} {2}".format("test", 1, 0.01) # => "test 1 0.01" 

不错,简单!

所以只能做以下,如果没有人注视:

print "try this test %f" % (Test1) 
+0

-1。不建议使用模数运算符进行字符串格式化,请使用'str.format()'。此外,请对您的建议给出一些解释。 –

+0

@Lattyware:他们新的格式风格可能是首选,但旧式**尚未弃用**。请参阅[旧字符串格式化操作](http://docs.python.org/py3k/library/stdtypes.html#old-string-formatting-operations),特别是“目前还没有计划放弃printf样式格式。” –

+0

@StevenRumbalski对不起,我糟糕的措辞选择,仍然强烈建议使用新代码,并且现在没有理由鼓励使用旧的方法,无论如何,删除我的-1更新。 –

0

你可以试试这个例子:

print "try this test %s" % str(Test1)

,它允许你把文字的开头或其他地方的与Test1的关系。

+0

-1。同样,不推荐使用模数运算符进行字符串格式化,请使用'str.format()'。此外,请对您的建议给出一些解释。 –

+0

你为什么给我-1? –

+1

......我刚解释过。 –

0

您必须将Test1的输出转换为相同的数据 - 打印可以处理任何数据类型,但+运算符只处理相同类型。

选项包括:

  • 施放任何输出Test1的使用str()

  • 给串定义一个方法来处理增加的Test1的到其他事情返回的字符串。

  • 使其成为Test1的类实际生成整个字符串输出,所以就没有必要来连接它,你可以实现__str__()方法

  • 使用很多的选项来输出

格式化

但我相信主要的一点是,+在python中不会重载,因为它在其他语言中,并且需要明确地转换不同的类型。

例子就需要被添加到您的舱位价格怎么能够使用您的打印代码不变:

class Price(object): 
    def __add__(self, x): 
     return '%s %s' % (self, x)