我正在尝试创建一个程序,我想做的一件事就是向字符串添加变量,如下所示。
EnemyHealth = 0
EnemyIs = 'dead'
print("The Enemy's health is %d. The Enemy is %d." % (EnemyHealth,EnemyIs)
但是每次我尝试它都不会让我使用字符串作为变量之一。如何将变量字符串插入另一个字符串?
附注我正在使用 python 3.7.0
我知道有 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()
方法(这是最好的使用方法)
这是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弦
从 python 3.6+ 开始,您现在还可以使用 f 字符串来替换字符串中的变量。这个方法和上面描述的
.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."
正如您通过使用此方法所看到的,
variable name
直接在大括号{}
内实例化。
避免在 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)
您的代码的问题是您使用
%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))
有关字符串格式的更多信息可以在此处找到。
字符串对象的格式说明符是
%s
。所以你的代码应该是:
EnemyHealth = 0
EnemyIs = 'dead'
print("The Enemy's health is %d. The Enemy is %s." % (EnemyHealth,EnemyIs))
您也可以使用
print("The Enemy's health is %d. The Enemy is %s." % (EnemyHelath, EnemyIs))
,但建议使用 print("The Enemy's health is {}. The Enemy is {}.".format(EnemyHealth,EnemyIs))
。
使用 print 和
format
,它会让你的代码看起来不错
print("The Enemy's health is {} The Enemy is {}".format(str(EnemyHealth),EnemyIs)
那是因为第一个字符串中的
%d
需要一个整数变量来代替它。您想要的是字符串的 %s
。
即:
print("The Enemy's health is %d. The Enemy is %s." % (EnemyHealth,EnemyIs)
(另请记住,
%f
用于浮点数,您可以使用一些技巧,例如%2.4f
将数字1.234567写为01.2346)