2015-11-08 59 views
-4

我正在做一種MadLibs的事情,我需要檢查我的三個變量是否以元音開頭,然後在前面加上「a」或「an」。 我有這個,函數用於檢查變量的字符串是否以元音開頭?

def vowelcheck(variable): 
    if variable[0] == "a" or variable[0] == "e" or variable[0] == "i" or variable[0] == "o" or variable[0] == "u": 
     variable = "an " + variable 
    else: 
     variable = "a " + variable; 

然後

vowelcheck(noun1) 
vowelcheck(noun2) 
vowelcheck(noun3) 
變量後

,但它不會做任何事情的話。 我可以對此做些什麼改變以使其發揮作用?

+2

你的函數不返回任何東西,它的輸入是不可改變的,因此,你的功能是沒有效果。 –

回答

1

函數的'變量'參數是單詞noun1,noun2,nound2的副本。你確實修改'變量',但它不修改名詞。

嘗試,而不是:

def vowelcheck(variable): 
    if variable[0] == "a" or variable[0] == "e" or variable[0] == "i" or variable[0] == "o" or variable[0] == "u": 
     variable = "an " + variable 
    else: 
     variable = "a " + variable 
    return variable 

noun1, noun2, noun3 = (vowelcheck(noun1), vowelcheck(noun2), vowelcheck(noun3)) 
0

在Python中,函數參數是按值傳遞,而不是參考。所以你只是改變本地變量variable,而不是傳入的字符串。

嘗試類似:

def vowelcheck(word): 
    if word[0] in "aeiou": 
     return "an " + word 
    else: 
     return "a " + word 


noun1 = vowelcheck(noun1) 
noun2 = vowelcheck(noun2) 
noun3 = vowelcheck(noun3) 
+1

您按值傳遞參數,但傳遞的值是引用。當你調用'vowelcheck(noun1)'時,你傳遞一個對'noun1'引用的對象的引用。如果'noun1'是一個可變對象,則函數返回後將看到該對象的更改。我明白你的意思,但我相信措辭不清。 – spectras

+0

如果定義'variable''名詞1',我不會得到這個:'noun1 ='door''然後'print vowelcheck(noun1)'會輸出'a door' –