2012-09-11 88 views
0

我寫了應該在作出這樣的明星一箱打印Word程序:在同一行上打印函數輸出和字符串?

************ 
*   * 
* danielle * 
*   * 
************ 

不過,我得到以下的輸出:

************ 
*   
None * 
* danielle * 
*   
None * 
************ 

我知道我一直得到「無」的輸出,因爲我不能在同一行上輸出函數print a string。我怎麼能這樣做?

我的代碼如下:

def star_str(length): 
    stars = '*'*length 
    print stars 

def spaces_str(length): 
    spaces = " "*length 
    print spaces 

def frame_word(input_word): 
    length = len(input_word) 
    top_bottom_stars = length + 4 
    spaces_middle = length + 2 

    star_str(top_bottom_stars) 
    print '*', spaces_str(spaces_middle), '*' 
    print '*', input_word, '*' 
    print '*', spaces_str(spaces_middle), '*' 

    star_str(top_bottom_stars) 

print "Please enter a word:", 
input_word = raw_input() 
frame_word(input_word) 

回答

3

你的問題是,我們在調用它打印打印語句中的東西的功能造成的事實。我的建議是spaces_str()star_str()返回的字符串而不是打印它。

更好的是,完全消除這些功能。 " " * 40是完全可讀和慣用的;將它封裝在一個函數中只是更多的字符來輸入,而不增加可讀性。

+0

+1。打印而不是返回字符串的函數幾乎總是一個壞主意。 – asmeurer

0

給予的方法,而不是打印的最後一個return語句,現將您的打印將產生正確的結果

def spaces_str(length): 
    spaces = " "*length 
    return spaces 
print '*', spaces_str(spaces_middle), '*' 
0

我會去與@kindall和return字符串,而不是僅僅打印出來,但也指出,有可能抑制一個明確的換行符的print聲明使用尾隨逗號:

def test_print(): 
    print 'one', 
    print 'two', 
    print 'three' 

test_print() 
# one two three 

然後你不應該寫:

print '*', # suppresses newline 
spaces_str() # this prints using something as above 
print '*' # asterisk and newline