2017-10-12 110 views
0

我想創建一個函數來小寫所有輸入。蟒蛇小寫函數for循環

到底

我應該能夠爲小寫:

result = lowerList('Jen', 'Suzie') 
print(result) 

到目前爲止我有:

def lowerList(input1, input2): 
    myList = [input1, input2] 
    for x in myList: 
    return(x.lower()) 

result = lowerlist('Jen', 'Suzie') 
print(result) 

所以現在我只能獲得第一個輸入。另外我怎樣才能修改這個連續循環的任何數量的輸入而不修改該功能?

+2

不要返回,當你回到你退出功能 – BlooB

+1

*無需修改功能* < - 你必須修改功能 – wim

回答

1
def to_lower(*args):      
    return [arg.lower() for arg in args] 

>>> to_lower('SPAM', 'Eggs') 
['spam', 'eggs']   
0

您不返回循環,在那裏放棄for循環。相反,一旦循環完成,創建一個新列表,在for循環和amd返回中將低位元素附加到它。

0

這是因爲當你返回for循環停止。你應該做的是將結果字符串追加到列表中並返回。使用你的代碼 爲基礎:

def lowerList(input1, input2): 
    myList = [input1, input2] 
    l = [] 
    for x in myList: 
    l.append(x.lower()) 
    return l 

result = lowerList('Jen', 'Suzie') 
print(result) 
3

你的問題是,你回來對你的for循環的第一次迭代,你只一個元素上操作後。您需要建立一個列表的修改值,然後返回整個列表。

你可以手動執行此操作:

def lower_list(*args): 
    strings = [] 
    for string in args: 
     strings.append(string.lower()) 
    return strings 

但一個更簡單,更優雅的解決方案是使用列表理解:

def lower_list(*args): 
    return [string.lower() for string in args] 

另一種選擇,如果你perfer它,就是用一臺發電機;

def lower_list(*args): 
    for string in args: 
     yield string.lower() 

而且,它還將被用於像這樣:

>>> str_gen = lower_list('Hello', 'WORld', 'Name', 'BUCKs') 
>>> next(str_gen) 
'hello' 
>>> next(str_gen) 
'world' 
>>> next(str_gen) 
'name' 
>>> # etc... 

或者,如果你需要在一次串的整個列表:

>>> list(lower_list('Hello', 'WORld', 'Name', 'BUCKs')) 
['hello', 'world', 'name', 'bucks'] 
+0

謝謝@Christian院長所有偉大的答案對於理解爲環回功能,更好的 – pdangelo4

+0

@ pdangelo4我很高興可以幫助:-) –

0

取決於有多大的名單要得到,使用發電機可能更有效率:

def to_lower(*args):      
    for arg in args: 
     yield arg.lower() 
0

您僅獲取第一個輸入的原因是因爲您只返回第一個輸入。從函數返回後,除非再次調用該函數,否則無法取回該函數。

for myList: return(x。低())

相反,你可以做這樣的事情:

def lowerList(myList): 
    normalList = [] 
    for x in myList: 
    normalList.append(x.lower()) 
    return normalList 

normalList = ['Jen', 'Suzie'] 
result = lowerList(normalList) 
print(result) 

返回,所有的項目小寫一個新的列表,並打印。

希望這會有所幫助!