使用for循环在字符串元素之间插入字符

时间:2014-11-21 20:46:45

标签: python

def main():
    string = raw_input("string:")
    pattern = raw_input("pattern:")
    end = len(string)
    insertPattern(string,pattern)

def insertPattern(string,pattern):
    end= len(string)-1
    print "Iterative:",
    for x in range(end):
        if x == end:
            print string[x]
        if x < end:
            print string[x]+pattern,

main()

我希望输出 enter image description here 相反,它正在输出 enter image description here

我如何修改代码来修复此问题?分配要求我在没有列表或加入的情况下执行此操作。

1 个答案:

答案 0 :(得分:2)

这里有三个问题。


首先,您在开始时获得Iterative:的原因是因为您明确要求使用此行:

print "Iterative:",

把它取出来。


在每个*之后获得空格的原因有点棘手。 print语句的“魔术逗号”总是打印一个空格。没有办法解决这个问题。所以,你要做的就是不要使用print语句的魔术逗号。

有几个选择:

  • 使用Python 3.x中功能更强大的print 函数,您可以在2.7中使用__future__语句借用它。您可以传递任何想要替换空格的分隔符,甚至是空字符串。
  • 使用sys.stdout.write代替print;除非你明确地写它们,否则你既不会获得换行也不会得到空格。
  • 随着时间的推移构建字符串,最后print整个字符串。

最后一个是最通用的解决方案(并且还会带来许多其他有用的可能性,例如返回或存储组合字符串),所以我将表明:

def insertPattern(string,pattern):
    result = ''
    end= len(string)-1
    for x in range(end):
        if x == end:
            result += string[x]
        if x < end:
            result += string[x]+pattern
    print result

最后,最后的额外*是因为x == end永远不会成立。 range(end)会为您提供所有数字,但不包括end

您可能想要的是end = len(string),然后是if x == end-1


但你可以简化这一点。您需要x的唯一原因是获取string[x],并区分第一个或最后一个值(因此您不知道在第一个或之前添加额外的*或最后一次)。你可以用旗帜解决最后一个,或者只处理第一个特殊的旗帜。然后,您可以遍历string本身,而不是遍历其索引:

def insertPattern(string,pattern):
    result = string[0]
    for ch in string[1:]:
        result += pattern + ch
    print result

一旦你完成了,你可能会发现这几乎与str.join方法的相同,所以你可以使用它:

def insertPattern(string,pattern):
    print pattern.join(string)