问题
I am new to Python. I am writing a program that distinguishes whether or not a word starts with a vowel. The problem is, that the program is only able to correctly handle uppercase letters as input. For example, if I provide the word "Apple" as input, the result is True
; however, if the word "apple" is provided as input, the result is False
. How do I fix it?
word = input ("Please Enter a word:")
if (word [1] =="A") :
print("The word begins with a vowel")
elif (word [1] == "E") :
print("The word begins with a vowel")
elif (word [1] == "I") :
print("The word begins with a vowel")
elif (word [1] == "O") :
print("The word begins with a vowel")
elif (word [1] == "U") :
print("The word begins with a vowel")
else:
print ("The word do not begin with a vowel")
回答1:
Convert the word entirely to lowercase (or uppercase) first:
word = input("Please Enter a word:").lower() # Or `.upper()`
Also, to get the first letter of your word, use word[0]
, not word[1]
. Lists are zero-indexed in Python and almost all programming languages.
You can also condense your code by quite a bit:
word = input("Please Enter a word:")
if word[0].lower() in 'aeiou':
print("The word begins with a vowel")
else:
print("The word do not begin with a vowel")
回答2:
Usually you would use str.lower()
(or str.upper()
) on the input to normalise it.
Python3.3 has a new method called str.casefold() which works properly for unicode
回答3:
You could convert the input to upper case before comparing.
回答4:
The check for vowels is done using str.startswith which can accept a tuple of multiple values. PEP 8 Style Guide for Python Code recommends the use of startswith with over string slicing for better readability of code:
Use ''.startswith() and ''.endswith() instead of string slicing to check for prefixes or suffixes.
Conditional Expressions are used to set the message indicating whether the word starts with a vowel or not. Then I used the String Formatting method to prepare the message. Also just as a English grammar correction thing I replaced the sentence "The word do not begin with a vowel" with "The word does not begin with a vowel".
word = input("Please Enter a word:")
is_vowel = 'does' if word.lower().startswith(tuple('aeiou')) else 'does not'
print("The word {} begin with a vowel".format(is_vowel))
回答5:
You should use:
word[i] in 'AEIOUaeiou'
回答6:
1) There are many ways to do what needs to be done, like what Blender said. However, what you are trying to do is to convert the first letter to upper whether the input is upper or lower. Use 'capitalize' to do this.
2) You also need to use word[0], instead of word[1] to get the first letter out
word = raw_input("Please Enter a word: ").capitalize()
if word [0] in "AEIOU" :
print("The word begins with a vowel")
else:
print ("The word does not begin with a vowel")
This will make the first letter in upper case and the rest will remain as is.
来源:https://stackoverflow.com/questions/12719586/how-to-let-python-recognize-both-lower-and-uppercase-input