-1

问题:

定义一个函数 isVowel(char),如果 char 是元音('a'、'e'、'i'、'o' 或 'u')则返回 True,否则返回 False。您可以假设 char 是任何大小写的单个字母(即,'A' 和 'a' 都是有效的)。

不要使用关键字 in。你的函数应该接受一个字符串并返回一个布尔值。

给出的代码:

def isVowel(char):
    '''
    char: a single letter of any case

    returns: True if char is a vowel and False otherwise.
    '''

我的代码:

def isVowel(char):
    '''
    char: a single letter of any case

    returns: True if char is a vowel and False otherwise.
    '''
    if char == 'a' or 'e' or 'i' or 'o' or 'u' or 'A' or 'E' or 'I' or 'O' or 'U':
        return True
    else:
        return False

我的问题: 我的输出总是 True。我究竟做错了什么?

4

7 回答 7

9

你的 if 语句:

if char == 'a' or 'e' or 'i' or 'o' or 'u' or 'A' or 'E' or 'I' or 'O' or 'U':
        return True

相当于:

if (char == 'a') or 'e' or 'i' or 'o' or 'u' or 'A' or 'E' or 'I' or 'O' or 'U':

which 将始终被评估为要么True,要么e也是True,因此你的函数总是返回True

将您的 if 语句更改为:

if char == 'a' or char == 'e' or char == 'i' so on...:
        return True

但是,如果你可以使用运算符,这个问题就很简单了in。这是这样的:

def isVowel(char):
    return char.lower() in 'aeiou'
于 2013-02-16T21:19:38.187 回答
2
def is_vowel(char):
    try:
            'aeiou'.index(char.lower())
            return True
    except: 
            return False
于 2013-02-17T09:42:17.927 回答
2

Python 读起来不像英语。您希望您的代码能够正常工作,但它的评估如下:

if (char == 'a') or ('b') or ('c') ...

'a'是真实的(不是False, 0,None等),因此您的if陈述将始终评估为True.

要修复您的代码,您必须准确地写出您的意思:

if char == 'a' or char == 'b' or ...

或者只是使用in

if char.lower() in 'aeiou':
    ...
于 2013-02-16T21:20:51.943 回答
2

首先,这就是你应该如何在没有愚蠢限制的情况下做到这一点:

def is_vowel(char):
    return char.lower() in 'aeiou'

由于您不能使用in运算符。我假设infrom 循环是允许的:

def is_vowel(char):
    char = char.lower()
    return any(char == c for c in 'aeiou')

如果这仍然是不行的,这里有一些不是很好但与or其他答案中的链不同的东西:

def is_vowel(char):
    return is_in_list(char.lower(), 'aeiou')

def is_in_list(char, lst):
    if not lst:
        return False
    if char == lst[0]:
        return True
    return is_in_list(char, lst[1:])

最后但并非最不重要的一点是,您可以in在仍然使用其功能的同时避免使用运算符:

def is_vowel(char):
    return 'aeiou'.__contains__(char.lower())

显然,这很可能不是你的教授/老师所期望的——但这会向他表明你很聪明(或者他已经看过这篇文章并且会知道你没有自己做作业)。

于 2013-02-16T21:21:39.700 回答
1
def is_vowel(char):
    return False if 'aeiouAEIOU'.find(char) < 0 else True
于 2013-10-16T02:49:24.627 回答
0

我在我的 Mac 上使用 Xcode,但我认为结果应该是一样的。

//Program: Vowels      
#include < iostream >
#include < cctype >

using namespace std;

bool isVowel (char ch);

int main()    
{
    char ch;

    cout << "Enter a letter and I will tell you if it is a vowel: \n" ;      
    cin >> ch;      
    cout << isVowel(ch) << endl;
}

bool isVowel(char ch)    
{       
    ch= tolower(ch);
    if (ch=='a' || ch=='e' || ch=='i' || ch=='o' || ch=='u') {
        return true;
    }
    return false;
}
于 2013-10-16T02:03:51.657 回答
0
def vowel(char):
    if char.lower() in 'aeiou':
        return True
    if char.upper() in 'AEIOU':
        return TRUE
    else:
        return False
于 2020-05-21T17:37:09.147 回答