Python string.lower()不工作?

时间:2015-05-11 14:36:03

标签: python case-insensitive

我正在尝试创建一个不区分大小写的用户输入选项。但我认为应该是正确的是不起作用。这是相关的代码片段:

while True:

    search = raw_input("Choose search A or B: ")
    search = search.lower()

    if search != {'A','B'}:
        print "That was not a valid choice."

    else:
        if search == 'A':
            searchAfunction()
        if search == 'B':
            searchBfunction()
        else:
            print "Search again."

我希望用户能够输入' a'或者' A'。 目前,这是我唯一可行的解​​决方案。它看起来不像Pythonic?:

while True:

    search = raw_input("Choose search A or B: ")

    if search != {'A','a','B','b'}:
        print "That was not a valid choice."

else:
    if search in {'A','a'}:
        searchAfunction()
    if search in {'B','b'}:
        searchBfunction()
    else:
        print "Search again."

当我包含search = search.lower()时,我只是陷入"再次搜索"的循环中。 (在完整程序中,这允许用户在完成搜索后选择通过A或B再次搜索)。有什么想法吗?

2 个答案:

答案 0 :(得分:3)

两个问题:

1)而不是

if search != {'A','B'}:

...使用

if search not in {'A', 'B'}:

!=运算符仅用于比较,而不用于集合成员资格。

2)使用search.upper()代替search.lower()(或者,在代码的其余部分使用'a'代替'A' ...)

答案 1 :(得分:1)

你有两个问题:

首先,您使用str.lower将输入转换为小写,然后尝试与if语句中的大写字符进行比较。

其次,search != {'A', 'B'}应该是search not in {'A', 'B'}

将两者放在一起,即可获得if search not in {'a', 'b'}