2017-03-28 16 views
0

我已經開始學習Python上週在codecademy和谷歌等,但卡住了,找不到答案,因此註冊在stackoverflow.com上尋找您的支持。Python - 將list/str中的一些單詞轉爲點。 LEN(名單)?

我試圖建立一個程序,只需要任何名稱的前5個字母和字母的其餘部分顯示爲空白點(s)。例如

Adrian:「亞德里亞。」 Michael:「Micha ..」 Alexander:「Alexa ....」等

我試圖用「b」變量「修復」它,但它只是打印三個點「...」,無論這個名字有多長。

這是我到目前爲止有:

def namecheck(): 
    name = raw_input("Name?") 
    if len(name) <=5: 
    print name 
    else: 
    if len(name) >5: 
     name = name[0:5] 
     b = ("...") 
     print name + b 

namecheck() 

我是一個總的新手,所以我對任何錯誤間距在這裏表示歉意,感謝您的支持和耐心。

+0

爲什麼它會打印任何其他數量的點,因爲您要求它打印3個點?只需計算你需要打印多少個點:'len(name)-5'。 – Julien

+0

'name [:5] +'。'*(len(name)-5)' – Julien

回答

1

作爲替代序列乘(其中一個是較爲自我記錄,並希望不會讓維護者感到困惑),只需要use str.ljust來做你的填充:

def namecheck(): 
    name = raw_input("Name?") 
    # Reduce to first five (or less) characters, then pad with .s to original length 
    # with str.ljust 
    print name[:5].ljust(len(name), '.') 

print name[:5] + '.' * (len(name) - 5)工作正常,它只是有點神祕(也涉及更多的臨時值,雖然在實踐中,缺乏實際的方法調用使其在CPython上更快)。

+0

這簡直就是粉碎 - 謝謝。 – Ramon

0

嘗試這樣的:

def namecheck(): 
    name = raw_input("Name?") 
    if len(name) <= 5: 
    print name 
    else: 
    print name[0:5] + '.' * (len(name)-5) 

namecheck() 
+0

你甚至不需要'if' /'else'。 – Julien

+0

注意:您可以無條件地「填充」在這裏。不要先檢查長度,只要無條件地執行'print name [:5] +'。' *(len(name) - 5)'。 Python序列乘法將負乘數等於零,所以它在沒有顯式測試的情況下表現正確。 – ShadowRanger

+0

@Julien,的確如此 –

1

我能想到的最簡潔的方式:

def namecheck(): 
    name = raw_input("Name?") 
    print(name[0:5] + '.' * (len(name) - 5)) 

namecheck() 
1

您可以嘗試使用函數replace()。

name = 'abcdefg' 
name.replace(name[5:], '.' * len(name[5:])) 
output: 'abcde..' 

name='randy12345' 
name.replace(name[5:],'.' * len(name[5:])) 
output: 'randy.....' 

name[5:]裝置得到起始6(5 + 1,因爲它從0開始)

'.' * len(name[5:]那麼這個碼計數,並通過點 name.replace(name[5:],'.' * len(name[5:]))相乘然後使用替換功能,以取代過量的所有元件帶點的元素

相關問題