for循环未在python中完全迭代

时间:2018-07-05 11:31:38

标签: python for-loop

我想遍历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"

3 个答案:

答案 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。