在Python中将一个字符串和一个整数组合成一个字符串

45

当我尝试将一个整数添加"b"并转换成字符串时,出现了以下错误:

  File "program.py", line 19, in getname
    name = "b" + num
TypeError: Can't convert 'int' object to str implicitly

这与此函数相关:

num = random.randint(1,25)
name = "b" + num

这个SO答案解释了为什么Python不像Javascript一样将+的右侧转换为str。这对我来说有点惊讶,但是那个答案解释得很好。 - LondonRob
5个回答

45
name = 'b' + str(num)
或者
name = 'b%s' % num

请注意,在3.x版本中第二种方法已被弃用。


在Python 3中,%已被弃用。可能需要将其删除。 - S.Lott
3
@S.Lott 我需要在一些使用Python<2.6的系统上工作,例如Ubuntu 8.04。我没有意识到.format不可用,在Python 2.6上开发代码后,不得不去改变所有的.format命令为%有点麻烦。所以实际上,虽然我更喜欢.format,如果您需要与每个版本兼容,那么%仍然是最好的选择——它存在于Python 3中,而.format不存在于Python 2.5及以下版本。 - JAL
4
@S.Lott %在Python3中并不被弃用。PEP 3101清楚地提到:“新系统不会与现有的字符串格式化技术方法名称发生冲突,因此两个系统可以共存,直到废弃旧系统为止。” - Bhargav Rao

11

Python不会像JavaScript或PHP一样自动转换类型。

你必须将其转换为字符串,或使用格式化方法。

name="b"+str(num)

或printf风格的格式化(在Python3中已被弃用)

name="b%s" % (num,)

或者使用新的.format字符串方法

name="b{0}".format(num)

在Python 3中,%已被弃用。建议将其移除。 - S.Lott
2
我现在似乎无法编辑它,所以请注意百分号(%)已被弃用。另外值得一提的是,在Python 2.6之前不可用.format。 - JAL

3

Python 3.6引入了f-strings ,您可以直接使用变量名称而无需使用format函数:

>>> num=12
>>> f"b{num}"
'b12'

2

是的,Python没有隐式的整数转化成字符串。

可以尝试使用str(num)代替。


0
name = "b{0:d}".format( num )

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接