函数用于检查变量的字符串是否以元音开头?

函数用于检查变量的字符串是否以元音开头?

问题描述:

我正在做一种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

你的函数不返回任何东西,它的输入是不可改变的,因此,你的功能是没有效果。 –

函数的'变量'参数是单词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)) 

在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' –