我想遍历for循环以查找所有出现的“%”后跟一个整数,然后将其替换为另一个单词。
for x in format:
if x is "%":
finder = format.find("%")
val = format[finder + 1]
index = int(format[finder + 1])
print("Index value is %d" % index)
replace = args[index]
print(replace)
str = format.replace(val, replace)
return str
如果格式(即字符串)中有多个“%”,则仅替换整数。
例如:格式:"%1 greets %0" and args = "Bob", "Alex"
输出应为:"Alex greets Bob"
但是我得到的是"Alex greets %0"
答案 0 :(得分:3)
您需要写if x == "%"
,而不是if x is "%"
。 is
运算符检查它们是否实际上是相同的对象,而不是它们是否具有相同的内容。
另一个问题是.find('%')
始终返回字符串中第一个%
的位置,而不管您在迭代中的位置如何。您可以将代码更改为类似的
for finder, x in enumerate(format):
if x is "%":
# you already know your position
val = format[finder+1]
...
答案 1 :(得分:1)
您的问题出在if x is "%":
这行中,is
操作员检查两者是否都是同一对象。您需要使用if x=='%'
(==
运算符会检查两者是否都相同,返回True
不必都是相同的对象)。
答案 2 :(得分:0)
肯定有更好的方法,但是,如果您想循环执行,那么它将起作用。
AmpAmpByOracle
您的解决方案无效,因为您一直在搜索相同的字符串(格式),但将结果保存在另一个字符串(str)中。因此,find方法将始终在格式字符串中找到第一个%。
我想补充的另一条评论是避免将变量命名为python关键字,例如format和str。