我正在尝试创建一个程序,其中一件事是像这样向字符串中添加变量。
EnemyHealth = 0
EnemyIs = 'dead'
print("The Enemy's health is %d. The Enemy is %d." % (EnemyHealth,EnemyIs)
但是每次我尝试这样做时,它都不允许我将字符串用作其中一个变量。我应该如何将一个变量字符串插入到另一个字符串中?
P.S. 我正在使用Python 3.7.0
我正在尝试创建一个程序,其中一件事是像这样向字符串中添加变量。
EnemyHealth = 0
EnemyIs = 'dead'
print("The Enemy's health is %d. The Enemy is %d." % (EnemyHealth,EnemyIs)
但是每次我尝试这样做时,它都不允许我将字符串用作其中一个变量。我应该如何将一个变量字符串插入到另一个字符串中?
P.S. 我正在使用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()
方法(这是最佳方法)
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."
通过使用这种方法,可以看到变量名称
直接在花括号{}
中实例化。
有几种简单的方法可以做到这一点,请查看以下代码:旧的格式化方式最终将从语言中删除,应该通常使用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))
更多关于字符串格式化的内容可以在这里找到。
format
的 print 语句,可以让你的代码更加美观。print("The Enemy's health is {} The Enemy is {}".format(str(EnemyHealth),EnemyIs)
字符串对象的格式说明符是%s
。因此,您的代码应该是:
EnemyHealth = 0
EnemyIs = 'dead'
print("The Enemy's health is %d. The Enemy is %s." % (EnemyHealth,EnemyIs))
您也可以使用print("敌人的健康值为%d。敌人是%s。" % (EnemyHelath, EnemyIs))
,不过建议使用print("敌人的健康值为{}。敌人是{}。".format(EnemyHealth,EnemyIs))
。
这是因为你第一个字符串中的%d
需要在其位置上放置一个整数变量。你需要使用%s
来表示字符串。
也就是说:
print("The Enemy's health is %d. The Enemy is %s." % (EnemyHealth,EnemyIs)
%f
用于浮点数,您可以使用一些技巧,例如 %2.4f
将数字1.234567写为01.2346)
str.format()
方法,因为它不仅使代码更清晰,而且还可以避免将不同的数据类型转换为字符串所带来的麻烦。 - SShah