如何将变量插入字符串中?

7

我正在尝试创建一个程序,其中一件事是像这样向字符串中添加变量。

EnemyHealth = 0  

EnemyIs = 'dead'

print("The Enemy's health is %d. The Enemy is %d." % (EnemyHealth,EnemyIs)

但是每次我尝试这样做时,它都不允许我将字符串用作其中一个变量。我应该如何将一个变量字符串插入到另一个字符串中?

P.S. 我正在使用Python 3.7.0

7个回答

22

我知道有4种方法可以在python(Python 3)中实现这一点:

1)连接字符串:

您可以使用+来连接2个字符串,但是您只能连接字符串类型的数据,这意味着非字符串类型的数据需要使用str()函数转换为字符串。例如:

print("The Enemy's health is " + str(EnemyHealth) + ". The Enemy is " + EnemyIs + ".") 
# output = "The Enemy's health is 0. The Enemy is dead." 

2) 利用Python 3的 print() 函数,它可以接受多个参数:

在这里,你的 print() 语句类似于上面的连接语句,只需把我使用的 + 替换为 ,。使用这种方式的好处是,不同的数据类型将自动转换为字符串,即不再需要使用 str() 函数。例如:

print("The Enemy's health is ", EnemyHealth, ". The Enemy is ", EnemyIs, ".") 
# output = "The Enemy's health is 0. The Enemy is dead." 

3) 使用您的字符串替换方法

您的代码无法正常工作的原因是因为%d表示您将使用整数替换它,因此要使您的代码正常工作,需要将存储在变量EnemyIs中的字符串替换为%s,它用于指示它将被替换为一个字符串。因此,为了解决您的问题,您需要执行以下操作:

print("The Enemy's health is %d. The Enemy is %s." % (EnemyHealth, EnemyIs)) 
# output = "The Enemy's health is 0. The Enemy is dead." 

4) Python字符串的format()方法(这是最佳方法)

format()是Python中所有字符串的内置方法,它允许您轻松地替换Python字符串中的占位符{}为任何变量。与上面的解决方案3不同,format()方法不需要您将不同的数据类型转换为字符串,因为它会自动为您完成此操作。例如,要使您的打印语句工作,您可以执行以下操作:

print("The Enemy's health is {}. The Enemy is {}.".format(EnemyHealth, EnemyIs)) 

或者

print("The Enemy's health is {0}. The Enemy is {1}.".format(EnemyHealth, EnemyIs)) 

# output = "The Enemy's health is 0. The Enemy is dead." 

更新:

5) F-Strings

从 Python 3.6 开始,您现在还可以使用 f-strings 来替换字符串中的变量。这种方法类似于上面描述的 .format() 方法,并且在我的意见中是对 str.format() 方法更好的升级。要使用此方法,您只需在定义字符串时在开头引号前加上 f,然后在字符串内部使用格式 {[variable name goes here]} 即可。例如,要使您的打印语句使用此方法工作,您可以执行以下操作:

print(f"The Enemy's health is {EnemyHealth}. The Enemy is {EnemyIs}.")
# output = "The Enemy's health is 0. The Enemy is dead." 

通过使用这种方法,可以看到变量名称直接在花括号{}中实例化。


谢谢。我没有意识到%d和%s是不同的。 - PLP123
@PLP123 没问题,但是确实要使用 str.format() 方法,因为它不仅使代码更清晰,而且还可以避免将不同的数据类型转换为字符串所带来的麻烦。 - SShah

4
避免在Python3.x中使用%格式化符号
从文档中可以得知:

旧的格式化方式最终将从语言中删除,应该通常使用str.format()。

有几种简单的方法可以做到这一点,请查看以下代码:
print("The Enemy's health is {} The Enemy is {}".format(EnemyHealth, EnemyIs)

print("The Enemy's health is {0} The Enemy is {1}".format(EnemyHealth, EnemyIs)

print("The Enemy's health is {EnemyHealth} The Enemy is {EnemyIs}".format(EnemyHealth=EnemyHealth, EnemyIs=EnemyIs)

如果您解释一下为什么在Python 3.x中应该避免使用%替换,那么这个答案会更好。 - Bryan Oakley
@BryanOakley 已添加更新 - Vishvajit Pathak

3

您的代码问题在于第二个参数使用了 %d%d 是用于整数的,而 %s 则是用于字符串的。您可以通过将其更改为 %s 来使其工作:

EnemyHealth = 0
EnemyIs = 'dead'
print("The Enemy's health is %d. The Enemy is %s." % (EnemyHealth, EnemyIs))

输出

The Enemy's health is 0. The Enemy is dead.

另一种方法是使用格式化函数,如下所示:

print("The Enemy's health is {}. The Enemy is {}.".format(EnemyHealth, EnemyIs))

更多关于字符串格式化的内容可以在这里找到。


2
使用带有 format 的 print 语句,可以让你的代码更加美观。
print("The Enemy's health is {} The Enemy is {}".format(str(EnemyHealth),EnemyIs)

2

字符串对象的格式说明符是%s。因此,您的代码应该是:

EnemyHealth = 0   
EnemyIs = 'dead'
print("The Enemy's health is %d. The Enemy is %s." % (EnemyHealth,EnemyIs))

2

您也可以使用print("敌人的健康值为%d。敌人是%s。" % (EnemyHelath, EnemyIs)),不过建议使用print("敌人的健康值为{}。敌人是{}。".format(EnemyHealth,EnemyIs))


1

这是因为你第一个字符串中的%d需要在其位置上放置一个整数变量。你需要使用%s来表示字符串。

也就是说:

print("The Enemy's health is %d. The Enemy is %s." % (EnemyHealth,EnemyIs)

(还要记住,%f 用于浮点数,您可以使用一些技巧,例如 %2.4f 将数字1.234567写为01.2346)

1
我没有意识到它们是用于不同的用途的。谢谢。 - PLP123

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