How to let Python recognize both lower and uppercase input?

北城余情 提交于 2019-12-18 09:03:33

问题


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!