2013-10-29 52 views
0

我無法克服這個小問題。Python - spaces

enter image description here

第二個是正確的。

我怎樣才能打印沒有空格?

def square(n): 
    for i in range(n): 
     for j in range(n): 
      if i==0 or j==0 or i==n-1 or j==n-1: print "*", 
      else: print "+", 
    print 

感謝您的幫助!

+0

我會在打印前在建全行作爲字符串。或者使用Python 3,您可以在其中將「結束」設置爲「'」。 –

回答

10

通過不使用print加逗號;在這種情況下,逗號將插入空格而不是換行符。

使用sys.stdout.write()獲得更多的控制權:

import sys 

def square(n): 
    for i in range(n): 
     for j in range(n): 
      if i==0 or j==0 or i==n-1 or j==n-1: sys.stdout.write("*") 
      else: sys.stdout.write("+") 
     print 

print只是寫入sys.stdout你,雖然它也能處理多個參數,將值轉換爲字符串第一,除非你結束與表達增加了一個新行逗號。

你也可以使用Python 3 print()function在Python 2,並要求它不打印換行符:

from __future__ import print_function 

def square(n): 
    for i in range(n): 
     for j in range(n): 
      if i==0 or j==0 or i==n-1 or j==n-1: print("*", end='') 
      else: print("+", end='') 
     print() 

或者,''.join()先加入字符串:

def square(n): 
    for i in range(n): 
     print ''.join(['*' if i in (0, n-1) or j in (0, n-1) else '+' for j in xrange(n)]) 
+0

謝謝,這工作! – piratteegon

+0

我們可以在Join中刪除''''''並添加'('''''用於Python 3的打印函數調用... ... –

+1

@GrijeshChauhan:請參閱http://stackoverflow.com/a/9061024;對於'''.join()'來說,它更快*是使用列表理解而不是生成器表達式。 –

2

你可以嘗試要使用sys.stdout.write("+")而不是print "+"

0

python 3可以覆蓋打印行爲,這裏將解決你的問題:

print("+", end="") 
+1

不在Python 2中,其中'print'是*語句*,而不是函數。除非你告訴Python編譯器你想使用該函數(通過使用'from __future__ import print_function')。 –

+0

@Wolf在答案中加入此信息將是很好的答案。 –

+0

@Martijn彼得斯:很高興知道,謝謝。 – Wolf