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()
我希望输出 相反,它正在输出
我如何修改代码来修复此问题?分配要求我在没有列表或加入的情况下执行此操作。
答案 0 :(得分:2)
这里有三个问题。
首先,您在开始时获得Iterative:
的原因是因为您明确要求使用此行:
print "Iterative:",
把它取出来。
在每个*
之后获得空格的原因有点棘手。 print
语句的“魔术逗号”总是打印一个空格。没有办法解决这个问题。所以,你要做的就是不要使用print
语句的魔术逗号。
有几个选择:
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)