2012-11-18 70 views
1

Python提供稱爲LEN返回字符串的長度的內置函數,所以len('allen')值爲5用足夠的前導空格打印字符串?

編寫一個名爲right_justify的函數,該函數將一個名爲s的字符串作爲參數,並用足夠的前導空格打印該字符串,以使該字符串的最後一個字母位於顯示的第70列中。

>>> right_justify('allen') 
                 allen 

我解決了它這樣的:

def right_justify(s): 
    print "                 " + s  

right_justify('allen') 

是不是?

是否有內置的Python方法來執行我需要做的事情?

+3

看看[字符串格式](http://docs.python.org/2/library/string.html#formatspec)。 –

+2

Python字符串實際上直接在字符串對象上有兩個內置方法。 'rjust'和'ljust'完全符合你的期望,分別是正確的和合理的。 – Wessie

回答

8

它很容易string formatting

def right_justify(s): 
    print "%70s" % s 
+0

你的解決方案和我一起工作,非常感謝你 –

0

我不會做你的功課你,但這裏是一個簡單的算法:

  1. 找出您的字符串有多長(提示:len())。 (提示:如果你的字符串是5個字符,總長度應該是70,你想打印65個空格)。

  2. 打印的空間。

  3. 打印字符串。

+0

這不是作業,它只是一個問題從這裏http://www.greenteapress.com/thinkpython/html/book004.html 謝謝你無論如何 –

+0

我認爲@Tim試圖避免使用內置的方法假設避免它們是家庭作業任務要求的一部分(情況往往如此)。這是重新創建內置方法的唯一情況。 – jwpfox

1

當然,有一個整潔的小竅門,你可以在這裏申請:

def right_justify(s, total_length=70): 
    return ' ' * (total_length - len(s)) + s 

如果它不是完全清楚,這會打印出total_length - 長度s blankspaces的。

+0

它給了我一個空行??! –

+0

首先,我更喜歡Jochen Ritzel的解決方案,它比我的清潔。但是你沒有得到任何輸出的原因是這個函數返回你的價值。 [返回](http://en.wikipedia.org/wiki/Return_statement)是所有計算機編程中的一個非常基本的陳述,我建議你稍微嘗試一下。 – lfk

3

使用format

In [60]: strs="allen" 

In [61]: format(strs,">70s") 
Out[61]: '                 allen' 

In [62]: format(strs,">70s").index('n') 
Out[62]: 69 

或使用str.format

In [68]: "{0:>70s}".format(strs) 
Out[68]: '                 allen' 
+0

我是新的python,所以你的解決方案讓我困惑了一下,抱歉但是不明白你寫了什麼 –

+0

@BassamBadr這是簡單的字符串格式化,看到我的評論你的問題。 –

0
 def right_justify(s): 
     print((70-len(s))*' '+s) 
+0

當你提供代碼時,你也應該提供解釋,以便問問題的人知道什麼是錯的,你做了什麼以及爲什麼。 – smerny

0
def right_justify(s): 
    print len(s) 
    print ' '* (70 - len(s)) + s 

word = raw_input('enter any word') 
right_justify(word) 
0
def right_justify(s): 
... length=len(s) 
... spaces=70-length 
... print (' ' * spaces) + s 
... 
>>> right_justify('allen') 
0
def right_justify(s): 
    print ('') 
    print ('Number of chars: ' + str(len(s))) 
    print ('') 
    print (' '* (70 - len(s)) + s) 

word = input('Enter any word: ') 
right_justify(word) 
+1

請在SO上堅持英語。 –

0
def right_justify (s): 
    x = ' ' 
    w = (70-len(s))*x + s 
    print (w) 
0

也許我誤解的問題,但似乎已經被賦予只給出正確的結果,如果變量是一個字符長的答案。 我也是編程的新手,所以這可能是基礎。

def right_justify(s): 
     length = len(s) 
     adjustedLength = len(s) -1 
     spaces = 70 - length + adjustedLength 
     print(spaces * " " + "s") 


s = "whatever you want to enter" 
right_justify(s) 

我這樣做,所以無論什麼s的定義爲,你會得到69位,然後「S」。

如果這是錯誤的,讓我知道,所以我可以調整我的思維方式。

0
def right_justify(s): 
    length =len(s) 
    spaces = 70-length 
    print((" " * spaces) + s) 

word = "monty" 
right_justify(word) 

定義之後,長度取決於選擇的詞,而不是(s)...所以你創建公式。長度,空格和打印應該縮進。 必須發明一個變量,以便該字可以從str轉換爲可變格式。

+0

如果's'超過70個字符怎麼辦?最好使用內置的格式化函數,而不是重新實現它們。 –

相關問題