2015-07-01 126 views
2

如何使用特定項目的輸入打印列表?例如名稱以x結尾。 我有了這個代碼如何使用特定項目從輸入中打印列表

while True: 
    name = input("Enter your name: ") 
    if name == "": 
     break 
    list = [] 
    namex = name.endswith("x") 
    if name == namex: 
     list.append(name) 
    print (list) 

,但是當我嘗試打印列出它給我什麼:

>>> Enter your name: alex 
    Enter your name: james 
    Enter your name: abcx 
    Enter your name: 
>>> 

回答

3

你的問題是,namex是boolean,而不是一個string

>>> 'abc'.endswith("x") 
False 
>>> 'abcx'.endswith("x") 
True 

這意味着字符串和布爾值之間的任何相等比較都將返回false。要觸發的「如果」的聲明,如果聲明以「X」結尾,或:

names = [] 
while True: 
    name = input("Enter your name: ") 
    if name == "": 
     break 
    namex = name.endswith("x") 
    # namex is a boolean type, which if it is True, will trigger an if statement 
    if namex: 
     names.append(name) 
print(names) 
+1

我想打印列表的應該是循環 – jamylak

+0

外公平,編輯。 然後名稱定義應該發生在外面,我忘記了重寫內置列表。 –

2
namex = name.endswith("x") 
if name == namex: 

沒有做什麼,你認爲它。 name.endswith("x")返回TrueFalse。應該是

if name.endswith("x"): 

改爲。

names = [] 
while True: 
    name = input("Enter your name: ") 
    if name == "": 
     break 
    if name.endswith("x"): 
     names.append(name) 
print (names) 

列表理解iter版本:

>>> [name for name in iter(input, '') if name.endswith('x')] 
dsf 
sdfdsf 
dsffdx 
sx 

['dsffdx', 'sx'] 
+0

夥計!你快了43秒! ;) –

+0

Upvoted只是爲了使用列表理解和iter()函數,它會很好,如果你可以添加鏈接到iter()方法 – The6thSense

1

在這裏,我存儲使用list(還內置變量)變量與「X」在namex_list結束,而不是你所使用的所有名稱之前。

此外,我將namex_list分配爲空白列表,然後在while以外的末尾打印namex_list

namex_list = [] 
while True: 
    name = input("Enter your name: ") 
    if name == "": 
     break  
    if name.endswith("x"): 
     namex_list.append(name) 
print (namex_list) 

此外,name == namex不檢查你正在嘗試,因爲字符串值和布爾值之間的比較來實現的。

例如:

>>> name1 = 'abc' 
>>> name2 = 'abcx' 
>>> namex1 = name1.endswith('x') 
>>> namex2 = name2.endswith('x') 

>>> namex1 
False 
>>> namex2 
True 

>>> name1 == namex1  
False 
>>> name2 == namex2 
False 

您應該使用if,而不是達到你想在你上面的代碼來實現的:

if name.endswith("x"):