2014-11-21 25 views
-1
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使用for循環中插入串的元素之間的字符

我將如何修改代碼來解決這一問題?作業要求我沒有列出或加入。

+0

如果你不希望它輸出的字「迭代:」那就不要打印。如果你不需要它們之間的空格,那麼使用'sys.stdout.write()'而不是打印。 – sberry 2014-11-21 20:52:27

回答

2

這裏有三個問題。


首先,你得到Iterative:一開始是因爲你明確地要求它此行的原因:

print "Iterative:", 

只是把它拿出來。


你在每個*之後得到空格的原因有點棘手。 print聲明的「魔術逗號」總是打印一個空格。這是沒有辦法的。所以,你必須做的不是使用print聲明的魔術逗號。

有幾個選項:

  • 從Python的3.x中,您可以在2.7與__future__聲明借使用更強大的print功能。您可以傳遞任何要替換空間的分隔符,即使是空字符串。
  • 使用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)